summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2017-07-22 18:44:01 -0500
committerGitHub <noreply@github.com>2017-07-22 18:44:01 -0500
commit5891cedc1bf4c9c95d60e5118c2809895d6191a5 (patch)
treea37133a5c3be531d63b1e2a171c0264a62cd62cc
parent5e80a12ec9fcf2201c070712d8e2dcefe2a0e364 (diff)
parent959f78fe146e75f9ce02b318eb6a8d97652a9996 (diff)
Merge pull request #372 from DizzyEggg/master
decompile battle_4
-rw-r--r--.gitignore1
-rw-r--r--asm/battle_2.s28
-rw-r--r--asm/battle_3.s32
-rw-r--r--asm/battle_4.s32351
-rw-r--r--asm/battle_9.s12
-rw-r--r--data/battle_scripts_1.s200
-rw-r--r--data/battle_scripts_2.s8
-rw-r--r--data/data2a.s (renamed from data/data2.s)775
-rw-r--r--data/data2b.s296
-rw-r--r--include/battle.h354
-rw-r--r--include/pokemon.h7
-rw-r--r--include/rom3.h13
-rw-r--r--ld_script.txt6
-rw-r--r--src/battle_2.c98
-rw-r--r--src/battle_4.c18534
-rw-r--r--src/battle_6.c4
-rw-r--r--src/battle_7.c2
-rw-r--r--src/battle_ai.c36
-rw-r--r--src/rom3.c16
-rw-r--r--src/tv.c24
-rw-r--r--sym_ewram.txt2
21 files changed, 19279 insertions, 33520 deletions
diff --git a/.gitignore b/.gitignore
index ae9ac207b..4e73c4f17 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,4 @@ Thumbs.db
build/
.idea/
*.DS_Store
+*.pl
diff --git a/asm/battle_2.s b/asm/battle_2.s
index ed4140583..4e8d16c7e 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -573,7 +573,7 @@ _080127E0:
str r0, [sp]
movs r0, 0
movs r2, 0x6
- bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f
+ bl EmitChoosePokemon
b _0801289E
.align 2, 0
_08012808: .4byte gActiveBank
@@ -624,7 +624,7 @@ _08012854:
movs r1, 0
_0801286C:
movs r3, 0
- bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f
+ bl EmitChoosePokemon
b _0801289E
.align 2, 0
_08012874: .4byte gActionForBanks
@@ -643,7 +643,7 @@ _08012884:
movs r1, 0
movs r2, 0x6
movs r3, 0
- bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f
+ bl EmitChoosePokemon
_0801289E:
ldr r0, _080128A8 @ =gActiveBank
ldrb r0, [r0]
@@ -2789,7 +2789,7 @@ _08013A04:
beq _08013A0E
b _08013B42
_08013A0E:
- bl sub_80325B8
+ bl BattleMusicStop
ldr r1, _08013A3C @ =gBattlescriptCurrInstr
ldr r0, _08013A40 @ =gUnknown_081D8DBE
str r0, [r1]
@@ -3936,14 +3936,14 @@ _080143B6:
cmp r0, 0x1F
bne _08014404
adds r0, r2, 0
- bl sub_801E3B4
+ bl BankGetTurnOrder
lsls r0, 24
lsrs r0, 24
ldr r1, [sp]
cmp r0, r1
bcs _08014404
ldrb r0, [r4]
- bl sub_801E3B4
+ bl BankGetTurnOrder
lsls r0, 24
lsrs r0, 24
str r0, [sp]
@@ -4261,7 +4261,7 @@ _0801469A:
strb r0, [r5]
_080146AC:
ldr r4, _080146E0 @ =gBattlescriptCurrInstr
- ldr r3, _080146E4 @ =gUnknown_081D6BBC
+ ldr r3, _080146E4 @ =gBattleScriptsEffectsTable
ldr r2, _080146E8 @ =gBattleMoves
ldr r0, _080146EC @ =gCurrentMove
ldrh r1, [r0]
@@ -4288,7 +4288,7 @@ _080146CC:
bx r0
.align 2, 0
_080146E0: .4byte gBattlescriptCurrInstr
-_080146E4: .4byte gUnknown_081D6BBC
+_080146E4: .4byte gBattleScriptsEffectsTable
_080146E8: .4byte gBattleMoves
_080146EC: .4byte gCurrentMove
_080146F0: .4byte gFightStateTracker
@@ -5528,8 +5528,8 @@ _08015148: .4byte 0x00016112
_0801514C: .4byte 0x00017130
thumb_func_end bsC_8016D70
- thumb_func_start sub_8015150
-sub_8015150: @ 8015150
+ thumb_func_start GetBattleBank
+GetBattleBank: @ 8015150
push {lr}
lsls r0, 24
lsrs r0, 24
@@ -5592,10 +5592,10 @@ _080151C8:
bx r1
.align 2, 0
_080151D0: .4byte gBank1
- thumb_func_end sub_8015150
+ thumb_func_end GetBattleBank
- thumb_func_start sub_80151D4
-sub_80151D4: @ 80151D4
+ thumb_func_start PressurePPLose
+PressurePPLose: @ 80151D4
push {r4-r7,lr}
sub sp, 0x4
lsls r0, 24
@@ -5695,7 +5695,7 @@ _08015286:
_08015290: .4byte gDisableStructs
_08015294: .4byte gBitTable
_08015298: .4byte gActiveBank
- thumb_func_end sub_80151D4
+ thumb_func_end PressurePPLose
thumb_func_start sub_801529C
sub_801529C: @ 801529C
diff --git a/asm/battle_3.s b/asm/battle_3.s
index 8f3097c3d..7fc14545c 100644
--- a/asm/battle_3.s
+++ b/asm/battle_3.s
@@ -1819,7 +1819,7 @@ _080166D8:
ldrb r1, [r6]
movs r0, 0x1
movs r2, 0
- bl sub_801A02C
+ bl ItemBattleEffects
lsls r0, 24
cmp r0, 0
beq _080166F2
@@ -1840,7 +1840,7 @@ _08016704:
ldrb r1, [r6]
movs r0, 0x1
movs r2, 0x1
- bl sub_801A02C
+ bl ItemBattleEffects
lsls r0, 24
cmp r0, 0
beq _0801671E
@@ -2576,7 +2576,7 @@ _08016CE0:
strb r0, [r1, 0x3]
movs r0, 0x1
movs r1, 0
- bl sub_801E3EC
+ bl SetMoveEffect
ldrb r0, [r6]
muls r0, r7
adds r0, r5
@@ -3731,7 +3731,7 @@ _08017668:
movs r0, 0x1
movs r1, 0
movs r2, 0x1
- bl sub_801A02C
+ bl ItemBattleEffects
lsls r0, 24
lsrs r0, 24
cmp r0, 0
@@ -3823,8 +3823,8 @@ _08017710: .4byte gUnknown_02024AD0
_08017714: .4byte 0xff7fffff
thumb_func_end b_clear_atk_up_if_hit_flag_unless_enraged
- thumb_func_start sub_8017718
-sub_8017718: @ 8017718
+ thumb_func_start CantUseMove
+CantUseMove: @ 8017718
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -4866,7 +4866,7 @@ _08018008: .4byte 0x02000000
_0801800C: .4byte 0x000160e7
_08018010: .4byte gActiveBank
_08018014: .4byte gUnknown_02024ACC
- thumb_func_end sub_8017718
+ thumb_func_end CantUseMove
thumb_func_start sub_8018018
sub_8018018: @ 8018018
@@ -8668,8 +8668,8 @@ _0801A024: .4byte gBattleMainFunc
_0801A028: .4byte sub_8013FBC
thumb_func_end b_push_move_exec
- thumb_func_start sub_801A02C
-sub_801A02C: @ 801A02C
+ thumb_func_start ItemBattleEffects
+ItemBattleEffects: @ 801A02C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -10938,7 +10938,7 @@ _0801B2BC:
bl b_movescr_stack_push_cursor
movs r0, 0
movs r1, 0
- bl sub_801E3EC
+ bl SetMoveEffect
bl b_movescr_stack_pop_cursor
b _0801B3CA
.align 2, 0
@@ -11049,7 +11049,7 @@ _0801B3FC: .4byte 0x02000000
_0801B400: .4byte 0x00016003
_0801B404: .4byte gBattlescriptCurrInstr
_0801B408: .4byte gUnknown_081D9AA7
- thumb_func_end sub_801A02C
+ thumb_func_end ItemBattleEffects
thumb_func_start unref_sub_801B40C
unref_sub_801B40C: @ 801B40C
@@ -11636,8 +11636,8 @@ _0801B920: .4byte 0x02000000
_0801B924: .4byte 0x00016010
thumb_func_end sub_801B5C0
- thumb_func_start sub_801B928
-sub_801B928: @ 801B928
+ thumb_func_start IsPokeDisobedient
+IsPokeDisobedient: @ 801B928
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -11828,7 +11828,7 @@ _0801BA9E:
ands r5, r4
cmp r5, 0
bne _0801BA9E
- ldr r4, _0801BB18 @ =gUnknown_02024BEA
+ ldr r4, _0801BB18 @ =gRandomMove
ldr r3, _0801BB04 @ =gBattleMons
ldr r0, _0801BB10 @ =gCurrMovePos
ldrb r0, [r0]
@@ -11870,7 +11870,7 @@ _0801BB08: .4byte gBankAttacker
_0801BB0C: .4byte gBitTable
_0801BB10: .4byte gCurrMovePos
_0801BB14: .4byte gUnknown_02024BE5
-_0801BB18: .4byte gUnknown_02024BEA
+_0801BB18: .4byte gRandomMove
_0801BB1C: .4byte gBattleCommunication
_0801BB20: .4byte gDynamicBasePower
_0801BB24: .4byte 0x02000000
@@ -12012,6 +12012,6 @@ _0801BC40: .4byte gBankTarget
_0801BC44: .4byte gBattlescriptCurrInstr
_0801BC48: .4byte gUnknown_081D99A0
_0801BC4C: .4byte gHitMarker
- thumb_func_end sub_801B928
+ thumb_func_end IsPokeDisobedient
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_4.s b/asm/battle_4.s
deleted file mode 100644
index 6747abc6c..000000000
--- a/asm/battle_4.s
+++ /dev/null
@@ -1,32351 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start atk00_attackcanceler
-atk00_attackcanceler: @ 801BC50
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- ldr r0, _0801BC6C @ =gBattleOutcome
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801BC74
- ldr r1, _0801BC70 @ =gFightStateTracker
- movs r0, 0xC
- strb r0, [r1]
- b _0801BFF4
- .align 2, 0
-_0801BC6C: .4byte gBattleOutcome
-_0801BC70: .4byte gFightStateTracker
-_0801BC74:
- ldr r2, _0801BCA4 @ =gBattleMons
- ldr r0, _0801BCA8 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801BCB8
- ldr r2, _0801BCAC @ =gHitMarker
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- bne _0801BCB8
- movs r0, 0x80
- lsls r0, 12
- orrs r1, r0
- str r1, [r2]
- ldr r1, _0801BCB0 @ =gBattlescriptCurrInstr
- ldr r0, _0801BCB4 @ =BattleScript_EndTurn
- b _0801BFF2
- .align 2, 0
-_0801BCA4: .4byte gBattleMons
-_0801BCA8: .4byte gBankAttacker
-_0801BCAC: .4byte gHitMarker
-_0801BCB0: .4byte gBattlescriptCurrInstr
-_0801BCB4: .4byte BattleScript_EndTurn
-_0801BCB8:
- bl sub_8017718
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0801BCC6
- b _0801BFF4
-_0801BCC6:
- ldr r0, _0801BD34 @ =gBankTarget
- ldrb r1, [r0]
- str r2, [sp]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0801BCDE
- b _0801BFF4
-_0801BCDE:
- ldr r4, _0801BD38 @ =gBattleMons
- ldr r0, _0801BD3C @ =gCurrMovePos
- ldrb r1, [r0]
- ldr r3, _0801BD40 @ =gBankAttacker
- ldrb r2, [r3]
- movs r0, 0x58
- muls r2, r0
- adds r1, r2
- adds r0, r4, 0
- adds r0, 0x24
- adds r1, r0
- ldrb r0, [r1]
- ldr r5, _0801BD44 @ =gHitMarker
- cmp r0, 0
- bne _0801BD5C
- ldr r0, _0801BD48 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xA5
- beq _0801BD5C
- ldr r0, [r5]
- ldr r1, _0801BD4C @ =0x00800200
- ands r0, r1
- cmp r0, 0
- bne _0801BD5C
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- bne _0801BD5C
- ldr r1, _0801BD50 @ =gBattlescriptCurrInstr
- ldr r0, _0801BD54 @ =BattleScript_NoPPForMove
- str r0, [r1]
- ldr r2, _0801BD58 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- b _0801BFF4
- .align 2, 0
-_0801BD34: .4byte gBankTarget
-_0801BD38: .4byte gBattleMons
-_0801BD3C: .4byte gCurrMovePos
-_0801BD40: .4byte gBankAttacker
-_0801BD44: .4byte gHitMarker
-_0801BD48: .4byte gCurrentMove
-_0801BD4C: .4byte 0x00800200
-_0801BD50: .4byte gBattlescriptCurrInstr
-_0801BD54: .4byte BattleScript_NoPPForMove
-_0801BD58: .4byte gBattleMoveFlags
-_0801BD5C:
- ldr r0, [r5]
- ldr r1, _0801BDA0 @ =0xff7fffff
- ands r0, r1
- str r0, [r5]
- movs r6, 0x80
- lsls r6, 18
- ands r0, r6
- cmp r0, 0
- bne _0801BDB4
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r1, r4, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- bne _0801BDB4
- bl sub_801B928
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0801BDB4
- cmp r2, 0x2
- bne _0801BDA4
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- b _0801BFF4
- .align 2, 0
-_0801BDA0: .4byte 0xff7fffff
-_0801BDA4:
- ldr r0, _0801BDB0 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _0801BFF4
- .align 2, 0
-_0801BDB0: .4byte gBattleMoveFlags
-_0801BDB4:
- ldr r2, _0801BE18 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 18
- orrs r0, r1
- str r0, [r2]
- ldr r2, _0801BE1C @ =gProtectStructs
- ldr r1, _0801BE20 @ =gBankTarget
- ldrb r3, [r1]
- lsls r0, r3, 4
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 27
- mov r8, r1
- mov r9, r2
- cmp r0, 0
- bge _0801BE3C
- ldr r2, _0801BE24 @ =gBattleMoves
- ldr r0, _0801BE28 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801BE3C
- ldr r0, _0801BE2C @ =gBankAttacker
- ldrb r0, [r0]
- ldr r2, _0801BE30 @ =0x00000115
- adds r1, r3, 0
- bl sub_80151D4
- mov r0, r8
- ldrb r1, [r0]
- lsls r1, 4
- add r1, r9
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801BE34 @ =gBattlescriptCurrInstr
- ldr r0, _0801BE38 @ =BattleScript_MagicCoatBounce
- b _0801BFF2
- .align 2, 0
-_0801BE18: .4byte gHitMarker
-_0801BE1C: .4byte gProtectStructs
-_0801BE20: .4byte gBankTarget
-_0801BE24: .4byte gBattleMoves
-_0801BE28: .4byte gCurrentMove
-_0801BE2C: .4byte gBankAttacker
-_0801BE30: .4byte 0x00000115
-_0801BE34: .4byte gBattlescriptCurrInstr
-_0801BE38: .4byte BattleScript_MagicCoatBounce
-_0801BE3C:
- movs r2, 0
- ldr r0, _0801BEB8 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r2, r0
- bge _0801BE7E
- ldr r6, _0801BEBC @ =gProtectStructs
- ldr r1, _0801BEC0 @ =gBattleMoves
- mov r12, r1
- adds r5, r0, 0
- ldr r7, _0801BEC4 @ =gTurnOrder
-_0801BE50:
- adds r4, r2, r7
- ldrb r3, [r4]
- lsls r0, r3, 4
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _0801BE78
- ldr r0, _0801BEC8 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r1, [r0, 0x8]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0801BE78
- b _0801BFA4
-_0801BE78:
- adds r2, 0x1
- cmp r2, r5
- blt _0801BE50
-_0801BE7E:
- ldr r0, _0801BECC @ =gSpecialStatuses
- mov r1, r8
- ldrb r2, [r1]
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r3, [r1]
- lsls r0, r3, 30
- cmp r0, 0
- bge _0801BEDC
- movs r0, 0x3
- negs r0, r0
- ands r0, r3
- strb r0, [r1]
- ldr r4, _0801BED0 @ =gLastUsedAbility
- movs r0, 0x1F
- strb r0, [r4]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801BED4 @ =gBattlescriptCurrInstr
- ldr r0, _0801BED8 @ =BattleScript_TookAttack
- str r0, [r1]
- mov r2, r8
- ldrb r0, [r2]
- ldrb r1, [r4]
- bl RecordAbilityBattle
- b _0801BFF4
- .align 2, 0
-_0801BEB8: .4byte gNoOfAllBanks
-_0801BEBC: .4byte gProtectStructs
-_0801BEC0: .4byte gBattleMoves
-_0801BEC4: .4byte gTurnOrder
-_0801BEC8: .4byte gCurrentMove
-_0801BECC: .4byte gSpecialStatuses
-_0801BED0: .4byte gLastUsedAbility
-_0801BED4: .4byte gBattlescriptCurrInstr
-_0801BED8: .4byte BattleScript_TookAttack
-_0801BEDC:
- lsls r0, r2, 4
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _0801BEEA
- b _0801BFEC
-_0801BEEA:
- ldr r1, _0801BF80 @ =gBattleMoves
- ldr r2, _0801BF84 @ =gCurrentMove
- ldrh r3, [r2]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x2
- ands r0, r1
- adds r4, r2, 0
- cmp r0, 0
- beq _0801BFEC
- cmp r3, 0xAE
- bne _0801BF28
- ldr r2, _0801BF88 @ =gBattleMons
- ldr r0, _0801BF8C @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _0801BF28
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _0801BFEC
-_0801BF28:
- ldrh r0, [r4]
- bl sub_8028350
- lsls r0, 24
- cmp r0, 0
- beq _0801BF4E
- ldr r1, _0801BF88 @ =gBattleMons
- ldr r0, _0801BF8C @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- beq _0801BFEC
-_0801BF4E:
- ldr r0, _0801BF8C @ =gBankAttacker
- ldrb r0, [r0]
- bl CancelMultiTurnMoves
- ldr r2, _0801BF90 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801BF94 @ =gMoveHitWith
- ldr r3, _0801BF98 @ =gBankTarget
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801BF9C @ =gUnknown_02024C44
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldr r1, _0801BFA0 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x6]
- b _0801BFEC
- .align 2, 0
-_0801BF80: .4byte gBattleMoves
-_0801BF84: .4byte gCurrentMove
-_0801BF88: .4byte gBattleMons
-_0801BF8C: .4byte gBankAttacker
-_0801BF90: .4byte gBattleMoveFlags
-_0801BF94: .4byte gMoveHitWith
-_0801BF98: .4byte gBankTarget
-_0801BF9C: .4byte gUnknown_02024C44
-_0801BFA0: .4byte gBattleCommunication
-_0801BFA4:
- ldr r0, _0801BFD4 @ =gBankAttacker
- ldrb r0, [r0]
- ldr r2, _0801BFD8 @ =0x00000121
- adds r1, r3, 0
- bl sub_80151D4
- ldrb r1, [r4]
- lsls r1, 4
- adds r1, r6
- ldrb r2, [r1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r0, _0801BFDC @ =0x02000000
- ldrb r1, [r4]
- ldr r2, _0801BFE0 @ =0x00016003
- adds r0, r2
- strb r1, [r0]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801BFE4 @ =gBattlescriptCurrInstr
- ldr r0, _0801BFE8 @ =BattleScript_SnatchedMove
- b _0801BFF2
- .align 2, 0
-_0801BFD4: .4byte gBankAttacker
-_0801BFD8: .4byte 0x00000121
-_0801BFDC: .4byte 0x02000000
-_0801BFE0: .4byte 0x00016003
-_0801BFE4: .4byte gBattlescriptCurrInstr
-_0801BFE8: .4byte BattleScript_SnatchedMove
-_0801BFEC:
- ldr r1, _0801C004 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
-_0801BFF2:
- str r0, [r1]
-_0801BFF4:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801C004: .4byte gBattlescriptCurrInstr
- thumb_func_end atk00_attackcanceler
-
- thumb_func_start mcmd_jump_if_move_not_executed
-mcmd_jump_if_move_not_executed: @ 801C008
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r6, r1, 16
- ldr r1, _0801C054 @ =gBattlescriptCurrInstr
- ldr r5, [r1]
- adds r4, r5, r0
- ldr r0, _0801C058 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801C068
- ldr r1, _0801C05C @ =gMoveHitWith
- ldr r3, _0801C060 @ =gBankTarget
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801C064 @ =gUnknown_02024C44
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldrb r4, [r5, 0x1]
- ldrb r0, [r5, 0x2]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r5, 0x3]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r5, 0x4]
- lsls r0, 24
- orrs r4, r0
- b _0801C082
- .align 2, 0
-_0801C054: .4byte gBattlescriptCurrInstr
-_0801C058: .4byte gBattleMoveFlags
-_0801C05C: .4byte gMoveHitWith
-_0801C060: .4byte gBankTarget
-_0801C064: .4byte gUnknown_02024C44
-_0801C068:
- bl b_feature_update_destiny_bond
- ldr r0, _0801C090 @ =gBankTarget
- ldrb r1, [r0]
- str r6, [sp]
- movs r0, 0x3
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801C086
-_0801C082:
- ldr r0, _0801C094 @ =gBattlescriptCurrInstr
- str r4, [r0]
-_0801C086:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801C090: .4byte gBankTarget
-_0801C094: .4byte gBattlescriptCurrInstr
- thumb_func_end mcmd_jump_if_move_not_executed
-
- thumb_func_start atk40_jump_if_move_affected_by_protect
-atk40_jump_if_move_affected_by_protect: @ 801C098
- push {lr}
- ldr r1, _0801C0E0 @ =gProtectStructs
- ldr r0, _0801C0E4 @ =gBankTarget
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _0801C0F8
- ldr r2, _0801C0E8 @ =gBattleMoves
- ldr r0, _0801C0EC @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801C0F8
- ldr r2, _0801C0F0 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x5
- movs r1, 0
- bl mcmd_jump_if_move_not_executed
- ldr r1, _0801C0F4 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x6]
- b _0801C100
- .align 2, 0
-_0801C0E0: .4byte gProtectStructs
-_0801C0E4: .4byte gBankTarget
-_0801C0E8: .4byte gBattleMoves
-_0801C0EC: .4byte gCurrentMove
-_0801C0F0: .4byte gBattleMoveFlags
-_0801C0F4: .4byte gBattleCommunication
-_0801C0F8:
- ldr r1, _0801C104 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0801C100:
- pop {r0}
- bx r0
- .align 2, 0
-_0801C104: .4byte gBattlescriptCurrInstr
- thumb_func_end atk40_jump_if_move_affected_by_protect
-
- thumb_func_start sub_801C108
-sub_801C108: @ 801C108
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- movs r4, 0
- ldr r1, _0801C15C @ =gProtectStructs
- ldr r0, _0801C160 @ =gBankTarget
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _0801C154
- ldr r2, _0801C164 @ =gBattleMoves
- ldr r0, _0801C168 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801C154
- ldr r2, _0801C16C @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x7
- adds r1, r3, 0
- bl mcmd_jump_if_move_not_executed
- ldr r1, _0801C170 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x6]
- movs r4, 0x1
-_0801C154:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0801C15C: .4byte gProtectStructs
-_0801C160: .4byte gBankTarget
-_0801C164: .4byte gBattleMoves
-_0801C168: .4byte gCurrentMove
-_0801C16C: .4byte gBattleMoveFlags
-_0801C170: .4byte gBattleCommunication
- thumb_func_end sub_801C108
-
- thumb_func_start sub_801C174
-sub_801C174: @ 801C174
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r2, _0801C1D4 @ =gStatuses3
- ldr r3, _0801C1D8 @ =gBankTarget
- ldrb r4, [r3]
- lsls r0, r4, 2
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0x18
- ands r1, r0
- adds r6, r2, 0
- cmp r1, 0
- beq _0801C1A6
- ldr r1, _0801C1DC @ =gDisableStructs
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- ldr r1, _0801C1E0 @ =gBankAttacker
- ldrb r0, [r0, 0x15]
- ldrb r1, [r1]
- cmp r0, r1
- beq _0801C290
-_0801C1A6:
- ldr r0, _0801C1E4 @ =gHitMarker
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 9
- ands r1, r2
- adds r2, r0, 0
- cmp r1, 0
- bne _0801C1EC
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801C1EC
-_0801C1C6:
- ldr r0, _0801C1E8 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _0801C290
- .align 2, 0
-_0801C1D4: .4byte gStatuses3
-_0801C1D8: .4byte gBankTarget
-_0801C1DC: .4byte gDisableStructs
-_0801C1E0: .4byte gBankAttacker
-_0801C1E4: .4byte gHitMarker
-_0801C1E8: .4byte gBattleMoveFlags
-_0801C1EC:
- ldr r0, [r2]
- ldr r1, _0801C29C @ =0xfffeffff
- ands r0, r1
- str r0, [r2]
- movs r1, 0x80
- lsls r1, 10
- ands r0, r1
- cmp r0, 0
- bne _0801C20E
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0801C1C6
-_0801C20E:
- ldr r0, [r2]
- ldr r1, _0801C2A0 @ =0xfffdffff
- ands r0, r1
- str r0, [r2]
- movs r1, 0x80
- lsls r1, 11
- ands r0, r1
- cmp r0, 0
- bne _0801C22E
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ands r0, r1
- cmp r0, 0
- bne _0801C1C6
-_0801C22E:
- ldr r0, [r2]
- ldr r1, _0801C2A4 @ =0xfffbffff
- ands r0, r1
- str r0, [r2]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r5, 1
- cmp r0, 0
- bne _0801C27E
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801C27E
- ldr r0, _0801C2A8 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801C27E
- ldr r0, _0801C2AC @ =gBattleMoves
- adds r1, r4, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x98
- beq _0801C290
-_0801C27E:
- ldr r1, _0801C2AC @ =gBattleMoves
- adds r0, r4, r5
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x11
- beq _0801C290
- cmp r0, 0x4E
- bne _0801C2B0
-_0801C290:
- movs r0, 0x7
- adds r1, r5, 0
- bl mcmd_jump_if_move_not_executed
- movs r0, 0x1
- b _0801C2B2
- .align 2, 0
-_0801C29C: .4byte 0xfffeffff
-_0801C2A0: .4byte 0xfffdffff
-_0801C2A4: .4byte 0xfffbffff
-_0801C2A8: .4byte gBattleWeather
-_0801C2AC: .4byte gBattleMoves
-_0801C2B0:
- movs r0, 0
-_0801C2B2:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_801C174
-
- thumb_func_start atk01_accuracycheck
-atk01_accuracycheck: @ 801C2BC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, _0801C314 @ =gBattlescriptCurrInstr
- ldr r5, [r0]
- ldrb r6, [r5, 0x5]
- ldrb r1, [r5, 0x6]
- lsls r1, 8
- orrs r6, r1
- adds r1, r6, 0x2
- lsls r1, 16
- lsrs r1, 16
- adds r7, r0, 0
- cmp r1, 0x1
- bhi _0801C378
- ldr r2, _0801C318 @ =gStatuses3
- ldr r3, _0801C31C @ =gBankTarget
- ldrb r4, [r3]
- lsls r0, r4, 2
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0x18
- ands r1, r0
- cmp r1, 0
- beq _0801C32C
- ldr r0, _0801C320 @ =0x0000ffff
- cmp r6, r0
- bne _0801C32C
- ldr r1, _0801C324 @ =gDisableStructs
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- ldr r1, _0801C328 @ =gBankAttacker
- ldrb r0, [r0, 0x15]
- ldrb r1, [r1]
- cmp r0, r1
- bne _0801C32C
- adds r0, r5, 0x7
- str r0, [r7]
- b _0801C632
- .align 2, 0
-_0801C314: .4byte gBattlescriptCurrInstr
-_0801C318: .4byte gStatuses3
-_0801C31C: .4byte gBankTarget
-_0801C320: .4byte 0x0000ffff
-_0801C324: .4byte gDisableStructs
-_0801C328: .4byte gBankAttacker
-_0801C32C:
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldr r1, _0801C358 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _0801C35C
- ldr r2, [r7]
- 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, [r7]
- b _0801C632
- .align 2, 0
-_0801C358: .4byte 0x000400c0
-_0801C35C:
- movs r0, 0
- bl sub_801C108
- lsls r0, 24
- cmp r0, 0
- beq _0801C36A
- b _0801C632
-_0801C36A:
- ldr r1, _0801C374 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x7
- str r0, [r1]
- b _0801C632
- .align 2, 0
-_0801C374: .4byte gBattlescriptCurrInstr
-_0801C378:
- cmp r6, 0
- bne _0801C380
- ldr r0, _0801C398 @ =gCurrentMove
- ldrh r6, [r0]
-_0801C380:
- ldr r0, _0801C39C @ =0x02000000
- ldr r1, _0801C3A0 @ =0x0001601c
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801C3A4
- movs r2, 0x3F
- mov r10, r2
- mov r3, r10
- ands r3, r0
- mov r10, r3
- b _0801C3B2
- .align 2, 0
-_0801C398: .4byte gCurrentMove
-_0801C39C: .4byte 0x02000000
-_0801C3A0: .4byte 0x0001601c
-_0801C3A4:
- ldr r1, _0801C3F8 @ =gBattleMoves
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x2]
- mov r10, r0
-_0801C3B2:
- adds r0, r6, 0
- bl sub_801C108
- lsls r0, 24
- cmp r0, 0
- beq _0801C3C0
- b _0801C632
-_0801C3C0:
- adds r0, r6, 0
- bl sub_801C174
- lsls r0, 24
- cmp r0, 0
- beq _0801C3CE
- b _0801C632
-_0801C3CE:
- ldr r3, _0801C3FC @ =gBattleMons
- ldr r0, _0801C400 @ =gBankTarget
- ldrb r0, [r0]
- movs r2, 0x58
- adds r4, r0, 0
- muls r4, r2
- adds r0, r3, 0
- adds r0, 0x50
- adds r0, r4, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801C408
- ldr r0, _0801C404 @ =gBankAttacker
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- ldrb r5, [r0, 0x1E]
- b _0801C41E
- .align 2, 0
-_0801C3F8: .4byte gBattleMoves
-_0801C3FC: .4byte gBattleMons
-_0801C400: .4byte gBankTarget
-_0801C404: .4byte gBankAttacker
-_0801C408:
- ldr r0, _0801C56C @ =gBankAttacker
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- ldrb r0, [r0, 0x1E]
- adds r0, 0x6
- adds r1, r4, r3
- ldrb r1, [r1, 0x1F]
- subs r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
-_0801C41E:
- lsls r0, r5, 24
- cmp r0, 0
- bge _0801C426
- movs r5, 0
-_0801C426:
- lsls r0, r5, 24
- asrs r0, 24
- cmp r0, 0xC
- ble _0801C430
- movs r5, 0xC
-_0801C430:
- ldr r1, _0801C570 @ =gBattleMoves
- lsls r4, r6, 1
- adds r0, r4, r6
- lsls r0, 2
- adds r7, r0, r1
- ldrb r0, [r7, 0x3]
- mov r8, r0
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- str r4, [sp, 0x4]
- cmp r0, 0
- bne _0801C482
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801C482
- ldr r0, _0801C574 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0801C482
- ldrb r0, [r7]
- cmp r0, 0x98
- bne _0801C482
- movs r1, 0x32
- mov r8, r1
-_0801C482:
- ldr r1, _0801C578 @ =gAccuracyStageRatios
- lsls r0, r5, 24
- asrs r0, 22
- adds r0, r1
- ldrb r1, [r0]
- mov r4, r8
- muls r4, r1
- ldrb r1, [r0, 0x1]
- adds r0, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r7, _0801C57C @ =gBattleMons
- ldr r0, _0801C56C @ =gBankAttacker
- ldrb r0, [r0]
- movs r5, 0x58
- muls r0, r5
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0xE
- bne _0801C4C0
- lsls r0, r4, 6
- adds r0, r4
- lsls r0, 1
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801C4C0:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0801C518
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801C518
- ldr r0, _0801C580 @ =gBankTarget
- ldrb r0, [r0]
- muls r0, r5
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _0801C518
- ldr r0, _0801C574 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x18
- ands r0, r1
- cmp r0, 0
- beq _0801C518
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801C518:
- ldr r2, _0801C57C @ =gBattleMons
- ldr r0, _0801C56C @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- mov r9, r2
- cmp r0, 0x37
- bne _0801C544
- mov r2, r10
- cmp r2, 0x8
- bhi _0801C544
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801C544:
- ldr r3, _0801C580 @ =gBankTarget
- mov r8, r3
- ldrb r2, [r3]
- movs r7, 0x58
- adds r0, r2, 0
- muls r0, r7
- mov r3, r9
- adds r1, r0, r3
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0801C588
- ldr r1, _0801C584 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x7]
- ldrb r2, [r0, 0x1A]
- b _0801C5A4
- .align 2, 0
-_0801C56C: .4byte gBankAttacker
-_0801C570: .4byte gBattleMoves
-_0801C574: .4byte gBattleWeather
-_0801C578: .4byte gAccuracyStageRatios
-_0801C57C: .4byte gBattleMons
-_0801C580: .4byte gBankTarget
-_0801C584: .4byte gEnigmaBerries
-_0801C588:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r5, r0, 24
- mov r1, r8
- ldrb r0, [r1]
- muls r0, r7
- add r0, r9
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r2, r0, 24
-_0801C5A4:
- ldr r0, _0801C608 @ =gStringBank
- ldr r1, _0801C60C @ =gBankTarget
- ldrb r1, [r1]
- strb r1, [r0]
- cmp r5, 0x16
- bne _0801C5C0
- movs r0, 0x64
- subs r0, r2
- muls r0, r4
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801C5C0:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- adds r0, 0x1
- cmp r0, r4
- ble _0801C62A
- ldr r2, _0801C610 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0801C614 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0801C620
- ldr r1, _0801C618 @ =gBattleMoves
- ldr r2, [sp, 0x4]
- adds r0, r2, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x6]
- cmp r0, 0x8
- beq _0801C602
- cmp r0, 0x20
- bne _0801C620
-_0801C602:
- ldr r1, _0801C61C @ =gBattleCommunication
- movs r0, 0x2
- b _0801C624
- .align 2, 0
-_0801C608: .4byte gStringBank
-_0801C60C: .4byte gBankTarget
-_0801C610: .4byte gBattleMoveFlags
-_0801C614: .4byte gBattleTypeFlags
-_0801C618: .4byte gBattleMoves
-_0801C61C: .4byte gBattleCommunication
-_0801C620:
- ldr r1, _0801C644 @ =gBattleCommunication
- movs r0, 0
-_0801C624:
- strb r0, [r1, 0x6]
- bl b_wonderguard_and_levitate
-_0801C62A:
- movs r0, 0x7
- adds r1, r6, 0
- bl mcmd_jump_if_move_not_executed
-_0801C632:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801C644: .4byte gBattleCommunication
- thumb_func_end atk01_accuracycheck
-
- thumb_func_start atk02_attackstring
-atk02_attackstring: @ 801C648
- push {r4,r5,lr}
- ldr r0, _0801C688 @ =gBattleExecBuffer
- ldr r5, [r0]
- cmp r5, 0
- bne _0801C680
- ldr r4, _0801C68C @ =gHitMarker
- ldr r0, [r4]
- movs r1, 0xC0
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- bne _0801C674
- ldr r0, _0801C690 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x4
- bl PrepareStringBattle
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 3
- orrs r0, r1
- str r0, [r4]
-_0801C674:
- ldr r0, _0801C694 @ =gBattlescriptCurrInstr
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- ldr r0, _0801C698 @ =gBattleCommunication
- strb r5, [r0, 0x7]
-_0801C680:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801C688: .4byte gBattleExecBuffer
-_0801C68C: .4byte gHitMarker
-_0801C690: .4byte gBankAttacker
-_0801C694: .4byte gBattlescriptCurrInstr
-_0801C698: .4byte gBattleCommunication
- thumb_func_end atk02_attackstring
-
- thumb_func_start atk03_ppreduce
-atk03_ppreduce: @ 801C69C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r6, 0x1
- ldr r0, _0801C6EC @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _0801C6B4
- b _0801C84E
-_0801C6B4:
- ldr r1, _0801C6F0 @ =gSpecialStatuses
- ldr r2, _0801C6F4 @ =gBankAttacker
- ldrb r3, [r2]
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r4, r0, 31
- mov r9, r2
- cmp r4, 0
- bne _0801C756
- ldr r2, _0801C6F8 @ =gBattleMoves
- ldr r0, _0801C6FC @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x6]
- cmp r0, 0x20
- beq _0801C706
- cmp r0, 0x20
- bgt _0801C700
- cmp r0, 0x8
- beq _0801C71C
- b _0801C736
- .align 2, 0
-_0801C6EC: .4byte gBattleExecBuffer
-_0801C6F0: .4byte gSpecialStatuses
-_0801C6F4: .4byte gBankAttacker
-_0801C6F8: .4byte gBattleMoves
-_0801C6FC: .4byte gCurrentMove
-_0801C700:
- cmp r0, 0x40
- beq _0801C71C
- b _0801C736
-_0801C706:
- str r4, [sp]
- movs r0, 0x12
- adds r1, r3, 0
- movs r2, 0x2E
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0, 0x1
- b _0801C756
-_0801C71C:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x10
- movs r2, 0x2E
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0
- b _0801C756
-_0801C736:
- ldr r1, _0801C7B8 @ =gBankTarget
- mov r2, r9
- ldrb r0, [r2]
- ldrb r7, [r1]
- cmp r0, r7
- beq _0801C756
- ldr r2, _0801C7BC @ =gBattleMons
- ldrb r1, [r1]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2E
- bne _0801C756
- adds r6, 0x1
-_0801C756:
- ldr r0, _0801C7C0 @ =gHitMarker
- ldr r4, [r0]
- movs r0, 0xA0
- lsls r0, 4
- ands r4, r0
- cmp r4, 0
- bne _0801C83C
- ldr r2, _0801C7BC @ =gBattleMons
- ldr r3, _0801C7C4 @ =gCurrMovePos
- ldr r1, _0801C7C8 @ =gBankAttacker
- ldrb r5, [r1]
- movs r0, 0x58
- mov r8, r0
- mov r0, r8
- muls r0, r5
- ldrb r7, [r3]
- adds r0, r7
- movs r7, 0x24
- adds r7, r2
- mov r12, r7
- add r0, r12
- ldrb r0, [r0]
- mov r9, r1
- mov r10, r2
- adds r7, r3, 0
- cmp r0, 0
- beq _0801C83C
- ldr r0, _0801C7CC @ =gProtectStructs
- lsls r1, r5, 4
- adds r1, r0
- ldrb r0, [r1, 0x2]
- movs r2, 0x8
- orrs r0, r2
- strb r0, [r1, 0x2]
- mov r1, r9
- ldrb r0, [r1]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- ldrb r1, [r7]
- adds r0, r1
- mov r1, r12
- adds r2, r0, r1
- ldrb r0, [r2]
- cmp r0, r6
- ble _0801C7D0
- subs r0, r6
- strb r0, [r2]
- b _0801C7D2
- .align 2, 0
-_0801C7B8: .4byte gBankTarget
-_0801C7BC: .4byte gBattleMons
-_0801C7C0: .4byte gHitMarker
-_0801C7C4: .4byte gCurrMovePos
-_0801C7C8: .4byte gBankAttacker
-_0801C7CC: .4byte gProtectStructs
-_0801C7D0:
- strb r4, [r2]
-_0801C7D2:
- mov r2, r9
- ldrb r3, [r2]
- movs r4, 0x58
- adds r0, r3, 0
- muls r0, r4
- mov r1, r10
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _0801C83C
- ldr r1, _0801C860 @ =gDisableStructs
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _0801C864 @ =gBitTable
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0801C83C
- ldr r0, _0801C868 @ =gActiveBank
- strb r3, [r0]
- ldrb r1, [r7]
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- mov r2, r9
- ldrb r0, [r2]
- muls r0, r4
- mov r2, r10
- adds r2, 0x24
- adds r0, r2
- ldrb r7, [r7]
- adds r0, r7
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetAttributes
- mov r7, r9
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
-_0801C83C:
- ldr r2, _0801C86C @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0801C870 @ =0xfffff7ff
- ands r0, r1
- str r0, [r2]
- ldr r1, _0801C874 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801C84E:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801C860: .4byte gDisableStructs
-_0801C864: .4byte gBitTable
-_0801C868: .4byte gActiveBank
-_0801C86C: .4byte gHitMarker
-_0801C870: .4byte 0xfffff7ff
-_0801C874: .4byte gBattlescriptCurrInstr
- thumb_func_end atk03_ppreduce
-
- thumb_func_start atk04_critcalc
-atk04_critcalc: @ 801C878
- push {r4-r7,lr}
- ldr r1, _0801C89C @ =gBattleMons
- ldr r0, _0801C8A0 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- cmp r0, 0xAF
- bne _0801C8A8
- ldr r1, _0801C8A4 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r6, [r0, 0x7]
- b _0801C8B0
- .align 2, 0
-_0801C89C: .4byte gBattleMons
-_0801C8A0: .4byte gBankAttacker
-_0801C8A4: .4byte gEnigmaBerries
-_0801C8A8:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r6, r0, 24
-_0801C8B0:
- ldr r1, _0801C93C @ =gStringBank
- ldr r3, _0801C940 @ =gBankAttacker
- ldrb r0, [r3]
- strb r0, [r1]
- ldr r4, _0801C944 @ =gBattleMons
- ldrb r1, [r3]
- movs r0, 0x58
- adds r7, r1, 0
- muls r7, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r7, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- negs r0, r0
- asrs r5, r0, 31
- movs r0, 0x2
- ands r5, r0
- ldr r2, _0801C948 @ =gBattleMoves
- ldr r0, _0801C94C @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- mov r12, r3
- cmp r1, 0x2B
- bne _0801C8F0
- adds r5, 0x1
-_0801C8F0:
- adds r0, r5, 0
- cmp r1, 0x4B
- bne _0801C8F8
- adds r0, 0x1
-_0801C8F8:
- cmp r1, 0xC8
- bne _0801C8FE
- adds r0, 0x1
-_0801C8FE:
- adds r2, r0, 0
- cmp r1, 0xD1
- bne _0801C906
- adds r2, 0x1
-_0801C906:
- movs r1, 0
- cmp r6, 0x3F
- bne _0801C916
- adds r0, r7, r4
- ldrh r0, [r0]
- cmp r0, 0x71
- bne _0801C916
- movs r1, 0x1
-_0801C916:
- lsls r5, r1, 1
- movs r3, 0
- cmp r6, 0x42
- bne _0801C930
- mov r0, r12
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0x53
- bne _0801C930
- movs r3, 0x1
-_0801C930:
- lsls r1, r3, 1
- cmp r6, 0x29
- bne _0801C950
- adds r0, r5, 0x1
- adds r0, r2, r0
- b _0801C952
- .align 2, 0
-_0801C93C: .4byte gStringBank
-_0801C940: .4byte gBankAttacker
-_0801C944: .4byte gBattleMons
-_0801C948: .4byte gBattleMoves
-_0801C94C: .4byte gCurrentMove
-_0801C950:
- adds r0, r2, r5
-_0801C952:
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- adds r5, r0, 0
- cmp r5, 0x4
- bls _0801C960
- movs r5, 0x4
-_0801C960:
- ldr r0, _0801C9BC @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r4
- adds r0, 0x20
- ldrb r4, [r0]
- cmp r4, 0x4
- beq _0801C9D0
- cmp r4, 0x4B
- beq _0801C9D0
- ldr r1, _0801C9C0 @ =gStatuses3
- mov r2, r12
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- bne _0801C9D0
- ldr r0, _0801C9C4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x84
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- bne _0801C9D0
- bl Random
- ldr r2, _0801C9C8 @ =gCriticalHitChance
- lsls r1, r5, 1
- adds r1, r2
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r1]
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _0801C9D0
- ldr r1, _0801C9CC @ =gCritMultiplier
- movs r0, 0x2
- b _0801C9D4
- .align 2, 0
-_0801C9BC: .4byte gBankTarget
-_0801C9C0: .4byte gStatuses3
-_0801C9C4: .4byte gBattleTypeFlags
-_0801C9C8: .4byte gCriticalHitChance
-_0801C9CC: .4byte gCritMultiplier
-_0801C9D0:
- ldr r1, _0801C9E4 @ =gCritMultiplier
- movs r0, 0x1
-_0801C9D4:
- strb r0, [r1]
- ldr r1, _0801C9E8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801C9E4: .4byte gCritMultiplier
-_0801C9E8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk04_critcalc
-
- thumb_func_start atk05_damagecalc1
-atk05_damagecalc1: @ 801C9EC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- ldr r4, _0801CABC @ =gSideAffecting
- ldr r6, _0801CAC0 @ =gBankTarget
- ldrb r0, [r6]
- bl GetBankIdentity
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldr r0, _0801CAC4 @ =gBankAttacker
- mov r8, r0
- ldrb r0, [r0]
- movs r4, 0x58
- muls r0, r4
- ldr r2, _0801CAC8 @ =gBattleMons
- adds r0, r2
- ldrb r1, [r6]
- muls r1, r4
- adds r1, r2
- ldr r2, _0801CACC @ =gCurrentMove
- mov r9, r2
- ldrh r2, [r2]
- ldr r4, _0801CAD0 @ =gDynamicBasePower
- ldrh r4, [r4]
- str r4, [sp]
- ldr r5, _0801CAD4 @ =0x02000000
- ldr r7, _0801CAD8 @ =0x0001601c
- adds r4, r5, r7
- ldrb r4, [r4]
- str r4, [sp, 0x4]
- mov r7, r8
- ldrb r4, [r7]
- str r4, [sp, 0x8]
- ldrb r4, [r6]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- ldr r4, _0801CADC @ =gBattleMoveDamage
- ldr r1, _0801CAE0 @ =gCritMultiplier
- ldrb r1, [r1]
- muls r1, r0
- ldr r0, _0801CAE4 @ =0x0001601f
- adds r5, r0
- ldrb r0, [r5]
- adds r3, r1, 0
- muls r3, r0
- str r3, [r4]
- ldr r1, _0801CAE8 @ =gStatuses3
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _0801CA82
- ldr r2, _0801CAEC @ =gBattleMoves
- mov r7, r9
- ldrh r1, [r7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- cmp r0, 0xD
- bne _0801CA82
- lsls r0, r3, 1
- str r0, [r4]
-_0801CA82:
- ldr r1, _0801CAF0 @ =gProtectStructs
- ldr r0, _0801CAC4 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- bge _0801CAA4
- ldr r4, _0801CADC @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0801CAA4:
- ldr r1, _0801CAF4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801CABC: .4byte gSideAffecting
-_0801CAC0: .4byte gBankTarget
-_0801CAC4: .4byte gBankAttacker
-_0801CAC8: .4byte gBattleMons
-_0801CACC: .4byte gCurrentMove
-_0801CAD0: .4byte gDynamicBasePower
-_0801CAD4: .4byte 0x02000000
-_0801CAD8: .4byte 0x0001601c
-_0801CADC: .4byte gBattleMoveDamage
-_0801CAE0: .4byte gCritMultiplier
-_0801CAE4: .4byte 0x0001601f
-_0801CAE8: .4byte gStatuses3
-_0801CAEC: .4byte gBattleMoves
-_0801CAF0: .4byte gProtectStructs
-_0801CAF4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk05_damagecalc1
-
- thumb_func_start AI_CalcDmg
-AI_CalcDmg: @ 801CAF8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- adds r5, r1, 0
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r4, _0801CBBC @ =gSideAffecting
- adds r0, r5, 0
- bl GetBankIdentity
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- movs r1, 0x58
- adds r0, r7, 0
- muls r0, r1
- ldr r2, _0801CBC0 @ =gBattleMons
- adds r0, r2
- muls r1, r5
- adds r1, r2
- ldr r2, _0801CBC4 @ =gCurrentMove
- mov r9, r2
- ldrh r2, [r2]
- ldr r4, _0801CBC8 @ =gDynamicBasePower
- mov r8, r4
- ldrh r4, [r4]
- str r4, [sp]
- ldr r6, _0801CBCC @ =0x02000000
- ldr r4, _0801CBD0 @ =0x0001601c
- ldrb r4, [r4, r6]
- str r4, [sp, 0x4]
- str r7, [sp, 0x8]
- str r5, [sp, 0xC]
- bl CalculateBaseDamage
- ldr r4, _0801CBD4 @ =gBattleMoveDamage
- movs r1, 0
- mov r2, r8
- strh r1, [r2]
- ldr r1, _0801CBD8 @ =gCritMultiplier
- ldrb r1, [r1]
- muls r1, r0
- ldr r0, _0801CBDC @ =0x0001601f
- adds r6, r0
- ldrb r0, [r6]
- adds r3, r1, 0
- muls r3, r0
- str r3, [r4]
- ldr r1, _0801CBE0 @ =gStatuses3
- lsls r0, r7, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _0801CB8E
- ldr r2, _0801CBE4 @ =gBattleMoves
- mov r6, r9
- ldrh r1, [r6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- cmp r0, 0xD
- bne _0801CB8E
- lsls r0, r3, 1
- str r0, [r4]
-_0801CB8E:
- ldr r0, _0801CBE8 @ =gProtectStructs
- lsls r1, r7, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 28
- cmp r0, 0
- bge _0801CBAC
- ldr r4, _0801CBD4 @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0801CBAC:
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801CBBC: .4byte gSideAffecting
-_0801CBC0: .4byte gBattleMons
-_0801CBC4: .4byte gCurrentMove
-_0801CBC8: .4byte gDynamicBasePower
-_0801CBCC: .4byte 0x02000000
-_0801CBD0: .4byte 0x0001601c
-_0801CBD4: .4byte gBattleMoveDamage
-_0801CBD8: .4byte gCritMultiplier
-_0801CBDC: .4byte 0x0001601f
-_0801CBE0: .4byte gStatuses3
-_0801CBE4: .4byte gBattleMoves
-_0801CBE8: .4byte gProtectStructs
- thumb_func_end AI_CalcDmg
-
- thumb_func_start battle_attack_damage_modulate_by_effectivity
-battle_attack_damage_modulate_by_effectivity: @ 801CBEC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, _0801CC1C @ =gBattleMoveDamage
- ldr r0, [r5]
- muls r0, r4
- movs r1, 0xA
- bl __divsi3
- str r0, [r5]
- cmp r0, 0
- bne _0801CC0C
- cmp r4, 0
- beq _0801CC0C
- movs r0, 0x1
- str r0, [r5]
-_0801CC0C:
- cmp r4, 0x5
- beq _0801CC3C
- cmp r4, 0x5
- bgt _0801CC20
- cmp r4, 0
- beq _0801CC26
- b _0801CCBE
- .align 2, 0
-_0801CC1C: .4byte gBattleMoveDamage
-_0801CC20:
- cmp r4, 0x14
- beq _0801CC7C
- b _0801CCBE
-_0801CC26:
- ldr r2, _0801CC38 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- movs r1, 0xFB
- ands r0, r1
- movs r1, 0xFD
- ands r0, r1
- b _0801CCBC
- .align 2, 0
-_0801CC38: .4byte gBattleMoveFlags
-_0801CC3C:
- ldr r2, _0801CC6C @ =gBattleMoves
- ldr r0, _0801CC70 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801CCBE
- ldr r2, _0801CC74 @ =gBattleMoveFlags
- ldrb r1, [r2]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801CCBE
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801CC78
- movs r0, 0xFD
- ands r0, r1
- b _0801CCBC
- .align 2, 0
-_0801CC6C: .4byte gBattleMoves
-_0801CC70: .4byte gCurrentMove
-_0801CC74: .4byte gBattleMoveFlags
-_0801CC78:
- movs r0, 0x4
- b _0801CCBA
-_0801CC7C:
- ldr r2, _0801CCAC @ =gBattleMoves
- ldr r0, _0801CCB0 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801CCBE
- ldr r2, _0801CCB4 @ =gBattleMoveFlags
- ldrb r1, [r2]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801CCBE
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801CCB8
- movs r0, 0xFB
- ands r0, r1
- b _0801CCBC
- .align 2, 0
-_0801CCAC: .4byte gBattleMoves
-_0801CCB0: .4byte gCurrentMove
-_0801CCB4: .4byte gBattleMoveFlags
-_0801CCB8:
- movs r0, 0x2
-_0801CCBA:
- orrs r0, r1
-_0801CCBC:
- strb r0, [r2]
-_0801CCBE:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end battle_attack_damage_modulate_by_effectivity
-
- thumb_func_start atk06_typecalc
-atk06_typecalc: @ 801CCC4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r3, 0
- ldr r1, _0801CCF0 @ =gCurrentMove
- ldrh r0, [r1]
- cmp r0, 0xA5
- bne _0801CCD8
- b _0801CEF4
-_0801CCD8:
- ldr r0, _0801CCF4 @ =0x02000000
- ldr r2, _0801CCF8 @ =0x0001601c
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801CCFC
- movs r1, 0x3F
- mov r8, r1
- mov r2, r8
- ands r2, r0
- mov r8, r2
- b _0801CD0C
- .align 2, 0
-_0801CCF0: .4byte gCurrentMove
-_0801CCF4: .4byte 0x02000000
-_0801CCF8: .4byte 0x0001601c
-_0801CCFC:
- ldr r2, _0801CD94 @ =gBattleMoves
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- mov r8, r0
-_0801CD0C:
- ldr r2, _0801CD98 @ =gBattleMons
- ldr r0, _0801CD9C @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- adds r5, r2, 0
- cmp r0, r8
- beq _0801CD2E
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r8
- bne _0801CD44
-_0801CD2E:
- ldr r4, _0801CDA0 @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- str r0, [r4]
- movs r1, 0xA
- str r3, [sp, 0x4]
- bl __divsi3
- str r0, [r4]
- ldr r3, [sp, 0x4]
-_0801CD44:
- ldr r2, _0801CDA4 @ =gBankTarget
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r2, 0
- cmp r0, 0x1A
- bne _0801CDBC
- mov r1, r8
- cmp r1, 0x4
- bne _0801CDBC
- ldr r3, _0801CDA8 @ =gLastUsedAbility
- strb r0, [r3]
- ldr r2, _0801CDAC @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x9
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801CDB0 @ =gMoveHitWith
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801CDB4 @ =gUnknown_02024C44
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldr r0, _0801CDB8 @ =gBattleCommunication
- mov r2, r8
- strb r2, [r0, 0x6]
- ldrb r0, [r4]
- ldrb r1, [r3]
- bl RecordAbilityBattle
- b _0801CE58
- .align 2, 0
-_0801CD94: .4byte gBattleMoves
-_0801CD98: .4byte gBattleMons
-_0801CD9C: .4byte gBankAttacker
-_0801CDA0: .4byte gBattleMoveDamage
-_0801CDA4: .4byte gBankTarget
-_0801CDA8: .4byte gLastUsedAbility
-_0801CDAC: .4byte gBattleMoveFlags
-_0801CDB0: .4byte gMoveHitWith
-_0801CDB4: .4byte gUnknown_02024C44
-_0801CDB8: .4byte gBattleCommunication
-_0801CDBC:
- ldr r1, _0801CDC8 @ =gTypeEffectiveness
- adds r0, r3, r1
- ldrb r0, [r0]
- adds r2, r1, 0
- b _0801CE38
- .align 2, 0
-_0801CDC8: .4byte gTypeEffectiveness
-_0801CDCC:
- adds r3, 0x3
- b _0801CE34
-_0801CDD0:
- ldr r5, _0801CF08 @ =gTypeEffectiveness
- adds r0, r3, r5
- ldrb r0, [r0]
- cmp r0, r8
- bne _0801CE2C
- adds r1, r3, 0x1
- adds r1, r5
- ldr r2, _0801CF0C @ =gBattleMons
- ldr r7, _0801CF10 @ =gBankTarget
- ldrb r0, [r7]
- movs r6, 0x58
- muls r0, r6
- adds r0, r2
- adds r0, 0x21
- ldrb r4, [r1]
- ldrb r0, [r0]
- cmp r4, r0
- bne _0801CE06
- adds r0, r3, 0x2
- adds r0, r5
- ldrb r0, [r0]
- str r2, [sp]
- str r3, [sp, 0x4]
- bl battle_attack_damage_modulate_by_effectivity
- ldr r3, [sp, 0x4]
- ldr r2, [sp]
-_0801CE06:
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r2
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r1, [r1]
- cmp r4, r1
- bne _0801CE2C
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r4
- beq _0801CE2C
- adds r0, r3, 0x2
- adds r0, r5
- ldrb r0, [r0]
- str r3, [sp, 0x4]
- bl battle_attack_damage_modulate_by_effectivity
- ldr r3, [sp, 0x4]
-_0801CE2C:
- adds r3, 0x3
- ldr r5, _0801CF0C @ =gBattleMons
- ldr r4, _0801CF10 @ =gBankTarget
- ldr r2, _0801CF08 @ =gTypeEffectiveness
-_0801CE34:
- adds r0, r3, r2
- ldrb r0, [r0]
-_0801CE38:
- cmp r0, 0xFF
- beq _0801CE58
- cmp r0, 0xFE
- bne _0801CDD0
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r1, r5, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801CDCC
-_0801CE58:
- ldr r2, _0801CF0C @ =gBattleMons
- ldr r5, _0801CF10 @ =gBankTarget
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r6, [r0]
- cmp r6, 0x19
- bne _0801CED6
- ldr r0, _0801CF14 @ =gBankAttacker
- ldrb r0, [r0]
- ldr r7, _0801CF18 @ =gCurrentMove
- ldrh r1, [r7]
- bl move_weather_interaction
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0801CED6
- ldr r1, _0801CF1C @ =gBattleMoveFlags
- mov r8, r1
- ldrb r4, [r1]
- ands r0, r4
- cmp r0, 0
- beq _0801CE94
- movs r0, 0x6
- ands r0, r4
- cmp r0, 0x6
- bne _0801CED6
-_0801CE94:
- ldr r2, _0801CF20 @ =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 _0801CED6
- ldr r3, _0801CF24 @ =gLastUsedAbility
- strb r6, [r3]
- movs r0, 0x1
- orrs r0, r4
- mov r2, r8
- strb r0, [r2]
- ldr r1, _0801CF28 @ =gMoveHitWith
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801CF2C @ =gUnknown_02024C44
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldr r1, _0801CF30 @ =gBattleCommunication
- movs r0, 0x3
- strb r0, [r1, 0x6]
- ldrb r0, [r5]
- ldrb r1, [r3]
- bl RecordAbilityBattle
-_0801CED6:
- ldr r0, _0801CF1C @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0801CEF4
- ldr r2, _0801CF34 @ =gProtectStructs
- ldr r0, _0801CF14 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 4
- adds r1, r2
- ldrb r0, [r1, 0x1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1, 0x1]
-_0801CEF4:
- ldr r1, _0801CF38 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801CF08: .4byte gTypeEffectiveness
-_0801CF0C: .4byte gBattleMons
-_0801CF10: .4byte gBankTarget
-_0801CF14: .4byte gBankAttacker
-_0801CF18: .4byte gCurrentMove
-_0801CF1C: .4byte gBattleMoveFlags
-_0801CF20: .4byte gBattleMoves
-_0801CF24: .4byte gLastUsedAbility
-_0801CF28: .4byte gMoveHitWith
-_0801CF2C: .4byte gUnknown_02024C44
-_0801CF30: .4byte gBattleCommunication
-_0801CF34: .4byte gProtectStructs
-_0801CF38: .4byte gBattlescriptCurrInstr
- thumb_func_end atk06_typecalc
-
- thumb_func_start b_wonderguard_and_levitate
-b_wonderguard_and_levitate: @ 801CF3C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r6, 0
- movs r5, 0
- ldr r0, _0801CF80 @ =gCurrentMove
- ldrh r1, [r0]
- mov r9, r0
- cmp r1, 0xA5
- bne _0801CF54
- b _0801D1A4
-_0801CF54:
- ldr r2, _0801CF84 @ =gBattleMoves
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801CF66
- b _0801D1A4
-_0801CF66:
- ldr r0, _0801CF88 @ =0x02000000
- ldr r2, _0801CF8C @ =0x0001601c
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801CF90
- movs r1, 0x3F
- mov r12, r1
- mov r2, r12
- ands r2, r0
- mov r12, r2
- b _0801CF94
- .align 2, 0
-_0801CF80: .4byte gCurrentMove
-_0801CF84: .4byte gBattleMoves
-_0801CF88: .4byte 0x02000000
-_0801CF8C: .4byte 0x0001601c
-_0801CF90:
- ldrb r1, [r1, 0x2]
- mov r12, r1
-_0801CF94:
- ldr r2, _0801CFC8 @ =gBattleMons
- ldr r3, _0801CFCC @ =gBankTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r1, [r0]
- adds r7, r2, 0
- mov r8, r3
- cmp r1, 0x1A
- bne _0801CFD8
- mov r0, r12
- cmp r0, 0x4
- bne _0801CFD8
- ldr r0, _0801CFD0 @ =gLastUsedAbility
- strb r1, [r0]
- ldr r0, _0801CFD4 @ =gBattleCommunication
- mov r1, r12
- strb r1, [r0, 0x6]
- ldrb r0, [r3]
- movs r1, 0x1A
- bl RecordAbilityBattle
- b _0801D1A4
- .align 2, 0
-_0801CFC8: .4byte gBattleMons
-_0801CFCC: .4byte gBankTarget
-_0801CFD0: .4byte gLastUsedAbility
-_0801CFD4: .4byte gBattleCommunication
-_0801CFD8:
- ldr r1, _0801CFE4 @ =gTypeEffectiveness
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r4, r1, 0
- b _0801D12A
- .align 2, 0
-_0801CFE4: .4byte gTypeEffectiveness
-_0801CFE8:
- adds r0, r5, r4
- ldrb r0, [r0]
- cmp r0, r12
- beq _0801CFF2
- b _0801D124
-_0801CFF2:
- adds r2, r5, 0x1
- adds r3, r2, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x21
- ldrb r1, [r3]
- adds r3, r2, 0
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801D032
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801D032
- ldr r2, _0801D1B0 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801D1B4 @ =gProtectStructs
- ldr r0, _0801D1B8 @ =gBankAttacker
- ldrb r2, [r0]
- lsls r2, 4
- adds r2, r1
- ldrb r0, [r2, 0x1]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2, 0x1]
-_0801D032:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _0801D078
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0801D078
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801D078
- ldr r2, _0801D1B0 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801D1B4 @ =gProtectStructs
- ldr r0, _0801D1B8 @ =gBankAttacker
- ldrb r2, [r0]
- lsls r2, 4
- adds r2, r1
- ldrb r0, [r2, 0x1]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2, 0x1]
-_0801D078:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x21
- ldrb r1, [r2]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801D09C
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _0801D09C
- movs r0, 0x1
- orrs r6, r0
-_0801D09C:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _0801D0CA
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0801D0CA
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _0801D0CA
- movs r0, 0x1
- orrs r6, r0
-_0801D0CA:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x21
- ldrb r1, [r2]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801D0F2
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x5
- bne _0801D0F2
- movs r0, 0x2
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0801D0F2:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _0801D124
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0801D124
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x5
- bne _0801D124
- movs r0, 0x2
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0801D124:
- adds r5, 0x3
- adds r0, r5, r4
- ldrb r0, [r0]
-_0801D12A:
- cmp r0, 0xFF
- beq _0801D14E
- cmp r0, 0xFE
- beq _0801D134
- b _0801CFE8
-_0801D134:
- mov r2, r8
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- adds r1, r7, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801D124
-_0801D14E:
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x20
- ldrb r4, [r0]
- cmp r4, 0x19
- bne _0801D1A4
- ldr r0, _0801D1B8 @ =gBankAttacker
- ldrb r0, [r0]
- mov r2, r9
- ldrh r1, [r2]
- bl move_weather_interaction
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0801D1A4
- movs r0, 0x3
- ands r6, r0
- cmp r6, 0x1
- beq _0801D1A4
- ldr r2, _0801D1BC @ =gBattleMoves
- mov r0, r9
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801D1A4
- ldr r0, _0801D1C0 @ =gLastUsedAbility
- strb r4, [r0]
- ldr r1, _0801D1C4 @ =gBattleCommunication
- movs r0, 0x3
- strb r0, [r1, 0x6]
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x19
- bl RecordAbilityBattle
-_0801D1A4:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801D1B0: .4byte gBattleMoveFlags
-_0801D1B4: .4byte gProtectStructs
-_0801D1B8: .4byte gBankAttacker
-_0801D1BC: .4byte gBattleMoves
-_0801D1C0: .4byte gLastUsedAbility
-_0801D1C4: .4byte gBattleCommunication
- thumb_func_end b_wonderguard_and_levitate
-
- thumb_func_start b_attack_effectivity_adapt
-b_attack_effectivity_adapt: @ 801D1C8
- push {r4-r7,lr}
- adds r6, r2, 0
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- ldr r7, _0801D1FC @ =gBattleMoveDamage
- ldr r0, [r7]
- muls r0, r4
- movs r1, 0xA
- bl __divsi3
- str r0, [r7]
- cmp r0, 0
- bne _0801D1EE
- cmp r4, 0
- beq _0801D1EE
- movs r0, 0x1
- str r0, [r7]
-_0801D1EE:
- cmp r4, 0x5
- beq _0801D216
- cmp r4, 0x5
- bgt _0801D200
- cmp r4, 0
- beq _0801D206
- b _0801D27A
- .align 2, 0
-_0801D1FC: .4byte gBattleMoveDamage
-_0801D200:
- cmp r4, 0x14
- beq _0801D248
- b _0801D27A
-_0801D206:
- ldrb r0, [r6]
- movs r1, 0x8
- orrs r0, r1
- movs r1, 0xFB
- ands r0, r1
- movs r1, 0xFD
- ands r0, r1
- b _0801D278
-_0801D216:
- ldr r0, _0801D240 @ =gBattleMoves
- lsls r1, r5, 1
- adds r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801D27A
- ldrb r1, [r6]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801D27A
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801D244
- movs r0, 0xFD
- ands r0, r1
- b _0801D278
- .align 2, 0
-_0801D240: .4byte gBattleMoves
-_0801D244:
- movs r0, 0x4
- b _0801D276
-_0801D248:
- ldr r0, _0801D270 @ =gBattleMoves
- lsls r1, r5, 1
- adds r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801D27A
- ldrb r1, [r6]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801D27A
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801D274
- movs r0, 0xFB
- ands r0, r1
- b _0801D278
- .align 2, 0
-_0801D270: .4byte gBattleMoves
-_0801D274:
- movs r0, 0x2
-_0801D276:
- orrs r0, r1
-_0801D278:
- strb r0, [r6]
-_0801D27A:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end b_attack_effectivity_adapt
-
- thumb_func_start TypeCalc
-TypeCalc: @ 801D280
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp, 0x4]
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- movs r7, 0
- mov r0, sp
- strb r7, [r0]
- mov r0, r10
- cmp r0, 0xA5
- bne _0801D2AE
- movs r0, 0
- b _0801D43A
-_0801D2AE:
- ldr r1, _0801D31C @ =gBattleMoves
- mov r3, r10
- lsls r2, r3, 1
- adds r0, r2, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x8]
- ldr r1, _0801D320 @ =gBattleMons
- movs r0, 0x58
- ldr r3, [sp, 0x4]
- muls r0, r3
- adds r3, r0, r1
- adds r0, r3, 0
- adds r0, 0x21
- ldrb r0, [r0]
- str r2, [sp, 0xC]
- adds r5, r1, 0
- ldr r1, [sp, 0x8]
- cmp r0, r1
- beq _0801D2E2
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- bne _0801D2F4
-_0801D2E2:
- ldr r4, _0801D324 @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- str r0, [r4]
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0801D2F4:
- movs r0, 0x58
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1A
- bne _0801D328
- ldr r3, [sp, 0x8]
- cmp r3, 0x4
- bne _0801D328
- movs r1, 0x9
- mov r0, sp
- ldrb r0, [r0]
- orrs r0, r1
- mov r1, sp
- strb r0, [r1]
- b _0801D3DC
- .align 2, 0
-_0801D31C: .4byte gBattleMoves
-_0801D320: .4byte gBattleMons
-_0801D324: .4byte gBattleMoveDamage
-_0801D328:
- ldr r1, _0801D344 @ =gTypeEffectiveness
- adds r0, r7, r1
- ldrb r0, [r0]
- adds r2, r1, 0
- cmp r0, 0xFF
- beq _0801D3DC
- cmp r0, 0xFE
- bne _0801D34C
- movs r0, 0x58
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- b _0801D3CA
- .align 2, 0
-_0801D344: .4byte gTypeEffectiveness
-_0801D348:
- adds r7, 0x3
- b _0801D3B6
-_0801D34C:
- ldr r6, _0801D44C @ =gTypeEffectiveness
- adds r0, r7, r6
- ldrb r0, [r0]
- ldr r2, [sp, 0x8]
- cmp r0, r2
- bne _0801D3B0
- adds r1, r7, 0x1
- adds r1, r6
- ldr r3, _0801D450 @ =gBattleMons
- mov r8, r3
- movs r3, 0x58
- mov r0, r9
- muls r0, r3
- mov r2, r8
- adds r5, r0, r2
- adds r0, r5, 0
- adds r0, 0x21
- ldrb r4, [r1]
- ldrb r0, [r0]
- cmp r4, r0
- bne _0801D388
- adds r0, r7, 0x2
- adds r0, r6
- ldrb r0, [r0]
- mov r1, r10
- mov r2, sp
- str r3, [sp, 0x10]
- bl b_attack_effectivity_adapt
- ldr r3, [sp, 0x10]
-_0801D388:
- adds r0, r5, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r4, r0
- bne _0801D3B0
- ldr r0, _0801D454 @ =gBankTarget
- ldrb r0, [r0]
- muls r0, r3
- add r0, r8
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r4
- beq _0801D3B0
- adds r0, r7, 0x2
- adds r0, r6
- ldrb r0, [r0]
- mov r1, r10
- mov r2, sp
- bl b_attack_effectivity_adapt
-_0801D3B0:
- adds r7, 0x3
- ldr r5, _0801D450 @ =gBattleMons
- ldr r2, _0801D44C @ =gTypeEffectiveness
-_0801D3B6:
- adds r0, r7, r2
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _0801D3DC
- cmp r0, 0xFE
- bne _0801D34C
- movs r0, 0x58
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
-_0801D3CA:
- adds r1, r5, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801D348
-_0801D3DC:
- movs r0, 0x58
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x19
- bne _0801D436
- mov r0, sp
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801D436
- ldr r0, [sp, 0x4]
- mov r1, r10
- bl move_weather_interaction
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x2
- bne _0801D436
- mov r0, sp
- ldrb r3, [r0]
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _0801D41E
- movs r0, 0x6
- ands r0, r3
- cmp r0, 0x6
- bne _0801D436
-_0801D41E:
- ldr r0, _0801D458 @ =gBattleMoves
- ldr r1, [sp, 0xC]
- add r1, r10
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801D436
- mov r0, sp
- movs r1, 0x1
- orrs r1, r3
- strb r1, [r0]
-_0801D436:
- mov r0, sp
- ldrb r0, [r0]
-_0801D43A:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801D44C: .4byte gTypeEffectiveness
-_0801D450: .4byte gBattleMons
-_0801D454: .4byte gBankTarget
-_0801D458: .4byte gBattleMoves
- thumb_func_end TypeCalc
-
- thumb_func_start ai_rate_move
-ai_rate_move: @ 801D45C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x4]
- movs r7, 0
- mov r0, sp
- strb r7, [r0]
- ldr r2, _0801D498 @ =gBaseStats
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x6]
- str r1, [sp, 0x8]
- ldrb r0, [r0, 0x7]
- mov r8, r0
- cmp r6, 0xA5
- bne _0801D49C
- movs r0, 0
- b _0801D554
- .align 2, 0
-_0801D498: .4byte gBaseStats
-_0801D49C:
- ldr r2, _0801D4C0 @ =gBattleMoves
- lsls r1, r6, 1
- adds r0, r1, r6
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- mov r9, r0
- str r1, [sp, 0xC]
- ldr r3, [sp, 0x4]
- cmp r3, 0x1A
- bne _0801D4C4
- cmp r0, 0x4
- bne _0801D4C4
- movs r1, 0x9
- mov r0, sp
- strb r1, [r0]
- b _0801D51E
- .align 2, 0
-_0801D4C0: .4byte gBattleMoves
-_0801D4C4:
- ldr r0, _0801D564 @ =gTypeEffectiveness
- mov r10, r0
- adds r1, r7, r0
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _0801D51E
- adds r4, r1, 0
-_0801D4D2:
- ldrb r0, [r4]
- cmp r0, 0xFE
- beq _0801D510
- cmp r0, r9
- bne _0801D510
- ldrb r5, [r4, 0x1]
- ldr r1, [sp, 0x8]
- cmp r5, r1
- bne _0801D4EE
- ldrb r0, [r4, 0x2]
- adds r1, r6, 0
- mov r2, sp
- bl b_attack_effectivity_adapt
-_0801D4EE:
- cmp r5, r8
- bne _0801D510
- ldr r0, _0801D568 @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- ldr r3, _0801D56C @ =gBattleMons
- adds r0, r3
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r8
- beq _0801D510
- ldrb r0, [r4, 0x2]
- adds r1, r6, 0
- mov r2, sp
- bl b_attack_effectivity_adapt
-_0801D510:
- adds r4, 0x3
- adds r7, 0x3
- mov r1, r10
- adds r0, r7, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _0801D4D2
-_0801D51E:
- ldr r3, [sp, 0x4]
- cmp r3, 0x19
- bne _0801D550
- mov r0, sp
- ldrb r2, [r0]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0801D538
- movs r0, 0x6
- ands r0, r2
- cmp r0, 0x6
- bne _0801D550
-_0801D538:
- ldr r0, _0801D570 @ =gBattleMoves
- ldr r3, [sp, 0xC]
- adds r1, r3, r6
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801D550
- mov r0, sp
- movs r1, 0x8
- orrs r1, r2
- strb r1, [r0]
-_0801D550:
- mov r0, sp
- ldrb r0, [r0]
-_0801D554:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801D564: .4byte gTypeEffectiveness
-_0801D568: .4byte gBankTarget
-_0801D56C: .4byte gBattleMons
-_0801D570: .4byte gBattleMoves
- thumb_func_end ai_rate_move
-
- thumb_func_start unref_sub_801D574
-unref_sub_801D574: @ 801D574
- push {r4,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x64
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0801D5AC @ =gBattleMoveDamage
- ldr r0, [r4]
- cmp r0, 0
- beq _0801D5A6
- muls r0, r1
- str r0, [r4]
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801D5A6
- movs r0, 0x1
- str r0, [r4]
-_0801D5A6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801D5AC: .4byte gBattleMoveDamage
- thumb_func_end unref_sub_801D574
-
- thumb_func_start atk07_dmg_adjustment
-atk07_dmg_adjustment: @ 801D5B0
- push {r4-r7,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x64
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0801D608 @ =gBattleMoveDamage
- ldr r0, [r4]
- cmp r0, 0
- beq _0801D5E2
- muls r0, r1
- str r0, [r4]
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801D5E2
- movs r0, 0x1
- str r0, [r4]
-_0801D5E2:
- ldr r7, _0801D60C @ =gBattleMons
- ldr r6, _0801D610 @ =gBankTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0801D618
- ldr r1, _0801D614 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _0801D632
- .align 2, 0
-_0801D608: .4byte gBattleMoveDamage
-_0801D60C: .4byte gBattleMons
-_0801D610: .4byte gBankTarget
-_0801D614: .4byte gEnigmaBerries
-_0801D618:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_0801D632:
- ldr r1, _0801D6F4 @ =gStringBank
- ldr r5, _0801D6F8 @ =gBankTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _0801D670
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _0801D670
- ldrb r0, [r5]
- movs r1, 0x27
- bl RecordItemBattle
- ldr r2, _0801D6FC @ =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_0801D670:
- ldr r2, _0801D700 @ =gBattleMons
- ldr r3, _0801D6F8 @ =gBankTarget
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 17
- ands r1, r0
- adds r5, r2, 0
- cmp r1, 0
- bne _0801D740
- ldr r2, _0801D704 @ =gBattleMoves
- ldr r0, _0801D708 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x65
- beq _0801D6C2
- ldr r0, _0801D70C @ =gProtectStructs
- lsls r1, r4, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _0801D6C2
- ldr r0, _0801D6FC @ =gSpecialStatuses
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801D740
-_0801D6C2:
- ldrb r0, [r3]
- movs r4, 0x58
- muls r0, r4
- adds r0, r5
- ldrh r1, [r0, 0x28]
- ldr r2, _0801D710 @ =gBattleMoveDamage
- ldr r0, [r2]
- cmp r1, r0
- bgt _0801D740
- subs r0, r1, 0x1
- str r0, [r2]
- ldr r1, _0801D70C @ =gProtectStructs
- ldrb r3, [r3]
- lsls r0, r3, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- bge _0801D718
- ldr r0, _0801D714 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _0801D740
- .align 2, 0
-_0801D6F4: .4byte gStringBank
-_0801D6F8: .4byte gBankTarget
-_0801D6FC: .4byte gSpecialStatuses
-_0801D700: .4byte gBattleMons
-_0801D704: .4byte gBattleMoves
-_0801D708: .4byte gCurrentMove
-_0801D70C: .4byte gProtectStructs
-_0801D710: .4byte gBattleMoveDamage
-_0801D714: .4byte gBattleMoveFlags
-_0801D718:
- ldr r0, _0801D750 @ =gSpecialStatuses
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801D740
- ldr r2, _0801D754 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801D758 @ =gLastUsedItem
- adds r0, r3, 0
- muls r0, r4
- adds r0, r5
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
-_0801D740:
- ldr r1, _0801D75C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801D750: .4byte gSpecialStatuses
-_0801D754: .4byte gBattleMoveFlags
-_0801D758: .4byte gLastUsedItem
-_0801D75C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk07_dmg_adjustment
-
- thumb_func_start atk08_dmg_adjustment2
-atk08_dmg_adjustment2: @ 801D760
- push {r4-r7,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x64
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0801D7B8 @ =gBattleMoveDamage
- ldr r0, [r4]
- cmp r0, 0
- beq _0801D792
- muls r0, r1
- str r0, [r4]
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801D792
- movs r0, 0x1
- str r0, [r4]
-_0801D792:
- ldr r7, _0801D7BC @ =gBattleMons
- ldr r6, _0801D7C0 @ =gBankTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0801D7C8
- ldr r1, _0801D7C4 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _0801D7E2
- .align 2, 0
-_0801D7B8: .4byte gBattleMoveDamage
-_0801D7BC: .4byte gBattleMons
-_0801D7C0: .4byte gBankTarget
-_0801D7C4: .4byte gEnigmaBerries
-_0801D7C8:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_0801D7E2:
- ldr r1, _0801D888 @ =gStringBank
- ldr r5, _0801D88C @ =gBankTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _0801D820
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _0801D820
- ldrb r0, [r5]
- movs r1, 0x27
- bl RecordItemBattle
- ldr r2, _0801D890 @ =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_0801D820:
- ldr r4, _0801D894 @ =gBattleMons
- ldr r6, _0801D88C @ =gBankTarget
- ldrb r2, [r6]
- movs r7, 0x58
- adds r3, r2, 0
- muls r3, r7
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- bne _0801D8CC
- ldr r5, _0801D898 @ =gProtectStructs
- lsls r0, r2, 4
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- blt _0801D85E
- ldr r0, _0801D890 @ =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801D8CC
-_0801D85E:
- adds r0, r3, r4
- ldrh r1, [r0, 0x28]
- ldr r2, _0801D89C @ =gBattleMoveDamage
- ldr r0, [r2]
- cmp r1, r0
- bgt _0801D8CC
- subs r0, r1, 0x1
- str r0, [r2]
- ldrb r3, [r6]
- lsls r0, r3, 4
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- bge _0801D8A4
- ldr r0, _0801D8A0 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _0801D8CC
- .align 2, 0
-_0801D888: .4byte gStringBank
-_0801D88C: .4byte gBankTarget
-_0801D890: .4byte gSpecialStatuses
-_0801D894: .4byte gBattleMons
-_0801D898: .4byte gProtectStructs
-_0801D89C: .4byte gBattleMoveDamage
-_0801D8A0: .4byte gBattleMoveFlags
-_0801D8A4:
- ldr r0, _0801D8DC @ =gSpecialStatuses
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801D8CC
- ldr r2, _0801D8E0 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801D8E4 @ =gLastUsedItem
- adds r0, r3, 0
- muls r0, r7
- adds r0, r4
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
-_0801D8CC:
- ldr r1, _0801D8E8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801D8DC: .4byte gSpecialStatuses
-_0801D8E0: .4byte gBattleMoveFlags
-_0801D8E4: .4byte gLastUsedItem
-_0801D8E8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk08_dmg_adjustment2
-
- thumb_func_start atk09_attackanimation
-atk09_attackanimation: @ 801D8EC
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0xC
- ldr r0, _0801D940 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _0801D900
- b _0801DA4A
-_0801D900:
- ldr r0, _0801D944 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- ldr r3, _0801D948 @ =gCurrentMove
- cmp r0, 0
- beq _0801D960
- ldrh r0, [r3]
- cmp r0, 0x90
- beq _0801D960
- cmp r0, 0xA4
- beq _0801D960
- ldr r4, _0801D94C @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801D950 @ =BattleScript_Pausex20
- str r0, [r4]
- ldr r1, _0801D954 @ =0x02000000
- ldr r0, _0801D958 @ =0x00016002
- adds r2, r1, r0
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- ldr r2, _0801D95C @ =0x000160a1
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0801DA4A
- .align 2, 0
-_0801D940: .4byte gBattleExecBuffer
-_0801D944: .4byte gHitMarker
-_0801D948: .4byte gCurrentMove
-_0801D94C: .4byte gBattlescriptCurrInstr
-_0801D950: .4byte BattleScript_Pausex20
-_0801D954: .4byte 0x02000000
-_0801D958: .4byte 0x00016002
-_0801D95C: .4byte 0x000160a1
-_0801D960:
- ldr r2, _0801DA0C @ =gBattleMoves
- ldrh r1, [r3]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x6]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0801D986
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0801D986
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0801D992
-_0801D986:
- ldr r0, _0801DA10 @ =0x02000000
- ldr r1, _0801DA14 @ =0x000160a1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801DA00
-_0801D992:
- ldr r0, _0801DA18 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801DA3C
- ldr r1, _0801DA1C @ =gActiveBank
- ldr r2, _0801DA20 @ =gBankAttacker
- mov r9, r2
- ldrb r0, [r2]
- strb r0, [r1]
- ldrh r1, [r3]
- ldr r6, _0801DA10 @ =0x02000000
- ldr r0, _0801DA24 @ =0x00016002
- adds r0, r6
- mov r8, r0
- ldrb r2, [r0]
- ldr r0, _0801DA28 @ =gBattleMovePower
- ldrh r3, [r0]
- ldr r0, _0801DA2C @ =gBattleMoveDamage
- ldr r0, [r0]
- str r0, [sp]
- ldr r5, _0801DA30 @ =gBattleMons
- mov r0, r9
- ldrb r4, [r0]
- movs r0, 0x58
- muls r0, r4
- adds r0, r5
- adds r0, 0x2B
- ldrb r0, [r0]
- str r0, [sp, 0x4]
- mov r0, r9
- ldrb r4, [r0]
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- ldr r4, _0801DA34 @ =gDisableStructs
- adds r0, r4
- str r0, [sp, 0x8]
- movs r0, 0
- bl EmitMoveAnimation
- mov r1, r8
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r2, _0801DA14 @ =0x000160a1
- adds r6, r2
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- mov r1, r9
- ldrb r0, [r1]
- bl MarkBufferBankForExecution
-_0801DA00:
- ldr r1, _0801DA38 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- b _0801DA4A
- .align 2, 0
-_0801DA0C: .4byte gBattleMoves
-_0801DA10: .4byte 0x02000000
-_0801DA14: .4byte 0x000160a1
-_0801DA18: .4byte gBattleMoveFlags
-_0801DA1C: .4byte gActiveBank
-_0801DA20: .4byte gBankAttacker
-_0801DA24: .4byte 0x00016002
-_0801DA28: .4byte gBattleMovePower
-_0801DA2C: .4byte gBattleMoveDamage
-_0801DA30: .4byte gBattleMons
-_0801DA34: .4byte gDisableStructs
-_0801DA38: .4byte gBattlescriptCurrInstr
-_0801DA3C:
- ldr r4, _0801DA58 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801DA5C @ =BattleScript_Pausex20
- str r0, [r4]
-_0801DA4A:
- add sp, 0xC
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801DA58: .4byte gBattlescriptCurrInstr
-_0801DA5C: .4byte BattleScript_Pausex20
- thumb_func_end atk09_attackanimation
-
- thumb_func_start atk0A_waitanimation
-atk0A_waitanimation: @ 801DA60
- push {lr}
- ldr r0, _0801DA78 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0801DA72
- ldr r1, _0801DA7C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801DA72:
- pop {r0}
- bx r0
- .align 2, 0
-_0801DA78: .4byte gBattleExecBuffer
-_0801DA7C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0A_waitanimation
-
- thumb_func_start atk0B_healthbarupdate
-atk0B_healthbarupdate: @ 801DA80
- push {r4,r5,lr}
- ldr r0, _0801DAE4 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0801DB36
- ldr r0, _0801DAE8 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801DB2E
- ldr r0, _0801DAEC @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r2, _0801DAF0 @ =gActiveBank
- strb r0, [r2]
- ldr r1, _0801DAF4 @ =gBattleMons
- ldrb r2, [r2]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _0801DB00
- ldr r0, _0801DAF8 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- beq _0801DB00
- ldr r0, _0801DAFC @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 1
- ands r0, r1
- cmp r0, 0
- bne _0801DB00
- movs r0, 0x80
- adds r1, r2, 0
- bl PrepareStringBattle
- b _0801DB2E
- .align 2, 0
-_0801DAE4: .4byte gBattleExecBuffer
-_0801DAE8: .4byte gBattleMoveFlags
-_0801DAEC: .4byte gBattlescriptCurrInstr
-_0801DAF0: .4byte gActiveBank
-_0801DAF4: .4byte gBattleMons
-_0801DAF8: .4byte gDisableStructs
-_0801DAFC: .4byte gHitMarker
-_0801DB00:
- ldr r5, _0801DB3C @ =gBattleMoveDamage
- ldrh r1, [r5]
- movs r0, 0
- bl EmitHealthBarUpdate
- ldr r4, _0801DB40 @ =gActiveBank
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0801DB2E
- ldr r0, [r5]
- cmp r0, 0
- ble _0801DB2E
- ldr r0, _0801DB44 @ =gBattleResults
- ldrb r1, [r0, 0x5]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x5]
-_0801DB2E:
- ldr r1, _0801DB48 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_0801DB36:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801DB3C: .4byte gBattleMoveDamage
-_0801DB40: .4byte gActiveBank
-_0801DB44: .4byte gBattleResults
-_0801DB48: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0B_healthbarupdate
-
- thumb_func_start atk0C_datahpupdate
-atk0C_datahpupdate: @ 801DB4C
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r0, _0801DB74 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _0801DB5A
- b _0801DF2E
-_0801DB5A:
- ldr r0, _0801DB78 @ =0x02000000
- ldr r1, _0801DB7C @ =0x0001601c
- adds r0, r1
- ldrb r1, [r0]
- cmp r1, 0
- beq _0801DB80
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0801DB80
- movs r6, 0x3F
- ands r6, r1
- b _0801DB90
- .align 2, 0
-_0801DB74: .4byte gBattleExecBuffer
-_0801DB78: .4byte 0x02000000
-_0801DB7C: .4byte 0x0001601c
-_0801DB80:
- ldr r2, _0801DC1C @ =gBattleMoves
- ldr r0, _0801DC20 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r6, [r0, 0x2]
-_0801DB90:
- ldr r0, _0801DC24 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801DB9E
- b _0801DF00
-_0801DB9E:
- ldr r0, _0801DC28 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r7, _0801DC2C @ =gActiveBank
- strb r0, [r7]
- ldr r1, _0801DC30 @ =gBattleMons
- ldrb r2, [r7]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _0801DCB4
- ldr r0, _0801DC34 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r4, r1, r0
- ldrb r1, [r4, 0xA]
- mov r12, r0
- cmp r1, 0
- beq _0801DCB4
- ldr r0, _0801DC38 @ =gHitMarker
- ldr r3, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r3, r0
- cmp r3, 0
- bne _0801DCB4
- adds r5, r1, 0
- ldr r6, _0801DC3C @ =gBattleMoveDamage
- ldr r4, [r6]
- cmp r5, r4
- blt _0801DC48
- ldr r0, _0801DC40 @ =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _0801DC02
- str r4, [r1]
-_0801DC02:
- ldrb r0, [r7]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- add r1, r12
- ldr r2, [r6]
- ldrb r0, [r1, 0xA]
- subs r0, r2
- strb r0, [r1, 0xA]
- ldr r1, _0801DC44 @ =gHP_dealt
- ldr r0, [r6]
- str r0, [r1]
- b _0801DC78
- .align 2, 0
-_0801DC1C: .4byte gBattleMoves
-_0801DC20: .4byte gCurrentMove
-_0801DC24: .4byte gBattleMoveFlags
-_0801DC28: .4byte gBattlescriptCurrInstr
-_0801DC2C: .4byte gActiveBank
-_0801DC30: .4byte gBattleMons
-_0801DC34: .4byte gDisableStructs
-_0801DC38: .4byte gHitMarker
-_0801DC3C: .4byte gBattleMoveDamage
-_0801DC40: .4byte gSpecialStatuses
-_0801DC44: .4byte gHP_dealt
-_0801DC48:
- ldr r0, _0801DCA0 @ =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _0801DC5C
- str r5, [r1]
-_0801DC5C:
- ldr r2, _0801DCA4 @ =gHP_dealt
- ldrb r1, [r7]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r0, [r0, 0xA]
- str r0, [r2]
- ldrb r1, [r7]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- strb r3, [r0, 0xA]
-_0801DC78:
- ldr r0, _0801DCA8 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r0, [r0, 0xA]
- cmp r0, 0
- beq _0801DC8C
- b _0801DF26
-_0801DC8C:
- ldr r4, _0801DCAC @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- bl b_movescr_stack_push_cursor
- ldr r0, _0801DCB0 @ =BattleScript_SubstituteFade
- str r0, [r4]
- b _0801DF2E
- .align 2, 0
-_0801DCA0: .4byte gSpecialStatuses
-_0801DCA4: .4byte gHP_dealt
-_0801DCA8: .4byte gActiveBank
-_0801DCAC: .4byte gBattlescriptCurrInstr
-_0801DCB0: .4byte BattleScript_SubstituteFade
-_0801DCB4:
- ldr r0, _0801DCF4 @ =gHitMarker
- ldr r2, [r0]
- ldr r1, _0801DCF8 @ =0xfffffeff
- ands r2, r1
- str r2, [r0]
- ldr r1, _0801DCFC @ =gBattleMoveDamage
- ldr r5, [r1]
- mov r12, r0
- adds r7, r1, 0
- cmp r5, 0
- bge _0801DD08
- ldr r4, _0801DD00 @ =gBattleMons
- ldr r2, _0801DD04 @ =gActiveBank
- ldrb r0, [r2]
- movs r3, 0x58
- adds r1, r0, 0
- muls r1, r3
- adds r1, r4
- ldrh r0, [r1, 0x28]
- subs r0, r5
- strh r0, [r1, 0x28]
- ldrb r0, [r2]
- muls r0, r3
- adds r1, r0, r4
- ldrh r3, [r1, 0x2C]
- ldrh r0, [r1, 0x28]
- adds r5, r2, 0
- cmp r0, r3
- bhi _0801DCF0
- b _0801DEC6
-_0801DCF0:
- strh r3, [r1, 0x28]
- b _0801DEC6
- .align 2, 0
-_0801DCF4: .4byte gHitMarker
-_0801DCF8: .4byte 0xfffffeff
-_0801DCFC: .4byte gBattleMoveDamage
-_0801DD00: .4byte gBattleMons
-_0801DD04: .4byte gActiveBank
-_0801DD08:
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- beq _0801DD24
- movs r0, 0x21
- negs r0, r0
- ands r2, r0
- mov r0, r12
- str r2, [r0]
- ldr r5, _0801DD20 @ =gActiveBank
- b _0801DD6C
- .align 2, 0
-_0801DD20: .4byte gActiveBank
-_0801DD24:
- ldr r0, _0801DD4C @ =gTakenDmg
- ldr r2, _0801DD50 @ =gActiveBank
- ldrb r1, [r2]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- adds r0, r5
- str r0, [r1]
- ldr r0, _0801DD54 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- adds r5, r2, 0
- cmp r0, 0
- bne _0801DD60
- ldr r1, _0801DD58 @ =gTakenDmgBanks
- ldrb r0, [r5]
- adds r0, r1
- ldr r1, _0801DD5C @ =gBankAttacker
- b _0801DD68
- .align 2, 0
-_0801DD4C: .4byte gTakenDmg
-_0801DD50: .4byte gActiveBank
-_0801DD54: .4byte gBattlescriptCurrInstr
-_0801DD58: .4byte gTakenDmgBanks
-_0801DD5C: .4byte gBankAttacker
-_0801DD60:
- ldr r1, _0801DD8C @ =gTakenDmgBanks
- ldrb r0, [r5]
- adds r0, r1
- ldr r1, _0801DD90 @ =gBankTarget
-_0801DD68:
- ldrb r1, [r1]
- strb r1, [r0]
-_0801DD6C:
- ldr r4, _0801DD94 @ =gBattleMons
- ldrb r0, [r5]
- movs r3, 0x58
- muls r0, r3
- adds r2, r0, r4
- ldrh r0, [r2, 0x28]
- ldr r1, [r7]
- cmp r0, r1
- ble _0801DD9C
- subs r0, r1
- strh r0, [r2, 0x28]
- ldr r0, _0801DD98 @ =gHP_dealt
- str r1, [r0]
- adds r7, r0, 0
- b _0801DDAC
- .align 2, 0
-_0801DD8C: .4byte gTakenDmgBanks
-_0801DD90: .4byte gBankTarget
-_0801DD94: .4byte gBattleMons
-_0801DD98: .4byte gHP_dealt
-_0801DD9C:
- ldr r2, _0801DE20 @ =gHP_dealt
- str r0, [r2]
- ldrb r0, [r5]
- muls r0, r3
- adds r0, r4
- movs r1, 0
- strh r1, [r0, 0x28]
- adds r7, r2, 0
-_0801DDAC:
- ldr r2, _0801DE24 @ =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r1, r2, 0x4
- adds r3, r0, r1
- ldr r0, [r3]
- adds r4, r2, 0
- cmp r0, 0
- bne _0801DDD4
- mov r1, r12
- ldr r0, [r1]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- cmp r0, 0
- bne _0801DDD4
- ldr r0, [r7]
- str r0, [r3]
-_0801DDD4:
- cmp r6, 0x8
- bhi _0801DE5C
- mov r1, r12
- ldr r0, [r1]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- cmp r0, 0
- bne _0801DE58
- ldr r0, _0801DE28 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xDC
- beq _0801DE58
- ldr r3, _0801DE2C @ =gProtectStructs
- ldrb r0, [r5]
- lsls r0, 4
- adds r1, r3, 0x4
- adds r0, r1
- ldr r2, [r7]
- str r2, [r0]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x8
- adds r0, r1
- str r2, [r0]
- ldr r0, _0801DE30 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _0801DE38
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801DE34 @ =gBankAttacker
- b _0801DE40
- .align 2, 0
-_0801DE20: .4byte gHP_dealt
-_0801DE24: .4byte gSpecialStatuses
-_0801DE28: .4byte gCurrentMove
-_0801DE2C: .4byte gProtectStructs
-_0801DE30: .4byte gBattlescriptCurrInstr
-_0801DE34: .4byte gBankAttacker
-_0801DE38:
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801DE54 @ =gBankTarget
-_0801DE40:
- ldrb r1, [r2]
- strb r1, [r0, 0xC]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r2]
- strb r1, [r0, 0x10]
- b _0801DEC6
- .align 2, 0
-_0801DE54: .4byte gBankTarget
-_0801DE58:
- cmp r6, 0x8
- bls _0801DEC6
-_0801DE5C:
- mov r1, r12
- ldr r0, [r1]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- cmp r0, 0
- bne _0801DEC6
- ldr r3, _0801DEA0 @ =gProtectStructs
- ldrb r0, [r5]
- lsls r0, 4
- adds r1, r3, 0
- adds r1, 0x8
- adds r0, r1
- ldr r2, [r7]
- str r2, [r0]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0xC
- adds r0, r1
- str r2, [r0]
- ldr r0, _0801DEA4 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _0801DEAC
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801DEA8 @ =gBankAttacker
- b _0801DEB4
- .align 2, 0
-_0801DEA0: .4byte gProtectStructs
-_0801DEA4: .4byte gBattlescriptCurrInstr
-_0801DEA8: .4byte gBankAttacker
-_0801DEAC:
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801DEF4 @ =gBankTarget
-_0801DEB4:
- ldrb r1, [r2]
- strb r1, [r0, 0xD]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r2]
- strb r1, [r0, 0x11]
-_0801DEC6:
- mov r1, r12
- ldr r0, [r1]
- ldr r1, _0801DEF8 @ =0xffefffff
- ands r0, r1
- mov r1, r12
- str r0, [r1]
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _0801DEFC @ =gUnknown_02024AA8
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2A
- movs r2, 0
- movs r3, 0x2
- bl EmitSetAttributes
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- b _0801DF26
- .align 2, 0
-_0801DEF4: .4byte gBankTarget
-_0801DEF8: .4byte 0xffefffff
-_0801DEFC: .4byte gUnknown_02024AA8
-_0801DF00:
- ldr r0, _0801DF38 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r1, _0801DF3C @ =gActiveBank
- strb r0, [r1]
- ldr r2, _0801DF40 @ =gSpecialStatuses
- ldrb r1, [r1]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x4
- adds r1, r0, r2
- ldr r0, [r1]
- cmp r0, 0
- bne _0801DF26
- ldr r0, _0801DF44 @ =0x0000ffff
- str r0, [r1]
-_0801DF26:
- ldr r1, _0801DF38 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_0801DF2E:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801DF38: .4byte gBattlescriptCurrInstr
-_0801DF3C: .4byte gActiveBank
-_0801DF40: .4byte gSpecialStatuses
-_0801DF44: .4byte 0x0000ffff
- thumb_func_end atk0C_datahpupdate
-
- thumb_func_start atk0D_critmessage
-atk0D_critmessage: @ 801DF48
- push {lr}
- ldr r0, _0801DF84 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0801DF7E
- ldr r0, _0801DF88 @ =gCritMultiplier
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0801DF76
- ldr r0, _0801DF8C @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801DF76
- ldr r0, _0801DF90 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0xD9
- bl PrepareStringBattle
- ldr r1, _0801DF94 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x7]
-_0801DF76:
- ldr r1, _0801DF98 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801DF7E:
- pop {r0}
- bx r0
- .align 2, 0
-_0801DF84: .4byte gBattleExecBuffer
-_0801DF88: .4byte gCritMultiplier
-_0801DF8C: .4byte gBattleMoveFlags
-_0801DF90: .4byte gBankAttacker
-_0801DF94: .4byte gBattleCommunication
-_0801DF98: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0D_critmessage
-
- thumb_func_start atk0E_effectiveness_sound
-atk0E_effectiveness_sound: @ 801DF9C
- push {r4,lr}
- ldr r0, _0801DFD4 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0801E05C
- ldr r4, _0801DFD8 @ =gActiveBank
- ldr r0, _0801DFDC @ =gBankTarget
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r1, _0801DFE0 @ =gBattleMoveFlags
- ldrb r2, [r1]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0801E054
- movs r0, 0xFE
- ands r0, r2
- cmp r0, 0x10
- beq _0801E00E
- cmp r0, 0x10
- bgt _0801DFEA
- cmp r0, 0x4
- beq _0801DFFE
- cmp r0, 0x4
- bgt _0801DFE4
- cmp r0, 0x2
- beq _0801DFF8
- b _0801E00E
- .align 2, 0
-_0801DFD4: .4byte gBattleExecBuffer
-_0801DFD8: .4byte gActiveBank
-_0801DFDC: .4byte gBankTarget
-_0801DFE0: .4byte gBattleMoveFlags
-_0801DFE4:
- cmp r0, 0x8
- beq _0801E054
- b _0801E00E
-_0801DFEA:
- cmp r0, 0x40
- beq _0801E00E
- cmp r0, 0x40
- bgt _0801E00E
- cmp r0, 0x20
- beq _0801E054
- b _0801E00E
-_0801DFF8:
- movs r0, 0
- movs r1, 0xE
- b _0801E002
-_0801DFFE:
- movs r0, 0
- movs r1, 0xC
-_0801E002:
- bl EmitEffectivenessSound
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0801E054
-_0801E00E:
- ldrb r1, [r1]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801E01E
- movs r0, 0
- movs r1, 0xE
- b _0801E02A
-_0801E01E:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801E03C
- movs r0, 0
- movs r1, 0xC
-_0801E02A:
- bl EmitEffectivenessSound
- ldr r0, _0801E038 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- b _0801E054
- .align 2, 0
-_0801E038: .4byte gActiveBank
-_0801E03C:
- movs r0, 0x28
- ands r0, r1
- cmp r0, 0
- bne _0801E054
- movs r0, 0
- movs r1, 0xD
- bl EmitEffectivenessSound
- ldr r0, _0801E064 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
-_0801E054:
- ldr r1, _0801E068 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801E05C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E064: .4byte gActiveBank
-_0801E068: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0E_effectiveness_sound
-
- thumb_func_start atk0F_resultmessage
-atk0F_resultmessage: @ 801E06C
- push {r4-r7,lr}
- movs r3, 0
- ldr r0, _0801E0A8 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _0801E07A
- b _0801E20C
-_0801E07A:
- ldr r1, _0801E0AC @ =gBattleMoveFlags
- ldrb r2, [r1]
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r2
- adds r6, r1, 0
- ldr r7, _0801E0B0 @ =gBattleCommunication
- cmp r0, 0
- beq _0801E0B8
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _0801E09A
- ldrb r0, [r7, 0x6]
- cmp r0, 0x2
- bls _0801E0B8
-_0801E09A:
- ldr r1, _0801E0B4 @ =gMissStrings
- ldrb r0, [r7, 0x6]
- lsls r0, 1
- adds r0, r1
- ldrh r3, [r0]
- strb r4, [r7, 0x7]
- b _0801E1F6
- .align 2, 0
-_0801E0A8: .4byte gBattleExecBuffer
-_0801E0AC: .4byte gBattleMoveFlags
-_0801E0B0: .4byte gBattleCommunication
-_0801E0B4: .4byte gMissStrings
-_0801E0B8:
- movs r0, 0x1
- strb r0, [r7, 0x7]
- ldrb r5, [r6]
- movs r0, 0xFE
- ands r0, r5
- cmp r0, 0x10
- beq _0801E0FC
- cmp r0, 0x10
- bgt _0801E0DE
- cmp r0, 0x4
- beq _0801E0F8
- cmp r0, 0x4
- bgt _0801E0D8
- cmp r0, 0x2
- beq _0801E0F4
- b _0801E144
-_0801E0D8:
- cmp r0, 0x8
- beq _0801E150
- b _0801E144
-_0801E0DE:
- cmp r0, 0x40
- beq _0801E100
- cmp r0, 0x40
- bgt _0801E0EE
- cmp r0, 0x20
- bne _0801E0EC
- b _0801E1F0
-_0801E0EC:
- b _0801E144
-_0801E0EE:
- cmp r0, 0x80
- beq _0801E104
- b _0801E144
-_0801E0F4:
- movs r3, 0xDE
- b _0801E1FA
-_0801E0F8:
- movs r3, 0xDD
- b _0801E1FA
-_0801E0FC:
- movs r3, 0xDA
- b _0801E1FA
-_0801E100:
- movs r3, 0x99
- b _0801E1FA
-_0801E104:
- ldr r4, _0801E12C @ =gLastUsedItem
- ldr r2, _0801E130 @ =gBattleMons
- ldr r3, _0801E134 @ =gBankTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- ldr r1, _0801E138 @ =gStringBank
- ldrb r0, [r3]
- strb r0, [r1]
- movs r0, 0x3F
- ands r0, r5
- strb r0, [r6]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801E13C @ =gBattlescriptCurrInstr
- ldr r0, _0801E140 @ =BattleScript_HangedOnMsg
- b _0801E20A
- .align 2, 0
-_0801E12C: .4byte gLastUsedItem
-_0801E130: .4byte gBattleMons
-_0801E134: .4byte gBankTarget
-_0801E138: .4byte gStringBank
-_0801E13C: .4byte gBattlescriptCurrInstr
-_0801E140: .4byte BattleScript_HangedOnMsg
-_0801E144:
- adds r2, r6, 0
- ldrb r5, [r2]
- movs r0, 0x8
- ands r0, r5
- cmp r0, 0
- beq _0801E154
-_0801E150:
- movs r3, 0x1B
- b _0801E1FA
-_0801E154:
- movs r0, 0x10
- ands r0, r5
- cmp r0, 0
- beq _0801E17C
- movs r0, 0xEF
- ands r0, r5
- movs r1, 0xFD
- ands r0, r1
- movs r1, 0xFB
- ands r0, r1
- strb r0, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801E174 @ =gBattlescriptCurrInstr
- ldr r0, _0801E178 @ =BattleScript_OneHitKOMsg
- b _0801E20A
- .align 2, 0
-_0801E174: .4byte gBattlescriptCurrInstr
-_0801E178: .4byte BattleScript_OneHitKOMsg
-_0801E17C:
- movs r0, 0x40
- ands r0, r5
- cmp r0, 0
- beq _0801E19C
- movs r0, 0x3F
- ands r0, r5
- strb r0, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801E194 @ =gBattlescriptCurrInstr
- ldr r0, _0801E198 @ =BattleScript_EnduredMsg
- b _0801E20A
- .align 2, 0
-_0801E194: .4byte gBattlescriptCurrInstr
-_0801E198: .4byte BattleScript_EnduredMsg
-_0801E19C:
- movs r0, 0x80
- ands r0, r5
- cmp r0, 0
- beq _0801E1E4
- ldr r4, _0801E1CC @ =gLastUsedItem
- ldr r2, _0801E1D0 @ =gBattleMons
- ldr r3, _0801E1D4 @ =gBankTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- ldr r1, _0801E1D8 @ =gStringBank
- ldrb r0, [r3]
- strb r0, [r1]
- movs r0, 0x3F
- ands r0, r5
- strb r0, [r6]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801E1DC @ =gBattlescriptCurrInstr
- ldr r0, _0801E1E0 @ =BattleScript_HangedOnMsg
- b _0801E20A
- .align 2, 0
-_0801E1CC: .4byte gLastUsedItem
-_0801E1D0: .4byte gBattleMons
-_0801E1D4: .4byte gBankTarget
-_0801E1D8: .4byte gStringBank
-_0801E1DC: .4byte gBattlescriptCurrInstr
-_0801E1E0: .4byte BattleScript_HangedOnMsg
-_0801E1E4:
- movs r0, 0x20
- ands r0, r5
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _0801E1F4
-_0801E1F0:
- movs r3, 0xE5
- b _0801E1FA
-_0801E1F4:
- strb r0, [r7, 0x7]
-_0801E1F6:
- cmp r3, 0
- beq _0801E204
-_0801E1FA:
- adds r0, r3, 0
- ldr r1, _0801E214 @ =gBankAttacker
- ldrb r1, [r1]
- bl PrepareStringBattle
-_0801E204:
- ldr r1, _0801E218 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
-_0801E20A:
- str r0, [r1]
-_0801E20C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E214: .4byte gBankAttacker
-_0801E218: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0F_resultmessage
-
- thumb_func_start atk10_printstring
-atk10_printstring: @ 801E21C
- push {r4,lr}
- ldr r0, _0801E24C @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0801E246
- ldr r4, _0801E250 @ =gBattlescriptCurrInstr
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- ldrb r1, [r1, 0x2]
- lsls r1, 8
- orrs r0, r1
- ldr r1, _0801E254 @ =gBankAttacker
- ldrb r1, [r1]
- bl PrepareStringBattle
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- ldr r1, _0801E258 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x7]
-_0801E246:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E24C: .4byte gBattleExecBuffer
-_0801E250: .4byte gBattlescriptCurrInstr
-_0801E254: .4byte gBankAttacker
-_0801E258: .4byte gBattleCommunication
- thumb_func_end atk10_printstring
-
- thumb_func_start atk11_printstring_playeronly
-atk11_printstring_playeronly: @ 801E25C
- push {r4,r5,lr}
- ldr r5, _0801E290 @ =gActiveBank
- ldr r0, _0801E294 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r5]
- ldr r4, _0801E298 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0
- bl EmitPrintStringPlayerOnly
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- ldr r1, _0801E29C @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x7]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E290: .4byte gActiveBank
-_0801E294: .4byte gBankAttacker
-_0801E298: .4byte gBattlescriptCurrInstr
-_0801E29C: .4byte gBattleCommunication
- thumb_func_end atk11_printstring_playeronly
-
- thumb_func_start atk12_waitmessage
-atk12_waitmessage: @ 801E2A0
- push {r4-r6,lr}
- ldr r0, _0801E2BC @ =gBattleExecBuffer
- ldr r4, [r0]
- cmp r4, 0
- bne _0801E2EE
- ldr r6, _0801E2C0 @ =gBattleCommunication
- ldrb r0, [r6, 0x7]
- cmp r0, 0
- bne _0801E2C8
- ldr r1, _0801E2C4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x3
- str r0, [r1]
- b _0801E2EE
- .align 2, 0
-_0801E2BC: .4byte gBattleExecBuffer
-_0801E2C0: .4byte gBattleCommunication
-_0801E2C4: .4byte gBattlescriptCurrInstr
-_0801E2C8:
- ldr r5, _0801E2F4 @ =gBattlescriptCurrInstr
- ldr r2, [r5]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldr r3, _0801E2F8 @ =gPauseCounterBattle
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r1
- bcc _0801E2EE
- movs r1, 0
- strh r4, [r3]
- adds r0, r2, 0x3
- str r0, [r5]
- strb r1, [r6, 0x7]
-_0801E2EE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E2F4: .4byte gBattlescriptCurrInstr
-_0801E2F8: .4byte gPauseCounterBattle
- thumb_func_end atk12_waitmessage
-
- thumb_func_start atk13_printfromtable
-atk13_printfromtable: @ 801E2FC
- push {r4,r5,lr}
- ldr r0, _0801E340 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0801E33A
- ldr r4, _0801E344 @ =gBattlescriptCurrInstr
- 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
- ldr r5, _0801E348 @ =gBattleCommunication
- ldrb r0, [r5, 0x5]
- lsls r0, 1
- adds r1, r0
- ldrh r0, [r1]
- ldr r1, _0801E34C @ =gBankAttacker
- ldrb r1, [r1]
- bl PrepareStringBattle
- ldr r0, [r4]
- adds r0, 0x5
- str r0, [r4]
- movs r0, 0x1
- strb r0, [r5, 0x7]
-_0801E33A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E340: .4byte gBattleExecBuffer
-_0801E344: .4byte gBattlescriptCurrInstr
-_0801E348: .4byte gBattleCommunication
-_0801E34C: .4byte gBankAttacker
- thumb_func_end atk13_printfromtable
-
- thumb_func_start atk14_printfromtable_playeronly
-atk14_printfromtable_playeronly: @ 801E350
- push {r4-r6,lr}
- ldr r0, _0801E3A0 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0801E39A
- ldr r5, _0801E3A4 @ =gBattlescriptCurrInstr
- ldr r2, [r5]
- 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
- ldr r6, _0801E3A8 @ =gBattleCommunication
- ldrb r0, [r6, 0x5]
- lsls r0, 1
- adds r1, r0
- ldr r4, _0801E3AC @ =gActiveBank
- ldr r0, _0801E3B0 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- ldrh r1, [r1]
- movs r0, 0
- bl EmitPrintStringPlayerOnly
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x5
- str r0, [r5]
- movs r0, 0x1
- strb r0, [r6, 0x7]
-_0801E39A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E3A0: .4byte gBattleExecBuffer
-_0801E3A4: .4byte gBattlescriptCurrInstr
-_0801E3A8: .4byte gBattleCommunication
-_0801E3AC: .4byte gActiveBank
-_0801E3B0: .4byte gBankAttacker
- thumb_func_end atk14_printfromtable_playeronly
-
- thumb_func_start sub_801E3B4
-sub_801E3B4: @ 801E3B4
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- ldr r0, _0801E3E4 @ =gNoOfAllBanks
- ldrb r3, [r0]
- cmp r1, r3
- bge _0801E3DA
- ldr r4, _0801E3E8 @ =gTurnOrder
- ldrb r0, [r4]
- cmp r0, r2
- beq _0801E3DA
-_0801E3CC:
- adds r1, 0x1
- cmp r1, r3
- bge _0801E3DA
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r2
- bne _0801E3CC
-_0801E3DA:
- lsls r0, r1, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0801E3E4: .4byte gNoOfAllBanks
-_0801E3E8: .4byte gTurnOrder
- thumb_func_end sub_801E3B4
-
- thumb_func_start sub_801E3EC
-sub_801E3EC: @ 801E3EC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- movs r0, 0
- mov r10, r0
- movs r6, 0
- movs r1, 0x1
- str r1, [sp, 0x4]
- ldr r1, _0801E430 @ =gBattleCommunication
- ldrb r3, [r1, 0x3]
- movs r0, 0x40
- ands r0, r3
- adds r7, r1, 0
- cmp r0, 0
- beq _0801E444
- ldr r2, _0801E434 @ =gEffectBank
- ldr r0, _0801E438 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0xBF
- ands r0, r3
- strb r0, [r7, 0x3]
- movs r6, 0x40
- ldr r0, _0801E43C @ =0x02000000
- ldr r1, _0801E440 @ =gBankTarget
- b _0801E450
- .align 2, 0
-_0801E430: .4byte gBattleCommunication
-_0801E434: .4byte gEffectBank
-_0801E438: .4byte gBankAttacker
-_0801E43C: .4byte 0x02000000
-_0801E440: .4byte gBankTarget
-_0801E444:
- ldr r2, _0801E538 @ =gEffectBank
- ldr r0, _0801E53C @ =gBankTarget
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r0, _0801E540 @ =0x02000000
- ldr r1, _0801E544 @ =gBankAttacker
-_0801E450:
- ldrb r1, [r1]
- ldr r3, _0801E548 @ =0x00016003
- adds r0, r3
- strb r1, [r0]
- mov r8, r2
- ldr r2, _0801E54C @ =gBattleMons
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x13
- bne _0801E48A
- ldr r0, _0801E550 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- bne _0801E48A
- cmp r4, 0
- bne _0801E48A
- ldrb r0, [r7, 0x3]
- cmp r0, 0x9
- bhi _0801E48A
- bl _0801F5DC
-_0801E48A:
- mov r1, r8
- ldrb r0, [r1]
- bl GetBankIdentity
- ldr r2, _0801E554 @ =gSideAffecting
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r2
- ldrh r1, [r1]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801E4C4
- ldr r0, _0801E550 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- bne _0801E4C4
- cmp r4, 0
- bne _0801E4C4
- ldr r0, _0801E558 @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- cmp r0, 0x7
- bhi _0801E4C4
- bl _0801F5DC
-_0801E4C4:
- ldr r3, _0801E54C @ =gBattleMons
- ldr r2, _0801E538 @ =gEffectBank
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x28]
- mov r8, r2
- mov r9, r3
- cmp r0, 0
- bne _0801E4EA
- ldr r0, _0801E558 @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- cmp r0, 0xB
- beq _0801E4EA
- cmp r0, 0x1F
- beq _0801E4EA
- bl _0801F5DC
-_0801E4EA:
- mov r2, r8
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- mov r1, r9
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _0801E50C
- cmp r6, 0x40
- beq _0801E50C
- bl _0801F5DC
-_0801E50C:
- ldr r0, _0801E558 @ =gBattleCommunication
- ldrb r1, [r0, 0x3]
- adds r7, r0, 0
- cmp r1, 0x6
- bls _0801E518
- b _0801EB4A
-_0801E518:
- ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects
- ldrb r0, [r7, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0x10
- bne _0801E528
- b _0801E714
-_0801E528:
- cmp r0, 0x10
- bhi _0801E560
- cmp r0, 0x7
- beq _0801E57A
- cmp r0, 0x8
- bne _0801E536
- b _0801E630
-_0801E536:
- b _0801EA14
- .align 2, 0
-_0801E538: .4byte gEffectBank
-_0801E53C: .4byte gBankTarget
-_0801E540: .4byte 0x02000000
-_0801E544: .4byte gBankAttacker
-_0801E548: .4byte 0x00016003
-_0801E54C: .4byte gBattleMons
-_0801E550: .4byte gHitMarker
-_0801E554: .4byte gSideAffecting
-_0801E558: .4byte gBattleCommunication
-_0801E55C: .4byte gStatusFlagsForMoveEffects
-_0801E560:
- cmp r0, 0x40
- bne _0801E566
- b _0801E888
-_0801E566:
- cmp r0, 0x40
- bhi _0801E572
- cmp r0, 0x20
- bne _0801E570
- b _0801E7EA
-_0801E570:
- b _0801EA14
-_0801E572:
- cmp r0, 0x80
- bne _0801E578
- b _0801E8E4
-_0801E578:
- b _0801EA14
-_0801E57A:
- mov r3, r8
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- add r0, r9
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2B
- beq _0801E5DC
- ldr r0, _0801E5D4 @ =gActiveBank
- movs r1, 0
- strb r1, [r0]
- ldr r1, _0801E5D8 @ =gNoOfAllBanks
- ldrb r3, [r1]
- adds r7, r0, 0
- mov r12, r1
- cmp r3, 0
- beq _0801E5E8
- mov r4, r9
- ldr r0, [r4, 0x50]
- movs r1, 0x70
- ands r0, r1
- cmp r0, 0
- bne _0801E5E8
- adds r1, r7, 0
- mov r6, r9
- adds r6, 0x50
- movs r5, 0x58
- movs r4, 0x70
-_0801E5B4:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r3
- bcs _0801E5E8
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r6
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _0801E5B4
- b _0801E5E8
- .align 2, 0
-_0801E5D4: .4byte gActiveBank
-_0801E5D8: .4byte gNoOfAllBanks
-_0801E5DC:
- ldr r0, _0801E628 @ =gActiveBank
- ldr r2, _0801E62C @ =gNoOfAllBanks
- ldrb r1, [r2]
- strb r1, [r0]
- adds r7, r0, 0
- mov r12, r2
-_0801E5E8:
- mov r0, r8
- ldrb r2, [r0]
- movs r0, 0x58
- adds r1, r2, 0
- muls r1, r0
- mov r0, r9
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0801E600
- b _0801EA14
-_0801E600:
- ldrb r0, [r7]
- mov r3, r12
- ldrb r3, [r3]
- cmp r0, r3
- beq _0801E60C
- b _0801EA14
-_0801E60C:
- mov r4, r9
- adds r0, r1, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x48
- bne _0801E61A
- b _0801EA14
-_0801E61A:
- cmp r0, 0xF
- bne _0801E620
- b _0801EA14
-_0801E620:
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- b _0801EA04
- .align 2, 0
-_0801E628: .4byte gActiveBank
-_0801E62C: .4byte gNoOfAllBanks
-_0801E630:
- mov r2, r8
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- add r0, r9
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, 0x11
- bne _0801E688
- cmp r4, 0x1
- beq _0801E64A
- cmp r5, 0x80
- bne _0801E688
-_0801E64A:
- ldr r0, _0801E678 @ =gLastUsedAbility
- strb r1, [r0]
- mov r3, r8
- ldrb r0, [r3]
- movs r1, 0x11
- bl RecordAbilityBattle
- ldr r4, _0801E67C @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801E680 @ =BattleScript_PSNPrevention
-_0801E664:
- str r0, [r4]
- ldr r2, _0801E684 @ =gHitMarker
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 6
- ands r0, r1
- cmp r0, 0
- beq _0801E676
- b _0801E928
-_0801E676:
- b _0801E94C
- .align 2, 0
-_0801E678: .4byte gLastUsedAbility
-_0801E67C: .4byte gBattlescriptCurrInstr
-_0801E680: .4byte BattleScript_PSNPrevention
-_0801E684: .4byte gHitMarker
-_0801E688:
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x58
- muls r0, r1
- add r0, r9
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r1, [r1]
- cmp r1, 0x3
- beq _0801E6AC
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _0801E6AC
- cmp r1, 0x8
- beq _0801E6AC
- cmp r0, 0x8
- bne _0801E6C6
-_0801E6AC:
- ldr r0, _0801E710 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _0801E6C6
- cmp r4, 0x1
- bne _0801E6C0
- b _0801E98C
-_0801E6C0:
- cmp r5, 0x80
- bne _0801E6C6
- b _0801E98C
-_0801E6C6:
- mov r2, r8
- ldrb r1, [r2]
- movs r0, 0x58
- muls r1, r0
- mov r4, r9
- adds r3, r1, r4
- adds r0, r3, 0
- adds r0, 0x21
- ldrb r4, [r0]
- cmp r4, 0x3
- bne _0801E6DE
- b _0801EA14
-_0801E6DE:
- adds r0, 0x1
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _0801E6E8
- b _0801EA14
-_0801E6E8:
- cmp r4, 0x8
- bne _0801E6EE
- b _0801EA14
-_0801E6EE:
- cmp r0, 0x8
- bne _0801E6F4
- b _0801EA14
-_0801E6F4:
- mov r0, r9
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0801E702
- b _0801EA14
-_0801E702:
- adds r0, r3, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x11
- bne _0801E70E
- b _0801EA14
-_0801E70E:
- b _0801EA04
- .align 2, 0
-_0801E710: .4byte gHitMarker
-_0801E714:
- mov r2, r8
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- add r0, r9
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, 0x29
- bne _0801E758
- cmp r4, 0x1
- beq _0801E72E
- cmp r5, 0x80
- bne _0801E758
-_0801E72E:
- ldr r0, _0801E74C @ =gLastUsedAbility
- strb r1, [r0]
- mov r3, r8
- ldrb r0, [r3]
- movs r1, 0x29
- bl RecordAbilityBattle
- ldr r4, _0801E750 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801E754 @ =BattleScript_BRNPrevention
- b _0801E664
- .align 2, 0
-_0801E74C: .4byte gLastUsedAbility
-_0801E750: .4byte gBattlescriptCurrInstr
-_0801E754: .4byte BattleScript_BRNPrevention
-_0801E758:
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- mov r2, r9
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xA
- beq _0801E778
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xA
- bne _0801E7A8
-_0801E778:
- ldr r0, _0801E79C @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _0801E7A8
- cmp r4, 0x1
- beq _0801E78E
- cmp r5, 0x80
- bne _0801E7A8
-_0801E78E:
- ldr r4, _0801E7A0 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801E7A4 @ =BattleScript_BRNPrevention
- b _0801E998
- .align 2, 0
-_0801E79C: .4byte gHitMarker
-_0801E7A0: .4byte gBattlescriptCurrInstr
-_0801E7A4: .4byte BattleScript_BRNPrevention
-_0801E7A8:
- mov r3, r8
- ldrb r0, [r3]
- movs r1, 0x58
- adds r2, r0, 0
- muls r2, r1
- mov r4, r9
- adds r1, r2, r4
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xA
- bne _0801E7C2
- b _0801EA14
-_0801E7C2:
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xA
- bne _0801E7CE
- b _0801EA14
-_0801E7CE:
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x29
- bne _0801E7DA
- b _0801EA14
-_0801E7DA:
- mov r0, r9
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0801E7E8
- b _0801EA14
-_0801E7E8:
- b _0801EA04
-_0801E7EA:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0801E826
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801E826
- ldr r0, _0801E87C @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0801E826
- movs r1, 0
- str r1, [sp, 0x4]
-_0801E826:
- ldr r4, _0801E880 @ =gBattleMons
- ldr r0, _0801E884 @ =gEffectBank
- ldrb r3, [r0]
- movs r0, 0x58
- adds r2, r3, 0
- muls r2, r0
- adds r1, r2, r4
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xF
- bne _0801E840
- b _0801EA14
-_0801E840:
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xF
- bne _0801E84C
- b _0801EA14
-_0801E84C:
- adds r0, r4, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0801E85A
- b _0801EA14
-_0801E85A:
- ldr r2, [sp, 0x4]
- cmp r2, 0
- bne _0801E862
- b _0801EA14
-_0801E862:
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x28
- bne _0801E86E
- b _0801EA14
-_0801E86E:
- adds r0, r3, 0
- bl CancelMultiTurnMoves
- movs r3, 0x1
- mov r10, r3
- b _0801EA14
- .align 2, 0
-_0801E87C: .4byte gBattleWeather
-_0801E880: .4byte gBattleMons
-_0801E884: .4byte gEffectBank
-_0801E888:
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- mov r2, r9
- adds r0, r1, r2
- adds r0, 0x20
- ldrb r2, [r0]
- cmp r2, 0x7
- bne _0801E8D0
- cmp r4, 0x1
- beq _0801E8A6
- cmp r5, 0x80
- beq _0801E8A6
- b _0801EA14
-_0801E8A6:
- ldr r0, _0801E8C4 @ =gLastUsedAbility
- strb r2, [r0]
- mov r3, r8
- ldrb r0, [r3]
- movs r1, 0x7
- bl RecordAbilityBattle
- ldr r4, _0801E8C8 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801E8CC @ =BattleScript_PRLZPrevention
- b _0801E664
- .align 2, 0
-_0801E8C4: .4byte gLastUsedAbility
-_0801E8C8: .4byte gBattlescriptCurrInstr
-_0801E8CC: .4byte BattleScript_PRLZPrevention
-_0801E8D0:
- mov r0, r9
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0801E8DE
- b _0801EA14
-_0801E8DE:
- movs r4, 0x1
- mov r10, r4
- b _0801EA14
-_0801E8E4:
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- add r0, r9
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, 0x11
- bne _0801E952
- cmp r4, 0x1
- beq _0801E8FE
- cmp r5, 0x80
- bne _0801E952
-_0801E8FE:
- ldr r0, _0801E938 @ =gLastUsedAbility
- strb r1, [r0]
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x11
- bl RecordAbilityBattle
- ldr r4, _0801E93C @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801E940 @ =BattleScript_PSNPrevention
- str r0, [r4]
- ldr r2, _0801E944 @ =gHitMarker
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 6
- ands r0, r1
- cmp r0, 0
- beq _0801E94C
-_0801E928:
- movs r0, 0x1
- strb r0, [r7, 0x5]
- ldr r0, _0801E948 @ =0xffffdfff
- ands r1, r0
- str r1, [r2]
- bl _0801F5FA
- .align 2, 0
-_0801E938: .4byte gLastUsedAbility
-_0801E93C: .4byte gBattlescriptCurrInstr
-_0801E940: .4byte BattleScript_PSNPrevention
-_0801E944: .4byte gHitMarker
-_0801E948: .4byte 0xffffdfff
-_0801E94C:
- strb r0, [r7, 0x5]
- bl _0801F5FA
-_0801E952:
- mov r2, r8
- ldrb r0, [r2]
- movs r1, 0x58
- muls r0, r1
- add r0, r9
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r1, [r1]
- cmp r1, 0x3
- beq _0801E976
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _0801E976
- cmp r1, 0x8
- beq _0801E976
- cmp r0, 0x8
- bne _0801E9B4
-_0801E976:
- ldr r0, _0801E9A4 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _0801E9B4
- cmp r4, 0x1
- beq _0801E98C
- cmp r5, 0x80
- bne _0801E9B4
-_0801E98C:
- ldr r4, _0801E9A8 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801E9AC @ =BattleScript_PSNPrevention
-_0801E998:
- str r0, [r4]
- ldr r1, _0801E9B0 @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- bl _0801F5FA
- .align 2, 0
-_0801E9A4: .4byte gHitMarker
-_0801E9A8: .4byte gBattlescriptCurrInstr
-_0801E9AC: .4byte BattleScript_PSNPrevention
-_0801E9B0: .4byte gBattleCommunication
-_0801E9B4:
- mov r3, r8
- ldrb r0, [r3]
- movs r6, 0x58
- muls r0, r6
- mov r2, r9
- adds r2, 0x4C
- adds r5, r0, r2
- ldr r4, [r5]
- cmp r4, 0
- bne _0801EA14
- mov r3, r9
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r3, [r0]
- cmp r3, 0x3
- beq _0801EA0A
- adds r0, 0x1
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _0801EA0A
- cmp r3, 0x8
- beq _0801EA0A
- cmp r0, 0x8
- beq _0801EA0A
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x11
- beq _0801EA14
- mov r4, r8
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x9
- negs r2, r2
- ands r0, r2
- str r0, [r1]
-_0801EA04:
- movs r0, 0x1
- mov r10, r0
- b _0801EA14
-_0801EA0A:
- ldr r0, _0801EA58 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0]
-_0801EA14:
- mov r1, r10
- cmp r1, 0x1
- beq _0801EA1C
- b _0801EB3C
-_0801EA1C:
- ldr r0, _0801EA5C @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects
- ldr r0, _0801EA64 @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r3, [r0]
- cmp r3, 0x7
- bne _0801EA70
- bl Random
- ldr r2, _0801EA68 @ =gBattleMons
- ldr r1, _0801EA6C @ =gEffectBank
- ldrb r3, [r1]
- movs r1, 0x58
- muls r3, r1
- adds r2, 0x4C
- adds r3, r2
- movs r1, 0x3
- ands r1, r0
- adds r1, 0x2
- ldr r0, [r3]
- orrs r0, r1
- str r0, [r3]
- b _0801EA84
- .align 2, 0
-_0801EA58: .4byte gBattleMoveFlags
-_0801EA5C: .4byte gBattlescriptCurrInstr
-_0801EA60: .4byte gStatusFlagsForMoveEffects
-_0801EA64: .4byte gBattleCommunication
-_0801EA68: .4byte gBattleMons
-_0801EA6C: .4byte gEffectBank
-_0801EA70:
- ldr r2, _0801EAD4 @ =gBattleMons
- ldr r0, _0801EAD8 @ =gEffectBank
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r2, 0x4C
- adds r1, r2
- ldr r0, [r1]
- orrs r0, r3
- str r0, [r1]
-_0801EA84:
- ldr r2, _0801EADC @ =gBattlescriptCurrInstr
- ldr r1, _0801EAE0 @ =gMoveEffectBS_Ptrs
- ldr r5, _0801EAE4 @ =gBattleCommunication
- ldrb r0, [r5, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [r2]
- ldr r4, _0801EAE8 @ =gActiveBank
- ldr r1, _0801EAD8 @ =gEffectBank
- ldrb r0, [r1]
- strb r0, [r4]
- ldrb r1, [r1]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _0801EAEC @ =gUnknown_02024ACC
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r2, _0801EAF0 @ =gHitMarker
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 6
- ands r0, r1
- cmp r0, 0
- beq _0801EAF8
- movs r0, 0x1
- strb r0, [r5, 0x5]
- ldr r0, _0801EAF4 @ =0xffffdfff
- ands r1, r0
- str r1, [r2]
- b _0801EAFA
- .align 2, 0
-_0801EAD4: .4byte gBattleMons
-_0801EAD8: .4byte gEffectBank
-_0801EADC: .4byte gBattlescriptCurrInstr
-_0801EAE0: .4byte gMoveEffectBS_Ptrs
-_0801EAE4: .4byte gBattleCommunication
-_0801EAE8: .4byte gActiveBank
-_0801EAEC: .4byte gUnknown_02024ACC
-_0801EAF0: .4byte gHitMarker
-_0801EAF4: .4byte 0xffffdfff
-_0801EAF8:
- strb r0, [r5, 0x5]
-_0801EAFA:
- ldr r0, _0801EB2C @ =gBattleCommunication
- ldrb r2, [r0, 0x3]
- adds r7, r0, 0
- cmp r2, 0x2
- beq _0801EB14
- cmp r2, 0x6
- beq _0801EB14
- cmp r2, 0x5
- beq _0801EB14
- cmp r2, 0x3
- beq _0801EB14
- bl _0801F5FA
-_0801EB14:
- ldr r0, _0801EB30 @ =0x02000000
- ldrb r1, [r7, 0x3]
- ldr r2, _0801EB34 @ =0x000160ca
- adds r0, r2
- strb r1, [r0]
- ldr r2, _0801EB38 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 7
- bl _0801F4F2
- .align 2, 0
-_0801EB2C: .4byte gBattleCommunication
-_0801EB30: .4byte 0x02000000
-_0801EB34: .4byte 0x000160ca
-_0801EB38: .4byte gHitMarker
-_0801EB3C:
- mov r3, r10
- cmp r3, 0
- beq _0801EB46
- bl _0801F5FA
-_0801EB46:
- bl _0801F5DC
-_0801EB4A:
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- mov r0, r9
- adds r0, 0x50
- adds r1, r0
- ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects
- ldrb r3, [r7, 0x3]
- lsls r0, r3, 2
- adds r0, r2
- ldr r1, [r1]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0801EB6E
- bl _0801F5DC
-_0801EB6E:
- subs r0, r3, 0x7
- cmp r0, 0x34
- bls _0801EB78
- bl _0801F5FA
-_0801EB78:
- lsls r0, 2
- ldr r1, _0801EB88 @ =_0801EB8C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801EB84: .4byte gStatusFlagsForMoveEffects
-_0801EB88: .4byte _0801EB8C
- .align 2, 0
-_0801EB8C:
- .4byte _0801EC60
- .4byte _0801ECD4
- .4byte _0801EE4C
- .4byte _0801ED60
- .4byte _0801EDDC
- .4byte _0801EE84
- .4byte _0801EECC
- .4byte _0801EFA8
- .4byte _0801EFEC
- .4byte _0801EFEC
- .4byte _0801EFEC
- .4byte _0801EFEC
- .4byte _0801EFEC
- .4byte _0801EFEC
- .4byte _0801EFEC
- .4byte _0801F040
- .4byte _0801F040
- .4byte _0801F040
- .4byte _0801F040
- .4byte _0801F040
- .4byte _0801F040
- .4byte _0801F040
- .4byte _0801F13C
- .4byte _0801F184
- .4byte _0801F1A4
- .4byte _0801F364
- .4byte _0801F3A0
- .4byte _0801F3BC
- .4byte _0801F3D4
- .4byte _0801F3EC
- .4byte _0801F44C
- .4byte _0801F464
- .4byte _0801F094
- .4byte _0801F094
- .4byte _0801F094
- .4byte _0801F094
- .4byte _0801F094
- .4byte _0801F094
- .4byte _0801F094
- .4byte _0801F0E8
- .4byte _0801F0E8
- .4byte _0801F0E8
- .4byte _0801F0E8
- .4byte _0801F0E8
- .4byte _0801F0E8
- .4byte _0801F0E8
- .4byte _0801F4A8
- .4byte _0801F500
- .4byte _0801F5FA
- .4byte _0801F5FA
- .4byte _0801F5FA
- .4byte _0801F5FA
- .4byte _0801F5EC
-_0801EC60:
- mov r1, r8
- ldrb r0, [r1]
- movs r5, 0x58
- adds r1, r0, 0
- muls r1, r5
- mov r2, r9
- adds r0, r1, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _0801EC7A
- bl _0801F5DC
-_0801EC7A:
- mov r4, r9
- adds r4, 0x50
- adds r0, r1, r4
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801EC8E
- bl _0801F5DC
-_0801EC8E:
- bl Random
- mov r3, r8
- ldrb r1, [r3]
- adds r2, r1, 0
- muls r2, r5
- adds r2, r4
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- lsrs r1, 16
- adds r1, 0x2
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r4, _0801ECC8 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r1, _0801ECCC @ =gMoveEffectBS_Ptrs
- ldr r0, _0801ECD0 @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _0801F5F8
- .align 2, 0
-_0801ECC8: .4byte gBattlescriptCurrInstr
-_0801ECCC: .4byte gMoveEffectBS_Ptrs
-_0801ECD0: .4byte gBattleCommunication
-_0801ECD4:
- mov r0, r8
- ldrb r2, [r0]
- movs r6, 0x58
- adds r0, r2, 0
- muls r0, r6
- add r0, r9
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, 0x27
- bne _0801ED18
- cmp r4, 0x1
- beq _0801ECF4
- cmp r5, 0x80
- beq _0801ECF4
- bl _0801F5DC
-_0801ECF4:
- ldr r0, _0801ED0C @ =gLastUsedAbility
- strb r1, [r0]
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x27
- bl RecordAbilityBattle
- ldr r1, _0801ED10 @ =gBattlescriptCurrInstr
- ldr r0, _0801ED14 @ =BattleScript_FlinchPrevention
- str r0, [r1]
- bl _0801F5FA
- .align 2, 0
-_0801ED0C: .4byte gLastUsedAbility
-_0801ED10: .4byte gBattlescriptCurrInstr
-_0801ED14: .4byte BattleScript_FlinchPrevention
-_0801ED18:
- adds r0, r2, 0
- bl sub_801E3B4
- ldr r1, _0801ED54 @ =gCurrentMoveTurn
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bhi _0801ED2E
- bl _0801F5DC
-_0801ED2E:
- mov r2, r8
- ldrb r0, [r2]
- adds r2, r0, 0
- muls r2, r6
- mov r0, r9
- adds r0, 0x50
- adds r2, r0
- ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects
- ldr r0, _0801ED5C @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- orrs r1, r0
- str r1, [r2]
- bl _0801F5DC
- .align 2, 0
-_0801ED54: .4byte gCurrentMoveTurn
-_0801ED58: .4byte gStatusFlagsForMoveEffects
-_0801ED5C: .4byte gBattleCommunication
-_0801ED60:
- mov r3, r8
- ldrb r0, [r3]
- movs r5, 0x58
- muls r0, r5
- mov r4, r9
- adds r4, 0x50
- adds r2, r0, r4
- ldr r1, [r2]
- movs r0, 0x70
- ands r0, r1
- cmp r0, 0
- beq _0801ED7C
- bl _0801F5DC
-_0801ED7C:
- movs r0, 0x80
- lsls r0, 5
- orrs r1, r0
- str r1, [r2]
- ldr r1, _0801EDC8 @ =gLockedMove
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldr r1, _0801EDCC @ =gCurrentMove
- ldrh r1, [r1]
- strh r1, [r0]
- bl Random
- mov r2, r8
- ldrb r1, [r2]
- adds r2, r1, 0
- muls r2, r5
- adds r2, r4
- movs r1, 0x3
- ands r1, r0
- adds r1, 0x2
- lsls r1, 4
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r4, _0801EDD0 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r1, _0801EDD4 @ =gMoveEffectBS_Ptrs
- ldr r0, _0801EDD8 @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _0801F5F8
- .align 2, 0
-_0801EDC8: .4byte gLockedMove
-_0801EDCC: .4byte gCurrentMove
-_0801EDD0: .4byte gBattlescriptCurrInstr
-_0801EDD4: .4byte gMoveEffectBS_Ptrs
-_0801EDD8: .4byte gBattleCommunication
-_0801EDDC:
- ldr r5, _0801EE30 @ =gBankAttacker
- ldrb r0, [r5]
- bl GetBankIdentity
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- bne _0801EE14
- ldr r4, _0801EE34 @ =gPaydayMoney
- ldrh r3, [r4]
- ldr r2, _0801EE38 @ =gBattleMons
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- adds r0, r3, r0
- strh r0, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r3, r0
- bls _0801EE14
- ldr r3, _0801EE3C @ =0x0000ffff
- adds r0, r3, 0
- strh r0, [r4]
-_0801EE14:
- ldr r4, _0801EE40 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r1, _0801EE44 @ =gMoveEffectBS_Ptrs
- ldr r0, _0801EE48 @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _0801F5F8
- .align 2, 0
-_0801EE30: .4byte gBankAttacker
-_0801EE34: .4byte gPaydayMoney
-_0801EE38: .4byte gBattleMons
-_0801EE3C: .4byte 0x0000ffff
-_0801EE40: .4byte gBattlescriptCurrInstr
-_0801EE44: .4byte gMoveEffectBS_Ptrs
-_0801EE48: .4byte gBattleCommunication
-_0801EE4C:
- mov r4, r8
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- mov r1, r9
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- beq _0801EE62
- b _0801F5DC
-_0801EE62:
- bl Random
- ldr r4, _0801EE80 @ =gBattleCommunication
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- adds r0, 0x3
- strb r0, [r4, 0x3]
- movs r0, 0
- movs r1, 0
- bl sub_801E3EC
- b _0801F5FA
- .align 2, 0
-_0801EE80: .4byte gBattleCommunication
-_0801EE84:
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r9
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 5
- orrs r0, r1
- str r0, [r2]
- ldr r1, _0801EEC0 @ =gLockedMove
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- ldr r1, _0801EEC4 @ =gCurrentMove
- ldrh r1, [r1]
- strh r1, [r0]
- ldr r0, _0801EEC8 @ =gProtectStructs
- ldrb r1, [r2]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1, 0x1]
- b _0801F5DC
- .align 2, 0
-_0801EEC0: .4byte gLockedMove
-_0801EEC4: .4byte gCurrentMove
-_0801EEC8: .4byte gProtectStructs
-_0801EECC:
- mov r3, r8
- ldrb r0, [r3]
- movs r6, 0x58
- muls r0, r6
- mov r4, r9
- adds r4, 0x50
- adds r0, r4
- ldr r5, [r0]
- movs r0, 0xE0
- lsls r0, 8
- ands r5, r0
- cmp r5, 0
- beq _0801EEE8
- b _0801F5DC
-_0801EEE8:
- bl Random
- mov r2, r8
- ldrb r1, [r2]
- adds r2, r1, 0
- muls r2, r6
- adds r2, r4
- movs r1, 0x3
- ands r1, r0
- adds r1, 0x3
- lsls r1, 13
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r2, _0801EF80 @ =0x02000000
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 1
- ldr r4, _0801EF84 @ =0x00016004
- adds r0, r4
- adds r0, r2
- ldr r6, _0801EF88 @ =gCurrentMove
- ldrh r1, [r6]
- strb r1, [r0]
- ldrb r0, [r3]
- lsls r0, 1
- ldr r1, _0801EF8C @ =0x00016005
- adds r0, r1
- adds r0, r2
- ldrh r1, [r6]
- lsrs r1, 8
- strb r1, [r0]
- ldrb r0, [r3]
- ldr r3, _0801EF90 @ =0x00016020
- adds r0, r3
- adds r0, r2
- ldr r1, _0801EF94 @ =gBankAttacker
- ldrb r1, [r1]
- strb r1, [r0]
- ldr r4, _0801EF98 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r1, _0801EF9C @ =gMoveEffectBS_Ptrs
- ldr r2, _0801EFA0 @ =gBattleCommunication
- ldrb r0, [r2, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [r4]
- strb r5, [r2, 0x5]
- ldr r1, _0801EFA4 @ =gTrappingMoves
- ldrh r0, [r1]
- ldrh r4, [r6]
- cmp r0, r4
- bne _0801EF5C
- b _0801F5FA
-_0801EF5C:
- adds r3, r1, 0
- adds r1, r6, 0
-_0801EF60:
- ldrb r0, [r2, 0x5]
- adds r0, 0x1
- strb r0, [r2, 0x5]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _0801EF70
- b _0801F5FA
-_0801EF70:
- ldrb r0, [r2, 0x5]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- ldrh r4, [r1]
- cmp r0, r4
- bne _0801EF60
- b _0801F5FA
- .align 2, 0
-_0801EF80: .4byte 0x02000000
-_0801EF84: .4byte 0x00016004
-_0801EF88: .4byte gCurrentMove
-_0801EF8C: .4byte 0x00016005
-_0801EF90: .4byte 0x00016020
-_0801EF94: .4byte gBankAttacker
-_0801EF98: .4byte gBattlescriptCurrInstr
-_0801EF9C: .4byte gMoveEffectBS_Ptrs
-_0801EFA0: .4byte gBattleCommunication
-_0801EFA4: .4byte gTrappingMoves
-_0801EFA8:
- ldr r1, _0801EFD8 @ =gBattleMoveDamage
- ldr r0, _0801EFDC @ =gHP_dealt
- ldr r0, [r0]
- cmp r0, 0
- bge _0801EFB4
- adds r0, 0x3
-_0801EFB4:
- asrs r0, 2
- str r0, [r1]
- cmp r0, 0
- bne _0801EFC0
- movs r0, 0x1
- str r0, [r1]
-_0801EFC0:
- ldr r4, _0801EFE0 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r1, _0801EFE4 @ =gMoveEffectBS_Ptrs
- ldr r0, _0801EFE8 @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- b _0801F5F8
- .align 2, 0
-_0801EFD8: .4byte gBattleMoveDamage
-_0801EFDC: .4byte gHP_dealt
-_0801EFE0: .4byte gBattlescriptCurrInstr
-_0801EFE4: .4byte gMoveEffectBS_Ptrs
-_0801EFE8: .4byte gBattleCommunication
-_0801EFEC:
- ldrb r1, [r7, 0x3]
- adds r1, 0xF2
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x10
- adds r2, r6, 0
- movs r3, 0
- bl sub_8025E20
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _0801F008
- b _0801F5DC
-_0801F008:
- ldr r2, _0801F02C @ =0x02000000
- ldrb r1, [r7, 0x3]
- movs r0, 0x3F
- ands r0, r1
- ldr r4, _0801F030 @ =0x000160a4
- adds r1, r2, r4
- strb r0, [r1]
- ldr r0, _0801F034 @ =0x000160a5
- adds r2, r0
- strb r3, [r2]
- ldr r4, _0801F038 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F03C @ =BattleScript_StatUp
- b _0801F5F8
- .align 2, 0
-_0801F02C: .4byte 0x02000000
-_0801F030: .4byte 0x000160a4
-_0801F034: .4byte 0x000160a5
-_0801F038: .4byte gBattlescriptCurrInstr
-_0801F03C: .4byte BattleScript_StatUp
-_0801F040:
- movs r0, 0x70
- negs r0, r0
- ldrb r1, [r7, 0x3]
- adds r1, 0xEB
- lsls r1, 24
- lsrs r1, 24
- adds r2, r6, 0
- movs r3, 0
- bl sub_8025E20
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _0801F05E
- b _0801F5DC
-_0801F05E:
- ldr r2, _0801F080 @ =0x02000000
- ldrb r1, [r7, 0x3]
- movs r0, 0x3F
- ands r0, r1
- ldr r4, _0801F084 @ =0x000160a4
- adds r1, r2, r4
- strb r0, [r1]
- ldr r0, _0801F088 @ =0x000160a5
- adds r2, r0
- strb r3, [r2]
- ldr r4, _0801F08C @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F090 @ =BattleScript_StatDown
- b _0801F5F8
- .align 2, 0
-_0801F080: .4byte 0x02000000
-_0801F084: .4byte 0x000160a4
-_0801F088: .4byte 0x000160a5
-_0801F08C: .4byte gBattlescriptCurrInstr
-_0801F090: .4byte BattleScript_StatDown
-_0801F094:
- ldrb r1, [r7, 0x3]
- adds r1, 0xDA
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x20
- adds r2, r6, 0
- movs r3, 0
- bl sub_8025E20
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _0801F0B0
- b _0801F5DC
-_0801F0B0:
- ldr r2, _0801F0D4 @ =0x02000000
- ldrb r1, [r7, 0x3]
- movs r0, 0x3F
- ands r0, r1
- ldr r4, _0801F0D8 @ =0x000160a4
- adds r1, r2, r4
- strb r0, [r1]
- ldr r0, _0801F0DC @ =0x000160a5
- adds r2, r0
- strb r3, [r2]
- ldr r4, _0801F0E0 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F0E4 @ =BattleScript_StatUp
- b _0801F5F8
- .align 2, 0
-_0801F0D4: .4byte 0x02000000
-_0801F0D8: .4byte 0x000160a4
-_0801F0DC: .4byte 0x000160a5
-_0801F0E0: .4byte gBattlescriptCurrInstr
-_0801F0E4: .4byte BattleScript_StatUp
-_0801F0E8:
- movs r0, 0x60
- negs r0, r0
- ldrb r1, [r7, 0x3]
- adds r1, 0xD3
- lsls r1, 24
- lsrs r1, 24
- adds r2, r6, 0
- movs r3, 0
- bl sub_8025E20
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _0801F106
- b _0801F5DC
-_0801F106:
- ldr r2, _0801F128 @ =0x02000000
- ldrb r1, [r7, 0x3]
- movs r0, 0x3F
- ands r0, r1
- ldr r4, _0801F12C @ =0x000160a4
- adds r1, r2, r4
- strb r0, [r1]
- ldr r0, _0801F130 @ =0x000160a5
- adds r2, r0
- strb r3, [r2]
- ldr r4, _0801F134 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F138 @ =BattleScript_StatDown
- b _0801F5F8
- .align 2, 0
-_0801F128: .4byte 0x02000000
-_0801F12C: .4byte 0x000160a4
-_0801F130: .4byte 0x000160a5
-_0801F134: .4byte gBattlescriptCurrInstr
-_0801F138: .4byte BattleScript_StatDown
-_0801F13C:
- mov r2, r8
- ldrb r1, [r2]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r9
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 15
- orrs r0, r1
- str r0, [r2]
- ldr r2, _0801F178 @ =gDisableStructs
- mov r3, r8
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strb r1, [r0, 0x19]
- ldr r1, _0801F17C @ =gLockedMove
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldr r1, _0801F180 @ =gCurrentMove
- ldrh r1, [r1]
- strh r1, [r0]
- b _0801F5DC
- .align 2, 0
-_0801F178: .4byte gDisableStructs
-_0801F17C: .4byte gLockedMove
-_0801F180: .4byte gCurrentMove
-_0801F184:
- ldr r0, _0801F1A0 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r9
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 16
-_0801F19A:
- orrs r0, r1
- str r0, [r2]
- b _0801F5DC
- .align 2, 0
-_0801F1A0: .4byte gBankAttacker
-_0801F1A4:
- ldr r4, _0801F254 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0801F1D8
- ldr r0, _0801F258 @ =gBattleTypeFlags
- ldrh r1, [r0]
- ldr r0, _0801F25C @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _0801F214
- ldr r0, _0801F260 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _0801F1D8
- b _0801F5DC
-_0801F1D8:
- ldr r0, _0801F258 @ =gBattleTypeFlags
- ldrh r1, [r0]
- ldr r0, _0801F25C @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _0801F214
- ldr r0, _0801F260 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _0801F214
- ldr r0, _0801F264 @ =gWishFutureKnock
- adds r0, 0x29
- adds r0, r6, r0
- ldrb r1, [r0]
- ldr r3, _0801F268 @ =gBitTable
- ldr r2, _0801F26C @ =gBattlePartyID
- ldr r0, _0801F254 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0801F214
- b _0801F5DC
-_0801F214:
- ldr r2, _0801F270 @ =gBattleMons
- ldr r1, _0801F274 @ =gBankTarget
- ldrb r0, [r1]
- movs r3, 0x58
- muls r0, r3
- adds r4, r0, r2
- ldrh r0, [r4, 0x2E]
- adds r7, r1, 0
- mov r9, r2
- cmp r0, 0
- beq _0801F284
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3C
- bne _0801F284
- ldr r1, _0801F278 @ =gBattlescriptCurrInstr
- ldr r0, _0801F27C @ =BattleScript_NoItemSteal
- str r0, [r1]
- ldr r1, _0801F280 @ =gLastUsedAbility
- ldrb r0, [r7]
- muls r0, r3
- add r0, r9
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- ldrb r1, [r1]
- bl RecordAbilityBattle
- b _0801F5FA
- .align 2, 0
-_0801F254: .4byte gBankAttacker
-_0801F258: .4byte gBattleTypeFlags
-_0801F25C: .4byte 0x00000902
-_0801F260: .4byte gTrainerBattleOpponent
-_0801F264: .4byte gWishFutureKnock
-_0801F268: .4byte gBitTable
-_0801F26C: .4byte gBattlePartyID
-_0801F270: .4byte gBattleMons
-_0801F274: .4byte gBankTarget
-_0801F278: .4byte gBattlescriptCurrInstr
-_0801F27C: .4byte BattleScript_NoItemSteal
-_0801F280: .4byte gLastUsedAbility
-_0801F284:
- ldr r4, _0801F340 @ =gBankAttacker
- mov r10, r4
- ldrb r1, [r4]
- movs r0, 0x58
- mov r8, r0
- mov r0, r8
- muls r0, r1
- add r0, r9
- ldrh r3, [r0, 0x2E]
- cmp r3, 0
- beq _0801F29C
- b _0801F5DC
-_0801F29C:
- ldrb r0, [r7]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- add r0, r9
- ldrh r2, [r0, 0x2E]
- adds r0, r2, 0
- cmp r0, 0xAF
- bne _0801F2B0
- b _0801F5DC
-_0801F2B0:
- cmp r0, 0
- bne _0801F2B6
- b _0801F5DC
-_0801F2B6:
- lsls r0, r1, 1
- ldr r5, _0801F344 @ =0x020160f0
- adds r0, r5
- ldr r1, _0801F348 @ =gLastUsedItem
- strh r2, [r0]
- strh r2, [r1]
- ldrb r0, [r7]
- mov r4, r8
- muls r4, r0
- adds r0, r4, 0
- add r0, r9
- movs r6, 0
- strh r3, [r0, 0x2E]
- ldr r4, _0801F34C @ =gActiveBank
- mov r2, r10
- ldrb r0, [r2]
- strb r0, [r4]
- str r1, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetAttributes
- mov r3, r10
- ldrb r0, [r3]
- bl MarkBufferBankForExecution
- ldrb r0, [r7]
- strb r0, [r4]
- ldrb r0, [r7]
- mov r4, r8
- muls r4, r0
- adds r0, r4, 0
- mov r1, r9
- adds r1, 0x2E
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetAttributes
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldr r4, _0801F350 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F354 @ =BattleScript_ItemSteal
- str r0, [r4]
- ldr r0, _0801F358 @ =0xfffe9f10
- adds r5, r0
- ldrb r0, [r7]
- lsls r0, 1
- ldr r1, _0801F35C @ =0x000160e8
- adds r0, r1
- adds r0, r5
- strb r6, [r0]
- ldrb r0, [r7]
- lsls r0, 1
- ldr r2, _0801F360 @ =0x000160e9
- adds r0, r2
- adds r0, r5
- strb r6, [r0]
- b _0801F5FA
- .align 2, 0
-_0801F340: .4byte gBankAttacker
-_0801F344: .4byte 0x020160f0
-_0801F348: .4byte gLastUsedItem
-_0801F34C: .4byte gActiveBank
-_0801F350: .4byte gBattlescriptCurrInstr
-_0801F354: .4byte BattleScript_ItemSteal
-_0801F358: .4byte 0xfffe9f10
-_0801F35C: .4byte 0x000160e8
-_0801F360: .4byte 0x000160e9
-_0801F364:
- ldr r3, _0801F394 @ =gBankTarget
- ldrb r1, [r3]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r9
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 19
- orrs r0, r1
- str r0, [r2]
- ldr r2, _0801F398 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _0801F39C @ =gBankAttacker
- ldrb r1, [r1]
- strb r1, [r0, 0x14]
- b _0801F5DC
- .align 2, 0
-_0801F394: .4byte gBankTarget
-_0801F398: .4byte gDisableStructs
-_0801F39C: .4byte gBankAttacker
-_0801F3A0:
- ldr r0, _0801F3B8 @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r9
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 20
- b _0801F19A
- .align 2, 0
-_0801F3B8: .4byte gBankTarget
-_0801F3BC:
- ldr r4, _0801F3CC @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F3D0 @ =gUnknown_081D9224
- b _0801F5F8
- .align 2, 0
-_0801F3CC: .4byte gBattlescriptCurrInstr
-_0801F3D0: .4byte gUnknown_081D9224
-_0801F3D4:
- ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F3E8 @ =BattleScript_RapidSpinAway
- b _0801F5F8
- .align 2, 0
-_0801F3E4: .4byte gBattlescriptCurrInstr
-_0801F3E8: .4byte BattleScript_RapidSpinAway
-_0801F3EC:
- ldr r6, _0801F43C @ =gBankTarget
- ldrb r0, [r6]
- movs r2, 0x58
- muls r0, r2
- mov r1, r9
- adds r1, 0x4C
- adds r5, r0, r1
- ldr r4, [r5]
- movs r0, 0x40
- ands r0, r4
- cmp r0, 0
- bne _0801F406
- b _0801F5DC
-_0801F406:
- movs r0, 0x41
- negs r0, r0
- ands r4, r0
- str r4, [r5]
- ldr r4, _0801F440 @ =gActiveBank
- ldrb r0, [r6]
- strb r0, [r4]
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r4, _0801F444 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F448 @ =BattleScript_TargetPRLZHeal
- b _0801F5F8
- .align 2, 0
-_0801F43C: .4byte gBankTarget
-_0801F440: .4byte gActiveBank
-_0801F444: .4byte gBattlescriptCurrInstr
-_0801F448: .4byte BattleScript_TargetPRLZHeal
-_0801F44C:
- ldr r4, _0801F45C @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F460 @ =gUnknown_081D93FA
- b _0801F5F8
- .align 2, 0
-_0801F45C: .4byte gBattlescriptCurrInstr
-_0801F460: .4byte gUnknown_081D93FA
-_0801F464:
- ldr r4, _0801F494 @ =gBattleMoveDamage
- ldr r0, _0801F498 @ =gHP_dealt
- ldr r0, [r0]
- movs r1, 0x3
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801F47A
- movs r0, 0x1
- str r0, [r4]
-_0801F47A:
- ldr r4, _0801F49C @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r1, _0801F4A0 @ =gMoveEffectBS_Ptrs
- ldr r0, _0801F4A4 @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- b _0801F5F8
- .align 2, 0
-_0801F494: .4byte gBattleMoveDamage
-_0801F498: .4byte gHP_dealt
-_0801F49C: .4byte gBattlescriptCurrInstr
-_0801F4A0: .4byte gMoveEffectBS_Ptrs
-_0801F4A4: .4byte gBattleCommunication
-_0801F4A8:
- mov r3, r8
- ldrb r0, [r3]
- movs r5, 0x58
- muls r0, r5
- mov r4, r9
- adds r4, 0x50
- adds r2, r0, r4
- ldr r1, [r2]
- movs r0, 0xC0
- lsls r0, 4
- ands r0, r1
- cmp r0, 0
- beq _0801F4C4
- b _0801F5DC
-_0801F4C4:
- movs r0, 0x80
- lsls r0, 5
- orrs r1, r0
- str r1, [r2]
- ldr r1, _0801F4F8 @ =gLockedMove
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldr r1, _0801F4FC @ =gCurrentMove
- ldrh r1, [r1]
- strh r1, [r0]
- bl Random
- mov r2, r8
- ldrb r1, [r2]
- adds r2, r1, 0
- muls r2, r5
- adds r2, r4
- movs r1, 0x1
- ands r1, r0
- adds r1, 0x2
- lsls r1, 10
- ldr r0, [r2]
-_0801F4F2:
- orrs r0, r1
- str r0, [r2]
- b _0801F5FA
- .align 2, 0
-_0801F4F8: .4byte gLockedMove
-_0801F4FC: .4byte gCurrentMove
-_0801F500:
- mov r5, r8
- ldrb r3, [r5]
- movs r4, 0x58
- adds r0, r3, 0
- muls r0, r4
- mov r2, r9
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r2, [r0]
- cmp r2, 0x3C
- bne _0801F540
- ldrh r0, [r1, 0x2E]
- cmp r0, 0
- beq _0801F5DC
- ldr r0, _0801F534 @ =gLastUsedAbility
- strb r2, [r0]
- ldr r1, _0801F538 @ =gBattlescriptCurrInstr
- ldr r0, _0801F53C @ =BattleScript_NoItemSteal
- str r0, [r1]
- ldrb r0, [r5]
- movs r1, 0x3C
- bl RecordAbilityBattle
- b _0801F5FA
- .align 2, 0
-_0801F534: .4byte gLastUsedAbility
-_0801F538: .4byte gBattlescriptCurrInstr
-_0801F53C: .4byte BattleScript_NoItemSteal
-_0801F540:
- ldrh r0, [r1, 0x2E]
- cmp r0, 0
- beq _0801F5DC
- adds r0, r3, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _0801F5B8 @ =gLastUsedItem
- mov r3, r8
- ldrb r0, [r3]
- muls r0, r4
- add r0, r9
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
- ldrb r0, [r3]
- muls r0, r4
- add r0, r9
- movs r5, 0
- movs r1, 0
- strh r1, [r0, 0x2E]
- ldr r2, _0801F5BC @ =gWishFutureKnock
- adds r2, 0x29
- adds r2, r6, r2
- ldr r3, _0801F5C0 @ =gBitTable
- ldr r1, _0801F5C4 @ =gBattlePartyID
- mov r4, r8
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r4, _0801F5C8 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F5CC @ =BattleScript_KnockedOff
- str r0, [r4]
- ldr r1, _0801F5D0 @ =0x02000000
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- ldr r3, _0801F5D4 @ =0x000160e8
- adds r0, r3
- adds r0, r1
- strb r5, [r0]
- ldrb r0, [r2]
- lsls r0, 1
- ldr r4, _0801F5D8 @ =0x000160e9
- adds r0, r4
- adds r0, r1
- strb r5, [r0]
- b _0801F5FA
- .align 2, 0
-_0801F5B8: .4byte gLastUsedItem
-_0801F5BC: .4byte gWishFutureKnock
-_0801F5C0: .4byte gBitTable
-_0801F5C4: .4byte gBattlePartyID
-_0801F5C8: .4byte gBattlescriptCurrInstr
-_0801F5CC: .4byte BattleScript_KnockedOff
-_0801F5D0: .4byte 0x02000000
-_0801F5D4: .4byte 0x000160e8
-_0801F5D8: .4byte 0x000160e9
-_0801F5DC:
- ldr r1, _0801F5E8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- b _0801F5FA
- .align 2, 0
-_0801F5E8: .4byte gBattlescriptCurrInstr
-_0801F5EC:
- ldr r4, _0801F60C @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _0801F610 @ =gUnknown_081D94B0
-_0801F5F8:
- str r0, [r4]
-_0801F5FA:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F60C: .4byte gBattlescriptCurrInstr
-_0801F610: .4byte gUnknown_081D94B0
- thumb_func_end sub_801E3EC
-
- thumb_func_start atk15_seteffectwithchancetarget
-atk15_seteffectwithchancetarget: @ 801F614
- push {r4,lr}
- ldr r2, _0801F640 @ =gBattleMons
- ldr r0, _0801F644 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x20
- bne _0801F650
- ldr r2, _0801F648 @ =gBattleMoves
- ldr r0, _0801F64C @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 1
- b _0801F660
- .align 2, 0
-_0801F640: .4byte gBattleMons
-_0801F644: .4byte gBankAttacker
-_0801F648: .4byte gBattleMoves
-_0801F64C: .4byte gCurrentMove
-_0801F650:
- ldr r2, _0801F680 @ =gBattleMoves
- ldr r0, _0801F684 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r4, [r0, 0x5]
-_0801F660:
- ldr r3, _0801F688 @ =gBattleCommunication
- ldrb r2, [r3, 0x3]
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _0801F690
- ldr r0, _0801F68C @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801F690
- movs r0, 0x7F
- ands r0, r2
- strb r0, [r3, 0x3]
- b _0801F6BE
- .align 2, 0
-_0801F680: .4byte gBattleMoves
-_0801F684: .4byte gCurrentMove
-_0801F688: .4byte gBattleCommunication
-_0801F68C: .4byte gBattleMoveFlags
-_0801F690:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r4
- bhi _0801F6DA
- ldr r0, _0801F6C8 @ =gBattleCommunication
- ldrb r0, [r0, 0x3]
- cmp r0, 0
- beq _0801F6DA
- ldr r0, _0801F6CC @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801F6DA
- cmp r4, 0x63
- bls _0801F6D0
-_0801F6BE:
- movs r0, 0
- movs r1, 0x80
- bl sub_801E3EC
- b _0801F6E2
- .align 2, 0
-_0801F6C8: .4byte gBattleCommunication
-_0801F6CC: .4byte gBattleMoveFlags
-_0801F6D0:
- movs r0, 0
- movs r1, 0
- bl sub_801E3EC
- b _0801F6E2
-_0801F6DA:
- ldr r1, _0801F6F8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801F6E2:
- ldr r0, _0801F6FC @ =gBattleCommunication
- movs r1, 0
- strb r1, [r0, 0x3]
- ldr r0, _0801F700 @ =0x02000000
- ldr r2, _0801F704 @ =0x00016112
- adds r0, r2
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F6F8: .4byte gBattlescriptCurrInstr
-_0801F6FC: .4byte gBattleCommunication
-_0801F700: .4byte 0x02000000
-_0801F704: .4byte 0x00016112
- thumb_func_end atk15_seteffectwithchancetarget
-
- thumb_func_start atk16_seteffectprimary
-atk16_seteffectprimary: @ 801F708
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl sub_801E3EC
- pop {r0}
- bx r0
- thumb_func_end atk16_seteffectprimary
-
- thumb_func_start atk17_seteffectsecondary
-atk17_seteffectsecondary: @ 801F718
- push {lr}
- movs r0, 0
- movs r1, 0
- bl sub_801E3EC
- pop {r0}
- bx r0
- thumb_func_end atk17_seteffectsecondary
-
- thumb_func_start atk18_status_effect_clear
-atk18_status_effect_clear: @ 801F728
- push {lr}
- ldr r0, _0801F74C @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r2, _0801F750 @ =gActiveBank
- strb r0, [r2]
- ldr r3, _0801F754 @ =gBattleCommunication
- ldrb r0, [r3, 0x3]
- cmp r0, 0x6
- bhi _0801F75C
- ldr r1, _0801F758 @ =gBattleMons
- ldrb r2, [r2]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x4C
- b _0801F766
- .align 2, 0
-_0801F74C: .4byte gBattlescriptCurrInstr
-_0801F750: .4byte gActiveBank
-_0801F754: .4byte gBattleCommunication
-_0801F758: .4byte gBattleMons
-_0801F75C:
- ldr r1, _0801F794 @ =gBattleMons
- ldrb r2, [r2]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
-_0801F766:
- adds r2, r1
- ldr r1, _0801F798 @ =gStatusFlagsForMoveEffects
- ldrb r0, [r3, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- ldr r0, _0801F79C @ =gBattleCommunication
- movs r2, 0
- strb r2, [r0, 0x3]
- ldr r1, _0801F7A0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- ldr r0, _0801F7A4 @ =0x02000000
- ldr r1, _0801F7A8 @ =0x00016112
- adds r0, r1
- strb r2, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_0801F794: .4byte gBattleMons
-_0801F798: .4byte gStatusFlagsForMoveEffects
-_0801F79C: .4byte gBattleCommunication
-_0801F7A0: .4byte gBattlescriptCurrInstr
-_0801F7A4: .4byte 0x02000000
-_0801F7A8: .4byte 0x00016112
- thumb_func_end atk18_status_effect_clear
-
- thumb_func_start atk19_faint_pokemon
-atk19_faint_pokemon: @ 801F7AC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _0801F81C @ =gBattlescriptCurrInstr
- ldr r2, [r0]
- ldrb r1, [r2, 0x2]
- adds r6, r0, 0
- cmp r1, 0
- beq _0801F834
- ldrb r0, [r2, 0x1]
- bl sub_8015150
- ldr r5, _0801F820 @ =gActiveBank
- strb r0, [r5]
- ldr r2, _0801F824 @ =gHitMarker
- ldr r1, _0801F828 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- ands r0, r1
- cmp r0, 0
- bne _0801F7E6
- b _0801FB1C
-_0801F7E6:
- ldr r1, [r6]
- ldrb r4, [r1, 0x3]
- ldrb r0, [r1, 0x4]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r1, 0x6]
- lsls r0, 24
- orrs r4, r0
- bl b_movescr_stack_pop_cursor
- str r4, [r6]
- ldrb r0, [r5]
- bl GetBankSide
- ldr r1, _0801F82C @ =gSideAffecting
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r2, [r0]
- ldr r1, _0801F830 @ =0x0000fdff
- ands r1, r2
- strh r1, [r0]
- b _0801FB22
- .align 2, 0
-_0801F81C: .4byte gBattlescriptCurrInstr
-_0801F820: .4byte gActiveBank
-_0801F824: .4byte gHitMarker
-_0801F828: .4byte gBitTable
-_0801F82C: .4byte gSideAffecting
-_0801F830: .4byte 0x0000fdff
-_0801F834:
- ldrb r0, [r2, 0x1]
- cmp r0, 0x1
- bne _0801F85C
- ldr r1, _0801F84C @ =gActiveBank
- ldr r0, _0801F850 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _0801F854 @ =gBankTarget
- ldrb r7, [r0]
- ldr r4, _0801F858 @ =gUnknown_081D8C58
- b _0801F86A
- .align 2, 0
-_0801F84C: .4byte gActiveBank
-_0801F850: .4byte gBankAttacker
-_0801F854: .4byte gBankTarget
-_0801F858: .4byte gUnknown_081D8C58
-_0801F85C:
- ldr r1, _0801F954 @ =gActiveBank
- ldr r0, _0801F958 @ =gBankTarget
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _0801F95C @ =gBankAttacker
- ldrb r7, [r0]
- ldr r4, _0801F960 @ =gUnknown_081D8C65
-_0801F86A:
- ldr r0, _0801F964 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r0, _0801F968 @ =gBitTable
- mov r12, r0
- ldr r2, _0801F954 @ =gActiveBank
- mov r8, r2
- ldrb r2, [r2]
- lsls r0, r2, 2
- add r0, r12
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0801F886
- b _0801FB1C
-_0801F886:
- ldr r3, _0801F96C @ =gBattleMons
- mov r10, r3
- movs r5, 0x58
- mov r9, r5
- mov r0, r9
- muls r0, r2
- add r0, r10
- ldrh r3, [r0, 0x28]
- cmp r3, 0
- beq _0801F89C
- b _0801FB1C
-_0801F89C:
- ldr r2, _0801F970 @ =0x02000000
- lsls r1, r7, 1
- ldr r5, _0801F974 @ =0x000160ac
- adds r0, r1, r5
- adds r0, r2
- strb r3, [r0]
- ldr r0, _0801F978 @ =0x000160ad
- adds r1, r0
- adds r1, r2
- strb r3, [r1]
- lsls r1, r7, 2
- adds r5, 0x54
- adds r0, r1, r5
- adds r0, r2
- strb r3, [r0]
- adds r5, 0x1
- adds r0, r1, r5
- adds r0, r2
- strb r3, [r0]
- adds r5, 0x1
- adds r0, r1, r5
- adds r0, r2
- strb r3, [r0]
- ldr r0, _0801F97C @ =0x00016103
- adds r1, r0
- adds r1, r2
- strb r3, [r1]
- ldr r5, _0801F980 @ =gHitMarker
- mov r1, r8
- ldrb r0, [r1]
- lsls r0, 2
- add r0, r12
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r5]
- orrs r0, r1
- str r0, [r5]
- ldr r0, [r6]
- adds r0, 0x7
- bl b_movescr_stack_push
- str r4, [r6]
- mov r2, r8
- ldrb r0, [r2]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0801F9B0
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 15
- orrs r0, r1
- str r0, [r5]
- ldr r1, _0801F984 @ =gBattleResults
- ldrb r0, [r1]
- cmp r0, 0xFE
- bhi _0801F914
- adds r0, 0x1
- strb r0, [r1]
-_0801F914:
- mov r0, r9
- muls r0, r7
- add r0, r10
- adds r3, r0, 0
- adds r3, 0x2A
- mov r4, r8
- ldrb r2, [r4]
- mov r0, r9
- muls r0, r2
- add r0, r10
- adds r1, r0, 0
- adds r1, 0x2A
- ldrb r0, [r3]
- ldrb r5, [r1]
- cmp r0, r5
- bls _0801F9CC
- ldrb r1, [r1]
- subs r0, r1
- cmp r0, 0x1D
- ble _0801F990
- ldr r1, _0801F988 @ =gBattlePartyID
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0801F98C @ =gPlayerParty
- adds r0, r1
- movs r1, 0x8
- bl AdjustFriendship
- b _0801F9CC
- .align 2, 0
-_0801F954: .4byte gActiveBank
-_0801F958: .4byte gBankTarget
-_0801F95C: .4byte gBankAttacker
-_0801F960: .4byte gUnknown_081D8C65
-_0801F964: .4byte gAbsentBankFlags
-_0801F968: .4byte gBitTable
-_0801F96C: .4byte gBattleMons
-_0801F970: .4byte 0x02000000
-_0801F974: .4byte 0x000160ac
-_0801F978: .4byte 0x000160ad
-_0801F97C: .4byte 0x00016103
-_0801F980: .4byte gHitMarker
-_0801F984: .4byte gBattleResults
-_0801F988: .4byte gBattlePartyID
-_0801F98C: .4byte gPlayerParty
-_0801F990:
- ldr r1, _0801F9A8 @ =gBattlePartyID
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0801F9AC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x6
- bl AdjustFriendship
- b _0801F9CC
- .align 2, 0
-_0801F9A8: .4byte gBattlePartyID
-_0801F9AC: .4byte gPlayerParty
-_0801F9B0:
- ldr r1, _0801FAE0 @ =gBattleResults
- ldrb r0, [r1, 0x1]
- cmp r0, 0xFE
- bhi _0801F9BC
- adds r0, 0x1
- strb r0, [r1, 0x1]
-_0801F9BC:
- ldr r2, _0801FAE4 @ =gActiveBank
- ldrb r0, [r2]
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- add r0, r10
- ldrh r0, [r0]
- strh r0, [r1, 0x20]
-_0801F9CC:
- ldr r0, _0801FAE8 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801FA02
- ldr r6, _0801FAEC @ =gBattleMons
- ldr r0, _0801FAF0 @ =gBankAttacker
- ldrb r0, [r0]
- movs r5, 0x58
- muls r0, r5
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801FA02
- ldr r4, _0801FAF4 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- bl b_movescr_stack_push
- ldr r1, _0801FAF8 @ =gBattleMoveDamage
- adds r0, r7, 0
- muls r0, r5
- adds r0, r6
- ldrh r0, [r0, 0x28]
- str r0, [r1]
- ldr r0, _0801FAFC @ =gUnknown_081D9156
- str r0, [r4]
-_0801FA02:
- ldr r1, _0801FB00 @ =gStatuses3
- ldr r6, _0801FB04 @ =gBankTarget
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 7
- ands r0, r1
- cmp r0, 0
- bne _0801FA1A
- b _0801FB22
-_0801FA1A:
- ldr r0, _0801FAE8 @ =gHitMarker
- ldr r5, [r0]
- movs r0, 0x80
- lsls r0, 17
- ands r5, r0
- cmp r5, 0
- bne _0801FB22
- ldr r4, _0801FAF0 @ =gBankAttacker
- mov r8, r4
- ldrb r0, [r4]
- bl GetBankSide
- adds r4, r0, 0
- ldrb r0, [r6]
- bl GetBankSide
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- beq _0801FB22
- ldr r0, _0801FAEC @ =gBattleMons
- mov r9, r0
- mov r1, r8
- ldrb r2, [r1]
- movs r7, 0x58
- adds r3, r2, 0
- muls r3, r7
- adds r0, r3, r0
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801FB22
- ldr r0, _0801FB08 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xA5
- beq _0801FB22
- ldr r1, _0801FB0C @ =0x02000000
- ldr r4, _0801FB10 @ =0x0001608c
- adds r0, r2, r4
- adds r0, r1
- ldrb r4, [r0]
- adds r0, r4, r3
- mov r6, r9
- adds r6, 0x24
- adds r0, r6
- strb r5, [r0]
- ldr r5, _0801FAF4 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- bl b_movescr_stack_push
- ldr r0, _0801FB14 @ =gUnknown_081D9468
- str r0, [r5]
- ldr r5, _0801FAE4 @ =gActiveBank
- mov r1, r8
- ldrb r0, [r1]
- strb r0, [r5]
- adds r1, r4, 0
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r5]
- muls r0, r7
- adds r0, r6
- adds r0, r4
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetAttributes
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r1, _0801FB18 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- lsls r4, 1
- mov r2, r8
- ldrb r0, [r2]
- muls r0, r7
- adds r0, r4, r0
- mov r2, r9
- adds r2, 0xC
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- mov r3, r8
- ldrb r0, [r3]
- muls r0, r7
- adds r4, r0
- adds r4, r2
- ldrh r0, [r4]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- b _0801FB22
- .align 2, 0
-_0801FAE0: .4byte gBattleResults
-_0801FAE4: .4byte gActiveBank
-_0801FAE8: .4byte gHitMarker
-_0801FAEC: .4byte gBattleMons
-_0801FAF0: .4byte gBankAttacker
-_0801FAF4: .4byte gBattlescriptCurrInstr
-_0801FAF8: .4byte gBattleMoveDamage
-_0801FAFC: .4byte gUnknown_081D9156
-_0801FB00: .4byte gStatuses3
-_0801FB04: .4byte gBankTarget
-_0801FB08: .4byte gCurrentMove
-_0801FB0C: .4byte 0x02000000
-_0801FB10: .4byte 0x0001608c
-_0801FB14: .4byte gUnknown_081D9468
-_0801FB18: .4byte gBattleTextBuff1
-_0801FB1C:
- ldr r0, [r6]
- adds r0, 0x7
- str r0, [r6]
-_0801FB22:
- 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 atk19_faint_pokemon
-
- thumb_func_start atk1A_faint_animation
-atk1A_faint_animation: @ 801FB34
- push {r4,r5,lr}
- ldr r0, _0801FB64 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FB5E
- ldr r5, _0801FB68 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _0801FB6C @ =gActiveBank
- strb r0, [r4]
- movs r0, 0
- bl EmitFaintAnimation
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_0801FB5E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FB64: .4byte gBattleExecBuffer
-_0801FB68: .4byte gBattlescriptCurrInstr
-_0801FB6C: .4byte gActiveBank
- thumb_func_end atk1A_faint_animation
-
- thumb_func_start atk1B_faint_effects_clear
-atk1B_faint_effects_clear: @ 801FB70
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r0, _0801FBC4 @ =gBattleExecBuffer
- ldr r6, [r0]
- cmp r6, 0
- bne _0801FBBC
- ldr r5, _0801FBC8 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _0801FBCC @ =gActiveBank
- strb r0, [r4]
- ldr r1, _0801FBD0 @ =gBattleMons
- ldrb r0, [r4]
- movs r2, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r0, r1
- str r6, [r0]
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- bl UndoEffectsAfterFainting
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_0801FBBC:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FBC4: .4byte gBattleExecBuffer
-_0801FBC8: .4byte gBattlescriptCurrInstr
-_0801FBCC: .4byte gActiveBank
-_0801FBD0: .4byte gBattleMons
- thumb_func_end atk1B_faint_effects_clear
-
- thumb_func_start atk1C_jumpifstatus
-atk1C_jumpifstatus: @ 801FBD4
- push {r4,r5,lr}
- ldr r5, _0801FC30 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [r5]
- ldrb r4, [r2, 0x2]
- ldrb r1, [r2, 0x3]
- lsls r1, 8
- adds r4, r1
- ldrb r1, [r2, 0x4]
- lsls r1, 16
- adds r4, r1
- ldrb r1, [r2, 0x5]
- lsls r1, 24
- adds r4, r1
- ldrb r3, [r2, 0x6]
- ldrb r1, [r2, 0x7]
- lsls r1, 8
- adds r3, r1
- ldrb r1, [r2, 0x8]
- lsls r1, 16
- adds r3, r1
- ldrb r1, [r2, 0x9]
- lsls r1, 24
- adds r3, r1
- ldr r2, _0801FC34 @ =gBattleMons
- movs r1, 0x58
- muls r1, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _0801FC38
- adds r0, r1, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801FC38
- str r3, [r5]
- b _0801FC40
- .align 2, 0
-_0801FC30: .4byte gBattlescriptCurrInstr
-_0801FC34: .4byte gBattleMons
-_0801FC38:
- ldr r1, _0801FC48 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
-_0801FC40:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FC48: .4byte gBattlescriptCurrInstr
- thumb_func_end atk1C_jumpifstatus
-
- thumb_func_start atk1D_jumpifstatus2
-atk1D_jumpifstatus2: @ 801FC4C
- push {r4,r5,lr}
- ldr r5, _0801FCA8 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [r5]
- ldrb r4, [r2, 0x2]
- ldrb r1, [r2, 0x3]
- lsls r1, 8
- adds r4, r1
- ldrb r1, [r2, 0x4]
- lsls r1, 16
- adds r4, r1
- ldrb r1, [r2, 0x5]
- lsls r1, 24
- adds r4, r1
- ldrb r3, [r2, 0x6]
- ldrb r1, [r2, 0x7]
- lsls r1, 8
- adds r3, r1
- ldrb r1, [r2, 0x8]
- lsls r1, 16
- adds r3, r1
- ldrb r1, [r2, 0x9]
- lsls r1, 24
- adds r3, r1
- ldr r2, _0801FCAC @ =gBattleMons
- movs r1, 0x58
- muls r1, r0
- adds r0, r2, 0
- adds r0, 0x50
- adds r0, r1, r0
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _0801FCB0
- adds r0, r1, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801FCB0
- str r3, [r5]
- b _0801FCB8
- .align 2, 0
-_0801FCA8: .4byte gBattlescriptCurrInstr
-_0801FCAC: .4byte gBattleMons
-_0801FCB0:
- ldr r1, _0801FCC0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
-_0801FCB8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FCC0: .4byte gBattlescriptCurrInstr
- thumb_func_end atk1D_jumpifstatus2
-
- thumb_func_start atk1E_jumpifability
-atk1E_jumpifability: @ 801FCC4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- ldr r6, _0801FD18 @ =gBattlescriptCurrInstr
- ldr r2, [r6]
- ldrb r5, [r2, 0x2]
- mov r8, r5
- 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 r7, r1, r0
- ldrb r0, [r2, 0x1]
- cmp r0, 0x8
- bne _0801FD24
- ldr r0, _0801FD1C @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0xD
- adds r2, r5, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _0801FDA0
- ldr r1, _0801FD20 @ =gLastUsedAbility
- strb r5, [r1]
- str r7, [r6]
- subs r4, 0x1
- lsls r0, r4, 24
- lsrs r0, 24
- ldrb r1, [r1]
- b _0801FD80
- .align 2, 0
-_0801FD18: .4byte gBattlescriptCurrInstr
-_0801FD1C: .4byte gBankAttacker
-_0801FD20: .4byte gLastUsedAbility
-_0801FD24:
- cmp r0, 0x9
- bne _0801FD5C
- ldr r0, _0801FD54 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0xC
- adds r2, r5, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _0801FDA0
- ldr r1, _0801FD58 @ =gLastUsedAbility
- strb r5, [r1]
- str r7, [r6]
- subs r4, 0x1
- lsls r0, r4, 24
- lsrs r0, 24
- ldrb r1, [r1]
- b _0801FD80
- .align 2, 0
-_0801FD54: .4byte gBankAttacker
-_0801FD58: .4byte gLastUsedAbility
-_0801FD5C:
- ldrb r0, [r2, 0x1]
- bl sub_8015150
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _0801FD90 @ =gBattleMons
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, r8
- bne _0801FDA0
- ldr r0, _0801FD94 @ =gLastUsedAbility
- strb r1, [r0]
- str r7, [r6]
- ldrb r1, [r0]
- adds r0, r4, 0
-_0801FD80:
- bl RecordAbilityBattle
- ldr r0, _0801FD98 @ =0x02000000
- ldr r1, _0801FD9C @ =0x000160f8
- adds r0, r1
- strb r4, [r0]
- b _0801FDA6
- .align 2, 0
-_0801FD90: .4byte gBattleMons
-_0801FD94: .4byte gLastUsedAbility
-_0801FD98: .4byte 0x02000000
-_0801FD9C: .4byte 0x000160f8
-_0801FDA0:
- ldr r0, [r6]
- adds r0, 0x7
- str r0, [r6]
-_0801FDA6:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk1E_jumpifability
-
- thumb_func_start atk1F_jumpifsideaffecting
-atk1F_jumpifsideaffecting: @ 801FDB4
- push {r4-r6,lr}
- ldr r0, _0801FDCC @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r4, [r0, 0x1]
- cmp r4, 0x1
- bne _0801FDD4
- ldr r0, _0801FDD0 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankIdentity
- b _0801FDDE
- .align 2, 0
-_0801FDCC: .4byte gBattlescriptCurrInstr
-_0801FDD0: .4byte gBankAttacker
-_0801FDD4:
- ldr r0, _0801FE14 @ =gBankTarget
- ldrb r0, [r0]
- bl GetBankIdentity
- movs r4, 0x1
-_0801FDDE:
- ands r4, r0
- ldr r6, _0801FE18 @ =gBattlescriptCurrInstr
- ldr r3, [r6]
- ldrb r2, [r3, 0x2]
- ldrb r0, [r3, 0x3]
- lsls r0, 8
- orrs r2, r0
- ldrb r1, [r3, 0x4]
- ldrb r0, [r3, 0x5]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0x6]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0x7]
- lsls r0, 24
- adds r5, r1, r0
- ldr r1, _0801FE1C @ =gSideAffecting
- lsls r0, r4, 1
- adds r0, r1
- ldrh r0, [r0]
- ands r2, r0
- cmp r2, 0
- beq _0801FE20
- str r5, [r6]
- b _0801FE26
- .align 2, 0
-_0801FE14: .4byte gBankTarget
-_0801FE18: .4byte gBattlescriptCurrInstr
-_0801FE1C: .4byte gSideAffecting
-_0801FE20:
- adds r0, r3, 0
- adds r0, 0x8
- str r0, [r6]
-_0801FE26:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk1F_jumpifsideaffecting
-
- thumb_func_start atk20_jumpifstat
-atk20_jumpifstat: @ 801FE2C
- push {r4,r5,lr}
- movs r5, 0
- ldr r4, _0801FE60 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0801FE64 @ =gBattleMons
- ldr r3, [r4]
- movs r1, 0x58
- muls r0, r1
- ldrb r1, [r3, 0x3]
- adds r0, r1
- adds r2, 0x18
- adds r0, r2
- ldrb r2, [r0]
- ldrb r0, [r3, 0x2]
- cmp r0, 0x5
- bhi _0801FEEA
- lsls r0, 2
- ldr r1, _0801FE68 @ =_0801FE6C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801FE60: .4byte gBattlescriptCurrInstr
-_0801FE64: .4byte gBattleMons
-_0801FE68: .4byte _0801FE6C
- .align 2, 0
-_0801FE6C:
- .4byte _0801FE84
- .4byte _0801FE94
- .4byte _0801FEA4
- .4byte _0801FEB4
- .4byte _0801FEC4
- .4byte _0801FED8
-_0801FE84:
- ldr r0, _0801FE90 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r2, r0
- bne _0801FEEA
- b _0801FEE4
- .align 2, 0
-_0801FE90: .4byte gBattlescriptCurrInstr
-_0801FE94:
- ldr r0, _0801FEA0 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r2, r0
- beq _0801FEEA
- b _0801FEE4
- .align 2, 0
-_0801FEA0: .4byte gBattlescriptCurrInstr
-_0801FEA4:
- ldr r0, _0801FEB0 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r2, r0
- bls _0801FEEA
- b _0801FEE4
- .align 2, 0
-_0801FEB0: .4byte gBattlescriptCurrInstr
-_0801FEB4:
- ldr r0, _0801FEC0 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r2, r0
- bcs _0801FEEA
- b _0801FEE4
- .align 2, 0
-_0801FEC0: .4byte gBattlescriptCurrInstr
-_0801FEC4:
- ldr r0, _0801FED4 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- ands r2, r0
- cmp r2, 0
- beq _0801FEEA
- b _0801FEE4
- .align 2, 0
-_0801FED4: .4byte gBattlescriptCurrInstr
-_0801FED8:
- ldr r0, _0801FF0C @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- ands r2, r0
- cmp r2, 0
- bne _0801FEEA
-_0801FEE4:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_0801FEEA:
- cmp r5, 0
- beq _0801FF10
- ldr r3, _0801FF0C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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
- str r1, [r3]
- b _0801FF18
- .align 2, 0
-_0801FF0C: .4byte gBattlescriptCurrInstr
-_0801FF10:
- ldr r1, _0801FF20 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x9
- str r0, [r1]
-_0801FF18:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FF20: .4byte gBattlescriptCurrInstr
- thumb_func_end atk20_jumpifstat
-
- thumb_func_start atk21_jumpifstatus3
-atk21_jumpifstatus3: @ 801FF24
- push {r4-r6,lr}
- ldr r4, _0801FF78 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r5, _0801FF7C @ =gActiveBank
- strb r0, [r5]
- ldr r2, [r4]
- 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 r6, r1, r0
- ldrb r1, [r2, 0x7]
- ldrb r0, [r2, 0x8]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x9]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0xA]
- lsls r0, 24
- adds r3, r1, r0
- ldrb r0, [r2, 0x6]
- cmp r0, 0
- beq _0801FF84
- ldr r0, _0801FF80 @ =gStatuses3
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- ands r0, r6
- cmp r0, 0
- bne _0801FF9C
- b _0801FF94
- .align 2, 0
-_0801FF78: .4byte gBattlescriptCurrInstr
-_0801FF7C: .4byte gActiveBank
-_0801FF80: .4byte gStatuses3
-_0801FF84:
- ldr r0, _0801FF98 @ =gStatuses3
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- ands r0, r6
- cmp r0, 0
- beq _0801FF9C
-_0801FF94:
- str r3, [r4]
- b _0801FFA2
- .align 2, 0
-_0801FF98: .4byte gStatuses3
-_0801FF9C:
- adds r0, r2, 0
- adds r0, 0xB
- str r0, [r4]
-_0801FFA2:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk21_jumpifstatus3
-
- thumb_func_start atk22_jumpiftype
-atk22_jumpiftype: @ 801FFA8
- push {r4-r6,lr}
- ldr r4, _0801FFF0 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- lsls r0, 24
- lsrs r0, 24
- ldr r3, [r4]
- ldrb r5, [r3, 0x2]
- ldrb r2, [r3, 0x3]
- ldrb r1, [r3, 0x4]
- lsls r1, 8
- adds r2, r1
- ldrb r1, [r3, 0x5]
- lsls r1, 16
- adds r2, r1
- ldrb r1, [r3, 0x6]
- lsls r1, 24
- adds r6, r2, r1
- ldr r2, _0801FFF4 @ =gBattleMons
- movs r1, 0x58
- muls r0, r1
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r5
- beq _0801FFEC
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r5
- bne _0801FFF8
-_0801FFEC:
- str r6, [r4]
- b _0801FFFC
- .align 2, 0
-_0801FFF0: .4byte gBattlescriptCurrInstr
-_0801FFF4: .4byte gBattleMons
-_0801FFF8:
- adds r0, r3, 0x7
- str r0, [r4]
-_0801FFFC:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk22_jumpiftype
-
- thumb_func_start atk23_getexp
-atk23_getexp: @ 8020004
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- ldr r0, _0802004C @ =0x0201605c
- mov r10, r0
- ldr r0, _08020050 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r1, _08020054 @ =gBank1
- strb r0, [r1]
- ldr r2, _08020058 @ =gSentPokesToOpponent
- movs r1, 0x2
- ands r1, r0
- lsls r1, 24
- lsrs r1, 25
- adds r1, r2
- ldrb r1, [r1]
- mov r8, r1
- mov r0, r10
- subs r0, 0x4D
- ldrb r0, [r0]
- cmp r0, 0x6
- bls _08020040
- bl _08020996
-_08020040:
- lsls r0, 2
- ldr r1, _0802005C @ =_08020060
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802004C: .4byte 0x0201605c
-_08020050: .4byte gBattlescriptCurrInstr
-_08020054: .4byte gBank1
-_08020058: .4byte gSentPokesToOpponent
-_0802005C: .4byte _08020060
- .align 2, 0
-_08020060:
- .4byte _0802007C
- .4byte _080200FC
- .4byte _08020216
- .4byte _0802055C
- .4byte _08020648
- .4byte _08020910
- .4byte _0802096C
-_0802007C:
- ldr r4, _080200A8 @ =gBank1
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08020098
- ldr r0, _080200AC @ =gBattleTypeFlags
- ldrh r1, [r0]
- ldr r0, _080200B0 @ =0x00000982
- ands r0, r1
- cmp r0, 0
- beq _080200BC
-_08020098:
- ldr r0, _080200B4 @ =0x02000000
- ldr r1, _080200B8 @ =0x0001600f
- adds r0, r1
- movs r1, 0x6
- strb r1, [r0]
- bl _08020996
- .align 2, 0
-_080200A8: .4byte gBank1
-_080200AC: .4byte gBattleTypeFlags
-_080200B0: .4byte 0x00000982
-_080200B4: .4byte 0x02000000
-_080200B8: .4byte 0x0001600f
-_080200BC:
- ldr r2, _080200E8 @ =0x02000000
- ldr r3, _080200EC @ =0x0001600f
- adds r1, r2, r3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, _080200F0 @ =0x00016113
- adds r2, r0
- ldr r3, _080200F4 @ =gBitTable
- ldr r1, _080200F8 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- bl _08020996
- .align 2, 0
-_080200E8: .4byte 0x02000000
-_080200EC: .4byte 0x0001600f
-_080200F0: .4byte 0x00016113
-_080200F4: .4byte gBitTable
-_080200F8: .4byte gBattlePartyID
-_080200FC:
- movs r5, 0
- movs r7, 0
- ldr r1, _08020150 @ =gSaveBlock1 + 0x3688
- mov r9, r1
-_08020104:
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _08020154 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0802016A
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0802016A
- ldr r0, _08020158 @ =gBitTable
- lsls r1, r7, 2
- adds r1, r0
- ldr r0, [r1]
- mov r2, r8
- ands r0, r2
- cmp r0, 0
- beq _08020138
- adds r5, 0x1
-_08020138:
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0802015C
- mov r3, r9
- ldrb r4, [r3]
- b _08020164
- .align 2, 0
-_08020150: .4byte gSaveBlock1 + 0x3688
-_08020154: .4byte gPlayerParty
-_08020158: .4byte gBitTable
-_0802015C:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
-_08020164:
- cmp r4, 0x19
- bne _0802016A
- adds r6, 0x1
-_0802016A:
- adds r7, 0x1
- cmp r7, 0x5
- ble _08020104
- ldr r3, _080201D0 @ =gBaseStats
- ldr r2, _080201D4 @ =gBattleMons
- ldr r0, _080201D8 @ =gBank1
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r1, r2
- ldrh r2, [r1]
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r2, [r0, 0x9]
- adds r1, 0x2A
- ldrb r0, [r1]
- muls r0, r2
- movs r1, 0x7
- bl __divsi3
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r6, 0
- beq _080201E0
- lsrs r4, r0, 17
- adds r0, r4, 0
- adds r1, r5, 0
- bl __divsi3
- mov r1, r10
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bne _080201B6
- movs r0, 0x1
- strh r0, [r1]
-_080201B6:
- ldr r5, _080201DC @ =gExpShareExp
- adds r0, r4, 0
- adds r1, r6, 0
- bl __divsi3
- strh r0, [r5]
- lsls r0, 16
- cmp r0, 0
- bne _080201FA
- movs r0, 0x1
- strh r0, [r5]
- b _080201FA
- .align 2, 0
-_080201D0: .4byte gBaseStats
-_080201D4: .4byte gBattleMons
-_080201D8: .4byte gBank1
-_080201DC: .4byte gExpShareExp
-_080201E0:
- adds r0, r1, 0
- adds r1, r5, 0
- bl __divsi3
- mov r2, r10
- strh r0, [r2]
- lsls r0, 16
- cmp r0, 0
- bne _080201F6
- movs r0, 0x1
- strh r0, [r2]
-_080201F6:
- ldr r0, _08020248 @ =gExpShareExp
- strh r6, [r0]
-_080201FA:
- ldr r1, _0802024C @ =0x02000000
- ldr r3, _08020250 @ =0x0001600f
- adds r2, r1, r3
- ldrb r0, [r2]
- adds r0, 0x1
- movs r3, 0
- strb r0, [r2]
- ldr r2, _08020254 @ =0x00016018
- adds r0, r1, r2
- strb r3, [r0]
- ldr r3, _08020258 @ =0x0001605f
- adds r1, r3
- mov r0, r8
- strb r0, [r1]
-_08020216:
- ldr r0, _0802025C @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _08020220
- b _08020996
-_08020220:
- ldr r0, _0802024C @ =0x02000000
- ldr r1, _08020254 @ =0x00016018
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08020260 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0802026C
- ldr r0, _08020264 @ =gSaveBlock1
- ldr r2, _08020268 @ =0x00003688
- adds r0, r2
- ldrb r4, [r0]
- b _08020274
- .align 2, 0
-_08020248: .4byte gExpShareExp
-_0802024C: .4byte 0x02000000
-_08020250: .4byte 0x0001600f
-_08020254: .4byte 0x00016018
-_08020258: .4byte 0x0001605f
-_0802025C: .4byte gBattleExecBuffer
-_08020260: .4byte gPlayerParty
-_08020264: .4byte gSaveBlock1
-_08020268: .4byte 0x00003688
-_0802026C:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
-_08020274:
- ldr r5, _08020294 @ =0x02000000
- cmp r4, 0x19
- beq _080202A0
- ldr r3, _08020298 @ =0x0001605f
- adds r1, r5, r3
- ldrb r0, [r1]
- movs r2, 0x1
- ands r2, r0
- cmp r2, 0
- bne _080202A0
- lsrs r0, 1
- strb r0, [r1]
- ldr r0, _0802029C @ =0x0001600f
- adds r1, r5, r0
- b _080202C8
- .align 2, 0
-_08020294: .4byte 0x02000000
-_08020298: .4byte 0x0001605f
-_0802029C: .4byte 0x0001600f
-_080202A0:
- ldr r1, _080202D4 @ =0x00016018
- adds r0, r5, r1
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080202D8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x64
- bne _080202E8
- ldr r2, _080202DC @ =0x0001605f
- adds r1, r5, r2
- ldrb r0, [r1]
- lsrs r0, 1
- movs r2, 0
- strb r0, [r1]
- ldr r3, _080202E0 @ =0x0001600f
- adds r1, r5, r3
-_080202C8:
- movs r0, 0x5
- strb r0, [r1]
- ldr r0, _080202E4 @ =gBattleMoveDamage
- str r2, [r0]
- b _08020996
- .align 2, 0
-_080202D4: .4byte 0x00016018
-_080202D8: .4byte gPlayerParty
-_080202DC: .4byte 0x0001605f
-_080202E0: .4byte 0x0001600f
-_080202E4: .4byte gBattleMoveDamage
-_080202E8:
- ldr r0, _0802034C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08020316
- ldr r0, _08020350 @ =gBattleMons
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08020316
- ldr r0, _08020354 @ =0x0001601b
- adds r5, r0
- ldrb r0, [r5]
- cmp r0, 0
- bne _08020316
- bl sub_80325B8
- ldr r0, _08020358 @ =0x00000161
- bl PlayBGM
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
-_08020316:
- ldr r5, _0802035C @ =0x02000000
- ldr r1, _08020360 @ =0x00016018
- adds r0, r5, r1
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08020364 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _08020332
- b _0802051E
-_08020332:
- ldr r2, _08020368 @ =0x0001605f
- adds r0, r5, r2
- ldrb r0, [r0]
- movs r3, 0x1
- ands r3, r0
- cmp r3, 0
- beq _08020370
- ldr r1, _0802036C @ =gBattleMoveDamage
- mov r3, r10
- ldrh r0, [r3]
- str r0, [r1]
- mov r8, r1
- b _08020376
- .align 2, 0
-_0802034C: .4byte gBattleTypeFlags
-_08020350: .4byte gBattleMons
-_08020354: .4byte 0x0001601b
-_08020358: .4byte 0x00000161
-_0802035C: .4byte 0x02000000
-_08020360: .4byte 0x00016018
-_08020364: .4byte gPlayerParty
-_08020368: .4byte 0x0001605f
-_0802036C: .4byte gBattleMoveDamage
-_08020370:
- ldr r0, _080203EC @ =gBattleMoveDamage
- str r3, [r0]
- mov r8, r0
-_08020376:
- cmp r4, 0x19
- bne _08020386
- ldr r0, _080203F0 @ =gExpShareExp
- ldrh r1, [r0]
- mov r2, r8
- ldr r0, [r2]
- adds r0, r1
- str r0, [r2]
-_08020386:
- cmp r4, 0x28
- bne _0802039C
- mov r3, r8
- ldr r1, [r3]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- mov r1, r8
- str r0, [r1]
-_0802039C:
- ldr r0, _080203F4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080203B8
- ldr r4, _080203EC @ =gBattleMoveDamage
- ldr r1, [r4]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
-_080203B8:
- ldr r0, _080203F8 @ =0x02000000
- ldr r2, _080203FC @ =0x00016018
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08020400 @ =gPlayerParty
- adds r0, r1
- bl IsTradedMon
- lsls r0, 24
- cmp r0, 0
- beq _08020404
- ldr r4, _080203EC @ =gBattleMoveDamage
- ldr r1, [r4]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- movs r7, 0xA5
- lsls r7, 1
- mov r8, r4
- b _0802040A
- .align 2, 0
-_080203EC: .4byte gBattleMoveDamage
-_080203F0: .4byte gExpShareExp
-_080203F4: .4byte gBattleTypeFlags
-_080203F8: .4byte 0x02000000
-_080203FC: .4byte 0x00016018
-_08020400: .4byte gPlayerParty
-_08020404:
- ldr r7, _0802043C @ =0x00000149
- ldr r3, _08020440 @ =gBattleMoveDamage
- mov r8, r3
-_0802040A:
- ldr r0, _08020444 @ =gBattleTypeFlags
- ldrh r0, [r0]
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08020488
- ldr r1, _08020448 @ =gBattlePartyID
- ldr r0, _0802044C @ =0x02000000
- ldr r3, _08020450 @ =0x00016018
- adds r2, r0, r3
- ldrh r1, [r1, 0x4]
- adds r5, r0, 0
- ldr r4, _08020454 @ =gBitTable
- ldr r3, _08020458 @ =gAbsentBankFlags
- ldrb r2, [r2]
- cmp r1, r2
- bne _08020460
- ldrb r1, [r3]
- ldr r0, [r4, 0x8]
- ands r1, r0
- cmp r1, 0
- bne _08020460
- ldr r0, _0802045C @ =0x000160a2
- adds r1, r5, r0
- b _0802047C
- .align 2, 0
-_0802043C: .4byte 0x00000149
-_08020440: .4byte gBattleMoveDamage
-_08020444: .4byte gBattleTypeFlags
-_08020448: .4byte gBattlePartyID
-_0802044C: .4byte 0x02000000
-_08020450: .4byte 0x00016018
-_08020454: .4byte gBitTable
-_08020458: .4byte gAbsentBankFlags
-_0802045C: .4byte 0x000160a2
-_08020460:
- ldrb r2, [r3]
- ldr r0, [r4]
- ands r2, r0
- cmp r2, 0
- bne _08020478
- ldr r1, _08020474 @ =0x000160a2
- adds r0, r5, r1
- strb r2, [r0]
- b _08020490
- .align 2, 0
-_08020474: .4byte 0x000160a2
-_08020478:
- ldr r2, _08020484 @ =0x000160a2
- adds r1, r5, r2
-_0802047C:
- movs r0, 0x2
- strb r0, [r1]
- b _08020490
- .align 2, 0
-_08020484: .4byte 0x000160a2
-_08020488:
- ldr r0, _08020530 @ =0x02000000
- ldr r3, _08020534 @ =0x000160a2
- adds r0, r3
- strb r1, [r0]
-_08020490:
- ldr r1, _08020538 @ =gBattleTextBuff1
- movs r3, 0
- movs r2, 0xFD
- strb r2, [r1]
- movs r5, 0x4
- strb r5, [r1, 0x1]
- ldr r4, _08020530 @ =0x02000000
- ldr r0, _08020534 @ =0x000160a2
- adds r6, r4, r0
- ldrb r0, [r6]
- strb r0, [r1, 0x2]
- ldr r0, _0802053C @ =0x00016018
- adds r4, r0
- ldrb r0, [r4]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _08020540 @ =gBattleTextBuff2
- strb r2, [r1]
- strb r3, [r1, 0x1]
- strb r7, [r1, 0x2]
- movs r3, 0xFF
- lsls r3, 8
- ands r7, r3
- asrs r0, r7, 8
- strb r0, [r1, 0x3]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r1, 0x4]
- ldr r1, _08020544 @ =gBattleTextBuff3
- strb r2, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- strb r5, [r1, 0x2]
- movs r0, 0x5
- strb r0, [r1, 0x3]
- mov r0, r8
- ldr r2, [r0]
- strb r2, [r1, 0x4]
- adds r0, r2, 0
- ands r0, r3
- asrs r0, 8
- strb r0, [r1, 0x5]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r2
- asrs r0, 16
- strb r0, [r1, 0x6]
- lsrs r2, 24
- strb r2, [r1, 0x7]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r1, 0x8]
- ldrb r1, [r6]
- movs r0, 0xD
- bl PrepareStringBattle
- ldrb r1, [r4]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08020548 @ =gPlayerParty
- adds r0, r1
- ldr r3, _0802054C @ =gBattleMons
- ldr r1, _08020550 @ =gBank1
- ldrb r2, [r1]
- movs r1, 0x58
- muls r1, r2
- adds r1, r3
- ldrh r1, [r1]
- bl MonGainEVs
-_0802051E:
- ldr r1, _08020530 @ =0x02000000
- ldr r3, _08020554 @ =0x0001605f
- adds r2, r1, r3
- ldrb r0, [r2]
- lsrs r0, 1
- strb r0, [r2]
- ldr r0, _08020558 @ =0x0001600f
- adds r1, r0
- b _08020618
- .align 2, 0
-_08020530: .4byte 0x02000000
-_08020534: .4byte 0x000160a2
-_08020538: .4byte gBattleTextBuff1
-_0802053C: .4byte 0x00016018
-_08020540: .4byte gBattleTextBuff2
-_08020544: .4byte gBattleTextBuff3
-_08020548: .4byte gPlayerParty
-_0802054C: .4byte gBattleMons
-_08020550: .4byte gBank1
-_08020554: .4byte 0x0001605f
-_08020558: .4byte 0x0001600f
-_0802055C:
- ldr r0, _08020620 @ =gBattleExecBuffer
- ldr r2, [r0]
- cmp r2, 0
- beq _08020566
- b _08020996
-_08020566:
- ldr r1, _08020624 @ =gBattleBufferB
- ldr r4, _08020628 @ =0x02000000
- ldr r3, _0802062C @ =0x000160a2
- adds r3, r4
- mov r8, r3
- ldrb r0, [r3]
- lsls r0, 9
- adds r0, r1
- strb r2, [r0]
- ldr r0, _08020630 @ =0x00016018
- adds r7, r4, r0
- ldrb r0, [r7]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _08020634 @ =gPlayerParty
- adds r0, r5
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08020612
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x64
- beq _08020612
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3A
- bl GetMonData
- ldr r1, _08020638 @ =0x00017180
- adds r4, r1
- strh r0, [r4]
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3B
- bl GetMonData
- strh r0, [r4, 0x2]
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3C
- bl GetMonData
- strh r0, [r4, 0x4]
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3D
- bl GetMonData
- strh r0, [r4, 0x6]
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3E
- bl GetMonData
- strh r0, [r4, 0x8]
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3F
- bl GetMonData
- strh r0, [r4, 0xA]
- ldr r4, _0802063C @ =gActiveBank
- mov r2, r8
- ldrb r0, [r2]
- strb r0, [r4]
- ldrb r1, [r7]
- ldr r0, _08020640 @ =gBattleMoveDamage
- ldrh r2, [r0]
- movs r0, 0
- bl EmitExpBarUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08020612:
- ldr r1, _08020628 @ =0x02000000
- ldr r3, _08020644 @ =0x0001600f
- adds r1, r3
-_08020618:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08020996
- .align 2, 0
-_08020620: .4byte gBattleExecBuffer
-_08020624: .4byte gBattleBufferB
-_08020628: .4byte 0x02000000
-_0802062C: .4byte 0x000160a2
-_08020630: .4byte 0x00016018
-_08020634: .4byte gPlayerParty
-_08020638: .4byte 0x00017180
-_0802063C: .4byte gActiveBank
-_08020640: .4byte gBattleMoveDamage
-_08020644: .4byte 0x0001600f
-_08020648:
- ldr r0, _080208AC @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _08020652
- b _08020996
-_08020652:
- ldr r1, _080208B0 @ =gActiveBank
- ldr r4, _080208B4 @ =0x02000000
- ldr r2, _080208B8 @ =0x000160a2
- adds r0, r4, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r2, _080208BC @ =gBattleBufferB
- ldrb r3, [r1]
- lsls r1, r3, 9
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x21
- beq _0802066E
- b _080208F0
-_0802066E:
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0xB
- beq _0802067A
- b _080208F0
-_0802067A:
- ldr r0, _080208C0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080206A8
- ldr r1, _080208C4 @ =gBattlePartyID
- lsls r0, r3, 1
- adds r2, r0, r1
- ldr r0, _080208C8 @ =0x00016018
- adds r1, r4, r0
- ldrh r0, [r2]
- ldrb r1, [r1]
- cmp r0, r1
- bne _080206A8
- adds r1, r0, 0
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080208CC @ =gPlayerParty
- adds r0, r1
- adds r1, r3, 0
- bl sub_80324F8
-_080206A8:
- ldr r1, _080208D0 @ =gBattleTextBuff1
- movs r2, 0xFD
- strb r2, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- ldr r5, _080208B0 @ =gActiveBank
- ldrb r0, [r5]
- strb r0, [r1, 0x2]
- ldr r0, _080208B4 @ =0x02000000
- ldr r3, _080208C8 @ =0x00016018
- adds r6, r0, r3
- ldrb r0, [r6]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r4, _080208D4 @ =gBattleTextBuff2
- strb r2, [r4]
- movs r0, 0x1
- strb r0, [r4, 0x1]
- strb r0, [r4, 0x2]
- movs r0, 0x3
- strb r0, [r4, 0x3]
- ldrb r0, [r6]
- movs r1, 0x64
- mov r8, r1
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- ldr r7, _080208CC @ =gPlayerParty
- adds r0, r7
- movs r1, 0x38
- bl GetMonData
- strb r0, [r4, 0x4]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r4, 0x5]
- bl b_movescr_stack_push_cursor
- ldr r2, _080208D8 @ =gLeveledUpInBattle
- ldr r1, _080208DC @ =gBitTable
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _080208E0 @ =gBattlescriptCurrInstr
- ldr r0, _080208E4 @ =BattleScript_LevelUp
- str r0, [r1]
- ldr r4, _080208E8 @ =gBattleMoveDamage
- ldr r2, _080208BC @ =gBattleBufferB
- ldrb r1, [r5]
- lsls r1, 9
- adds r0, r2, 0x2
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r2, 0x3
- adds r1, r2
- ldrb r0, [r1]
- lsls r0, 8
- orrs r3, r0
- str r3, [r4]
- ldrb r0, [r6]
- mov r3, r8
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7
- movs r1, 0
- bl AdjustFriendship
- ldr r0, _080208C4 @ =gBattlePartyID
- ldrb r1, [r6]
- ldrh r0, [r0]
- cmp r0, r1
- bne _080207EC
- ldr r4, _080208EC @ =gBattleMons
- ldrh r0, [r4, 0x28]
- cmp r0, 0
- beq _080207EC
- mov r0, r8
- muls r0, r1
- adds r0, r7
- movs r1, 0x38
- bl GetMonData
- adds r1, r4, 0
- adds r1, 0x2A
- strb r0, [r1]
- ldrb r0, [r6]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- movs r1, 0x39
- bl GetMonData
- strh r0, [r4, 0x28]
- ldrb r0, [r6]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r4, 0x2C]
- ldrb r0, [r6]
- mov r3, r8
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7
- movs r1, 0x3B
- bl GetMonData
- strh r0, [r4, 0x2]
- ldrb r0, [r6]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- movs r1, 0x3C
- bl GetMonData
- strh r0, [r4, 0x4]
- ldrb r0, [r6]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3D
- bl GetMonData
- strh r0, [r4, 0x6]
- ldrb r0, [r6]
- mov r3, r8
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7
- movs r1, 0x3D
- bl GetMonData
- strh r0, [r4, 0x6]
- ldrb r0, [r6]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- movs r1, 0x3E
- bl GetMonData
- strh r0, [r4, 0x8]
- ldrb r0, [r6]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3F
- bl GetMonData
- strh r0, [r4, 0xA]
-_080207EC:
- ldr r0, _080208C4 @ =gBattlePartyID
- ldr r1, _080208B4 @ =0x02000000
- ldr r3, _080208C8 @ =0x00016018
- adds r7, r1, r3
- ldrb r2, [r7]
- ldrh r0, [r0, 0x4]
- cmp r0, r2
- bne _080208F6
- ldr r6, _080208EC @ =gBattleMons
- movs r0, 0xD8
- adds r0, r6
- mov r8, r0
- ldrh r0, [r0]
- cmp r0, 0
- beq _080208F6
- ldr r0, _080208C0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080208F6
- movs r5, 0x64
- adds r0, r2, 0
- muls r0, r5
- ldr r4, _080208CC @ =gPlayerParty
- adds r0, r4
- movs r1, 0x38
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xDA
- strb r0, [r1]
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r4
- movs r1, 0x39
- bl GetMonData
- mov r1, r8
- strh r0, [r1]
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3A
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xDC
- strh r0, [r1]
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3B
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xB2
- strh r0, [r1]
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3C
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xB4
- strh r0, [r1]
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3D
- bl GetMonData
- movs r2, 0xB6
- adds r2, r6
- mov r8, r2
- strh r0, [r2]
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3D
- bl GetMonData
- mov r3, r8
- strh r0, [r3]
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3E
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xB8
- strh r0, [r1]
- b _080208F6
- .align 2, 0
-_080208AC: .4byte gBattleExecBuffer
-_080208B0: .4byte gActiveBank
-_080208B4: .4byte 0x02000000
-_080208B8: .4byte 0x000160a2
-_080208BC: .4byte gBattleBufferB
-_080208C0: .4byte gBattleTypeFlags
-_080208C4: .4byte gBattlePartyID
-_080208C8: .4byte 0x00016018
-_080208CC: .4byte gPlayerParty
-_080208D0: .4byte gBattleTextBuff1
-_080208D4: .4byte gBattleTextBuff2
-_080208D8: .4byte gLeveledUpInBattle
-_080208DC: .4byte gBitTable
-_080208E0: .4byte gBattlescriptCurrInstr
-_080208E4: .4byte BattleScript_LevelUp
-_080208E8: .4byte gBattleMoveDamage
-_080208EC: .4byte gBattleMons
-_080208F0:
- ldr r1, _08020904 @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
-_080208F6:
- ldr r0, _08020908 @ =0x02000000
- ldr r1, _0802090C @ =0x0001600f
- adds r0, r1
- movs r1, 0x5
- strb r1, [r0]
- b _08020996
- .align 2, 0
-_08020904: .4byte gBattleMoveDamage
-_08020908: .4byte 0x02000000
-_0802090C: .4byte 0x0001600f
-_08020910:
- ldr r0, _08020924 @ =gBattleMoveDamage
- ldr r0, [r0]
- cmp r0, 0
- beq _08020930
- ldr r0, _08020928 @ =0x02000000
- ldr r2, _0802092C @ =0x0001600f
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0]
- b _08020996
- .align 2, 0
-_08020924: .4byte gBattleMoveDamage
-_08020928: .4byte 0x02000000
-_0802092C: .4byte 0x0001600f
-_08020930:
- ldr r2, _08020950 @ =0x02000000
- ldr r3, _08020954 @ =0x00016018
- adds r1, r2, r3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bhi _0802095C
- ldr r0, _08020958 @ =0x0001600f
- adds r1, r2, r0
- movs r0, 0x2
- strb r0, [r1]
- b _08020996
- .align 2, 0
-_08020950: .4byte 0x02000000
-_08020954: .4byte 0x00016018
-_08020958: .4byte 0x0001600f
-_0802095C:
- ldr r3, _08020968 @ =0x0001600f
- adds r1, r2, r3
- movs r0, 0x6
- strb r0, [r1]
- b _08020996
- .align 2, 0
-_08020968: .4byte 0x0001600f
-_0802096C:
- ldr r0, _080209A4 @ =gBattleExecBuffer
- ldr r5, [r0]
- cmp r5, 0
- bne _08020996
- ldr r4, _080209A8 @ =gBattleMons
- ldr r2, _080209AC @ =gBank1
- ldrb r0, [r2]
- movs r1, 0x58
- muls r0, r1
- adds r0, r4
- movs r3, 0
- strh r5, [r0, 0x2E]
- ldrb r0, [r2]
- muls r0, r1
- adds r0, r4
- adds r0, 0x20
- strb r3, [r0]
- ldr r1, _080209B0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_08020996:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080209A4: .4byte gBattleExecBuffer
-_080209A8: .4byte gBattleMons
-_080209AC: .4byte gBank1
-_080209B0: .4byte gBattlescriptCurrInstr
- thumb_func_end atk23_getexp
-
- thumb_func_start atk24
-atk24: @ 80209B4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- ldr r0, _08020AF0 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _080209C6
- b _08020B46
-_080209C6:
- movs r5, 0
-_080209C8:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08020AF4 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _080209F8
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _080209F8
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
-_080209F8:
- adds r5, 0x1
- cmp r5, 0x5
- ble _080209C8
- cmp r6, 0
- bne _08020A0C
- ldr r0, _08020AF8 @ =gBattleOutcome
- ldrb r1, [r0]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0]
-_08020A0C:
- movs r6, 0
- movs r5, 0
-_08020A10:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08020AFC @ =gEnemyParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08020A40
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08020A40
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
-_08020A40:
- adds r5, 0x1
- cmp r5, 0x5
- ble _08020A10
- ldr r2, _08020AF8 @ =gBattleOutcome
- cmp r6, 0
- bne _08020A54
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
-_08020A54:
- ldrb r0, [r2]
- cmp r0, 0
- bne _08020B3E
- ldr r2, _08020B00 @ =gBattleTypeFlags
- ldrh r1, [r2]
- movs r0, 0x2
- ands r0, r1
- mov r8, r2
- cmp r0, 0
- beq _08020B3E
- movs r2, 0
- movs r5, 0
- ldr r0, _08020B04 @ =gNoOfAllBanks
- ldrb r3, [r0]
- mov r12, r0
- ldr r7, _08020B08 @ =gBattlescriptCurrInstr
- cmp r2, r3
- bge _08020AA0
- ldr r0, _08020B0C @ =gHitMarker
- movs r1, 0x80
- lsls r1, 21
- ldr r6, [r0]
- adds r4, r3, 0
- ldr r3, _08020B10 @ =gSpecialStatuses
-_08020A84:
- adds r0, r1, 0
- lsls r0, r5
- ands r0, r6
- cmp r0, 0
- beq _08020A98
- ldrb r0, [r3]
- lsls r0, 25
- cmp r0, 0
- blt _08020A98
- adds r2, 0x1
-_08020A98:
- adds r3, 0x28
- adds r5, 0x2
- cmp r5, r4
- blt _08020A84
-_08020AA0:
- movs r4, 0
- movs r5, 0x1
- mov r0, r12
- ldrb r3, [r0]
- cmp r5, r3
- bge _08020ADA
- ldr r0, _08020B0C @ =gHitMarker
- movs r1, 0x80
- lsls r1, 21
- mov r12, r1
- ldr r1, [r0]
- ldr r0, _08020B10 @ =gSpecialStatuses
- adds r6, r3, 0
- adds r3, r0, 0
- adds r3, 0x14
-_08020ABE:
- mov r0, r12
- lsls r0, r5
- ands r0, r1
- cmp r0, 0
- beq _08020AD2
- ldrb r0, [r3]
- lsls r0, 25
- cmp r0, 0
- blt _08020AD2
- adds r4, 0x1
-_08020AD2:
- adds r3, 0x28
- adds r5, 0x2
- cmp r5, r6
- blt _08020ABE
-_08020ADA:
- mov r0, r8
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08020B14
- adds r0, r4, r2
- cmp r0, 0x1
- bgt _08020B1C
- b _08020B36
- .align 2, 0
-_08020AF0: .4byte gBattleExecBuffer
-_08020AF4: .4byte gPlayerParty
-_08020AF8: .4byte gBattleOutcome
-_08020AFC: .4byte gEnemyParty
-_08020B00: .4byte gBattleTypeFlags
-_08020B04: .4byte gNoOfAllBanks
-_08020B08: .4byte gBattlescriptCurrInstr
-_08020B0C: .4byte gHitMarker
-_08020B10: .4byte gSpecialStatuses
-_08020B14:
- cmp r4, 0
- beq _08020B36
- cmp r2, 0
- beq _08020B36
-_08020B1C:
- 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 _08020B46
-_08020B36:
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- b _08020B46
-_08020B3E:
- ldr r1, _08020B50 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08020B46:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08020B50: .4byte gBattlescriptCurrInstr
- thumb_func_end atk24
-
- thumb_func_start sub_8020B54
-sub_8020B54: @ 8020B54
- ldr r1, _08020B80 @ =gBattleMoveFlags
- movs r0, 0
- strb r0, [r1]
- ldr r0, _08020B84 @ =0x02000000
- ldr r1, _08020B88 @ =0x0001601f
- adds r0, r1
- movs r2, 0
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, _08020B8C @ =gCritMultiplier
- strb r1, [r0]
- ldr r0, _08020B90 @ =gBattleCommunication
- strb r2, [r0, 0x3]
- strb r2, [r0, 0x6]
- ldr r2, _08020B94 @ =gHitMarker
- ldr r0, [r2]
- subs r1, 0x42
- ands r0, r1
- ldr r1, _08020B98 @ =0xffffbfff
- ands r0, r1
- str r0, [r2]
- bx lr
- .align 2, 0
-_08020B80: .4byte gBattleMoveFlags
-_08020B84: .4byte 0x02000000
-_08020B88: .4byte 0x0001601f
-_08020B8C: .4byte gCritMultiplier
-_08020B90: .4byte gBattleCommunication
-_08020B94: .4byte gHitMarker
-_08020B98: .4byte 0xffffbfff
- thumb_func_end sub_8020B54
-
- thumb_func_start atk25_move_values_cleanup
-atk25_move_values_cleanup: @ 8020B9C
- push {lr}
- bl sub_8020B54
- ldr r1, _08020BB0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08020BB0: .4byte gBattlescriptCurrInstr
- thumb_func_end atk25_move_values_cleanup
-
- thumb_func_start atk26_set_multihit
-atk26_set_multihit: @ 8020BB4
- ldr r3, _08020BC4 @ =gMultiHitCounter
- ldr r2, _08020BC8 @ =gBattlescriptCurrInstr
- ldr r0, [r2]
- ldrb r1, [r0, 0x1]
- strb r1, [r3]
- adds r0, 0x2
- str r0, [r2]
- bx lr
- .align 2, 0
-_08020BC4: .4byte gMultiHitCounter
-_08020BC8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk26_set_multihit
-
- thumb_func_start atk27_decrement_multihit
-atk27_decrement_multihit: @ 8020BCC
- push {lr}
- ldr r1, _08020BE8 @ =gMultiHitCounter
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _08020BF0
- ldr r1, _08020BEC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08020C0A
- .align 2, 0
-_08020BE8: .4byte gMultiHitCounter
-_08020BEC: .4byte gBattlescriptCurrInstr
-_08020BF0:
- ldr r3, _08020C10 @ =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]
-_08020C0A:
- pop {r0}
- bx r0
- .align 2, 0
-_08020C10: .4byte gBattlescriptCurrInstr
- thumb_func_end atk27_decrement_multihit
-
- thumb_func_start atk28_goto
-atk28_goto: @ 8020C14
- ldr r3, _08020C30 @ =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
-_08020C30: .4byte gBattlescriptCurrInstr
- thumb_func_end atk28_goto
-
- thumb_func_start atk29_jumpifbyte
-atk29_jumpifbyte: @ 8020C34
- push {r4-r6,lr}
- ldr r3, _08020C78 @ =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 _08020CCC
- lsls r0, r6, 2
- ldr r1, _08020C7C @ =_08020C80
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08020C78: .4byte gBattlescriptCurrInstr
-_08020C7C: .4byte _08020C80
- .align 2, 0
-_08020C80:
- .4byte _08020C98
- .4byte _08020CA0
- .4byte _08020CA8
- .4byte _08020CB0
- .4byte _08020CB8
- .4byte _08020CC2
-_08020C98:
- ldrb r0, [r5]
- cmp r0, r4
- bne _08020CCC
- b _08020CCA
-_08020CA0:
- ldrb r0, [r5]
- cmp r0, r4
- beq _08020CCC
- b _08020CCA
-_08020CA8:
- ldrb r0, [r5]
- cmp r0, r4
- bls _08020CCC
- b _08020CCA
-_08020CB0:
- ldrb r0, [r5]
- cmp r0, r4
- bcs _08020CCC
- b _08020CCA
-_08020CB8:
- ldrb r0, [r5]
- ands r4, r0
- cmp r4, 0
- beq _08020CCC
- b _08020CCA
-_08020CC2:
- ldrb r0, [r5]
- ands r4, r0
- cmp r4, 0
- bne _08020CCC
-_08020CCA:
- str r2, [r3]
-_08020CCC:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk29_jumpifbyte
-
- thumb_func_start atk2A_jumpifhalfword
-atk2A_jumpifhalfword: @ 8020CD4
- push {r4-r6,lr}
- ldr r3, _08020D20 @ =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 _08020D74
- lsls r0, r6, 2
- ldr r1, _08020D24 @ =_08020D28
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08020D20: .4byte gBattlescriptCurrInstr
-_08020D24: .4byte _08020D28
- .align 2, 0
-_08020D28:
- .4byte _08020D40
- .4byte _08020D48
- .4byte _08020D50
- .4byte _08020D58
- .4byte _08020D60
- .4byte _08020D6A
-_08020D40:
- ldrh r0, [r5]
- cmp r0, r4
- bne _08020D74
- b _08020D72
-_08020D48:
- ldrh r0, [r5]
- cmp r0, r4
- beq _08020D74
- b _08020D72
-_08020D50:
- ldrh r0, [r5]
- cmp r0, r4
- bls _08020D74
- b _08020D72
-_08020D58:
- ldrh r0, [r5]
- cmp r0, r4
- bcs _08020D74
- b _08020D72
-_08020D60:
- ldrh r0, [r5]
- ands r4, r0
- cmp r4, 0
- beq _08020D74
- b _08020D72
-_08020D6A:
- ldrh r0, [r5]
- ands r4, r0
- cmp r4, 0
- bne _08020D74
-_08020D72:
- str r2, [r3]
-_08020D74:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk2A_jumpifhalfword
-
- thumb_func_start atk2B_jumpifword
-atk2B_jumpifword: @ 8020D7C
- push {r4-r6,lr}
- ldr r3, _08020DD4 @ =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 _08020E28
- lsls r0, r6, 2
- ldr r1, _08020DD8 @ =_08020DDC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08020DD4: .4byte gBattlescriptCurrInstr
-_08020DD8: .4byte _08020DDC
- .align 2, 0
-_08020DDC:
- .4byte _08020DF4
- .4byte _08020DFC
- .4byte _08020E04
- .4byte _08020E0C
- .4byte _08020E14
- .4byte _08020E1E
-_08020DF4:
- ldr r0, [r5]
- cmp r0, r4
- bne _08020E28
- b _08020E26
-_08020DFC:
- ldr r0, [r5]
- cmp r0, r4
- beq _08020E28
- b _08020E26
-_08020E04:
- ldr r0, [r5]
- cmp r0, r4
- bls _08020E28
- b _08020E26
-_08020E0C:
- ldr r0, [r5]
- cmp r0, r4
- bcs _08020E28
- b _08020E26
-_08020E14:
- ldr r0, [r5]
- ands r0, r4
- cmp r0, 0
- beq _08020E28
- b _08020E26
-_08020E1E:
- ldr r0, [r5]
- ands r0, r4
- cmp r0, 0
- bne _08020E28
-_08020E26:
- str r2, [r3]
-_08020E28:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk2B_jumpifword
-
- thumb_func_start atk2C_jumpifarrayequal
-atk2C_jumpifarrayequal: @ 8020E30
- push {r4-r7,lr}
- ldr r2, _08020E88 @ =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 _08020EA8
- ldrb r0, [r5]
- ldrb r7, [r4]
- cmp r0, r7
- beq _08020E8C
- adds r0, r3, 0
- b _08020EA4
- .align 2, 0
-_08020E88: .4byte gBattlescriptCurrInstr
-_08020E8C:
- adds r5, 0x1
- adds r4, 0x1
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r6
- bcs _08020EA8
- ldrb r0, [r5]
- ldrb r3, [r4]
- cmp r0, r3
- beq _08020E8C
- ldr r0, [r2]
-_08020EA4:
- adds r0, 0xE
- str r0, [r2]
-_08020EA8:
- cmp r1, r6
- bne _08020EB0
- mov r7, r12
- str r7, [r2]
-_08020EB0:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk2C_jumpifarrayequal
-
- thumb_func_start atk2D_jumpifarraynotequal
-atk2D_jumpifarraynotequal: @ 8020EB8
- push {r4-r7,lr}
- movs r7, 0
- ldr r3, _08020F2C @ =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 _08020F22
-_08020F06:
- ldrb r0, [r5]
- ldrb r2, [r4]
- cmp r0, r2
- bne _08020F14
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_08020F14:
- adds r5, 0x1
- adds r4, 0x1
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r6
- bcc _08020F06
-_08020F22:
- cmp r7, r6
- beq _08020F30
- mov r0, r12
- b _08020F34
- .align 2, 0
-_08020F2C: .4byte gBattlescriptCurrInstr
-_08020F30:
- ldr r0, [r3]
- adds r0, 0xE
-_08020F34:
- str r0, [r3]
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk2D_jumpifarraynotequal
-
- thumb_func_start atk2E_setbyte
-atk2E_setbyte: @ 8020F3C
- ldr r3, _08020F60 @ =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
-_08020F60: .4byte gBattlescriptCurrInstr
- thumb_func_end atk2E_setbyte
-
- thumb_func_start atk2F_addbyte
-atk2F_addbyte: @ 8020F64
- ldr r3, _08020F8C @ =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
-_08020F8C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk2F_addbyte
-
- thumb_func_start atk30_subbyte
-atk30_subbyte: @ 8020F90
- ldr r3, _08020FB8 @ =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
-_08020FB8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk30_subbyte
-
- thumb_func_start atk31_copyarray
-atk31_copyarray: @ 8020FBC
- push {r4-r6,lr}
- ldr r3, _0802100C @ =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 _08021000
-_08020FF2:
- adds r0, r6, r2
- adds r1, r5, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, r4
- blt _08020FF2
-_08021000:
- ldr r0, [r3]
- adds r0, 0xA
- str r0, [r3]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802100C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk31_copyarray
-
- thumb_func_start atk32_copyarray_withindex
-atk32_copyarray_withindex: @ 8021010
- push {r4-r7,lr}
- ldr r3, _08021078 @ =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 _0802106C
-_0802105A:
- 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 _0802105A
-_0802106C:
- ldr r0, [r3]
- adds r0, 0xE
- str r0, [r3]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08021078: .4byte gBattlescriptCurrInstr
- thumb_func_end atk32_copyarray_withindex
-
- thumb_func_start atk33_orbyte
-atk33_orbyte: @ 802107C
- ldr r3, _080210A4 @ =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
-_080210A4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk33_orbyte
-
- thumb_func_start atk34_orhalfword
-atk34_orhalfword: @ 80210A8
- push {r4,lr}
- ldr r4, _080210DC @ =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
-_080210DC: .4byte gBattlescriptCurrInstr
- thumb_func_end atk34_orhalfword
-
- thumb_func_start atk35_orword
-atk35_orword: @ 80210E0
- push {r4,lr}
- ldr r4, _08021120 @ =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
-_08021120: .4byte gBattlescriptCurrInstr
- thumb_func_end atk35_orword
-
- thumb_func_start atk36_bicbyte
-atk36_bicbyte: @ 8021124
- ldr r3, _0802114C @ =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
-_0802114C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk36_bicbyte
-
- thumb_func_start atk37_bichalfword
-atk37_bichalfword: @ 8021150
- push {r4,lr}
- ldr r4, _08021184 @ =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
-_08021184: .4byte gBattlescriptCurrInstr
- thumb_func_end atk37_bichalfword
-
- thumb_func_start atk38_bicword
-atk38_bicword: @ 8021188
- push {r4,lr}
- ldr r4, _080211C8 @ =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
-_080211C8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk38_bicword
-
- thumb_func_start atk39_pause
-atk39_pause: @ 80211CC
- push {r4,r5,lr}
- ldr r0, _08021200 @ =gBattleExecBuffer
- ldr r4, [r0]
- cmp r4, 0
- bne _080211F8
- ldr r5, _08021204 @ =gBattlescriptCurrInstr
- ldr r2, [r5]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldr r3, _08021208 @ =gPauseCounterBattle
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r1
- bcc _080211F8
- strh r4, [r3]
- adds r0, r2, 0x3
- str r0, [r5]
-_080211F8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08021200: .4byte gBattleExecBuffer
-_08021204: .4byte gBattlescriptCurrInstr
-_08021208: .4byte gPauseCounterBattle
- thumb_func_end atk39_pause
-
- thumb_func_start atk3A_waitstate
-atk3A_waitstate: @ 802120C
- push {lr}
- ldr r0, _08021224 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0802121E
- ldr r1, _08021228 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0802121E:
- pop {r0}
- bx r0
- .align 2, 0
-_08021224: .4byte gBattleExecBuffer
-_08021228: .4byte gBattlescriptCurrInstr
- thumb_func_end atk3A_waitstate
-
- thumb_func_start atk3B_healthbar_update
-atk3B_healthbar_update: @ 802122C
- push {lr}
- ldr r0, _08021240 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _0802124C
- ldr r0, _08021244 @ =gActiveBank
- ldr r1, _08021248 @ =gBankTarget
- b _08021250
- .align 2, 0
-_08021240: .4byte gBattlescriptCurrInstr
-_08021244: .4byte gActiveBank
-_08021248: .4byte gBankTarget
-_0802124C:
- ldr r0, _08021274 @ =gActiveBank
- ldr r1, _08021278 @ =gBankAttacker
-_08021250:
- ldrb r1, [r1]
- strb r1, [r0]
- ldr r0, _0802127C @ =gBattleMoveDamage
- ldrh r1, [r0]
- movs r0, 0
- bl EmitHealthBarUpdate
- ldr r0, _08021274 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _08021280 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08021274: .4byte gActiveBank
-_08021278: .4byte gBankAttacker
-_0802127C: .4byte gBattleMoveDamage
-_08021280: .4byte gBattlescriptCurrInstr
- thumb_func_end atk3B_healthbar_update
-
- thumb_func_start atk3C_return
-atk3C_return: @ 8021284
- push {lr}
- bl b_movescr_stack_pop_cursor
- pop {r0}
- bx r0
- thumb_func_end atk3C_return
-
- thumb_func_start atk3D_end
-atk3D_end: @ 8021290
- ldr r0, _080212A4 @ =gBattleMoveFlags
- movs r1, 0
- strb r1, [r0]
- ldr r0, _080212A8 @ =gActiveBank
- strb r1, [r0]
- ldr r1, _080212AC @ =gFightStateTracker
- movs r0, 0xB
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080212A4: .4byte gBattleMoveFlags
-_080212A8: .4byte gActiveBank
-_080212AC: .4byte gFightStateTracker
- thumb_func_end atk3D_end
-
- thumb_func_start atk3E_end2
-atk3E_end2: @ 80212B0
- ldr r1, _080212C0 @ =gActiveBank
- movs r0, 0
- strb r0, [r1]
- ldr r1, _080212C4 @ =gFightStateTracker
- movs r0, 0xB
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080212C0: .4byte gActiveBank
-_080212C4: .4byte gFightStateTracker
- thumb_func_end atk3E_end2
-
- thumb_func_start atk3F_end3
-atk3F_end3: @ 80212C8
- push {lr}
- bl b_movescr_stack_pop_cursor
- ldr r2, _080212F0 @ =0x02017140
- adds r1, r2, 0
- adds r1, 0x20
- ldrb r0, [r1]
- cmp r0, 0
- beq _080212DE
- subs r0, 0x1
- strb r0, [r1]
-_080212DE:
- ldr r0, _080212F4 @ =gBattleMainFunc
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- str r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_080212F0: .4byte 0x02017140
-_080212F4: .4byte gBattleMainFunc
- thumb_func_end atk3F_end3
-
- thumb_func_start atk41_call
-atk41_call: @ 80212F8
- push {r4,lr}
- ldr r4, _08021324 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x5
- bl b_movescr_stack_push
- 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
-_08021324: .4byte gBattlescriptCurrInstr
- thumb_func_end atk41_call
-
- thumb_func_start atk42_jumpiftype2
-atk42_jumpiftype2: @ 8021328
- push {r4,lr}
- ldr r4, _08021370 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- lsls r0, 24
- lsrs r0, 24
- ldr r3, [r4]
- ldr r2, _08021374 @ =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 _08021356
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r2, r0
- bne _08021378
-_08021356:
- 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 _0802137C
- .align 2, 0
-_08021370: .4byte gBattlescriptCurrInstr
-_08021374: .4byte gBattleMons
-_08021378:
- adds r0, r3, 0x7
- str r0, [r4]
-_0802137C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end atk42_jumpiftype2
-
- thumb_func_start atk43_jumpifabilitypresent
-atk43_jumpifabilitypresent: @ 8021384
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _080213BC @ =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 _080213C0
- 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 _080213C6
- .align 2, 0
-_080213BC: .4byte gBattlescriptCurrInstr
-_080213C0:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_080213C6:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end atk43_jumpifabilitypresent
-
- thumb_func_start atk44
-atk44: @ 80213D0
- ldr r1, _080213E4 @ =0x02000000
- ldr r0, _080213E8 @ =gBankAttacker
- ldrb r0, [r0]
- ldr r2, _080213EC @ =0x00016060
- adds r0, r2
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- bx lr
- .align 2, 0
-_080213E4: .4byte 0x02000000
-_080213E8: .4byte gBankAttacker
-_080213EC: .4byte 0x00016060
- thumb_func_end atk44
-
- thumb_func_start atk45_playanimation
-atk45_playanimation: @ 80213F0
- push {r4-r6,lr}
- ldr r5, _08021444 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r6, _08021448 @ =gActiveBank
- strb r0, [r6]
- ldr r2, [r5]
- 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 r4, [r2, 0x2]
- adds r0, r4, 0
- cmp r0, 0x1
- beq _08021426
- cmp r0, 0x11
- beq _08021426
- cmp r0, 0x2
- bne _0802144C
-_08021426:
- ldr r4, _08021444 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r1, [r0, 0x2]
- ldrh r2, [r3]
- movs r0, 0
- bl EmitBattleAnimation
- ldr r0, _08021448 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x7
- str r0, [r4]
- b _080214AE
- .align 2, 0
-_08021444: .4byte gBattlescriptCurrInstr
-_08021448: .4byte gActiveBank
-_0802144C:
- ldr r0, _08021464 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802146C
- adds r0, r2, 0x7
- bl b_movescr_stack_push
- ldr r0, _08021468 @ =BattleScript_Pausex20
- b _080214AC
- .align 2, 0
-_08021464: .4byte gHitMarker
-_08021468: .4byte BattleScript_Pausex20
-_0802146C:
- adds r0, r4, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _08021498
- ldr r1, _08021490 @ =gStatuses3
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08021494 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08021498
- adds r0, r2, 0x7
- b _080214AC
- .align 2, 0
-_08021490: .4byte gStatuses3
-_08021494: .4byte 0x000400c0
-_08021498:
- ldrb r1, [r2, 0x2]
- ldrh r2, [r3]
- movs r0, 0
- bl EmitBattleAnimation
- ldrb r0, [r6]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x7
-_080214AC:
- str r0, [r5]
-_080214AE:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk45_playanimation
-
- thumb_func_start atk46_playanimation2
-atk46_playanimation2: @ 80214B4
- push {r4-r7,lr}
- ldr r6, _0802151C @ =gBattlescriptCurrInstr
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r7, _08021520 @ =gActiveBank
- 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 _080214FE
- cmp r0, 0x11
- beq _080214FE
- cmp r0, 0x2
- bne _08021524
-_080214FE:
- ldrb r1, [r3]
- ldrh r2, [r4]
- movs r0, 0
- bl EmitBattleAnimation
- ldr r0, _08021520 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _0802151C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
- b _0802157A
- .align 2, 0
-_0802151C: .4byte gBattlescriptCurrInstr
-_08021520: .4byte gActiveBank
-_08021524:
- ldr r0, _08021534 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08021538
- adds r0, r2, 0
- b _08021576
- .align 2, 0
-_08021534: .4byte gHitMarker
-_08021538:
- adds r0, r5, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _08021564
- ldr r1, _0802155C @ =gStatuses3
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08021560 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08021564
- adds r0, r2, 0
- b _08021576
- .align 2, 0
-_0802155C: .4byte gStatuses3
-_08021560: .4byte 0x000400c0
-_08021564:
- ldrb r1, [r3]
- ldrh r2, [r4]
- movs r0, 0
- bl EmitBattleAnimation
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldr r0, [r6]
-_08021576:
- adds r0, 0xA
- str r0, [r6]
-_0802157A:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk46_playanimation2
-
- thumb_func_start atk47_setgraphicalstatchangevalues_setgraphicalstatchangevalues_setgraphicalstatchangevalues
-atk47_setgraphicalstatchangevalues_setgraphicalstatchangevalues_setgraphicalstatchangevalues: @ 8021580
- push {r4,lr}
- movs r3, 0
- ldr r0, _080215A0 @ =0x02000000
- ldr r2, _080215A4 @ =0x0001601e
- adds r1, r0, r2
- ldrb r1, [r1]
- movs r2, 0xF0
- ands r2, r1
- adds r4, r0, 0
- cmp r2, 0x20
- beq _080215B6
- cmp r2, 0x20
- bgt _080215A8
- cmp r2, 0x10
- beq _080215B2
- b _080215C0
- .align 2, 0
-_080215A0: .4byte 0x02000000
-_080215A4: .4byte 0x0001601e
-_080215A8:
- cmp r2, 0x90
- beq _080215BA
- cmp r2, 0xA0
- beq _080215BE
- b _080215C0
-_080215B2:
- movs r3, 0xF
- b _080215C0
-_080215B6:
- movs r3, 0x27
- b _080215C0
-_080215BA:
- movs r3, 0x16
- b _080215C0
-_080215BE:
- movs r3, 0x2E
-_080215C0:
- ldr r1, _080215EC @ =0x0001601e
- adds r0, r4, r1
- ldrb r1, [r0]
- movs r0, 0xF
- ands r0, r1
- adds r0, r3, r0
- subs r0, 0x1
- ldr r2, _080215F0 @ =0x000160a4
- adds r1, r4, r2
- movs r2, 0
- strb r0, [r1]
- ldr r1, _080215F4 @ =0x000160a5
- adds r0, r4, r1
- strb r2, [r0]
- ldr r1, _080215F8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080215EC: .4byte 0x0001601e
-_080215F0: .4byte 0x000160a4
-_080215F4: .4byte 0x000160a5
-_080215F8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk47_setgraphicalstatchangevalues_setgraphicalstatchangevalues_setgraphicalstatchangevalues
-
- thumb_func_start atk48_playstatchangeanimation
-atk48_playstatchangeanimation: @ 80215FC
- 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, _08021670 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- str r3, [sp]
- bl sub_8015150
- ldr r2, _08021674 @ =gActiveBank
- 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 _08021710
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x15
- cmp r0, 0
- beq _0802163C
- movs r1, 0x2D
-_0802163C:
- cmp r4, 0
- beq _080216E4
- movs r0, 0x1
- mov r10, r0
- ldr r0, _08021678 @ =gUnknown_02024A98
- mov r9, r0
- lsls r5, r1, 16
-_0802164A:
- adds r0, r4, 0
- mov r1, r10
- ands r0, r1
- cmp r0, 0
- beq _080216D6
- ldr r0, _08021670 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0802167C
- ldr r0, _08021674 @ =gActiveBank
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7, r0
- b _080216C4
- .align 2, 0
-_08021670: .4byte gBattlescriptCurrInstr
-_08021674: .4byte gActiveBank
-_08021678: .4byte gUnknown_02024A98
-_0802167C:
- ldr r6, _08021700 @ =gActiveBank
- ldrb r0, [r6]
- str r3, [sp]
- bl GetBankIdentity
- mov r1, r10
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08021704 @ =gSideTimer
- adds r0, r1
- ldrb r0, [r0, 0x2]
- ldr r3, [sp]
- cmp r0, 0
- bne _080216D6
- ldr r0, _08021708 @ =gBattleMons
- ldrb r2, [r6]
- movs r1, 0x58
- muls r2, r1
- adds r0, r2, r0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1D
- beq _080216D6
- cmp r0, 0x49
- beq _080216D6
- cmp r0, 0x33
- bne _080216BA
- cmp r7, 0x6
- beq _080216D6
-_080216BA:
- cmp r0, 0x34
- bne _080216C2
- cmp r7, 0x1
- beq _080216D6
-_080216C2:
- adds r0, r7, r2
-_080216C4:
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- ble _080216D6
- lsrs r0, r5, 16
- mov r8, r0
- adds r3, 0x1
-_080216D6:
- lsrs r4, 1
- movs r1, 0x80
- lsls r1, 9
- adds r5, r1
- adds r7, 0x1
- cmp r4, 0
- bne _0802164A
-_080216E4:
- ldr r0, _0802170C @ =gBattlescriptCurrInstr
- mov r9, r0
- cmp r3, 0x1
- ble _08021772
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x39
- mov r8, r1
- cmp r0, 0
- beq _08021772
- movs r0, 0x3A
- b _08021770
- .align 2, 0
-_08021700: .4byte gActiveBank
-_08021704: .4byte gSideTimer
-_08021708: .4byte gBattleMons
-_0802170C: .4byte gBattlescriptCurrInstr
-_08021710:
- movs r0, 0x2
- ands r0, r1
- movs r1, 0xE
- cmp r0, 0
- beq _0802171C
- movs r1, 0x26
-_0802171C:
- mov r9, r5
- cmp r4, 0
- beq _08021758
- ldr r6, _0802178C @ =gUnknown_02024A98
- adds r5, r2, 0
- lsls r2, r1, 16
-_08021728:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0802174A
- 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 _0802174A
- lsrs r1, r2, 16
- mov r8, r1
- adds r3, 0x1
-_0802174A:
- lsrs r4, 1
- movs r0, 0x80
- lsls r0, 9
- adds r2, r0
- adds r7, 0x1
- cmp r4, 0
- bne _08021728
-_08021758:
- cmp r3, 0x1
- ble _08021772
- 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 _08021772
- movs r0, 0x38
-_08021770:
- mov r8, r0
-_08021772:
- mov r1, r9
- ldr r2, [r1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08021790
- cmp r3, 0x1
- bgt _08021790
- adds r0, r2, 0x4
- mov r1, r9
- b _080217E6
- .align 2, 0
-_0802178C: .4byte gUnknown_02024A98
-_08021790:
- cmp r3, 0
- beq _080217E0
- ldr r0, _080217D0 @ =0x02000000
- ldr r1, _080217D4 @ =0x000160dc
- adds r4, r0, r1
- ldrb r0, [r4]
- cmp r0, 0
- bne _080217E0
- movs r0, 0
- movs r1, 0x1
- mov r2, r8
- str r3, [sp]
- bl EmitBattleAnimation
- ldr r0, _080217D8 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r0, _080217DC @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x4
- ands r0, r1
- ldr r3, [sp]
- cmp r0, 0
- beq _080217CC
- cmp r3, 0x1
- ble _080217CC
- movs r0, 0x1
- strb r0, [r4]
-_080217CC:
- ldr r1, _080217DC @ =gBattlescriptCurrInstr
- b _080217E2
- .align 2, 0
-_080217D0: .4byte 0x02000000
-_080217D4: .4byte 0x000160dc
-_080217D8: .4byte gActiveBank
-_080217DC: .4byte gBattlescriptCurrInstr
-_080217E0:
- mov r1, r9
-_080217E2:
- ldr r0, [r1]
- adds r0, 0x4
-_080217E6:
- 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 sub_80217F8
-sub_80217F8: @ 80217F8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- movs r0, 0
- mov r10, r0
- ldr r0, _08021834 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r1, [r0, 0x1]
- str r1, [sp, 0x10]
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x14]
- ldr r1, _08021838 @ =gBattleMons
- ldr r0, _0802183C @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, r0, r1
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _08021844
- ldr r1, _08021840 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x7]
- b _0802184E
- .align 2, 0
-_08021834: .4byte gBattlescriptCurrInstr
-_08021838: .4byte gBattleMons
-_0802183C: .4byte gBankAttacker
-_08021840: .4byte gEnigmaBerries
-_08021844:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
-_0802184E:
- str r0, [sp, 0x8]
- ldr r0, _0802186C @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 1
- ldr r0, _08021870 @ =0x020160e8
- adds r1, r0
- str r1, [sp, 0xC]
- subs r0, 0xCC
- ldrb r0, [r0]
- cmp r0, 0
- beq _080218C0
- movs r2, 0x3F
- ands r2, r0
- str r2, [sp, 0x4]
- b _080218D2
- .align 2, 0
-_0802186C: .4byte gBankAttacker
-_08021870: .4byte 0x020160e8
-_08021874:
- strb r2, [r7]
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- ldr r0, _080218AC @ =0x02000000
- ldr r3, _080218B0 @ =0x0001600c
- adds r0, r3
- strb r4, [r0]
- bl sub_8020B54
- ldr r2, _080218B4 @ =gUnknown_081D6BBC
- mov r4, r8
- ldrh r1, [r4]
- 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 b_movescr_stack_push
- ldr r1, _080218B8 @ =gBattlescriptCurrInstr
- ldr r0, _080218BC @ =gUnknown_081D9B2D
- bl _0802229C
- .align 2, 0
-_080218AC: .4byte 0x02000000
-_080218B0: .4byte 0x0001600c
-_080218B4: .4byte gUnknown_081D6BBC
-_080218B8: .4byte gBattlescriptCurrInstr
-_080218BC: .4byte gUnknown_081D9B2D
-_080218C0:
- ldr r2, _080218D8 @ =gBattleMoves
- ldr r0, _080218DC @ =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]
-_080218D2:
- ldr r5, _080218E0 @ =0x02000000
- mov r12, r5
- b _080218EE
- .align 2, 0
-_080218D8: .4byte gBattleMoves
-_080218DC: .4byte gCurrentMove
-_080218E0: .4byte 0x02000000
-_080218E4:
- mov r0, r10
- cmp r0, 0
- beq _080218EE
- bl _08022286
-_080218EE:
- ldr r0, _08021908 @ =0x0001600c
- add r0, r12
- ldrb r0, [r0]
- cmp r0, 0x11
- bls _080218FC
- bl _0802224E
-_080218FC:
- lsls r0, 2
- ldr r1, _0802190C @ =_08021910
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08021908: .4byte 0x0001600c
-_0802190C: .4byte _08021910
- .align 2, 0
-_08021910:
- .4byte _08021958
- .4byte _08021A34
- .4byte _08021AF0
- .4byte _08021B20
- .4byte _08021B44
- .4byte _08021B78
- .4byte _08021B9C
- .4byte _08021C40
- .4byte _08021C78
- .4byte _08021CA8
- .4byte _08021CCC
- .4byte _08021D18
- .4byte _08021DAC
- .4byte _08021E30
- .4byte _08021E70
- .4byte _08022068
- .4byte _080221C0
- .4byte _0802224E
-_08021958:
- ldr r5, _08021A08 @ =gBattleMons
- ldr r2, _08021A0C @ =gBankTarget
- ldrb r4, [r2]
- movs r6, 0x58
- adds r3, r4, 0
- muls r3, r6
- adds r0, r5, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 16
- ands r1, r0
- cmp r1, 0
- beq _080219FE
- adds r0, r3, r5
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _080219FE
- ldr r0, _08021A10 @ =gBankAttacker
- ldrb r1, [r0]
- cmp r1, r4
- beq _080219FE
- adds r0, r1, 0
- bl GetBankSide
- adds r4, r0, 0
- ldr r1, _08021A0C @ =gBankTarget
- ldrb r0, [r1]
- bl GetBankSide
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- beq _080219FE
- ldr r0, _08021A14 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _080219FE
- ldr r2, _08021A18 @ =gProtectStructs
- ldr r4, _08021A0C @ =gBankTarget
- ldrb r3, [r4]
- lsls r1, r3, 4
- adds r0, r2, 0x4
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _080219C8
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _080219FE
-_080219C8:
- ldr r2, _08021A1C @ =gBattleMoves
- ldr r0, _08021A20 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080219FE
- adds r0, r3, 0
- muls r0, r6
- adds r1, r0, r5
- ldrb r2, [r1, 0x19]
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- bgt _080219FE
- adds r0, r2, 0x1
- strb r0, [r1, 0x19]
- bl b_movescr_stack_push_cursor
- ldr r1, _08021A24 @ =gBattlescriptCurrInstr
- ldr r0, _08021A28 @ =gUnknown_081D9132
- str r0, [r1]
- movs r5, 0x1
- mov r10, r5
-_080219FE:
- ldr r2, _08021A2C @ =0x02000000
- ldr r0, _08021A30 @ =0x0001600c
- adds r1, r2, r0
- b _08021E00
- .align 2, 0
-_08021A08: .4byte gBattleMons
-_08021A0C: .4byte gBankTarget
-_08021A10: .4byte gBankAttacker
-_08021A14: .4byte gBattleMoveFlags
-_08021A18: .4byte gProtectStructs
-_08021A1C: .4byte gBattleMoves
-_08021A20: .4byte gCurrentMove
-_08021A24: .4byte gBattlescriptCurrInstr
-_08021A28: .4byte gUnknown_081D9132
-_08021A2C: .4byte 0x02000000
-_08021A30: .4byte 0x0001600c
-_08021A34:
- ldr r2, _08021AD0 @ =gBattleMons
- ldr r1, _08021AD4 @ =gBankTarget
- ldrb r4, [r1]
- movs r3, 0x58
- mov r12, r3
- mov r3, r12
- muls r3, r4
- adds r7, r2, 0
- adds r7, 0x4C
- adds r6, r3, r7
- ldr r5, [r6]
- movs r0, 0x20
- ands r0, r5
- cmp r0, 0
- bne _08021A54
- b _08021DFA
-_08021A54:
- adds r0, r3, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08021A5E
- b _08021DFA
-_08021A5E:
- ldr r0, _08021AD8 @ =gBankAttacker
- ldrb r0, [r0]
- cmp r0, r4
- bne _08021A68
- b _08021DFA
-_08021A68:
- ldr r0, _08021ADC @ =gSpecialStatuses
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 2
- adds r0, 0xC
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _08021A7C
- b _08021DFA
-_08021A7C:
- ldr r0, _08021AE0 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _08021A8A
- b _08021DFA
-_08021A8A:
- ldr r4, [sp, 0x4]
- cmp r4, 0xA
- beq _08021A92
- b _08021DFA
-_08021A92:
- movs r0, 0x21
- negs r0, r0
- ands r5, r0
- str r5, [r6]
- ldr r4, _08021AE4 @ =gActiveBank
- ldr r5, _08021AD4 @ =gBankTarget
- ldrb r0, [r5]
- strb r0, [r4]
- ldrb r0, [r5]
- 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 EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- bl b_movescr_stack_push_cursor
- ldr r1, _08021AE8 @ =gBattlescriptCurrInstr
- ldr r0, _08021AEC @ =gUnknown_081D955D
- str r0, [r1]
- movs r2, 0x1
- mov r10, r2
- b _08021DFA
- .align 2, 0
-_08021AD0: .4byte gBattleMons
-_08021AD4: .4byte gBankTarget
-_08021AD8: .4byte gBankAttacker
-_08021ADC: .4byte gSpecialStatuses
-_08021AE0: .4byte gBattleMoveFlags
-_08021AE4: .4byte gActiveBank
-_08021AE8: .4byte gBattlescriptCurrInstr
-_08021AEC: .4byte gUnknown_081D955D
-_08021AF0:
- ldr r0, _08021B14 @ =gBankTarget
- 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
- beq _08021B0C
- movs r4, 0x1
- mov r10, r4
-_08021B0C:
- ldr r2, _08021B18 @ =0x02000000
- ldr r5, _08021B1C @ =0x0001600c
- adds r1, r2, r5
- b _08021E00
- .align 2, 0
-_08021B14: .4byte gBankTarget
-_08021B18: .4byte 0x02000000
-_08021B1C: .4byte 0x0001600c
-_08021B20:
- ldr r0, _08021B40 @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x4
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _08021B3A
- b _08021DFA
-_08021B3A:
- movs r0, 0x1
- mov r10, r0
- b _08021DFA
- .align 2, 0
-_08021B40: .4byte gBankTarget
-_08021B44:
- 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
- beq _08021B68
- movs r4, 0x1
- mov r10, r4
- ldr r5, _08021B64 @ =0x02000000
- mov r12, r5
- b _0802224E
- .align 2, 0
-_08021B64: .4byte 0x02000000
-_08021B68:
- ldr r2, _08021B70 @ =0x02000000
- ldr r0, _08021B74 @ =0x0001600c
- adds r1, r2, r0
- b _08021E00
- .align 2, 0
-_08021B70: .4byte 0x02000000
-_08021B74: .4byte 0x0001600c
-_08021B78:
- ldr r0, _08021B98 @ =gBankAttacker
- 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 _08021B92
- b _08021DFA
-_08021B92:
- movs r1, 0x1
- mov r10, r1
- b _08021DFA
- .align 2, 0
-_08021B98: .4byte gBankAttacker
-_08021B9C:
- ldr r0, _08021C28 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _08021BE0
- ldr r4, [sp, 0x8]
- cmp r4, 0x1D
- bne _08021BE0
- ldr r0, _08021C2C @ =gUnknown_02024BE8
- ldrh r2, [r0]
- adds r7, r0, 0
- cmp r2, 0xA5
- beq _08021BE0
- ldr r5, [sp, 0xC]
- ldrh r1, [r5]
- cmp r1, 0
- beq _08021BC8
- ldr r0, _08021C30 @ =0x0000ffff
- cmp r1, r0
- bne _08021BE0
-_08021BC8:
- cmp r2, 0xE2
- bne _08021BDA
- ldr r0, _08021C34 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08021BDA
- b _08022244
-_08021BDA:
- ldrh r0, [r7]
- ldr r1, [sp, 0xC]
- strh r0, [r1]
-_08021BE0:
- movs r4, 0
- ldr r2, _08021C38 @ =gBattleMons
- ldr r3, _08021C3C @ =gBankAttacker
- 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 _08021C18
- mov r6, r9
- movs r3, 0x58
- adds r5, r1, 0
-_08021C02:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08021C18
- lsls r0, r4, 1
- ldrb r1, [r6]
- muls r1, r3
- adds r0, r1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r5
- bne _08021C02
-_08021C18:
- cmp r4, 0x4
- beq _08021C1E
- b _08022244
-_08021C1E:
- movs r0, 0
- ldr r1, [sp, 0xC]
-_08021C22:
- strh r0, [r1]
- b _08022244
- .align 2, 0
-_08021C28: .4byte gHitMarker
-_08021C2C: .4byte gUnknown_02024BE8
-_08021C30: .4byte 0x0000ffff
-_08021C34: .4byte gBattleMoveFlags
-_08021C38: .4byte gBattleMons
-_08021C3C: .4byte gBankAttacker
-_08021C40:
- movs r4, 0
- ldr r0, _08021C6C @ =gNoOfAllBanks
- ldrb r2, [r0]
- cmp r4, r2
- blt _08021C4C
- b _08022244
-_08021C4C:
- movs r5, 0
- ldr r2, _08021C70 @ =0x020160f0
- ldr r3, _08021C74 @ =gBattleMons
-_08021C52:
- ldrh r1, [r2]
- cmp r1, 0
- beq _08021C5C
- strh r1, [r3, 0x2E]
- strh r5, [r2]
-_08021C5C:
- adds r2, 0x2
- adds r3, 0x58
- adds r4, 0x1
- ldrb r1, [r0]
- cmp r4, r1
- blt _08021C52
- b _08022244
- .align 2, 0
-_08021C6C: .4byte gNoOfAllBanks
-_08021C70: .4byte 0x020160f0
-_08021C74: .4byte gBattleMons
-_08021C78:
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl sub_801A02C
- lsls r0, 24
- cmp r0, 0
- beq _08021C98
- movs r2, 0x1
- mov r10, r2
- ldr r3, _08021C94 @ =0x02000000
- mov r12, r3
- b _0802224E
- .align 2, 0
-_08021C94: .4byte 0x02000000
-_08021C98:
- ldr r2, _08021CA0 @ =0x02000000
- ldr r4, _08021CA4 @ =0x0001600c
- adds r1, r2, r4
- b _08021E00
- .align 2, 0
-_08021CA0: .4byte 0x02000000
-_08021CA4: .4byte 0x0001600c
-_08021CA8:
- movs r0, 0x4
- movs r1, 0
- movs r2, 0
- bl sub_801A02C
- lsls r0, 24
- cmp r0, 0
- beq _08021CBC
- movs r5, 0x1
- mov r10, r5
-_08021CBC:
- ldr r2, _08021CC4 @ =0x02000000
- ldr r0, _08021CC8 @ =0x0001600c
- adds r1, r2, r0
- b _08021E00
- .align 2, 0
-_08021CC4: .4byte 0x02000000
-_08021CC8: .4byte 0x0001600c
-_08021CCC:
- ldr r1, _08021D04 @ =gStatuses3
- ldr r0, _08021D08 @ =gBankAttacker
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08021D0C @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08021CE2
- b _08021DFA
-_08021CE2:
- ldr r0, _08021D10 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08021CF0
- b _08021DFA
-_08021CF0:
- ldr r4, _08021D14 @ =gActiveBank
- strb r2, [r4]
- movs r0, 0
- movs r1, 0x1
- bl EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08021DFA
- .align 2, 0
-_08021D04: .4byte gStatuses3
-_08021D08: .4byte gBankAttacker
-_08021D0C: .4byte 0x000400c0
-_08021D10: .4byte gHitMarker
-_08021D14: .4byte gActiveBank
-_08021D18:
- ldr r0, _08021D88 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _08021D44
- ldr r1, _08021D8C @ =gStatuses3
- ldr r0, _08021D90 @ =gBankAttacker
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08021D94 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08021D44
- adds r0, r2, 0
- bl sub_8015660
- lsls r0, 24
- cmp r0, 0
- beq _08021D7E
-_08021D44:
- ldr r4, _08021D98 @ =gActiveBank
- ldr r5, _08021D90 @ =gBankAttacker
- ldrb r0, [r5]
- strb r0, [r4]
- movs r0, 0
- movs r1, 0
- bl EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, _08021D8C @ =gStatuses3
- ldrb r2, [r5]
- lsls r2, 2
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _08021D9C @ =0xfffbff3f
- ands r0, r1
- str r0, [r2]
- ldr r2, _08021DA0 @ =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]
-_08021D7E:
- ldr r2, _08021DA4 @ =0x02000000
- ldr r4, _08021DA8 @ =0x0001600c
- adds r1, r2, r4
- b _08021E00
- .align 2, 0
-_08021D88: .4byte gBattleMoveFlags
-_08021D8C: .4byte gStatuses3
-_08021D90: .4byte gBankAttacker
-_08021D94: .4byte 0x000400c0
-_08021D98: .4byte gActiveBank
-_08021D9C: .4byte 0xfffbff3f
-_08021DA0: .4byte gSpecialStatuses
-_08021DA4: .4byte 0x02000000
-_08021DA8: .4byte 0x0001600c
-_08021DAC:
- ldr r2, _08021E0C @ =gSpecialStatuses
- ldr r1, _08021E10 @ =gBankTarget
- ldrb r3, [r1]
- lsls r4, r3, 2
- adds r0, r4, r3
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- blt _08021DFA
- ldr r0, _08021E14 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r3, r0
- bcs _08021DFA
- ldr r5, _08021E18 @ =gStatuses3
- adds r0, r4, r5
- ldr r0, [r0]
- ldr r1, _08021E1C @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08021DFA
- ldr r4, _08021E20 @ =gActiveBank
- strb r3, [r4]
- movs r0, 0
- movs r1, 0
- bl EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, _08021E10 @ =gBankTarget
- ldrb r2, [r0]
- lsls r2, 2
- adds r2, r5
- ldr r0, [r2]
- ldr r1, _08021E24 @ =0xfffbff3f
- ands r0, r1
- str r0, [r2]
-_08021DFA:
- ldr r2, _08021E28 @ =0x02000000
- ldr r3, _08021E2C @ =0x0001600c
- adds r1, r2, r3
-_08021E00:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r12, r2
- b _0802224E
- .align 2, 0
-_08021E0C: .4byte gSpecialStatuses
-_08021E10: .4byte gBankTarget
-_08021E14: .4byte gNoOfAllBanks
-_08021E18: .4byte gStatuses3
-_08021E1C: .4byte 0x000400c0
-_08021E20: .4byte gActiveBank
-_08021E24: .4byte 0xfffbff3f
-_08021E28: .4byte 0x02000000
-_08021E2C: .4byte 0x0001600c
-_08021E30:
- movs r4, 0
- ldr r0, _08021E60 @ =gNoOfAllBanks
- ldrb r5, [r0]
- cmp r4, r5
- blt _08021E3C
- b _08022244
-_08021E3C:
- ldr r2, _08021E64 @ =gDisableStructs
- ldr r5, _08021E68 @ =0xfeffffff
- adds r3, r0, 0
- ldr r1, _08021E6C @ =gUnknown_02024AD0
-_08021E44:
- ldrb r0, [r2, 0xA]
- cmp r0, 0
- bne _08021E50
- ldr r0, [r1]
- ands r0, r5
- str r0, [r1]
-_08021E50:
- adds r2, 0x1C
- adds r1, 0x58
- adds r4, 0x1
- ldrb r0, [r3]
- cmp r4, r0
- blt _08021E44
- b _08022244
- .align 2, 0
-_08021E60: .4byte gNoOfAllBanks
-_08021E64: .4byte gDisableStructs
-_08021E68: .4byte 0xfeffffff
-_08021E6C: .4byte gUnknown_02024AD0
-_08021E70:
- ldr r1, _08021F2C @ =gHitMarker
- ldr r3, [r1]
- movs r0, 0x80
- lsls r0, 5
- ands r0, r3
- ldr r2, _08021F30 @ =gBankAttacker
- mov r9, r2
- adds r5, r1, 0
- cmp r0, 0
- beq _08021E9A
- ldr r0, _08021F34 @ =gActiveBank
- ldrb r2, [r2]
- strb r2, [r0]
- ldr r1, _08021F38 @ =gBankTarget
- ldrb r0, [r1]
- mov r4, r9
- strb r0, [r4]
- strb r2, [r1]
- ldr r0, _08021F3C @ =0xffffefff
- ands r3, r0
- str r3, [r5]
-_08021E9A:
- ldr r1, _08021F40 @ =gBattleMoves
- ldr r2, _08021F44 @ =gUnknown_02024BE8
- ldrh r3, [r2]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- mov r8, r1
- adds r7, r2, 0
- cmp r0, 0x7F
- bne _08021EBE
- ldr r0, _08021F48 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _08021ECA
-_08021EBE:
- ldr r1, _08021F4C @ =gUnknown_02024C2C
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- strh r3, [r0]
-_08021ECA:
- ldr r0, _08021F50 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _08021F54 @ =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 _08021EE4
- b _08022244
-_08021EE4:
- ldr r0, _08021F58 @ =0x000160a6
- add r0, r12
- ldrb r0, [r0]
- ands r0, r3
- cmp r0, 0
- beq _08021EF2
- b _08022244
-_08021EF2:
- ldrh r2, [r7]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0]
- cmp r0, 0x7F
- bne _08021F04
- b _08022244
-_08021F04:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _08021F68
- ldr r1, _08021F5C @ =gLastUsedMove
- lsls r0, r4, 1
- adds r0, r1
- strh r2, [r0]
- ldr r0, _08021F60 @ =gUnknown_02024C4C
- mov r4, r9
- ldrb r1, [r4]
- lsls r1, 1
- adds r1, r0
- ldr r0, _08021F64 @ =gCurrentMove
- ldrh r0, [r0]
- strh r0, [r1]
- b _08021F82
- .align 2, 0
-_08021F2C: .4byte gHitMarker
-_08021F30: .4byte gBankAttacker
-_08021F34: .4byte gActiveBank
-_08021F38: .4byte gBankTarget
-_08021F3C: .4byte 0xffffefff
-_08021F40: .4byte gBattleMoves
-_08021F44: .4byte gUnknown_02024BE8
-_08021F48: .4byte gBattleMoveFlags
-_08021F4C: .4byte gUnknown_02024C2C
-_08021F50: .4byte gAbsentBankFlags
-_08021F54: .4byte gBitTable
-_08021F58: .4byte 0x000160a6
-_08021F5C: .4byte gLastUsedMove
-_08021F60: .4byte gUnknown_02024C4C
-_08021F64: .4byte gCurrentMove
-_08021F68:
- ldr r1, _08021FD0 @ =gLastUsedMove
- lsls r0, r4, 1
- adds r0, r1
- ldr r1, _08021FD4 @ =0x0000ffff
- strh r1, [r0]
- ldr r1, _08021FD8 @ =gUnknown_02024C4C
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- movs r1, 0x1
- negs r1, r1
- strh r1, [r0]
-_08021F82:
- ldr r2, _08021FDC @ =gBankTarget
- 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 _08021FA0
- ldr r0, _08021FE0 @ =gUnknown_02024C5C
- adds r0, r3, r0
- mov r3, r9
- ldrb r1, [r3]
- strb r1, [r0]
-_08021FA0:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _0802204C
- ldr r0, _08021FE4 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0802204C
- ldrh r2, [r7]
- ldr r0, _08021FD4 @ =0x0000ffff
- cmp r2, r0
- bne _08021FEC
- ldr r1, _08021FE8 @ =gMoveHitWith
- ldr r4, _08021FDC @ =gBankTarget
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- b _08022244
- .align 2, 0
-_08021FD0: .4byte gLastUsedMove
-_08021FD4: .4byte 0x0000ffff
-_08021FD8: .4byte gUnknown_02024C4C
-_08021FDC: .4byte gBankTarget
-_08021FE0: .4byte gUnknown_02024C5C
-_08021FE4: .4byte gBattleMoveFlags
-_08021FE8: .4byte gMoveHitWith
-_08021FEC:
- ldr r0, _08022014 @ =gMoveHitWith
- ldr r5, _08022018 @ =gBankTarget
- ldrb r1, [r5]
- lsls r1, 1
- adds r1, r0
- ldr r4, _0802201C @ =gCurrentMove
- ldrh r0, [r4]
- strh r0, [r1]
- ldr r0, _08022020 @ =0x0001601c
- add r0, r12
- ldrb r3, [r0]
- cmp r3, 0
- beq _08022028
- ldr r0, _08022024 @ =gUnknown_02024C44
- ldrb r1, [r5]
- lsls r1, 1
- adds r1, r0
- movs r0, 0x3F
- ands r0, r3
- b _08021C22
- .align 2, 0
-_08022014: .4byte gMoveHitWith
-_08022018: .4byte gBankTarget
-_0802201C: .4byte gCurrentMove
-_08022020: .4byte 0x0001601c
-_08022024: .4byte gUnknown_02024C44
-_08022028:
- ldr r0, _08022044 @ =gUnknown_02024C44
- ldr r1, _08022048 @ =gBankTarget
- ldrb r2, [r1]
- 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 _08022244
- .align 2, 0
-_08022044: .4byte gUnknown_02024C44
-_08022048: .4byte gBankTarget
-_0802204C:
- ldr r0, _0802205C @ =gMoveHitWith
- ldr r2, _08022060 @ =gBankTarget
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r0, _08022064 @ =0x0000ffff
- b _08021C22
- .align 2, 0
-_0802205C: .4byte gMoveHitWith
-_08022060: .4byte gBankTarget
-_08022064: .4byte 0x0000ffff
-_08022068:
- ldr r0, _0802212C @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r6, _08022130 @ =gBitTable
- ldr r2, _08022134 @ =gBankAttacker
- ldrb r5, [r2]
- lsls r0, r5, 2
- adds r0, r6
- ldr r4, [r0]
- ands r1, r4
- mov r9, r2
- cmp r1, 0
- beq _08022082
- b _08022244
-_08022082:
- ldr r0, _08022138 @ =0x000160a6
- add r0, r12
- ldrb r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _08022090
- b _08022244
-_08022090:
- ldr r1, _0802213C @ =gBattleMoves
- ldr r4, _08022140 @ =gUnknown_02024BE8
- ldrh r3, [r4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802215C
- ldr r0, _08022144 @ =gHitMarker
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 18
- ands r0, r1
- cmp r0, 0
- beq _0802215C
- ldr r2, _08022148 @ =gBankTarget
- ldrb r0, [r2]
- cmp r5, r0
- bne _080220C0
- b _08022244
-_080220C0:
- adds r2, r0, 0
- lsls r0, r2, 2
- adds r0, r6
- ldr r0, [r0]
- lsls r0, 28
- ands r1, r0
- cmp r1, 0
- bne _0802215C
- ldr r0, _0802214C @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0802215C
- lsls r0, r2, 1
- ldr r5, _08022150 @ =0x000160ac
- adds r0, r5
- add r0, r12
- strb r3, [r0]
- ldr r0, _08022148 @ =gBankTarget
- ldrb r1, [r0]
- lsls r1, 1
- ldr r2, _08022154 @ =0x000160ad
- adds r1, r2
- add r1, r12
- ldrh r0, [r4]
- lsrs r0, 8
- strb r0, [r1]
- ldr r3, _08022148 @ =gBankTarget
- ldrb r2, [r3]
- lsls r2, 2
- mov r5, r9
- ldrb r0, [r5]
- lsrs r0, 1
- lsls r0, 1
- ldr r1, _08022158 @ =0x00016100
- adds r0, r1
- adds r2, r0
- add r2, r12
- ldrh r0, [r4]
- strb r0, [r2]
- ldrb r2, [r3]
- lsls r2, 2
- ldrb r0, [r5]
- lsrs r0, 1
- lsls r0, 1
- adds r1, 0x1
- adds r0, r1
- adds r2, r0
- add r2, r12
- ldrh r0, [r4]
- lsrs r0, 8
- strb r0, [r2]
- b _08022244
- .align 2, 0
-_0802212C: .4byte gAbsentBankFlags
-_08022130: .4byte gBitTable
-_08022134: .4byte gBankAttacker
-_08022138: .4byte 0x000160a6
-_0802213C: .4byte gBattleMoves
-_08022140: .4byte gUnknown_02024BE8
-_08022144: .4byte gHitMarker
-_08022148: .4byte gBankTarget
-_0802214C: .4byte gBattleMoveFlags
-_08022150: .4byte 0x000160ac
-_08022154: .4byte 0x000160ad
-_08022158: .4byte 0x00016100
-_0802215C:
- mov r1, r9
- ldrb r0, [r1]
- ldr r2, _080221B4 @ =gBankTarget
- ldrb r2, [r2]
- cmp r0, r2
- beq _08022244
- ldr r3, _080221B4 @ =gBankTarget
- ldrb r0, [r3]
- lsls r0, 1
- ldr r4, _080221B8 @ =0x000160ac
- adds r0, r4
- add r0, r12
- movs r3, 0
- strb r3, [r0]
- ldr r5, _080221B4 @ =gBankTarget
- ldrb r0, [r5]
- lsls r0, 1
- ldr r1, _080221BC @ =0x000160ad
- adds r0, r1
- add r0, r12
- strb r3, [r0]
- ldrb r2, [r5]
- lsls r2, 2
- mov r4, r9
- ldrb r0, [r4]
- lsrs r0, 1
- lsls r0, 1
- adds r1, 0x53
- adds r0, r1
- adds r2, r0
- add r2, r12
- strb r3, [r2]
- ldrb r2, [r5]
- lsls r2, 2
- ldrb r0, [r4]
- lsrs r0, 1
- lsls r0, 1
- adds r1, 0x1
- adds r0, r1
- adds r2, r0
- add r2, r12
- strb r3, [r2]
- b _08022244
- .align 2, 0
-_080221B4: .4byte gBankTarget
-_080221B8: .4byte 0x000160ac
-_080221BC: .4byte 0x000160ad
-_080221C0:
- ldr r5, _080222B0 @ =gHitMarker
- ldr r2, [r5]
- movs r0, 0x80
- lsls r0, 12
- ands r0, r2
- cmp r0, 0
- bne _08022244
- ldr r0, _080222B4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08022244
- ldr r1, _080222B8 @ =gProtectStructs
- ldr r0, _080222BC @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x1]
- lsls r0, 29
- cmp r0, 0
- blt _08022244
- ldr r0, _080222C0 @ =gBattleMoves
- mov r9, r0
- ldr r1, _080222C4 @ =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 _08022244
- movs r6, 0x80
- lsls r6, 2
- adds r4, r6, 0
- ands r4, r2
- cmp r4, 0
- bne _08022244
- ldr r7, _080222C8 @ =gBankTarget
- ldrb r0, [r7]
- bl GetBankIdentity
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _080222CC @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0802223A
- bl _08021874
-_0802223A:
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- ldr r2, _080222D0 @ =0x02000000
- mov r12, r2
-_08022244:
- ldr r1, _080222D4 @ =0x0001600c
- add r1, r12
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0802224E:
- ldr r3, [sp, 0x10]
- cmp r3, 0x1
- bne _08022262
- mov r4, r10
- cmp r4, 0
- bne _08022262
- ldr r1, _080222D4 @ =0x0001600c
- add r1, r12
- movs r0, 0x11
- strb r0, [r1]
-_08022262:
- ldr r5, [sp, 0x10]
- cmp r5, 0x2
- bne _08022278
- ldr r1, _080222D4 @ =0x0001600c
- add r1, r12
- ldr r0, [sp, 0x14]
- ldrb r2, [r1]
- cmp r0, r2
- bne _08022278
- movs r0, 0x11
- strb r0, [r1]
-_08022278:
- ldr r0, _080222D4 @ =0x0001600c
- add r0, r12
- ldrb r0, [r0]
- cmp r0, 0x11
- beq _08022286
- bl _080218E4
-_08022286:
- ldr r0, _080222D4 @ =0x0001600c
- add r0, r12
- ldrb r0, [r0]
- cmp r0, 0x11
- bne _0802229E
- mov r3, r10
- cmp r3, 0
- bne _0802229E
- ldr r1, _080222D8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x3
-_0802229C:
- str r0, [r1]
-_0802229E:
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080222B0: .4byte gHitMarker
-_080222B4: .4byte gBattleTypeFlags
-_080222B8: .4byte gProtectStructs
-_080222BC: .4byte gBankAttacker
-_080222C0: .4byte gBattleMoves
-_080222C4: .4byte gCurrentMove
-_080222C8: .4byte gBankTarget
-_080222CC: .4byte gBattleMons
-_080222D0: .4byte 0x02000000
-_080222D4: .4byte 0x0001600c
-_080222D8: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_80217F8
-
- thumb_func_start atk4A_damageflags
-atk4A_damageflags: @ 80222DC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r4, 0
- movs r5, 0
- ldr r2, _08022340 @ =gBattleMoves
- ldr r0, _08022344 @ =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, _08022348 @ =gBattleMons
- ldr r3, _0802234C @ =gBankTarget
- 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 _08022370
- mov r1, r8
- cmp r1, 0x4
- bne _08022370
- ldr r3, _08022350 @ =gLastUsedAbility
- strb r0, [r3]
- ldr r2, _08022354 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x9
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08022358 @ =gMoveHitWith
- ldrb r0, [r7]
- lsls r0, 1
- adds r0, r1
- strh r4, [r0]
- ldr r0, _0802235C @ =gBattleCommunication
- mov r2, r8
- strb r2, [r0, 0x6]
- ldrb r0, [r7]
- ldrb r1, [r3]
- bl RecordAbilityBattle
- b _08022452
- .align 2, 0
-_08022340: .4byte gBattleMoves
-_08022344: .4byte gCurrentMove
-_08022348: .4byte gBattleMons
-_0802234C: .4byte gBankTarget
-_08022350: .4byte gLastUsedAbility
-_08022354: .4byte gBattleMoveFlags
-_08022358: .4byte gMoveHitWith
-_0802235C: .4byte gBattleCommunication
-_08022360:
- ldr r0, _0802236C @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0]
- b _08022452
- .align 2, 0
-_0802236C: .4byte gBattleMoveFlags
-_08022370:
- ldr r1, _0802237C @ =gTypeEffectiveness
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r6, r1, 0
- b _08022432
- .align 2, 0
-_0802237C: .4byte gTypeEffectiveness
-_08022380:
- adds r0, r5, r6
- ldrb r0, [r0]
- cmp r0, r8
- bne _0802242C
- 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 _080223BE
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r1, [r0]
- cmp r1, 0
- beq _08022360
- cmp r1, 0x5
- bne _080223B2
- movs r0, 0x4
- orrs r4, r0
-_080223B2:
- cmp r1, 0x14
- bne _080223BE
- movs r0, 0x2
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_080223BE:
- 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 _0802242C
- adds r0, 0x21
- ldrb r1, [r0]
- cmp r1, r2
- beq _080223E6
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0
- beq _08022360
-_080223E6:
- cmp r1, r2
- beq _080223FC
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0x5
- bne _080223FC
- movs r0, 0x4
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_080223FC:
- 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 _0802242C
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0802242C
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _0802242C
- movs r0, 0x2
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0802242C:
- adds r5, 0x3
- adds r0, r5, r6
- ldrb r0, [r0]
-_08022432:
- cmp r0, 0xFF
- beq _08022452
- cmp r0, 0xFE
- bne _08022380
- 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 _0802242C
-_08022452:
- ldr r2, _08022500 @ =gBattleMons
- ldr r0, _08022504 @ =gBankTarget
- 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 _080224CE
- movs r5, 0x29
- ands r5, r4
- cmp r5, 0
- bne _080224CE
- ldr r0, _08022508 @ =gBankAttacker
- ldrb r0, [r0]
- ldr r7, _0802250C @ =gCurrentMove
- ldrh r1, [r7]
- bl move_weather_interaction
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x2
- bne _080224CE
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08022494
- movs r0, 0x6
- ands r4, r0
- cmp r4, 0x6
- bne _080224CE
-_08022494:
- ldr r2, _08022510 @ =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 _080224CE
- ldr r3, _08022514 @ =gLastUsedAbility
- strb r6, [r3]
- ldr r2, _08022518 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802251C @ =gMoveHitWith
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- strh r5, [r0]
- ldr r1, _08022520 @ =gBattleCommunication
- movs r0, 0x3
- strb r0, [r1, 0x6]
- ldrb r0, [r2]
- ldrb r1, [r3]
- bl RecordAbilityBattle
-_080224CE:
- ldr r0, _08022518 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080224EC
- ldr r2, _08022524 @ =gProtectStructs
- ldr r0, _08022508 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 4
- adds r1, r2
- ldrb r0, [r1, 0x1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1, 0x1]
-_080224EC:
- ldr r1, _08022528 @ =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
-_08022500: .4byte gBattleMons
-_08022504: .4byte gBankTarget
-_08022508: .4byte gBankAttacker
-_0802250C: .4byte gCurrentMove
-_08022510: .4byte gBattleMoves
-_08022514: .4byte gLastUsedAbility
-_08022518: .4byte gBattleMoveFlags
-_0802251C: .4byte gMoveHitWith
-_08022520: .4byte gBattleCommunication
-_08022524: .4byte gProtectStructs
-_08022528: .4byte gBattlescriptCurrInstr
- thumb_func_end atk4A_damageflags
-
- thumb_func_start atk4B_cmd4b
-atk4B_cmd4b: @ 802252C
- push {r4,lr}
- ldr r4, _08022568 @ =gActiveBank
- ldr r0, _0802256C @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r2, _08022570 @ =gHitMarker
- ldr r1, _08022574 @ =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 _0802255A
- movs r0, 0
- movs r1, 0
- bl dp01_build_cmdbuf_x06_a
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_0802255A:
- ldr r1, _08022578 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022568: .4byte gActiveBank
-_0802256C: .4byte gBankAttacker
-_08022570: .4byte gHitMarker
-_08022574: .4byte gBitTable
-_08022578: .4byte gBattlescriptCurrInstr
- thumb_func_end atk4B_cmd4b
-
- thumb_func_start atk4C_switch1
-atk4C_switch1: @ 802257C
- push {r4-r6,lr}
- ldr r0, _080225D4 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _080225CC
- ldr r5, _080225D8 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _080225DC @ =gActiveBank
- strb r0, [r4]
- ldr r3, _080225E0 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r1, r0, 1
- adds r1, r3
- ldr r2, _080225E4 @ =0x02000000
- ldr r6, _080225E8 @ =0x00016068
- adds r0, r6
- adds r0, r2
- ldrb r0, [r0]
- strh r0, [r1]
- ldr r1, _080225EC @ =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 EmitGetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_080225CC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080225D4: .4byte gBattleExecBuffer
-_080225D8: .4byte gBattlescriptCurrInstr
-_080225DC: .4byte gActiveBank
-_080225E0: .4byte gBattlePartyID
-_080225E4: .4byte 0x02000000
-_080225E8: .4byte 0x00016068
-_080225EC: .4byte gBitTable
- thumb_func_end atk4C_switch1
-
- thumb_func_start sub_80225F0
-sub_80225F0: @ 80225F0
- push {r4-r7,lr}
- sub sp, 0x58
- ldr r0, _0802274C @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _080225FE
- b _08022744
-_080225FE:
- ldr r0, _08022750 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _08022754 @ =gActiveBank
- strb r0, [r4]
- ldr r6, _08022758 @ =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, _0802275C @ =gBattleBufferB
- adds r7, r4, 0
-_0802262C:
- 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 _0802262C
- ldr r4, _08022758 @ =gBattleMons
- ldrb r0, [r7]
- movs r6, 0x58
- adds r2, r0, 0
- muls r2, r6
- adds r2, r4
- ldr r3, _08022760 @ =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 GetBankSide
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08022764 @ =gWishFutureKnock
- adds r0, 0x29
- adds r0, r2, r0
- ldrb r1, [r0]
- ldr r3, _08022768 @ =gBitTable
- ldr r2, _0802276C @ =gBattlePartyID
- 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 _080226CA
- adds r0, r5, 0
- muls r0, r6
- add r0, r12
- movs r1, 0
- strh r1, [r0, 0x2E]
-_080226CA:
- ldr r2, _08022770 @ =gBattleMoves
- ldr r0, _08022774 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7F
- bne _08022710
- movs r2, 0
- adds r4, r7, 0
- movs r6, 0x58
- mov r5, r12
- adds r5, 0x18
- add r3, sp, 0x18
-_080226EA:
- 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 _080226EA
- 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]
-_08022710:
- bl SwitchInClearStructs
- ldr r0, _08022778 @ =0x02000000
- ldr r3, _08022754 @ =gActiveBank
- ldrb r2, [r3]
- ldr r1, _0802277C @ =0x00016003
- adds r0, r1
- strb r2, [r0]
- ldr r1, _08022780 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x7
- strb r0, [r1, 0x1]
- strb r2, [r1, 0x2]
- ldr r2, _0802276C @ =gBattlePartyID
- 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, _08022750 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_08022744:
- add sp, 0x58
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802274C: .4byte gBattleExecBuffer
-_08022750: .4byte gBattlescriptCurrInstr
-_08022754: .4byte gActiveBank
-_08022758: .4byte gBattleMons
-_0802275C: .4byte gBattleBufferB
-_08022760: .4byte gBaseStats
-_08022764: .4byte gWishFutureKnock
-_08022768: .4byte gBitTable
-_0802276C: .4byte gBattlePartyID
-_08022770: .4byte gBattleMoves
-_08022774: .4byte gCurrentMove
-_08022778: .4byte 0x02000000
-_0802277C: .4byte 0x00016003
-_08022780: .4byte gBattleTextBuff1
- thumb_func_end sub_80225F0
-
- thumb_func_start sub_8022784
-sub_8022784: @ 8022784
- push {r4,r5,lr}
- ldr r0, _0802280C @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _08022806
- ldr r0, _08022810 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _08022814 @ =gActiveBank
- strb r0, [r4]
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080227D0
- ldr r0, _08022818 @ =gBattleTypeFlags
- ldrh r1, [r0]
- ldr r0, _0802281C @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _080227D0
- ldr r2, _08022820 @ =gBattleMons
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetNationalPokedexFlag
-_080227D0:
- ldr r2, _08022824 @ =gAbsentBankFlags
- ldr r1, _08022828 @ =gBitTable
- ldr r5, _08022814 @ =gActiveBank
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- ldr r1, _0802282C @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrb r1, [r0]
- ldr r4, _08022810 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r2, [r0, 0x2]
- movs r0, 0
- bl sub_800C704
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
-_08022806:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802280C: .4byte gBattleExecBuffer
-_08022810: .4byte gBattlescriptCurrInstr
-_08022814: .4byte gActiveBank
-_08022818: .4byte gBattleTypeFlags
-_0802281C: .4byte 0x00000902
-_08022820: .4byte gBattleMons
-_08022824: .4byte gAbsentBankFlags
-_08022828: .4byte gBitTable
-_0802282C: .4byte gBattlePartyID
- thumb_func_end sub_8022784
-
- thumb_func_start sub_8022830
-sub_8022830: @ 8022830
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, _08022894 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- movs r0, 0x7F
- ands r0, r1
- bl sub_8015150
- ldr r3, _08022898 @ =gActiveBank
- strb r0, [r3]
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080228A8
- ldr r1, _0802289C @ =gBattleMons
- ldrb r3, [r3]
- movs r0, 0x58
- muls r0, r3
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080228A0 @ =0x0400e000
- ands r0, r1
- cmp r0, 0
- bne _0802287C
- ldr r1, _080228A4 @ =gStatuses3
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- beq _080228A8
-_0802287C:
- 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 _08022A2C
- .align 2, 0
-_08022894: .4byte gBattlescriptCurrInstr
-_08022898: .4byte gActiveBank
-_0802289C: .4byte gBattleMons
-_080228A0: .4byte 0x0400e000
-_080228A4: .4byte gStatuses3
-_080228A8:
- ldr r5, _08022934 @ =gBattleTypeFlags
- ldrh r1, [r5]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08022948
- ldr r4, _08022938 @ =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0802293C @ =gPlayerParty
- mov r8, r1
- cmp r0, 0x1
- bne _080228CC
- ldr r0, _08022940 @ =gEnemyParty
- mov r8, r0
-_080228CC:
- movs r5, 0
- ldrb r0, [r4]
- bl sub_803FC34
- lsls r0, 24
- lsrs r0, 24
- bl sub_803FBFC
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _080228E6
- movs r5, 0x3
-_080228E6:
- adds r6, r5, 0x3
- cmp r5, r6
- bge _0802292E
- ldr r7, _08022944 @ =gBattlePartyID
-_080228EE:
- 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 _08022928
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08022928
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08022928
- ldr r0, _08022938 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- cmp r0, r5
- bne _0802292E
-_08022928:
- adds r5, 0x1
- cmp r5, r6
- blt _080228EE
-_0802292E:
- cmp r5, r6
- beq _080229FC
- b _08022A24
- .align 2, 0
-_08022934: .4byte gBattleTypeFlags
-_08022938: .4byte gActiveBank
-_0802293C: .4byte gPlayerParty
-_08022940: .4byte gEnemyParty
-_08022944: .4byte gBattlePartyID
-_08022948:
- ldr r0, _08022978 @ =gActiveBank
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bne _08022988
- movs r0, 0x1
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r1, [r5]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _0802297C
- movs r0, 0x3
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r6, r0, 24
- b _0802297E
- .align 2, 0
-_08022978: .4byte gActiveBank
-_0802297C:
- adds r6, r7, 0
-_0802297E:
- ldr r0, _08022984 @ =gEnemyParty
- mov r8, r0
- b _080229AE
- .align 2, 0
-_08022984: .4byte gEnemyParty
-_08022988:
- movs r0, 0
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r1, [r5]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080229A8
- movs r0, 0x2
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r6, r0, 24
- b _080229AA
-_080229A8:
- adds r6, r7, 0
-_080229AA:
- ldr r1, _08022A18 @ =gPlayerParty
- mov r8, r1
-_080229AE:
- movs r5, 0
-_080229B0:
- 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 _080229F2
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _080229F2
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _080229F2
- ldr r1, _08022A1C @ =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r5, r0
- beq _080229F2
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r5, r0
- bne _080229F8
-_080229F2:
- adds r5, 0x1
- cmp r5, 0x5
- ble _080229B0
-_080229F8:
- cmp r5, 0x6
- bne _08022A24
-_080229FC:
- ldr r3, _08022A20 @ =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 _08022A2C
- .align 2, 0
-_08022A18: .4byte gPlayerParty
-_08022A1C: .4byte gBattlePartyID
-_08022A20: .4byte gBattlescriptCurrInstr
-_08022A24:
- ldr r1, _08022A38 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
-_08022A2C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08022A38: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8022830
-
- thumb_func_start sub_8022A3C
-sub_8022A3C: @ 8022A3C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r4, _08022A84 @ =0x02000000
- ldr r5, _08022A88 @ =gActiveBank
- ldrb r0, [r5]
- ldr r3, _08022A8C @ =0x00016064
- adds r1, r0, r3
- adds r1, r4
- ldr r3, _08022A90 @ =gBattlePartyID
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r1
- ldr r1, _08022A94 @ =0x0001606c
- adds r4, r1
- adds r0, r4
- str r0, [sp]
- movs r0, 0
- movs r1, 0x1
- movs r3, 0
- bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08022A84: .4byte 0x02000000
-_08022A88: .4byte gActiveBank
-_08022A8C: .4byte 0x00016064
-_08022A90: .4byte gBattlePartyID
-_08022A94: .4byte 0x0001606c
- thumb_func_end sub_8022A3C
-
- thumb_func_start atk50_openpartyscreen
-atk50_openpartyscreen: @ 8022A98
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r7, 0
- movs r0, 0
- mov r9, r0
- ldr r6, _08022B44 @ =gBattlescriptCurrInstr
- ldr r1, [r6]
- ldrb r2, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- orrs r2, r0
- mov r8, r2
- ldrb r2, [r1, 0x1]
- adds r0, r2, 0
- mov r12, r6
- cmp r0, 0x5
- beq _08022ACE
- b _08022F74
-_08022ACE:
- ldr r0, _08022B48 @ =gBattleTypeFlags
- ldrh r0, [r0]
- movs r1, 0x41
- ands r1, r0
- cmp r1, 0x1
- beq _08022BBC
- ldr r1, _08022B4C @ =gActiveBank
- strb r7, [r1]
- ldr r0, _08022B50 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r7, r0
- bcc _08022AE8
- b _08022F62
-_08022AE8:
- ldr r7, _08022B54 @ =gHitMarker
- ldr r6, _08022B58 @ =gBitTable
- adds r4, r1, 0
- ldr r0, _08022B5C @ =gAbsentBankFlags
- mov r8, r0
-_08022AF2:
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r7]
- ands r0, r1
- cmp r0, 0
- beq _08022B94
- adds r0, r2, 0
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8018018
- lsls r0, 24
- cmp r0, 0
- beq _08022B60
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- mov r2, r8
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r7]
- bics r0, r1
- str r0, [r7]
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08022BA2
- .align 2, 0
-_08022B44: .4byte gBattlescriptCurrInstr
-_08022B48: .4byte gBattleTypeFlags
-_08022B4C: .4byte gActiveBank
-_08022B50: .4byte gNoOfAllBanks
-_08022B54: .4byte gHitMarker
-_08022B58: .4byte gBitTable
-_08022B5C: .4byte gAbsentBankFlags
-_08022B60:
- ldr r5, _08022B90 @ =gSpecialStatuses
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08022BA2
- movs r0, 0x6
- bl sub_8022A3C
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _08022BA2
- .align 2, 0
-_08022B90: .4byte gSpecialStatuses
-_08022B94:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08022BA2:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _08022BB8 @ =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08022AF2
- b _08022F62
- .align 2, 0
-_08022BB8: .4byte gNoOfAllBanks
-_08022BBC:
- ands r1, r0
- cmp r1, 0
- bne _08022BC4
- b _08022F62
-_08022BC4:
- ldr r0, _08022C1C @ =gHitMarker
- mov r8, r0
- ldr r0, [r0]
- lsrs r5, r0, 28
- ldr r6, _08022C20 @ =gBitTable
- ldr r0, [r6]
- ands r0, r5
- cmp r0, 0
- beq _08022C7E
- ldr r4, _08022C24 @ =gActiveBank
- strb r7, [r4]
- movs r0, 0
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8018018
- lsls r0, 24
- cmp r0, 0
- beq _08022C2C
- ldr r2, _08022C28 @ =gAbsentBankFlags
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- mov r2, r8
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl dp01_build_cmdbuf_x2A_2A_2A_2A
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08022C7E
- .align 2, 0
-_08022C1C: .4byte gHitMarker
-_08022C20: .4byte gBitTable
-_08022C24: .4byte gActiveBank
-_08022C28: .4byte gAbsentBankFlags
-_08022C2C:
- ldr r6, _08022C60 @ =gSpecialStatuses
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08022C6C
- ldr r0, _08022C64 @ =0x02000000
- ldr r1, _08022C68 @ =0x0001606a
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8022A3C
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _08022C7E
- .align 2, 0
-_08022C60: .4byte gSpecialStatuses
-_08022C64: .4byte 0x02000000
-_08022C68: .4byte 0x0001606a
-_08022C6C:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- movs r2, 0x1
- mov r9, r2
-_08022C7E:
- ldr r6, _08022CD8 @ =gBitTable
- ldr r0, [r6, 0x8]
- ands r0, r5
- cmp r0, 0
- beq _08022D40
- ldr r0, [r6]
- ands r0, r5
- cmp r0, 0
- bne _08022D40
- ldr r4, _08022CDC @ =gActiveBank
- movs r0, 0x2
- strb r0, [r4]
- movs r0, 0x2
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8018018
- lsls r0, 24
- cmp r0, 0
- beq _08022CE8
- ldr r2, _08022CE0 @ =gAbsentBankFlags
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, _08022CE4 @ =gHitMarker
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl dp01_build_cmdbuf_x2A_2A_2A_2A
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08022D40
- .align 2, 0
-_08022CD8: .4byte gBitTable
-_08022CDC: .4byte gActiveBank
-_08022CE0: .4byte gAbsentBankFlags
-_08022CE4: .4byte gHitMarker
-_08022CE8:
- ldr r6, _08022D1C @ =gSpecialStatuses
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08022D28
- ldr r0, _08022D20 @ =0x02000000
- ldr r1, _08022D24 @ =0x00016068
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8022A3C
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _08022D40
- .align 2, 0
-_08022D1C: .4byte gSpecialStatuses
-_08022D20: .4byte 0x02000000
-_08022D24: .4byte 0x00016068
-_08022D28:
- movs r0, 0x1
- mov r2, r9
- ands r0, r2
- cmp r0, 0
- bne _08022D40
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08022D40:
- ldr r6, _08022D90 @ =gBitTable
- ldr r0, [r6, 0x4]
- ands r0, r5
- cmp r0, 0
- beq _08022DF6
- ldr r4, _08022D94 @ =gActiveBank
- movs r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8018018
- lsls r0, 24
- cmp r0, 0
- beq _08022DA0
- ldr r2, _08022D98 @ =gAbsentBankFlags
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, _08022D9C @ =gHitMarker
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl dp01_build_cmdbuf_x2A_2A_2A_2A
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08022DF6
- .align 2, 0
-_08022D90: .4byte gBitTable
-_08022D94: .4byte gActiveBank
-_08022D98: .4byte gAbsentBankFlags
-_08022D9C: .4byte gHitMarker
-_08022DA0:
- ldr r6, _08022DD4 @ =gSpecialStatuses
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08022DE0
- ldr r0, _08022DD8 @ =0x02000000
- ldr r1, _08022DDC @ =0x0001606b
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8022A3C
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _08022DF6
- .align 2, 0
-_08022DD4: .4byte gSpecialStatuses
-_08022DD8: .4byte 0x02000000
-_08022DDC: .4byte 0x0001606b
-_08022DE0:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- movs r0, 0x2
- mov r2, r9
- orrs r2, r0
- mov r9, r2
-_08022DF6:
- ldr r6, _08022E50 @ =gBitTable
- ldr r0, [r6, 0xC]
- ands r0, r5
- cmp r0, 0
- beq _08022EB8
- ldr r0, [r6, 0x4]
- ands r0, r5
- cmp r0, 0
- bne _08022EB8
- ldr r4, _08022E54 @ =gActiveBank
- movs r0, 0x3
- strb r0, [r4]
- movs r0, 0x3
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8018018
- lsls r0, 24
- cmp r0, 0
- beq _08022E60
- ldr r2, _08022E58 @ =gAbsentBankFlags
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, _08022E5C @ =gHitMarker
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl dp01_build_cmdbuf_x2A_2A_2A_2A
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08022EB8
- .align 2, 0
-_08022E50: .4byte gBitTable
-_08022E54: .4byte gActiveBank
-_08022E58: .4byte gAbsentBankFlags
-_08022E5C: .4byte gHitMarker
-_08022E60:
- ldr r6, _08022E94 @ =gSpecialStatuses
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08022EA0
- ldr r0, _08022E98 @ =0x02000000
- ldr r1, _08022E9C @ =0x00016069
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8022A3C
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _08022EB8
- .align 2, 0
-_08022E94: .4byte gSpecialStatuses
-_08022E98: .4byte 0x02000000
-_08022E9C: .4byte 0x00016069
-_08022EA0:
- movs r0, 0x2
- mov r2, r9
- ands r2, r0
- cmp r2, 0
- bne _08022EB8
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08022EB8:
- ldr r1, _08022EE8 @ =gSpecialStatuses
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08022F0C
- adds r0, r1, 0
- adds r0, 0x28
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- blt _08022F0C
- cmp r5, 0
- beq _08022F0C
- ldr r0, _08022EEC @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r0, _08022EF0 @ =gBitTable
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08022EF8
- ldr r1, _08022EF4 @ =gActiveBank
- movs r0, 0x2
- strb r0, [r1]
- b _08022EFC
- .align 2, 0
-_08022EE8: .4byte gSpecialStatuses
-_08022EEC: .4byte gAbsentBankFlags
-_08022EF0: .4byte gBitTable
-_08022EF4: .4byte gActiveBank
-_08022EF8:
- ldr r0, _08022F3C @ =gActiveBank
- strb r1, [r0]
-_08022EFC:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldr r0, _08022F3C @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
-_08022F0C:
- ldr r1, _08022F40 @ =gSpecialStatuses
- ldrb r0, [r1, 0x14]
- lsls r0, 25
- cmp r0, 0
- blt _08022F62
- adds r0, r1, 0
- adds r0, 0x3C
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- blt _08022F62
- cmp r5, 0
- beq _08022F62
- ldr r0, _08022F44 @ =gAbsentBankFlags
- ldrb r0, [r0]
- ldr r1, _08022F48 @ =gBitTable
- ldr r1, [r1, 0x4]
- ands r0, r1
- cmp r0, 0
- beq _08022F4C
- ldr r1, _08022F3C @ =gActiveBank
- movs r0, 0x3
- b _08022F50
- .align 2, 0
-_08022F3C: .4byte gActiveBank
-_08022F40: .4byte gSpecialStatuses
-_08022F44: .4byte gAbsentBankFlags
-_08022F48: .4byte gBitTable
-_08022F4C:
- ldr r1, _08022F6C @ =gActiveBank
- movs r0, 0x1
-_08022F50:
- strb r0, [r1]
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldr r0, _08022F6C @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
-_08022F62:
- ldr r1, _08022F70 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
- b _08023302
- .align 2, 0
-_08022F6C: .4byte gActiveBank
-_08022F70: .4byte gBattlescriptCurrInstr
-_08022F74:
- cmp r0, 0x6
- beq _08022F7A
- b _08023170
-_08022F7A:
- ldr r0, _08022FF0 @ =gBattleTypeFlags
- ldrh r2, [r0]
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- beq _08022F88
- b _0802310C
-_08022F88:
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _08022F92
- b _0802310C
-_08022F92:
- ldr r7, _08022FF4 @ =gHitMarker
- ldr r0, [r7]
- lsrs r5, r0, 28
- ldr r4, _08022FF8 @ =gBitTable
- ldr r0, [r4, 0x8]
- ands r0, r5
- cmp r0, 0
- beq _0802303A
- ldr r0, [r4]
- ands r0, r5
- cmp r0, 0
- beq _0802303A
- ldr r6, _08022FFC @ =gActiveBank
- movs r0, 0x2
- strb r0, [r6]
- ldr r0, _08023000 @ =gBattleBufferB
- ldrb r1, [r0, 0x1]
- movs r0, 0x2
- movs r2, 0x6
- bl sub_8018018
- lsls r0, 24
- cmp r0, 0
- beq _08023008
- ldr r2, _08023004 @ =gAbsentBankFlags
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r4
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r7]
- bics r0, r1
- str r0, [r7]
- movs r0, 0
- bl dp01_build_cmdbuf_x2A_2A_2A_2A
- ldrb r0, [r6]
- bl MarkBufferBankForExecution
- b _0802303A
- .align 2, 0
-_08022FF0: .4byte gBattleTypeFlags
-_08022FF4: .4byte gHitMarker
-_08022FF8: .4byte gBitTable
-_08022FFC: .4byte gActiveBank
-_08023000: .4byte gBattleBufferB
-_08023004: .4byte gAbsentBankFlags
-_08023008:
- ldr r4, _08023098 @ =gSpecialStatuses
- ldrb r0, [r6]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _0802303A
- ldr r0, _0802309C @ =0x02000000
- ldr r1, _080230A0 @ =0x00016068
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8022A3C
- ldrb r1, [r6]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
-_0802303A:
- ldr r4, _080230A4 @ =gBitTable
- ldr r0, [r4, 0xC]
- ands r0, r5
- cmp r0, 0
- beq _080230EE
- ldr r0, [r4, 0x4]
- ands r5, r0
- cmp r5, 0
- beq _080230EE
- ldr r5, _080230A8 @ =gActiveBank
- movs r0, 0x3
- strb r0, [r5]
- ldr r0, _080230AC @ =gBattleBufferB
- ldr r2, _080230B0 @ =0x00000201
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x3
- movs r2, 0x6
- bl sub_8018018
- lsls r0, 24
- cmp r0, 0
- beq _080230BC
- ldr r2, _080230B4 @ =gAbsentBankFlags
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, _080230B8 @ =gHitMarker
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r4
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl dp01_build_cmdbuf_x2A_2A_2A_2A
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- b _080230EE
- .align 2, 0
-_08023098: .4byte gSpecialStatuses
-_0802309C: .4byte 0x02000000
-_080230A0: .4byte 0x00016068
-_080230A4: .4byte gBitTable
-_080230A8: .4byte gActiveBank
-_080230AC: .4byte gBattleBufferB
-_080230B0: .4byte 0x00000201
-_080230B4: .4byte gAbsentBankFlags
-_080230B8: .4byte gHitMarker
-_080230BC:
- ldr r4, _080230FC @ =gSpecialStatuses
- ldrb r0, [r5]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _080230EE
- ldr r0, _08023100 @ =0x02000000
- ldr r1, _08023104 @ =0x00016069
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8022A3C
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
-_080230EE:
- ldr r1, _08023108 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
- mov r12, r1
- b _08023110
- .align 2, 0
-_080230FC: .4byte gSpecialStatuses
-_08023100: .4byte 0x02000000
-_08023104: .4byte 0x00016069
-_08023108: .4byte gBattlescriptCurrInstr
-_0802310C:
- adds r0, r1, 0x6
- str r0, [r6]
-_08023110:
- ldr r0, _08023160 @ =gHitMarker
- ldr r0, [r0]
- lsrs r5, r0, 28
- ldr r1, _08023164 @ =gBank1
- movs r0, 0
- strb r0, [r1]
- ldr r4, _08023168 @ =gBitTable
- ldr r2, [r4]
- ands r2, r5
- ldr r6, _0802316C @ =gNoOfAllBanks
- cmp r2, 0
- bne _0802314C
- adds r7, r6, 0
- ldrb r0, [r6]
- cmp r2, r0
- bcs _0802314C
- adds r3, r1, 0
-_08023132:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- ldrb r2, [r3]
- lsls r0, r2, 2
- adds r0, r4
- ldr r0, [r0]
- ands r0, r5
- cmp r0, 0
- bne _0802314C
- ldrb r0, [r7]
- cmp r2, r0
- bcc _08023132
-_0802314C:
- ldrb r0, [r1]
- ldrb r6, [r6]
- cmp r0, r6
- beq _08023156
- b _08023302
-_08023156:
- mov r1, r8
- mov r2, r12
- str r1, [r2]
- b _08023302
- .align 2, 0
-_08023160: .4byte gHitMarker
-_08023164: .4byte gBank1
-_08023168: .4byte gBitTable
-_0802316C: .4byte gNoOfAllBanks
-_08023170:
- movs r0, 0x80
- ands r0, r2
- movs r5, 0x1
- cmp r0, 0
- beq _0802317C
- movs r5, 0
-_0802317C:
- movs r0, 0x7F
- ands r0, r2
- bl sub_8015150
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, _080231A4 @ =gSpecialStatuses
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- bge _080231A8
- ldr r0, [r6]
- adds r0, 0x6
- str r0, [r6]
- b _08023302
- .align 2, 0
-_080231A4: .4byte gSpecialStatuses
-_080231A8:
- adds r0, r7, 0
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8018018
- lsls r0, 24
- cmp r0, 0
- beq _080231F8
- ldr r2, _080231E8 @ =gActiveBank
- strb r7, [r2]
- ldr r3, _080231EC @ =gAbsentBankFlags
- ldr r4, _080231F0 @ =gBitTable
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- ldrb r1, [r3]
- orrs r0, r1
- strb r0, [r3]
- ldr r3, _080231F4 @ =gHitMarker
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r4
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r3]
- bics r0, r1
- str r0, [r3]
- mov r0, r8
- str r0, [r6]
- b _08023302
- .align 2, 0
-_080231E8: .4byte gActiveBank
-_080231EC: .4byte gAbsentBankFlags
-_080231F0: .4byte gBitTable
-_080231F4: .4byte gHitMarker
-_080231F8:
- ldr r4, _080232A0 @ =gActiveBank
- strb r7, [r4]
- ldr r3, _080232A4 @ =0x02000000
- ldrb r0, [r4]
- ldr r2, _080232A8 @ =0x00016064
- adds r1, r0, r2
- adds r1, r3
- ldr r2, _080232AC @ =gBattlePartyID
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r1, [r4]
- movs r0, 0x2
- eors r0, r1
- ldr r1, _080232B0 @ =0x00016068
- adds r0, r1
- adds r0, r3
- ldrb r2, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- ldr r1, _080232B4 @ =0x0001606c
- adds r3, r1
- adds r0, r3
- str r0, [sp]
- movs r0, 0
- adds r1, r5, 0
- movs r3, 0
- bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r6]
- adds r0, 0x6
- str r0, [r6]
- ldrb r0, [r4]
- bl GetBankIdentity
- lsls r0, 24
- cmp r0, 0
- bne _0802325A
- ldr r1, _080232B8 @ =gBattleResults
- ldrb r0, [r1, 0x2]
- cmp r0, 0xFE
- bhi _0802325A
- adds r0, 0x1
- strb r0, [r1, 0x2]
-_0802325A:
- ldr r0, _080232BC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080232C4
- ldr r1, _080232A0 @ =gActiveBank
- movs r0, 0
- strb r0, [r1]
- ldr r0, _080232C0 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r0, 0
- beq _08023302
- adds r4, r1, 0
-_08023276:
- ldrb r0, [r4]
- cmp r0, r7
- beq _0802328A
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_0802328A:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _080232C0 @ =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08023276
- b _08023302
- .align 2, 0
-_080232A0: .4byte gActiveBank
-_080232A4: .4byte 0x02000000
-_080232A8: .4byte 0x00016064
-_080232AC: .4byte gBattlePartyID
-_080232B0: .4byte 0x00016068
-_080232B4: .4byte 0x0001606c
-_080232B8: .4byte gBattleResults
-_080232BC: .4byte gBattleTypeFlags
-_080232C0: .4byte gNoOfAllBanks
-_080232C4:
- adds r0, r7, 0
- bl GetBankIdentity
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- ldr r4, _08023310 @ =gActiveBank
- strb r0, [r4]
- ldr r0, _08023314 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _08023318 @ =gBitTable
- ldrb r3, [r4]
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _080232F4
- movs r0, 0x2
- eors r3, r0
- strb r3, [r4]
-_080232F4:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08023302:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08023310: .4byte gActiveBank
-_08023314: .4byte gAbsentBankFlags
-_08023318: .4byte gBitTable
- thumb_func_end atk50_openpartyscreen
-
- thumb_func_start sub_802331C
-sub_802331C: @ 802331C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _0802334C @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _0802332C
- b _080234FE
-_0802332C:
- ldr r4, _08023350 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r7, _08023354 @ =gActiveBank
- strb r0, [r7]
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- cmp r0, 0x1
- beq _080233A0
- cmp r0, 0x1
- bgt _08023358
- cmp r0, 0
- beq _0802335E
- b _080234F6
- .align 2, 0
-_0802334C: .4byte gBattleExecBuffer
-_08023350: .4byte gBattlescriptCurrInstr
-_08023354: .4byte gActiveBank
-_08023358:
- cmp r0, 0x2
- beq _080233BC
- b _080234F6
-_0802335E:
- movs r3, 0
- ldr r2, _08023390 @ =gNoOfAllBanks
- ldrb r0, [r2]
- cmp r3, r0
- blt _0802336A
- b _080234F6
-_0802336A:
- ldr r0, _08023394 @ =0x02000000
- ldr r1, _08023398 @ =gBattleBufferB
- movs r5, 0x80
- lsls r5, 2
- adds r4, r2, 0
- ldr r6, _0802339C @ =0x00016068
- adds r2, r0, r6
-_08023378:
- ldrb r0, [r1]
- cmp r0, 0x22
- bne _08023382
- ldrb r0, [r1, 0x1]
- strb r0, [r2]
-_08023382:
- adds r1, r5
- adds r2, 0x1
- adds r3, 0x1
- ldrb r0, [r4]
- cmp r3, r0
- blt _08023378
- b _080234F6
- .align 2, 0
-_08023390: .4byte gNoOfAllBanks
-_08023394: .4byte 0x02000000
-_08023398: .4byte gBattleBufferB
-_0802339C: .4byte 0x00016068
-_080233A0:
- ldr r0, _080233B8 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080233AE
- b _080234F6
-_080233AE:
- ldrb r0, [r7]
- bl sub_8012258
- b _080234F6
- .align 2, 0
-_080233B8: .4byte gBattleTypeFlags
-_080233BC:
- ldr r1, _08023484 @ =gBattleCommunication
- ldr r4, _08023488 @ =gBattleBufferB
- ldrb r0, [r7]
- lsls r0, 9
- adds r2, r4, 0x1
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r6, _0802348C @ =0x02000000
- ldrb r0, [r7]
- ldr r3, _08023490 @ =0x00016068
- adds r1, r0, r3
- adds r1, r6
- lsls r0, 9
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _08023494 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080234A4
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- ldr r5, _08023498 @ =0x0001606c
- adds r1, r5
- adds r1, r6
- ldrb r2, [r1]
- movs r0, 0xF
- ands r0, r2
- strb r0, [r1]
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- adds r1, r5
- adds r1, r6
- lsls r0, 9
- adds r2, r4, 0x2
- mov r12, r2
- add r0, r12
- ldrb r2, [r0]
- movs r3, 0xF0
- adds r0, r3, 0
- ands r0, r2
- ldrb r2, [r1]
- orrs r0, r2
- strb r0, [r1]
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- ldr r2, _0802349C @ =0x0001606d
- adds r1, r2
- adds r1, r6
- lsls r0, 9
- adds r4, 0x3
- mov r8, r4
- add r0, r8
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r4, 0x2
- eors r0, r4
- lsls r1, r0, 1
- adds r1, r0
- adds r1, r5
- adds r1, r6
- ldrb r2, [r1]
- adds r0, r3, 0
- ands r0, r2
- strb r0, [r1]
- ldrb r0, [r7]
- eors r0, r4
- lsls r1, r0, 1
- adds r1, r0
- adds r1, r5
- adds r1, r6
- ldrb r0, [r7]
- lsls r0, 9
- add r0, r12
- ldrb r0, [r0]
- ands r3, r0
- lsrs r3, 4
- ldrb r0, [r1]
- orrs r3, r0
- strb r3, [r1]
- ldrb r0, [r7]
- eors r4, r0
- lsls r1, r4, 1
- adds r1, r4
- ldr r3, _080234A0 @ =0x0001606e
- adds r1, r3
- adds r1, r6
- ldrb r0, [r7]
- lsls r0, 9
- add r0, r8
- ldrb r0, [r0]
- strb r0, [r1]
- b _080234AA
- .align 2, 0
-_08023484: .4byte gBattleCommunication
-_08023488: .4byte gBattleBufferB
-_0802348C: .4byte 0x02000000
-_08023490: .4byte 0x00016068
-_08023494: .4byte gBattleTypeFlags
-_08023498: .4byte 0x0001606c
-_0802349C: .4byte 0x0001606d
-_080234A0: .4byte 0x0001606e
-_080234A4:
- ldrb r0, [r7]
- bl sub_8012258
-_080234AA:
- ldr r1, _08023508 @ =gBattleTextBuff1
- movs r5, 0xFD
- strb r5, [r1]
- movs r0, 0x6
- strb r0, [r1, 0x1]
- ldr r4, _0802350C @ =gBattleMons
- ldr r3, _08023510 @ =gBankAttacker
- ldrb r0, [r3]
- movs r2, 0x58
- muls r0, r2
- adds r0, r4
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r3]
- muls r0, r2
- adds r0, r4
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r2, _08023514 @ =gBattleTextBuff2
- strb r5, [r2]
- movs r0, 0x7
- strb r0, [r2, 0x1]
- ldr r3, _08023518 @ =gActiveBank
- ldrb r0, [r3]
- strb r0, [r2, 0x2]
- ldr r1, _0802351C @ =gBattleBufferB
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2, 0x3]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r2, 0x4]
-_080234F6:
- ldr r1, _08023520 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x3
- str r0, [r1]
-_080234FE:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08023508: .4byte gBattleTextBuff1
-_0802350C: .4byte gBattleMons
-_08023510: .4byte gBankAttacker
-_08023514: .4byte gBattleTextBuff2
-_08023518: .4byte gActiveBank
-_0802351C: .4byte gBattleBufferB
-_08023520: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802331C
-
- thumb_func_start sub_8023524
-sub_8023524: @ 8023524
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- ldr r6, _08023630 @ =gBattlescriptCurrInstr
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _08023634 @ =gActiveBank
- strb r0, [r4]
- ldrb r0, [r4]
- bl sub_80157C4
- ldr r2, _08023638 @ =gHitMarker
- ldr r1, _0802363C @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- ldr r2, _08023640 @ =gSpecialStatuses
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1]
- movs r0, 0x41
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- bl GetBankSide
- ldr r5, _08023644 @ =gSideAffecting
- lsls r0, 24
- lsrs r0, 23
- adds r0, r5
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 2
- mov r8, r0
- ands r0, r1
- cmp r0, 0
- bne _0802367C
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 23
- adds r0, r5
- ldrh r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802367C
- ldr r1, _08023648 @ =gBattleMons
- mov r9, r1
- ldrb r2, [r4]
- movs r7, 0x58
- adds r0, r2, 0
- muls r0, r7
- adds r1, r0, r1
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _0802367C
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _0802367C
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1A
- beq _0802367C
- adds r0, r2, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 23
- adds r0, r5
- ldrh r2, [r0]
- mov r1, r8
- orrs r1, r2
- strh r1, [r0]
- ldrb r0, [r4]
- bl GetBankSide
- ldr r2, _0802364C @ =gSideTimer
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x6]
- movs r1, 0x5
- subs r1, r0
- lsls r1, 25
- lsrs r1, 24
- ldr r5, _08023650 @ =gBattleMoveDamage
- ldrb r0, [r4]
- muls r0, r7
- add r0, r9
- ldrh r0, [r0, 0x2C]
- bl __divsi3
- str r0, [r5]
- cmp r0, 0
- bne _08023614
- movs r0, 0x1
- str r0, [r5]
-_08023614:
- ldr r0, _08023654 @ =0x02000000
- ldrb r1, [r4]
- ldr r2, _08023658 @ =0x00016003
- adds r0, r2
- strb r1, [r0]
- bl b_movescr_stack_push_cursor
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _08023660
- ldr r0, _0802365C @ =gUnknown_081D919F
- str r0, [r6]
- b _080237B6
- .align 2, 0
-_08023630: .4byte gBattlescriptCurrInstr
-_08023634: .4byte gActiveBank
-_08023638: .4byte gHitMarker
-_0802363C: .4byte gBitTable
-_08023640: .4byte gSpecialStatuses
-_08023644: .4byte gSideAffecting
-_08023648: .4byte gBattleMons
-_0802364C: .4byte gSideTimer
-_08023650: .4byte gBattleMoveDamage
-_08023654: .4byte 0x02000000
-_08023658: .4byte 0x00016003
-_0802365C: .4byte gUnknown_081D919F
-_08023660:
- cmp r0, 0x1
- bne _08023670
- ldr r0, _0802366C @ =gUnknown_081D9171
- str r0, [r6]
- b _080237B6
- .align 2, 0
-_0802366C: .4byte gUnknown_081D9171
-_08023670:
- ldr r0, _08023678 @ =gUnknown_081D91CD
- str r0, [r6]
- b _080237B6
- .align 2, 0
-_08023678: .4byte gUnknown_081D91CD
-_0802367C:
- ldr r1, _08023754 @ =gBattleMons
- ldr r5, _08023758 @ =gActiveBank
- ldrb r2, [r5]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x36
- bne _080236A2
- ldr r1, _0802375C @ =gDisableStructs
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x18]
-_080236A2:
- ldrb r1, [r5]
- movs r0, 0
- str r0, [sp]
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _080236B8
- b _080237B6
-_080236B8:
- ldrb r1, [r5]
- movs r0, 0
- movs r2, 0
- bl sub_801A02C
- lsls r0, 24
- cmp r0, 0
- bne _080237B6
- ldrb r0, [r5]
- bl GetBankSide
- ldr r1, _08023760 @ =gSideAffecting
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r2, [r0]
- ldr r1, _08023764 @ =0x0000fdff
- ands r1, r2
- strh r1, [r0]
- movs r4, 0
- ldr r0, _08023768 @ =gNoOfAllBanks
- ldrb r3, [r0]
- cmp r4, r3
- bge _08023706
- ldr r6, _0802376C @ =gTurnOrder
- ldr r3, _08023770 @ =gUnknown_02024A76
- movs r2, 0xC
- adds r1, r0, 0
-_080236F0:
- adds r0, r4, r6
- ldrb r0, [r0]
- ldrb r7, [r5]
- cmp r0, r7
- bne _080236FE
- adds r0, r4, r3
- strb r2, [r0]
-_080236FE:
- adds r4, 0x1
- ldrb r0, [r1]
- cmp r4, r0
- blt _080236F0
-_08023706:
- movs r4, 0
- ldr r0, _08023768 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- bge _08023736
- ldr r5, _08023754 @ =gBattleMons
-_08023712:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 23
- ldr r1, _08023774 @ =0x020160bc
- adds r0, r1
- movs r1, 0x58
- muls r1, r4
- adds r1, r5
- ldrh r1, [r1, 0x28]
- strh r1, [r0]
- adds r4, 0x1
- ldr r0, _08023768 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08023712
-_08023736:
- ldr r0, _08023778 @ =gBattlescriptCurrInstr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r5, r0, 0
- cmp r1, 0x5
- bne _080237B0
- ldr r0, _0802377C @ =gHitMarker
- ldr r0, [r0]
- lsrs r4, r0, 28
- ldr r1, _08023780 @ =gBank1
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r2, _08023784 @ =gBitTable
- b _08023796
- .align 2, 0
-_08023754: .4byte gBattleMons
-_08023758: .4byte gActiveBank
-_0802375C: .4byte gDisableStructs
-_08023760: .4byte gSideAffecting
-_08023764: .4byte 0x0000fdff
-_08023768: .4byte gNoOfAllBanks
-_0802376C: .4byte gTurnOrder
-_08023770: .4byte gUnknown_02024A76
-_08023774: .4byte 0x020160bc
-_08023778: .4byte gBattlescriptCurrInstr
-_0802377C: .4byte gHitMarker
-_08023780: .4byte gBank1
-_08023784: .4byte gBitTable
-_08023788:
- ldr r0, _080237C4 @ =gNoOfAllBanks
- ldrb r3, [r1]
- ldrb r0, [r0]
- cmp r3, r0
- bcs _080237B0
- adds r0, r3, 0x1
- strb r0, [r1]
-_08023796:
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r3, [r0]
- adds r0, r4, 0
- ands r0, r3
- cmp r0, 0
- beq _08023788
- ldr r0, _080237C8 @ =gAbsentBankFlags
- ldrb r0, [r0]
- ands r0, r3
- cmp r0, 0
- bne _08023788
-_080237B0:
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_080237B6:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080237C4: .4byte gNoOfAllBanks
-_080237C8: .4byte gAbsentBankFlags
- thumb_func_end sub_8023524
-
- thumb_func_start sub_80237CC
-sub_80237CC: @ 80237CC
- push {lr}
- ldr r0, _080237DC @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _080237E0
- movs r0, 0
- b _080237E2
- .align 2, 0
-_080237DC: .4byte gBattlescriptCurrInstr
-_080237E0:
- movs r0, 0x1
-_080237E2:
- bl GetBankByPlayerAI
- ldr r1, _08023804 @ =gActiveBank
- strb r0, [r1]
- movs r0, 0
- bl dp01_build_cmdbuf_x08_8_8_8
- ldr r0, _08023804 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _08023808 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08023804: .4byte gActiveBank
-_08023808: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_80237CC
-
- thumb_func_start atk54_802511C
-atk54_802511C: @ 802380C
- push {r4,r5,lr}
- ldr r5, _0802383C @ =gActiveBank
- ldr r0, _08023840 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r5]
- ldr r4, _08023844 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0
- bl EmitEffectivenessSound
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802383C: .4byte gActiveBank
-_08023840: .4byte gBankAttacker
-_08023844: .4byte gBattlescriptCurrInstr
- thumb_func_end atk54_802511C
-
- thumb_func_start sub_8023848
-sub_8023848: @ 8023848
- push {r4,r5,lr}
- ldr r5, _08023878 @ =gActiveBank
- ldr r0, _0802387C @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r5]
- ldr r4, _08023880 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0
- bl sub_800D074
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08023878: .4byte gActiveBank
-_0802387C: .4byte gBankAttacker
-_08023880: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8023848
-
- thumb_func_start atk56_8025194
-atk56_8025194: @ 8023884
- push {r4,r5,lr}
- ldr r5, _080238AC @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _080238B0 @ =gActiveBank
- strb r0, [r4]
- movs r0, 0
- bl EmitFaintingCry
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080238AC: .4byte gBattlescriptCurrInstr
-_080238B0: .4byte gActiveBank
- thumb_func_end atk56_8025194
-
- thumb_func_start atk57_80251C4_flee
-atk57_80251C4_flee: @ 80238B4
- push {r4,lr}
- movs r0, 0
- bl GetBankByPlayerAI
- ldr r4, _080238E0 @ =gActiveBank
- strb r0, [r4]
- ldr r0, _080238E4 @ =gBattleOutcome
- ldrb r1, [r0]
- movs r0, 0
- bl dp01_build_cmdbuf_x37_a
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _080238E8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080238E0: .4byte gActiveBank
-_080238E4: .4byte gBattleOutcome
-_080238E8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk57_80251C4_flee
-
- thumb_func_start atk58_cmd58
-atk58_cmd58: @ 80238EC
- push {r4,r5,lr}
- ldr r5, _08023918 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _0802391C @ =gActiveBank
- strb r0, [r4]
- movs r0, 0
- movs r1, 0x1
- bl dp01_build_cmdbuf_x06_a
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08023918: .4byte gBattlescriptCurrInstr
-_0802391C: .4byte gActiveBank
- thumb_func_end atk58_cmd58
-
- thumb_func_start atk59_8025230
-atk59_8025230: @ 8023920
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _0802399C @ =gBattlescriptCurrInstr
- ldr r2, [r0]
- ldrb r6, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r6, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r6, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r6, r0
- ldrb r4, [r2, 0x5]
- ldrb r0, [r2, 0x6]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 24
- orrs r4, r0
- ldr r0, _080239A0 @ =0x02000000
- ldr r1, _080239A4 @ =0x00016018
- adds r7, r0, r1
- ldrb r1, [r7]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080239A8 @ =gPlayerParty
- adds r0, r1
- ldrb r1, [r2, 0x9]
- bl sub_803B7C8
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _080239AC @ =0x0000fffe
- cmp r5, r0
- bne _08023992
- mov r9, r7
- mov r8, r5
- movs r7, 0x64
-_0802397A:
- mov r3, r9
- ldrb r0, [r3]
- muls r0, r7
- ldr r1, _080239A8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0
- bl sub_803B7C8
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r8
- beq _0802397A
-_08023992:
- cmp r5, 0
- bne _080239B0
- ldr r0, _0802399C @ =gBattlescriptCurrInstr
- str r4, [r0]
- b _08023A58
- .align 2, 0
-_0802399C: .4byte gBattlescriptCurrInstr
-_080239A0: .4byte 0x02000000
-_080239A4: .4byte 0x00016018
-_080239A8: .4byte gPlayerParty
-_080239AC: .4byte 0x0000fffe
-_080239B0:
- ldr r0, _080239C0 @ =0x0000ffff
- cmp r5, r0
- bne _080239C8
- ldr r1, _080239C4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
- b _08023A58
- .align 2, 0
-_080239C0: .4byte 0x0000ffff
-_080239C4: .4byte gBattlescriptCurrInstr
-_080239C8:
- movs r0, 0
- bl GetBankByPlayerAI
- ldr r1, _08023A64 @ =gActiveBank
- strb r0, [r1]
- ldr r0, _08023A68 @ =gBattlePartyID
- ldrb r2, [r1]
- lsls r1, r2, 1
- adds r1, r0
- ldr r0, _08023A6C @ =0x02000000
- ldr r3, _08023A70 @ =0x00016018
- adds r0, r3
- ldrh r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bne _08023A08
- ldr r3, _08023A74 @ =gBattleMons
- movs r0, 0x58
- muls r2, r0
- adds r0, r3, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _08023A08
- adds r0, r2, r3
- adds r1, r5, 0
- bl GiveMoveToBattleMon
-_08023A08:
- ldr r0, _08023A78 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08023A54
- movs r0, 0x2
- bl GetBankByPlayerAI
- ldr r1, _08023A64 @ =gActiveBank
- strb r0, [r1]
- ldr r0, _08023A68 @ =gBattlePartyID
- ldrb r2, [r1]
- lsls r1, r2, 1
- adds r1, r0
- ldr r0, _08023A6C @ =0x02000000
- ldr r3, _08023A70 @ =0x00016018
- adds r0, r3
- ldrh r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bne _08023A54
- ldr r3, _08023A74 @ =gBattleMons
- movs r0, 0x58
- muls r2, r0
- adds r0, r3, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _08023A54
- adds r0, r2, r3
- adds r1, r5, 0
- bl GiveMoveToBattleMon
-_08023A54:
- ldr r0, _08023A7C @ =gBattlescriptCurrInstr
- str r6, [r0]
-_08023A58:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08023A64: .4byte gActiveBank
-_08023A68: .4byte gBattlePartyID
-_08023A6C: .4byte 0x02000000
-_08023A70: .4byte 0x00016018
-_08023A74: .4byte gBattleMons
-_08023A78: .4byte gBattleTypeFlags
-_08023A7C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk59_8025230
-
- thumb_func_start sub_8023A80
-sub_8023A80: @ 8023A80
- push {r4,lr}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- movs r0, 0x18
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802BBD4
- ldr r4, _08023AC8 @ =gUnknown_03004210
- ldr r1, _08023ACC @ =gUnknown_08400D7A
- movs r2, 0x80
- lsls r2, 1
- movs r0, 0x9
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x19
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _08023AD0 @ =0x0000ffff
- ldr r3, _08023AD4 @ =0x00002d9f
- movs r0, 0x20
- str r0, [sp]
- movs r0, 0
- movs r2, 0xC
- bl sub_814A5C0
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08023AC8: .4byte gUnknown_03004210
-_08023ACC: .4byte gUnknown_08400D7A
-_08023AD0: .4byte 0x0000ffff
-_08023AD4: .4byte 0x00002d9f
- thumb_func_end sub_8023A80
-
- thumb_func_start sub_8023AD8
-sub_8023AD8: @ 8023AD8
- push {lr}
- sub sp, 0x4
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x18
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802BBD4
- bl DestroyMenuCursor
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_8023AD8
-
- thumb_func_start sub_8023AF8
-sub_8023AF8: @ 8023AF8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- ldr r1, _08023B24 @ =gActiveBank
- movs r0, 0
- strb r0, [r1]
- ldr r1, _08023B28 @ =0x02000000
- ldr r2, _08023B2C @ =0x0001601a
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r5, r1, 0
- cmp r0, 0x5
- bls _08023B18
- b _08023E5C
-_08023B18:
- lsls r0, 2
- ldr r1, _08023B30 @ =_08023B34
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08023B24: .4byte gActiveBank
-_08023B28: .4byte 0x02000000
-_08023B2C: .4byte 0x0001601a
-_08023B30: .4byte _08023B34
- .align 2, 0
-_08023B34:
- .4byte _08023B4C
- .4byte _08023B74
- .4byte _08023C30
- .4byte _08023C84
- .4byte _08023E38
- .4byte _08023E4C
-_08023B4C:
- bl sub_8023A80
- ldr r1, _08023B68 @ =0x02000000
- ldr r0, _08023B6C @ =0x0001601a
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- movs r2, 0
- strb r0, [r1]
- ldr r0, _08023B70 @ =gBattleCommunication
- strb r2, [r0, 0x1]
- bl sub_802BC6C
- b _08023E5C
- .align 2, 0
-_08023B68: .4byte 0x02000000
-_08023B6C: .4byte 0x0001601a
-_08023B70: .4byte gBattleCommunication
-_08023B74:
- ldr r0, _08023BFC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08023B9A
- ldr r4, _08023C00 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _08023B9A
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0
- strb r0, [r4, 0x1]
- bl sub_802BC6C
-_08023B9A:
- ldr r0, _08023BFC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08023BC0
- ldr r4, _08023C00 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08023BC0
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_802BC6C
-_08023BC0:
- ldr r0, _08023BFC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08023C0C
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08023C00 @ =gBattleCommunication
- ldrb r4, [r0, 0x1]
- cmp r4, 0
- bne _08023C1C
- bl sub_8023AD8
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08023C04 @ =0x02000000
- ldr r2, _08023C08 @ =0x0001601a
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- b _08023E5A
- .align 2, 0
-_08023BFC: .4byte gMain
-_08023C00: .4byte gBattleCommunication
-_08023C04: .4byte 0x02000000
-_08023C08: .4byte 0x0001601a
-_08023C0C:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08023C16
- b _08023E5C
-_08023C16:
- movs r0, 0x5
- bl PlaySE
-_08023C1C:
- ldr r0, _08023C28 @ =0x02000000
- ldr r1, _08023C2C @ =0x0001601a
- adds r0, r1
- movs r1, 0x4
- strb r1, [r0]
- b _08023E5C
- .align 2, 0
-_08023C28: .4byte 0x02000000
-_08023C2C: .4byte 0x0001601a
-_08023C30:
- ldr r0, _08023C68 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08023C3E
- b _08023E5C
-_08023C3E:
- ldr r0, _08023C6C @ =gPlayerParty
- ldr r2, _08023C70 @ =0x00016018
- adds r1, r5, r2
- ldrb r1, [r1]
- ldr r2, _08023C74 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _08023C78 @ =ReshowBattleScreenAfterMenu
- ldr r4, _08023C7C @ =word_2024E82
- ldrh r4, [r4]
- str r4, [sp]
- bl sub_809D9F0
- ldr r0, _08023C80 @ =0x0001601a
- adds r1, r5, r0
- ldrb r0, [r1]
- adds r0, 0x1
- b _08023E5A
- .align 2, 0
-_08023C68: .4byte gPaletteFade
-_08023C6C: .4byte gPlayerParty
-_08023C70: .4byte 0x00016018
-_08023C74: .4byte gPlayerPartyCount
-_08023C78: .4byte ReshowBattleScreenAfterMenu
-_08023C7C: .4byte word_2024E82
-_08023C80: .4byte 0x0001601a
-_08023C84:
- ldr r0, _08023CB4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08023C92
- b _08023E5C
-_08023C92:
- ldr r0, _08023CB8 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _08023CBC @ =sub_800F808
- cmp r1, r0
- beq _08023C9E
- b _08023E5C
-_08023C9E:
- bl sub_809FA30
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x4
- bne _08023CC8
- ldr r0, _08023CC0 @ =0x02000000
- ldr r1, _08023CC4 @ =0x0001601a
- adds r0, r1
- strb r5, [r0]
- b _08023E5C
- .align 2, 0
-_08023CB4: .4byte gPaletteFade
-_08023CB8: .4byte gMain
-_08023CBC: .4byte sub_800F808
-_08023CC0: .4byte 0x02000000
-_08023CC4: .4byte 0x0001601a
-_08023CC8:
- ldr r2, _08023D08 @ =0x02000000
- mov r9, r2
- ldr r6, _08023D0C @ =0x00016018
- add r6, r9
- ldrb r0, [r6]
- movs r1, 0x64
- mov r8, r1
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- ldr r7, _08023D10 @ =gPlayerParty
- adds r0, r7
- adds r1, r5, 0
- adds r1, 0xD
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl IsHMMove2
- cmp r0, 0
- beq _08023D20
- ldr r0, _08023D14 @ =0x0000013f
- ldr r1, _08023D18 @ =gActiveBank
- ldrb r1, [r1]
- bl PrepareStringBattle
- ldr r1, _08023D1C @ =0x0001601a
- add r1, r9
- movs r0, 0x5
- b _08023E5A
- .align 2, 0
-_08023D08: .4byte 0x02000000
-_08023D0C: .4byte 0x00016018
-_08023D10: .4byte gPlayerParty
-_08023D14: .4byte 0x0000013f
-_08023D18: .4byte gActiveBank
-_08023D1C: .4byte 0x0001601a
-_08023D20:
- ldr r3, _08023E10 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- ldr r1, _08023E14 @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- lsrs r0, r4, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldrb r0, [r6]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- adds r1, r5, 0
- bl RemoveMonPPBonus
- ldrb r0, [r6]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- ldr r7, _08023E18 @ =word_2024E82
- ldrh r1, [r7]
- adds r2, r5, 0
- bl SetMonMoveSlot
- ldr r0, _08023E1C @ =gBattlePartyID
- ldrh r0, [r0]
- ldrb r6, [r6]
- cmp r0, r6
- bne _08023DB0
- ldr r4, _08023E20 @ =gBattleMons
- ldr r0, [r4, 0x50]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _08023DB0
- ldr r0, _08023E24 @ =gDisableStructs
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _08023E28 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08023DB0
- adds r0, r4, 0
- adds r1, r5, 0
- bl RemoveBattleMonPPBonus
- ldrh r1, [r7]
- adds r0, r4, 0
- adds r2, r5, 0
- bl SetBattleMonMoveSlot
-_08023DB0:
- ldr r0, _08023E2C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08023E5C
- ldr r0, _08023E1C @ =gBattlePartyID
- ldr r1, _08023E30 @ =0x02000000
- ldr r2, _08023E34 @ =0x00016018
- adds r1, r2
- ldrh r0, [r0, 0x4]
- ldrb r1, [r1]
- cmp r0, r1
- bne _08023E5C
- ldr r4, _08023E20 @ =gBattleMons
- movs r1, 0x80
- lsls r1, 1
- adds r0, r4, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _08023E5C
- ldr r0, _08023E24 @ =gDisableStructs
- adds r0, 0x50
- ldrb r1, [r0]
- lsrs r1, 4
- ldr r2, _08023E28 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08023E5C
- adds r4, 0xB0
- adds r0, r4, 0
- adds r1, r5, 0
- bl RemoveBattleMonPPBonus
- ldr r0, _08023E18 @ =word_2024E82
- ldrh r1, [r0]
- adds r0, r4, 0
- adds r2, r5, 0
- bl SetBattleMonMoveSlot
- b _08023E5C
- .align 2, 0
-_08023E10: .4byte gBattlescriptCurrInstr
-_08023E14: .4byte gBattleTextBuff2
-_08023E18: .4byte word_2024E82
-_08023E1C: .4byte gBattlePartyID
-_08023E20: .4byte gBattleMons
-_08023E24: .4byte gDisableStructs
-_08023E28: .4byte gBitTable
-_08023E2C: .4byte gBattleTypeFlags
-_08023E30: .4byte 0x02000000
-_08023E34: .4byte 0x00016018
-_08023E38:
- bl sub_8023AD8
- ldr r1, _08023E48 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08023E5C
- .align 2, 0
-_08023E48: .4byte gBattlescriptCurrInstr
-_08023E4C:
- ldr r0, _08023E6C @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _08023E5C
- ldr r2, _08023E70 @ =0x0001601a
- adds r1, r5, r2
- movs r0, 0x2
-_08023E5A:
- strb r0, [r1]
-_08023E5C:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08023E6C: .4byte gBattleExecBuffer
-_08023E70: .4byte 0x0001601a
- thumb_func_end sub_8023AF8
-
- thumb_func_start atk5B_80256E0
-atk5B_80256E0: @ 8023E74
- push {r4,r5,lr}
- ldr r0, _08023E88 @ =0x02000000
- ldr r1, _08023E8C @ =0x0001601a
- adds r5, r0, r1
- ldrb r4, [r5]
- cmp r4, 0
- beq _08023E90
- cmp r4, 0x1
- beq _08023EA8
- b _08023F78
- .align 2, 0
-_08023E88: .4byte 0x02000000
-_08023E8C: .4byte 0x0001601a
-_08023E90:
- bl sub_8023A80
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- ldr r0, _08023EA4 @ =gBattleCommunication
- strb r4, [r0, 0x1]
- bl sub_802BC6C
- b _08023F78
- .align 2, 0
-_08023EA4: .4byte gBattleCommunication
-_08023EA8:
- ldr r0, _08023F2C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08023ECE
- ldr r4, _08023F30 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _08023ECE
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0
- strb r0, [r4, 0x1]
- bl sub_802BC6C
-_08023ECE:
- ldr r0, _08023F2C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08023EF4
- ldr r4, _08023F30 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08023EF4
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_802BC6C
-_08023EF4:
- ldr r0, _08023F2C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08023F4C
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08023F30 @ =gBattleCommunication
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _08023F38
- ldr r3, _08023F34 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08023F40
- .align 2, 0
-_08023F2C: .4byte gMain
-_08023F30: .4byte gBattleCommunication
-_08023F34: .4byte gBattlescriptCurrInstr
-_08023F38:
- ldr r1, _08023F48 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08023F40:
- bl sub_8023AD8
- b _08023F78
- .align 2, 0
-_08023F48: .4byte gBattlescriptCurrInstr
-_08023F4C:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08023F78
- movs r0, 0x5
- bl PlaySE
- ldr r3, _08023F80 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- bl sub_8023AD8
-_08023F78:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08023F80: .4byte gBattlescriptCurrInstr
- thumb_func_end atk5B_80256E0
-
- thumb_func_start atk5C_cmd5c
-atk5C_cmd5c: @ 8023F84
- push {r4,lr}
- ldr r4, _08023FF0 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r2, _08023FF4 @ =gActiveBank
- strb r0, [r2]
- ldr r0, _08023FF8 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _08024008
- ldr r0, _08023FFC @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 1
- ands r0, r1
- cmp r0, 0
- beq _08023FD6
- ldr r1, _08024000 @ =gBattleMons
- ldrb r2, [r2]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _08023FD6
- ldr r0, _08024004 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- bne _08024008
-_08023FD6:
- movs r0, 0
- bl EmitHitAnimation
- ldr r0, _08023FF4 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _08023FF0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- b _0802400E
- .align 2, 0
-_08023FF0: .4byte gBattlescriptCurrInstr
-_08023FF4: .4byte gActiveBank
-_08023FF8: .4byte gBattleMoveFlags
-_08023FFC: .4byte gHitMarker
-_08024000: .4byte gBattleMons
-_08024004: .4byte gDisableStructs
-_08024008:
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
-_0802400E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end atk5C_cmd5c
-
- thumb_func_start sub_8024014
-sub_8024014: @ 8024014
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- movs r5, 0
- ldr r0, _08024048 @ =gTrainerBattleOpponent
- ldrh r2, [r0]
- movs r1, 0x80
- lsls r1, 3
- cmp r2, r1
- bne _08024058
- ldr r0, _0802404C @ =0x02017000
- adds r1, r0, 0
- adds r1, 0x94
- ldrb r2, [r1]
- ldr r1, _08024050 @ =0xfffff056
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r4, r2, 0
- muls r4, r0
- ldr r0, _08024054 @ =gSaveBlock1 + 0x490
- mov r8, r0
- b _08024140
- .align 2, 0
-_08024048: .4byte gTrainerBattleOpponent
-_0802404C: .4byte 0x02017000
-_08024050: .4byte 0xfffff056
-_08024054: .4byte gSaveBlock1 + 0x490
-_08024058:
- ldr r2, _08024074 @ =gTrainers
- ldrh r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r3, r0, 3
- adds r4, r3, r2
- ldrb r1, [r4]
- cmp r1, 0x1
- beq _080240AE
- cmp r1, 0x1
- bgt _08024078
- cmp r1, 0
- beq _08024082
- b _080240C4
- .align 2, 0
-_08024074: .4byte gTrainers
-_08024078:
- cmp r1, 0x2
- beq _08024098
- cmp r1, 0x3
- beq _080240AE
- b _080240C4
-_08024082:
- adds r0, r2, 0
- adds r0, 0x24
- adds r0, r3, r0
- ldr r1, [r0]
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r1
- subs r0, 0x8
- b _080240C2
-_08024098:
- adds r0, r2, 0
- adds r0, 0x24
- adds r0, r3, r0
- ldr r1, [r0]
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r1
- subs r0, 0x8
- b _080240C2
-_080240AE:
- adds r0, r2, 0
- adds r0, 0x24
- adds r0, r3, r0
- ldr r1, [r0]
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- subs r0, 0x10
-_080240C2:
- ldrb r5, [r0, 0x2]
-_080240C4:
- ldr r0, _08024120 @ =gTrainerMoney
- lsls r1, r6, 2
- adds r3, r1, r0
- ldrb r1, [r3]
- mov r12, r0
- lsls r4, r5, 2
- ldr r5, _08024124 @ =0x02000000
- ldr r7, _08024128 @ =gBattleTypeFlags
- ldr r0, _0802412C @ =gSaveBlock1 + 0x490
- mov r8, r0
- cmp r1, 0xFF
- beq _080240FE
- ldr r2, _08024130 @ =gTrainers
- ldr r0, _08024134 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r2, [r0, 0x1]
- adds r1, r3, 0
-_080240EE:
- ldrb r0, [r1]
- cmp r0, r2
- beq _080240FE
- adds r1, 0x4
- adds r6, 0x1
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _080240EE
-_080240FE:
- ldr r1, _08024138 @ =0x00016056
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r3, r4, 0
- muls r3, r0
- lsls r0, r6, 2
- add r0, r12
- ldrb r2, [r0, 0x1]
- ldrh r1, [r7]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802413C
- lsls r0, r2, 1
- adds r4, r3, 0
- muls r4, r0
- b _08024140
- .align 2, 0
-_08024120: .4byte gTrainerMoney
-_08024124: .4byte 0x02000000
-_08024128: .4byte gBattleTypeFlags
-_0802412C: .4byte gSaveBlock1 + 0x490
-_08024130: .4byte gTrainers
-_08024134: .4byte gTrainerBattleOpponent
-_08024138: .4byte 0x00016056
-_0802413C:
- adds r4, r3, 0
- muls r4, r2
-_08024140:
- mov r0, r8
- adds r1, r4, 0
- bl sub_80B79B8
- ldr r1, _0802418C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- movs r0, 0x4
- strb r0, [r1, 0x2]
- movs r0, 0x5
- strb r0, [r1, 0x3]
- strb r4, [r1, 0x4]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r4
- lsrs r0, 8
- strb r0, [r1, 0x5]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r4
- lsrs r0, 16
- strb r0, [r1, 0x6]
- lsrs r0, r4, 24
- strb r0, [r1, 0x7]
- movs r0, 0xFF
- strb r0, [r1, 0x8]
- ldr r1, _08024190 @ =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
-_0802418C: .4byte gBattleTextBuff1
-_08024190: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8024014
-
- thumb_func_start atk5E_8025A70
-atk5E_8025A70: @ 8024194
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, _080241B8 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r6, _080241BC @ =gActiveBank
- strb r0, [r6]
- ldr r5, _080241C0 @ =gBattleCommunication
- ldrb r0, [r5]
- mov r8, r4
- cmp r0, 0
- beq _080241C4
- cmp r0, 0x1
- beq _080241DC
- b _08024230
- .align 2, 0
-_080241B8: .4byte gBattlescriptCurrInstr
-_080241BC: .4byte gActiveBank
-_080241C0: .4byte gBattleCommunication
-_080241C4:
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl EmitGetAttributes
- ldrb r0, [r6]
- bl MarkBufferBankForExecution
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _08024230
-_080241DC:
- ldr r0, _0802423C @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _08024230
- ldrb r0, [r6]
- lsls r0, 9
- ldr r1, _08024240 @ =gUnknown_02024264
- adds r0, r1
- mov r12, r0
- movs r2, 0
- adds r4, r6, 0
- movs r5, 0x58
- ldr r6, _08024244 @ =gUnknown_02024AA4
- adds r7, r6, 0
- subs r7, 0x18
- mov r3, r12
- adds r3, 0xC
-_080241FE:
- lsls r1, r2, 1
- ldrb r0, [r4]
- muls r0, r5
- adds r1, r0
- adds r1, r7
- ldrh r0, [r3]
- strh r0, [r1]
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r2, r1
- adds r1, r6
- mov r0, r12
- adds r0, 0x24
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r3, 0x2
- adds r2, 0x1
- cmp r2, 0x3
- ble _080241FE
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_08024230:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802423C: .4byte gBattleExecBuffer
-_08024240: .4byte gUnknown_02024264
-_08024244: .4byte gUnknown_02024AA4
- thumb_func_end atk5E_8025A70
-
- thumb_func_start atk5F_8025B24
-atk5F_8025B24: @ 8024248
- push {lr}
- ldr r0, _08024270 @ =gActiveBank
- ldr r2, _08024274 @ =gBankAttacker
- ldrb r3, [r2]
- strb r3, [r0]
- ldr r1, _08024278 @ =gBankTarget
- ldrb r0, [r1]
- strb r0, [r2]
- strb r3, [r1]
- ldr r2, _0802427C @ =gHitMarker
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 5
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _08024284
- ldr r0, _08024280 @ =0xffffefff
- ands r1, r0
- b _08024286
- .align 2, 0
-_08024270: .4byte gActiveBank
-_08024274: .4byte gBankAttacker
-_08024278: .4byte gBankTarget
-_0802427C: .4byte gHitMarker
-_08024280: .4byte 0xffffefff
-_08024284:
- orrs r1, r3
-_08024286:
- str r1, [r2]
- ldr r1, _08024294 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08024294: .4byte gBattlescriptCurrInstr
- thumb_func_end atk5F_8025B24
-
- thumb_func_start atk60_cmd60
-atk60_cmd60: @ 8024298
- push {lr}
- ldr r0, _080242C0 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _080242B2
- ldr r0, _080242C4 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl IncrementGameStat
-_080242B2:
- ldr r1, _080242C4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080242C0: .4byte gBankAttacker
-_080242C4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk60_cmd60
-
- thumb_func_start atk61_8025BA4
-atk61_8025BA4: @ 80242C8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x30
- ldr r0, _0802432C @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0802437C
- ldr r0, _08024330 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r1, _08024334 @ =gActiveBank
- strb r0, [r1]
- ldrb r0, [r1]
- bl GetBankSide
- lsls r0, 24
- ldr r1, _08024338 @ =gEnemyParty
- mov r8, r1
- cmp r0, 0
- bne _080242FA
- ldr r0, _0802433C @ =gPlayerParty
- mov r8, r0
-_080242FA:
- movs r7, 0
- add r6, sp, 0x4
- mov r5, sp
-_08024300:
- movs r0, 0x64
- muls r0, r7
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08024324
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- bne _08024344
-_08024324:
- ldr r0, _08024340 @ =0x0000ffff
- strh r0, [r5]
- movs r0, 0
- b _08024356
- .align 2, 0
-_0802432C: .4byte gBattleExecBuffer
-_08024330: .4byte gBattlescriptCurrInstr
-_08024334: .4byte gActiveBank
-_08024338: .4byte gEnemyParty
-_0802433C: .4byte gPlayerParty
-_08024340: .4byte 0x0000ffff
-_08024344:
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- strh r0, [r5]
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
-_08024356:
- str r0, [r6]
- adds r6, 0x8
- adds r5, 0x8
- adds r7, 0x1
- cmp r7, 0x5
- ble _08024300
- movs r0, 0
- mov r1, sp
- movs r2, 0x1
- bl dp01_build_cmdbuf_x30_TODO
- ldr r0, _08024388 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _0802438C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_0802437C:
- add sp, 0x30
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08024388: .4byte gActiveBank
-_0802438C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk61_8025BA4
-
- thumb_func_start atk62_08025C6C
-atk62_08025C6C: @ 8024390
- push {r4,r5,lr}
- ldr r5, _080243B8 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _080243BC @ =gActiveBank
- strb r0, [r4]
- movs r0, 0
- bl dp01_build_cmdbuf_x31_31_31_31
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080243B8: .4byte gBattlescriptCurrInstr
-_080243BC: .4byte gActiveBank
- thumb_func_end atk62_08025C6C
-
- thumb_func_start atk63_jumptoattack
-atk63_jumptoattack: @ 80243C0
- push {r4,lr}
- ldr r0, _080243D8 @ =gBattlescriptCurrInstr
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r4, r0, 0
- cmp r1, 0
- beq _080243E4
- ldr r0, _080243DC @ =gCurrentMove
- ldr r1, _080243E0 @ =gUnknown_02024BEA
- ldrh r1, [r1]
- strh r1, [r0]
- b _080243F2
- .align 2, 0
-_080243D8: .4byte gBattlescriptCurrInstr
-_080243DC: .4byte gCurrentMove
-_080243E0: .4byte gUnknown_02024BEA
-_080243E4:
- ldr r2, _08024410 @ =gUnknown_02024BE8
- ldr r1, _08024414 @ =gCurrentMove
- ldr r0, _08024418 @ =gUnknown_02024BEA
- ldrh r0, [r0]
- strh r0, [r1]
- strh r0, [r2]
- adds r0, r1, 0
-_080243F2:
- ldr r3, _0802441C @ =gUnknown_081D6BBC
- ldr r2, _08024420 @ =gBattleMoves
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08024410: .4byte gUnknown_02024BE8
-_08024414: .4byte gCurrentMove
-_08024418: .4byte gUnknown_02024BEA
-_0802441C: .4byte gUnknown_081D6BBC
-_08024420: .4byte gBattleMoves
- thumb_func_end atk63_jumptoattack
-
- thumb_func_start atk64_statusanimation
-atk64_statusanimation: @ 8024424
- push {r4,lr}
- ldr r0, _08024494 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0802448C
- ldr r0, _08024498 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _0802449C @ =gActiveBank
- strb r0, [r4]
- ldr r1, _080244A0 @ =gStatuses3
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080244A4 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08024484
- ldr r0, _080244A8 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- bne _08024484
- ldr r0, _080244AC @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08024484
- ldr r1, _080244B0 @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r0, r1
- ldr r2, [r0]
- movs r0, 0
- movs r1, 0
- bl EmitStatusAnimation
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08024484:
- ldr r1, _08024498 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_0802448C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08024494: .4byte gBattleExecBuffer
-_08024498: .4byte gBattlescriptCurrInstr
-_0802449C: .4byte gActiveBank
-_080244A0: .4byte gStatuses3
-_080244A4: .4byte 0x000400c0
-_080244A8: .4byte gDisableStructs
-_080244AC: .4byte gHitMarker
-_080244B0: .4byte gBattleMons
- thumb_func_end atk64_statusanimation
-
- thumb_func_start atk65_8025D90
-atk65_8025D90: @ 80244B4
- push {r4,r5,lr}
- ldr r0, _0802453C @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _08024534
- ldr r4, _08024540 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r5, _08024544 @ =gActiveBank
- strb r0, [r5]
- ldr r1, [r4]
- ldrb r3, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- orrs r3, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- orrs r3, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- orrs r3, r0
- ldr r1, _08024548 @ =gStatuses3
- ldrb r2, [r5]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _0802454C @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _0802452C
- ldr r0, _08024550 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- bne _0802452C
- ldr r0, _08024554 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802452C
- ldr r1, _08024558 @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r2, [r0]
- ands r2, r3
- movs r0, 0
- movs r1, 0x1
- bl EmitStatusAnimation
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
-_0802452C:
- ldr r1, _08024540 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
-_08024534:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802453C: .4byte gBattleExecBuffer
-_08024540: .4byte gBattlescriptCurrInstr
-_08024544: .4byte gActiveBank
-_08024548: .4byte gStatuses3
-_0802454C: .4byte 0x000400c0
-_08024550: .4byte gDisableStructs
-_08024554: .4byte gHitMarker
-_08024558: .4byte gBattleMons
- thumb_func_end atk65_8025D90
-
- thumb_func_start atk66_8025E38
-atk66_8025E38: @ 802455C
- push {r4,r5,lr}
- ldr r0, _080245D4 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _080245CE
- ldr r4, _080245D8 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r5, _080245DC @ =gActiveBank
- strb r0, [r5]
- ldr r4, [r4]
- ldrb r2, [r4, 0x3]
- ldrb r0, [r4, 0x4]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r4, 0x5]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r4, 0x6]
- lsls r0, 24
- orrs r2, r0
- ldr r1, _080245E0 @ =gStatuses3
- ldrb r3, [r5]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080245E4 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _080245C6
- ldr r0, _080245E8 @ =gDisableStructs
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- bne _080245C6
- ldr r0, _080245EC @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080245C6
- ldrb r1, [r4, 0x2]
- movs r0, 0
- bl EmitStatusAnimation
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
-_080245C6:
- ldr r1, _080245D8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x7
- str r0, [r1]
-_080245CE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080245D4: .4byte gBattleExecBuffer
-_080245D8: .4byte gBattlescriptCurrInstr
-_080245DC: .4byte gActiveBank
-_080245E0: .4byte gStatuses3
-_080245E4: .4byte 0x000400c0
-_080245E8: .4byte gDisableStructs
-_080245EC: .4byte gHitMarker
- thumb_func_end atk66_8025E38
-
- thumb_func_start atk67_8025ECC
-atk67_8025ECC: @ 80245F0
- push {r4,r5,lr}
- ldr r5, _08024600 @ =gBattleCommunication
- ldrb r4, [r5]
- cmp r4, 0
- beq _08024604
- cmp r4, 0x1
- beq _08024616
- b _08024696
- .align 2, 0
-_08024600: .4byte gBattleCommunication
-_08024604:
- bl sub_8023A80
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- strb r4, [r5, 0x1]
- bl sub_802BC6C
- b _08024696
-_08024616:
- ldr r0, _08024674 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802463A
- ldrb r0, [r5, 0x1]
- cmp r0, 0
- beq _0802463A
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0
- strb r0, [r5, 0x1]
- bl sub_802BC6C
-_0802463A:
- ldr r0, _08024674 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08024660
- ldr r4, _08024678 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08024660
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_802BC6C
-_08024660:
- ldr r0, _08024674 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802467C
- ldr r1, _08024678 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x1]
- b _08024684
- .align 2, 0
-_08024674: .4byte gMain
-_08024678: .4byte gBattleCommunication
-_0802467C:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08024696
-_08024684:
- movs r0, 0x5
- bl PlaySE
- bl sub_8023AD8
- ldr r1, _0802469C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_08024696:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802469C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk67_8025ECC
-
- thumb_func_start sub_80246A0
-sub_80246A0: @ 80246A0
- push {r4,r5,lr}
- movs r1, 0
- ldr r2, _080246CC @ =gNoOfAllBanks
- ldr r5, _080246D0 @ =gBattlescriptCurrInstr
- ldrb r0, [r2]
- cmp r1, r0
- bge _080246BE
- ldr r4, _080246D4 @ =gUnknown_02024A76
- movs r3, 0xC
-_080246B2:
- adds r0, r1, r4
- strb r3, [r0]
- adds r1, 0x1
- ldrb r0, [r2]
- cmp r1, r0
- blt _080246B2
-_080246BE:
- ldr r0, [r5]
- adds r0, 0x1
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080246CC: .4byte gNoOfAllBanks
-_080246D0: .4byte gBattlescriptCurrInstr
-_080246D4: .4byte gUnknown_02024A76
- thumb_func_end sub_80246A0
-
- thumb_func_start atk69_8025FE0
-atk69_8025FE0: @ 80246D8
- push {r4-r7,lr}
- ldr r7, _08024700 @ =gBattleMons
- ldr r6, _08024704 @ =gBankTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0802470C
- ldr r1, _08024708 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _08024726
- .align 2, 0
-_08024700: .4byte gBattleMons
-_08024704: .4byte gBankTarget
-_08024708: .4byte gEnigmaBerries
-_0802470C:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_08024726:
- ldr r1, _080247E8 @ =gStringBank
- ldr r5, _080247EC @ =gBankTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _08024764
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _08024764
- ldrb r0, [r5]
- movs r1, 0x27
- bl RecordItemBattle
- ldr r2, _080247F0 @ =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_08024764:
- ldr r2, _080247F4 @ =gBattleMons
- ldr r3, _080247EC @ =gBankTarget
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 17
- ands r1, r0
- adds r5, r2, 0
- cmp r1, 0
- bne _08024834
- ldr r2, _080247F8 @ =gBattleMoves
- ldr r0, _080247FC @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x65
- beq _080247B6
- ldr r0, _08024800 @ =gProtectStructs
- lsls r1, r4, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _080247B6
- ldr r0, _080247F0 @ =gSpecialStatuses
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _08024834
-_080247B6:
- ldrb r0, [r3]
- movs r4, 0x58
- muls r0, r4
- adds r0, r5
- ldrh r1, [r0, 0x28]
- ldr r2, _08024804 @ =gBattleMoveDamage
- ldr r0, [r2]
- cmp r1, r0
- bgt _08024834
- subs r0, r1, 0x1
- str r0, [r2]
- ldr r1, _08024800 @ =gProtectStructs
- ldrb r3, [r3]
- lsls r0, r3, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- bge _0802480C
- ldr r0, _08024808 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _08024834
- .align 2, 0
-_080247E8: .4byte gStringBank
-_080247EC: .4byte gBankTarget
-_080247F0: .4byte gSpecialStatuses
-_080247F4: .4byte gBattleMons
-_080247F8: .4byte gBattleMoves
-_080247FC: .4byte gCurrentMove
-_08024800: .4byte gProtectStructs
-_08024804: .4byte gBattleMoveDamage
-_08024808: .4byte gBattleMoveFlags
-_0802480C:
- ldr r0, _08024844 @ =gSpecialStatuses
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _08024834
- ldr r2, _08024848 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802484C @ =gLastUsedItem
- adds r0, r3, 0
- muls r0, r4
- adds r0, r5
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
-_08024834:
- ldr r1, _08024850 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08024844: .4byte gSpecialStatuses
-_08024848: .4byte gBattleMoveFlags
-_0802484C: .4byte gLastUsedItem
-_08024850: .4byte gBattlescriptCurrInstr
- thumb_func_end atk69_8025FE0
-
- thumb_func_start atk6A_stash_item_for_side
-atk6A_stash_item_for_side: @ 8024854
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, _080248B0 @ =gBattlescriptCurrInstr
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r5, _080248B4 @ =gActiveBank
- strb r0, [r5]
- ldrb r4, [r5]
- lsls r1, r4, 1
- ldr r0, _080248B8 @ =0x020160cc
- adds r1, r0
- ldr r2, _080248BC @ =gBattleMons
- movs r3, 0x58
- adds r0, r4, 0
- muls r0, r3
- adds r0, r2
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
- ldrb r0, [r5]
- muls r0, r3
- adds r0, r2
- movs r1, 0
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- muls r0, r3
- adds r2, 0x2E
- adds r0, r2
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetAttributes
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r6]
- adds r0, 0x2
- str r0, [r6]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080248B0: .4byte gBattlescriptCurrInstr
-_080248B4: .4byte gActiveBank
-_080248B8: .4byte 0x020160cc
-_080248BC: .4byte gBattleMons
- thumb_func_end atk6A_stash_item_for_side
-
- thumb_func_start sub_80248C0
-sub_80248C0: @ 80248C0
- ldr r1, _080248EC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x7
- strb r0, [r1, 0x1]
- ldr r2, _080248F0 @ =gBankAttacker
- ldrb r0, [r2]
- strb r0, [r1, 0x2]
- ldr r3, _080248F4 @ =gBattlePartyID
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _080248F8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_080248EC: .4byte gBattleTextBuff1
-_080248F0: .4byte gBankAttacker
-_080248F4: .4byte gBattlePartyID
-_080248F8: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_80248C0
-
- thumb_func_start sub_80248FC
-sub_80248FC: @ 80248FC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r1, 0
- movs r7, 0
- ldr r0, _08024928 @ =0x02000000
- mov r10, r0
- ldr r4, _0802492C @ =0x0001609c
- add r4, r10
- ldrb r0, [r4]
- cmp r0, 0x1
- bne _0802491C
- b _08024AF4
-_0802491C:
- cmp r0, 0x1
- bgt _08024930
- cmp r0, 0
- beq _0802493E
- b _08024C38
- .align 2, 0
-_08024928: .4byte 0x02000000
-_0802492C: .4byte 0x0001609c
-_08024930:
- cmp r0, 0x2
- bne _08024936
- b _08024C04
-_08024936:
- cmp r0, 0x3
- bne _0802493C
- b _08024C30
-_0802493C:
- b _08024C38
-_0802493E:
- str r1, [sp]
- movs r0, 0xB
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x7
- bl sub_802BBD4
- ldr r0, _0802499C @ =gStringVar4
- ldr r1, _080249A0 @ =gUnknown_08400D9F
- bl StringCopy
- adds r5, r0, 0
- movs r1, 0
- mov r8, r1
-_0802495A:
- movs r2, 0
- mov r9, r2
- ldr r0, _080249A4 @ =gUnknown_0840165C
- mov r1, r8
- lsls r4, r1, 2
- adds r0, r4, r0
- ldr r1, [r0]
- adds r0, r5, 0
- bl StringAppend
- adds r5, r0, 0
- ldr r0, _080249A8 @ =0x02000000
- ldr r2, _080249AC @ =0x00016018
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080249B0 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080249B4 @ =gLevelUpStatBoxStats
- add r1, r8
- ldrb r1, [r1]
- bl GetMonData
- lsls r0, 16
- lsrs r1, r0, 16
- mov r0, r8
- cmp r0, 0x5
- bhi _08024A1A
- ldr r0, _080249B8 @ =_080249BC
- adds r0, r4, r0
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802499C: .4byte gStringVar4
-_080249A0: .4byte gUnknown_08400D9F
-_080249A4: .4byte gUnknown_0840165C
-_080249A8: .4byte 0x02000000
-_080249AC: .4byte 0x00016018
-_080249B0: .4byte gPlayerParty
-_080249B4: .4byte gLevelUpStatBoxStats
-_080249B8: .4byte _080249BC
- .align 2, 0
-_080249BC:
- .4byte _080249D4
- .4byte _080249E0
- .4byte _080249EC
- .4byte _080249F8
- .4byte _08024A04
- .4byte _08024A10
-_080249D4:
- ldr r0, _080249DC @ =0x02017180
- ldrh r0, [r0]
- b _08024A14
- .align 2, 0
-_080249DC: .4byte 0x02017180
-_080249E0:
- ldr r0, _080249E8 @ =0x02017180
- ldrh r0, [r0, 0x8]
- b _08024A14
- .align 2, 0
-_080249E8: .4byte 0x02017180
-_080249EC:
- ldr r0, _080249F4 @ =0x02017180
- ldrh r0, [r0, 0x2]
- b _08024A14
- .align 2, 0
-_080249F4: .4byte 0x02017180
-_080249F8:
- ldr r0, _08024A00 @ =0x02017180
- ldrh r0, [r0, 0xA]
- b _08024A14
- .align 2, 0
-_08024A00: .4byte 0x02017180
-_08024A04:
- ldr r0, _08024A0C @ =0x02017180
- ldrh r0, [r0, 0x4]
- b _08024A14
- .align 2, 0
-_08024A0C: .4byte 0x02017180
-_08024A10:
- ldr r0, _08024A54 @ =0x02017180
- ldrh r0, [r0, 0x6]
-_08024A14:
- subs r0, r1, r0
- lsls r0, 16
- lsrs r7, r0, 16
-_08024A1A:
- lsls r0, r7, 16
- asrs r0, 16
- cmp r0, 0
- bge _08024A2C
- negs r0, r0
- lsls r0, 16
- lsrs r7, r0, 16
- movs r1, 0x1
- add r9, r1
-_08024A2C:
- movs r0, 0xFC
- strb r0, [r5]
- movs r0, 0x13
- strb r0, [r5, 0x1]
- movs r1, 0x1
- mov r2, r8
- ands r1, r2
- lsls r0, r1, 3
- adds r0, r1
- adds r0, 0x5
- lsls r0, 3
- adds r0, 0x6
- strb r0, [r5, 0x2]
- adds r5, 0x3
- mov r0, r9
- cmp r0, 0
- beq _08024A5C
- ldr r1, _08024A58 @ =gUnknown_08400DAC
- b _08024A5E
- .align 2, 0
-_08024A54: .4byte 0x02017180
-_08024A58: .4byte gUnknown_08400DAC
-_08024A5C:
- ldr r1, _08024AA4 @ =gUnknown_08400DAA
-_08024A5E:
- adds r0, r5, 0
- bl StringCopy
- adds r5, r0, 0
- movs r6, 0xFC
- strb r6, [r5]
- movs r4, 0x14
- strb r4, [r5, 0x1]
- movs r0, 0x6
- strb r0, [r5, 0x2]
- adds r5, 0x3
- lsls r1, r7, 16
- asrs r1, 16
- adds r0, r5, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r5, r0, 0
- strb r6, [r5]
- strb r4, [r5, 0x1]
- movs r0, 0
- strb r0, [r5, 0x2]
- adds r5, 0x3
- movs r0, 0x1
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- beq _08024AA8
- movs r0, 0xFE
- strb r0, [r5]
- movs r0, 0xFF
- strb r0, [r5, 0x1]
- adds r5, 0x1
- b _08024AB8
- .align 2, 0
-_08024AA4: .4byte gUnknown_08400DAA
-_08024AA8:
- strb r6, [r5]
- movs r0, 0x11
- strb r0, [r5, 0x1]
- movs r0, 0x8
- strb r0, [r5, 0x2]
- adds r5, 0x3
- movs r0, 0xFF
- strb r0, [r5]
-_08024AB8:
- movs r2, 0x1
- add r8, r2
- mov r0, r8
- cmp r0, 0x5
- bgt _08024AC4
- b _0802495A
-_08024AC4:
- ldr r4, _08024AE4 @ =gUnknown_03004210
- ldr r1, _08024AE8 @ =gStringVar4
- adds r2, 0xFF
- movs r0, 0x1
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0xC
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _08024AEC @ =0x02000000
- ldr r2, _08024AF0 @ =0x0001609c
- adds r1, r2
- b _08024BEA
- .align 2, 0
-_08024AE4: .4byte gUnknown_03004210
-_08024AE8: .4byte gStringVar4
-_08024AEC: .4byte 0x02000000
-_08024AF0: .4byte 0x0001609c
-_08024AF4:
- ldr r0, _08024B94 @ =gMain
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- bne _08024AFE
- b _08024C38
-_08024AFE:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08024B98 @ =gStringVar4
- ldr r1, _08024B9C @ =gUnknown_08400D9F
- bl StringCopy
- adds r5, r0, 0
- movs r0, 0
- mov r8, r0
- mov r9, r0
- movs r6, 0xFC
- movs r7, 0x14
- ldr r1, _08024BA0 @ =0x00016018
- add r10, r1
-_08024B1C:
- ldr r1, _08024BA4 @ =gUnknown_0840165C
- mov r2, r8
- lsls r0, r2, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r5, 0
- bl StringAppend
- adds r5, r0, 0
- mov r0, r10
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08024BA8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08024BAC @ =gLevelUpStatBoxStats
- add r1, r8
- ldrb r1, [r1]
- bl GetMonData
- adds r1, r0, 0
- strb r6, [r5]
- movs r0, 0x13
- strb r0, [r5, 0x1]
- movs r4, 0x1
- mov r2, r8
- ands r4, r2
- lsls r0, r4, 3
- adds r0, r4
- adds r0, 0x5
- lsls r0, 3
- adds r0, 0x6
- strb r0, [r5, 0x2]
- adds r5, 0x3
- strb r6, [r5]
- strb r7, [r5, 0x1]
- movs r0, 0x6
- strb r0, [r5, 0x2]
- adds r5, 0x3
- lsls r1, 16
- asrs r1, 16
- adds r0, r5, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r5, r0, 0
- strb r6, [r5]
- strb r7, [r5, 0x1]
- mov r0, r9
- strb r0, [r5, 0x2]
- adds r5, 0x3
- cmp r4, 0
- beq _08024BB0
- movs r0, 0xFE
- strb r0, [r5]
- movs r0, 0xFF
- strb r0, [r5, 0x1]
- adds r5, 0x1
- b _08024BC0
- .align 2, 0
-_08024B94: .4byte gMain
-_08024B98: .4byte gStringVar4
-_08024B9C: .4byte gUnknown_08400D9F
-_08024BA0: .4byte 0x00016018
-_08024BA4: .4byte gUnknown_0840165C
-_08024BA8: .4byte gPlayerParty
-_08024BAC: .4byte gLevelUpStatBoxStats
-_08024BB0:
- strb r6, [r5]
- movs r0, 0x11
- strb r0, [r5, 0x1]
- movs r0, 0x8
- strb r0, [r5, 0x2]
- adds r5, 0x3
- movs r0, 0xFF
- strb r0, [r5]
-_08024BC0:
- movs r1, 0x1
- add r8, r1
- mov r2, r8
- cmp r2, 0x5
- ble _08024B1C
- ldr r4, _08024BF4 @ =gUnknown_03004210
- ldr r1, _08024BF8 @ =gStringVar4
- movs r2, 0x80
- lsls r2, 1
- movs r0, 0x1
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0xC
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _08024BFC @ =0x02000000
- ldr r0, _08024C00 @ =0x0001609c
- adds r1, r0
-_08024BEA:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08024C38
- .align 2, 0
-_08024BF4: .4byte gUnknown_03004210
-_08024BF8: .4byte gStringVar4
-_08024BFC: .4byte 0x02000000
-_08024C00: .4byte 0x0001609c
-_08024C04:
- ldr r0, _08024C2C @ =gMain
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- beq _08024C38
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xB
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x7
- bl sub_802BBD4
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08024C38
- .align 2, 0
-_08024C2C: .4byte gMain
-_08024C30:
- ldr r1, _08024C48 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_08024C38:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08024C48: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_80248FC
-
- thumb_func_start sub_8024C4C
-sub_8024C4C: @ 8024C4C
- push {lr}
- bl sub_80156DC
- ldr r1, _08024C60 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08024C60: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8024C4C
-
- thumb_func_start atk6E_state0_side_becomes_attacker
-atk6E_state0_side_becomes_attacker: @ 8024C64
- push {lr}
- movs r0, 0
- bl GetBankByPlayerAI
- ldr r1, _08024C7C @ =gBankAttacker
- strb r0, [r1]
- ldr r1, _08024C80 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08024C7C: .4byte gBankAttacker
-_08024C80: .4byte gBattlescriptCurrInstr
- thumb_func_end atk6E_state0_side_becomes_attacker
-
- thumb_func_start atk6F_8026810
-atk6F_8026810: @ 8024C84
- push {r4,r5,lr}
- ldr r5, _08024CB0 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r4, _08024CB4 @ =gActiveBank
- strb r0, [r4]
- movs r0, 0
- movs r1, 0
- bl EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08024CB0: .4byte gBattlescriptCurrInstr
-_08024CB4: .4byte gActiveBank
- thumb_func_end atk6F_8026810
-
- thumb_func_start atk70_record_ability_usage_of_side
-atk70_record_ability_usage_of_side: @ 8024CB8
- push {r4,lr}
- ldr r4, _08024CE0 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r1, _08024CE4 @ =gActiveBank
- strb r0, [r1]
- ldrb r0, [r1]
- ldr r1, _08024CE8 @ =gLastUsedAbility
- ldrb r1, [r1]
- bl RecordAbilityBattle
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08024CE0: .4byte gBattlescriptCurrInstr
-_08024CE4: .4byte gActiveBank
-_08024CE8: .4byte gLastUsedAbility
- thumb_func_end atk70_record_ability_usage_of_side
-
- thumb_func_start sub_8024CEC
-sub_8024CEC: @ 8024CEC
- ldr r2, _08024D0C @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r2]
- movs r0, 0x2
- strb r0, [r2, 0x1]
- ldr r0, _08024D10 @ =word_2024E82
- ldrh r1, [r0]
- strb r1, [r2, 0x2]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r2, 0x3]
- movs r0, 0xFF
- strb r0, [r2, 0x4]
- bx lr
- .align 2, 0
-_08024D0C: .4byte gBattleTextBuff2
-_08024D10: .4byte word_2024E82
- thumb_func_end sub_8024CEC
-
- thumb_func_start atk71_80268A0
-atk71_80268A0: @ 8024D14
- push {lr}
- bl sub_8024CEC
- ldr r1, _08024D28 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08024D28: .4byte gBattlescriptCurrInstr
- thumb_func_end atk71_80268A0
-
- thumb_func_start atk72_flee
-atk72_flee: @ 8024D2C
- push {lr}
- ldr r0, _08024D58 @ =gBank1
- ldrb r0, [r0]
- bl sub_8014AB8
- lsls r0, 24
- cmp r0, 0
- beq _08024D60
- ldr r3, _08024D5C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08024D68
- .align 2, 0
-_08024D58: .4byte gBank1
-_08024D5C: .4byte gBattlescriptCurrInstr
-_08024D60:
- ldr r1, _08024D6C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08024D68:
- pop {r0}
- bx r0
- .align 2, 0
-_08024D6C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk72_flee
-
- thumb_func_start atk73_cmd73
-atk73_cmd73: @ 8024D70
- push {r4,r5,lr}
- ldr r0, _08024DC0 @ =gBattleTypeFlags
- ldrh r0, [r0]
- movs r5, 0x1
- ands r5, r0
- cmp r5, 0
- bne _08024E12
- ldr r0, _08024DC4 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r1, _08024DC8 @ =gActiveBank
- strb r0, [r1]
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08024DCC @ =gBattleMons
- movs r1, 0x58
- muls r1, r0
- adds r1, r2
- ldrh r4, [r1, 0x28]
- movs r0, 0x64
- muls r0, r4
- ldrh r1, [r1, 0x2C]
- bl __divsi3
- cmp r0, 0
- bne _08024DAE
- movs r0, 0x1
-_08024DAE:
- cmp r0, 0x45
- bgt _08024DB6
- cmp r4, 0
- bne _08024DD8
-_08024DB6:
- ldr r0, _08024DD0 @ =0x02000000
- ldr r1, _08024DD4 @ =0x000160c1
- adds r0, r1
- strb r5, [r0]
- b _08024E12
- .align 2, 0
-_08024DC0: .4byte gBattleTypeFlags
-_08024DC4: .4byte gBattlescriptCurrInstr
-_08024DC8: .4byte gActiveBank
-_08024DCC: .4byte gBattleMons
-_08024DD0: .4byte 0x02000000
-_08024DD4: .4byte 0x000160c1
-_08024DD8:
- cmp r0, 0x27
- ble _08024DF0
- ldr r0, _08024DE8 @ =0x02000000
- ldr r1, _08024DEC @ =0x000160c1
- adds r0, r1
- movs r1, 0x1
- b _08024E10
- .align 2, 0
-_08024DE8: .4byte 0x02000000
-_08024DEC: .4byte 0x000160c1
-_08024DF0:
- cmp r0, 0x9
- ble _08024E08
- ldr r0, _08024E00 @ =0x02000000
- ldr r1, _08024E04 @ =0x000160c1
- adds r0, r1
- movs r1, 0x2
- b _08024E10
- .align 2, 0
-_08024E00: .4byte 0x02000000
-_08024E04: .4byte 0x000160c1
-_08024E08:
- ldr r0, _08024E20 @ =0x02000000
- ldr r1, _08024E24 @ =0x000160c1
- adds r0, r1
- movs r1, 0x3
-_08024E10:
- strb r1, [r0]
-_08024E12:
- ldr r1, _08024E28 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08024E20: .4byte 0x02000000
-_08024E24: .4byte 0x000160c1
-_08024E28: .4byte gBattlescriptCurrInstr
- thumb_func_end atk73_cmd73
-
- thumb_func_start atk74_hp_tresholds_2
-atk74_hp_tresholds_2: @ 8024E2C
- push {r4-r7,lr}
- ldr r0, _08024E8C @ =gBattleTypeFlags
- ldrh r0, [r0]
- movs r7, 0x1
- ands r7, r0
- cmp r7, 0
- bne _08024ED0
- ldr r0, _08024E90 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- adds r4, r0, 0
- ldr r0, _08024E94 @ =gActiveBank
- strb r4, [r0]
- movs r0, 0x1
- eors r4, r0
- lsls r4, 24
- lsrs r4, 24
- ldr r6, _08024E98 @ =0x02000000
- adds r0, r4, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 23
- ldr r1, _08024E9C @ =0x000160bc
- adds r0, r1
- adds r0, r6
- ldrb r5, [r0]
- ldr r1, _08024EA0 @ =gBattleMons
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- ldrh r4, [r0, 0x28]
- subs r1, r5, r4
- movs r0, 0x64
- muls r0, r1
- adds r1, r5, 0
- bl __divsi3
- adds r1, r0, 0
- cmp r4, r5
- bcc _08024EA8
- ldr r1, _08024EA4 @ =0x000160c1
- adds r0, r6, r1
- strb r7, [r0]
- b _08024ED0
- .align 2, 0
-_08024E8C: .4byte gBattleTypeFlags
-_08024E90: .4byte gBattlescriptCurrInstr
-_08024E94: .4byte gActiveBank
-_08024E98: .4byte 0x02000000
-_08024E9C: .4byte 0x000160bc
-_08024EA0: .4byte gBattleMons
-_08024EA4: .4byte 0x000160c1
-_08024EA8:
- cmp r0, 0x1D
- bgt _08024EB8
- ldr r0, _08024EB4 @ =0x000160c1
- adds r1, r6, r0
- movs r0, 0x1
- b _08024ECE
- .align 2, 0
-_08024EB4: .4byte 0x000160c1
-_08024EB8:
- cmp r1, 0x45
- bgt _08024EC8
- ldr r0, _08024EC4 @ =0x000160c1
- adds r1, r6, r0
- movs r0, 0x2
- b _08024ECE
- .align 2, 0
-_08024EC4: .4byte 0x000160c1
-_08024EC8:
- ldr r0, _08024EE0 @ =0x000160c1
- adds r1, r6, r0
- movs r0, 0x3
-_08024ECE:
- strb r0, [r1]
-_08024ED0:
- ldr r1, _08024EE4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08024EE0: .4byte 0x000160c1
-_08024EE4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk74_hp_tresholds_2
-
- thumb_func_start atk75_8026A58
-atk75_8026A58: @ 8024EE8
- push {lr}
- sub sp, 0x4
- ldr r2, _08024F28 @ =gBankInMenu
- ldr r1, _08024F2C @ =gBankAttacker
- ldrb r0, [r1]
- strb r0, [r2]
- ldr r2, _08024F30 @ =gBattlePartyID
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r1, _08024F34 @ =gEnemyParty
- adds r0, r1
- ldr r1, _08024F38 @ =gLastUsedItem
- ldrh r1, [r1]
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0x1
- str r3, [sp]
- movs r3, 0
- bl sub_803E1B0
- ldr r1, _08024F3C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_08024F28: .4byte gBankInMenu
-_08024F2C: .4byte gBankAttacker
-_08024F30: .4byte gBattlePartyID
-_08024F34: .4byte gEnemyParty
-_08024F38: .4byte gLastUsedItem
-_08024F3C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk75_8026A58
-
- thumb_func_start sub_8024F40
-sub_8024F40: @ 8024F40
- push {r4-r6,lr}
- ldr r4, _08024F64 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r1, _08024F68 @ =gActiveBank
- strb r0, [r1]
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- cmp r0, 0x6
- bls _08024F5A
- b _08025112
-_08024F5A:
- lsls r0, 2
- ldr r1, _08024F6C @ =_08024F70
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08024F64: .4byte gBattlescriptCurrInstr
-_08024F68: .4byte gActiveBank
-_08024F6C: .4byte _08024F70
- .align 2, 0
-_08024F70:
- .4byte _08024F8C
- .4byte _08024F9C
- .4byte _08024FFC
- .4byte _0802500C
- .4byte _08025024
- .4byte _08025060
- .4byte _08025098
-_08024F8C:
- ldr r0, _08024F98 @ =gActiveBank
- ldrb r0, [r0]
- bl CancelMultiTurnMoves
- b _08025112
- .align 2, 0
-_08024F98: .4byte gActiveBank
-_08024F9C:
- ldr r1, _08024FD8 @ =gBankAttacker
- ldr r4, _08024FDC @ =gBankTarget
- ldrb r0, [r4]
- strb r0, [r1]
- ldrb r0, [r1]
- bl GetBankSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08024FE0 @ =gSideTimer
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r2, r1, r2
- ldrb r0, [r2, 0x8]
- cmp r0, 0
- beq _08024FE8
- ldr r1, _08024FE4 @ =gBattleMons
- ldrb r2, [r2, 0x9]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08024FE8
- strb r2, [r4]
- b _08025112
- .align 2, 0
-_08024FD8: .4byte gBankAttacker
-_08024FDC: .4byte gBankTarget
-_08024FE0: .4byte gSideTimer
-_08024FE4: .4byte gBattleMons
-_08024FE8:
- ldr r0, _08024FF4 @ =gBankTarget
- ldr r1, _08024FF8 @ =gActiveBank
- ldrb r1, [r1]
- strb r1, [r0]
- b _08025112
- .align 2, 0
-_08024FF4: .4byte gBankTarget
-_08024FF8: .4byte gActiveBank
-_08024FFC:
- bl CanRunFromBattle
- ldr r1, _08025008 @ =gBattleCommunication
- strb r0, [r1]
- b _08025112
- .align 2, 0
-_08025008: .4byte gBattleCommunication
-_0802500C:
- ldr r0, _0802501C @ =gCurrentMove
- ldrh r0, [r0]
- movs r1, 0
- bl sub_801B5C0
- ldr r1, _08025020 @ =gBankTarget
- strb r0, [r1]
- b _08025112
- .align 2, 0
-_0802501C: .4byte gCurrentMove
-_08025020: .4byte gBankTarget
-_08025024:
- ldr r2, _08025044 @ =gHitMarker
- ldr r1, _08025048 @ =gBitTable
- ldr r0, _0802504C @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- lsls r0, 28
- ldr r2, [r2]
- ands r2, r0
- cmp r2, 0
- beq _08025054
- ldr r1, _08025050 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1]
- b _08025112
- .align 2, 0
-_08025044: .4byte gHitMarker
-_08025048: .4byte gBitTable
-_0802504C: .4byte gActiveBank
-_08025050: .4byte gBattleCommunication
-_08025054:
- ldr r0, _0802505C @ =gBattleCommunication
- strb r2, [r0]
- b _08025112
- .align 2, 0
-_0802505C: .4byte gBattleCommunication
-_08025060:
- ldr r4, _08025090 @ =gSpecialStatuses
- ldr r3, _08025094 @ =gActiveBank
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- b _08025112
- .align 2, 0
-_08025090: .4byte gSpecialStatuses
-_08025094: .4byte gActiveBank
-_08025098:
- ldr r3, _080250B8 @ =gBattlePartyID
- ldr r0, _080250BC @ =0x02000000
- ldr r1, _080250C0 @ =0x00016018
- adds r0, r1
- ldrh r2, [r3]
- ldrb r1, [r0]
- cmp r2, r1
- beq _080250B2
- ldrh r0, [r3, 0x4]
- cmp r0, r1
- bne _08025112
- cmp r2, r0
- bne _080250C8
-_080250B2:
- ldr r1, _080250C4 @ =gActiveBank
- movs r0, 0
- b _080250CC
- .align 2, 0
-_080250B8: .4byte gBattlePartyID
-_080250BC: .4byte 0x02000000
-_080250C0: .4byte 0x00016018
-_080250C4: .4byte gActiveBank
-_080250C8:
- ldr r1, _08025120 @ =gActiveBank
- movs r0, 0x2
-_080250CC:
- strb r0, [r1]
- adds r5, r1, 0
- ldrb r2, [r5]
- lsls r1, r2, 1
- ldr r0, _08025124 @ =0x020160e8
- adds r4, r1, r0
- movs r3, 0
- ldr r1, _08025128 @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0xC
- adds r0, r1
- ldrh r0, [r0]
- ldrh r2, [r4]
- cmp r0, r2
- beq _0802510A
- adds r6, r5, 0
- movs r5, 0x58
- adds r2, r1, 0
-_080250F2:
- adds r3, 0x1
- cmp r3, 0x3
- bgt _0802510A
- lsls r1, r3, 1
- ldrb r0, [r6]
- muls r0, r5
- adds r1, r0
- adds r1, r2
- ldrh r0, [r1]
- ldrh r1, [r4]
- cmp r0, r1
- bne _080250F2
-_0802510A:
- cmp r3, 0x4
- bne _08025112
- movs r0, 0
- strh r0, [r4]
-_08025112:
- ldr r1, _0802512C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x3
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08025120: .4byte gActiveBank
-_08025124: .4byte 0x020160e8
-_08025128: .4byte gBattleMons
-_0802512C: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8024F40
-
- thumb_func_start atk77_setprotect
-atk77_setprotect: @ 8025130
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0x1
- ldr r2, _080251FC @ =gUnknown_02024C4C
- ldr r1, _08025200 @ =gBankAttacker
- ldrb r3, [r1]
- lsls r0, r3, 1
- adds r0, r2
- ldrh r0, [r0]
- mov r8, r1
- ldr r7, _08025204 @ =gDisableStructs
- cmp r0, 0xB6
- beq _08025160
- cmp r0, 0xC5
- beq _08025160
- cmp r0, 0xCB
- beq _08025160
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r7
- movs r1, 0
- strb r1, [r0, 0x8]
-_08025160:
- ldr r0, _08025208 @ =gCurrentMoveTurn
- ldrb r1, [r0]
- ldr r0, _0802520C @ =gNoOfAllBanks
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _08025170
- movs r6, 0
-_08025170:
- ldr r2, _08025210 @ =gProtectSuccessRates
- mov r5, r8
- ldrb r1, [r5]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r4, [r0, 0x8]
- lsls r4, 1
- adds r4, r2
- bl Random
- ldrh r1, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bls _08025224
- cmp r6, 0
- beq _08025224
- ldr r4, _08025214 @ =gBattleMoves
- ldr r3, _08025218 @ =gCurrentMove
- ldrh r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- cmp r0, 0x6F
- bne _080251C0
- ldr r0, _0802521C @ =gProtectStructs
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x1
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _08025220 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
-_080251C0:
- ldrh r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- cmp r0, 0x74
- bne _080251E6
- ldr r0, _0802521C @ =gProtectStructs
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _08025220 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_080251E6:
- mov r1, r8
- ldrb r0, [r1]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r7
- ldrb r0, [r1, 0x8]
- adds r0, 0x1
- strb r0, [r1, 0x8]
- b _08025246
- .align 2, 0
-_080251FC: .4byte gUnknown_02024C4C
-_08025200: .4byte gBankAttacker
-_08025204: .4byte gDisableStructs
-_08025208: .4byte gCurrentMoveTurn
-_0802520C: .4byte gNoOfAllBanks
-_08025210: .4byte gProtectSuccessRates
-_08025214: .4byte gBattleMoves
-_08025218: .4byte gCurrentMove
-_0802521C: .4byte gProtectStructs
-_08025220: .4byte gBattleCommunication
-_08025224:
- ldr r2, _08025258 @ =gDisableStructs
- ldr r0, _0802525C @ =gBankAttacker
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x8]
- ldr r1, _08025260 @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- ldr r2, _08025264 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
-_08025246:
- ldr r1, _08025268 @ =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
-_08025258: .4byte gDisableStructs
-_0802525C: .4byte gBankAttacker
-_08025260: .4byte gBattleCommunication
-_08025264: .4byte gBattleMoveFlags
-_08025268: .4byte gBattlescriptCurrInstr
- thumb_func_end atk77_setprotect
-
- thumb_func_start atk78_faintifabilitynotdamp
-atk78_faintifabilitynotdamp: @ 802526C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _08025328 @ =gBattleExecBuffer
- ldr r2, [r0]
- cmp r2, 0
- bne _08025370
- ldr r1, _0802532C @ =gBankTarget
- strb r2, [r1]
- ldr r0, _08025330 @ =gNoOfAllBanks
- ldrb r3, [r0]
- adds r5, r1, 0
- mov r8, r0
- ldr r6, _08025334 @ =gBattleMons
- cmp r2, r3
- bcs _080252B8
- adds r0, r6, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x6
- beq _080252B8
- adds r2, r3, 0
- adds r4, r6, 0
- movs r3, 0x58
-_0802529C:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r2
- bcs _080252B8
- ldrb r0, [r5]
- muls r0, r3
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _0802529C
-_080252B8:
- ldrb r0, [r5]
- mov r1, r8
- ldrb r1, [r1]
- cmp r0, r1
- bne _08025354
- ldr r4, _08025338 @ =gActiveBank
- ldr r7, _0802533C @ =gBankAttacker
- ldrb r0, [r7]
- strb r0, [r4]
- ldr r2, _08025340 @ =gBattleMoveDamage
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r0, r6
- ldrh r0, [r0, 0x28]
- str r0, [r2]
- ldr r1, _08025344 @ =0x00007fff
- movs r0, 0
- bl EmitHealthBarUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _08025348 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- movs r0, 0
- strb r0, [r5]
- mov r2, r8
- ldrb r0, [r2]
- cmp r0, 0
- beq _08025370
- adds r3, r5, 0
- ldrb r5, [r7]
- ldr r7, _0802534C @ =gBitTable
- adds r4, r0, 0
- ldr r6, _08025350 @ =gAbsentBankFlags
-_08025304:
- ldrb r2, [r3]
- cmp r2, r5
- beq _0802531A
- ldrb r0, [r6]
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r7
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- beq _08025370
-_0802531A:
- adds r0, r2, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r4
- bcc _08025304
- b _08025370
- .align 2, 0
-_08025328: .4byte gBattleExecBuffer
-_0802532C: .4byte gBankTarget
-_08025330: .4byte gNoOfAllBanks
-_08025334: .4byte gBattleMons
-_08025338: .4byte gActiveBank
-_0802533C: .4byte gBankAttacker
-_08025340: .4byte gBattleMoveDamage
-_08025344: .4byte 0x00007fff
-_08025348: .4byte gBattlescriptCurrInstr
-_0802534C: .4byte gBitTable
-_08025350: .4byte gAbsentBankFlags
-_08025354:
- ldr r1, _0802537C @ =gLastUsedAbility
- movs r0, 0x6
- strb r0, [r1]
- ldrb r0, [r5]
- movs r1, 0x58
- muls r1, r0
- adds r1, r6
- adds r1, 0x20
- ldrb r1, [r1]
- bl RecordAbilityBattle
- ldr r1, _08025380 @ =gBattlescriptCurrInstr
- ldr r0, _08025384 @ =gUnknown_081D9834
- str r0, [r1]
-_08025370:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802537C: .4byte gLastUsedAbility
-_08025380: .4byte gBattlescriptCurrInstr
-_08025384: .4byte gUnknown_081D9834
- thumb_func_end atk78_faintifabilitynotdamp
-
- thumb_func_start atk79_setuserhptozero
-atk79_setuserhptozero: @ 8025388
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _080253D4 @ =gBattleExecBuffer
- ldr r3, [r0]
- cmp r3, 0
- bne _080253CC
- ldr r4, _080253D8 @ =gActiveBank
- ldr r0, _080253DC @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r1, _080253E0 @ =gBattleMons
- ldrb r0, [r4]
- movs r2, 0x58
- muls r0, r2
- adds r0, r1
- strh r3, [r0, 0x28]
- ldrb r0, [r4]
- muls r0, r2
- adds r1, 0x28
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2A
- movs r2, 0
- movs r3, 0x2
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _080253E4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_080253CC:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080253D4: .4byte gBattleExecBuffer
-_080253D8: .4byte gActiveBank
-_080253DC: .4byte gBankAttacker
-_080253E0: .4byte gBattleMons
-_080253E4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk79_setuserhptozero
-
- thumb_func_start sub_80253E8
-sub_80253E8: @ 80253E8
- push {r4-r7,lr}
- ldr r3, _08025460 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r4, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r4, r0
- ldr r0, _08025464 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- adds r7, r3, 0
- cmp r0, 0
- beq _08025480
- ldr r0, _08025468 @ =gBankTarget
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- ldr r2, _0802546C @ =gBankAttacker
- lsls r1, 24
- lsrs r1, 24
- adds r3, r0, 0
- ldr r6, _08025470 @ =gAbsentBankFlags
- ldr r5, _08025474 @ =gBitTable
- ldr r0, _08025478 @ =gNoOfAllBanks
- mov r12, r0
- ldrb r0, [r2]
- cmp r1, r0
- bne _0802543E
-_0802542E:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r2]
- cmp r0, r1
- beq _0802542E
-_0802543E:
- ldrb r0, [r6]
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r5
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- bne _0802542E
- ldrb r0, [r3]
- mov r2, r12
- ldrb r2, [r2]
- cmp r0, r2
- bcc _0802547C
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- b _08025484
- .align 2, 0
-_08025460: .4byte gBattlescriptCurrInstr
-_08025464: .4byte gBattleTypeFlags
-_08025468: .4byte gBankTarget
-_0802546C: .4byte gBankAttacker
-_08025470: .4byte gAbsentBankFlags
-_08025474: .4byte gBitTable
-_08025478: .4byte gNoOfAllBanks
-_0802547C:
- str r4, [r7]
- b _08025484
-_08025480:
- adds r0, r2, 0x5
- str r0, [r3]
-_08025484:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80253E8
-
- thumb_func_start sub_802548C
-sub_802548C: @ 802548C
- push {r4-r6,lr}
- ldr r4, _080254E8 @ =gBattlescriptCurrInstr
- ldr r1, [r4]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r2, r0
- ldrb r0, [r1, 0x5]
- ldr r3, _080254EC @ =gBankTarget
- cmp r0, 0x1
- bne _080254B4
- ldr r0, _080254F0 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r3]
-_080254B4:
- ldr r1, _080254F4 @ =gBattleMoveDamage
- ldr r6, _080254F8 @ =gBattleMons
- ldrb r0, [r3]
- movs r5, 0x58
- muls r0, r5
- adds r0, r6
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _080254CE
- movs r0, 0x1
- str r0, [r1]
-_080254CE:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- ldrb r0, [r3]
- muls r0, r5
- adds r0, r6
- ldrh r1, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- cmp r1, r0
- bne _080254FC
- str r2, [r4]
- b _08025502
- .align 2, 0
-_080254E8: .4byte gBattlescriptCurrInstr
-_080254EC: .4byte gBankTarget
-_080254F0: .4byte gBankAttacker
-_080254F4: .4byte gBattleMoveDamage
-_080254F8: .4byte gBattleMons
-_080254FC:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_08025502:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_802548C
-
- thumb_func_start sub_8025508
-sub_8025508: @ 8025508
- push {r4-r7,lr}
- ldr r3, _0802556C @ =0x02000000
- ldr r4, _08025570 @ =gBankAttacker
- ldrb r2, [r4]
- lsls r1, r2, 1
- ldr r5, _08025574 @ =0x000160ac
- adds r0, r1, r5
- adds r0, r3
- ldrb r7, [r0]
- ldr r0, _08025578 @ =0x000160ad
- adds r1, r0
- adds r1, r3
- ldrb r0, [r1]
- lsls r0, 8
- orrs r7, r0
- lsls r2, 2
- ldr r1, _0802557C @ =0x00016100
- adds r0, r2, r1
- adds r0, r3
- ldrb r6, [r0]
- adds r5, 0x55
- adds r0, r2, r5
- adds r0, r3
- ldrb r0, [r0]
- lsls r0, 8
- orrs r6, r0
- adds r1, 0x2
- adds r0, r2, r1
- adds r0, r3
- ldrb r5, [r0]
- ldr r0, _08025580 @ =0x00016103
- adds r2, r0
- adds r2, r3
- ldrb r0, [r2]
- lsls r0, 8
- orrs r5, r0
- cmp r7, 0
- beq _08025594
- ldr r0, _08025584 @ =0x0000ffff
- cmp r7, r0
- beq _08025594
- ldr r2, _08025588 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0802558C @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r4, _08025590 @ =gCurrentMove
- strh r7, [r4]
- b _0802565C
- .align 2, 0
-_0802556C: .4byte 0x02000000
-_08025570: .4byte gBankAttacker
-_08025574: .4byte 0x000160ac
-_08025578: .4byte 0x000160ad
-_0802557C: .4byte 0x00016100
-_08025580: .4byte 0x00016103
-_08025584: .4byte 0x0000ffff
-_08025588: .4byte gHitMarker
-_0802558C: .4byte 0xfffffbff
-_08025590: .4byte gCurrentMove
-_08025594:
- cmp r6, 0
- beq _08025644
- cmp r5, 0
- beq _08025618
- ldr r0, _080255C4 @ =0x0000ffff
- cmp r6, r0
- beq _08025618
- cmp r5, r0
- beq _08025618
- ldr r2, _080255C8 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _080255CC @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _080255D4
- ldr r0, _080255D0 @ =gCurrentMove
- strh r6, [r0]
- b _080255D8
- .align 2, 0
-_080255C4: .4byte 0x0000ffff
-_080255C8: .4byte gHitMarker
-_080255CC: .4byte 0xfffffbff
-_080255D0: .4byte gCurrentMove
-_080255D4:
- ldr r0, _08025604 @ =gCurrentMove
- strh r5, [r0]
-_080255D8:
- adds r5, r0, 0
- ldrh r0, [r5]
- movs r1, 0
- bl sub_801B5C0
- ldr r1, _08025608 @ =gBankTarget
- strb r0, [r1]
- ldr r4, _0802560C @ =gBattlescriptCurrInstr
- ldr r3, _08025610 @ =gUnknown_081D6BBC
- ldr r2, _08025614 @ =gBattleMoves
- ldrh r1, [r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- str r0, [r4]
- b _080256C0
- .align 2, 0
-_08025604: .4byte gCurrentMove
-_08025608: .4byte gBankTarget
-_0802560C: .4byte gBattlescriptCurrInstr
-_08025610: .4byte gUnknown_081D6BBC
-_08025614: .4byte gBattleMoves
-_08025618:
- cmp r6, 0
- beq _08025644
- ldr r0, _08025634 @ =0x0000ffff
- cmp r6, r0
- beq _08025644
- ldr r2, _08025638 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0802563C @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r4, _08025640 @ =gCurrentMove
- strh r6, [r4]
- b _0802565C
- .align 2, 0
-_08025634: .4byte 0x0000ffff
-_08025638: .4byte gHitMarker
-_0802563C: .4byte 0xfffffbff
-_08025640: .4byte gCurrentMove
-_08025644:
- cmp r5, 0
- beq _080256A4
- ldr r0, _08025684 @ =0x0000ffff
- cmp r5, r0
- beq _080256A4
- ldr r2, _08025688 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0802568C @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r4, _08025690 @ =gCurrentMove
- strh r5, [r4]
-_0802565C:
- ldrh r0, [r4]
- movs r1, 0
- bl sub_801B5C0
- ldr r1, _08025694 @ =gBankTarget
- strb r0, [r1]
- ldr r5, _08025698 @ =gBattlescriptCurrInstr
- ldr r3, _0802569C @ =gUnknown_081D6BBC
- ldr r2, _080256A0 @ =gBattleMoves
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- str r0, [r5]
- b _080256C0
- .align 2, 0
-_08025684: .4byte 0x0000ffff
-_08025688: .4byte gHitMarker
-_0802568C: .4byte 0xfffffbff
-_08025690: .4byte gCurrentMove
-_08025694: .4byte gBankTarget
-_08025698: .4byte gBattlescriptCurrInstr
-_0802569C: .4byte gUnknown_081D6BBC
-_080256A0: .4byte gBattleMoves
-_080256A4:
- ldr r2, _080256C8 @ =gSpecialStatuses
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r1, _080256CC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_080256C0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080256C8: .4byte gSpecialStatuses
-_080256CC: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8025508
-
- thumb_func_start sub_80256D0
-sub_80256D0: @ 80256D0
- push {lr}
- ldr r2, _080256F0 @ =gBattleWeather
- ldrh r0, [r2]
- movs r1, 0x7
- ands r1, r0
- cmp r1, 0
- beq _080256FC
- ldr r2, _080256F4 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _080256F8 @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _0802570C
- .align 2, 0
-_080256F0: .4byte gBattleWeather
-_080256F4: .4byte gBattleMoveFlags
-_080256F8: .4byte gBattleCommunication
-_080256FC:
- movs r0, 0x1
- strh r0, [r2]
- ldr r0, _08025718 @ =gBattleCommunication
- strb r1, [r0, 0x5]
- ldr r0, _0802571C @ =gWishFutureKnock
- adds r0, 0x28
- movs r1, 0x5
- strb r1, [r0]
-_0802570C:
- ldr r1, _08025720 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08025718: .4byte gBattleCommunication
-_0802571C: .4byte gWishFutureKnock
-_08025720: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_80256D0
-
- thumb_func_start atk7E_setreflect
-atk7E_setreflect: @ 8025724
- push {r4-r6,lr}
- ldr r5, _08025754 @ =gBankAttacker
- ldrb r0, [r5]
- bl GetBankIdentity
- ldr r6, _08025758 @ =gSideAffecting
- movs r4, 0x1
- adds r1, r4, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r6
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08025764
- ldr r2, _0802575C @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08025760 @ =gBattleCommunication
- movs r0, 0
- b _080257C4
- .align 2, 0
-_08025754: .4byte gBankAttacker
-_08025758: .4byte gSideAffecting
-_0802575C: .4byte gBattleMoveFlags
-_08025760: .4byte gBattleCommunication
-_08025764:
- ldrb r0, [r5]
- bl GetBankIdentity
- adds r1, r4, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r6
- ldrh r0, [r1]
- movs r2, 0x1
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r5]
- bl GetBankIdentity
- ldr r2, _080257B4 @ =gSideTimer
- adds r1, r4, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strb r1, [r0]
- ldr r0, _080257B8 @ =gBattleTypeFlags
- ldrh r1, [r0]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _080257C0
- movs r0, 0x1
- bl CountAliveMons
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x2
- bne _080257C0
- ldr r0, _080257BC @ =gBattleCommunication
- strb r1, [r0, 0x5]
- b _080257C6
- .align 2, 0
-_080257B4: .4byte gSideTimer
-_080257B8: .4byte gBattleTypeFlags
-_080257BC: .4byte gBattleCommunication
-_080257C0:
- ldr r1, _080257D4 @ =gBattleCommunication
- movs r0, 0x1
-_080257C4:
- strb r0, [r1, 0x5]
-_080257C6:
- ldr r1, _080257D8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080257D4: .4byte gBattleCommunication
-_080257D8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk7E_setreflect
-
- thumb_func_start sub_80257DC
-sub_80257DC: @ 80257DC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r7, _0802581C @ =gBattleMoveFlags
- ldrb r5, [r7]
- movs r0, 0x29
- ands r0, r5
- cmp r0, 0
- bne _0802580E
- ldr r0, _08025820 @ =gStatuses3
- mov r9, r0
- ldr r1, _08025824 @ =gBankTarget
- mov r8, r1
- ldrb r4, [r1]
- lsls r0, r4, 2
- mov r2, r9
- adds r6, r0, r2
- ldr r2, [r6]
- movs r0, 0x4
- mov r12, r0
- adds r3, r2, 0
- ands r3, r0
- cmp r3, 0
- beq _0802582C
-_0802580E:
- movs r0, 0x1
- orrs r0, r5
- strb r0, [r7]
- ldr r1, _08025828 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _0802587C
- .align 2, 0
-_0802581C: .4byte gBattleMoveFlags
-_08025820: .4byte gStatuses3
-_08025824: .4byte gBankTarget
-_08025828: .4byte gBattleCommunication
-_0802582C:
- ldr r1, _08025858 @ =gBattleMons
- movs r0, 0x58
- muls r0, r4
- adds r1, r0, r1
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xC
- beq _08025848
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xC
- bne _08025860
-_08025848:
- movs r0, 0x1
- orrs r0, r5
- strb r0, [r7]
- ldr r1, _0802585C @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _0802587C
- .align 2, 0
-_08025858: .4byte gBattleMons
-_0802585C: .4byte gBattleCommunication
-_08025860:
- ldr r0, _08025890 @ =gBankAttacker
- ldrb r0, [r0]
- orrs r2, r0
- str r2, [r6]
- mov r2, r8
- ldrb r1, [r2]
- lsls r1, 2
- add r1, r9
- ldr r0, [r1]
- mov r2, r12
- orrs r0, r2
- str r0, [r1]
- ldr r0, _08025894 @ =gBattleCommunication
- strb r3, [r0, 0x5]
-_0802587C:
- ldr r1, _08025898 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08025890: .4byte gBankAttacker
-_08025894: .4byte gBattleCommunication
-_08025898: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_80257DC
-
- thumb_func_start atk80_manipulatedamage
-atk80_manipulatedamage: @ 802589C
- push {r4,lr}
- ldr r1, _080258B4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- ldrb r2, [r0, 0x1]
- adds r4, r1, 0
- cmp r2, 0x1
- beq _080258CC
- cmp r2, 0x1
- bgt _080258B8
- cmp r2, 0
- beq _080258BE
- b _0802590C
- .align 2, 0
-_080258B4: .4byte gBattlescriptCurrInstr
-_080258B8:
- cmp r2, 0x2
- beq _08025904
- b _0802590C
-_080258BE:
- ldr r1, _080258C8 @ =gBattleMoveDamage
- ldr r0, [r1]
- negs r0, r0
- b _0802590A
- .align 2, 0
-_080258C8: .4byte gBattleMoveDamage
-_080258CC:
- ldr r3, _080258F8 @ =gBattleMoveDamage
- ldr r0, [r3]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- str r0, [r3]
- cmp r0, 0
- bne _080258DE
- str r2, [r3]
-_080258DE:
- ldr r2, _080258FC @ =gBattleMons
- ldr r0, _08025900 @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2C]
- lsrs r1, r0, 1
- ldr r0, [r3]
- cmp r1, r0
- bge _0802590C
- str r1, [r3]
- b _0802590C
- .align 2, 0
-_080258F8: .4byte gBattleMoveDamage
-_080258FC: .4byte gBattleMons
-_08025900: .4byte gBankTarget
-_08025904:
- ldr r1, _08025918 @ =gBattleMoveDamage
- ldr r0, [r1]
- lsls r0, 1
-_0802590A:
- str r0, [r1]
-_0802590C:
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08025918: .4byte gBattleMoveDamage
- thumb_func_end atk80_manipulatedamage
-
- thumb_func_start atk81_setrest
-atk81_setrest: @ 802591C
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r0, _08025974 @ =gBattlescriptCurrInstr
- mov r12, r0
- ldr r1, [r0]
- ldrb r6, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r6, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r6, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r6, r0
- ldr r5, _08025978 @ =gActiveBank
- ldr r2, _0802597C @ =gBankTarget
- ldr r0, _08025980 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r2]
- strb r0, [r5]
- ldr r4, _08025984 @ =gBattleMoveDamage
- ldr r1, _08025988 @ =gBattleMons
- ldrb r0, [r2]
- movs r3, 0x58
- muls r0, r3
- adds r0, r1
- ldrh r0, [r0, 0x2C]
- negs r0, r0
- str r0, [r4]
- ldrb r0, [r2]
- adds r4, r0, 0
- muls r4, r3
- adds r0, r4, r1
- ldrh r3, [r0, 0x28]
- adds r7, r5, 0
- adds r5, r2, 0
- adds r2, r1, 0
- ldrh r0, [r0, 0x2C]
- cmp r3, r0
- bne _0802598C
- mov r0, r12
- str r6, [r0]
- b _080259DC
- .align 2, 0
-_08025974: .4byte gBattlescriptCurrInstr
-_08025978: .4byte gActiveBank
-_0802597C: .4byte gBankTarget
-_08025980: .4byte gBankAttacker
-_08025984: .4byte gBattleMoveDamage
-_08025988: .4byte gBattleMons
-_0802598C:
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r4, r0
- ldr r1, [r0]
- movs r0, 0xF8
- ands r1, r0
- cmp r1, 0
- beq _080259A8
- ldr r1, _080259A4 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _080259AC
- .align 2, 0
-_080259A4: .4byte gBattleCommunication
-_080259A8:
- ldr r0, _080259E4 @ =gBattleCommunication
- strb r1, [r0, 0x5]
-_080259AC:
- ldrb r0, [r5]
- movs r3, 0x58
- muls r0, r3
- adds r2, 0x4C
- adds r0, r2
- movs r1, 0x3
- str r1, [r0]
- ldrb r0, [r7]
- muls r0, r3
- adds r0, r2
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldr r1, _080259E8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_080259DC:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080259E4: .4byte gBattleCommunication
-_080259E8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk81_setrest
-
- thumb_func_start atk82_jumpifnotfirstturn
-atk82_jumpifnotfirstturn: @ 80259EC
- push {r4,r5,lr}
- ldr r5, _08025A20 @ =gBattlescriptCurrInstr
- ldr r4, [r5]
- ldrb r3, [r4, 0x1]
- ldrb r0, [r4, 0x2]
- lsls r0, 8
- orrs r3, r0
- ldrb r0, [r4, 0x3]
- lsls r0, 16
- orrs r3, r0
- ldrb r0, [r4, 0x4]
- lsls r0, 24
- orrs r3, r0
- ldr r2, _08025A24 @ =gDisableStructs
- ldr r0, _08025A28 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x16]
- cmp r0, 0
- beq _08025A2C
- adds r0, r4, 0x5
- str r0, [r5]
- b _08025A2E
- .align 2, 0
-_08025A20: .4byte gBattlescriptCurrInstr
-_08025A24: .4byte gDisableStructs
-_08025A28: .4byte gBankAttacker
-_08025A2C:
- str r3, [r5]
-_08025A2E:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end atk82_jumpifnotfirstturn
-
- thumb_func_start sub_8025A34
-sub_8025A34: @ 8025A34
- ldr r1, _08025A40 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_08025A40: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8025A34
-
- thumb_func_start sub_8025A44
-sub_8025A44: @ 8025A44
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r2, 0
- ldr r0, _08025A9C @ =gNoOfAllBanks
- ldrb r1, [r0]
- mov r8, r0
- cmp r2, r1
- bge _08025AB8
- ldr r0, _08025AA0 @ =gBattleMons
- mov r12, r0
- movs r0, 0x58
- muls r0, r3
- add r0, r12
- adds r5, r0, 0
- adds r5, 0x20
- ldr r6, _08025AA4 @ =0x02016003
- movs r3, 0
- ldr r7, _08025AA8 @ =gBattleCommunication
- adds r4, r1, 0
-_08025A70:
- mov r0, r12
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x70
- ands r0, r1
- cmp r0, 0
- beq _08025AB0
- ldrb r0, [r5]
- cmp r0, 0x2B
- beq _08025AB0
- movs r3, 0
- strb r2, [r6]
- ldr r1, _08025AAC @ =gBankTarget
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _08025AD0
- cmp r0, r2
- beq _08025AC4
- movs r0, 0x1
- strb r0, [r7, 0x5]
- b _08025AB8
- .align 2, 0
-_08025A9C: .4byte gNoOfAllBanks
-_08025AA0: .4byte gBattleMons
-_08025AA4: .4byte 0x02016003
-_08025AA8: .4byte gBattleCommunication
-_08025AAC: .4byte gBankTarget
-_08025AB0:
- adds r3, 0x58
- adds r2, 0x1
- cmp r2, r4
- blt _08025A70
-_08025AB8:
- mov r1, r8
- ldrb r1, [r1]
- cmp r2, r1
- beq _08025AD4
- movs r0, 0x1
- b _08025AD6
-_08025AC4:
- ldr r0, _08025ACC @ =gBattleCommunication
- strb r3, [r0, 0x5]
- b _08025AB8
- .align 2, 0
-_08025ACC: .4byte gBattleCommunication
-_08025AD0:
- strb r2, [r1]
- b _08025AB8
-_08025AD4:
- movs r0, 0
-_08025AD6:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8025A44
-
- thumb_func_start sub_8025AE0
-sub_8025AE0: @ 8025AE0
- push {r4-r6,lr}
- ldr r5, _08025B0C @ =gBattlescriptCurrInstr
- ldr r1, [r5]
- ldrb r4, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r4, r0
- ldr r6, _08025B10 @ =gBankTarget
- ldrb r0, [r6]
- bl sub_8025A44
- lsls r0, 24
- cmp r0, 0
- beq _08025B14
- str r4, [r5]
- b _08025B56
- .align 2, 0
-_08025B0C: .4byte gBattlescriptCurrInstr
-_08025B10: .4byte gBankTarget
-_08025B14:
- ldr r1, _08025B44 @ =gBattleMons
- ldrb r3, [r6]
- movs r0, 0x58
- muls r0, r3
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- adds r1, r0, 0
- cmp r1, 0xF
- beq _08025B2C
- cmp r1, 0x48
- bne _08025B50
-_08025B2C:
- ldr r2, _08025B48 @ =gLastUsedAbility
- strb r0, [r2]
- ldr r1, _08025B4C @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- str r4, [r5]
- ldrb r1, [r2]
- adds r0, r3, 0
- bl RecordAbilityBattle
- b _08025B56
- .align 2, 0
-_08025B44: .4byte gBattleMons
-_08025B48: .4byte gLastUsedAbility
-_08025B4C: .4byte gBattleCommunication
-_08025B50:
- ldr r0, [r5]
- adds r0, 0x5
- str r0, [r5]
-_08025B56:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8025AE0
-
- thumb_func_start sub_8025B5C
-sub_8025B5C: @ 8025B5C
- push {r4,r5,lr}
- ldr r5, _08025B84 @ =gDisableStructs
- ldr r4, _08025B88 @ =gBankAttacker
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1, 0x9]
- cmp r0, 0x3
- bne _08025B94
- ldr r2, _08025B8C @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08025B90 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08025BBE
- .align 2, 0
-_08025B84: .4byte gDisableStructs
-_08025B88: .4byte gBankAttacker
-_08025B8C: .4byte gBattleMoveFlags
-_08025B90: .4byte gBattleCommunication
-_08025B94:
- adds r0, 0x1
- movs r3, 0
- strb r0, [r1, 0x9]
- ldr r2, _08025BCC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r2]
- movs r0, 0x1
- strb r0, [r2, 0x1]
- strb r0, [r2, 0x2]
- strb r0, [r2, 0x3]
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r0, [r0, 0x9]
- strb r0, [r2, 0x4]
- movs r0, 0xFF
- strb r0, [r2, 0x5]
- ldr r0, _08025BD0 @ =gBattleCommunication
- strb r3, [r0, 0x5]
-_08025BBE:
- ldr r1, _08025BD4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08025BCC: .4byte gBattleTextBuff1
-_08025BD0: .4byte gBattleCommunication
-_08025BD4: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8025B5C
-
- thumb_func_start atk86_stockpiletobasedamage
-atk86_stockpiletobasedamage: @ 8025BD8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- ldr r3, _08025C10 @ =gBattlescriptCurrInstr
- ldr r1, [r3]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r2, r0
- ldr r7, _08025C14 @ =gDisableStructs
- ldr r6, _08025C18 @ =gBankAttacker
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r0, [r0, 0x9]
- cmp r0, 0
- bne _08025C1C
- str r2, [r3]
- b _08025CC2
- .align 2, 0
-_08025C10: .4byte gBattlescriptCurrInstr
-_08025C14: .4byte gDisableStructs
-_08025C18: .4byte gBankAttacker
-_08025C1C:
- ldr r0, _08025CD0 @ =gBattleCommunication
- ldrb r0, [r0, 0x6]
- cmp r0, 0x1
- beq _08025CA8
- ldr r0, _08025CD4 @ =gBattleMoveDamage
- mov r8, r0
- ldr r4, _08025CD8 @ =gSideAffecting
- ldr r5, _08025CDC @ =gBankTarget
- ldrb r0, [r5]
- bl GetBankIdentity
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldrb r0, [r6]
- movs r4, 0x58
- muls r0, r4
- ldr r2, _08025CE0 @ =gBattleMons
- adds r0, r2
- ldrb r1, [r5]
- muls r1, r4
- adds r1, r2
- ldr r2, _08025CE4 @ =gCurrentMove
- ldrh r2, [r2]
- movs r4, 0
- str r4, [sp]
- str r4, [sp, 0x4]
- ldrb r4, [r6]
- str r4, [sp, 0x8]
- ldrb r4, [r5]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- ldrb r2, [r6]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r7
- ldrb r1, [r1, 0x9]
- adds r3, r0, 0
- muls r3, r1
- mov r1, r8
- str r3, [r1]
- ldr r2, _08025CE8 @ =0x02000000
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r0, [r0, 0x9]
- ldr r1, _08025CEC @ =0x00016002
- adds r2, r1
- strb r0, [r2]
- ldr r1, _08025CF0 @ =gProtectStructs
- ldrb r0, [r6]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- bge _08025CA8
- lsls r0, r3, 4
- subs r0, r3
- movs r1, 0xA
- bl __divsi3
- mov r1, r8
- str r0, [r1]
-_08025CA8:
- ldr r2, _08025CF4 @ =gDisableStructs
- ldr r0, _08025CF8 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x9]
- ldr r1, _08025CFC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08025CC2:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08025CD0: .4byte gBattleCommunication
-_08025CD4: .4byte gBattleMoveDamage
-_08025CD8: .4byte gSideAffecting
-_08025CDC: .4byte gBankTarget
-_08025CE0: .4byte gBattleMons
-_08025CE4: .4byte gCurrentMove
-_08025CE8: .4byte 0x02000000
-_08025CEC: .4byte 0x00016002
-_08025CF0: .4byte gProtectStructs
-_08025CF4: .4byte gDisableStructs
-_08025CF8: .4byte gBankAttacker
-_08025CFC: .4byte gBattlescriptCurrInstr
- thumb_func_end atk86_stockpiletobasedamage
-
- thumb_func_start sub_8025D00
-sub_8025D00: @ 8025D00
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _08025D40 @ =gBattlescriptCurrInstr
- ldr r1, [r7]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r2, r0
- ldr r0, _08025D44 @ =gDisableStructs
- mov r8, r0
- ldr r6, _08025D48 @ =gBankAttacker
- ldrb r3, [r6]
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- mov r1, r8
- adds r4, r0, r1
- ldrb r1, [r4, 0x9]
- cmp r1, 0
- bne _08025D50
- str r2, [r7]
- ldr r0, _08025D4C @ =gBattleCommunication
- strb r1, [r0, 0x5]
- b _08025DD0
- .align 2, 0
-_08025D40: .4byte gBattlescriptCurrInstr
-_08025D44: .4byte gDisableStructs
-_08025D48: .4byte gBankAttacker
-_08025D4C: .4byte gBattleCommunication
-_08025D50:
- ldr r1, _08025D74 @ =gBattleMons
- movs r0, 0x58
- muls r0, r3
- adds r1, r0, r1
- ldrh r0, [r1, 0x2C]
- ldrh r3, [r1, 0x28]
- cmp r0, r3
- bne _08025D80
- movs r0, 0
- strb r0, [r4, 0x9]
- str r2, [r7]
- ldr r1, _08025D78 @ =gBankTarget
- ldrb r0, [r6]
- strb r0, [r1]
- ldr r1, _08025D7C @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08025DD0
- .align 2, 0
-_08025D74: .4byte gBattleMons
-_08025D78: .4byte gBankTarget
-_08025D7C: .4byte gBattleCommunication
-_08025D80:
- ldr r5, _08025DDC @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- ldrb r1, [r4, 0x9]
- movs r2, 0x3
- subs r2, r1
- movs r4, 0x1
- adds r1, r4, 0
- lsls r1, r2
- bl __divsi3
- str r0, [r5]
- cmp r0, 0
- bne _08025D9C
- str r4, [r5]
-_08025D9C:
- ldr r0, [r5]
- negs r0, r0
- str r0, [r5]
- ldr r2, _08025DE0 @ =0x02000000
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x9]
- ldr r1, _08025DE4 @ =0x00016002
- adds r2, r1
- movs r3, 0
- strb r0, [r2]
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r8
- strb r3, [r0, 0x9]
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- ldr r1, _08025DE8 @ =gBankTarget
- ldrb r0, [r6]
- strb r0, [r1]
-_08025DD0:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08025DDC: .4byte gBattleMoveDamage
-_08025DE0: .4byte 0x02000000
-_08025DE4: .4byte 0x00016002
-_08025DE8: .4byte gBankTarget
- thumb_func_end sub_8025D00
-
- thumb_func_start atk88_negativedamage
-atk88_negativedamage: @ 8025DEC
- push {lr}
- ldr r2, _08025E14 @ =gBattleMoveDamage
- ldr r0, _08025E18 @ =gHP_dealt
- ldr r0, [r0]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- negs r0, r0
- str r0, [r2]
- cmp r0, 0
- bne _08025E08
- movs r0, 0x1
- negs r0, r0
- str r0, [r2]
-_08025E08:
- ldr r1, _08025E1C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08025E14: .4byte gBattleMoveDamage
-_08025E18: .4byte gHP_dealt
-_08025E1C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk88_negativedamage
-
- thumb_func_start sub_8025E20
-sub_8025E20: @ 8025E20
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r8, r3
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r5, r2, 24
- movs r0, 0
- mov r9, r0
- mov r10, r0
- movs r0, 0x40
- ands r0, r5
- cmp r0, 0
- beq _08025E54
- ldr r0, _08025E4C @ =gActiveBank
- ldr r1, _08025E50 @ =gBankAttacker
- b _08025E58
- .align 2, 0
-_08025E4C: .4byte gActiveBank
-_08025E50: .4byte gBankAttacker
-_08025E54:
- ldr r0, _08025EF8 @ =gActiveBank
- ldr r1, _08025EFC @ =gBankTarget
-_08025E58:
- ldrb r1, [r1]
- strb r1, [r0]
- movs r0, 0xBF
- ands r5, r0
- movs r0, 0x80
- ands r0, r5
- cmp r0, 0
- beq _08025E72
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08025E72:
- movs r0, 0x7F
- ands r5, r0
- movs r0, 0x20
- ands r0, r5
- cmp r0, 0
- beq _08025E88
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
-_08025E88:
- movs r0, 0xDF
- ands r5, r0
- ldr r1, _08025F00 @ =gBattleTextBuff1
- movs r4, 0
- movs r2, 0xFD
- strb r2, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- strb r7, [r1, 0x2]
- movs r3, 0x1
- negs r3, r3
- mov r12, r3
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- lsls r0, r6, 24
- cmp r0, 0
- blt _08025EAC
- b _080261B0
-_08025EAC:
- ldr r4, _08025F04 @ =gSideTimer
- ldr r1, _08025EF8 @ =gActiveBank
- ldrb r0, [r1]
- bl GetBankIdentity
- movs r1, 0x1
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x2]
- cmp r0, 0
- beq _08025F54
- mov r2, r9
- cmp r2, 0
- bne _08025F54
- ldr r0, _08025F08 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xAE
- beq _08025F84
- cmp r5, 0x1
- bne _08025F74
- ldr r4, _08025F0C @ =gSpecialStatuses
- ldr r3, _08025EF8 @ =gActiveBank
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- lsls r0, 31
- cmp r0, 0
- beq _08025F14
- ldr r0, _08025F10 @ =gBattlescriptCurrInstr
- mov r4, r8
- str r4, [r0]
- b _08025F74
- .align 2, 0
-_08025EF8: .4byte gActiveBank
-_08025EFC: .4byte gBankTarget
-_08025F00: .4byte gBattleTextBuff1
-_08025F04: .4byte gSideTimer
-_08025F08: .4byte gCurrentMove
-_08025F0C: .4byte gSpecialStatuses
-_08025F10: .4byte gBattlescriptCurrInstr
-_08025F14:
- mov r0, r8
- bl b_movescr_stack_push
- ldr r0, _08025F40 @ =0x02000000
- ldr r6, _08025F44 @ =gActiveBank
- ldrb r1, [r6]
- ldr r2, _08025F48 @ =0x00016003
- adds r0, r2
- strb r1, [r0]
- ldr r1, _08025F4C @ =gBattlescriptCurrInstr
- ldr r0, _08025F50 @ =gUnknown_081D9128
- str r0, [r1]
- ldrb r1, [r6]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _08025F74
- .align 2, 0
-_08025F40: .4byte 0x02000000
-_08025F44: .4byte gActiveBank
-_08025F48: .4byte 0x00016003
-_08025F4C: .4byte gBattlescriptCurrInstr
-_08025F50: .4byte gUnknown_081D9128
-_08025F54:
- ldr r0, _08025F78 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xAE
- beq _08025F84
- mov r3, r10
- cmp r3, 0x1
- beq _08025F84
- movs r0, 0
- bl sub_801C108
- lsls r0, 24
- cmp r0, 0
- beq _08025F84
- ldr r1, _08025F7C @ =gBattlescriptCurrInstr
- ldr r0, _08025F80 @ =BattleScript_1D83D6
- str r0, [r1]
-_08025F74:
- movs r0, 0x1
- b _080262A4
- .align 2, 0
-_08025F78: .4byte gCurrentMove
-_08025F7C: .4byte gBattlescriptCurrInstr
-_08025F80: .4byte BattleScript_1D83D6
-_08025F84:
- ldr r2, _08025FCC @ =gBattleMons
- ldr r1, _08025FD0 @ =gActiveBank
- ldrb r3, [r1]
- movs r4, 0x58
- adds r0, r3, 0
- muls r0, r4
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- mov r10, r2
- cmp r0, 0x1D
- beq _08025FA0
- cmp r0, 0x49
- bne _08026040
-_08025FA0:
- mov r0, r9
- cmp r0, 0
- bne _08026040
- ldr r0, _08025FD4 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xAE
- beq _08026040
- cmp r5, 0x1
- bne _08025F74
- ldr r4, _08025FD8 @ =gSpecialStatuses
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _08025FE0
- ldr r0, _08025FDC @ =gBattlescriptCurrInstr
- mov r1, r8
- str r1, [r0]
- b _08025F74
- .align 2, 0
-_08025FCC: .4byte gBattleMons
-_08025FD0: .4byte gActiveBank
-_08025FD4: .4byte gCurrentMove
-_08025FD8: .4byte gSpecialStatuses
-_08025FDC: .4byte gBattlescriptCurrInstr
-_08025FE0:
- mov r0, r8
- bl b_movescr_stack_push
- ldr r0, _08026028 @ =0x02000000
- ldr r2, _0802602C @ =gActiveBank
- ldrb r1, [r2]
- ldr r3, _08026030 @ =0x00016003
- adds r0, r3
- strb r1, [r0]
- ldr r1, _08026034 @ =gBattlescriptCurrInstr
- ldr r0, _08026038 @ =gUnknown_081D989B
- str r0, [r1]
- ldr r1, _0802603C @ =gLastUsedAbility
- ldrb r0, [r2]
- movs r6, 0x58
- muls r0, r6
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- ldrb r1, [r1]
- bl RecordAbilityBattle
- ldr r0, _0802602C @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _08025F74
- .align 2, 0
-_08026028: .4byte 0x02000000
-_0802602C: .4byte gActiveBank
-_08026030: .4byte 0x00016003
-_08026034: .4byte gBattlescriptCurrInstr
-_08026038: .4byte gUnknown_081D989B
-_0802603C: .4byte gLastUsedAbility
-_08026040:
- ldr r1, _08026090 @ =gActiveBank
- ldrb r0, [r1]
- movs r4, 0x58
- muls r0, r4
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x33
- bne _080260A8
- mov r2, r9
- cmp r2, 0
- bne _080260A8
- cmp r7, 0x6
- bne _080260A8
- cmp r5, 0x1
- bne _08025F74
- mov r0, r8
- bl b_movescr_stack_push
- ldr r0, _08026094 @ =0x02000000
- ldr r3, _08026090 @ =gActiveBank
- ldrb r1, [r3]
- ldr r6, _08026098 @ =0x00016003
- adds r0, r6
- strb r1, [r0]
- ldr r1, _0802609C @ =gBattlescriptCurrInstr
- ldr r0, _080260A0 @ =gUnknown_081D9903
- str r0, [r1]
- ldr r1, _080260A4 @ =gLastUsedAbility
- ldrb r0, [r3]
- muls r0, r4
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r3]
- ldrb r1, [r1]
- bl RecordAbilityBattle
- b _08025F74
- .align 2, 0
-_08026090: .4byte gActiveBank
-_08026094: .4byte 0x02000000
-_08026098: .4byte 0x00016003
-_0802609C: .4byte gBattlescriptCurrInstr
-_080260A0: .4byte gUnknown_081D9903
-_080260A4: .4byte gLastUsedAbility
-_080260A8:
- ldr r1, _080260FC @ =gActiveBank
- ldrb r0, [r1]
- movs r4, 0x58
- muls r0, r4
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x34
- bne _08026114
- mov r2, r9
- cmp r2, 0
- bne _08026114
- cmp r7, 0x1
- bne _08026114
- cmp r5, 0x1
- beq _080260CA
- b _08025F74
-_080260CA:
- mov r0, r8
- bl b_movescr_stack_push
- ldr r0, _08026100 @ =0x02000000
- ldr r3, _080260FC @ =gActiveBank
- ldrb r1, [r3]
- ldr r6, _08026104 @ =0x00016003
- adds r0, r6
- strb r1, [r0]
- ldr r1, _08026108 @ =gBattlescriptCurrInstr
- ldr r0, _0802610C @ =gUnknown_081D9903
- str r0, [r1]
- ldr r1, _08026110 @ =gLastUsedAbility
- ldrb r0, [r3]
- muls r0, r4
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r3]
- ldrb r1, [r1]
- bl RecordAbilityBattle
- b _08025F74
- .align 2, 0
-_080260FC: .4byte gActiveBank
-_08026100: .4byte 0x02000000
-_08026104: .4byte 0x00016003
-_08026108: .4byte gBattlescriptCurrInstr
-_0802610C: .4byte gUnknown_081D9903
-_08026110: .4byte gLastUsedAbility
-_08026114:
- ldr r0, _080261A0 @ =gActiveBank
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x13
- bne _0802612C
- cmp r5, 0
- bne _0802612C
- b _08025F74
-_0802612C:
- lsls r0, r6, 24
- asrs r0, 28
- movs r1, 0x7
- ands r0, r1
- negs r0, r0
- lsls r0, 24
- ldr r3, _080261A4 @ =gBattleTextBuff2
- movs r4, 0
- movs r1, 0xFD
- strb r1, [r3]
- movs r2, 0x1
- lsrs r6, r0, 24
- asrs r0, 24
- subs r1, 0xFF
- cmp r0, r1
- bne _08026156
- strb r4, [r3, 0x1]
- movs r0, 0xD3
- strb r0, [r3, 0x2]
- strb r4, [r3, 0x3]
- movs r2, 0x4
-_08026156:
- adds r0, r2, r3
- strb r4, [r0]
- adds r2, 0x1
- adds r1, r2, r3
- movs r0, 0xD4
- strb r0, [r1]
- adds r2, 0x1
- adds r0, r2, r3
- strb r4, [r0]
- adds r2, 0x1
- adds r1, r2, r3
- movs r0, 0xFF
- strb r0, [r1]
- ldr r1, _080261A0 @ =gActiveBank
- ldrb r2, [r1]
- movs r0, 0x58
- muls r0, r2
- adds r0, r7, r0
- mov r1, r10
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08026206
- movs r1, 0
- ldr r0, _080261A8 @ =gBankTarget
- ldrb r0, [r0]
- ldr r3, _080261AC @ =gBattleCommunication
- mov r8, r3
- cmp r0, r2
- bne _0802619A
- movs r1, 0x1
-_0802619A:
- mov r4, r8
- strb r1, [r4, 0x5]
- b _08026234
- .align 2, 0
-_080261A0: .4byte gActiveBank
-_080261A4: .4byte gBattleTextBuff2
-_080261A8: .4byte gBankTarget
-_080261AC: .4byte gBattleCommunication
-_080261B0:
- asrs r6, r0, 28
- movs r0, 0x7
- ands r6, r0
- ldr r3, _08026210 @ =gBattleTextBuff2
- strb r2, [r3]
- movs r2, 0x1
- cmp r6, 0x2
- bne _080261CA
- strb r4, [r3, 0x1]
- movs r0, 0xD1
- strb r0, [r3, 0x2]
- strb r4, [r3, 0x3]
- movs r2, 0x4
-_080261CA:
- adds r0, r2, r3
- strb r4, [r0]
- adds r2, 0x1
- adds r1, r2, r3
- movs r0, 0xD2
- strb r0, [r1]
- adds r2, 0x1
- adds r0, r2, r3
- strb r4, [r0]
- adds r2, 0x1
- adds r1, r2, r3
- ldrb r0, [r1]
- mov r2, r12
- orrs r0, r2
- strb r0, [r1]
- ldr r2, _08026214 @ =gBattleMons
- ldr r4, _08026218 @ =gActiveBank
- ldrb r3, [r4]
- movs r0, 0x58
- muls r0, r3
- adds r0, r7, r0
- adds r1, r2, 0
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- mov r10, r2
- cmp r0, 0xC
- bne _08026220
-_08026206:
- ldr r1, _0802621C @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- mov r8, r1
- b _08026234
- .align 2, 0
-_08026210: .4byte gBattleTextBuff2
-_08026214: .4byte gBattleMons
-_08026218: .4byte gActiveBank
-_0802621C: .4byte gBattleCommunication
-_08026220:
- movs r1, 0
- ldr r0, _080262B4 @ =gBankTarget
- ldrb r0, [r0]
- ldr r2, _080262B8 @ =gBattleCommunication
- mov r8, r2
- cmp r0, r3
- bne _08026230
- movs r1, 0x1
-_08026230:
- mov r3, r8
- strb r1, [r3, 0x5]
-_08026234:
- ldr r2, _080262BC @ =gActiveBank
- ldrb r0, [r2]
- movs r4, 0x58
- adds r1, r0, 0
- muls r1, r4
- adds r1, r7, r1
- mov r3, r10
- adds r3, 0x18
- adds r1, r3
- lsls r0, r6, 24
- asrs r0, 24
- ldrb r6, [r1]
- adds r0, r6
- strb r0, [r1]
- ldrb r0, [r2]
- muls r0, r4
- adds r0, r7, r0
- adds r1, r0, r3
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0
- bge _08026264
- movs r0, 0
- strb r0, [r1]
-_08026264:
- ldr r1, _080262BC @ =gActiveBank
- ldrb r0, [r1]
- muls r0, r4
- adds r0, r7, r0
- adds r1, r0, r3
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _0802627A
- movs r0, 0xC
- strb r0, [r1]
-_0802627A:
- mov r2, r8
- ldrb r0, [r2, 0x5]
- cmp r0, 0x2
- bne _080262A2
- movs r3, 0x1
- ands r3, r5
- cmp r3, 0
- beq _08026294
- ldr r0, _080262C0 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
-_08026294:
- mov r4, r8
- ldrb r0, [r4, 0x5]
- cmp r0, 0x2
- bne _080262A2
- cmp r3, 0
- bne _080262A2
- b _08025F74
-_080262A2:
- movs r0, 0
-_080262A4:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080262B4: .4byte gBankTarget
-_080262B8: .4byte gBattleCommunication
-_080262BC: .4byte gActiveBank
-_080262C0: .4byte gBattleMoveFlags
- thumb_func_end sub_8025E20
-
- thumb_func_start atk89_statbuffchange
-atk89_statbuffchange: @ 80262C4
- push {r4,r5,lr}
- ldr r5, _0802630C @ =gBattlescriptCurrInstr
- ldr r2, [r5]
- ldrb r3, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r3, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r3, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r3, r0
- ldr r0, _08026310 @ =0x02000000
- ldr r1, _08026314 @ =0x0001601e
- adds r0, r1
- ldrb r4, [r0]
- movs r0, 0xF0
- ands r0, r4
- lsls r0, 24
- asrs r0, 24
- movs r1, 0xF
- ands r1, r4
- ldrb r2, [r2, 0x1]
- bl sub_8025E20
- lsls r0, 24
- cmp r0, 0
- bne _08026304
- ldr r0, [r5]
- adds r0, 0x6
- str r0, [r5]
-_08026304:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802630C: .4byte gBattlescriptCurrInstr
-_08026310: .4byte 0x02000000
-_08026314: .4byte 0x0001601e
- thumb_func_end atk89_statbuffchange
-
- thumb_func_start atk8A_normalisebuffs
-atk8A_normalisebuffs: @ 8026318
- push {r4-r7,lr}
- movs r2, 0
- ldr r0, _08026360 @ =gNoOfAllBanks
- ldrb r1, [r0]
- ldr r0, _08026364 @ =gBattlescriptCurrInstr
- mov r12, r0
- cmp r2, r1
- bge _08026350
- ldr r0, _08026368 @ =gBattleMons
- movs r4, 0x6
- adds r5, r1, 0
- movs r7, 0x58
- adds r6, r0, 0
- adds r6, 0x18
-_08026334:
- adds r3, r2, 0x1
- movs r1, 0x7
- adds r0, r2, 0
- muls r0, r7
- adds r0, r6
- adds r0, 0x7
-_08026340:
- strb r4, [r0]
- subs r0, 0x1
- subs r1, 0x1
- cmp r1, 0
- bge _08026340
- adds r2, r3, 0
- cmp r2, r5
- blt _08026334
-_08026350:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08026360: .4byte gNoOfAllBanks
-_08026364: .4byte gBattlescriptCurrInstr
-_08026368: .4byte gBattleMons
- thumb_func_end atk8A_normalisebuffs
-
- thumb_func_start atk8B_setbide
-atk8B_setbide: @ 802636C
- push {r4,r5,lr}
- ldr r4, _080263C4 @ =gBattleMons
- ldr r3, _080263C8 @ =gBankAttacker
- ldrb r0, [r3]
- movs r5, 0x58
- adds r2, r0, 0
- muls r2, r5
- adds r4, 0x50
- adds r2, r4
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 5
- orrs r0, r1
- str r0, [r2]
- ldr r1, _080263CC @ =gLockedMove
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldr r1, _080263D0 @ =gCurrentMove
- ldrh r1, [r1]
- movs r2, 0
- strh r1, [r0]
- ldr r1, _080263D4 @ =gTakenDmg
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- str r2, [r0]
- ldrb r0, [r3]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r4
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 2
- orrs r0, r2
- str r0, [r1]
- ldr r1, _080263D8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080263C4: .4byte gBattleMons
-_080263C8: .4byte gBankAttacker
-_080263CC: .4byte gLockedMove
-_080263D0: .4byte gCurrentMove
-_080263D4: .4byte gTakenDmg
-_080263D8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk8B_setbide
-
- thumb_func_start atk8C_confuseifrepeatingattackends
-atk8C_confuseifrepeatingattackends: @ 80263DC
- push {lr}
- ldr r1, _0802640C @ =gBattleMons
- ldr r0, _08026410 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0xC0
- lsls r1, 4
- ands r0, r1
- cmp r0, 0
- bne _080263FE
- ldr r1, _08026414 @ =gBattleCommunication
- movs r0, 0x75
- strb r0, [r1, 0x3]
-_080263FE:
- ldr r1, _08026418 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802640C: .4byte gBattleMons
-_08026410: .4byte gBankAttacker
-_08026414: .4byte gBattleCommunication
-_08026418: .4byte gBattlescriptCurrInstr
- thumb_func_end atk8C_confuseifrepeatingattackends
-
- thumb_func_start atk8D_setloopcounter
-atk8D_setloopcounter: @ 802641C
- push {r4,r5,lr}
- ldr r0, _08026430 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r1, [r0, 0x1]
- cmp r1, 0
- beq _08026438
- ldr r0, _08026434 @ =gMultiHitCounter
- strb r1, [r0]
- b _08026452
- .align 2, 0
-_08026430: .4byte gBattlescriptCurrInstr
-_08026434: .4byte gMultiHitCounter
-_08026438:
- ldr r4, _08026460 @ =gMultiHitCounter
- bl Random
- movs r5, 0x3
- ands r0, r5
- strb r0, [r4]
- cmp r0, 0x1
- bls _0802644E
- bl Random
- ands r0, r5
-_0802644E:
- adds r0, 0x2
- strb r0, [r4]
-_08026452:
- ldr r1, _08026464 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08026460: .4byte gMultiHitCounter
-_08026464: .4byte gBattlescriptCurrInstr
- thumb_func_end atk8D_setloopcounter
-
- thumb_func_start sub_8026468
-sub_8026468: @ 8026468
- push {r4,lr}
- ldr r1, _080264A8 @ =0x02000000
- ldr r0, _080264AC @ =0x000160e0
- adds r2, r1, r0
- movs r3, 0
- movs r0, 0xFD
- strb r0, [r2]
- ldr r2, _080264B0 @ =0x000160e1
- adds r0, r1, r2
- movs r2, 0x1
- strb r2, [r0]
- ldr r4, _080264B4 @ =0x000160e2
- adds r0, r1, r4
- strb r2, [r0]
- adds r4, 0x1
- adds r0, r1, r4
- strb r2, [r0]
- ldr r2, _080264B8 @ =0x000160e4
- adds r0, r1, r2
- strb r3, [r0]
- adds r4, 0x2
- adds r1, r4
- movs r0, 0xFF
- strb r0, [r1]
- ldr r1, _080264BC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080264A8: .4byte 0x02000000
-_080264AC: .4byte 0x000160e0
-_080264B0: .4byte 0x000160e1
-_080264B4: .4byte 0x000160e2
-_080264B8: .4byte 0x000160e4
-_080264BC: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8026468
-
- thumb_func_start sub_80264C0
-sub_80264C0: @ 80264C0
- push {r4-r7,lr}
- ldr r6, _080264F4 @ =gBattleMons
- ldr r7, _080264F8 @ =gBankAttacker
- ldrb r0, [r7]
- movs r5, 0x58
- adds r1, r0, 0
- muls r1, r5
- adds r1, r6
- adds r1, 0x2A
- ldr r4, _080264FC @ =gBankTarget
- ldrb r3, [r4]
- adds r0, r3, 0
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bcc _0802650C
- ldr r0, _08026500 @ =0x02000000
- ldr r2, _08026504 @ =0x00016064
- adds r1, r3, r2
- adds r1, r0
- ldr r2, _08026508 @ =gBattlePartyID
- lsls r0, r3, 1
- b _08026568
- .align 2, 0
-_080264F4: .4byte gBattleMons
-_080264F8: .4byte gBankAttacker
-_080264FC: .4byte gBankTarget
-_08026500: .4byte 0x02000000
-_08026504: .4byte 0x00016064
-_08026508: .4byte gBattlePartyID
-_0802650C:
- bl Random
- movs r3, 0xFF
- ands r3, r0
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r2, [r0]
- ldrb r4, [r4]
- adds r0, r4, 0
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r1, [r0]
- adds r2, r1
- adds r0, r3, 0
- muls r0, r2
- asrs r0, 8
- adds r0, 0x1
- lsrs r1, 2
- cmp r0, r1
- bhi _0802655C
- ldr r3, _08026558 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- movs r0, 0
- b _08026576
- .align 2, 0
-_08026558: .4byte gBattlescriptCurrInstr
-_0802655C:
- ldr r0, _0802657C @ =0x02000000
- ldr r2, _08026580 @ =0x00016064
- adds r1, r4, r2
- adds r1, r0
- ldr r2, _08026584 @ =gBattlePartyID
- lsls r0, r4, 1
-_08026568:
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1]
- ldr r1, _08026588 @ =gBattlescriptCurrInstr
- ldr r0, _0802658C @ =gUnknown_081D90FC
- str r0, [r1]
- movs r0, 0x1
-_08026576:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0802657C: .4byte 0x02000000
-_08026580: .4byte 0x00016064
-_08026584: .4byte gBattlePartyID
-_08026588: .4byte gBattlescriptCurrInstr
-_0802658C: .4byte gUnknown_081D90FC
- thumb_func_end sub_80264C0
-
- thumb_func_start sub_8026590
-sub_8026590: @ 8026590
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, _08026628 @ =gBattleTypeFlags
- ldrh r1, [r4]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _080265A4
- b _0802687C
-_080265A4:
- ldr r5, _0802662C @ =gBankTarget
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- ldr r1, _08026630 @ =gEnemyParty
- mov r8, r1
- cmp r0, 0
- bne _080265BA
- ldr r2, _08026634 @ =gPlayerParty
- mov r8, r2
-_080265BA:
- ldrh r1, [r4]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08026638
- movs r7, 0
- movs r6, 0
- ldrb r0, [r5]
- bl sub_803FC34
- lsls r0, 24
- lsrs r0, 24
- bl sub_803FBFC
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _080265E0
- movs r6, 0x3
-_080265E0:
- adds r5, r6, 0
- adds r0, r5, 0x3
- cmp r5, r0
- bge _08026678
-_080265E8:
- 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 _0802661A
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0802661A
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0802661A
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_0802661A:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r6, 0x3
- cmp r5, r0
- blt _080265E8
- b _08026678
- .align 2, 0
-_08026628: .4byte gBattleTypeFlags
-_0802662C: .4byte gBankTarget
-_08026630: .4byte gEnemyParty
-_08026634: .4byte gPlayerParty
-_08026638:
- movs r7, 0
- movs r5, 0
-_0802663C:
- movs r0, 0x64
- muls r0, r5
- mov r2, r8
- adds r4, r2, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0802666E
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0802666E
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0802666E
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_0802666E:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _0802663C
-_08026678:
- cmp r7, 0x1
- bhi _08026688
- ldr r0, _080266BC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x41
- ands r0, r1
- cmp r0, 0x1
- bne _080266A0
-_08026688:
- cmp r7, 0x2
- bhi _080266C4
- ldr r0, _080266BC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080266C4
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _080266C4
-_080266A0:
- ldr r3, _080266C0 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08026880
- .align 2, 0
-_080266BC: .4byte gBattleTypeFlags
-_080266C0: .4byte gBattlescriptCurrInstr
-_080266C4:
- bl sub_80264C0
- lsls r0, 24
- cmp r0, 0
- bne _080266D0
- b _08026880
-_080266D0:
- ldr r0, _08026710 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08026774
-_080266DC:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08026714 @ =gBankTarget
- ldrb r0, [r0]
- bl sub_803FC34
- lsls r0, 24
- lsrs r0, 24
- bl sub_803FBFC
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _08026718
- adds r0, r6, 0x3
- lsls r0, 24
- lsrs r5, r0, 24
- b _0802671A
- .align 2, 0
-_08026710: .4byte gBattleTypeFlags
-_08026714: .4byte gBankTarget
-_08026718:
- adds r5, r6, 0
-_0802671A:
- ldr r4, _0802676C @ =gBattlePartyID
- ldr r0, _08026770 @ =gBankTarget
- ldrb r2, [r0]
- lsls r1, r2, 1
- adds r1, r4
- lsls r0, r5, 16
- lsrs r3, r0, 16
- ldrh r1, [r1]
- cmp r3, r1
- beq _080266DC
- movs r0, 0x2
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r4
- ldrh r0, [r0]
- cmp r3, r0
- beq _080266DC
- 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 _080266DC
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _080266DC
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080266DC
- b _08026832
- .align 2, 0
-_0802676C: .4byte gBattlePartyID
-_08026770: .4byte gBankTarget
-_08026774:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080267E4
- ldr r6, _080267DC @ =gBattlePartyID
-_0802677E:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080267E0 @ =gBankTarget
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r6
- adds r2, r5, 0
- ldrh r0, [r0]
- cmp r2, r0
- beq _0802677E
- movs r0, 0x2
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r6
- ldrh r0, [r0]
- cmp r2, r0
- beq _0802677E
- movs r0, 0x64
- muls r0, r5
- mov r2, r8
- adds r4, r2, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0802677E
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _0802677E
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0802677E
- b _08026832
- .align 2, 0
-_080267DC: .4byte gBattlePartyID
-_080267E0: .4byte gBankTarget
-_080267E4:
- ldr r6, _0802686C @ =gBattlePartyID
-_080267E6:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _08026870 @ =gBankTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- cmp r5, r0
- beq _080267E6
- 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 _080267E6
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _080267E6
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080267E6
-_08026832:
- ldr r0, _08026874 @ =0x02000000
- ldr r4, _08026870 @ =gBankTarget
- ldrb r1, [r4]
- ldr r2, _08026878 @ =0x00016068
- adds r1, r2
- adds r1, r0
- strb r5, [r1]
- bl IsLinkDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08026850
- ldrb r0, [r4]
- bl sub_8012258
-_08026850:
- ldrb r0, [r4]
- adds r1, r5, 0
- movs r2, 0
- bl sub_8094B6C
- ldrb r1, [r4]
- movs r0, 0x2
- eors r0, r1
- adds r1, r5, 0
- movs r2, 0x1
- bl sub_8094B6C
- b _08026880
- .align 2, 0
-_0802686C: .4byte gBattlePartyID
-_08026870: .4byte gBankTarget
-_08026874: .4byte 0x02000000
-_08026878: .4byte 0x00016068
-_0802687C:
- bl sub_80264C0
-_08026880:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8026590
-
- thumb_func_start sub_802688C
-sub_802688C: @ 802688C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- ldr r2, _08026920 @ =gBattleMons
- ldr r3, _08026924 @ =gBankAttacker
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r1, r2, 0
- adds r1, 0xC
- adds r0, r1
- ldrh r0, [r0]
- mov r8, r2
- cmp r0, 0
- beq _080268CE
- movs r5, 0x58
- adds r2, r1, 0
-_080268B4:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bhi _080268CE
- lsls r1, r6, 1
- ldrb r0, [r3]
- muls r0, r5
- adds r1, r0
- adds r1, r2
- ldrh r0, [r1]
- cmp r0, 0
- bne _080268B4
-_080268CE:
- movs r3, 0
- cmp r3, r6
- bcs _08026950
- ldr r0, _08026928 @ =gBattleMoves
- mov r10, r0
- ldr r5, _08026920 @ =gBattleMons
- mov r12, r5
- ldr r7, _08026924 @ =gBankAttacker
- ldrb r0, [r7]
- movs r4, 0x58
- adds r5, r0, 0
- muls r5, r4
- movs r0, 0xC
- add r0, r12
- mov r9, r0
-_080268EC:
- lsls r0, r3, 1
- adds r0, r5
- add r0, r9
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r10
- ldrb r2, [r0, 0x2]
- cmp r2, 0x9
- bne _0802692E
- mov r0, r8
- adds r1, r5, r0
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _0802691A
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _0802692C
-_0802691A:
- movs r2, 0x7
- b _0802692E
- .align 2, 0
-_08026920: .4byte gBattleMons
-_08026924: .4byte gBankAttacker
-_08026928: .4byte gBattleMoves
-_0802692C:
- movs r2, 0
-_0802692E:
- ldrb r0, [r7]
- muls r0, r4
- add r0, r12
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r1, [r1]
- cmp r2, r1
- beq _08026946
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r2, r0
- bne _08026950
-_08026946:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r6
- bcc _080268EC
-_08026950:
- cmp r3, r6
- bne _08026974
- ldr r3, _08026970 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08026A18
- .align 2, 0
-_08026970: .4byte gBattlescriptCurrInstr
-_08026974:
- movs r7, 0x3
- ldr r5, _080269CC @ =gBattleMoves
- mov r9, r5
-_0802697A:
- bl Random
- adds r3, r0, 0
- ands r3, r7
- cmp r3, r6
- bcs _0802697A
- ldr r4, _080269D0 @ =gBattleMons
- lsls r1, r3, 1
- ldr r3, _080269D4 @ =gBankAttacker
- ldrb r2, [r3]
- movs r0, 0x58
- adds r5, r2, 0
- muls r5, r0
- adds r1, r5
- adds r0, r4, 0
- adds r0, 0xC
- adds r1, r0
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrb r2, [r0, 0x2]
- mov r8, r4
- adds r4, r3, 0
- cmp r2, 0x9
- bne _080269DA
- mov r0, r8
- adds r2, r5, r0
- adds r0, r2, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _080269C8
- adds r0, r2, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _080269D8
-_080269C8:
- movs r2, 0x7
- b _080269DA
- .align 2, 0
-_080269CC: .4byte gBattleMoves
-_080269D0: .4byte gBattleMons
-_080269D4: .4byte gBankAttacker
-_080269D8:
- movs r2, 0
-_080269DA:
- ldrb r0, [r4]
- movs r3, 0x58
- muls r0, r3
- add r0, r8
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r5, [r1]
- cmp r2, r5
- beq _0802697A
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r2, r0
- beq _0802697A
- strb r2, [r1]
- ldrb r0, [r4]
- muls r0, r3
- add r0, r8
- adds r0, 0x22
- strb r2, [r0]
- ldr r1, _08026A28 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- strb r2, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r1, _08026A2C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08026A18:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08026A28: .4byte gBattleTextBuff1
-_08026A2C: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802688C
-
- thumb_func_start atk91_givemoney
-atk91_givemoney: @ 8026A30
- push {r4,lr}
- ldr r0, _08026A8C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08026AAC
- ldr r4, _08026A90 @ =gPaydayMoney
- ldrh r0, [r4]
- cmp r0, 0
- beq _08026AAC
- ldr r0, _08026A94 @ =gSaveBlock1 + 0x490
- ldrh r2, [r4]
- ldr r1, _08026A98 @ =0x02000000
- ldr r3, _08026A9C @ =0x00016056
- adds r1, r3
- ldrb r1, [r1]
- muls r1, r2
- bl sub_80B79B8
- ldr r1, _08026AA0 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- movs r0, 0x5
- strb r0, [r1, 0x3]
- ldrh r2, [r4]
- strb r2, [r1, 0x4]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r2
- lsrs r0, 8
- strb r0, [r1, 0x5]
- movs r0, 0xFF
- strb r0, [r1, 0x6]
- ldr r4, _08026AA4 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl b_movescr_stack_push
- ldr r0, _08026AA8 @ =gUnknown_081D95DB
- str r0, [r4]
- b _08026AB4
- .align 2, 0
-_08026A8C: .4byte gBattleTypeFlags
-_08026A90: .4byte gPaydayMoney
-_08026A94: .4byte gSaveBlock1 + 0x490
-_08026A98: .4byte 0x02000000
-_08026A9C: .4byte 0x00016056
-_08026AA0: .4byte gBattleTextBuff1
-_08026AA4: .4byte gBattlescriptCurrInstr
-_08026AA8: .4byte gUnknown_081D95DB
-_08026AAC:
- ldr r1, _08026ABC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_08026AB4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08026ABC: .4byte gBattlescriptCurrInstr
- thumb_func_end atk91_givemoney
-
- thumb_func_start atk92_setlightscreen
-atk92_setlightscreen: @ 8026AC0
- push {r4-r6,lr}
- ldr r4, _08026AF0 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankIdentity
- ldr r6, _08026AF4 @ =gSideAffecting
- movs r5, 0x1
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r6
- ldrh r1, [r1]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08026B00
- ldr r2, _08026AF8 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08026AFC @ =gBattleCommunication
- movs r0, 0
- b _08026B60
- .align 2, 0
-_08026AF0: .4byte gBankAttacker
-_08026AF4: .4byte gSideAffecting
-_08026AF8: .4byte gBattleMoveFlags
-_08026AFC: .4byte gBattleCommunication
-_08026B00:
- ldrb r0, [r4]
- bl GetBankIdentity
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r6
- ldrh r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r4]
- bl GetBankIdentity
- ldr r2, _08026B50 @ =gSideTimer
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strb r1, [r0, 0x1]
- ldr r0, _08026B54 @ =gBattleTypeFlags
- ldrh r1, [r0]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _08026B5C
- movs r0, 0x1
- bl CountAliveMons
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08026B5C
- ldr r1, _08026B58 @ =gBattleCommunication
- movs r0, 0x4
- b _08026B60
- .align 2, 0
-_08026B50: .4byte gSideTimer
-_08026B54: .4byte gBattleTypeFlags
-_08026B58: .4byte gBattleCommunication
-_08026B5C:
- ldr r1, _08026B70 @ =gBattleCommunication
- movs r0, 0x3
-_08026B60:
- strb r0, [r1, 0x5]
- ldr r1, _08026B74 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08026B70: .4byte gBattleCommunication
-_08026B74: .4byte gBattlescriptCurrInstr
- thumb_func_end atk92_setlightscreen
-
- thumb_func_start sub_8026B78
-sub_8026B78: @ 8026B78
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r7, _08026BA8 @ =gBattleMons
- ldr r6, _08026BAC @ =gBankTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _08026BB4
- ldr r1, _08026BB0 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _08026BCE
- .align 2, 0
-_08026BA8: .4byte gBattleMons
-_08026BAC: .4byte gBankTarget
-_08026BB0: .4byte gEnigmaBerries
-_08026BB4:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_08026BCE:
- ldr r1, _08026C4C @ =gStringBank
- ldr r5, _08026C50 @ =gBankTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _08026C0C
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _08026C0C
- ldrb r0, [r5]
- movs r1, 0x27
- bl RecordItemBattle
- ldr r2, _08026C54 @ =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_08026C0C:
- ldr r0, _08026C58 @ =gBattleMons
- mov r8, r0
- ldr r1, _08026C50 @ =gBankTarget
- ldrb r2, [r1]
- movs r6, 0x58
- adds r0, r2, 0
- muls r0, r6
- mov r3, r8
- adds r5, r0, r3
- adds r0, r5, 0
- adds r0, 0x20
- ldrb r3, [r0]
- mov r10, r8
- cmp r3, 0x5
- bne _08026C6C
- ldr r2, _08026C5C @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _08026C60 @ =gLastUsedAbility
- strb r3, [r0]
- ldr r1, _08026C64 @ =gBattlescriptCurrInstr
- ldr r0, _08026C68 @ =gUnknown_081D9826
- str r0, [r1]
- ldr r1, _08026C50 @ =gBankTarget
- ldrb r0, [r1]
- movs r1, 0x5
- bl RecordAbilityBattle
- b _08026E40
- .align 2, 0
-_08026C4C: .4byte gStringBank
-_08026C50: .4byte gBankTarget
-_08026C54: .4byte gSpecialStatuses
-_08026C58: .4byte gBattleMons
-_08026C5C: .4byte gBattleMoveFlags
-_08026C60: .4byte gLastUsedAbility
-_08026C64: .4byte gBattlescriptCurrInstr
-_08026C68: .4byte gUnknown_081D9826
-_08026C6C:
- ldr r1, _08026CE0 @ =gStatuses3
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x18
- ands r0, r1
- cmp r0, 0
- bne _08026CF4
- ldr r1, _08026CE4 @ =gBattleMoves
- ldr r0, _08026CE8 @ =gCurrentMove
- ldrh r0, [r0]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldr r7, _08026CEC @ =gBankAttacker
- ldrb r0, [r7]
- muls r0, r6
- add r0, r10
- adds r0, 0x2A
- ldrb r0, [r0]
- adds r1, r5, 0
- adds r1, 0x2A
- ldrb r1, [r1]
- subs r0, r1
- ldrb r2, [r2, 0x3]
- adds r0, r2
- lsls r0, 16
- lsrs r4, r0, 16
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- adds r0, 0x1
- cmp r0, r4
- bge _08026CDC
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- add r1, r10
- adds r1, 0x2A
- ldr r2, _08026CF0 @ =gBankTarget
- ldrb r0, [r2]
- muls r0, r6
- add r0, r10
- adds r0, 0x2A
- ldrb r1, [r1]
- movs r4, 0x1
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08026D20
-_08026CDC:
- mov r10, r8
- b _08026DE0
- .align 2, 0
-_08026CE0: .4byte gStatuses3
-_08026CE4: .4byte gBattleMoves
-_08026CE8: .4byte gCurrentMove
-_08026CEC: .4byte gBankAttacker
-_08026CF0: .4byte gBankTarget
-_08026CF4:
- ldr r0, _08026D4C @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldr r2, _08026D50 @ =gBankAttacker
- ldrb r0, [r1, 0x15]
- movs r4, 0
- ldrb r3, [r2]
- cmp r0, r3
- bne _08026D20
- ldrb r0, [r2]
- muls r0, r6
- add r0, r10
- adds r0, 0x2A
- adds r1, r5, 0
- adds r1, 0x2A
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08026D20
- movs r4, 0x1
-_08026D20:
- cmp r4, 0
- beq _08026DE0
- ldr r0, _08026D54 @ =gProtectStructs
- ldr r1, _08026D58 @ =gBankTarget
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- bge _08026D64
- ldr r1, _08026D5C @ =gBattleMoveDamage
- movs r0, 0x58
- muls r0, r2
- add r0, r10
- ldrh r0, [r0, 0x28]
- subs r0, 0x1
- str r0, [r1]
- ldr r2, _08026D60 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x40
- b _08026DC6
- .align 2, 0
-_08026D4C: .4byte gDisableStructs
-_08026D50: .4byte gBankAttacker
-_08026D54: .4byte gProtectStructs
-_08026D58: .4byte gBankTarget
-_08026D5C: .4byte gBattleMoveDamage
-_08026D60: .4byte gBattleMoveFlags
-_08026D64:
- ldr r0, _08026DA0 @ =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _08026DB4
- ldr r1, _08026DA4 @ =gBattleMoveDamage
- movs r3, 0x58
- adds r0, r2, 0
- muls r0, r3
- add r0, r10
- ldrh r0, [r0, 0x28]
- subs r0, 0x1
- str r0, [r1]
- ldr r2, _08026DA8 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08026DAC @ =gLastUsedItem
- ldr r2, _08026DB0 @ =gBankTarget
- ldrb r0, [r2]
- muls r0, r3
- add r0, r10
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
- b _08026DCA
- .align 2, 0
-_08026DA0: .4byte gSpecialStatuses
-_08026DA4: .4byte gBattleMoveDamage
-_08026DA8: .4byte gBattleMoveFlags
-_08026DAC: .4byte gLastUsedItem
-_08026DB0: .4byte gBankTarget
-_08026DB4:
- ldr r1, _08026DD4 @ =gBattleMoveDamage
- movs r0, 0x58
- muls r0, r2
- add r0, r10
- ldrh r0, [r0, 0x28]
- str r0, [r1]
- ldr r2, _08026DD8 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x10
-_08026DC6:
- orrs r0, r1
- strb r0, [r2]
-_08026DCA:
- ldr r1, _08026DDC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08026E40
- .align 2, 0
-_08026DD4: .4byte gBattleMoveDamage
-_08026DD8: .4byte gBattleMoveFlags
-_08026DDC: .4byte gBattlescriptCurrInstr
-_08026DE0:
- ldr r2, _08026E10 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _08026E14 @ =gBankAttacker
- ldrb r0, [r0]
- movs r2, 0x58
- adds r1, r0, 0
- muls r1, r2
- add r1, r10
- adds r1, 0x2A
- ldr r3, _08026E18 @ =gBankTarget
- ldrb r0, [r3]
- muls r0, r2
- add r0, r10
- adds r0, 0x2A
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bcc _08026E20
- ldr r1, _08026E1C @ =gBattleCommunication
- movs r0, 0
- b _08026E24
- .align 2, 0
-_08026E10: .4byte gBattleMoveFlags
-_08026E14: .4byte gBankAttacker
-_08026E18: .4byte gBankTarget
-_08026E1C: .4byte gBattleCommunication
-_08026E20:
- ldr r1, _08026E50 @ =gBattleCommunication
- movs r0, 0x1
-_08026E24:
- strb r0, [r1, 0x5]
- ldr r3, _08026E54 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_08026E40:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08026E50: .4byte gBattleCommunication
-_08026E54: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8026B78
-
- thumb_func_start atk94_gethalfcurrentenemyhp
-atk94_gethalfcurrentenemyhp: @ 8026E58
- push {lr}
- ldr r3, _08026E84 @ =gBattleMoveDamage
- ldr r2, _08026E88 @ =gBattleMons
- ldr r0, _08026E8C @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- lsrs r0, 1
- str r0, [r3]
- cmp r0, 0
- bne _08026E76
- movs r0, 0x1
- str r0, [r3]
-_08026E76:
- ldr r1, _08026E90 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08026E84: .4byte gBattleMoveDamage
-_08026E88: .4byte gBattleMons
-_08026E8C: .4byte gBankTarget
-_08026E90: .4byte gBattlescriptCurrInstr
- thumb_func_end atk94_gethalfcurrentenemyhp
-
- thumb_func_start sub_8026E94
-sub_8026E94: @ 8026E94
- push {lr}
- ldr r2, _08026EB4 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x18
- ands r0, r1
- cmp r0, 0
- beq _08026EC0
- ldr r2, _08026EB8 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08026EBC @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _08026ED2
- .align 2, 0
-_08026EB4: .4byte gBattleWeather
-_08026EB8: .4byte gBattleMoveFlags
-_08026EBC: .4byte gBattleCommunication
-_08026EC0:
- movs r0, 0x8
- strh r0, [r2]
- ldr r1, _08026EE0 @ =gBattleCommunication
- movs r0, 0x3
- strb r0, [r1, 0x5]
- ldr r0, _08026EE4 @ =gWishFutureKnock
- adds r0, 0x28
- movs r1, 0x5
- strb r1, [r0]
-_08026ED2:
- ldr r1, _08026EE8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08026EE0: .4byte gBattleCommunication
-_08026EE4: .4byte gWishFutureKnock
-_08026EE8: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8026E94
-
- thumb_func_start sub_8026EEC
-sub_8026EEC: @ 8026EEC
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08026F0A
- b _0802701C
-_08026F0A:
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08026F20
- b _0802701C
-_08026F20:
- ldr r2, _08026F94 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x18
- ands r0, r1
- adds r4, r2, 0
- ldr r5, _08026F98 @ =gBankAttacker
- cmp r0, 0
- beq _08026FAE
- ldr r0, _08026F9C @ =gBattleMons
- ldrb r2, [r5]
- movs r1, 0x58
- muls r1, r2
- adds r3, r1, r0
- adds r0, r3, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x5
- beq _08026FA8
- cmp r0, 0x8
- beq _08026FA8
- cmp r0, 0x4
- beq _08026FA8
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x5
- beq _08026FA8
- cmp r0, 0x8
- beq _08026FA8
- cmp r0, 0x4
- beq _08026FA8
- adds r0, r3, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x8
- beq _08026FA8
- ldr r0, _08026FA0 @ =gStatuses3
- lsls r1, r2, 2
- adds r1, r0
- ldr r1, [r1]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08026FA8
- movs r0, 0x80
- lsls r0, 11
- ands r1, r0
- cmp r1, 0
- bne _08026FA8
- ldr r1, _08026FA4 @ =gBattleMoveDamage
- ldrh r0, [r3, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _08026FAE
- movs r0, 0x1
- b _08026FAC
- .align 2, 0
-_08026F94: .4byte gBattleWeather
-_08026F98: .4byte gBankAttacker
-_08026F9C: .4byte gBattleMons
-_08026FA0: .4byte gStatuses3
-_08026FA4: .4byte gBattleMoveDamage
-_08026FA8:
- ldr r1, _08027004 @ =gBattleMoveDamage
- movs r0, 0
-_08026FAC:
- str r0, [r1]
-_08026FAE:
- ldrh r1, [r4]
- movs r4, 0x80
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08027024
- ldr r1, _08027008 @ =gBattleMons
- ldrb r3, [r5]
- movs r0, 0x58
- muls r0, r3
- adds r2, r0, r1
- adds r0, r2, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xF
- beq _08027010
- adds r0, r2, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xF
- beq _08027010
- ldr r0, _0802700C @ =gStatuses3
- lsls r1, r3, 2
- adds r1, r0
- ldr r1, [r1]
- adds r0, r1, 0
- ands r0, r4
- cmp r0, 0
- bne _08027010
- movs r0, 0x80
- lsls r0, 11
- ands r1, r0
- cmp r1, 0
- bne _08027010
- ldr r1, _08027004 @ =gBattleMoveDamage
- ldrh r0, [r2, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _08027024
- movs r0, 0x1
- str r0, [r1]
- b _08027024
- .align 2, 0
-_08027004: .4byte gBattleMoveDamage
-_08027008: .4byte gBattleMons
-_0802700C: .4byte gStatuses3
-_08027010:
- ldr r1, _08027018 @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
- b _08027024
- .align 2, 0
-_08027018: .4byte gBattleMoveDamage
-_0802701C:
- ldr r1, _08027050 @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
- ldr r5, _08027054 @ =gBankAttacker
-_08027024:
- ldr r0, _08027058 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _0802705C @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0802703E
- ldr r1, _08027050 @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
-_0802703E:
- ldr r1, _08027060 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08027050: .4byte gBattleMoveDamage
-_08027054: .4byte gBankAttacker
-_08027058: .4byte gAbsentBankFlags
-_0802705C: .4byte gBitTable
-_08027060: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8026EEC
-
- thumb_func_start sub_8027064
-sub_8027064: @ 8027064
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, _08027090 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0802709C
- ldr r1, _08027094 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08027098 @ =gPlayerParty
- b _080270AC
- .align 2, 0
-_08027090: .4byte gBankAttacker
-_08027094: .4byte gBattlePartyID
-_08027098: .4byte gPlayerParty
-_0802709C:
- ldr r1, _080270D0 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080270D4 @ =gEnemyParty
-_080270AC:
- adds r5, r1, r0
- ldr r4, _080270D8 @ =gBankTarget
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _080270E0
- ldr r1, _080270D0 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080270DC @ =gPlayerParty
- b _080270F0
- .align 2, 0
-_080270D0: .4byte gBattlePartyID
-_080270D4: .4byte gEnemyParty
-_080270D8: .4byte gBankTarget
-_080270DC: .4byte gPlayerParty
-_080270E0:
- ldr r1, _0802714C @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08027150 @ =gEnemyParty
-_080270F0:
- adds r4, r1, r0
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- adds r0, r5, 0
- movs r1, 0
- bl GetMonData
- mov r9, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r7, r0, 0
- ldr r5, _08027154 @ =gBankTarget
- ldrb r0, [r5]
- movs r6, 0x58
- muls r0, r6
- ldr r1, _08027158 @ =gBattleMons
- adds r0, r1
- adds r0, 0x20
- ldrb r2, [r0]
- cmp r2, 0xC
- bne _08027168
- ldr r1, _0802715C @ =gBattlescriptCurrInstr
- ldr r0, _08027160 @ =gUnknown_081D98C9
- str r0, [r1]
- ldr r0, _08027164 @ =gLastUsedAbility
- strb r2, [r0]
- ldrb r0, [r5]
- movs r1, 0xC
- bl RecordAbilityBattle
- b _0802721C
- .align 2, 0
-_0802714C: .4byte gBattlePartyID
-_08027150: .4byte gEnemyParty
-_08027154: .4byte gBankTarget
-_08027158: .4byte gBattleMons
-_0802715C: .4byte gBattlescriptCurrInstr
-_08027160: .4byte gUnknown_081D98C9
-_08027164: .4byte gLastUsedAbility
-_08027168:
- mov r0, r10
- mov r1, r9
- bl GetGenderFromSpeciesAndPersonality
- adds r4, r0, 0
- mov r0, r8
- adds r1, r7, 0
- bl GetGenderFromSpeciesAndPersonality
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- beq _080271CA
- ldr r1, _080271E8 @ =gStatuses3
- ldrb r2, [r5]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080271EC @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _080271CA
- adds r0, r2, 0
- muls r0, r6
- ldr r4, _080271F0 @ =gBattleMons
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0xF0
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- bne _080271CA
- mov r0, r10
- mov r1, r9
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _080271CA
- mov r0, r8
- adds r1, r7, 0
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _080271F8
-_080271CA:
- ldr r3, _080271F4 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802721C
- .align 2, 0
-_080271E8: .4byte gStatuses3
-_080271EC: .4byte 0x000400c0
-_080271F0: .4byte gBattleMons
-_080271F4: .4byte gBattlescriptCurrInstr
-_080271F8:
- ldrb r0, [r5]
- adds r2, r0, 0
- muls r2, r6
- adds r2, r4
- ldr r1, _0802722C @ =gBitTable
- ldr r0, _08027230 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 16
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08027234 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802721C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802722C: .4byte gBitTable
-_08027230: .4byte gBankAttacker
-_08027234: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8027064
-
- thumb_func_start sub_8027238
-sub_8027238: @ 8027238
- push {r4-r7,lr}
- ldr r0, _08027280 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _08027324
- ldr r5, _08027284 @ =gBattlescriptCurrInstr
- ldr r1, [r5]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x4
- beq _08027290
- bl sub_8015150
- ldr r4, _08027288 @ =gActiveBank
- strb r0, [r4]
- ldr r3, _0802728C @ =gBattleMons
- ldrb r1, [r4]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- adds r0, r3, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r1, [r0]
- adds r3, 0x50
- adds r2, r3
- ldr r2, [r2]
- movs r0, 0
- bl EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- b _08027324
- .align 2, 0
-_08027280: .4byte gBattleExecBuffer
-_08027284: .4byte gBattlescriptCurrInstr
-_08027288: .4byte gActiveBank
-_0802728C: .4byte gBattleMons
-_08027290:
- ldr r4, _0802732C @ =gActiveBank
- ldr r5, _08027330 @ =gBankAttacker
- ldrb r0, [r5]
- strb r0, [r4]
- ldr r6, _08027334 @ =gAbsentBankFlags
- ldrb r1, [r6]
- ldr r7, _08027338 @ =gBitTable
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080272CC
- ldr r3, _0802733C @ =gBattleMons
- movs r0, 0x58
- muls r2, r0
- adds r0, r3, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r1, [r0]
- adds r3, 0x50
- adds r2, r3
- ldr r2, [r2]
- movs r0, 0
- bl EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_080272CC:
- ldr r0, _08027340 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802731C
- ldrb r0, [r5]
- bl GetBankIdentity
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- strb r0, [r4]
- ldrb r1, [r6]
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802731C
- ldr r3, _0802733C @ =gBattleMons
- movs r0, 0x58
- muls r2, r0
- adds r0, r3, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r1, [r0]
- adds r3, 0x50
- adds r2, r3
- ldr r2, [r2]
- movs r0, 0
- bl EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_0802731C:
- ldr r1, _08027344 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_08027324:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802732C: .4byte gActiveBank
-_08027330: .4byte gBankAttacker
-_08027334: .4byte gAbsentBankFlags
-_08027338: .4byte gBitTable
-_0802733C: .4byte gBattleMons
-_08027340: .4byte gBattleTypeFlags
-_08027344: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8027238
-
- thumb_func_start sub_8027348
-sub_8027348: @ 8027348
- push {r4-r6,lr}
- ldr r6, _08027378 @ =gSideTimer
- ldr r4, _0802737C @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankIdentity
- movs r5, 0x1
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r0, [r0, 0x2]
- cmp r0, 0
- beq _08027388
- ldr r2, _08027380 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _08027384 @ =gBattleCommunication
- strb r5, [r0, 0x5]
- b _080273C0
- .align 2, 0
-_08027378: .4byte gSideTimer
-_0802737C: .4byte gBankAttacker
-_08027380: .4byte gBattleMoveFlags
-_08027384: .4byte gBattleCommunication
-_08027388:
- ldrb r0, [r4]
- bl GetBankIdentity
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r1, 0x5
- strb r1, [r0, 0x2]
- ldrb r0, [r4]
- bl GetBankIdentity
- ldr r2, _080273D0 @ =gSideAffecting
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r3, 0x80
- lsls r3, 1
- adds r0, r3, 0
- movs r3, 0
- orrs r0, r2
- strh r0, [r1]
- ldr r0, _080273D4 @ =gBattleCommunication
- strb r3, [r0, 0x5]
-_080273C0:
- ldr r1, _080273D8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080273D0: .4byte gSideAffecting
-_080273D4: .4byte gBattleCommunication
-_080273D8: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8027348
-
- thumb_func_start atk9A_setincreasedcriticalchance
-atk9A_setincreasedcriticalchance: @ 80273DC
- push {lr}
- ldr r1, _0802740C @ =gBattleMons
- ldr r0, _08027410 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r3, 0x80
- lsls r3, 13
- adds r2, r1, 0
- ands r2, r3
- cmp r2, 0
- beq _0802741C
- ldr r2, _08027414 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08027418 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08027424
- .align 2, 0
-_0802740C: .4byte gBattleMons
-_08027410: .4byte gBankAttacker
-_08027414: .4byte gBattleMoveFlags
-_08027418: .4byte gBattleCommunication
-_0802741C:
- orrs r1, r3
- str r1, [r0]
- ldr r0, _08027430 @ =gBattleCommunication
- strb r2, [r0, 0x5]
-_08027424:
- ldr r1, _08027434 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08027430: .4byte gBattleCommunication
-_08027434: .4byte gBattlescriptCurrInstr
- thumb_func_end atk9A_setincreasedcriticalchance
-
- thumb_func_start atk9B_transformdataexecution
-atk9B_transformdataexecution: @ 8027438
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r1, _08027490 @ =gUnknown_02024BE8
- ldr r2, _08027494 @ =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _08027498 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- ldr r7, _0802749C @ =gBattleMons
- ldr r0, _080274A0 @ =gBankTarget
- mov r12, r0
- ldrb r1, [r0]
- movs r6, 0x58
- adds r0, r1, 0
- muls r0, r6
- adds r5, r7, 0
- adds r5, 0x50
- adds r0, r5
- ldr r0, [r0]
- movs r4, 0x80
- lsls r4, 14
- ands r0, r4
- cmp r0, 0
- bne _0802747E
- ldr r0, _080274A4 @ =gStatuses3
- lsls r1, 2
- adds r1, r0
- ldr r2, [r1]
- ldr r0, _080274A8 @ =0x000400c0
- ands r2, r0
- cmp r2, 0
- beq _080274B4
-_0802747E:
- ldr r2, _080274AC @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _080274B0 @ =gBattleCommunication
- movs r0, 0x1
- b _080275C8
- .align 2, 0
-_08027490: .4byte gUnknown_02024BE8
-_08027494: .4byte 0x0000ffff
-_08027498: .4byte gBattlescriptCurrInstr
-_0802749C: .4byte gBattleMons
-_080274A0: .4byte gBankTarget
-_080274A4: .4byte gStatuses3
-_080274A8: .4byte 0x000400c0
-_080274AC: .4byte gBattleMoveFlags
-_080274B0: .4byte gBattleCommunication
-_080274B4:
- ldr r3, _08027588 @ =gBankAttacker
- ldrb r0, [r3]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r5
- ldr r0, [r1]
- orrs r0, r4
- str r0, [r1]
- ldr r4, _0802758C @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- strh r2, [r0, 0x4]
- ldrb r0, [r3]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0xB]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0xB]
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- mov r2, r12
- ldrb r1, [r2]
- muls r1, r6
- adds r2, r7, 0
- adds r2, 0x48
- adds r1, r2
- ldr r1, [r1]
- str r1, [r0]
- ldrb r0, [r3]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x18]
- movs r0, 0xF
- ands r0, r2
- strb r0, [r1, 0x18]
- ldr r1, _08027590 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x6
- strb r0, [r1, 0x1]
- mov r2, r12
- ldrb r0, [r2]
- muls r0, r6
- adds r0, r7
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r2]
- muls r0, r6
- adds r0, r7
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldrb r0, [r3]
- muls r0, r6
- adds r5, r0, r7
- ldrb r0, [r2]
- muls r0, r6
- adds r2, r0, r7
- movs r4, 0
- adds r6, r3, 0
- ldr r0, _08027594 @ =gActiveBank
- mov r8, r0
-_0802754C:
- adds r0, r5, r4
- adds r1, r2, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x23
- bls _0802754C
- movs r4, 0
- ldr r7, _08027598 @ =gBattleMoves
- ldr r3, _0802759C @ =gUnknown_02024A8C
- adds r5, r3, 0
- adds r5, 0x18
-_08027564:
- lsls r1, r4, 1
- ldrb r2, [r6]
- movs r0, 0x58
- muls r2, r0
- adds r1, r2
- adds r1, r3
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r1, [r0, 0x4]
- cmp r1, 0x4
- bhi _080275A0
- adds r0, r4, r2
- adds r0, r5
- b _080275A6
- .align 2, 0
-_08027588: .4byte gBankAttacker
-_0802758C: .4byte gDisableStructs
-_08027590: .4byte gBattleTextBuff1
-_08027594: .4byte gActiveBank
-_08027598: .4byte gBattleMoves
-_0802759C: .4byte gUnknown_02024A8C
-_080275A0:
- adds r0, r4, r2
- adds r0, r5
- movs r1, 0x5
-_080275A6:
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x3
- ble _08027564
- ldrb r0, [r6]
- mov r1, r8
- strb r0, [r1]
- movs r0, 0
- movs r1, 0x2
- bl EmitResetActionMoveSelection
- mov r2, r8
- ldrb r0, [r2]
- bl MarkBufferBankForExecution
- ldr r1, _080275D4 @ =gBattleCommunication
- movs r0, 0
-_080275C8:
- strb r0, [r1, 0x5]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080275D4: .4byte gBattleCommunication
- thumb_func_end atk9B_transformdataexecution
-
- thumb_func_start sub_80275D8
-sub_80275D8: @ 80275D8
- push {r4-r7,lr}
- ldr r7, _08027608 @ =gBattleMons
- ldr r6, _0802760C @ =gBankAttacker
- ldrb r0, [r6]
- movs r5, 0x58
- muls r0, r5
- adds r3, r0, r7
- ldrh r0, [r3, 0x2C]
- lsrs r1, r0, 2
- adds r2, r1, 0
- cmp r1, 0
- bne _080275F2
- movs r2, 0x1
-_080275F2:
- ldrh r0, [r3, 0x28]
- cmp r0, r2
- bhi _08027618
- ldr r1, _08027610 @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
- ldr r1, _08027614 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _0802766C
- .align 2, 0
-_08027608: .4byte gBattleMons
-_0802760C: .4byte gBankAttacker
-_08027610: .4byte gBattleMoveDamage
-_08027614: .4byte gBattleCommunication
-_08027618:
- ldr r4, _0802767C @ =gBattleMoveDamage
- str r1, [r4]
- cmp r1, 0
- bne _08027624
- movs r0, 0x1
- str r0, [r4]
-_08027624:
- ldrb r0, [r6]
- adds r2, r0, 0
- muls r2, r5
- adds r3, r7, 0
- adds r3, 0x50
- adds r2, r3
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 17
- orrs r0, r1
- str r0, [r2]
- ldrb r0, [r6]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r3
- ldr r0, [r1]
- ldr r2, _08027680 @ =0xffff1fff
- ands r0, r2
- str r0, [r1]
- ldr r2, _08027684 @ =gDisableStructs
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, [r4]
- movs r2, 0
- strb r1, [r0, 0xA]
- ldr r0, _08027688 @ =gBattleCommunication
- strb r2, [r0, 0x5]
- ldr r2, _0802768C @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 1
- orrs r0, r1
- str r0, [r2]
-_0802766C:
- ldr r1, _08027690 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802767C: .4byte gBattleMoveDamage
-_08027680: .4byte 0xffff1fff
-_08027684: .4byte gDisableStructs
-_08027688: .4byte gBattleCommunication
-_0802768C: .4byte gHitMarker
-_08027690: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_80275D8
-
- thumb_func_start sub_8027694
-sub_8027694: @ 8027694
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r3, 0
- ldr r0, _080276D4 @ =gUnknown_081FACFE
- ldrh r1, [r0]
- ldr r4, _080276D8 @ =0x0000fffe
- adds r5, r0, 0
- cmp r1, r4
- beq _080276BC
- cmp r1, r2
- beq _080276BC
- adds r1, r5, 0
-_080276AE:
- adds r1, 0x2
- adds r3, 0x1
- ldrh r0, [r1]
- cmp r0, r4
- beq _080276BC
- cmp r0, r2
- bne _080276AE
-_080276BC:
- lsls r0, r3, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r0, _080276D8 @ =0x0000fffe
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080276D4: .4byte gUnknown_081FACFE
-_080276D8: .4byte 0x0000fffe
- thumb_func_end sub_8027694
-
- thumb_func_start atk9D_copyattack
-atk9D_copyattack: @ 80276DC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _08027754 @ =gUnknown_02024BE8
- ldr r1, _08027758 @ =0x0000ffff
- adds r7, r1, 0
- strh r7, [r0]
- ldr r5, _0802775C @ =gLastUsedMove
- ldr r6, _08027760 @ =gBankTarget
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- bl sub_8027694
- lsls r0, 24
- cmp r0, 0
- bne _08027736
- ldr r3, _08027764 @ =gBattleMons
- ldr r2, _08027768 @ =gBankAttacker
- ldrb r1, [r2]
- movs r0, 0x58
- adds r4, r1, 0
- muls r4, r0
- adds r0, r3, 0
- adds r0, 0x50
- adds r0, r4, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 14
- ands r1, r0
- mov r12, r3
- mov r9, r2
- cmp r1, 0
- bne _08027736
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- cmp r1, 0
- beq _08027736
- cmp r1, r7
- bne _08027770
-_08027736:
- ldr r3, _0802776C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _080278A8
- .align 2, 0
-_08027754: .4byte gUnknown_02024BE8
-_08027758: .4byte 0x0000ffff
-_0802775C: .4byte gLastUsedMove
-_08027760: .4byte gBankTarget
-_08027764: .4byte gBattleMons
-_08027768: .4byte gBankAttacker
-_0802776C: .4byte gBattlescriptCurrInstr
-_08027770:
- movs r2, 0
- mov r3, r12
- adds r3, 0xC
- adds r0, r4, r3
- ldrh r0, [r0]
- ldr r4, _08027800 @ =gBattlescriptCurrInstr
- mov r10, r4
- cmp r0, r1
- beq _080277AA
- mov r8, r3
- adds r7, r5, 0
- adds r5, r6, 0
- mov r4, r9
- movs r3, 0x58
-_0802778C:
- adds r2, 0x1
- cmp r2, 0x3
- bgt _080277AA
- lsls r1, r2, 1
- ldrb r0, [r4]
- muls r0, r3
- adds r1, r0
- add r1, r8
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r7
- ldrh r1, [r1]
- ldrh r0, [r0]
- cmp r1, r0
- bne _0802778C
-_080277AA:
- cmp r2, 0x4
- bne _0802788C
- ldr r5, _08027804 @ =gCurrMovePos
- ldrb r1, [r5]
- lsls r1, 1
- mov r2, r9
- ldrb r0, [r2]
- movs r6, 0x58
- muls r0, r6
- adds r1, r0
- mov r0, r12
- adds r0, 0xC
- adds r1, r0
- ldr r2, _08027808 @ =gLastUsedMove
- ldr r3, _0802780C @ =gBankTarget
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r4, _08027810 @ =gBattleMoves
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r4, [r0, 0x4]
- cmp r4, 0x4
- bhi _08027814
- mov r1, r9
- ldrb r0, [r1]
- muls r0, r6
- ldrb r1, [r5]
- adds r0, r1
- mov r1, r12
- adds r1, 0x24
- adds r0, r1
- strb r4, [r0]
- b _08027828
- .align 2, 0
-_08027800: .4byte gBattlescriptCurrInstr
-_08027804: .4byte gCurrMovePos
-_08027808: .4byte gLastUsedMove
-_0802780C: .4byte gBankTarget
-_08027810: .4byte gBattleMoves
-_08027814:
- mov r4, r9
- ldrb r0, [r4]
- muls r0, r6
- ldrb r1, [r5]
- adds r0, r1
- mov r1, r12
- adds r1, 0x24
- adds r0, r1
- movs r1, 0x5
- strb r1, [r0]
-_08027828:
- ldr r1, _08027880 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _08027884 @ =gDisableStructs
- mov r2, r9
- ldrb r0, [r2]
- lsls r2, r0, 3
- subs r2, r0
- lsls r2, 2
- adds r2, r1
- ldrb r4, [r2, 0x18]
- lsrs r3, r4, 4
- ldr r1, _08027888 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- orrs r1, r3
- lsls r1, 4
- movs r0, 0xF
- ands r0, r4
- orrs r0, r1
- strb r0, [r2, 0x18]
- mov r4, r10
- ldr r0, [r4]
- adds r0, 0x5
- str r0, [r4]
- b _080278A8
- .align 2, 0
-_08027880: .4byte gBattleTextBuff1
-_08027884: .4byte gDisableStructs
-_08027888: .4byte gBitTable
-_0802788C:
- mov r0, r10
- ldr r2, [r0]
- 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
- mov r2, r10
- str r1, [r2]
-_080278A8:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk9D_copyattack
-
- thumb_func_start sub_80278B8
-sub_80278B8: @ 80278B8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _08027938 @ =gCurrentMove
- movs r6, 0xB1
- lsls r6, 1
- ldr r5, _0802793C @ =gUnknown_081FACFE
- ldr r0, _08027940 @ =gBattlescriptCurrInstr
- mov r8, r0
-_080278CA:
- bl Random
- ldr r2, _08027944 @ =0x000001ff
- adds r1, r2, 0
- ands r0, r1
- adds r0, 0x1
- strh r0, [r7]
- cmp r0, r6
- bhi _080278CA
- movs r0, 0x3
-_080278DE:
- subs r0, 0x1
- cmp r0, 0
- bge _080278DE
- ldr r4, _08027938 @ =gCurrentMove
- ldrh r2, [r4]
- ldr r3, _08027948 @ =0x0000ffff
- subs r0, r5, 0x2
-_080278EC:
- adds r0, 0x2
- ldrh r1, [r0]
- cmp r1, r2
- beq _080278F8
- cmp r1, r3
- bne _080278EC
-_080278F8:
- ldr r0, _08027948 @ =0x0000ffff
- cmp r1, r0
- bne _080278CA
- ldr r2, _0802794C @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _08027950 @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r3, _08027954 @ =gUnknown_081D6BBC
- ldr r2, _08027958 @ =gBattleMoves
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- mov r1, r8
- str r0, [r1]
- ldrh r0, [r4]
- movs r1, 0
- bl sub_801B5C0
- ldr r1, _0802795C @ =gBankTarget
- strb r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08027938: .4byte gCurrentMove
-_0802793C: .4byte gUnknown_081FACFE
-_08027940: .4byte gBattlescriptCurrInstr
-_08027944: .4byte 0x000001ff
-_08027948: .4byte 0x0000ffff
-_0802794C: .4byte gHitMarker
-_08027950: .4byte 0xfffffbff
-_08027954: .4byte gUnknown_081D6BBC
-_08027958: .4byte gBattleMoves
-_0802795C: .4byte gBankTarget
- thumb_func_end sub_80278B8
-
- thumb_func_start sub_8027960
-sub_8027960: @ 8027960
- ldr r3, _08027980 @ =gBattleMoveDamage
- ldr r2, _08027984 @ =gBattleMons
- ldr r0, _08027988 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r0, [r0]
- str r0, [r3]
- ldr r1, _0802798C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_08027980: .4byte gBattleMoveDamage
-_08027984: .4byte gBattleMons
-_08027988: .4byte gBankAttacker
-_0802798C: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8027960
-
- thumb_func_start atkA0_psywavedamageeffect
-atkA0_psywavedamageeffect: @ 8027990
- push {r4,lr}
- movs r4, 0xF
-_08027994:
- bl Random
- adds r3, r4, 0
- ands r3, r0
- cmp r3, 0xA
- bgt _08027994
- lsls r0, r3, 2
- adds r0, r3
- lsls r3, r0, 1
- ldr r4, _080279D4 @ =gBattleMoveDamage
- ldr r2, _080279D8 @ =gBattleMons
- ldr r0, _080279DC @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r1, [r0]
- adds r0, r3, 0
- adds r0, 0x32
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- ldr r1, _080279E0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080279D4: .4byte gBattleMoveDamage
-_080279D8: .4byte gBattleMons
-_080279DC: .4byte gBankAttacker
-_080279E0: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA0_psywavedamageeffect
-
- thumb_func_start atkA1_counterdamagecalculator
-atkA1_counterdamagecalculator: @ 80279E4
- push {r4-r6,lr}
- ldr r4, _08027A54 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _08027A58 @ =gProtectStructs
- ldrb r0, [r4]
- lsls r0, 4
- adds r0, r5
- ldrb r0, [r0, 0xC]
- bl GetBankSide
- lsls r0, 24
- lsrs r2, r0, 24
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r0, r5, 0x4
- adds r0, r1, r0
- ldr r3, [r0]
- cmp r3, 0
- beq _08027A98
- cmp r6, r2
- beq _08027A98
- ldr r6, _08027A5C @ =gBattleMons
- adds r0, r1, r5
- ldrb r0, [r0, 0xC]
- movs r4, 0x58
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08027A98
- ldr r1, _08027A60 @ =gBattleMoveDamage
- lsls r0, r3, 1
- str r0, [r1]
- ldr r1, _08027A64 @ =gSideTimer
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- beq _08027A6C
- ldrb r1, [r1, 0x9]
- adds r0, r1, 0
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08027A6C
- ldr r0, _08027A68 @ =gBankTarget
- strb r1, [r0]
- b _08027A7C
- .align 2, 0
-_08027A54: .4byte gBankAttacker
-_08027A58: .4byte gProtectStructs
-_08027A5C: .4byte gBattleMons
-_08027A60: .4byte gBattleMoveDamage
-_08027A64: .4byte gSideTimer
-_08027A68: .4byte gBankTarget
-_08027A6C:
- ldr r2, _08027A88 @ =gBankTarget
- ldr r1, _08027A8C @ =gProtectStructs
- ldr r0, _08027A90 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0xC]
- strb r0, [r2]
-_08027A7C:
- ldr r1, _08027A94 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08027AC8
- .align 2, 0
-_08027A88: .4byte gBankTarget
-_08027A8C: .4byte gProtectStructs
-_08027A90: .4byte gBankAttacker
-_08027A94: .4byte gBattlescriptCurrInstr
-_08027A98:
- ldr r2, _08027AD0 @ =gSpecialStatuses
- ldr r0, _08027AD4 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r3, _08027AD8 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_08027AC8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08027AD0: .4byte gSpecialStatuses
-_08027AD4: .4byte gBankAttacker
-_08027AD8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA1_counterdamagecalculator
-
- thumb_func_start atkA2_mirrorcoatdamagecalculator
-atkA2_mirrorcoatdamagecalculator: @ 8027ADC
- push {r4-r6,lr}
- ldr r4, _08027B4C @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _08027B50 @ =gProtectStructs
- ldrb r0, [r4]
- lsls r0, 4
- adds r0, r5
- ldrb r0, [r0, 0xD]
- bl GetBankSide
- lsls r0, 24
- lsrs r2, r0, 24
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r0, r5, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r3, [r0]
- cmp r3, 0
- beq _08027B90
- cmp r6, r2
- beq _08027B90
- ldr r6, _08027B54 @ =gBattleMons
- adds r0, r1, r5
- ldrb r0, [r0, 0xD]
- movs r4, 0x58
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08027B90
- ldr r1, _08027B58 @ =gBattleMoveDamage
- lsls r0, r3, 1
- str r0, [r1]
- ldr r1, _08027B5C @ =gSideTimer
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- beq _08027B64
- ldrb r1, [r1, 0x9]
- adds r0, r1, 0
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08027B64
- ldr r0, _08027B60 @ =gBankTarget
- strb r1, [r0]
- b _08027B74
- .align 2, 0
-_08027B4C: .4byte gBankAttacker
-_08027B50: .4byte gProtectStructs
-_08027B54: .4byte gBattleMons
-_08027B58: .4byte gBattleMoveDamage
-_08027B5C: .4byte gSideTimer
-_08027B60: .4byte gBankTarget
-_08027B64:
- ldr r2, _08027B80 @ =gBankTarget
- ldr r1, _08027B84 @ =gProtectStructs
- ldr r0, _08027B88 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0xD]
- strb r0, [r2]
-_08027B74:
- ldr r1, _08027B8C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08027BC0
- .align 2, 0
-_08027B80: .4byte gBankTarget
-_08027B84: .4byte gProtectStructs
-_08027B88: .4byte gBankAttacker
-_08027B8C: .4byte gBattlescriptCurrInstr
-_08027B90:
- ldr r2, _08027BC8 @ =gSpecialStatuses
- ldr r0, _08027BCC @ =gBankAttacker
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r3, _08027BD0 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_08027BC0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08027BC8: .4byte gSpecialStatuses
-_08027BCC: .4byte gBankAttacker
-_08027BD0: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA2_mirrorcoatdamagecalculator
-
- thumb_func_start atkA3_disablelastusedattack
-atkA3_disablelastusedattack: @ 8027BD4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r4, 0
- ldr r2, _08027CD4 @ =gBattleMons
- ldr r3, _08027CD8 @ =gBankTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r7, r2, 0
- adds r7, 0xC
- adds r0, r7
- ldr r5, _08027CDC @ =gLastUsedMove
- lsls r1, 1
- adds r1, r5
- ldrh r0, [r0]
- mov r9, r2
- adds r6, r3, 0
- ldr r2, _08027CE0 @ =gDisableStructs
- mov r8, r2
- ldrh r1, [r1]
- cmp r0, r1
- beq _08027C28
- mov r12, r6
- movs r3, 0x58
-_08027C08:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08027C28
- lsls r2, r4, 1
- mov r0, r12
- ldrb r1, [r0]
- adds r0, r1, 0
- muls r0, r3
- adds r2, r0
- adds r2, r7
- lsls r1, 1
- adds r1, r5
- ldrh r0, [r2]
- ldrh r1, [r1]
- cmp r0, r1
- bne _08027C08
-_08027C28:
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r8
- ldrh r0, [r0, 0x4]
- cmp r0, 0
- bne _08027CEC
- cmp r4, 0x4
- beq _08027CEC
- movs r5, 0x58
- adds r0, r1, 0
- muls r0, r5
- adds r0, r4, r0
- mov r1, r9
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08027CEC
- ldr r1, _08027CE4 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- lsls r2, r4, 1
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r2, r0
- mov r3, r9
- adds r3, 0xC
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r2, r0
- adds r0, r3
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r8
- muls r1, r5
- adds r2, r1
- adds r2, r3
- ldrh r1, [r2]
- strh r1, [r0, 0x4]
- bl Random
- ldrb r2, [r6]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- add r1, r8
- movs r2, 0x3
- ands r2, r0
- adds r2, 0x2
- ldrb r3, [r1, 0xB]
- movs r0, 0x10
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0xB]
- ldrb r0, [r6]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- add r1, r8
- ldrb r3, [r1, 0xB]
- lsls r2, r3, 28
- lsrs r2, 24
- movs r0, 0xF
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0xB]
- ldr r1, _08027CE8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08027D06
- .align 2, 0
-_08027CD4: .4byte gBattleMons
-_08027CD8: .4byte gBankTarget
-_08027CDC: .4byte gLastUsedMove
-_08027CE0: .4byte gDisableStructs
-_08027CE4: .4byte gBattleTextBuff1
-_08027CE8: .4byte gBattlescriptCurrInstr
-_08027CEC:
- ldr r3, _08027D14 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_08027D06:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08027D14: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA3_disablelastusedattack
-
- thumb_func_start atkA4_setencore
-atkA4_setencore: @ 8027D18
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r5, 0
- ldr r3, _08027E0C @ =gBattleMons
- ldr r4, _08027E10 @ =gBankTarget
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r6, r3, 0
- adds r6, 0xC
- adds r0, r6
- ldr r2, _08027E14 @ =gLastUsedMove
- lsls r1, 1
- adds r1, r2
- ldrh r0, [r0]
- mov r10, r3
- mov r8, r2
- ldr r2, _08027E18 @ =gDisableStructs
- mov r9, r2
- ldrh r1, [r1]
- cmp r0, r1
- beq _08027D72
- mov r12, r4
- adds r7, r6, 0
- mov r6, r8
- movs r3, 0x58
-_08027D52:
- adds r5, 0x1
- cmp r5, 0x3
- bgt _08027D72
- lsls r2, r5, 1
- mov r0, r12
- ldrb r1, [r0]
- adds r0, r1, 0
- muls r0, r3
- adds r2, r0
- adds r2, r7
- lsls r1, 1
- adds r1, r6
- ldrh r0, [r2]
- ldrh r1, [r1]
- cmp r0, r1
- bne _08027D52
-_08027D72:
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r2, [r0]
- cmp r2, 0xA5
- beq _08027D86
- cmp r2, 0xE3
- beq _08027D86
- cmp r2, 0x77
- bne _08027D88
-_08027D86:
- movs r5, 0x4
-_08027D88:
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- mov r2, r9
- adds r3, r0, r2
- ldrh r0, [r3, 0x6]
- cmp r0, 0
- bne _08027E20
- cmp r5, 0x4
- beq _08027E20
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- adds r0, r5, r2
- mov r1, r10
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08027E20
- lsls r0, r5, 1
- adds r0, r2
- subs r1, 0x18
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r3, 0x6]
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r9
- strb r5, [r0, 0xC]
- bl Random
- ldrb r2, [r4]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- add r1, r9
- movs r2, 0x3
- ands r2, r0
- adds r2, 0x3
- ldrb r3, [r1, 0xE]
- movs r0, 0x10
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0xE]
- ldrb r0, [r4]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- add r1, r9
- ldrb r3, [r1, 0xE]
- lsls r2, r3, 28
- lsrs r2, 24
- movs r0, 0xF
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0xE]
- ldr r1, _08027E1C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08027E3A
- .align 2, 0
-_08027E0C: .4byte gBattleMons
-_08027E10: .4byte gBankTarget
-_08027E14: .4byte gLastUsedMove
-_08027E18: .4byte gDisableStructs
-_08027E1C: .4byte gBattlescriptCurrInstr
-_08027E20:
- ldr r3, _08027E48 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_08027E3A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08027E48: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA4_setencore
-
- thumb_func_start sub_8027E4C
-sub_8027E4C: @ 8027E4C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r7, _08027EEC @ =gBattleMons
- ldr r0, _08027EF0 @ =gBankTarget
- mov r8, r0
- ldrb r0, [r0]
- movs r6, 0x58
- adds r2, r0, 0
- muls r2, r6
- adds r0, r7, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- bne _08027F18
- ldr r1, _08027EF4 @ =gBankAttacker
- mov r12, r1
- ldrb r0, [r1]
- muls r0, r6
- adds r0, r7
- ldrh r4, [r0, 0x28]
- adds r0, r2, r7
- ldrh r2, [r0, 0x28]
- adds r4, r2
- asrs r4, 1
- ldr r5, _08027EF8 @ =gBattleMoveDamage
- mov r9, r5
- subs r2, r4
- str r2, [r5]
- ldr r3, _08027EFC @ =0x02000000
- ldr r1, _08027F00 @ =0x00016014
- adds r0, r3, r1
- strb r2, [r0]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r2
- asrs r0, 8
- ldr r5, _08027F04 @ =0x00016015
- adds r1, r3, r5
- strb r0, [r1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r2
- asrs r0, 16
- adds r5, 0x1
- adds r1, r3, r5
- strb r0, [r1]
- lsrs r2, 24
- ldr r0, _08027F08 @ =0x00016017
- adds r3, r0
- strb r2, [r3]
- mov r1, r12
- ldrb r0, [r1]
- muls r0, r6
- adds r0, r7
- ldrh r0, [r0, 0x28]
- subs r0, r4
- mov r5, r9
- str r0, [r5]
- ldr r2, _08027F0C @ =gSpecialStatuses
- mov r0, r8
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x4
- adds r0, r2
- ldr r1, _08027F10 @ =0x0000ffff
- str r1, [r0]
- ldr r1, _08027F14 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08027F32
- .align 2, 0
-_08027EEC: .4byte gBattleMons
-_08027EF0: .4byte gBankTarget
-_08027EF4: .4byte gBankAttacker
-_08027EF8: .4byte gBattleMoveDamage
-_08027EFC: .4byte 0x02000000
-_08027F00: .4byte 0x00016014
-_08027F04: .4byte 0x00016015
-_08027F08: .4byte 0x00016017
-_08027F0C: .4byte gSpecialStatuses
-_08027F10: .4byte 0x0000ffff
-_08027F14: .4byte gBattlescriptCurrInstr
-_08027F18:
- ldr r3, _08027F40 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_08027F32:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08027F40: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8027E4C
-
- thumb_func_start sub_8027F44
-sub_8027F44: @ 8027F44
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r1, _08027FA8 @ =gMoveHitWith
- ldr r4, _08027FAC @ =gBankAttacker
- ldrb r0, [r4]
- lsls r0, 1
- adds r2, r0, r1
- ldrh r1, [r2]
- cmp r1, 0
- beq _08027F8C
- ldr r0, _08027FB0 @ =0x0000ffff
- cmp r1, r0
- beq _08027F8C
- ldrh r0, [r2]
- bl sub_8028350
- lsls r0, 24
- cmp r0, 0
- beq _08028024
- ldr r2, _08027FB4 @ =gProtectStructs
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r0, r2, 0x4
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08028024
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08028024
-_08027F8C:
- ldr r3, _08027FB8 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08028110
- .align 2, 0
-_08027FA8: .4byte gMoveHitWith
-_08027FAC: .4byte gBankAttacker
-_08027FB0: .4byte 0x0000ffff
-_08027FB4: .4byte gProtectStructs
-_08027FB8: .4byte gBattlescriptCurrInstr
-_08027FBC:
- mov r0, r12
- strb r5, [r0]
- mov r1, r10
- ldrb r0, [r1]
- muls r0, r2
- adds r0, r7
- adds r0, 0x22
- strb r5, [r0]
- ldr r1, _08027FE0 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- strb r5, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r1, _08027FE4 @ =gBattlescriptCurrInstr
- b _08028012
- .align 2, 0
-_08027FE0: .4byte gBattleTextBuff1
-_08027FE4: .4byte gBattlescriptCurrInstr
-_08027FE8:
- mov r0, r8
- adds r0, 0x1
- adds r0, r3
- ldrb r2, [r0]
- strb r2, [r4]
- mov r4, r10
- ldrb r0, [r4]
- muls r0, r6
- ldr r7, _0802801C @ =gBattleMons
- adds r0, r7
- adds r0, 0x22
- strb r2, [r0]
- ldr r1, _08028020 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- strb r2, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- mov r1, r12
-_08028012:
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08028110
- .align 2, 0
-_0802801C: .4byte gBattleMons
-_08028020: .4byte gBattleTextBuff1
-_08028024:
- movs r4, 0
- mov r8, r4
- movs r7, 0x7F
- mov r9, r7
-_0802802C:
- bl Random
- mov r4, r9
- ands r4, r0
- cmp r4, 0x70
- bhi _0802802C
- lsls r0, r4, 1
- adds r4, r0, r4
- ldr r6, _08028120 @ =gTypeEffectiveness
- adds r3, r4, r6
- ldr r1, _08028124 @ =gUnknown_02024C44
- ldr r2, _08028128 @ =gBankAttacker
- ldrb r5, [r2]
- lsls r0, r5, 1
- adds r0, r1
- ldrb r1, [r3]
- mov r10, r2
- ldrh r0, [r0]
- cmp r1, r0
- bne _08028088
- adds r0, r4, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _08028088
- ldr r7, _0802812C @ =gBattleMons
- movs r2, 0x58
- adds r0, r5, 0
- muls r0, r2
- adds r3, r0, r7
- movs r0, 0x21
- adds r0, r3
- mov r12, r0
- adds r0, r4, 0x1
- adds r0, r6
- ldrb r5, [r0]
- mov r1, r12
- ldrb r0, [r1]
- adds r1, r5, 0
- cmp r0, r1
- beq _08028088
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- bne _08027FBC
-_08028088:
- movs r7, 0x1
- add r8, r7
- ldr r0, _08028130 @ =0x000003e7
- cmp r8, r0
- ble _0802802C
- movs r0, 0
- mov r8, r0
- ldr r1, _08028134 @ =gBattlescriptCurrInstr
- mov r12, r1
- ldr r3, _08028120 @ =gTypeEffectiveness
- adds r0, r4, 0x1
- adds r0, r3
- mov r9, r0
- adds r5, r3, 0
-_080280A4:
- ldrb r1, [r5]
- cmp r1, 0xFF
- bgt _080280AE
- cmp r1, 0xFE
- bge _080280E8
-_080280AE:
- mov r4, r10
- ldrb r2, [r4]
- lsls r0, r2, 1
- ldr r7, _08028124 @ =gUnknown_02024C44
- adds r0, r7
- ldrh r0, [r0]
- cmp r1, r0
- bne _080280E8
- ldrb r0, [r5, 0x2]
- cmp r0, 0x5
- bhi _080280E8
- movs r6, 0x58
- adds r0, r2, 0
- muls r0, r6
- ldr r1, _0802812C @ =gBattleMons
- adds r2, r0, r1
- adds r4, r2, 0
- adds r4, 0x21
- ldrb r0, [r4]
- mov r7, r9
- ldrb r1, [r7]
- cmp r0, r1
- beq _080280E8
- adds r0, r2, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- beq _080280E8
- b _08027FE8
-_080280E8:
- adds r5, 0x3
- movs r0, 0x3
- add r8, r0
- ldr r0, _08028138 @ =0x0000014f
- cmp r8, r0
- bls _080280A4
- mov r1, r12
- ldr r2, [r1]
- 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
- mov r4, r12
- str r1, [r4]
-_08028110:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028120: .4byte gTypeEffectiveness
-_08028124: .4byte gUnknown_02024C44
-_08028128: .4byte gBankAttacker
-_0802812C: .4byte gBattleMons
-_08028130: .4byte 0x000003e7
-_08028134: .4byte gBattlescriptCurrInstr
-_08028138: .4byte 0x0000014f
- thumb_func_end sub_8027F44
-
- thumb_func_start atkA7_setalwayshitflag
-atkA7_setalwayshitflag: @ 802813C
- push {r4,lr}
- ldr r4, _08028180 @ =gStatuses3
- ldr r3, _08028184 @ =gBankTarget
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r4
- ldr r0, [r1]
- movs r2, 0x19
- negs r2, r2
- ands r0, r2
- str r0, [r1]
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r4
- ldr r0, [r1]
- movs r2, 0x10
- orrs r0, r2
- str r0, [r1]
- ldr r2, _08028188 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _0802818C @ =gBankAttacker
- ldrb r1, [r1]
- strb r1, [r0, 0x15]
- ldr r1, _08028190 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08028180: .4byte gStatuses3
-_08028184: .4byte gBankTarget
-_08028188: .4byte gDisableStructs
-_0802818C: .4byte gBankAttacker
-_08028190: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA7_setalwayshitflag
-
- thumb_func_start atkA8_copymovepermanently
-atkA8_copymovepermanently: @ 8028194
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r0, _080282F4 @ =gUnknown_02024BE8
- ldr r1, _080282F8 @ =0x0000ffff
- adds r5, r1, 0
- strh r5, [r0]
- ldr r3, _080282FC @ =gBattleMons
- ldr r2, _08028300 @ =gBankAttacker
- ldrb r1, [r2]
- movs r0, 0x58
- adds r4, r1, 0
- muls r4, r0
- adds r0, r3, 0
- adds r0, 0x50
- adds r0, r4, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 14
- ands r1, r0
- mov r12, r3
- mov r10, r2
- cmp r1, 0
- beq _080281CC
- b _08028320
-_080281CC:
- ldr r0, _08028304 @ =gUnknown_02024C2C
- ldr r2, _08028308 @ =gBankTarget
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldrh r1, [r1]
- mov r9, r0
- mov r8, r2
- cmp r1, 0xA5
- bne _080281E2
- b _08028320
-_080281E2:
- cmp r1, 0
- bne _080281E8
- b _08028320
-_080281E8:
- cmp r1, r5
- bne _080281EE
- b _08028320
-_080281EE:
- cmp r1, 0xA6
- bne _080281F4
- b _08028320
-_080281F4:
- movs r7, 0
- mov r5, r9
- mov r0, r12
- adds r0, 0xC
- adds r1, r4, r0
- mov r3, r8
-_08028200:
- ldrh r2, [r1]
- cmp r2, 0xA6
- beq _08028212
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r2, r0
- beq _0802821A
-_08028212:
- adds r1, 0x2
- adds r7, 0x1
- cmp r7, 0x3
- ble _08028200
-_0802821A:
- cmp r7, 0x4
- beq _08028220
- b _08028320
-_08028220:
- ldr r4, _0802830C @ =gCurrMovePos
- ldrb r1, [r4]
- lsls r1, 1
- mov r2, r10
- ldrb r0, [r2]
- movs r3, 0x58
- muls r0, r3
- adds r1, r0
- mov r6, r12
- adds r6, 0xC
- adds r1, r6
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- strh r0, [r1]
- mov r1, r10
- ldrb r0, [r1]
- adds r2, r0, 0
- muls r2, r3
- ldrb r4, [r4]
- adds r2, r4
- mov r5, r12
- adds r5, 0x24
- adds r2, r5
- ldr r4, _08028310 @ =gBattleMoves
- mov r1, r8
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r9
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x4]
- strb r0, [r2]
- ldr r1, _08028314 @ =gActiveBank
- mov r2, r10
- ldrb r0, [r2]
- strb r0, [r1]
- movs r7, 0
- ldrb r0, [r2]
- muls r0, r3
- adds r4, r0, r5
- adds r3, r0, 0
- add r2, sp, 0x4
- add r5, sp, 0xC
-_08028282:
- adds r0, r3, r6
- ldrh r0, [r0]
- strh r0, [r2]
- adds r1, r5, r7
- ldrb r0, [r4]
- strb r0, [r1]
- adds r4, 0x1
- adds r3, 0x2
- adds r2, 0x2
- adds r7, 0x1
- cmp r7, 0x3
- ble _08028282
- add r2, sp, 0x4
- mov r0, r10
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- add r0, r12
- adds r0, 0x3B
- ldrb r0, [r0]
- strb r0, [r2, 0xC]
- str r2, [sp]
- movs r0, 0
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x10
- bl EmitSetAttributes
- ldr r0, _08028314 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _08028318 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldr r3, _08028304 @ =gUnknown_02024C2C
- ldr r2, _08028308 @ =gBankTarget
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _0802831C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802833A
- .align 2, 0
-_080282F4: .4byte gUnknown_02024BE8
-_080282F8: .4byte 0x0000ffff
-_080282FC: .4byte gBattleMons
-_08028300: .4byte gBankAttacker
-_08028304: .4byte gUnknown_02024C2C
-_08028308: .4byte gBankTarget
-_0802830C: .4byte gCurrMovePos
-_08028310: .4byte gBattleMoves
-_08028314: .4byte gActiveBank
-_08028318: .4byte gBattleTextBuff1
-_0802831C: .4byte gBattlescriptCurrInstr
-_08028320:
- ldr r3, _0802834C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802833A:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802834C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA8_copymovepermanently
-
- thumb_func_start sub_8028350
-sub_8028350: @ 8028350
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _08028380 @ =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1]
- cmp r0, 0x91
- beq _0802837A
- cmp r0, 0x27
- beq _0802837A
- cmp r0, 0x4B
- beq _0802837A
- cmp r0, 0x97
- beq _0802837A
- cmp r0, 0x9B
- beq _0802837A
- cmp r0, 0x1A
- bne _08028384
-_0802837A:
- movs r0, 0x1
- b _08028386
- .align 2, 0
-_08028380: .4byte gBattleMoves
-_08028384:
- movs r0, 0
-_08028386:
- pop {r1}
- bx r1
- thumb_func_end sub_8028350
-
- thumb_func_start sub_802838C
-sub_802838C: @ 802838C
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _080283AA
- cmp r1, 0xD6
- beq _080283AA
- movs r0, 0x89
- lsls r0, 1
- cmp r1, r0
- beq _080283AA
- cmp r1, 0x77
- beq _080283AA
- cmp r1, 0x76
- bne _080283AE
-_080283AA:
- movs r0, 0x1
- b _080283B0
-_080283AE:
- movs r0, 0
-_080283B0:
- pop {r1}
- bx r1
- thumb_func_end sub_802838C
-
- thumb_func_start move_weather_interaction
-move_weather_interaction: @ 80283B4
- push {lr}
- lsls r1, 16
- lsrs r2, r1, 16
- ldr r1, _0802840C @ =gBattleMoves
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- adds r3, r1, 0
- cmp r0, 0x97
- bne _080283D8
- ldr r0, _08028410 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- bne _08028418
-_080283D8:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, 0x91
- beq _080283FA
- cmp r0, 0x27
- beq _080283FA
- cmp r0, 0x4B
- beq _080283FA
- cmp r0, 0x97
- beq _080283FA
- cmp r0, 0x9B
- beq _080283FA
- cmp r0, 0x1A
- bne _08028418
-_080283FA:
- ldr r0, _08028414 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 20
- ands r0, r1
- cmp r0, 0
- beq _08028418
- movs r0, 0x1
- b _0802841A
- .align 2, 0
-_0802840C: .4byte gBattleMoves
-_08028410: .4byte gBattleWeather
-_08028414: .4byte gHitMarker
-_08028418:
- movs r0, 0x2
-_0802841A:
- pop {r1}
- bx r1
- thumb_func_end move_weather_interaction
-
- thumb_func_start sub_8028420
-sub_8028420: @ 8028420
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- movs r5, 0
- ldr r0, _080284B0 @ =gBankAttacker
- mov r9, r0
- movs r1, 0x58
- mov r8, r1
- ldr r7, _080284B4 @ =gUnknown_02024A8C
- movs r0, 0x84
- lsls r0, 1
- mov r10, r0
-_0802843E:
- lsls r4, r5, 1
- mov r1, r9
- ldrb r0, [r1]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r4, r0
- adds r0, r7
- ldrh r0, [r0]
- bl sub_802838C
- lsls r0, 24
- cmp r0, 0
- bne _0802847E
- mov r1, r9
- ldrb r0, [r1]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r4, r0
- adds r0, r7
- ldrh r1, [r0]
- cmp r1, r10
- beq _0802847E
- cmp r1, 0xFD
- beq _0802847E
- adds r0, r1, 0
- bl sub_8028350
- lsls r0, 24
- cmp r0, 0
- beq _0802848C
-_0802847E:
- ldr r1, _080284B8 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r1
- ldr r0, [r0]
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0802848C:
- adds r5, 0x1
- cmp r5, 0x3
- ble _0802843E
- ldr r0, _080284B0 @ =gBankAttacker
- ldrb r0, [r0]
- adds r1, r6, 0
- movs r2, 0xFD
- bl sub_8015A98
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xF
- bne _080284C0
- ldr r1, _080284BC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08028524
- .align 2, 0
-_080284B0: .4byte gBankAttacker
-_080284B4: .4byte gUnknown_02024A8C
-_080284B8: .4byte gBitTable
-_080284BC: .4byte gBattlescriptCurrInstr
-_080284C0:
- movs r7, 0x3
- ldr r4, _08028534 @ =gBitTable
-_080284C4:
- bl Random
- adds r5, r7, 0
- ands r5, r0
- lsls r0, r5, 2
- adds r0, r4
- ldr r0, [r0]
- ands r0, r6
- cmp r0, 0
- bne _080284C4
- ldr r4, _08028538 @ =gUnknown_02024BEA
- ldr r2, _0802853C @ =gBattleMons
- lsls r1, r5, 1
- ldr r0, _08028540 @ =gBankAttacker
- ldrb r3, [r0]
- movs r0, 0x58
- muls r0, r3
- adds r1, r0
- adds r2, 0xC
- adds r1, r2
- ldrh r0, [r1]
- strh r0, [r4]
- ldr r0, _08028544 @ =gCurrMovePos
- strb r5, [r0]
- ldr r2, _08028548 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0802854C @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldrh r0, [r4]
- movs r1, 0
- bl sub_801B5C0
- ldr r1, _08028550 @ =gBankTarget
- strb r0, [r1]
- ldr r3, _08028554 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_08028524:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028534: .4byte gBitTable
-_08028538: .4byte gUnknown_02024BEA
-_0802853C: .4byte gBattleMons
-_08028540: .4byte gBankAttacker
-_08028544: .4byte gCurrMovePos
-_08028548: .4byte gHitMarker
-_0802854C: .4byte 0xfffffbff
-_08028550: .4byte gBankTarget
-_08028554: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8028420
-
- thumb_func_start sub_8028558
-sub_8028558: @ 8028558
- ldr r1, _0802857C @ =gBattleMons
- ldr r0, _08028580 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 18
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08028584 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802857C: .4byte gBattleMons
-_08028580: .4byte gBankAttacker
-_08028584: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8028558
-
- thumb_func_start b_feature_update_destiny_bond
-b_feature_update_destiny_bond: @ 8028588
- push {r4,r5,lr}
- ldr r0, _080285D8 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _080285DC @ =gBankTarget
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, _080285E0 @ =gBattleMons
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _080285D2
- cmp r5, r3
- beq _080285D2
- ldr r2, _080285E4 @ =gHitMarker
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 17
- ands r0, r1
- cmp r0, 0
- bne _080285D2
- movs r0, 0x40
- orrs r1, r0
- str r1, [r2]
-_080285D2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080285D8: .4byte gBankAttacker
-_080285DC: .4byte gBankTarget
-_080285E0: .4byte gBattleMons
-_080285E4: .4byte gHitMarker
- thumb_func_end b_feature_update_destiny_bond
-
- thumb_func_start atkAB_802A458
-atkAB_802A458: @ 80285E8
- push {lr}
- bl b_feature_update_destiny_bond
- ldr r1, _080285FC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080285FC: .4byte gBattlescriptCurrInstr
- thumb_func_end atkAB_802A458
-
- thumb_func_start atkAC_remaininghptopower
-atkAC_remaininghptopower: @ 8028600
- push {lr}
- ldr r2, _08028654 @ =gBattleMons
- ldr r0, _08028658 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r1, r2
- movs r2, 0x28
- ldrsh r0, [r1, r2]
- movs r2, 0x2C
- ldrsh r1, [r1, r2]
- movs r2, 0x30
- bl GetScaledHPFraction
- lsls r0, 24
- lsrs r1, r0, 24
- movs r3, 0
- ldr r0, _0802865C @ =gUnknown_081FAD26
- ldrb r2, [r0]
- cmp r1, r2
- ble _0802863A
- adds r2, r0, 0
-_0802862C:
- adds r3, 0x2
- cmp r3, 0xB
- bgt _0802863A
- adds r0, r3, r2
- ldrb r0, [r0]
- cmp r1, r0
- bgt _0802862C
-_0802863A:
- ldr r2, _08028660 @ =gDynamicBasePower
- ldr r1, _0802865C @ =gUnknown_081FAD26
- adds r0, r3, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strh r0, [r2]
- ldr r1, _08028664 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08028654: .4byte gBattleMons
-_08028658: .4byte gBankAttacker
-_0802865C: .4byte gUnknown_081FAD26
-_08028660: .4byte gDynamicBasePower
-_08028664: .4byte gBattlescriptCurrInstr
- thumb_func_end atkAC_remaininghptopower
-
- thumb_func_start sub_8028668
-sub_8028668: @ 8028668
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r4, _080287F8 @ =gLastUsedMove
- ldr r1, _080287FC @ =gBankTarget
- ldrb r2, [r1]
- lsls r0, r2, 1
- adds r0, r4
- ldrh r3, [r0]
- mov r8, r1
- cmp r3, 0
- bne _08028688
- b _08028828
-_08028688:
- ldr r0, _08028800 @ =0x0000ffff
- cmp r3, r0
- bne _08028690
- b _08028828
-_08028690:
- ldr r1, _08028804 @ =gStatuses3
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08028808 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _080286A2
- b _08028828
-_080286A2:
- movs r7, 0
- ldr r0, _0802880C @ =gBattleMons
- movs r1, 0x58
- muls r1, r2
- adds r2, r0, 0
- adds r2, 0xC
- adds r1, r2
- ldrh r1, [r1]
- cmp r3, r1
- beq _080286DA
- adds r6, r4, 0
- mov r5, r8
- adds r4, r2, 0
- movs r3, 0x58
-_080286BE:
- adds r7, 0x1
- cmp r7, 0x3
- bgt _080286DA
- ldrb r0, [r5]
- lsls r2, r0, 1
- adds r2, r6
- lsls r1, r7, 1
- muls r0, r3
- adds r1, r0
- adds r1, r4
- ldrh r0, [r2]
- ldrh r1, [r1]
- cmp r0, r1
- bne _080286BE
-_080286DA:
- cmp r7, 0x4
- bne _080286E0
- b _08028828
-_080286E0:
- mov r4, r8
- ldrb r0, [r4]
- movs r1, 0x58
- mov r9, r1
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7, r0
- ldr r1, _0802880C @ =gBattleMons
- adds r1, 0x24
- mov r10, r1
- add r0, r10
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _08028700
- b _08028828
-_08028700:
- bl Random
- movs r1, 0x3
- ands r1, r0
- adds r6, r1, 0x2
- ldrb r0, [r4]
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7, r0
- add r0, r10
- ldrb r0, [r0]
- cmp r0, r6
- bge _0802871E
- adds r6, r0, 0
-_0802871E:
- ldr r1, _08028810 @ =gBattleTextBuff1
- movs r5, 0xFD
- strb r5, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldr r2, _080287F8 @ =gLastUsedMove
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r4, _08028814 @ =gBattleTextBuff2
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- strb r5, [r4]
- movs r0, 0x1
- strb r0, [r4, 0x1]
- strb r0, [r4, 0x2]
- strb r0, [r4, 0x3]
- strb r6, [r4, 0x4]
- subs r0, 0x2
- strb r0, [r4, 0x5]
- mov r1, r8
- ldrb r0, [r1]
- mov r1, r9
- muls r1, r0
- adds r1, r7, r1
- add r1, r10
- ldrb r0, [r1]
- subs r0, r6
- strb r0, [r1]
- ldr r4, _08028818 @ =gActiveBank
- mov r3, r8
- ldrb r0, [r3]
- strb r0, [r4]
- ldr r1, _0802881C @ =gDisableStructs
- ldrb r3, [r4]
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _08028820 @ =gBitTable
- lsls r0, r7, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080287D2
- mov r2, r9
- muls r2, r3
- ldr r0, _0802880C @ =gBattleMons
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _080287D2
- adds r1, r7, 0
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- mov r3, r10
- adds r0, r2, r3
- adds r0, r7
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_080287D2:
- ldr r1, _08028824 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- ldr r1, _0802880C @ =gBattleMons
- ldr r0, _080287FC @ =gBankTarget
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r7, r0
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08028842
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- b _08028842
- .align 2, 0
-_080287F8: .4byte gLastUsedMove
-_080287FC: .4byte gBankTarget
-_08028800: .4byte 0x0000ffff
-_08028804: .4byte gStatuses3
-_08028808: .4byte 0x000400c0
-_0802880C: .4byte gBattleMons
-_08028810: .4byte gBattleTextBuff1
-_08028814: .4byte gBattleTextBuff2
-_08028818: .4byte gActiveBank
-_0802881C: .4byte gDisableStructs
-_08028820: .4byte gBitTable
-_08028824: .4byte gBattlescriptCurrInstr
-_08028828:
- ldr r3, _08028854 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_08028842:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028854: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8028668
-
- thumb_func_start sub_8028858
-sub_8028858: @ 8028858
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- movs r4, 0
- str r4, [sp, 0x4]
- movs r7, 0
- ldr r0, _080288AC @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xD7
- beq _08028872
- b _08028A26
-_08028872:
- ldr r5, _080288B0 @ =gBattleCommunication
- strb r7, [r5, 0x5]
- ldr r6, _080288B4 @ =gBankAttacker
- ldrb r0, [r6]
- bl GetBankSide
- lsls r0, 24
- ldr r1, _080288B8 @ =gEnemyParty
- mov r9, r1
- cmp r0, 0
- bne _0802888C
- ldr r2, _080288BC @ =gPlayerParty
- mov r9, r2
-_0802888C:
- ldr r4, _080288C0 @ =gBattleMons
- ldrb r3, [r6]
- movs r0, 0x58
- adds r2, r3, 0
- muls r2, r0
- adds r0, r2, r4
- adds r1, r0, 0
- adds r1, 0x20
- ldrb r0, [r1]
- cmp r0, 0x2B
- beq _080288C4
- adds r0, r4, 0
- adds r0, 0x4C
- adds r0, r2, r0
- str r7, [r0]
- b _080288D4
- .align 2, 0
-_080288AC: .4byte gCurrentMove
-_080288B0: .4byte gBattleCommunication
-_080288B4: .4byte gBankAttacker
-_080288B8: .4byte gEnemyParty
-_080288BC: .4byte gPlayerParty
-_080288C0: .4byte gBattleMons
-_080288C4:
- ldrb r1, [r1]
- adds r0, r3, 0
- bl RecordAbilityBattle
- ldrb r0, [r5, 0x5]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r5, 0x5]
-_080288D4:
- ldr r4, _08028934 @ =gActiveBank
- ldr r0, _08028938 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankIdentity
- movs r6, 0x2
- eors r0, r6
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- ldr r1, _0802893C @ =0x02000000
- ldr r2, _08028940 @ =0x00016003
- adds r1, r2
- strb r0, [r1]
- strb r0, [r4]
- ldr r0, _08028944 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08028964
- ldr r0, _08028948 @ =gAbsentBankFlags
- ldrb r2, [r0]
- ldr r1, _0802894C @ =gBitTable
- ldrb r3, [r4]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- bne _08028964
- ldr r5, _08028950 @ =gBattleMons
- movs r0, 0x58
- adds r4, r3, 0
- muls r4, r0
- adds r0, r4, r5
- adds r1, r0, 0
- adds r1, 0x20
- ldrb r0, [r1]
- cmp r0, 0x2B
- beq _08028954
- adds r0, r5, 0
- adds r0, 0x4C
- adds r0, r4, r0
- str r2, [r0]
- b _08028964
- .align 2, 0
-_08028934: .4byte gActiveBank
-_08028938: .4byte gBankAttacker
-_0802893C: .4byte 0x02000000
-_08028940: .4byte 0x00016003
-_08028944: .4byte gBattleTypeFlags
-_08028948: .4byte gAbsentBankFlags
-_0802894C: .4byte gBitTable
-_08028950: .4byte gBattleMons
-_08028954:
- ldrb r1, [r1]
- adds r0, r3, 0
- bl RecordAbilityBattle
- ldr r1, _080289AC @ =gBattleCommunication
- ldrb r0, [r1, 0x5]
- orrs r0, r6
- strb r0, [r1, 0x5]
-_08028964:
- movs r6, 0
- ldr r0, _080289B0 @ =gBattleMons
- mov r8, r0
-_0802896A:
- movs r0, 0x64
- adds r4, r6, 0
- muls r4, r0
- add r4, r9
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r5, 0
- beq _08028A1E
- movs r0, 0xCE
- lsls r0, 1
- cmp r5, r0
- beq _08028A1E
- ldr r2, _080289B4 @ =gBattlePartyID
- ldr r0, _080289B8 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r6
- bne _080289BC
- movs r0, 0x58
- muls r0, r1
- b _080289EC
- .align 2, 0
-_080289AC: .4byte gBattleCommunication
-_080289B0: .4byte gBattleMons
-_080289B4: .4byte gBattlePartyID
-_080289B8: .4byte gBankAttacker
-_080289BC:
- ldr r0, _080289F4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08028A04
- ldr r0, _080289F8 @ =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r6
- bne _08028A04
- ldr r0, _080289FC @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _08028A00 @ =gBitTable
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08028A04
- movs r0, 0x58
- muls r0, r3
-_080289EC:
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- b _08028A10
- .align 2, 0
-_080289F4: .4byte gBattleTypeFlags
-_080289F8: .4byte gActiveBank
-_080289FC: .4byte gAbsentBankFlags
-_08028A00: .4byte gBitTable
-_08028A04:
- adds r0, r5, 0
- adds r1, r4, 0
- bl GetAbilityBySpecies
- lsls r0, 24
- lsrs r0, 24
-_08028A10:
- cmp r0, 0x2B
- beq _08028A1E
- movs r0, 0x1
- lsls r0, r6
- orrs r7, r0
- lsls r0, r7, 24
- lsrs r7, r0, 24
-_08028A1E:
- adds r6, 0x1
- cmp r6, 0x5
- ble _0802896A
- b _08028A7E
-_08028A26:
- ldr r1, _08028AB4 @ =gBattleCommunication
- movs r0, 0x4
- strb r0, [r1, 0x5]
- movs r7, 0x3F
- ldr r2, _08028AB8 @ =gBattleMons
- ldr r1, _08028ABC @ =gBankAttacker
- ldrb r0, [r1]
- movs r6, 0x58
- muls r0, r6
- adds r5, r2, 0
- adds r5, 0x4C
- adds r0, r5
- str r4, [r0]
- ldrb r0, [r1]
- bl GetBankIdentity
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- ldr r3, _08028AC0 @ =gActiveBank
- strb r0, [r3]
- ldr r0, _08028AC4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08028A7E
- ldr r0, _08028AC8 @ =gAbsentBankFlags
- ldrb r2, [r0]
- ldr r1, _08028ACC @ =gBitTable
- ldrb r3, [r3]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- bne _08028A7E
- adds r0, r3, 0
- muls r0, r6
- adds r0, r5
- str r2, [r0]
-_08028A7E:
- ldr r4, _08028AC0 @ =gActiveBank
- ldr r0, _08028ABC @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- add r1, sp, 0x4
- str r1, [sp]
- movs r0, 0
- movs r1, 0x28
- adds r2, r7, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _08028AD0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028AB4: .4byte gBattleCommunication
-_08028AB8: .4byte gBattleMons
-_08028ABC: .4byte gBankAttacker
-_08028AC0: .4byte gActiveBank
-_08028AC4: .4byte gBattleTypeFlags
-_08028AC8: .4byte gAbsentBankFlags
-_08028ACC: .4byte gBitTable
-_08028AD0: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8028858
-
- thumb_func_start sub_8028AD4
-sub_8028AD4: @ 8028AD4
- push {r4-r7,lr}
- ldr r7, _08028B24 @ =gBattleMons
- ldr r0, _08028B28 @ =gBankTarget
- ldrb r3, [r0]
- movs r6, 0x58
- adds r1, r3, 0
- muls r1, r6
- adds r0, r7, 0
- adds r0, 0x50
- adds r4, r1, r0
- ldr r2, [r4]
- movs r5, 0x80
- lsls r5, 21
- adds r0, r2, 0
- ands r0, r5
- cmp r0, 0
- bne _08028B06
- ldr r1, _08028B2C @ =gStatuses3
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08028B30 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08028B38
-_08028B06:
- ldr r3, _08028B34 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08028B5C
- .align 2, 0
-_08028B24: .4byte gBattleMons
-_08028B28: .4byte gBankTarget
-_08028B2C: .4byte gStatuses3
-_08028B30: .4byte 0x000400c0
-_08028B34: .4byte gBattlescriptCurrInstr
-_08028B38:
- orrs r2, r5
- str r2, [r4]
- ldr r1, _08028B64 @ =gBattleMoveDamage
- ldr r0, _08028B68 @ =gBankAttacker
- ldrb r0, [r0]
- muls r0, r6
- adds r0, r7
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _08028B54
- movs r0, 0x1
- str r0, [r1]
-_08028B54:
- ldr r1, _08028B6C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08028B5C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028B64: .4byte gBattleMoveDamage
-_08028B68: .4byte gBankAttacker
-_08028B6C: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8028AD4
-
- thumb_func_start sub_8028B70
-sub_8028B70: @ 8028B70
- push {r4,lr}
- ldr r4, _08028BC4 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08028BC8 @ =gSideTimer
- lsls r2, r0, 1
- adds r0, r2, r0
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3, 0x6]
- cmp r0, 0x3
- bne _08028BD4
- ldr r2, _08028BCC @ =gSpecialStatuses
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r3, _08028BD0 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08028BEE
- .align 2, 0
-_08028BC4: .4byte gBankAttacker
-_08028BC8: .4byte gSideTimer
-_08028BCC: .4byte gSpecialStatuses
-_08028BD0: .4byte gBattlescriptCurrInstr
-_08028BD4:
- ldr r1, _08028BF4 @ =gSideAffecting
- adds r1, r2, r1
- ldrh r2, [r1]
- movs r0, 0x10
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r3, 0x6]
- adds r0, 0x1
- strb r0, [r3, 0x6]
- ldr r1, _08028BF8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08028BEE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08028BF4: .4byte gSideAffecting
-_08028BF8: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8028B70
-
- thumb_func_start sub_8028BFC
-sub_8028BFC: @ 8028BFC
- ldr r1, _08028C20 @ =gBattleMons
- ldr r0, _08028C24 @ =gBankTarget
- ldrb r2, [r0]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 22
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08028C28 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_08028C20: .4byte gBattleMons
-_08028C24: .4byte gBankTarget
-_08028C28: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8028BFC
-
- thumb_func_start atkB2_setperishsong
-atkB2_setperishsong: @ 8028C2C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r6, 0
- movs r3, 0
- ldr r0, _08028C70 @ =gNoOfAllBanks
- adds r7, r0, 0
- ldr r0, _08028C74 @ =gBankAttacker
- mov r8, r0
- ldrb r1, [r7]
- cmp r6, r1
- bge _08028C98
- movs r5, 0x20
- ldr r0, _08028C78 @ =gBattleMons
- mov r12, r0
- ldr r0, _08028C7C @ =gDisableStructs
- adds r4, r0, 0
- adds r4, 0xF
- ldr r2, _08028C80 @ =gStatuses3
-_08028C54:
- ldr r1, [r2]
- adds r0, r1, 0
- ands r0, r5
- cmp r0, 0
- bne _08028C6C
- movs r0, 0x58
- muls r0, r3
- add r0, r12
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2B
- bne _08028C84
-_08028C6C:
- adds r6, 0x1
- b _08028C8C
- .align 2, 0
-_08028C70: .4byte gNoOfAllBanks
-_08028C74: .4byte gBankAttacker
-_08028C78: .4byte gBattleMons
-_08028C7C: .4byte gDisableStructs
-_08028C80: .4byte gStatuses3
-_08028C84:
- orrs r1, r5
- str r1, [r2]
- movs r0, 0x33
- strb r0, [r4]
-_08028C8C:
- adds r4, 0x1C
- adds r2, 0x4
- adds r3, 0x1
- ldrb r0, [r7]
- cmp r3, r0
- blt _08028C54
-_08028C98:
- mov r1, r8
- ldrb r0, [r1]
- bl sub_80153D0
- ldr r0, _08028CC4 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r6, r0
- bne _08028CCC
- ldr r3, _08028CC8 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08028CD4
- .align 2, 0
-_08028CC4: .4byte gNoOfAllBanks
-_08028CC8: .4byte gBattlescriptCurrInstr
-_08028CCC:
- ldr r1, _08028CE0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08028CD4:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028CE0: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB2_setperishsong
-
- thumb_func_start atkB3_rolloutdamagecalculation
-atkB3_rolloutdamagecalculation: @ 8028CE4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _08028D08 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _08028D18
- ldr r0, _08028D0C @ =gBankAttacker
- ldrb r0, [r0]
- bl CancelMultiTurnMoves
- ldr r1, _08028D10 @ =gBattlescriptCurrInstr
- ldr r0, _08028D14 @ =BattleScript_1D6F74
- str r0, [r1]
- b _08028E30
- .align 2, 0
-_08028D08: .4byte gBattleMoveFlags
-_08028D0C: .4byte gBankAttacker
-_08028D10: .4byte gBattlescriptCurrInstr
-_08028D14: .4byte BattleScript_1D6F74
-_08028D18:
- ldr r2, _08028E3C @ =gBattleMons
- ldr r1, _08028E40 @ =gBankAttacker
- ldrb r3, [r1]
- movs r5, 0x58
- adds r0, r3, 0
- muls r0, r5
- adds r4, r2, 0
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r7, 0x80
- lsls r7, 5
- ands r0, r7
- adds r6, r1, 0
- mov r9, r2
- ldr r1, _08028E44 @ =gDisableStructs
- mov r12, r1
- ldr r2, _08028E48 @ =gCurrentMove
- mov r8, r2
- cmp r0, 0
- bne _08028D8A
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- add r0, r12
- ldrb r2, [r0, 0x11]
- movs r1, 0x10
- negs r1, r1
- ands r1, r2
- movs r2, 0x5
- orrs r1, r2
- strb r1, [r0, 0x11]
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r2, [r0, 0x11]
- movs r1, 0xF
- ands r1, r2
- movs r2, 0x50
- orrs r1, r2
- strb r1, [r0, 0x11]
- ldrb r0, [r6]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r4
- ldr r0, [r1]
- orrs r0, r7
- str r0, [r1]
- ldr r1, _08028E4C @ =gLockedMove
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r1
- mov r2, r8
- ldrh r1, [r2]
- strh r1, [r0]
-_08028D8A:
- ldrb r0, [r6]
- lsls r2, r0, 3
- subs r2, r0
- lsls r2, 2
- add r2, r12
- ldrb r3, [r2, 0x11]
- lsls r1, r3, 28
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r0, 0x10
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x11]
- cmp r1, 0
- bne _08028DBE
- ldrb r0, [r6]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r4
- ldr r0, [r1]
- ldr r2, _08028E50 @ =0xffffefff
- ands r0, r2
- str r0, [r1]
-_08028DBE:
- ldr r3, _08028E54 @ =gDynamicBasePower
- ldr r2, _08028E58 @ =gBattleMoves
- mov r0, r8
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- strh r0, [r3]
- movs r2, 0x1
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- mov r1, r12
- adds r4, r0, r1
- ldrb r0, [r4, 0x11]
- lsls r0, 28
- lsrs r0, 28
- movs r1, 0x5
- subs r1, r0
- ldr r7, _08028E5C @ =gBattlescriptCurrInstr
- adds r5, r3, 0
- cmp r2, r1
- bge _08028E0C
- adds r1, r5, 0
- adds r3, r4, 0
- movs r4, 0x5
-_08028DF8:
- ldrh r0, [r1]
- lsls r0, 1
- strh r0, [r1]
- adds r2, 0x1
- ldrb r0, [r3, 0x11]
- lsls r0, 28
- lsrs r0, 28
- subs r0, r4, r0
- cmp r2, r0
- blt _08028DF8
-_08028E0C:
- ldrb r1, [r6]
- movs r0, 0x58
- muls r0, r1
- mov r1, r9
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 23
- ands r0, r1
- cmp r0, 0
- beq _08028E2A
- ldrh r0, [r5]
- lsls r0, 1
- strh r0, [r5]
-_08028E2A:
- ldr r0, [r7]
- adds r0, 0x1
- str r0, [r7]
-_08028E30:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028E3C: .4byte gBattleMons
-_08028E40: .4byte gBankAttacker
-_08028E44: .4byte gDisableStructs
-_08028E48: .4byte gCurrentMove
-_08028E4C: .4byte gLockedMove
-_08028E50: .4byte 0xffffefff
-_08028E54: .4byte gDynamicBasePower
-_08028E58: .4byte gBattleMoves
-_08028E5C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB3_rolloutdamagecalculation
-
- thumb_func_start atkB4_jumpifconfusedandattackmaxed
-atkB4_jumpifconfusedandattackmaxed: @ 8028E60
- push {r4,r5,lr}
- ldr r5, _08028EB0 @ =gBattleMons
- ldr r0, _08028EB4 @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- adds r3, r1, 0
- muls r3, r0
- adds r0, r5, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- ldr r4, _08028EB8 @ =gBattlescriptCurrInstr
- cmp r0, 0
- beq _08028EBC
- ldr r2, [r4]
- ldrb r0, [r2, 0x1]
- adds r0, r3
- adds r1, r5, 0
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xC
- bne _08028EBC
- 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 _08028EC2
- .align 2, 0
-_08028EB0: .4byte gBattleMons
-_08028EB4: .4byte gBankTarget
-_08028EB8: .4byte gBattlescriptCurrInstr
-_08028EBC:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_08028EC2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end atkB4_jumpifconfusedandattackmaxed
-
- thumb_func_start sub_8028EC8
-sub_8028EC8: @ 8028EC8
- push {r4,r5,lr}
- ldr r0, _08028EF0 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _08028F04
- ldr r2, _08028EF4 @ =gDisableStructs
- ldr r0, _08028EF8 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x10]
- ldr r1, _08028EFC @ =gBattlescriptCurrInstr
- ldr r0, _08028F00 @ =BattleScript_1D6F74
- str r0, [r1]
- b _08028F5C
- .align 2, 0
-_08028EF0: .4byte gBattleMoveFlags
-_08028EF4: .4byte gDisableStructs
-_08028EF8: .4byte gBankAttacker
-_08028EFC: .4byte gBattlescriptCurrInstr
-_08028F00: .4byte BattleScript_1D6F74
-_08028F04:
- ldr r5, _08028F64 @ =gDisableStructs
- ldr r4, _08028F68 @ =gBankAttacker
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1, 0x10]
- cmp r0, 0x5
- beq _08028F1C
- adds r0, 0x1
- strb r0, [r1, 0x10]
-_08028F1C:
- ldr r3, _08028F6C @ =gDynamicBasePower
- ldr r2, _08028F70 @ =gBattleMoves
- ldr r0, _08028F74 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- strh r0, [r3]
- movs r2, 0x1
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r4, _08028F78 @ =gBattlescriptCurrInstr
- ldrb r1, [r0, 0x10]
- cmp r2, r1
- bge _08028F56
- adds r1, r3, 0
- adds r3, r0, 0
-_08028F48:
- ldrh r0, [r1]
- lsls r0, 1
- strh r0, [r1]
- adds r2, 0x1
- ldrb r0, [r3, 0x10]
- cmp r2, r0
- blt _08028F48
-_08028F56:
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
-_08028F5C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08028F64: .4byte gDisableStructs
-_08028F68: .4byte gBankAttacker
-_08028F6C: .4byte gDynamicBasePower
-_08028F70: .4byte gBattleMoves
-_08028F74: .4byte gCurrentMove
-_08028F78: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8028EC8
-
- thumb_func_start atkB6_happinesstodamagecalculation
-atkB6_happinesstodamagecalculation: @ 8028F7C
- push {r4,lr}
- ldr r2, _08028FA8 @ =gBattleMoves
- ldr r0, _08028FAC @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x79
- bne _08028FBC
- ldr r4, _08028FB0 @ =gDynamicBasePower
- ldr r2, _08028FB4 @ =gBattleMons
- ldr r0, _08028FB8 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2B
- ldrb r1, [r0]
- b _08028FD2
- .align 2, 0
-_08028FA8: .4byte gBattleMoves
-_08028FAC: .4byte gCurrentMove
-_08028FB0: .4byte gDynamicBasePower
-_08028FB4: .4byte gBattleMons
-_08028FB8: .4byte gBankAttacker
-_08028FBC:
- ldr r4, _08028FF0 @ =gDynamicBasePower
- ldr r2, _08028FF4 @ =gBattleMons
- ldr r0, _08028FF8 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2B
- ldrb r0, [r0]
- movs r1, 0xFF
- subs r1, r0
-_08028FD2:
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- movs r1, 0x19
- bl __divsi3
- strh r0, [r4]
- ldr r1, _08028FFC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08028FF0: .4byte gDynamicBasePower
-_08028FF4: .4byte gBattleMons
-_08028FF8: .4byte gBankAttacker
-_08028FFC: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB6_happinesstodamagecalculation
-
- thumb_func_start atkB7_presentdamagecalculation
-atkB7_presentdamagecalculation: @ 8029000
- push {r4,lr}
- bl Random
- movs r4, 0xFF
- ands r4, r0
- cmp r4, 0x65
- bgt _0802901C
- ldr r1, _08029018 @ =gDynamicBasePower
- movs r0, 0x28
- strh r0, [r1]
- b _0802905E
- .align 2, 0
-_08029018: .4byte gDynamicBasePower
-_0802901C:
- cmp r4, 0xB1
- bgt _0802902C
- ldr r1, _08029028 @ =gDynamicBasePower
- movs r0, 0x50
- strh r0, [r1]
- b _0802905E
- .align 2, 0
-_08029028: .4byte gDynamicBasePower
-_0802902C:
- cmp r4, 0xCB
- bgt _0802903C
- ldr r1, _08029038 @ =gDynamicBasePower
- movs r0, 0x78
- strh r0, [r1]
- b _0802905E
- .align 2, 0
-_08029038: .4byte gDynamicBasePower
-_0802903C:
- ldr r3, _08029068 @ =gBattleMoveDamage
- ldr r2, _0802906C @ =gBattleMons
- ldr r0, _08029070 @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2C]
- lsrs r0, 2
- str r0, [r3]
- cmp r0, 0
- bne _08029058
- movs r0, 0x1
- str r0, [r3]
-_08029058:
- ldr r0, [r3]
- negs r0, r0
- str r0, [r3]
-_0802905E:
- cmp r4, 0xCB
- bgt _0802907C
- ldr r1, _08029074 @ =gBattlescriptCurrInstr
- ldr r0, _08029078 @ =BattleScript_1D6F44
- b _080290AC
- .align 2, 0
-_08029068: .4byte gBattleMoveDamage
-_0802906C: .4byte gBattleMons
-_08029070: .4byte gBankTarget
-_08029074: .4byte gBattlescriptCurrInstr
-_08029078: .4byte BattleScript_1D6F44
-_0802907C:
- ldr r2, _08029098 @ =gBattleMons
- ldr r0, _0802909C @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r1, [r0, 0x2C]
- ldrh r0, [r0, 0x28]
- cmp r1, r0
- bne _080290A8
- ldr r1, _080290A0 @ =gBattlescriptCurrInstr
- ldr r0, _080290A4 @ =BattleScript_1D83B5
- b _080290AC
- .align 2, 0
-_08029098: .4byte gBattleMons
-_0802909C: .4byte gBankTarget
-_080290A0: .4byte gBattlescriptCurrInstr
-_080290A4: .4byte BattleScript_1D83B5
-_080290A8:
- ldr r1, _080290B4 @ =gBattlescriptCurrInstr
- ldr r0, _080290B8 @ =BattleScript_1D839B
-_080290AC:
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080290B4: .4byte gBattlescriptCurrInstr
-_080290B8: .4byte BattleScript_1D839B
- thumb_func_end atkB7_presentdamagecalculation
-
- thumb_func_start sub_80290BC
-sub_80290BC: @ 80290BC
- push {r4-r6,lr}
- ldr r4, _080290F0 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankIdentity
- ldr r6, _080290F4 @ =gSideAffecting
- movs r5, 0x1
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r6
- ldrh r1, [r1]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08029100
- ldr r2, _080290F8 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _080290FC @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- b _08029132
- .align 2, 0
-_080290F0: .4byte gBankAttacker
-_080290F4: .4byte gSideAffecting
-_080290F8: .4byte gBattleMoveFlags
-_080290FC: .4byte gBattleCommunication
-_08029100:
- ldrb r0, [r4]
- bl GetBankIdentity
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r6
- ldrh r0, [r1]
- movs r2, 0x20
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r4]
- bl GetBankIdentity
- ldr r2, _08029140 @ =gSideTimer
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strb r1, [r0, 0x7]
- ldr r0, _08029144 @ =gBattleCommunication
- strb r1, [r0, 0x5]
-_08029132:
- ldr r1, _08029148 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08029140: .4byte gSideTimer
-_08029144: .4byte gBattleCommunication
-_08029148: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_80290BC
-
- thumb_func_start atkB9_magnitudedamagecalculation
-atkB9_magnitudedamagecalculation: @ 802914C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x4
- bgt _08029178
- ldr r1, _08029174 @ =gDynamicBasePower
- movs r0, 0xA
- strh r0, [r1]
- movs r3, 0x4
- b _080291E4
- .align 2, 0
-_08029174: .4byte gDynamicBasePower
-_08029178:
- cmp r3, 0xE
- bgt _0802918C
- ldr r1, _08029188 @ =gDynamicBasePower
- movs r0, 0x1E
- strh r0, [r1]
- movs r3, 0x5
- b _080291E4
- .align 2, 0
-_08029188: .4byte gDynamicBasePower
-_0802918C:
- cmp r3, 0x22
- bgt _080291A0
- ldr r1, _0802919C @ =gDynamicBasePower
- movs r0, 0x32
- strh r0, [r1]
- movs r3, 0x6
- b _080291E4
- .align 2, 0
-_0802919C: .4byte gDynamicBasePower
-_080291A0:
- cmp r3, 0x40
- bgt _080291B4
- ldr r1, _080291B0 @ =gDynamicBasePower
- movs r0, 0x46
- strh r0, [r1]
- movs r3, 0x7
- b _080291E4
- .align 2, 0
-_080291B0: .4byte gDynamicBasePower
-_080291B4:
- cmp r3, 0x54
- bgt _080291C8
- ldr r1, _080291C4 @ =gDynamicBasePower
- movs r0, 0x5A
- strh r0, [r1]
- movs r3, 0x8
- b _080291E4
- .align 2, 0
-_080291C4: .4byte gDynamicBasePower
-_080291C8:
- cmp r3, 0x5E
- bgt _080291DC
- ldr r1, _080291D8 @ =gDynamicBasePower
- movs r0, 0x6E
- strh r0, [r1]
- movs r3, 0x9
- b _080291E4
- .align 2, 0
-_080291D8: .4byte gDynamicBasePower
-_080291DC:
- ldr r1, _08029250 @ =gDynamicBasePower
- movs r0, 0x96
- strh r0, [r1]
- movs r3, 0xA
-_080291E4:
- ldr r1, _08029254 @ =gBattleTextBuff1
- movs r2, 0
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- strb r0, [r1, 0x2]
- movs r0, 0x2
- strb r0, [r1, 0x3]
- strb r3, [r1, 0x4]
- movs r0, 0xFF
- strb r0, [r1, 0x5]
- ldr r1, _08029258 @ =gBankTarget
- strb r2, [r1]
- ldr r0, _0802925C @ =gNoOfAllBanks
- ldrb r3, [r0]
- adds r6, r1, 0
- ldr r0, _08029260 @ =gBattlescriptCurrInstr
- mov r8, r0
- cmp r2, r3
- bcs _0802923C
- adds r4, r6, 0
- ldr r0, _08029264 @ =gBankAttacker
- ldrb r5, [r0]
- ldr r1, _08029268 @ =gBitTable
- mov r12, r1
- ldr r7, _0802926C @ =gAbsentBankFlags
-_0802921A:
- ldrb r2, [r4]
- cmp r2, r5
- beq _08029230
- ldrb r0, [r7]
- ldrb r1, [r6]
- lsls r1, 2
- add r1, r12
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- beq _0802923C
-_08029230:
- adds r0, r2, 0x1
- strb r0, [r4]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r3
- bcc _0802921A
-_0802923C:
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029250: .4byte gDynamicBasePower
-_08029254: .4byte gBattleTextBuff1
-_08029258: .4byte gBankTarget
-_0802925C: .4byte gNoOfAllBanks
-_08029260: .4byte gBattlescriptCurrInstr
-_08029264: .4byte gBankAttacker
-_08029268: .4byte gBitTable
-_0802926C: .4byte gAbsentBankFlags
- thumb_func_end atkB9_magnitudedamagecalculation
-
- thumb_func_start sub_8029270
-sub_8029270: @ 8029270
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _08029294 @ =gMultiHitCounter
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080292A0
- ldr r0, _08029298 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0802929C
- movs r0, 0x1
- b _080292BA
- .align 2, 0
-_08029294: .4byte gMultiHitCounter
-_08029298: .4byte gBankAttacker
-_0802929C:
- movs r0, 0
- b _080292BA
-_080292A0:
- ldr r0, _080292B4 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _080292B8
- movs r0, 0x3
- b _080292BA
- .align 2, 0
-_080292B4: .4byte gBankAttacker
-_080292B8:
- movs r0, 0x2
-_080292BA:
- bl GetBankByPlayerAI
- ldr r1, _0802937C @ =gBankTarget
- strb r0, [r1]
- ldr r0, _08029380 @ =gActionForBanks
- ldr r1, _0802937C @ =gBankTarget
- mov r9, r1
- ldrb r3, [r1]
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _080293BC
- ldr r5, _08029384 @ =gBankAttacker
- ldr r0, _08029388 @ =0x02000000
- ldr r2, _0802938C @ =0x00016010
- adds r1, r3, r2
- adds r1, r0
- ldrb r2, [r5]
- mov r10, r0
- ldrb r1, [r1]
- cmp r2, r1
- bne _080293BC
- ldr r4, _08029390 @ =gBattleMons
- movs r2, 0x58
- adds r0, r3, 0
- muls r0, r2
- adds r1, r4, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x27
- ands r0, r1
- cmp r0, 0
- bne _080293BC
- ldrb r0, [r5]
- muls r0, r2
- adds r0, r4
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _080293BC
- ldr r0, _08029394 @ =gDisableStructs
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x18]
- lsls r0, 31
- cmp r0, 0
- bne _080293BC
- ldr r0, _08029398 @ =gChosenMovesByBanks
- lsls r1, r3, 1
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0xE4
- bne _080293BC
- movs r1, 0
- ldr r0, _0802939C @ =gNoOfAllBanks
- ldr r7, _080293A0 @ =gCurrentMove
- mov r8, r7
- ldr r2, _080293A4 @ =gHitMarker
- mov r12, r2
- ldrb r7, [r0]
- cmp r1, r7
- bge _0802935A
- ldr r6, _080293A8 @ =gTurnOrder
- mov r5, r9
- ldr r4, _080293AC @ =gUnknown_02024A76
- movs r3, 0xB
- adds r2, r0, 0
-_08029344:
- adds r0, r1, r6
- ldrb r0, [r0]
- ldrb r7, [r5]
- cmp r0, r7
- bne _08029352
- adds r0, r1, r4
- strb r3, [r0]
-_08029352:
- adds r1, 0x1
- ldrb r0, [r2]
- cmp r1, r0
- blt _08029344
-_0802935A:
- movs r0, 0xE4
- mov r1, r8
- strh r0, [r1]
- ldr r2, _080293B0 @ =gBattlescriptCurrInstr
- ldr r0, [r2]
- adds r0, 0x5
- str r0, [r2]
- ldr r1, _080293B4 @ =0x00016002
- add r1, r10
- movs r0, 0x1
- strb r0, [r1]
- mov r7, r12
- ldr r0, [r7]
- ldr r1, _080293B8 @ =0xfffffbff
- ands r0, r1
- str r0, [r7]
- b _080293D6
- .align 2, 0
-_0802937C: .4byte gBankTarget
-_08029380: .4byte gActionForBanks
-_08029384: .4byte gBankAttacker
-_08029388: .4byte 0x02000000
-_0802938C: .4byte 0x00016010
-_08029390: .4byte gBattleMons
-_08029394: .4byte gDisableStructs
-_08029398: .4byte gChosenMovesByBanks
-_0802939C: .4byte gNoOfAllBanks
-_080293A0: .4byte gCurrentMove
-_080293A4: .4byte gHitMarker
-_080293A8: .4byte gTurnOrder
-_080293AC: .4byte gUnknown_02024A76
-_080293B0: .4byte gBattlescriptCurrInstr
-_080293B4: .4byte 0x00016002
-_080293B8: .4byte 0xfffffbff
-_080293BC:
- ldr r3, _080293E4 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_080293D6:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080293E4: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8029270
-
- thumb_func_start sub_80293E8
-sub_80293E8: @ 80293E8
- push {lr}
- ldr r2, _08029408 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _08029414
- ldr r2, _0802940C @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08029410 @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _08029426
- .align 2, 0
-_08029408: .4byte gBattleWeather
-_0802940C: .4byte gBattleMoveFlags
-_08029410: .4byte gBattleCommunication
-_08029414:
- movs r0, 0x20
- strh r0, [r2]
- ldr r1, _08029434 @ =gBattleCommunication
- movs r0, 0x4
- strb r0, [r1, 0x5]
- ldr r0, _08029438 @ =gWishFutureKnock
- adds r0, 0x28
- movs r1, 0x5
- strb r1, [r0]
-_08029426:
- ldr r1, _0802943C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08029434: .4byte gBattleCommunication
-_08029438: .4byte gWishFutureKnock
-_0802943C: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_80293E8
-
- thumb_func_start atkBC_maxattackhalvehp
-atkBC_maxattackhalvehp: @ 8029440
- push {r4,r5,lr}
- ldr r5, _0802948C @ =gBattleMons
- ldr r4, _08029490 @ =gBankAttacker
- ldrb r0, [r4]
- movs r3, 0x58
- muls r0, r3
- adds r2, r0, r5
- ldrh r0, [r2, 0x2C]
- lsrs r1, r0, 1
- cmp r1, 0
- bne _08029458
- movs r1, 0x1
-_08029458:
- movs r0, 0x19
- ldrsb r0, [r2, r0]
- cmp r0, 0xB
- bgt _0802949C
- ldrh r0, [r2, 0x28]
- cmp r0, r1
- bls _0802949C
- movs r0, 0xC
- strb r0, [r2, 0x19]
- ldr r1, _08029494 @ =gBattleMoveDamage
- ldrb r0, [r4]
- muls r0, r3
- adds r0, r5
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _08029480
- movs r0, 0x1
- str r0, [r1]
-_08029480:
- ldr r1, _08029498 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _080294B6
- .align 2, 0
-_0802948C: .4byte gBattleMons
-_08029490: .4byte gBankAttacker
-_08029494: .4byte gBattleMoveDamage
-_08029498: .4byte gBattlescriptCurrInstr
-_0802949C:
- ldr r3, _080294BC @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_080294B6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080294BC: .4byte gBattlescriptCurrInstr
- thumb_func_end atkBC_maxattackhalvehp
-
- thumb_func_start atkBD_copyfoestats
-atkBD_copyfoestats: @ 80294C0
- push {r4-r7,lr}
- movs r2, 0
- ldr r7, _080294F8 @ =gBattlescriptCurrInstr
- ldr r6, _080294FC @ =gBankAttacker
- movs r4, 0x58
- ldr r3, _08029500 @ =gUnknown_02024A98
- ldr r5, _08029504 @ =gBankTarget
-_080294CE:
- ldrb r0, [r6]
- adds r1, r0, 0
- muls r1, r4
- adds r1, r2, r1
- adds r1, r3
- ldrb r0, [r5]
- muls r0, r4
- adds r0, r2, r0
- adds r0, r3
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0x7
- ble _080294CE
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080294F8: .4byte gBattlescriptCurrInstr
-_080294FC: .4byte gBankAttacker
-_08029500: .4byte gUnknown_02024A98
-_08029504: .4byte gBankTarget
- thumb_func_end atkBD_copyfoestats
-
- thumb_func_start atkBE_breakfree
-atkBE_breakfree: @ 8029508
- push {r4,r5,lr}
- ldr r1, _08029570 @ =gBattleMons
- ldr r5, _08029574 @ =gBankAttacker
- ldrb r2, [r5]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r3, r0, r1
- ldr r1, [r3]
- movs r0, 0xE0
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _08029594
- ldr r0, _08029578 @ =0xffff1fff
- ands r1, r0
- str r1, [r3]
- ldr r1, _0802957C @ =gBankTarget
- ldr r2, _08029580 @ =0x02000000
- ldrb r0, [r5]
- ldr r3, _08029584 @ =0x00016020
- adds r0, r3
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r1, _08029588 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldrb r0, [r5]
- lsls r0, 1
- subs r3, 0x1C
- adds r0, r3
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r5]
- lsls r0, 1
- adds r3, 0x1
- adds r0, r3
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- bl b_movescr_stack_push_cursor
- ldr r1, _0802958C @ =gBattlescriptCurrInstr
- ldr r0, _08029590 @ =gUnknown_081D92C2
- b _0802963E
- .align 2, 0
-_08029570: .4byte gBattleMons
-_08029574: .4byte gBankAttacker
-_08029578: .4byte 0xffff1fff
-_0802957C: .4byte gBankTarget
-_08029580: .4byte 0x02000000
-_08029584: .4byte 0x00016020
-_08029588: .4byte gBattleTextBuff1
-_0802958C: .4byte gBattlescriptCurrInstr
-_08029590: .4byte gUnknown_081D92C2
-_08029594:
- ldr r4, _080295C8 @ =gStatuses3
- lsls r0, r2, 2
- adds r3, r0, r4
- ldr r1, [r3]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080295D4
- movs r0, 0x5
- negs r0, r0
- ands r1, r0
- str r1, [r3]
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r4
- ldr r0, [r1]
- movs r2, 0x4
- negs r2, r2
- ands r0, r2
- str r0, [r1]
- bl b_movescr_stack_push_cursor
- ldr r1, _080295CC @ =gBattlescriptCurrInstr
- ldr r0, _080295D0 @ =gUnknown_081D92C9
- b _0802963E
- .align 2, 0
-_080295C8: .4byte gStatuses3
-_080295CC: .4byte gBattlescriptCurrInstr
-_080295D0: .4byte gUnknown_081D92C9
-_080295D4:
- adds r0, r2, 0
- bl GetBankSide
- ldr r4, _08029624 @ =gSideAffecting
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08029638
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r2, [r0]
- ldr r1, _08029628 @ =0x0000ffef
- ands r1, r2
- movs r4, 0
- strh r1, [r0]
- ldrb r0, [r5]
- bl GetBankSide
- ldr r2, _0802962C @ =gSideTimer
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- strb r4, [r1, 0x6]
- bl b_movescr_stack_push_cursor
- ldr r1, _08029630 @ =gBattlescriptCurrInstr
- ldr r0, _08029634 @ =gUnknown_081D92D0
- b _0802963E
- .align 2, 0
-_08029624: .4byte gSideAffecting
-_08029628: .4byte 0x0000ffef
-_0802962C: .4byte gSideTimer
-_08029630: .4byte gBattlescriptCurrInstr
-_08029634: .4byte gUnknown_081D92D0
-_08029638:
- ldr r1, _08029648 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
-_0802963E:
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08029648: .4byte gBattlescriptCurrInstr
- thumb_func_end atkBE_breakfree
-
- thumb_func_start sub_802964C
-sub_802964C: @ 802964C
- ldr r1, _08029670 @ =gBattleMons
- ldr r0, _08029674 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 23
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08029678 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_08029670: .4byte gBattleMons
-_08029674: .4byte gBankAttacker
-_08029678: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802964C
-
- thumb_func_start atkC0_recoverbasedonsunlight
-atkC0_recoverbasedonsunlight: @ 802967C
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r1, _080296E8 @ =gBankTarget
- ldr r5, _080296EC @ =gBankAttacker
- ldrb r0, [r5]
- strb r0, [r1]
- ldr r7, _080296F0 @ =gBattleMons
- ldrb r0, [r5]
- movs r6, 0x58
- muls r0, r6
- adds r0, r7
- ldrh r1, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- cmp r1, r0
- beq _0802975C
- ldr r4, _080296F4 @ =gBattleWeather
- ldrh r0, [r4]
- cmp r0, 0
- beq _080296CE
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080296CE
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _080296FC
-_080296CE:
- ldr r3, _080296F8 @ =gBattleMoveDamage
- ldr r2, _080296F0 @ =gBattleMons
- ldr r0, _080296EC @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r3]
- adds r1, r3, 0
- b _08029736
- .align 2, 0
-_080296E8: .4byte gBankTarget
-_080296EC: .4byte gBankAttacker
-_080296F0: .4byte gBattleMons
-_080296F4: .4byte gBattleWeather
-_080296F8: .4byte gBattleMoveDamage
-_080296FC:
- ldrh r1, [r4]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _08029728
- ldr r4, _08029724 @ =gBattleMoveDamage
- ldrb r0, [r5]
- muls r0, r6
- adds r0, r7
- ldrh r1, [r0, 0x2C]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- movs r1, 0x1E
- bl __divsi3
- str r0, [r4]
- adds r1, r4, 0
- b _08029736
- .align 2, 0
-_08029724: .4byte gBattleMoveDamage
-_08029728:
- ldr r1, _08029754 @ =gBattleMoveDamage
- ldrb r0, [r5]
- muls r0, r6
- adds r0, r7
- ldrh r0, [r0, 0x2C]
- lsrs r0, 2
- str r0, [r1]
-_08029736:
- adds r2, r1, 0
- ldr r0, [r2]
- cmp r0, 0
- bne _08029742
- movs r0, 0x1
- str r0, [r2]
-_08029742:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- ldr r1, _08029758 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029776
- .align 2, 0
-_08029754: .4byte gBattleMoveDamage
-_08029758: .4byte gBattlescriptCurrInstr
-_0802975C:
- ldr r3, _08029780 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_08029776:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029780: .4byte gBattlescriptCurrInstr
- thumb_func_end atkC0_recoverbasedonsunlight
-
- thumb_func_start sub_8029784
-sub_8029784: @ 8029784
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, _08029894 @ =gBattleMons
- ldr r0, _08029898 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- adds r4, r1, 0
- muls r4, r0
- adds r4, r2
- ldrb r0, [r4, 0x14]
- mov r10, r0
- mov r7, r10
- lsls r7, 27
- adds r0, r7, 0
- lsrs r0, 27
- mov r10, r0
- movs r1, 0x2
- mov r2, r10
- ands r2, r1
- asrs r2, 1
- ldrh r7, [r4, 0x14]
- mov r9, r7
- mov r0, r9
- lsls r0, 22
- mov r9, r0
- lsrs r3, r0, 27
- adds r0, r1, 0
- ands r0, r3
- orrs r2, r0
- ldrb r7, [r4, 0x15]
- mov r8, r7
- mov r0, r8
- lsls r0, 25
- mov r8, r0
- lsrs r3, r0, 27
- adds r0, r1, 0
- ands r0, r3
- lsls r0, 1
- orrs r2, r0
- ldr r6, [r4, 0x14]
- lsls r6, 12
- lsrs r3, r6, 27
- adds r0, r1, 0
- ands r0, r3
- lsls r0, 2
- orrs r2, r0
- ldrh r5, [r4, 0x16]
- lsls r5, 23
- lsrs r3, r5, 27
- adds r0, r1, 0
- ands r0, r3
- lsls r0, 3
- orrs r2, r0
- ldrb r3, [r4, 0x17]
- lsls r3, 26
- lsrs r0, r3, 27
- ands r1, r0
- lsls r1, 4
- orrs r2, r1
- movs r1, 0x1
- adds r4, r1, 0
- mov r7, r10
- ands r4, r7
- mov r0, r9
- lsrs r0, 27
- mov r9, r0
- adds r0, r1, 0
- mov r7, r9
- ands r0, r7
- lsls r0, 1
- orrs r4, r0
- mov r0, r8
- lsrs r0, 27
- mov r8, r0
- adds r0, r1, 0
- mov r7, r8
- ands r0, r7
- lsls r0, 2
- orrs r4, r0
- lsrs r6, 27
- adds r0, r1, 0
- ands r0, r6
- lsls r0, 3
- orrs r4, r0
- lsrs r5, 27
- adds r0, r1, 0
- ands r0, r5
- lsls r0, 4
- orrs r4, r0
- lsrs r3, 27
- ands r1, r3
- lsls r1, 5
- orrs r4, r1
- ldr r5, _0802989C @ =gDynamicBasePower
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- movs r1, 0x3F
- bl __divsi3
- adds r0, 0x1E
- strh r0, [r5]
- ldr r5, _080298A0 @ =0x02000000
- lsls r0, r4, 4
- subs r0, r4
- movs r1, 0x3F
- bl __divsi3
- adds r1, r0, 0x1
- ldr r0, _080298A4 @ =0x0001601c
- adds r5, r0
- strb r1, [r5]
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, 0x8
- bls _08029876
- adds r0, r1, 0x1
- strb r0, [r5]
-_08029876:
- ldrb r0, [r5]
- movs r1, 0xC0
- orrs r0, r1
- strb r0, [r5]
- ldr r1, _080298A8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029894: .4byte gBattleMons
-_08029898: .4byte gBankAttacker
-_0802989C: .4byte gDynamicBasePower
-_080298A0: .4byte 0x02000000
-_080298A4: .4byte 0x0001601c
-_080298A8: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8029784
-
- thumb_func_start atkC2_selectnexttarget
-atkC2_selectnexttarget: @ 80298AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _08029908 @ =gBankTarget
- movs r1, 0
- strb r1, [r0]
- ldr r1, _0802990C @ =gNoOfAllBanks
- ldrb r1, [r1]
- adds r6, r0, 0
- ldr r0, _08029910 @ =gBattlescriptCurrInstr
- mov r8, r0
- cmp r1, 0
- beq _080298F6
- adds r3, r6, 0
- ldr r0, _08029914 @ =gBankAttacker
- ldrb r5, [r0]
- ldr r0, _08029918 @ =gBitTable
- mov r12, r0
- adds r4, r1, 0
- ldr r7, _0802991C @ =gAbsentBankFlags
-_080298D4:
- ldrb r2, [r3]
- cmp r2, r5
- beq _080298EA
- ldrb r0, [r7]
- ldrb r1, [r6]
- lsls r1, 2
- add r1, r12
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- beq _080298F6
-_080298EA:
- adds r0, r2, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r4
- bcc _080298D4
-_080298F6:
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029908: .4byte gBankTarget
-_0802990C: .4byte gNoOfAllBanks
-_08029910: .4byte gBattlescriptCurrInstr
-_08029914: .4byte gBankAttacker
-_08029918: .4byte gBitTable
-_0802991C: .4byte gAbsentBankFlags
- thumb_func_end atkC2_selectnexttarget
-
- thumb_func_start atkC3_setfutureattack
-atkC3_setfutureattack: @ 8029920
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- ldr r0, _08029958 @ =gWishFutureKnock
- mov r8, r0
- ldr r7, _0802995C @ =gBankTarget
- ldrb r1, [r7]
- adds r0, r1, r0
- ldrb r6, [r0]
- cmp r6, 0
- beq _08029964
- ldr r3, _08029960 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08029A2E
- .align 2, 0
-_08029958: .4byte gWishFutureKnock
-_0802995C: .4byte gBankTarget
-_08029960: .4byte gBattlescriptCurrInstr
-_08029964:
- lsls r1, 1
- mov r0, r8
- adds r0, 0x18
- adds r1, r0
- ldr r2, _08029A04 @ =gCurrentMove
- mov r9, r2
- ldrh r0, [r2]
- strh r0, [r1]
- mov r0, r8
- adds r0, 0x4
- ldrb r4, [r7]
- adds r0, r4
- ldr r5, _08029A08 @ =gBankAttacker
- ldrb r1, [r5]
- strb r1, [r0]
- ldrb r0, [r7]
- add r0, r8
- movs r1, 0x3
- strb r1, [r0]
- ldr r4, _08029A0C @ =gSideAffecting
- ldrb r0, [r7]
- bl GetBankIdentity
- movs r1, 0x1
- mov r10, r1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- ldr r2, _08029A10 @ =gBattleMons
- adds r0, r2
- ldrb r1, [r7]
- muls r1, r4
- adds r1, r2
- mov r4, r9
- ldrh r2, [r4]
- str r6, [sp]
- str r6, [sp, 0x4]
- ldrb r4, [r5]
- str r4, [sp, 0x8]
- ldrb r4, [r7]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- ldrb r1, [r7]
- lsls r1, 2
- mov r2, r8
- adds r2, 0x8
- adds r1, r2
- str r0, [r1]
- ldr r1, _08029A14 @ =gProtectStructs
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- bge _080299F2
- ldrb r4, [r7]
- lsls r4, 2
- adds r4, r2
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_080299F2:
- mov r0, r9
- ldrh r1, [r0]
- ldr r0, _08029A18 @ =0x00000161
- cmp r1, r0
- bne _08029A20
- ldr r0, _08029A1C @ =gBattleCommunication
- mov r1, r10
- strb r1, [r0, 0x5]
- b _08029A26
- .align 2, 0
-_08029A04: .4byte gCurrentMove
-_08029A08: .4byte gBankAttacker
-_08029A0C: .4byte gSideAffecting
-_08029A10: .4byte gBattleMons
-_08029A14: .4byte gProtectStructs
-_08029A18: .4byte 0x00000161
-_08029A1C: .4byte gBattleCommunication
-_08029A20:
- ldr r1, _08029A40 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
-_08029A26:
- ldr r1, _08029A44 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08029A2E:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029A40: .4byte gBattleCommunication
-_08029A44: .4byte gBattlescriptCurrInstr
- thumb_func_end atkC3_setfutureattack
-
- thumb_func_start atkC4_802B910
-atkC4_802B910: @ 8029A48
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _08029A8C @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- ldr r7, _08029A90 @ =gEnemyParty
- cmp r0, 0
- bne _08029A62
- ldr r7, _08029A94 @ =gPlayerParty
-_08029A62:
- ldr r2, _08029A98 @ =gBattleMons
- ldr r0, _08029A9C @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08029AA4
- ldr r3, _08029AA0 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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]
- b _08029C40
- .align 2, 0
-_08029A8C: .4byte gBankAttacker
-_08029A90: .4byte gEnemyParty
-_08029A94: .4byte gPlayerParty
-_08029A98: .4byte gBattleMons
-_08029A9C: .4byte gBankTarget
-_08029AA0: .4byte gBattlescriptCurrInstr
-_08029AA4:
- ldr r6, _08029BE0 @ =gBattleCommunication
- ldrb r0, [r6]
- mov r8, r0
- cmp r0, 0x5
- bls _08029AB0
- b _08029C0C
-_08029AB0:
- adds r4, r6, 0
- movs r5, 0x64
-_08029AB4:
- ldrb r0, [r4]
- muls r0, r5
- adds r0, r7, r0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08029AF8
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7, r0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08029AF8
- ldrb r0, [r4]
- muls r0, r5
- adds r0, r7, r0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _08029AF8
- ldrb r0, [r4]
- muls r0, r5
- adds r0, r7, r0
- movs r1, 0x37
- bl GetMonData
- cmp r0, 0
- beq _08029B08
-_08029AF8:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- adds r6, r4, 0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bls _08029AB4
-_08029B08:
- ldr r1, _08029BE0 @ =gBattleCommunication
- mov r9, r1
- ldrb r2, [r1]
- cmp r2, 0x5
- bhi _08029C0C
- ldr r1, _08029BE4 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- ldr r6, _08029BE8 @ =gBankAttacker
- ldrb r0, [r6]
- strb r0, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _08029BEC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x9
- str r0, [r1]
- ldr r2, _08029BF0 @ =gBattleMoveDamage
- mov r8, r2
- ldr r5, _08029BF4 @ =gBaseStats
- mov r1, r9
- ldrb r0, [r1]
- movs r4, 0x64
- muls r0, r4
- adds r0, r7, r0
- movs r1, 0xB
- bl GetMonData
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r3, [r1, 0x1]
- mov r2, r8
- str r3, [r2]
- ldr r2, _08029BF8 @ =gBattleMoves
- ldr r0, _08029BFC @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- muls r0, r3
- mov r1, r8
- str r0, [r1]
- mov r2, r9
- ldrb r0, [r2]
- muls r0, r4
- adds r0, r7, r0
- movs r1, 0x38
- bl GetMonData
- lsls r0, 1
- movs r1, 0x5
- bl __udivsi3
- adds r0, 0x2
- mov r2, r8
- ldr r1, [r2]
- muls r0, r1
- str r0, [r2]
- ldr r3, _08029C00 @ =gBattleMons
- ldr r1, _08029C04 @ =gBankTarget
- ldrb r2, [r1]
- movs r1, 0x58
- muls r1, r2
- adds r1, r3
- ldrh r2, [r1]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r5
- ldrb r1, [r1, 0x2]
- bl __divsi3
- mov r1, r8
- str r0, [r1]
- movs r1, 0x32
- bl __divsi3
- adds r2, r0, 0x2
- mov r0, r8
- str r2, [r0]
- ldr r1, _08029C08 @ =gProtectStructs
- ldrb r0, [r6]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- bge _08029BD4
- lsls r0, r2, 4
- subs r0, r2
- movs r1, 0xA
- bl __divsi3
- mov r1, r8
- str r0, [r1]
-_08029BD4:
- mov r2, r9
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- b _08029C46
- .align 2, 0
-_08029BE0: .4byte gBattleCommunication
-_08029BE4: .4byte gBattleTextBuff1
-_08029BE8: .4byte gBankAttacker
-_08029BEC: .4byte gBattlescriptCurrInstr
-_08029BF0: .4byte gBattleMoveDamage
-_08029BF4: .4byte gBaseStats
-_08029BF8: .4byte gBattleMoves
-_08029BFC: .4byte gCurrentMove
-_08029C00: .4byte gBattleMons
-_08029C04: .4byte gBankTarget
-_08029C08: .4byte gProtectStructs
-_08029C0C:
- mov r0, r8
- cmp r0, 0
- beq _08029C2C
- ldr r3, _08029C28 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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]
- b _08029C40
- .align 2, 0
-_08029C28: .4byte gBattlescriptCurrInstr
-_08029C2C:
- ldr r3, _08029C54 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x5]
- ldrb r0, [r2, 0x6]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x8]
-_08029C40:
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_08029C46:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029C54: .4byte gBattlescriptCurrInstr
- thumb_func_end atkC4_802B910
-
- thumb_func_start atkC5_hidepreattack
-atkC5_hidepreattack: @ 8029C58
- push {lr}
- ldr r0, _08029C6C @ =gCurrentMove
- ldrh r1, [r0]
- cmp r1, 0x5B
- beq _08029C98
- cmp r1, 0x5B
- bgt _08029C70
- cmp r1, 0x13
- beq _08029C7C
- b _08029CC4
- .align 2, 0
-_08029C6C: .4byte gCurrentMove
-_08029C70:
- ldr r0, _08029C8C @ =0x00000123
- cmp r1, r0
- beq _08029CB0
- adds r0, 0x31
- cmp r1, r0
- bne _08029CC4
-_08029C7C:
- ldr r2, _08029C90 @ =gStatuses3
- ldr r0, _08029C94 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x40
- b _08029CC0
- .align 2, 0
-_08029C8C: .4byte 0x00000123
-_08029C90: .4byte gStatuses3
-_08029C94: .4byte gBankAttacker
-_08029C98:
- ldr r2, _08029CA8 @ =gStatuses3
- ldr r0, _08029CAC @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x80
- b _08029CC0
- .align 2, 0
-_08029CA8: .4byte gStatuses3
-_08029CAC: .4byte gBankAttacker
-_08029CB0:
- ldr r2, _08029CD0 @ =gStatuses3
- ldr r0, _08029CD4 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 11
-_08029CC0:
- orrs r0, r2
- str r0, [r1]
-_08029CC4:
- ldr r1, _08029CD8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08029CD0: .4byte gStatuses3
-_08029CD4: .4byte gBankAttacker
-_08029CD8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkC5_hidepreattack
-
- thumb_func_start atkC6_unhidepostattack
-atkC6_unhidepostattack: @ 8029CDC
- push {lr}
- ldr r0, _08029CF0 @ =gCurrentMove
- ldrh r1, [r0]
- cmp r1, 0x5B
- beq _08029D20
- cmp r1, 0x5B
- bgt _08029CF4
- cmp r1, 0x13
- beq _08029D00
- b _08029D4E
- .align 2, 0
-_08029CF0: .4byte gCurrentMove
-_08029CF4:
- ldr r0, _08029D14 @ =0x00000123
- cmp r1, r0
- beq _08029D3C
- adds r0, 0x31
- cmp r1, r0
- bne _08029D4E
-_08029D00:
- ldr r2, _08029D18 @ =gStatuses3
- ldr r0, _08029D1C @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x41
- negs r2, r2
- b _08029D4A
- .align 2, 0
-_08029D14: .4byte 0x00000123
-_08029D18: .4byte gStatuses3
-_08029D1C: .4byte gBankAttacker
-_08029D20:
- ldr r2, _08029D34 @ =gStatuses3
- ldr r0, _08029D38 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x81
- negs r2, r2
- b _08029D4A
- .align 2, 0
-_08029D34: .4byte gStatuses3
-_08029D38: .4byte gBankAttacker
-_08029D3C:
- ldr r2, _08029D5C @ =gStatuses3
- ldr r0, _08029D60 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- ldr r2, _08029D64 @ =0xfffbffff
-_08029D4A:
- ands r0, r2
- str r0, [r1]
-_08029D4E:
- ldr r1, _08029D68 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08029D5C: .4byte gStatuses3
-_08029D60: .4byte gBankAttacker
-_08029D64: .4byte 0xfffbffff
-_08029D68: .4byte gBattlescriptCurrInstr
- thumb_func_end atkC6_unhidepostattack
-
- thumb_func_start atkC7_setminimize
-atkC7_setminimize: @ 8029D6C
- push {lr}
- ldr r0, _08029D9C @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _08029D90
- ldr r2, _08029DA0 @ =gStatuses3
- ldr r0, _08029DA4 @ =gBankAttacker
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 1
- orrs r0, r2
- str r0, [r1]
-_08029D90:
- ldr r1, _08029DA8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08029D9C: .4byte gHitMarker
-_08029DA0: .4byte gStatuses3
-_08029DA4: .4byte gBankAttacker
-_08029DA8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkC7_setminimize
-
- thumb_func_start sub_8029DAC
-sub_8029DAC: @ 8029DAC
- push {lr}
- ldr r3, _08029DD0 @ =gBattleWeather
- ldrh r1, [r3]
- movs r2, 0x80
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _08029DDC
- ldr r2, _08029DD4 @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08029DD8 @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _08029DEA
- .align 2, 0
-_08029DD0: .4byte gBattleWeather
-_08029DD4: .4byte gBattleMoveFlags
-_08029DD8: .4byte gBattleCommunication
-_08029DDC:
- strh r2, [r3]
- ldr r0, _08029DF8 @ =gBattleCommunication
- movs r1, 0x5
- strb r1, [r0, 0x5]
- ldr r0, _08029DFC @ =gWishFutureKnock
- adds r0, 0x28
- strb r1, [r0]
-_08029DEA:
- ldr r1, _08029E00 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08029DF8: .4byte gBattleCommunication
-_08029DFC: .4byte gWishFutureKnock
-_08029E00: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_8029DAC
-
- thumb_func_start atkC9_jumpifattackandspecialattackcannotfall
-atkC9_jumpifattackandspecialattackcannotfall: @ 8029E04
- push {r4,lr}
- ldr r2, _08029E48 @ =gBattleMons
- ldr r0, _08029E4C @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- adds r3, r2, 0
- cmp r0, 0
- bne _08029E58
- movs r0, 0x1C
- ldrsb r0, [r1, r0]
- cmp r0, 0
- bne _08029E58
- ldr r0, _08029E50 @ =gBattleCommunication
- ldrb r0, [r0, 0x6]
- cmp r0, 0x1
- beq _08029E58
- ldr r3, _08029E54 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _08029E84
- .align 2, 0
-_08029E48: .4byte gBattleMons
-_08029E4C: .4byte gBankTarget
-_08029E50: .4byte gBattleCommunication
-_08029E54: .4byte gBattlescriptCurrInstr
-_08029E58:
- ldr r4, _08029E8C @ =gActiveBank
- ldr r0, _08029E90 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r2, _08029E94 @ =gBattleMoveDamage
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x28]
- str r0, [r2]
- ldr r1, _08029E98 @ =0x00007fff
- movs r0, 0
- bl EmitHealthBarUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _08029E9C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08029E84:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08029E8C: .4byte gActiveBank
-_08029E90: .4byte gBankAttacker
-_08029E94: .4byte gBattleMoveDamage
-_08029E98: .4byte 0x00007fff
-_08029E9C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkC9_jumpifattackandspecialattackcannotfall
-
- thumb_func_start atkCA_setforcedtarget
-atkCA_setforcedtarget: @ 8029EA0
- push {r4,r5,lr}
- ldr r4, _08029EE0 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- ldr r5, _08029EE4 @ =gSideTimer
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- movs r0, 0x1
- strb r0, [r1, 0x8]
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r4]
- strb r0, [r1, 0x9]
- ldr r1, _08029EE8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08029EE0: .4byte gBankAttacker
-_08029EE4: .4byte gSideTimer
-_08029EE8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkCA_setforcedtarget
-
- thumb_func_start atkCB_setcharge
-atkCB_setcharge: @ 8029EEC
- push {r4,lr}
- ldr r0, _08029F40 @ =gStatuses3
- ldr r3, _08029F44 @ =gBankAttacker
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 2
- orrs r0, r2
- str r0, [r1]
- ldr r4, _08029F48 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r2, [r0, 0x12]
- movs r1, 0x10
- negs r1, r1
- ands r1, r2
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0, 0x12]
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r2, [r0, 0x12]
- movs r1, 0xF
- ands r1, r2
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x12]
- ldr r1, _08029F4C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08029F40: .4byte gStatuses3
-_08029F44: .4byte gBankAttacker
-_08029F48: .4byte gDisableStructs
-_08029F4C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkCB_setcharge
-
- thumb_func_start atkCC_callterrainattack
-atkCC_callterrainattack: @ 8029F50
- push {r4,lr}
- ldr r2, _08029FA0 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _08029FA4 @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r4, _08029FA8 @ =gCurrentMove
- ldr r1, _08029FAC @ =gNaturePowerMoves
- ldr r0, _08029FB0 @ =gBattleTerrain
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4]
- ldrh r0, [r4]
- movs r1, 0
- bl sub_801B5C0
- ldr r1, _08029FB4 @ =gBankTarget
- strb r0, [r1]
- ldr r3, _08029FB8 @ =gUnknown_081D6BBC
- ldr r2, _08029FBC @ =gBattleMoves
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- bl b_movescr_stack_push
- ldr r1, _08029FC0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08029FA0: .4byte gHitMarker
-_08029FA4: .4byte 0xfffffbff
-_08029FA8: .4byte gCurrentMove
-_08029FAC: .4byte gNaturePowerMoves
-_08029FB0: .4byte gBattleTerrain
-_08029FB4: .4byte gBankTarget
-_08029FB8: .4byte gUnknown_081D6BBC
-_08029FBC: .4byte gBattleMoves
-_08029FC0: .4byte gBattlescriptCurrInstr
- thumb_func_end atkCC_callterrainattack
-
- thumb_func_start atkCD_cureifburnedparalysedorpoisoned
-atkCD_cureifburnedparalysedorpoisoned: @ 8029FC4
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r1, _0802A010 @ =gBattleMons
- ldr r3, _0802A014 @ =gBankAttacker
- ldrb r0, [r3]
- movs r6, 0x58
- muls r0, r6
- adds r5, r1, 0
- adds r5, 0x4C
- adds r2, r0, r5
- ldr r0, [r2]
- movs r1, 0xD8
- ands r0, r1
- cmp r0, 0
- beq _0802A020
- movs r0, 0
- str r0, [r2]
- ldr r1, _0802A018 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- ldr r4, _0802A01C @ =gActiveBank
- ldrb r0, [r3]
- strb r0, [r4]
- ldrb r0, [r4]
- muls r0, r6
- adds r0, r5
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0802A03A
- .align 2, 0
-_0802A010: .4byte gBattleMons
-_0802A014: .4byte gBankAttacker
-_0802A018: .4byte gBattlescriptCurrInstr
-_0802A01C: .4byte gActiveBank
-_0802A020:
- ldr r3, _0802A044 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802A03A:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A044: .4byte gBattlescriptCurrInstr
- thumb_func_end atkCD_cureifburnedparalysedorpoisoned
-
- thumb_func_start atkCE_settorment
-atkCE_settorment: @ 802A048
- push {lr}
- ldr r1, _0802A080 @ =gBattleMons
- ldr r0, _0802A084 @ =gBankTarget
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 24
- cmp r1, 0
- bge _0802A08C
- ldr r3, _0802A088 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802A098
- .align 2, 0
-_0802A080: .4byte gBattleMons
-_0802A084: .4byte gBankTarget
-_0802A088: .4byte gBattlescriptCurrInstr
-_0802A08C:
- orrs r1, r2
- str r1, [r0]
- ldr r1, _0802A09C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802A098:
- pop {r0}
- bx r0
- .align 2, 0
-_0802A09C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkCE_settorment
-
- thumb_func_start atkCF_jumpifnodamage
-atkCF_jumpifnodamage: @ 802A0A0
- push {lr}
- ldr r2, _0802A0CC @ =gProtectStructs
- ldr r0, _0802A0D0 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r0, r2, 0x4
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0802A0C0
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0802A0D8
-_0802A0C0:
- ldr r1, _0802A0D4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802A0F2
- .align 2, 0
-_0802A0CC: .4byte gProtectStructs
-_0802A0D0: .4byte gBankAttacker
-_0802A0D4: .4byte gBattlescriptCurrInstr
-_0802A0D8:
- ldr r3, _0802A0F8 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802A0F2:
- pop {r0}
- bx r0
- .align 2, 0
-_0802A0F8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkCF_jumpifnodamage
-
- thumb_func_start atkD0_settaunt
-atkD0_settaunt: @ 802A0FC
- push {r4,lr}
- ldr r4, _0802A140 @ =gDisableStructs
- ldr r3, _0802A144 @ =gBankTarget
- ldrb r0, [r3]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r2, r1, r4
- ldrb r1, [r2, 0x13]
- lsls r0, r1, 28
- cmp r0, 0
- bne _0802A14C
- movs r0, 0x10
- negs r0, r0
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2, 0x13]
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r2, [r0, 0x13]
- movs r1, 0xF
- ands r1, r2
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x13]
- ldr r1, _0802A148 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802A166
- .align 2, 0
-_0802A140: .4byte gDisableStructs
-_0802A144: .4byte gBankTarget
-_0802A148: .4byte gBattlescriptCurrInstr
-_0802A14C:
- ldr r3, _0802A16C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802A166:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A16C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkD0_settaunt
-
- thumb_func_start sub_802A170
-sub_802A170: @ 802A170
- push {r4,lr}
- ldr r4, _0802A1D8 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankIdentity
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- ldr r3, _0802A1DC @ =gBankTarget
- strb r0, [r3]
- ldr r0, _0802A1E0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802A1F4
- ldr r0, _0802A1E4 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _0802A1E8 @ =gBitTable
- ldrb r3, [r3]
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802A1F4
- ldr r1, _0802A1EC @ =gProtectStructs
- ldrb r0, [r4]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- blt _0802A1F4
- lsls r0, r3, 4
- adds r2, r0, r1
- ldrb r1, [r2]
- lsls r0, r1, 28
- cmp r0, 0
- blt _0802A1F4
- movs r0, 0x8
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802A1F0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802A20E
- .align 2, 0
-_0802A1D8: .4byte gBankAttacker
-_0802A1DC: .4byte gBankTarget
-_0802A1E0: .4byte gBattleTypeFlags
-_0802A1E4: .4byte gAbsentBankFlags
-_0802A1E8: .4byte gBitTable
-_0802A1EC: .4byte gProtectStructs
-_0802A1F0: .4byte gBattlescriptCurrInstr
-_0802A1F4:
- ldr r3, _0802A214 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802A20E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A214: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802A170
-
- thumb_func_start sub_802A218
-sub_802A218: @ 802A218
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _0802A30C @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0802A24C
- ldr r0, _0802A310 @ =gBattleTypeFlags
- ldrh r1, [r0]
- ldr r0, _0802A314 @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _0802A24C
- ldr r0, _0802A318 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _0802A2EE
-_0802A24C:
- ldr r4, _0802A30C @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _0802A310 @ =gBattleTypeFlags
- ldrh r1, [r0]
- ldr r0, _0802A314 @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _0802A290
- ldr r0, _0802A318 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _0802A290
- ldr r0, _0802A31C @ =gWishFutureKnock
- adds r0, 0x29
- adds r0, r2, r0
- ldrb r1, [r0]
- ldr r3, _0802A320 @ =gBitTable
- ldr r2, _0802A324 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802A2EE
-_0802A290:
- ldr r0, _0802A328 @ =gBattleMons
- mov r9, r0
- ldr r1, _0802A30C @ =gBankAttacker
- ldrb r4, [r1]
- movs r2, 0x58
- mov r8, r2
- mov r0, r8
- muls r0, r4
- mov r3, r9
- adds r5, r0, r3
- ldrh r3, [r5, 0x2E]
- adds r1, r3, 0
- cmp r1, 0
- bne _0802A2BE
- ldr r0, _0802A32C @ =gBankTarget
- ldrb r0, [r0]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- add r0, r9
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- beq _0802A2EE
-_0802A2BE:
- cmp r1, 0xAF
- beq _0802A2EE
- ldr r7, _0802A32C @ =gBankTarget
- ldrb r0, [r7]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- mov r1, r9
- adds r2, r0, r1
- ldrh r1, [r2, 0x2E]
- cmp r1, 0xAF
- beq _0802A2EE
- adds r0, r3, 0
- subs r0, 0x79
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xB
- bls _0802A2EE
- adds r0, r1, 0
- subs r0, 0x79
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xB
- bhi _0802A334
-_0802A2EE:
- ldr r3, _0802A330 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802A49A
- .align 2, 0
-_0802A30C: .4byte gBankAttacker
-_0802A310: .4byte gBattleTypeFlags
-_0802A314: .4byte 0x00000902
-_0802A318: .4byte gTrainerBattleOpponent
-_0802A31C: .4byte gWishFutureKnock
-_0802A320: .4byte gBitTable
-_0802A324: .4byte gBattlePartyID
-_0802A328: .4byte gBattleMons
-_0802A32C: .4byte gBankTarget
-_0802A330: .4byte gBattlescriptCurrInstr
-_0802A334:
- adds r0, r2, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3C
- bne _0802A36C
- ldr r1, _0802A360 @ =gBattlescriptCurrInstr
- ldr r0, _0802A364 @ =BattleScript_NoItemSteal
- str r0, [r1]
- ldr r1, _0802A368 @ =gLastUsedAbility
- ldrb r0, [r7]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- add r0, r9
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- ldrb r1, [r1]
- bl RecordAbilityBattle
- b _0802A49A
- .align 2, 0
-_0802A360: .4byte gBattlescriptCurrInstr
-_0802A364: .4byte BattleScript_NoItemSteal
-_0802A368: .4byte gLastUsedAbility
-_0802A36C:
- lsls r0, r4, 1
- ldr r4, _0802A458 @ =0x020160f0
- adds r6, r0, r4
- ldrh r5, [r5, 0x2E]
- mov r10, r5
- strh r1, [r6]
- ldr r3, _0802A45C @ =gBankAttacker
- ldrb r0, [r3]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0
- strh r1, [r0, 0x2E]
- ldrb r0, [r7]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- add r0, r9
- mov r3, r10
- strh r3, [r0, 0x2E]
- ldr r5, _0802A460 @ =gActiveBank
- ldr r1, _0802A45C @ =gBankAttacker
- ldrb r0, [r1]
- strb r0, [r5]
- str r6, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetAttributes
- ldr r2, _0802A45C @ =gBankAttacker
- ldrb r0, [r2]
- bl MarkBufferBankForExecution
- ldrb r0, [r7]
- strb r0, [r5]
- ldrb r0, [r7]
- mov r3, r8
- muls r3, r0
- adds r0, r3, 0
- mov r1, r9
- adds r1, 0x2E
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetAttributes
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldr r0, _0802A464 @ =0xfffe9f10
- adds r4, r0
- ldrb r0, [r7]
- lsls r0, 1
- ldr r2, _0802A468 @ =0x000160e8
- adds r0, r2
- adds r0, r4
- movs r1, 0
- strb r1, [r0]
- ldrb r0, [r7]
- lsls r0, 1
- ldr r1, _0802A46C @ =0x000160e9
- adds r0, r1
- adds r0, r4
- movs r3, 0
- strb r3, [r0]
- ldr r3, _0802A45C @ =gBankAttacker
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- adds r0, r4
- movs r2, 0
- strb r2, [r0]
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- adds r0, r4
- strb r2, [r0]
- ldr r1, _0802A470 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- ldr r1, _0802A474 @ =gBattleTextBuff1
- movs r3, 0xFD
- strb r3, [r1]
- movs r2, 0xA
- strb r2, [r1, 0x1]
- ldrh r0, [r6]
- strb r0, [r1, 0x2]
- ldrh r0, [r6]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _0802A478 @ =gBattleTextBuff2
- strb r3, [r1]
- strb r2, [r1, 0x1]
- mov r3, r10
- strb r3, [r1, 0x2]
- mov r2, r10
- lsrs r0, r2, 8
- strb r0, [r1, 0x3]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r1, 0x4]
- cmp r2, 0
- beq _0802A480
- ldrh r0, [r6]
- cmp r0, 0
- beq _0802A494
- ldr r1, _0802A47C @ =gBattleCommunication
- movs r0, 0x2
- b _0802A498
- .align 2, 0
-_0802A458: .4byte 0x020160f0
-_0802A45C: .4byte gBankAttacker
-_0802A460: .4byte gActiveBank
-_0802A464: .4byte 0xfffe9f10
-_0802A468: .4byte 0x000160e8
-_0802A46C: .4byte 0x000160e9
-_0802A470: .4byte gBattlescriptCurrInstr
-_0802A474: .4byte gBattleTextBuff1
-_0802A478: .4byte gBattleTextBuff2
-_0802A47C: .4byte gBattleCommunication
-_0802A480:
- ldrh r0, [r6]
- cmp r0, 0
- beq _0802A494
- ldr r0, _0802A490 @ =gBattleCommunication
- movs r3, 0
- strb r3, [r0, 0x5]
- b _0802A49A
- .align 2, 0
-_0802A490: .4byte gBattleCommunication
-_0802A494:
- ldr r1, _0802A4AC @ =gBattleCommunication
- movs r0, 0x1
-_0802A498:
- strb r0, [r1, 0x5]
-_0802A49A:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A4AC: .4byte gBattleCommunication
- thumb_func_end sub_802A218
-
- thumb_func_start sub_802A4B0
-sub_802A4B0: @ 802A4B0
- push {r4,lr}
- ldr r3, _0802A4F0 @ =gBattleMons
- ldr r4, _0802A4F4 @ =gBankTarget
- ldrb r0, [r4]
- movs r2, 0x58
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r1, [r0]
- adds r0, r1, 0
- cmp r0, 0
- beq _0802A504
- cmp r0, 0x19
- beq _0802A504
- ldr r0, _0802A4F8 @ =gBankAttacker
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- strb r1, [r0]
- ldr r1, _0802A4FC @ =gLastUsedAbility
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r1, _0802A500 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802A51E
- .align 2, 0
-_0802A4F0: .4byte gBattleMons
-_0802A4F4: .4byte gBankTarget
-_0802A4F8: .4byte gBankAttacker
-_0802A4FC: .4byte gLastUsedAbility
-_0802A500: .4byte gBattlescriptCurrInstr
-_0802A504:
- ldr r3, _0802A524 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802A51E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A524: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802A4B0
-
- thumb_func_start atkD4_802C408
-atkD4_802C408: @ 802A528
- push {r4-r7,lr}
- ldr r7, _0802A53C @ =gBattlescriptCurrInstr
- ldr r2, [r7]
- ldrb r3, [r2, 0x1]
- cmp r3, 0
- beq _0802A540
- cmp r3, 0x1
- beq _0802A578
- b _0802A5F4
- .align 2, 0
-_0802A53C: .4byte gBattlescriptCurrInstr
-_0802A540:
- ldr r1, _0802A56C @ =gWishFutureKnock
- ldr r4, _0802A570 @ =gBankAttacker
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r5, [r4]
- adds r3, r0, r5
- ldrb r0, [r3]
- cmp r0, 0
- bne _0802A5C4
- movs r0, 0x2
- strb r0, [r3]
- ldrb r0, [r4]
- adds r1, 0x24
- adds r1, r0, r1
- ldr r2, _0802A574 @ =gBattlePartyID
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1]
- ldr r0, [r7]
- adds r0, 0x6
- b _0802A5F2
- .align 2, 0
-_0802A56C: .4byte gWishFutureKnock
-_0802A570: .4byte gBankAttacker
-_0802A574: .4byte gBattlePartyID
-_0802A578:
- ldr r1, _0802A5DC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- ldr r4, _0802A5E0 @ =gBankTarget
- ldrb r0, [r4]
- strb r0, [r1, 0x2]
- ldr r0, _0802A5E4 @ =gWishFutureKnock
- adds r0, 0x24
- ldrb r5, [r4]
- adds r0, r5
- ldrb r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _0802A5E8 @ =gBattleMoveDamage
- ldr r6, _0802A5EC @ =gBattleMons
- ldrb r0, [r4]
- movs r5, 0x58
- muls r0, r5
- adds r0, r6
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _0802A5B0
- str r3, [r1]
-_0802A5B0:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- ldrb r0, [r4]
- muls r0, r5
- adds r0, r6
- ldrh r1, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- cmp r1, r0
- bne _0802A5F0
-_0802A5C4:
- 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, [r7]
- b _0802A5F4
- .align 2, 0
-_0802A5DC: .4byte gBattleTextBuff1
-_0802A5E0: .4byte gBankTarget
-_0802A5E4: .4byte gWishFutureKnock
-_0802A5E8: .4byte gBattleMoveDamage
-_0802A5EC: .4byte gBattleMons
-_0802A5F0:
- adds r0, r2, 0x6
-_0802A5F2:
- str r0, [r7]
-_0802A5F4:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atkD4_802C408
-
- thumb_func_start sub_802A5FC
-sub_802A5FC: @ 802A5FC
- push {lr}
- ldr r1, _0802A634 @ =gStatuses3
- ldr r0, _0802A638 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 2
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 3
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _0802A640
- ldr r3, _0802A63C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802A64C
- .align 2, 0
-_0802A634: .4byte gStatuses3
-_0802A638: .4byte gBankAttacker
-_0802A63C: .4byte gBattlescriptCurrInstr
-_0802A640:
- orrs r1, r3
- str r1, [r2]
- ldr r1, _0802A650 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802A64C:
- pop {r0}
- bx r0
- .align 2, 0
-_0802A650: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802A5FC
-
- thumb_func_start atkD6_doubledamagedealtifdamaged
-atkD6_doubledamagedealtifdamaged: @ 802A654
- push {lr}
- ldr r3, _0802A6A4 @ =gProtectStructs
- ldr r0, _0802A6A8 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r0, r3, 0x4
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0802A674
- adds r0, r2, r3
- ldr r1, _0802A6AC @ =gBankTarget
- ldrb r0, [r0, 0xC]
- ldrb r1, [r1]
- cmp r0, r1
- beq _0802A68C
-_0802A674:
- adds r0, r3, 0
- adds r0, 0x8
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0802A696
- adds r0, r2, r3
- ldr r1, _0802A6AC @ =gBankTarget
- ldrb r0, [r0, 0xD]
- ldrb r1, [r1]
- cmp r0, r1
- bne _0802A696
-_0802A68C:
- ldr r0, _0802A6B0 @ =0x02000000
- ldr r1, _0802A6B4 @ =0x0001601f
- adds r0, r1
- movs r1, 0x2
- strb r1, [r0]
-_0802A696:
- ldr r1, _0802A6B8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802A6A4: .4byte gProtectStructs
-_0802A6A8: .4byte gBankAttacker
-_0802A6AC: .4byte gBankTarget
-_0802A6B0: .4byte 0x02000000
-_0802A6B4: .4byte 0x0001601f
-_0802A6B8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkD6_doubledamagedealtifdamaged
-
- thumb_func_start sub_802A6BC
-sub_802A6BC: @ 802A6BC
- push {r4,lr}
- ldr r1, _0802A700 @ =gStatuses3
- ldr r0, _0802A704 @ =gBankTarget
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r4, r0, r1
- ldr r2, [r4]
- movs r0, 0xC0
- lsls r0, 5
- ands r0, r2
- cmp r0, 0
- bne _0802A6E4
- ldr r1, _0802A708 @ =gBattleMons
- movs r0, 0x58
- muls r0, r3
- adds r1, 0x4C
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802A710
-_0802A6E4:
- ldr r3, _0802A70C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802A720
- .align 2, 0
-_0802A700: .4byte gStatuses3
-_0802A704: .4byte gBankTarget
-_0802A708: .4byte gBattleMons
-_0802A70C: .4byte gBattlescriptCurrInstr
-_0802A710:
- movs r0, 0x80
- lsls r0, 5
- orrs r2, r0
- str r2, [r4]
- ldr r1, _0802A728 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802A720:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A728: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802A6BC
-
- thumb_func_start atkD8_setdamagetohealthdifference
-atkD8_setdamagetohealthdifference: @ 802A72C
- push {lr}
- ldr r2, _0802A768 @ =gBattleMons
- ldr r0, _0802A76C @ =gBankTarget
- ldrb r0, [r0]
- movs r1, 0x58
- muls r0, r1
- adds r3, r0, r2
- ldr r0, _0802A770 @ =gBankAttacker
- ldrb r0, [r0]
- muls r0, r1
- adds r1, r0, r2
- ldrh r0, [r3, 0x28]
- ldrh r2, [r1, 0x28]
- cmp r0, r2
- bhi _0802A778
- ldr r3, _0802A774 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802A78A
- .align 2, 0
-_0802A768: .4byte gBattleMons
-_0802A76C: .4byte gBankTarget
-_0802A770: .4byte gBankAttacker
-_0802A774: .4byte gBattlescriptCurrInstr
-_0802A778:
- ldr r2, _0802A790 @ =gBattleMoveDamage
- ldrh r0, [r3, 0x28]
- ldrh r1, [r1, 0x28]
- subs r0, r1
- str r0, [r2]
- ldr r1, _0802A794 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802A78A:
- pop {r0}
- bx r0
- .align 2, 0
-_0802A790: .4byte gBattleMoveDamage
-_0802A794: .4byte gBattlescriptCurrInstr
- thumb_func_end atkD8_setdamagetohealthdifference
-
- thumb_func_start atkD9_scaledamagebyhealthratio
-atkD9_scaledamagebyhealthratio: @ 802A798
- push {r4,lr}
- ldr r4, _0802A7E4 @ =gDynamicBasePower
- ldrh r0, [r4]
- cmp r0, 0
- bne _0802A7D4
- ldr r2, _0802A7E8 @ =gBattleMoves
- ldr r0, _0802A7EC @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r3, [r0, 0x1]
- ldr r2, _0802A7F0 @ =gBattleMons
- ldr r0, _0802A7F4 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r1, r2
- ldrh r0, [r1, 0x28]
- muls r0, r3
- ldrh r1, [r1, 0x2C]
- bl __divsi3
- strh r0, [r4]
- lsls r0, 16
- cmp r0, 0
- bne _0802A7D4
- movs r0, 0x1
- strh r0, [r4]
-_0802A7D4:
- ldr r1, _0802A7F8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A7E4: .4byte gDynamicBasePower
-_0802A7E8: .4byte gBattleMoves
-_0802A7EC: .4byte gCurrentMove
-_0802A7F0: .4byte gBattleMons
-_0802A7F4: .4byte gBankAttacker
-_0802A7F8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkD9_scaledamagebyhealthratio
-
- thumb_func_start atkDA_abilityswap
-atkDA_abilityswap: @ 802A7FC
- push {r4-r6,lr}
- ldr r5, _0802A860 @ =gBattleMons
- ldr r0, _0802A864 @ =gBankAttacker
- ldrb r0, [r0]
- movs r4, 0x58
- muls r0, r4
- adds r0, r5
- adds r2, r0, 0
- adds r2, 0x20
- ldrb r1, [r2]
- cmp r1, 0
- bne _0802A824
- ldr r0, _0802A868 @ =gBankTarget
- ldrb r0, [r0]
- muls r0, r4
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802A844
-_0802A824:
- cmp r1, 0x19
- beq _0802A844
- ldr r6, _0802A868 @ =gBankTarget
- ldrb r0, [r6]
- muls r0, r4
- adds r0, r5
- adds r0, 0x20
- ldrb r3, [r0]
- cmp r3, 0x19
- beq _0802A844
- ldr r0, _0802A86C @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0802A874
-_0802A844:
- ldr r3, _0802A870 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802A88A
- .align 2, 0
-_0802A860: .4byte gBattleMons
-_0802A864: .4byte gBankAttacker
-_0802A868: .4byte gBankTarget
-_0802A86C: .4byte gBattleMoveFlags
-_0802A870: .4byte gBattlescriptCurrInstr
-_0802A874:
- ldrb r1, [r2]
- strb r3, [r2]
- ldrb r0, [r6]
- muls r0, r4
- adds r0, r5
- adds r0, 0x20
- strb r1, [r0]
- ldr r1, _0802A890 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802A88A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A890: .4byte gBattlescriptCurrInstr
- thumb_func_end atkDA_abilityswap
-
- thumb_func_start atkDB_imprisoneffect
-atkDB_imprisoneffect: @ 802A894
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r0, 0
- mov r8, r0
- ldr r1, _0802A8B8 @ =gStatuses3
- ldr r0, _0802A8BC @ =gBankAttacker
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _0802A8E8
- b _0802A95E
- .align 2, 0
-_0802A8B8: .4byte gStatuses3
-_0802A8BC: .4byte gBankAttacker
-_0802A8C0:
- ldr r0, _0802A8E0 @ =gStatuses3
- mov r2, r9
- ldrb r1, [r2]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 6
- orrs r0, r2
- str r0, [r1]
- ldr r1, _0802A8E4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802A956
- .align 2, 0
-_0802A8E0: .4byte gStatuses3
-_0802A8E4: .4byte gBattlescriptCurrInstr
-_0802A8E8:
- adds r0, r2, 0
- bl sub_801529C
- movs r6, 0
- b _0802A94E
-_0802A8F2:
- adds r0, r6, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r8, r0
- beq _0802A948
- movs r4, 0
- ldr r7, _0802A984 @ =gBankAttacker
- mov r9, r7
- ldr r0, _0802A988 @ =gBattleMons
- mov r12, r0
- mov r1, r9
- ldrb r0, [r1]
- mov r2, r12
- adds r2, 0xC
- movs r1, 0x58
- muls r0, r1
- adds r3, r0, r2
- adds r5, r6, 0
- muls r5, r1
-_0802A91C:
- movs r2, 0
- ldrh r1, [r3]
- mov r0, r12
- adds r0, 0xC
- adds r0, r5, r0
-_0802A926:
- ldrh r7, [r0]
- cmp r1, r7
- bne _0802A930
- cmp r1, 0
- bne _0802A938
-_0802A930:
- adds r0, 0x2
- adds r2, 0x1
- cmp r2, 0x3
- ble _0802A926
-_0802A938:
- cmp r2, 0x4
- bne _0802A944
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _0802A91C
-_0802A944:
- cmp r4, 0x4
- bne _0802A8C0
-_0802A948:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0802A94E:
- ldr r0, _0802A98C @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r6, r0
- bcc _0802A8F2
-_0802A956:
- ldr r0, _0802A98C @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r6, r0
- bne _0802A978
-_0802A95E:
- ldr r3, _0802A990 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802A978:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A984: .4byte gBankAttacker
-_0802A988: .4byte gBattleMons
-_0802A98C: .4byte gNoOfAllBanks
-_0802A990: .4byte gBattlescriptCurrInstr
- thumb_func_end atkDB_imprisoneffect
-
- thumb_func_start atkDC_setgrudge
-atkDC_setgrudge: @ 802A994
- push {lr}
- ldr r1, _0802A9CC @ =gStatuses3
- ldr r0, _0802A9D0 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 2
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 7
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _0802A9D8
- ldr r3, _0802A9D4 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802A9E4
- .align 2, 0
-_0802A9CC: .4byte gStatuses3
-_0802A9D0: .4byte gBankAttacker
-_0802A9D4: .4byte gBattlescriptCurrInstr
-_0802A9D8:
- orrs r1, r3
- str r1, [r2]
- ldr r1, _0802A9E8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802A9E4:
- pop {r0}
- bx r0
- .align 2, 0
-_0802A9E8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkDC_setgrudge
-
- thumb_func_start atkDD_weightdamagecalculation
-atkDD_weightdamagecalculation: @ 802A9EC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r5, 0
- ldr r2, _0802AA50 @ =gWeightDamage
- ldrh r0, [r2]
- ldr r1, _0802AA54 @ =0x0000ffff
- cmp r0, r1
- beq _0802AA64
- adds r6, r2, 0
- ldr r0, _0802AA58 @ =gBattleMons
- mov r8, r0
- adds r7, r1, 0
- adds r4, r6, 0
-_0802AA08:
- ldr r0, _0802AA5C @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- add r0, r8
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetPokedexHeightWeight
- ldrh r1, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bhi _0802AA36
- adds r4, 0x4
- adds r5, 0x2
- ldrh r0, [r4]
- cmp r0, r7
- bne _0802AA08
-_0802AA36:
- lsls r0, r5, 1
- adds r0, r6
- ldrh r1, [r0]
- ldr r0, _0802AA54 @ =0x0000ffff
- cmp r1, r0
- beq _0802AA64
- ldr r0, _0802AA60 @ =gDynamicBasePower
- adds r1, r5, 0x1
- lsls r1, 1
- adds r1, r6
- ldrh r1, [r1]
- strh r1, [r0]
- b _0802AA6A
- .align 2, 0
-_0802AA50: .4byte gWeightDamage
-_0802AA54: .4byte 0x0000ffff
-_0802AA58: .4byte gBattleMons
-_0802AA5C: .4byte gBankTarget
-_0802AA60: .4byte gDynamicBasePower
-_0802AA64:
- ldr r1, _0802AA7C @ =gDynamicBasePower
- movs r0, 0x78
- strh r0, [r1]
-_0802AA6A:
- ldr r1, _0802AA80 @ =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
-_0802AA7C: .4byte gDynamicBasePower
-_0802AA80: .4byte gBattlescriptCurrInstr
- thumb_func_end atkDD_weightdamagecalculation
-
- thumb_func_start atkDE_asistattackselect
-atkDE_asistattackselect: @ 802AA84
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r0, 0
- mov r10, r0
- ldr r0, _0802AB9C @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankIdentity
- movs r1, 0x1
- ands r1, r0
- ldr r0, _0802ABA0 @ =gPlayerParty
- str r0, [sp]
- cmp r1, 0
- beq _0802AAAC
- ldr r1, _0802ABA4 @ =gEnemyParty
- str r1, [sp]
-_0802AAAC:
- movs r2, 0
-_0802AAAE:
- ldr r1, _0802ABA8 @ =gBattlePartyID
- ldr r0, _0802AB9C @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- adds r1, r2, 0x1
- str r1, [sp, 0x4]
- ldrh r0, [r0]
- cmp r2, r0
- beq _0802AB54
- movs r0, 0x64
- adds r6, r2, 0
- muls r6, r0
- ldr r0, [sp]
- adds r4, r0, r6
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _0802AB54
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0802AB54
- movs r5, 0
- ldr r1, _0802ABAC @ =0x0000ffff
- mov r8, r1
- mov r9, r6
- mov r1, r10
- lsls r0, r1, 1
- ldr r1, _0802ABB0 @ =0x02016024
- adds r6, r0, r1
-_0802AAF8:
- movs r7, 0
- adds r1, r5, 0
- adds r1, 0xD
- ldr r0, [sp]
- add r0, r9
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl sub_802838C
- lsls r0, 24
- adds r1, r5, 0x1
- cmp r0, 0
- bne _0802AB4E
- ldr r0, _0802ABB4 @ =gUnknown_081FACFE
- ldrh r2, [r0]
- adds r3, r0, 0
- cmp r2, r8
- beq _0802AB42
- cmp r4, r2
- beq _0802AB38
- ldr r5, _0802ABAC @ =0x0000ffff
- adds r2, r3, 0
-_0802AB2A:
- adds r2, 0x2
- adds r7, 0x1
- ldrh r0, [r2]
- cmp r0, r5
- beq _0802AB42
- cmp r4, r0
- bne _0802AB2A
-_0802AB38:
- lsls r0, r7, 1
- adds r0, r3
- ldrh r0, [r0]
- cmp r0, r8
- bne _0802AB4E
-_0802AB42:
- cmp r4, 0
- beq _0802AB4E
- strh r4, [r6]
- adds r6, 0x2
- movs r0, 0x1
- add r10, r0
-_0802AB4E:
- adds r5, r1, 0
- cmp r5, 0x3
- ble _0802AAF8
-_0802AB54:
- ldr r2, [sp, 0x4]
- cmp r2, 0x5
- ble _0802AAAE
- mov r1, r10
- cmp r1, 0
- beq _0802ABCC
- ldr r2, _0802ABB8 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0802ABBC @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r4, _0802ABC0 @ =gUnknown_02024BEA
- bl Random
- movs r1, 0xFF
- ands r1, r0
- mov r0, r10
- muls r0, r1
- asrs r0, 8
- lsls r0, 1
- ldr r1, _0802ABB0 @ =0x02016024
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4]
- ldrh r0, [r4]
- movs r1, 0
- bl sub_801B5C0
- ldr r1, _0802ABC4 @ =gBankTarget
- strb r0, [r1]
- ldr r1, _0802ABC8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802ABE6
- .align 2, 0
-_0802AB9C: .4byte gBankAttacker
-_0802ABA0: .4byte gPlayerParty
-_0802ABA4: .4byte gEnemyParty
-_0802ABA8: .4byte gBattlePartyID
-_0802ABAC: .4byte 0x0000ffff
-_0802ABB0: .4byte 0x02016024
-_0802ABB4: .4byte gUnknown_081FACFE
-_0802ABB8: .4byte gHitMarker
-_0802ABBC: .4byte 0xfffffbff
-_0802ABC0: .4byte gUnknown_02024BEA
-_0802ABC4: .4byte gBankTarget
-_0802ABC8: .4byte gBattlescriptCurrInstr
-_0802ABCC:
- ldr r3, _0802ABF8 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802ABE6:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802ABF8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkDE_asistattackselect
-
- thumb_func_start atkDF_setmagiccoat
-atkDF_setmagiccoat: @ 802ABFC
- push {lr}
- ldr r1, _0802AC44 @ =gBankTarget
- ldr r3, _0802AC48 @ =gBankAttacker
- ldrb r0, [r3]
- strb r0, [r1]
- ldr r2, _0802AC4C @ =gSpecialStatuses
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r0, _0802AC50 @ =gCurrentMoveTurn
- ldrb r1, [r0]
- ldr r0, _0802AC54 @ =gNoOfAllBanks
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _0802AC5C
- ldr r3, _0802AC58 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802AC74
- .align 2, 0
-_0802AC44: .4byte gBankTarget
-_0802AC48: .4byte gBankAttacker
-_0802AC4C: .4byte gSpecialStatuses
-_0802AC50: .4byte gCurrentMoveTurn
-_0802AC54: .4byte gNoOfAllBanks
-_0802AC58: .4byte gBattlescriptCurrInstr
-_0802AC5C:
- ldr r0, _0802AC78 @ =gProtectStructs
- ldrb r1, [r3]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x10
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _0802AC7C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802AC74:
- pop {r0}
- bx r0
- .align 2, 0
-_0802AC78: .4byte gProtectStructs
-_0802AC7C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkDF_setmagiccoat
-
- thumb_func_start atkE0_setstealstatchange
-atkE0_setstealstatchange: @ 802AC80
- push {lr}
- ldr r2, _0802ACC4 @ =gSpecialStatuses
- ldr r3, _0802ACC8 @ =gBankAttacker
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r0, _0802ACCC @ =gCurrentMoveTurn
- ldrb r1, [r0]
- ldr r0, _0802ACD0 @ =gNoOfAllBanks
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _0802ACD8
- ldr r3, _0802ACD4 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802ACEE
- .align 2, 0
-_0802ACC4: .4byte gSpecialStatuses
-_0802ACC8: .4byte gBankAttacker
-_0802ACCC: .4byte gCurrentMoveTurn
-_0802ACD0: .4byte gNoOfAllBanks
-_0802ACD4: .4byte gBattlescriptCurrInstr
-_0802ACD8:
- ldr r0, _0802ACF4 @ =gProtectStructs
- ldrb r1, [r3]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _0802ACF8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802ACEE:
- pop {r0}
- bx r0
- .align 2, 0
-_0802ACF4: .4byte gProtectStructs
-_0802ACF8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkE0_setstealstatchange
-
- thumb_func_start atkE1_802CBE4
-atkE1_802CBE4: @ 802ACFC
- push {r4-r6,lr}
- ldr r4, _0802ADA0 @ =0x02000000
- ldr r1, _0802ADA4 @ =0x000160dd
- adds r0, r4, r1
- ldrb r0, [r0]
- subs r1, 0xDA
- adds r4, r1
- strb r0, [r4]
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r2, _0802ADA8 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r2]
- movs r0, 0x9
- strb r0, [r2, 0x1]
- ldr r3, _0802ADAC @ =gBattleMons
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r2, 0x2]
- movs r0, 0xFF
- strb r0, [r2, 0x3]
- ldr r2, _0802ADB0 @ =gBankTarget
- ldr r1, _0802ADB4 @ =gNoOfAllBanks
- ldrb r0, [r2]
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802AD84
- adds r4, r2, 0
- ldr r6, _0802ADB8 @ =gBitTable
-_0802AD44:
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r5
- beq _0802AD66
- ldr r0, _0802ADBC @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ands r1, r0
- ldr r2, _0802ADB4 @ =gNoOfAllBanks
- cmp r1, 0
- beq _0802AD7A
-_0802AD66:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _0802ADB4 @ =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- adds r2, r1, 0
- ldrb r1, [r2]
- cmp r0, r1
- bcc _0802AD44
-_0802AD7A:
- ldr r0, _0802ADB0 @ =gBankTarget
- ldrb r0, [r0]
- ldrb r2, [r2]
- cmp r0, r2
- bcc _0802ADC4
-_0802AD84:
- ldr r3, _0802ADC0 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802ADCC
- .align 2, 0
-_0802ADA0: .4byte 0x02000000
-_0802ADA4: .4byte 0x000160dd
-_0802ADA8: .4byte gBattleTextBuff1
-_0802ADAC: .4byte gBattleMons
-_0802ADB0: .4byte gBankTarget
-_0802ADB4: .4byte gNoOfAllBanks
-_0802ADB8: .4byte gBitTable
-_0802ADBC: .4byte gAbsentBankFlags
-_0802ADC0: .4byte gBattlescriptCurrInstr
-_0802ADC4:
- ldr r1, _0802ADD4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802ADCC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802ADD4: .4byte gBattlescriptCurrInstr
- thumb_func_end atkE1_802CBE4
-
- thumb_func_start sub_802ADD8
-sub_802ADD8: @ 802ADD8
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r6, _0802AE44 @ =gBattlescriptCurrInstr
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r5, _0802AE48 @ =gActiveBank
- strb r0, [r5]
- ldr r4, _0802AE4C @ =gBattleMons
- ldrb r0, [r5]
- movs r1, 0x58
- mov r12, r1
- mov r1, r12
- muls r1, r0
- adds r0, r1, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1E
- bne _0802AE34
- adds r4, 0x4C
- adds r1, r4
- movs r0, 0
- str r0, [r1]
- ldr r2, _0802AE50 @ =gBitTable
- ldr r1, _0802AE54 @ =0x02000000
- ldrb r3, [r5]
- ldr r7, _0802AE58 @ =0x00016064
- adds r0, r3, r7
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0]
- mov r0, r12
- muls r0, r3
- adds r0, r4
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
-_0802AE34:
- ldr r0, [r6]
- adds r0, 0x2
- str r0, [r6]
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AE44: .4byte gBattlescriptCurrInstr
-_0802AE48: .4byte gActiveBank
-_0802AE4C: .4byte gBattleMons
-_0802AE50: .4byte gBitTable
-_0802AE54: .4byte 0x02000000
-_0802AE58: .4byte 0x00016064
- thumb_func_end sub_802ADD8
-
- thumb_func_start atkE3_jumpiffainted
-atkE3_jumpiffainted: @ 802AE5C
- push {r4,lr}
- ldr r4, _0802AE98 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8015150
- ldr r1, _0802AE9C @ =gActiveBank
- strb r0, [r1]
- ldr r2, _0802AEA0 @ =gBattleMons
- ldrb r1, [r1]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0802AEA4
- 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 _0802AEAA
- .align 2, 0
-_0802AE98: .4byte gBattlescriptCurrInstr
-_0802AE9C: .4byte gActiveBank
-_0802AEA0: .4byte gBattleMons
-_0802AEA4:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_0802AEAA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end atkE3_jumpiffainted
-
- thumb_func_start sub_802AEB0
-sub_802AEB0: @ 802AEB0
- push {lr}
- ldr r0, _0802AEC4 @ =gBattleTerrain
- ldrb r0, [r0]
- cmp r0, 0x7
- bhi _0802AF4C
- lsls r0, 2
- ldr r1, _0802AEC8 @ =_0802AECC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802AEC4: .4byte gBattleTerrain
-_0802AEC8: .4byte _0802AECC
- .align 2, 0
-_0802AECC:
- .4byte _0802AEEC
- .4byte _0802AEF8
- .4byte _0802AF04
- .4byte _0802AF10
- .4byte _0802AF1C
- .4byte _0802AF28
- .4byte _0802AF34
- .4byte _0802AF40
-_0802AEEC:
- ldr r1, _0802AEF4 @ =gBattleCommunication
- movs r0, 0x2
- b _0802AF50
- .align 2, 0
-_0802AEF4: .4byte gBattleCommunication
-_0802AEF8:
- ldr r1, _0802AF00 @ =gBattleCommunication
- movs r0, 0x1
- b _0802AF50
- .align 2, 0
-_0802AF00: .4byte gBattleCommunication
-_0802AF04:
- ldr r1, _0802AF0C @ =gBattleCommunication
- movs r0, 0x1B
- b _0802AF50
- .align 2, 0
-_0802AF0C: .4byte gBattleCommunication
-_0802AF10:
- ldr r1, _0802AF18 @ =gBattleCommunication
- movs r0, 0x17
- b _0802AF50
- .align 2, 0
-_0802AF18: .4byte gBattleCommunication
-_0802AF1C:
- ldr r1, _0802AF24 @ =gBattleCommunication
- movs r0, 0x16
- b _0802AF50
- .align 2, 0
-_0802AF24: .4byte gBattleCommunication
-_0802AF28:
- ldr r1, _0802AF30 @ =gBattleCommunication
- movs r0, 0x18
- b _0802AF50
- .align 2, 0
-_0802AF30: .4byte gBattleCommunication
-_0802AF34:
- ldr r1, _0802AF3C @ =gBattleCommunication
- movs r0, 0x7
- b _0802AF50
- .align 2, 0
-_0802AF3C: .4byte gBattleCommunication
-_0802AF40:
- ldr r1, _0802AF48 @ =gBattleCommunication
- movs r0, 0x8
- b _0802AF50
- .align 2, 0
-_0802AF48: .4byte gBattleCommunication
-_0802AF4C:
- ldr r1, _0802AF60 @ =gBattleCommunication
- movs r0, 0x5
-_0802AF50:
- strb r0, [r1, 0x3]
- ldr r1, _0802AF64 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802AF60: .4byte gBattleCommunication
-_0802AF64: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802AEB0
-
- thumb_func_start sub_802AF68
-sub_802AF68: @ 802AF68
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r7, 0
- ldr r0, _0802AFB4 @ =gBaseStats
- mov r9, r0
- ldr r1, _0802AFB8 @ =gPickupItems
- mov r8, r1
-_0802AF7A:
- movs r0, 0x64
- adds r4, r7, 0
- muls r4, r0
- ldr r0, _0802AFBC @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- cmp r0, 0
- beq _0802AFC0
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- add r0, r9
- ldrb r0, [r0, 0x17]
- b _0802AFCA
- .align 2, 0
-_0802AFB4: .4byte gBaseStats
-_0802AFB8: .4byte gPickupItems
-_0802AFBC: .4byte gPlayerParty
-_0802AFC0:
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- add r0, r9
- ldrb r0, [r0, 0x16]
-_0802AFCA:
- adds r4, r7, 0x1
- cmp r0, 0x35
- bne _0802B032
- cmp r5, 0
- beq _0802B032
- movs r0, 0xCE
- lsls r0, 1
- cmp r5, r0
- beq _0802B032
- cmp r6, 0
- bne _0802B032
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _0802B032
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0
- mov r1, r8
- ldrh r0, [r1, 0x2]
- cmp r0, r3
- bgt _0802B020
- adds r1, 0x2
-_0802B012:
- adds r1, 0x4
- adds r2, 0x2
- cmp r2, 0x11
- bgt _0802B020
- ldrh r0, [r1]
- cmp r0, r3
- ble _0802B012
-_0802B020:
- movs r0, 0x64
- muls r0, r7
- ldr r1, _0802B04C @ =gPlayerParty
- adds r0, r1
- lsls r2, 1
- add r2, r8
- movs r1, 0xC
- bl SetMonData
-_0802B032:
- adds r7, r4, 0
- cmp r7, 0x5
- ble _0802AF7A
- ldr r1, _0802B050 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B04C: .4byte gPlayerParty
-_0802B050: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802AF68
-
- thumb_func_start atkE6_castform_transform
-atkE6_castform_transform: @ 802B054
- push {r4,lr}
- ldr r4, _0802B0A8 @ =gActiveBank
- ldr r3, _0802B0AC @ =0x02000000
- ldr r1, _0802B0B0 @ =0x00016003
- adds r0, r3, r1
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r1, _0802B0B4 @ =gBattleMons
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _0802B086
- ldr r0, _0802B0B8 @ =0x0001609b
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x80
- orrs r0, r1
- strb r0, [r2]
-_0802B086:
- ldr r1, _0802B0B8 @ =0x0001609b
- adds r0, r3, r1
- ldrb r2, [r0]
- movs r0, 0
- movs r1, 0
- bl EmitBattleAnimation
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _0802B0BC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B0A8: .4byte gActiveBank
-_0802B0AC: .4byte 0x02000000
-_0802B0B0: .4byte 0x00016003
-_0802B0B4: .4byte gBattleMons
-_0802B0B8: .4byte 0x0001609b
-_0802B0BC: .4byte gBattlescriptCurrInstr
- thumb_func_end atkE6_castform_transform
-
- thumb_func_start atkE7_castform_switch
-atkE7_castform_switch: @ 802B0C0
- push {r4,r5,lr}
- ldr r1, _0802B0F4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- ldr r5, _0802B0F8 @ =0x02000000
- ldr r1, _0802B0FC @ =0x00016003
- adds r0, r5, r1
- ldrb r0, [r0]
- bl castform_switch
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _0802B0EC
- ldr r0, _0802B100 @ =gUnknown_081D977D
- bl b_push_move_exec
- subs r1, r4, 0x1
- ldr r2, _0802B104 @ =0x0001609b
- adds r0, r5, r2
- strb r1, [r0]
-_0802B0EC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B0F4: .4byte gBattlescriptCurrInstr
-_0802B0F8: .4byte 0x02000000
-_0802B0FC: .4byte 0x00016003
-_0802B100: .4byte gUnknown_081D977D
-_0802B104: .4byte 0x0001609b
- thumb_func_end atkE7_castform_switch
-
- thumb_func_start atkE8_settypebasedhalvers
-atkE8_settypebasedhalvers: @ 802B108
- push {r4,lr}
- movs r4, 0
- ldr r2, _0802B144 @ =gBattleMoves
- ldr r0, _0802B148 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0xC9
- bne _0802B158
- ldr r1, _0802B14C @ =gStatuses3
- ldr r0, _0802B150 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 2
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 9
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- bne _0802B17C
- orrs r1, r3
- str r1, [r2]
- ldr r0, _0802B154 @ =gBattleCommunication
- strb r4, [r0, 0x5]
- b _0802B180
- .align 2, 0
-_0802B144: .4byte gBattleMoves
-_0802B148: .4byte gCurrentMove
-_0802B14C: .4byte gStatuses3
-_0802B150: .4byte gBankAttacker
-_0802B154: .4byte gBattleCommunication
-_0802B158:
- ldr r1, _0802B18C @ =gStatuses3
- ldr r0, _0802B190 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 2
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 10
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- bne _0802B17C
- orrs r1, r3
- str r1, [r2]
- ldr r1, _0802B194 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- movs r4, 0x1
-_0802B17C:
- cmp r4, 0
- beq _0802B19C
-_0802B180:
- ldr r1, _0802B198 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802B1B6
- .align 2, 0
-_0802B18C: .4byte gStatuses3
-_0802B190: .4byte gBankAttacker
-_0802B194: .4byte gBattleCommunication
-_0802B198: .4byte gBattlescriptCurrInstr
-_0802B19C:
- ldr r3, _0802B1BC @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802B1B6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B1BC: .4byte gBattlescriptCurrInstr
- thumb_func_end atkE8_settypebasedhalvers
-
- thumb_func_start sub_802B1C0
-sub_802B1C0: @ 802B1C0
- push {lr}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0802B276
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0802B276
- ldr r3, _0802B218 @ =gBattleWeather
- ldrb r0, [r3]
- ldr r2, _0802B21C @ =0x02000000
- cmp r0, 0
- beq _0802B202
- ldr r0, _0802B220 @ =0x0001601f
- adds r1, r2, r0
- movs r0, 0x2
- strb r0, [r1]
-_0802B202:
- ldrh r1, [r3]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0802B228
- ldr r0, _0802B224 @ =0x0001601c
- adds r1, r2, r0
- movs r0, 0x8B
- strb r0, [r1]
- b _0802B276
- .align 2, 0
-_0802B218: .4byte gBattleWeather
-_0802B21C: .4byte 0x02000000
-_0802B220: .4byte 0x0001601f
-_0802B224: .4byte 0x0001601c
-_0802B228:
- movs r0, 0x18
- ands r0, r1
- cmp r0, 0
- beq _0802B240
- ldr r0, _0802B23C @ =0x0001601c
- adds r1, r2, r0
- movs r0, 0x85
- strb r0, [r1]
- b _0802B276
- .align 2, 0
-_0802B23C: .4byte 0x0001601c
-_0802B240:
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0802B258
- ldr r0, _0802B254 @ =0x0001601c
- adds r1, r2, r0
- movs r0, 0x8A
- strb r0, [r1]
- b _0802B276
- .align 2, 0
-_0802B254: .4byte 0x0001601c
-_0802B258:
- movs r3, 0x80
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0802B270
- ldr r0, _0802B26C @ =0x0001601c
- adds r1, r2, r0
- movs r0, 0x8F
- strb r0, [r1]
- b _0802B276
- .align 2, 0
-_0802B26C: .4byte 0x0001601c
-_0802B270:
- ldr r1, _0802B284 @ =0x0001601c
- adds r0, r2, r1
- strb r3, [r0]
-_0802B276:
- ldr r1, _0802B288 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0802B284: .4byte 0x0001601c
-_0802B288: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802B1C0
-
- thumb_func_start atkEA_recycleitem
-atkEA_recycleitem: @ 802B28C
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r7, _0802B2F0 @ =gActiveBank
- ldr r0, _0802B2F4 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r7]
- ldrb r2, [r7]
- lsls r1, r2, 1
- ldr r0, _0802B2F8 @ =0x020160cc
- adds r6, r1, r0
- ldrh r5, [r6]
- cmp r5, 0
- beq _0802B308
- ldr r4, _0802B2FC @ =gBattleMons
- movs r3, 0x58
- adds r0, r2, 0
- muls r0, r3
- adds r0, r4
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- bne _0802B308
- ldr r1, _0802B300 @ =gLastUsedItem
- strh r5, [r1]
- strh r0, [r6]
- ldrb r0, [r7]
- muls r0, r3
- adds r0, r4
- ldrh r1, [r1]
- strh r1, [r0, 0x2E]
- ldrb r0, [r7]
- muls r0, r3
- adds r1, r4, 0
- adds r1, 0x2E
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetAttributes
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldr r1, _0802B304 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802B322
- .align 2, 0
-_0802B2F0: .4byte gActiveBank
-_0802B2F4: .4byte gBankAttacker
-_0802B2F8: .4byte 0x020160cc
-_0802B2FC: .4byte gBattleMons
-_0802B300: .4byte gLastUsedItem
-_0802B304: .4byte gBattlescriptCurrInstr
-_0802B308:
- ldr r3, _0802B32C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802B322:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B32C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkEA_recycleitem
-
- thumb_func_start atkEB_settypetoterrain
-atkEB_settypetoterrain: @ 802B330
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _0802B3A0 @ =gBattleMons
- mov r8, r0
- ldr r7, _0802B3A4 @ =gBankAttacker
- ldrb r0, [r7]
- movs r6, 0x58
- muls r0, r6
- mov r1, r8
- adds r3, r0, r1
- movs r0, 0x21
- adds r0, r3
- mov r12, r0
- ldr r5, _0802B3A8 @ =gTerrainToType
- ldr r4, _0802B3AC @ =gBattleTerrain
- ldrb r0, [r4]
- adds r0, r5
- ldrb r2, [r0]
- mov r1, r12
- ldrb r0, [r1]
- adds r1, r2, 0
- cmp r0, r1
- beq _0802B3B8
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- beq _0802B3B8
- mov r0, r12
- strb r2, [r0]
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- add r1, r8
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- adds r1, 0x22
- strb r0, [r1]
- ldr r1, _0802B3B0 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r1, _0802B3B4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802B3D2
- .align 2, 0
-_0802B3A0: .4byte gBattleMons
-_0802B3A4: .4byte gBankAttacker
-_0802B3A8: .4byte gTerrainToType
-_0802B3AC: .4byte gBattleTerrain
-_0802B3B0: .4byte gBattleTextBuff1
-_0802B3B4: .4byte gBattlescriptCurrInstr
-_0802B3B8:
- ldr r3, _0802B3DC @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802B3D2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B3DC: .4byte gBattlescriptCurrInstr
- thumb_func_end atkEB_settypetoterrain
-
- thumb_func_start sub_802B3E0
-sub_802B3E0: @ 802B3E0
- push {r4,r5,lr}
- ldr r5, _0802B45C @ =gBankAttacker
- ldrb r0, [r5]
- bl GetBankIdentity
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- ldr r4, _0802B460 @ =gActiveBank
- strb r0, [r4]
- ldr r0, _0802B464 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802B490
- ldr r0, _0802B468 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _0802B46C @ =gBitTable
- ldrb r3, [r4]
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802B490
- ldr r0, _0802B470 @ =gActionForBanks
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802B490
- ldr r1, _0802B474 @ =gChosenMovesByBanks
- lsls r0, r3, 1
- adds r0, r1
- ldrh r2, [r0]
- cmp r2, 0xE4
- bne _0802B490
- ldr r0, _0802B478 @ =gUnknown_02024A76
- adds r0, r3, r0
- movs r1, 0xB
- strb r1, [r0]
- ldr r0, _0802B47C @ =gCurrentMove
- strh r2, [r0]
- ldr r1, _0802B480 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- ldr r1, _0802B484 @ =0x02000000
- ldr r0, _0802B488 @ =0x00016002
- adds r2, r1, r0
- movs r0, 0x1
- strb r0, [r2]
- ldrb r0, [r5]
- ldr r2, _0802B48C @ =0x000160a7
- adds r1, r2
- strb r0, [r1]
- ldrb r0, [r4]
- strb r0, [r5]
- b _0802B4AA
- .align 2, 0
-_0802B45C: .4byte gBankAttacker
-_0802B460: .4byte gActiveBank
-_0802B464: .4byte gBattleTypeFlags
-_0802B468: .4byte gAbsentBankFlags
-_0802B46C: .4byte gBitTable
-_0802B470: .4byte gActionForBanks
-_0802B474: .4byte gChosenMovesByBanks
-_0802B478: .4byte gUnknown_02024A76
-_0802B47C: .4byte gCurrentMove
-_0802B480: .4byte gBattlescriptCurrInstr
-_0802B484: .4byte 0x02000000
-_0802B488: .4byte 0x00016002
-_0802B48C: .4byte 0x000160a7
-_0802B490:
- ldr r3, _0802B4B0 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802B4AA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B4B0: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802B3E0
-
- thumb_func_start sub_802B4B4
-sub_802B4B4: @ 802B4B4
- push {r4,r5,lr}
- ldr r1, _0802B4DC @ =gEffectBank
- ldr r3, _0802B4E0 @ =gBankAttacker
- ldrb r0, [r3]
- strb r0, [r1]
- ldr r2, _0802B4E4 @ =gBankTarget
- lsls r0, 24
- lsrs r0, 24
- adds r4, r1, 0
- ldrb r1, [r2]
- cmp r0, r1
- bne _0802B4F0
- ldr r0, _0802B4E8 @ =0x02000000
- ldr r5, _0802B4EC @ =0x00016003
- adds r1, r0, r5
- ldrb r1, [r1]
- strb r1, [r2]
- strb r1, [r3]
- b _0802B4FA
- .align 2, 0
-_0802B4DC: .4byte gEffectBank
-_0802B4E0: .4byte gBankAttacker
-_0802B4E4: .4byte gBankTarget
-_0802B4E8: .4byte 0x02000000
-_0802B4EC: .4byte 0x00016003
-_0802B4F0:
- ldr r0, _0802B510 @ =0x02000000
- ldr r3, _0802B514 @ =0x00016003
- adds r1, r0, r3
- ldrb r1, [r1]
- strb r1, [r2]
-_0802B4FA:
- ldrb r1, [r4]
- ldr r5, _0802B514 @ =0x00016003
- adds r0, r5
- strb r1, [r0]
- ldr r1, _0802B518 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B510: .4byte 0x02000000
-_0802B514: .4byte 0x00016003
-_0802B518: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802B4B4
-
- thumb_func_start sub_802B51C
-sub_802B51C: @ 802B51C
- push {r4,lr}
- ldr r0, _0802B56C @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0802B570 @ =gSideTimer
- lsls r3, r0, 1
- adds r0, r3, r0
- lsls r0, 2
- adds r4, r0, r1
- ldrb r0, [r4]
- cmp r0, 0
- bne _0802B544
- ldrb r2, [r4, 0x1]
- cmp r2, 0
- beq _0802B58C
-_0802B544:
- ldr r2, _0802B574 @ =gSideAffecting
- adds r2, r3, r2
- ldrh r1, [r2]
- ldr r0, _0802B578 @ =0x0000fffe
- ands r0, r1
- movs r3, 0
- ldr r1, _0802B57C @ =0x0000fffd
- ands r0, r1
- strh r0, [r2]
- strb r3, [r4]
- strb r3, [r4, 0x1]
- ldr r0, _0802B580 @ =0x02000000
- ldr r2, _0802B584 @ =0x00016002
- adds r1, r0, r2
- movs r2, 0x1
- strb r2, [r1]
- ldr r3, _0802B588 @ =0x000160a1
- adds r0, r3
- b _0802B598
- .align 2, 0
-_0802B56C: .4byte gBankAttacker
-_0802B570: .4byte gSideTimer
-_0802B574: .4byte gSideAffecting
-_0802B578: .4byte 0x0000fffe
-_0802B57C: .4byte 0x0000fffd
-_0802B580: .4byte 0x02000000
-_0802B584: .4byte 0x00016002
-_0802B588: .4byte 0x000160a1
-_0802B58C:
- ldr r0, _0802B5A8 @ =0x02000000
- ldr r3, _0802B5AC @ =0x00016002
- adds r1, r0, r3
- strb r2, [r1]
- ldr r1, _0802B5B0 @ =0x000160a1
- adds r0, r1
-_0802B598:
- strb r2, [r0]
- ldr r1, _0802B5B4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B5A8: .4byte 0x02000000
-_0802B5AC: .4byte 0x00016002
-_0802B5B0: .4byte 0x000160a1
-_0802B5B4: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802B51C
-
- thumb_func_start sub_802B5B8
-sub_802B5B8: @ 802B5B8
- push {r4-r7,lr}
- movs r4, 0
- ldr r0, _0802B5F8 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _0802B5C6
- b _0802B94E
-_0802B5C6:
- ldr r5, _0802B5FC @ =gActiveBank
- ldr r0, _0802B600 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r5]
- ldr r6, _0802B604 @ =gBankTarget
- movs r1, 0x1
- eors r0, r1
- strb r0, [r6]
- ldr r0, _0802B608 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0802B614
- movs r0, 0
- movs r1, 0x5
- bl dp01_build_cmdbuf_x0D_a
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r1, _0802B60C @ =gBattlescriptCurrInstr
- ldr r0, _0802B610 @ =gUnknown_081D9F35
- b _0802B94C
- .align 2, 0
-_0802B5F8: .4byte gBattleExecBuffer
-_0802B5FC: .4byte gActiveBank
-_0802B600: .4byte gBankAttacker
-_0802B604: .4byte gBankTarget
-_0802B608: .4byte gBattleTypeFlags
-_0802B60C: .4byte gBattlescriptCurrInstr
-_0802B610: .4byte gUnknown_081D9F35
-_0802B614:
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _0802B63C
- movs r0, 0
- movs r1, 0x4
- bl dp01_build_cmdbuf_x0D_a
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r1, _0802B634 @ =gBattlescriptCurrInstr
- ldr r0, _0802B638 @ =gUnknown_081D9F00
- b _0802B94C
- .align 2, 0
-_0802B634: .4byte gBattlescriptCurrInstr
-_0802B638: .4byte gUnknown_081D9F00
-_0802B63C:
- ldr r0, _0802B660 @ =gLastUsedItem
- ldrh r0, [r0]
- cmp r0, 0x5
- bne _0802B66C
- ldr r0, _0802B664 @ =0x02000000
- ldr r1, _0802B668 @ =0x00016089
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 2
- adds r1, r0
- lsls r0, r1, 8
- subs r0, r1
- movs r1, 0x64
- bl __divsi3
- lsls r0, 24
- lsrs r5, r0, 24
- b _0802B684
- .align 2, 0
-_0802B660: .4byte gLastUsedItem
-_0802B664: .4byte 0x02000000
-_0802B668: .4byte 0x00016089
-_0802B66C:
- ldr r3, _0802B6A0 @ =gBaseStats
- ldr r2, _0802B6A4 @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r5, [r0, 0x8]
-_0802B684:
- ldr r2, _0802B6A8 @ =gLastUsedItem
- ldrh r0, [r2]
- cmp r0, 0x5
- bhi _0802B68E
- b _0802B784
-_0802B68E:
- subs r0, 0x6
- cmp r0, 0x6
- bls _0802B696
- b _0802B78E
-_0802B696:
- lsls r0, 2
- ldr r1, _0802B6AC @ =_0802B6B0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802B6A0: .4byte gBaseStats
-_0802B6A4: .4byte gBattleMons
-_0802B6A8: .4byte gLastUsedItem
-_0802B6AC: .4byte _0802B6B0
- .align 2, 0
-_0802B6B0:
- .4byte _0802B6CC
- .4byte _0802B6FC
- .4byte _0802B70E
- .4byte _0802B73C
- .4byte _0802B76C
- .4byte _0802B72E
- .4byte _0802B72E
-_0802B6CC:
- ldr r2, _0802B6F4 @ =gBattleMons
- ldr r0, _0802B6F8 @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r1, [r1]
- cmp r1, 0xB
- beq _0802B760
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xB
- beq _0802B760
- cmp r1, 0x6
- beq _0802B760
- cmp r0, 0x6
- beq _0802B760
- b _0802B72E
- .align 2, 0
-_0802B6F4: .4byte gBattleMons
-_0802B6F8: .4byte gBankTarget
-_0802B6FC:
- bl sav1_map_get_light_level
- lsls r0, 24
- lsrs r0, 24
- movs r4, 0xA
- cmp r0, 0x5
- bne _0802B78E
- movs r4, 0x23
- b _0802B78E
-_0802B70E:
- ldr r2, _0802B734 @ =gBattleMons
- ldr r0, _0802B738 @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r1, [r0]
- cmp r1, 0x27
- bhi _0802B72E
- movs r0, 0x28
- subs r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x9
- bhi _0802B78E
-_0802B72E:
- movs r4, 0xA
- b _0802B78E
- .align 2, 0
-_0802B734: .4byte gBattleMons
-_0802B738: .4byte gBankTarget
-_0802B73C:
- ldr r2, _0802B764 @ =gBattleMons
- ldr r0, _0802B768 @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetNationalPokedexFlag
- lsls r0, 24
- movs r4, 0xA
- cmp r0, 0
- beq _0802B78E
-_0802B760:
- movs r4, 0x1E
- b _0802B78E
- .align 2, 0
-_0802B764: .4byte gBattleMons
-_0802B768: .4byte gBankTarget
-_0802B76C:
- ldr r0, _0802B780 @ =gBattleResults
- ldrb r0, [r0, 0x13]
- adds r0, 0xA
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x28
- bls _0802B78E
- movs r4, 0x28
- b _0802B78E
- .align 2, 0
-_0802B780: .4byte gBattleResults
-_0802B784:
- ldr r1, _0802B7F4 @ =gBallCatchBonuses
- ldrh r0, [r2]
- subs r0, 0x2
- adds r0, r1
- ldrb r4, [r0]
-_0802B78E:
- adds r0, r5, 0
- muls r0, r4
- movs r1, 0xA
- bl __divsi3
- ldr r5, _0802B7F8 @ =gBattleMons
- ldr r1, _0802B7FC @ =gBankTarget
- ldrb r1, [r1]
- movs r7, 0x58
- adds r4, r1, 0
- muls r4, r7
- adds r3, r4, r5
- ldrh r2, [r3, 0x2C]
- lsls r1, r2, 1
- adds r1, r2
- ldrh r2, [r3, 0x28]
- lsls r2, 1
- subs r2, r1, r2
- muls r0, r2
- bl __divsi3
- adds r6, r0, 0
- adds r5, 0x4C
- adds r4, r5
- ldr r4, [r4]
- movs r0, 0x27
- ands r0, r4
- cmp r0, 0
- beq _0802B7CA
- lsls r6, 1
-_0802B7CA:
- ands r4, r7
- cmp r4, 0
- beq _0802B7DC
- lsls r0, r6, 4
- subs r0, r6
- movs r1, 0xA
- bl __udivsi3
- adds r6, r0, 0
-_0802B7DC:
- ldr r1, _0802B800 @ =gLastUsedItem
- ldrh r0, [r1]
- cmp r0, 0x5
- beq _0802B81C
- cmp r0, 0x1
- bne _0802B808
- ldr r0, _0802B804 @ =gBattleResults
- ldrb r1, [r0, 0x5]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0, 0x5]
- b _0802B81C
- .align 2, 0
-_0802B7F4: .4byte gBallCatchBonuses
-_0802B7F8: .4byte gBattleMons
-_0802B7FC: .4byte gBankTarget
-_0802B800: .4byte gLastUsedItem
-_0802B804: .4byte gBattleResults
-_0802B808:
- ldr r0, _0802B860 @ =gBattleResults
- ldrh r1, [r1]
- adds r0, r1
- adds r1, r0, 0
- adds r1, 0x34
- ldrb r0, [r1]
- cmp r0, 0xFE
- bhi _0802B81C
- adds r0, 0x1
- strb r0, [r1]
-_0802B81C:
- cmp r6, 0xFE
- bls _0802B880
- movs r0, 0
- movs r1, 0x4
- bl dp01_build_cmdbuf_x0D_a
- ldr r0, _0802B864 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _0802B868 @ =gBattlescriptCurrInstr
- ldr r0, _0802B86C @ =gUnknown_081D9EC2
- str r0, [r1]
- ldr r1, _0802B870 @ =gBattlePartyID
- ldr r0, _0802B874 @ =gBankTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802B878 @ =gEnemyParty
- adds r0, r1
- ldr r2, _0802B87C @ =gLastUsedItem
- movs r1, 0x26
- bl SetMonData
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- beq _0802B90E
- b _0802B938
- .align 2, 0
-_0802B860: .4byte gBattleResults
-_0802B864: .4byte gActiveBank
-_0802B868: .4byte gBattlescriptCurrInstr
-_0802B86C: .4byte gUnknown_081D9EC2
-_0802B870: .4byte gBattlePartyID
-_0802B874: .4byte gBankTarget
-_0802B878: .4byte gEnemyParty
-_0802B87C: .4byte gLastUsedItem
-_0802B880:
- movs r0, 0xFF
- lsls r0, 16
- adds r1, r6, 0
- bl __udivsi3
- bl Sqrt
- lsls r0, 16
- lsrs r0, 16
- bl Sqrt
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, _0802B8A8 @ =0x000ffff0
- adds r1, r6, 0
- bl __udivsi3
- adds r6, r0, 0
- movs r4, 0
- b _0802B8B2
- .align 2, 0
-_0802B8A8: .4byte 0x000ffff0
-_0802B8AC:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_0802B8B2:
- cmp r4, 0x3
- bhi _0802B8C2
- bl Random
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcc _0802B8AC
-_0802B8C2:
- ldr r5, _0802B918 @ =gLastUsedItem
- ldrh r0, [r5]
- cmp r0, 0x1
- bne _0802B8CC
- movs r4, 0x4
-_0802B8CC:
- movs r0, 0
- adds r1, r4, 0
- bl dp01_build_cmdbuf_x0D_a
- ldr r0, _0802B91C @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- cmp r4, 0x4
- bne _0802B944
- ldr r1, _0802B920 @ =gBattlescriptCurrInstr
- ldr r0, _0802B924 @ =gUnknown_081D9EC2
- str r0, [r1]
- ldr r1, _0802B928 @ =gBattlePartyID
- ldr r0, _0802B92C @ =gBankTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802B930 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x26
- adds r2, r5, 0
- bl SetMonData
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- bne _0802B938
-_0802B90E:
- ldr r1, _0802B934 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- b _0802B94E
- .align 2, 0
-_0802B918: .4byte gLastUsedItem
-_0802B91C: .4byte gActiveBank
-_0802B920: .4byte gBattlescriptCurrInstr
-_0802B924: .4byte gUnknown_081D9EC2
-_0802B928: .4byte gBattlePartyID
-_0802B92C: .4byte gBankTarget
-_0802B930: .4byte gEnemyParty
-_0802B934: .4byte gBattleCommunication
-_0802B938:
- ldr r1, _0802B940 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _0802B94E
- .align 2, 0
-_0802B940: .4byte gBattleCommunication
-_0802B944:
- ldr r0, _0802B954 @ =gBattleCommunication
- strb r4, [r0, 0x5]
- ldr r1, _0802B958 @ =gBattlescriptCurrInstr
- ldr r0, _0802B95C @ =gUnknown_081D9F0A
-_0802B94C:
- str r0, [r1]
-_0802B94E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B954: .4byte gBattleCommunication
-_0802B958: .4byte gBattlescriptCurrInstr
-_0802B95C: .4byte gUnknown_081D9F0A
- thumb_func_end sub_802B5B8
-
- thumb_func_start sub_802B960
-sub_802B960: @ 802B960
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- ldr r0, _0802B9C8 @ =gBattlePartyID
- mov r9, r0
- ldr r5, _0802B9CC @ =gBankAttacker
- ldrb r0, [r5]
- movs r4, 0x1
- eors r0, r4
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- movs r1, 0x64
- mov r8, r1
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- ldr r6, _0802B9D0 @ =gEnemyParty
- adds r0, r6
- bl GiveMonToPlayer
- ldr r2, _0802B9D4 @ =gBattleResults
- ldr r1, _0802B9D8 @ =gBattleMons
- ldrb r0, [r5]
- eors r4, r0
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r2, 0x28]
- lsls r4, 1
- add r4, r9
- ldrh r0, [r4]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- adds r2, 0x2A
- movs r1, 0x2
- bl GetMonData
- ldr r1, _0802B9DC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B9C8: .4byte gBattlePartyID
-_0802B9CC: .4byte gBankAttacker
-_0802B9D0: .4byte gEnemyParty
-_0802B9D4: .4byte gBattleResults
-_0802B9D8: .4byte gBattleMons
-_0802B9DC: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802B960
-
- thumb_func_start sub_802B9E0
-sub_802B9E0: @ 802B9E0
- push {r4-r6,lr}
- ldr r4, _0802BA20 @ =gBattleMons
- ldr r6, _0802BA24 @ =gBankTarget
- ldrb r0, [r6]
- movs r5, 0x58
- muls r0, r5
- adds r0, r4
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetNationalPokedexFlag
- lsls r0, 24
- cmp r0, 0
- beq _0802BA2C
- ldr r3, _0802BA28 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
- b _0802BA82
- .align 2, 0
-_0802BA20: .4byte gBattleMons
-_0802BA24: .4byte gBankTarget
-_0802BA28: .4byte gBattlescriptCurrInstr
-_0802BA2C:
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetNationalPokedexFlag
- ldrb r0, [r6]
- adds r2, r0, 0
- muls r2, r5
- adds r0, r2, r4
- ldrh r0, [r0]
- cmp r0, 0xC9
- bne _0802BA5C
- ldr r0, _0802BA88 @ =gSaveBlock2
- adds r1, r4, 0
- adds r1, 0x48
- adds r1, r2, r1
- ldr r1, [r1]
- str r1, [r0, 0x1C]
-_0802BA5C:
- ldrb r0, [r6]
- adds r2, r0, 0
- muls r2, r5
- adds r0, r2, r4
- ldrh r1, [r0]
- movs r0, 0x9A
- lsls r0, 1
- cmp r1, r0
- bne _0802BA7A
- ldr r0, _0802BA88 @ =gSaveBlock2
- adds r1, r4, 0
- adds r1, 0x48
- adds r1, r2, r1
- ldr r1, [r1]
- str r1, [r0, 0x20]
-_0802BA7A:
- ldr r1, _0802BA8C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802BA82:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BA88: .4byte gSaveBlock2
-_0802BA8C: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802B9E0
-
- thumb_func_start sub_802BA90
-sub_802BA90: @ 802BA90
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r7, _0802BAA8 @ =gBattleCommunication
- ldrb r1, [r7]
- cmp r1, 0x1
- beq _0802BAC6
- cmp r1, 0x1
- bgt _0802BAAC
- cmp r1, 0
- beq _0802BAB8
- b _0802BBC4
- .align 2, 0
-_0802BAA8: .4byte gBattleCommunication
-_0802BAAC:
- cmp r1, 0x2
- beq _0802BB10
- cmp r1, 0x3
- bne _0802BAB6
- b _0802BBB0
-_0802BAB6:
- b _0802BBC4
-_0802BAB8:
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- b _0802BB6E
-_0802BAC6:
- ldr r0, _0802BB04 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802BBC4
- ldr r4, _0802BB08 @ =gBattleMons
- ldr r6, _0802BB0C @ =gBankTarget
- 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]
- adds r2, r1, 0
- muls r2, r5
- adds r1, r4, 0
- adds r1, 0x54
- adds r1, r2, r1
- ldr r1, [r1]
- adds r4, 0x48
- adds r2, r4
- ldr r2, [r2]
- bl sub_809070C
- strb r0, [r7, 0x1]
- b _0802BB72
- .align 2, 0
-_0802BB04: .4byte gPaletteFade
-_0802BB08: .4byte gBattleMons
-_0802BB0C: .4byte gBankTarget
-_0802BB10:
- ldr r0, _0802BB7C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802BBC4
- ldr r0, _0802BB80 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0802BB84 @ =sub_800F808
- cmp r1, r0
- bne _0802BBC4
- ldr r2, _0802BB88 @ =gTasks
- ldrb r1, [r7, 0x1]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r4, [r0, 0x4]
- cmp r4, 0
- bne _0802BBC4
- ldr r0, _0802BB8C @ =gBattleTerrainTiles_Building
- ldr r1, _0802BB90 @ =0x06008000
- bl LZDecompressVram
- ldr r0, _0802BB94 @ =gBattleTerrainTilemap_Building
- ldr r1, _0802BB98 @ =0x0600d000
- bl LZDecompressVram
- ldr r0, _0802BB9C @ =gBattleTerrainPalette_BattleTower
- movs r1, 0x20
- movs r2, 0x60
- bl LoadCompressedPalette
- ldr r1, _0802BBA0 @ =REG_BG3CNT
- ldr r2, _0802BBA4 @ =0x00005a0b
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _0802BBA8 @ =gUnknown_030041B0
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _0802BBAC @ =0x0000fffc
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
-_0802BB6E:
- bl BeginNormalPaletteFade
-_0802BB72:
- ldrb r0, [r7]
- adds r0, 0x1
- strb r0, [r7]
- b _0802BBC4
- .align 2, 0
-_0802BB7C: .4byte gPaletteFade
-_0802BB80: .4byte gMain
-_0802BB84: .4byte sub_800F808
-_0802BB88: .4byte gTasks
-_0802BB8C: .4byte gBattleTerrainTiles_Building
-_0802BB90: .4byte 0x06008000
-_0802BB94: .4byte gBattleTerrainTilemap_Building
-_0802BB98: .4byte 0x0600d000
-_0802BB9C: .4byte gBattleTerrainPalette_BattleTower
-_0802BBA0: .4byte REG_BG3CNT
-_0802BBA4: .4byte 0x00005a0b
-_0802BBA8: .4byte gUnknown_030041B0
-_0802BBAC: .4byte 0x0000fffc
-_0802BBB0:
- ldr r0, _0802BBCC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802BBC4
- ldr r1, _0802BBD0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0802BBC4:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BBCC: .4byte gPaletteFade
-_0802BBD0: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802BA90
-
- thumb_func_start sub_802BBD4
-sub_802BBD4: @ 802BBD4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, [sp, 0x20]
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r12, r1
- lsls r2, 24
- lsrs r5, r2, 24
- lsls r3, 24
- lsrs r7, r3, 24
- lsls r4, 24
- lsrs r4, 24
- mov r8, r4
- mov r2, r12
- cmp r2, r7
- bgt _0802BC5A
- lsls r1, r6, 1
- ldr r0, _0802BC20 @ =0x0600c000
- adds r1, r0
- mov r9, r1
-_0802BC06:
- adds r1, r6, 0
- adds r0, r2, 0x1
- mov r10, r0
- cmp r1, r5
- bgt _0802BC54
- lsls r0, r2, 6
- mov r4, r9
- adds r3, r4, r0
-_0802BC16:
- cmp r2, r12
- bne _0802BC28
- ldr r0, _0802BC24 @ =0x00001022
- b _0802BC36
- .align 2, 0
-_0802BC20: .4byte 0x0600c000
-_0802BC24: .4byte 0x00001022
-_0802BC28:
- cmp r2, r7
- bne _0802BC34
- ldr r0, _0802BC30 @ =0x00001028
- b _0802BC36
- .align 2, 0
-_0802BC30: .4byte 0x00001028
-_0802BC34:
- ldr r0, _0802BC68 @ =0x00001025
-_0802BC36:
- cmp r1, r6
- beq _0802BC42
- adds r0, 0x1
- cmp r1, r5
- bne _0802BC42
- adds r0, 0x1
-_0802BC42:
- mov r4, r8
- cmp r4, 0
- beq _0802BC4A
- movs r0, 0
-_0802BC4A:
- strh r0, [r3]
- adds r3, 0x2
- adds r1, 0x1
- cmp r1, r5
- ble _0802BC16
-_0802BC54:
- mov r2, r10
- cmp r2, r7
- ble _0802BC06
-_0802BC5A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BC68: .4byte 0x00001025
- thumb_func_end sub_802BBD4
-
- thumb_func_start sub_802BC6C
-sub_802BC6C: @ 802BC6C
- push {lr}
- ldr r0, _0802BC88 @ =gBattleCommunication
- ldrb r1, [r0, 0x1]
- lsls r1, 28
- movs r0, 0x90
- lsls r0, 23
- adds r1, r0
- lsrs r1, 24
- movs r0, 0xC8
- bl sub_814A880
- pop {r0}
- bx r0
- .align 2, 0
-_0802BC88: .4byte gBattleCommunication
- thumb_func_end sub_802BC6C
-
- thumb_func_start nullsub_6
-nullsub_6: @ 802BC8C
- bx lr
- thumb_func_end nullsub_6
-
- thumb_func_start atkF3_receive_new_pokemon_maybe
-atkF3_receive_new_pokemon_maybe: @ 802BC90
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, _0802BCB4 @ =gBattleCommunication
- ldrb r1, [r0]
- adds r4, r0, 0
- cmp r1, 0x4
- bls _0802BCA8
- b _0802BEDA
-_0802BCA8:
- lsls r0, r1, 2
- ldr r1, _0802BCB8 @ =_0802BCBC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802BCB4: .4byte gBattleCommunication
-_0802BCB8: .4byte _0802BCBC
- .align 2, 0
-_0802BCBC:
- .4byte _0802BCD0
- .4byte _0802BCEC
- .4byte _0802BD84
- .4byte _0802BE50
- .4byte _0802BEA4
-_0802BCD0:
- bl sub_8023A80
- ldr r0, _0802BCE8 @ =gBattleCommunication
- ldrb r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strb r1, [r0]
- strb r2, [r0, 0x1]
- bl sub_802BC6C
- b _0802BEDA
- .align 2, 0
-_0802BCE8: .4byte gBattleCommunication
-_0802BCEC:
- ldr r0, _0802BD60 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802BD10
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _0802BD10
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0
- strb r0, [r4, 0x1]
- bl sub_802BC6C
-_0802BD10:
- ldr r0, _0802BD60 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802BD36
- ldr r4, _0802BD64 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _0802BD36
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_802BC6C
-_0802BD36:
- ldr r0, _0802BD60 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802BD68
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802BD64 @ =gBattleCommunication
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0802BD7A
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r0, 0x3
- bl BeginFastPaletteFade
- b _0802BEDA
- .align 2, 0
-_0802BD60: .4byte gMain
-_0802BD64: .4byte gBattleCommunication
-_0802BD68:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0802BD72
- b _0802BEDA
-_0802BD72:
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802BD80 @ =gBattleCommunication
-_0802BD7A:
- movs r0, 0x4
- strb r0, [r1]
- b _0802BEDA
- .align 2, 0
-_0802BD80: .4byte gBattleCommunication
-_0802BD84:
- ldr r0, _0802BE34 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802BD92
- b _0802BEDA
-_0802BD92:
- ldr r7, _0802BE38 @ =gBattlePartyID
- ldr r0, _0802BE3C @ =gBankAttacker
- mov r10, r0
- ldrb r0, [r0]
- movs r4, 0x1
- eors r0, r4
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r1, 0x64
- mov r9, r1
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- ldr r1, _0802BE40 @ =gEnemyParty
- mov r8, r1
- add r0, r8
- movs r1, 0x2
- ldr r2, _0802BE44 @ =0x02016079
- bl GetMonData
- mov r1, r10
- ldrb r0, [r1]
- eors r0, r4
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- movs r1, 0xB
- bl GetMonData
- adds r6, r0, 0
- lsls r6, 16
- lsrs r6, 16
- mov r1, r10
- ldrb r0, [r1]
- eors r0, r4
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- bl GetMonGender
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- mov r1, r10
- ldrb r0, [r1]
- eors r4, r0
- lsls r4, 1
- adds r4, r7
- ldrh r0, [r4]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- movs r1, 0
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- ldr r0, _0802BE48 @ =sub_800F808
- str r0, [sp, 0x4]
- movs r0, 0x2
- ldr r1, _0802BE44 @ =0x02016079
- adds r2, r6, 0
- adds r3, r5, 0
- bl DoNamingScreen
- ldr r1, _0802BE4C @ =gBattleCommunication
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0802BEDA
- .align 2, 0
-_0802BE34: .4byte gPaletteFade
-_0802BE38: .4byte gBattlePartyID
-_0802BE3C: .4byte gBankAttacker
-_0802BE40: .4byte gEnemyParty
-_0802BE44: .4byte 0x02016079
-_0802BE48: .4byte sub_800F808
-_0802BE4C: .4byte gBattleCommunication
-_0802BE50:
- ldr r0, _0802BE88 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0802BE8C @ =sub_800F808
- cmp r1, r0
- bne _0802BEDA
- ldr r0, _0802BE90 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802BEDA
- ldr r2, _0802BE94 @ =gBattlePartyID
- ldr r0, _0802BE98 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x1
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802BE9C @ =gEnemyParty
- adds r0, r1
- ldr r2, _0802BEA0 @ =0x02016079
- movs r1, 0x2
- bl SetMonData
- b _0802BEC0
- .align 2, 0
-_0802BE88: .4byte gMain
-_0802BE8C: .4byte sub_800F808
-_0802BE90: .4byte gPaletteFade
-_0802BE94: .4byte gBattlePartyID
-_0802BE98: .4byte gBankAttacker
-_0802BE9C: .4byte gEnemyParty
-_0802BEA0: .4byte 0x02016079
-_0802BEA4:
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- bne _0802BEC0
- ldr r1, _0802BEBC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802BEDA
- .align 2, 0
-_0802BEBC: .4byte gBattlescriptCurrInstr
-_0802BEC0:
- ldr r3, _0802BEEC @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- 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, [r3]
-_0802BEDA:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BEEC: .4byte gBattlescriptCurrInstr
- thumb_func_end atkF3_receive_new_pokemon_maybe
-
- thumb_func_start sub_802BEF0
-sub_802BEF0: @ 802BEF0
- ldr r2, _0802BF10 @ =gBattleMons
- ldr r0, _0802BF14 @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r1, r2
- ldr r0, _0802BF18 @ =gBattleMoveDamage
- ldr r2, [r0]
- ldrh r0, [r1, 0x28]
- subs r0, r2
- strh r0, [r1, 0x28]
- ldr r1, _0802BF1C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802BF10: .4byte gBattleMons
-_0802BF14: .4byte gBankAttacker
-_0802BF18: .4byte gBattleMoveDamage
-_0802BF1C: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802BEF0
-
- thumb_func_start sub_802BF20
-sub_802BF20: @ 802BF20
- ldr r1, _0802BF3C @ =gBattleMons
- ldr r0, _0802BF40 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r0, r1
- movs r1, 0
- str r1, [r0]
- ldr r1, _0802BF44 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802BF3C: .4byte gBattleMons
-_0802BF40: .4byte gBankAttacker
-_0802BF44: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_802BF20
-
- thumb_func_start sub_802BF48
-sub_802BF48: @ 802BF48
- ldr r1, _0802BF50 @ =gFightStateTracker
- movs r0, 0xC
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0802BF50: .4byte gFightStateTracker
- thumb_func_end sub_802BF48
-
- thumb_func_start sub_802BF54
-sub_802BF54: @ 802BF54
- ldr r1, _0802BF64 @ =gFightStateTracker
- movs r0, 0xC
- strb r0, [r1]
- ldr r1, _0802BF68 @ =gCurrentMoveTurn
- ldr r0, _0802BF6C @ =gNoOfAllBanks
- ldrb r0, [r0]
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0802BF64: .4byte gFightStateTracker
-_0802BF68: .4byte gCurrentMoveTurn
-_0802BF6C: .4byte gNoOfAllBanks
- thumb_func_end sub_802BF54
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_9.s b/asm/battle_9.s
index fffb56dc9..1c5431afc 100644
--- a/asm/battle_9.s
+++ b/asm/battle_9.s
@@ -136,7 +136,7 @@ _080360D8:
ldrh r1, [r4]
mov r3, r8
ldrb r2, [r3]
- bl ai_rate_move
+ bl AI_TypeCalc
lsls r0, 24
lsrs r1, r0, 24
movs r0, 0x2
@@ -211,7 +211,7 @@ _0803617C:
beq _080361BC
ldrh r1, [r5]
ldrb r2, [r7]
- bl ai_rate_move
+ bl AI_TypeCalc
lsls r0, 24
lsrs r1, r0, 24
movs r0, 0x2
@@ -693,7 +693,7 @@ _08036550:
ldrh r1, [r5]
mov r3, r9
ldrb r2, [r3]
- bl ai_rate_move
+ bl AI_TypeCalc
lsls r0, 24
lsrs r1, r0, 24
movs r0, 0x2
@@ -770,7 +770,7 @@ _080365F2:
ldrh r1, [r5]
mov r3, r9
ldrb r2, [r3]
- bl ai_rate_move
+ bl AI_TypeCalc
lsls r0, 24
lsrs r1, r0, 24
movs r0, 0x2
@@ -1061,7 +1061,7 @@ _08036850:
adds r0, r1
ldrh r0, [r0]
adds r1, r4, 0
- bl ai_rate_move
+ bl AI_TypeCalc
ldr r1, [sp]
ands r1, r0
cmp r1, 0
@@ -1096,7 +1096,7 @@ _0803688E:
beq _080368CA
ldrh r1, [r5]
ldrb r2, [r7]
- bl ai_rate_move
+ bl AI_TypeCalc
lsls r0, 24
lsrs r1, r0, 24
movs r0, 0x2
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index fbb0826fc..853760b4a 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -4,7 +4,7 @@
.section script_data, "aw", %progbits
-gUnknown_081D6BBC:: @ 81D6BBC
+gBattleScriptsEffectsTable:: @ 81D6BBC
.4byte MoveEffect_Hit
.4byte MoveEffect_Sleep
.4byte MoveEffect_PoisonHit
@@ -305,11 +305,11 @@ MoveEffect_Sleep: @ 81D6F81
attackcanceler
attackstring
ppreduce
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
jumpifstatus TARGET, SLP, BattleScript_1D6FC4
jumpifcannotsleep BattleScript_1D6FE0
- jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6
- accuracycheck BattleScript_1D83D6, 0
+ jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, 0
jumpifhalverset TARGET, 32, BattleScript_1D9037
attackanimation
waitanimation
@@ -638,9 +638,9 @@ MoveEffect_Roar: @ 81D72C5
ppreduce
jumpifability TARGET, ABILITY_SUCTION_CUPS, BattleScript_1D988D
jumpifspecialstatusflag TARGET, 0x400, 0, BattleScript_1D93EC
- accuracycheck BattleScript_1D83D6, 65535
+ accuracycheck BattleScript_ButItFailed, 65535
accuracycheck BattleScript_1D6F77, 0
- forcerandomswitch BattleScript_1D83D6
+ forcerandomswitch BattleScript_ButItFailed
MoveEffect_MultiHit: @ 81D72ED
attackcanceler
@@ -707,7 +707,7 @@ MoveEffect_Conversion: @ 81D73B1
attackcanceler
attackstring
ppreduce
- changetypestoenemyattacktype BattleScript_1D83D6
+ changetypestoenemyattacktype BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_TypeTransform
@@ -737,13 +737,13 @@ MoveEffect_Toxic: @ 81D73F4
attackstring
ppreduce
jumpifability TARGET, ABILITY_IMMUNITY, BattleScript_1D7463
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
jumpifstatus TARGET, PSN, BattleScript_1D7455
jumpifstatus TARGET, TOX, BattleScript_1D7455
- jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6
+ jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed
jumpiftype TARGET, TYPE_POISON, BattleScript_1D83E8
jumpiftype TARGET, TYPE_STEEL, BattleScript_1D83E8
- accuracycheck BattleScript_1D83D6, 0
+ accuracycheck BattleScript_ButItFailed, 0
jumpifhalverset TARGET, 32, BattleScript_1D9037
attackanimation
waitanimation
@@ -810,7 +810,7 @@ MoveEffect_Ohko: @ 81D74E4
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 65535
+ accuracycheck BattleScript_ButItFailed, 65535
atk6
jumpifbyte 4, 0x2024c68, 41, BattleScript_1D6F48
koplussomethings BattleScript_1D7505
@@ -939,7 +939,7 @@ MoveEffect_FocusEnergy: @ 81D7689
attackcanceler
attackstring
ppreduce
- jumpifsecondarytstatus USER, S_FOCUS_ENERGY, BattleScript_1D83D6
+ jumpifsecondarytstatus USER, S_FOCUS_ENERGY, BattleScript_ButItFailed
setincreasedcriticalchance
attackanimation
waitanimation
@@ -958,9 +958,9 @@ MoveEffect_Confuse: @ 81D76BF
attackstring
ppreduce
jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_1D98E5
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
jumpifsecondarytstatus TARGET, S_CONFUSED, BattleScript_1D76FE
- accuracycheck BattleScript_1D83D6, 0
+ accuracycheck BattleScript_ButItFailed, 0
jumpifhalverset TARGET, 32, BattleScript_1D9037
attackanimation
waitanimation
@@ -1041,13 +1041,13 @@ MoveEffect_Poison: @ 81D7795
attackstring
ppreduce
jumpifability TARGET, ABILITY_IMMUNITY, BattleScript_1D7463
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
jumpifstatus TARGET, PSN, BattleScript_1D7455
jumpifstatus TARGET, TOX, BattleScript_1D7455
jumpiftype TARGET, TYPE_POISON, BattleScript_1D83E8
jumpiftype TARGET, TYPE_STEEL, BattleScript_1D83E8
- jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6
- accuracycheck BattleScript_1D83D6, 0
+ jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, 0
jumpifhalverset TARGET, 32, BattleScript_1D9037
attackanimation
waitanimation
@@ -1062,12 +1062,12 @@ MoveEffect_Paralyze: @ 81D77F6
attackstring
ppreduce
jumpifability TARGET, ABILITY_LIMBER, BattleScript_1D7859
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
atk6
- jumpifbyte 4, 0x2024c68, 41, BattleScript_1D83D6
+ jumpifbyte 4, 0x2024c68, 41, BattleScript_ButItFailed
jumpifstatus TARGET, PAR, BattleScript_1D784B
- jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6
- accuracycheck BattleScript_1D83D6, 0
+ jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, 0
jumpifhalverset TARGET, 32, BattleScript_1D9037
attackanimation
waitanimation
@@ -1190,9 +1190,9 @@ MoveEffect_Mimic: @ 81D7988
attackcanceler
attackstring
ppreduce
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
- accuracycheck BattleScript_1D83D6, 65535
- copyattack BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, 65535
+ copyattack BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_LearnedMove2
@@ -1214,7 +1214,7 @@ MoveEffect_LeechSeed: @ 81D79C2
attackstring
pause 32
ppreduce
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
accuracycheck BattleScript_1D79D9, 0
BattleScript_1D79D9: @ 81D79D9
@@ -1240,8 +1240,8 @@ MoveEffect_Disable: @ 81D79FB
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 0
- disablelastusedattack BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 0
+ disablelastusedattack BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_MoveWasDisabled
@@ -1285,7 +1285,7 @@ MoveEffect_Encore: @ 81D7A5D
accuracycheck BattleScript_1D6F72, 0
attackstring
ppreduce
- setencore BattleScript_1D83D6
+ setencore BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_EncoreGot
@@ -1296,8 +1296,8 @@ MoveEffect_PainSplit: @ 81D7A79
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 65535
- painsplitdamagecalculator BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 65535
+ painsplitdamagecalculator BattleScript_ButItFailed
attackanimation
waitanimation
orword 0x2024c6c, 0x100
@@ -1315,7 +1315,7 @@ MoveEffect_Snore: @ 81D7AB0
jumpifstatus USER, SLP, BattleScript_1D7AC2
attackstring
ppreduce
- jump BattleScript_1D83D6
+ jump BattleScript_ButItFailed
BattleScript_1D7AC2: @ 81D7AC2
jumpifhalfword 0, 0x2024be8, 214, BattleScript_1D7AD6
@@ -1334,7 +1334,7 @@ MoveEffect_Conversion2: @ 81D7AEA
attackcanceler
attackstring
ppreduce
- settypetorandomresistance BattleScript_1D83D6
+ settypetorandomresistance BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_TypeTransform
@@ -1345,8 +1345,8 @@ MoveEffect_LockOn: @ 81D7AFF
attackcanceler
attackstring
ppreduce
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
- accuracycheck BattleScript_1D83D6, 0
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, 0
setalwayshitflag
attackanimation
waitanimation
@@ -1358,8 +1358,8 @@ MoveEffect_Sketch: @ 81D7B21
attackcanceler
attackstring
ppreduce
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
- copymovepermanently BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
+ copymovepermanently BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_SketchedMove
@@ -1371,7 +1371,7 @@ MoveEffect_SleepTalk: @ 81D7B40
jumpifstatus USER, SLP, BattleScript_1D7B52
attackstring
ppreduce
- jump BattleScript_1D83D6
+ jump BattleScript_ButItFailed
BattleScript_1D7B52: @ 81D7B52
printstring BATTLE_TEXT_FastAsleep
@@ -1382,7 +1382,7 @@ BattleScript_1D7B52: @ 81D7B52
orword 0x2024c6c, 0x800
selectrandommovefromusermoves BattleScript_1D7B72
pause 64
- jump BattleScript_1D83D6
+ jump BattleScript_ButItFailed
BattleScript_1D7B72: @ 81D7B72
attackanimation
@@ -1410,8 +1410,8 @@ MoveEffect_Spite: @ 81D7B99
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 0
- reducepprandom BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 0
+ reducepprandom BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_ReducedBy
@@ -1512,8 +1512,8 @@ MoveEffect_MeanLook: @ 81D7CCC
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 65534
- jumpifsecondarytstatus TARGET, S_MEAN_LOOK, BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 65534
+ jumpifsecondarytstatus TARGET, S_MEAN_LOOK, BattleScript_ButItFailed
attackanimation
waitanimation
setbyte 0x2024d21, 32
@@ -1526,10 +1526,10 @@ MoveEffect_Nightmare: @ 81D7CF4
attackcanceler
attackstring
ppreduce
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
- jumpifsecondarytstatus TARGET, S_NIGHTMARE, BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsecondarytstatus TARGET, S_NIGHTMARE, BattleScript_ButItFailed
jumpifstatus TARGET, SLP, BattleScript_1D7D1A
- jump BattleScript_1D83D6
+ jump BattleScript_ButItFailed
BattleScript_1D7D1A: @ 81D7D1A
attackanimation
@@ -1553,7 +1553,7 @@ MoveEffect_Curse: @ 81D7D3B
ppreduce
jumpifstat USER, 2, 3, 0, BattleScript_1D7D60
jumpifstat USER, 1, 1, 12, BattleScript_1D7D60
- jumpifstat USER, 0, 2, 12, BattleScript_1D83D6
+ jumpifstat USER, 0, 2, 12, BattleScript_ButItFailed
BattleScript_1D7D60: @ 81D7D60
copyarray 0x2024c08, 0x2024c07, 1
@@ -1588,8 +1588,8 @@ BattleScript_1D7DC4: @ 81D7DC4
attackcanceler
attackstring
ppreduce
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
- cursetarget BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
+ cursetarget BattleScript_ButItFailed
orword 0x2024c6c, 0x100
setbyte 0x2016002, 0
attackanimation
@@ -1640,7 +1640,7 @@ MoveEffect_PerishSong: @ 81D7E3D
attackcanceler
attackstring
ppreduce
- setperishsong BattleScript_1D83D6
+ setperishsong BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_PerishSong
@@ -1687,7 +1687,7 @@ MoveEffect_Swagger: @ 81D7EA2
accuracycheck BattleScript_1D6F72, 0
attackstring
ppreduce
- jumpifconfusedandattackmaxed 1, BattleScript_1D83D6
+ jumpifconfusedandattackmaxed 1, BattleScript_ButItFailed
attackanimation
waitanimation
setbyte 0x201601e, 33
@@ -1724,8 +1724,8 @@ MoveEffect_Attract: @ 81D7F1F
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 0
- tryinfatuatetarget BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 0
+ tryinfatuatetarget BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_FellLove
@@ -1773,10 +1773,10 @@ MoveEffect_BatonPass: @ 81D7F7C
attackcanceler
attackstring
ppreduce
- jumpifcannotswitch 129, BattleScript_1D83D6
+ jumpifcannotswitch 129, BattleScript_ButItFailed
attackanimation
waitanimation
- openpartyscreen USER, BattleScript_1D83D6
+ openpartyscreen USER, BattleScript_ButItFailed
atke2 USER
waitstateatk
atk51 USER, 2
@@ -1858,7 +1858,7 @@ MoveEffect_BellyDrum: @ 81D8038
attackcanceler
attackstring
ppreduce
- maxattackhalvehp BattleScript_1D83D6
+ maxattackhalvehp BattleScript_ButItFailed
orword 0x2024c6c, 0x100
attackanimation
waitanimation
@@ -1872,7 +1872,7 @@ MoveEffect_PsychUp: @ 81D805A
attackcanceler
attackstring
ppreduce
- copyfoestats BattleScript_1D83D6
+ copyfoestats BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_CopyStatChanges
@@ -1971,7 +1971,7 @@ MoveEffect_FutureSight: @ 81D817D
attackcanceler
attackstring
ppreduce
- setfutureattack BattleScript_1D83D6
+ setfutureattack BattleScript_ButItFailed
attackanimation
waitanimation
printfromtable BattleTextList_4015E2
@@ -2017,9 +2017,9 @@ MoveEffect_Teleport: @ 81D8233
attackcanceler
attackstring
ppreduce
- jumpifhalfword 4, 0x20239f8, 8, BattleScript_1D83D6
+ jumpifhalfword 4, 0x20239f8, 8, BattleScript_ButItFailed
atk76 USER, 2
- jumpifbyte 0, 0x2024d1e, 1, BattleScript_1D83D6
+ jumpifbyte 0, 0x2024d1e, 1, BattleScript_ButItFailed
jumpifbyte 0, 0x2024d1e, 2, BattleScript_1D8839
attackanimation
waitanimation
@@ -2038,7 +2038,7 @@ MoveEffect_BeatUp: @ 81D826E
BattleScript_1D8281: @ 81D8281
atk25
- beatupcalculation BattleScript_1D82C4, BattleScript_1D83D6
+ beatupcalculation BattleScript_1D82C4, BattleScript_ButItFailed
printstring BATTLE_TEXT_PokeAttack
critcalc
jumpifbyte 1, 0x2024c0d, 2, BattleScript_1D829C
@@ -2156,7 +2156,7 @@ BattleScript_1D83D4: @ 81D83D4
BattleScript_1D83D5: @ 81D83D5
ppreduce
-BattleScript_1D83D6:: @ 81D83D6
+BattleScript_ButItFailed:: @ 81D83D6
pause 32
orbyte 0x2024c68, 32
resultmessage
@@ -2243,8 +2243,8 @@ MoveEffect_Torment: @ 81D8495
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 0
- settorment BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 0
+ settorment BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_TormentSubject
@@ -2257,7 +2257,7 @@ MoveEffect_Flatter: @ 81D84B1
accuracycheck BattleScript_1D6F72, 0
attackstring
ppreduce
- jumpifconfusedandattackmaxed 4, BattleScript_1D83D6
+ jumpifconfusedandattackmaxed 4, BattleScript_ButItFailed
attackanimation
waitanimation
setbyte 0x201601e, 20
@@ -2279,12 +2279,12 @@ MoveEffect_WillOWisp: @ 81D850F
attackcanceler
attackstring
ppreduce
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
jumpifstatus TARGET, BRN, BattleScript_1D8575
jumpiftype TARGET, TYPE_FIRE, BattleScript_1D83E8
jumpifability TARGET, ABILITY_WATER_VEIL, BattleScript_1D855B
- jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6
- accuracycheck BattleScript_1D83D6, 0
+ jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, 0
jumpifhalverset TARGET, 32, BattleScript_1D9037
attackanimation
waitanimation
@@ -2309,7 +2309,7 @@ MoveEffect_Memento: @ 81D8583
jumpifbyte 0, 0x2024d24, 1, BattleScript_1D860A
attackstring
ppreduce
- jumpifattackandspecialattackcannotfall BattleScript_1D83D6
+ jumpifattackandspecialattackcannotfall BattleScript_ButItFailed
setuserhptozero
attackanimation
waitanimation
@@ -2415,8 +2415,8 @@ MoveEffect_Taunt: @ 81D86AB
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 0
- settaunt BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 0
+ settaunt BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_TauntFell
@@ -2427,7 +2427,7 @@ MoveEffect_HelpingHand: @ 81D86C7
attackcanceler
attackstring
ppreduce
- sethelpinghand BattleScript_1D83D6
+ sethelpinghand BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_ReadyToHelp
@@ -2438,9 +2438,9 @@ MoveEffect_Trick: @ 81D86DC
attackcanceler
attackstring
ppreduce
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
- accuracycheck BattleScript_1D83D6, 0
- itemswap BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, 0
+ itemswap BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_SwitchedItems
@@ -2453,8 +2453,8 @@ MoveEffect_RolePlay: @ 81D870A
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 65535
- copyability BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 65535
+ copyability BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_CopiedObject
@@ -2465,7 +2465,7 @@ MoveEffect_Wish: @ 81D8726
attackcanceler
attackstring
ppreduce
- atkd4 0, BattleScript_1D83D6
+ atkd4 0, BattleScript_ButItFailed
attackanimation
waitanimation
jump BattleScript_EndTurn
@@ -2484,7 +2484,7 @@ MoveEffect_Ingrain: @ 81D874D
attackcanceler
attackstring
ppreduce
- setroots BattleScript_1D83D6
+ setroots BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_PlantedRoots
@@ -2510,7 +2510,7 @@ MoveEffect_Recycle: @ 81D8782
attackcanceler
attackstring
ppreduce
- recycleitem BattleScript_1D83D6
+ recycleitem BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_FoundOne
@@ -2562,11 +2562,11 @@ MoveEffect_Yawn: @ 81D87EE
ppreduce
jumpifability TARGET, ABILITY_VITAL_SPIRIT, BattleScript_1D882F
jumpifability TARGET, ABILITY_INSOMNIA, BattleScript_1D882F
- jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6
+ jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed
jumpifhalverset TARGET, 32, BattleScript_1D9037
- accuracycheck BattleScript_1D83D6, 65535
- jumpifcannotsleep BattleScript_1D83D6
- setyawn BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 65535
+ jumpifcannotsleep BattleScript_ButItFailed
+ setyawn BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_DrowsyMade
@@ -2590,7 +2590,7 @@ MoveEffect_Endeavor: @ 81D8852
attackcanceler
attackstring
ppreduce
- setdamagetohealthdifference BattleScript_1D83D6
+ setdamagetohealthdifference BattleScript_ButItFailed
copyarray 0x2024bf0, 0x2024bec, 4
accuracycheck BattleScript_1D6F77, 0
atk6
@@ -2608,8 +2608,8 @@ MoveEffect_SkillSwap: @ 81D8893
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_1D83D6, 65535
- abilityswap BattleScript_1D83D6
+ accuracycheck BattleScript_ButItFailed, 65535
+ abilityswap BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_AbilitySwap
@@ -2620,7 +2620,7 @@ MoveEffect_Imprison: @ 81D88AF
attackcanceler
attackstring
ppreduce
- imprisoneffect BattleScript_1D83D6
+ imprisoneffect BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_SealedMove
@@ -2631,7 +2631,7 @@ MoveEffect_Refresh: @ 81D88C4
attackcanceler
attackstring
ppreduce
- cureifburnedparalysedorpoisoned BattleScript_1D83D6
+ cureifburnedparalysedorpoisoned BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_StatusNormal
@@ -2643,7 +2643,7 @@ MoveEffect_Grudge: @ 81D88DB
attackcanceler
attackstring
ppreduce
- setgrudge BattleScript_1D83D6
+ setgrudge BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_GrudgeBear
@@ -2740,7 +2740,7 @@ MoveEffect_WaterSport: @ 81D89D7
attackcanceler
attackstring
ppreduce
- settypebasedhalvers BattleScript_1D83D6
+ settypebasedhalvers BattleScript_ButItFailed
attackanimation
waitanimation
printfromtable BattleTextList_4015D4
@@ -2767,7 +2767,7 @@ MoveEffect_Tickle: @ 81D8A0A
jumpifstat TARGET, 0, 2, 0, BattleScript_1D8A7D
BattleScript_1D8A1F: @ 81D8A1F
- accuracycheck BattleScript_1D83D6, 0
+ accuracycheck BattleScript_ButItFailed, 0
attackanimation
waitanimation
setbyte 0x20160dc, 0
@@ -2924,7 +2924,7 @@ MoveEffect_Camouflage: @ 81D8C43
attackcanceler
attackstring
ppreduce
- settypetoterrain BattleScript_1D83D6
+ settypetoterrain BattleScript_ButItFailed
attackanimation
waitanimation
printstring BATTLE_TEXT_TypeTransform
@@ -3364,7 +3364,7 @@ gUnknown_081D90B2:: @ 81D90B2
gUnknown_081D90F1:: @ 81D90F1
printstring BATTLE_TEXT_UnleashedEnergy
waitmessage 64
- jump BattleScript_1D83D6
+ jump BattleScript_ButItFailed
gUnknown_081D90FC:: @ 81D90FC
attackanimation
@@ -3385,7 +3385,7 @@ BattleScript_1D9116: @ 81D9116
atk52 TARGET
jump BattleScript_EndTurn
-gUnknown_081D9128:: @ 81D9128
+BattleScript_MistProtected:: @ 81D9128
pause 32
printstring BATTLE_TEXT_MistProtect
waitmessage 64
@@ -3531,17 +3531,17 @@ BattleScript_RapidSpinAway:: @ 81D92C0
breakfree
return
-gUnknown_081D92C2:: @ 81D92C2
+BattleScript_WrapFree:: @ 81D92C2
printstring BATTLE_TEXT_GotFreeFrom
waitmessage 64
return
-gUnknown_081D92C9:: @ 81D92C9
+BattleScript_LeechSeedFree:: @ 81D92C9
printstring BATTLE_TEXT_LeechShed
waitmessage 64
return
-gUnknown_081D92D0:: @ 81D92D0
+BattleScript_SpikesFree:: @ 81D92D0
printstring BATTLE_TEXT_SpikesBlownAway
waitmessage 64
return
@@ -4164,7 +4164,7 @@ BattleScript_1D988D: @ 81D988D
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D989B:: @ 81D989B
+BattleScript_AbilityNoStatLoss:: @ 81D989B
pause 32
printstring BATTLE_TEXT_PreventedStatLoss
waitmessage 64
@@ -4188,7 +4188,7 @@ BattleScript_PSNPrevention:: @ 81D98BD
waitmessage 64
return
-gUnknown_081D98C9:: @ 81D98C9
+BattleScript_ObliviousPreventsAttraction:: @ 81D98C9
pause 32
printstring BATTLE_TEXT_PreventedRomance
waitmessage 64
@@ -4214,7 +4214,7 @@ gUnknown_081D98F3:: @ 81D98F3
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D9903:: @ 81D9903
+BattleScript_AbilityNoSpecificStatLoss:: @ 81D9903
pause 32
printstring BATTLE_TEXT_PreventedLoss
waitmessage 64
diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s
index 3f0dc8af1..b10b7f96f 100644
--- a/data/battle_scripts_2.s
+++ b/data/battle_scripts_2.s
@@ -51,7 +51,7 @@ BattleScript_1D9EBC: @ 81D9EBC
atk98 1
pokemoncatchfunction
-gUnknown_081D9EC2:: @ 81D9EC2
+BattleScript_SuccessBallThrow:: @ 81D9EC2
jumpifhalfword 0, gLastUsedItem, 5, BattleScript_1D9ED0
atk60 11
@@ -76,12 +76,12 @@ BattleScript_1D9EF8: @ 81D9EF8
setbyte gBattleOutcome, 7
activesidesomething
-gUnknown_081D9F00:: @ 81D9F00
+BattleScript_WallyBallThrow:: @ 81D9F00
printstring BATTLE_TEXT_BallCaught2
setbyte gBattleOutcome, 7
activesidesomething
-gUnknown_081D9F0A:: @ 81D9F0A
+BattleScript_ShakeBallThrow:: @ 81D9F0A
printfromtable BattleTextList_4015E6
waitmessage 64
jumpifbyte 5, gBattleTypeFlags, 128, BattleScript_1D9F34
@@ -93,7 +93,7 @@ gUnknown_081D9F0A:: @ 81D9F0A
BattleScript_1D9F34: @ 81D9F34
atkf6
-gUnknown_081D9F35:: @ 81D9F35
+BattleScript_TrainerBallBlock:: @ 81D9F35
waitmessage 64
printstring BATTLE_TEXT_BlockBall
waitmessage 64
diff --git a/data/data2.s b/data/data2a.s
index 00ef5c26e..db2158fc7 100644
--- a/data/data2.s
+++ b/data/data2a.s
@@ -1027,778 +1027,3 @@ gUnknown_081FA724:: @ 81FA724
.2byte 0x140
.2byte 0x130
.2byte 0xFFFF
-
- .align 2
-gBattleScriptingCommandsTable:: @ 81FA73C
- .4byte atk00_attackcanceler
- .4byte atk01_accuracycheck
- .4byte atk02_attackstring
- .4byte atk03_ppreduce
- .4byte atk04_critcalc
- .4byte atk05_damagecalc1
- .4byte atk06_typecalc
- .4byte atk07_dmg_adjustment
- .4byte atk08_dmg_adjustment2
- .4byte atk09_attackanimation
- .4byte atk0A_waitanimation
- .4byte atk0B_healthbarupdate
- .4byte atk0C_datahpupdate
- .4byte atk0D_critmessage
- .4byte atk0E_effectiveness_sound
- .4byte atk0F_resultmessage
- .4byte atk10_printstring
- .4byte atk11_printstring_playeronly
- .4byte atk12_waitmessage
- .4byte atk13_printfromtable
- .4byte atk14_printfromtable_playeronly
- .4byte atk15_seteffectwithchancetarget
- .4byte atk16_seteffectprimary
- .4byte atk17_seteffectsecondary
- .4byte atk18_status_effect_clear
- .4byte atk19_faint_pokemon
- .4byte atk1A_faint_animation
- .4byte atk1B_faint_effects_clear
- .4byte atk1C_jumpifstatus
- .4byte atk1D_jumpifstatus2
- .4byte atk1E_jumpifability
- .4byte atk1F_jumpifsideaffecting
- .4byte atk20_jumpifstat
- .4byte atk21_jumpifstatus3
- .4byte atk22_jumpiftype
- .4byte atk23_getexp
- .4byte atk24
- .4byte atk25_move_values_cleanup
- .4byte atk26_set_multihit
- .4byte atk27_decrement_multihit
- .4byte atk28_goto
- .4byte atk29_jumpifbyte
- .4byte atk2A_jumpifhalfword
- .4byte atk2B_jumpifword
- .4byte atk2C_jumpifarrayequal
- .4byte atk2D_jumpifarraynotequal
- .4byte atk2E_setbyte
- .4byte atk2F_addbyte
- .4byte atk30_subbyte
- .4byte atk31_copyarray
- .4byte atk32_copyarray_withindex
- .4byte atk33_orbyte
- .4byte atk34_orhalfword
- .4byte atk35_orword
- .4byte atk36_bicbyte
- .4byte atk37_bichalfword
- .4byte atk38_bicword
- .4byte atk39_pause
- .4byte atk3A_waitstate
- .4byte atk3B_healthbar_update
- .4byte atk3C_return
- .4byte atk3D_end
- .4byte atk3E_end2
- .4byte atk3F_end3
- .4byte atk40_jump_if_move_affected_by_protect
- .4byte atk41_call
- .4byte atk42_jumpiftype2
- .4byte atk43_jumpifabilitypresent
- .4byte atk44
- .4byte atk45_playanimation
- .4byte atk46_playanimation2
- .4byte atk47_setgraphicalstatchangevalues_setgraphicalstatchangevalues_setgraphicalstatchangevalues
- .4byte atk48_playstatchangeanimation
- .4byte sub_80217F8
- .4byte atk4A_damageflags
- .4byte atk4B_cmd4b
- .4byte atk4C_switch1
- .4byte sub_80225F0
- .4byte sub_8022784
- .4byte sub_8022830
- .4byte atk50_openpartyscreen
- .4byte sub_802331C
- .4byte sub_8023524
- .4byte sub_80237CC
- .4byte atk54_802511C
- .4byte sub_8023848
- .4byte atk56_8025194
- .4byte atk57_80251C4_flee
- .4byte atk58_cmd58
- .4byte atk59_8025230
- .4byte sub_8023AF8
- .4byte atk5B_80256E0
- .4byte atk5C_cmd5c
- .4byte sub_8024014
- .4byte atk5E_8025A70
- .4byte atk5F_8025B24
- .4byte atk60_cmd60
- .4byte atk61_8025BA4
- .4byte atk62_08025C6C
- .4byte atk63_jumptoattack
- .4byte atk64_statusanimation
- .4byte atk65_8025D90
- .4byte atk66_8025E38
- .4byte atk67_8025ECC
- .4byte sub_80246A0
- .4byte atk69_8025FE0
- .4byte atk6A_stash_item_for_side
- .4byte sub_80248C0
- .4byte sub_80248FC
- .4byte sub_8024C4C
- .4byte atk6E_state0_side_becomes_attacker
- .4byte atk6F_8026810
- .4byte atk70_record_ability_usage_of_side
- .4byte atk71_80268A0
- .4byte atk72_flee
- .4byte atk73_cmd73
- .4byte atk74_hp_tresholds_2
- .4byte atk75_8026A58
- .4byte sub_8024F40
- .4byte atk77_setprotect
- .4byte atk78_faintifabilitynotdamp
- .4byte atk79_setuserhptozero
- .4byte sub_80253E8
- .4byte sub_802548C
- .4byte sub_8025508
- .4byte sub_80256D0
- .4byte atk7E_setreflect
- .4byte sub_80257DC
- .4byte atk80_manipulatedamage
- .4byte atk81_setrest
- .4byte atk82_jumpifnotfirstturn
- .4byte sub_8025A34
- .4byte sub_8025AE0
- .4byte sub_8025B5C
- .4byte atk86_stockpiletobasedamage
- .4byte sub_8025D00
- .4byte atk88_negativedamage
- .4byte atk89_statbuffchange
- .4byte atk8A_normalisebuffs
- .4byte atk8B_setbide
- .4byte atk8C_confuseifrepeatingattackends
- .4byte atk8D_setloopcounter
- .4byte sub_8026468
- .4byte sub_8026590
- .4byte sub_802688C
- .4byte atk91_givemoney
- .4byte atk92_setlightscreen
- .4byte sub_8026B78
- .4byte atk94_gethalfcurrentenemyhp
- .4byte sub_8026E94
- .4byte sub_8026EEC
- .4byte sub_8027064
- .4byte sub_8027238
- .4byte sub_8027348
- .4byte atk9A_setincreasedcriticalchance
- .4byte atk9B_transformdataexecution
- .4byte sub_80275D8
- .4byte atk9D_copyattack
- .4byte sub_80278B8
- .4byte sub_8027960
- .4byte atkA0_psywavedamageeffect
- .4byte atkA1_counterdamagecalculator
- .4byte atkA2_mirrorcoatdamagecalculator
- .4byte atkA3_disablelastusedattack
- .4byte atkA4_setencore
- .4byte sub_8027E4C
- .4byte sub_8027F44
- .4byte atkA7_setalwayshitflag
- .4byte atkA8_copymovepermanently
- .4byte sub_8028420
- .4byte sub_8028558
- .4byte atkAB_802A458
- .4byte atkAC_remaininghptopower
- .4byte sub_8028668
- .4byte sub_8028858
- .4byte sub_8028AD4
- .4byte sub_8028B70
- .4byte sub_8028BFC
- .4byte atkB2_setperishsong
- .4byte atkB3_rolloutdamagecalculation
- .4byte atkB4_jumpifconfusedandattackmaxed
- .4byte sub_8028EC8
- .4byte atkB6_happinesstodamagecalculation
- .4byte atkB7_presentdamagecalculation
- .4byte sub_80290BC
- .4byte atkB9_magnitudedamagecalculation
- .4byte sub_8029270
- .4byte sub_80293E8
- .4byte atkBC_maxattackhalvehp
- .4byte atkBD_copyfoestats
- .4byte atkBE_breakfree
- .4byte sub_802964C
- .4byte atkC0_recoverbasedonsunlight
- .4byte sub_8029784
- .4byte atkC2_selectnexttarget
- .4byte atkC3_setfutureattack
- .4byte atkC4_802B910
- .4byte atkC5_hidepreattack
- .4byte atkC6_unhidepostattack
- .4byte atkC7_setminimize
- .4byte sub_8029DAC
- .4byte atkC9_jumpifattackandspecialattackcannotfall
- .4byte atkCA_setforcedtarget
- .4byte atkCB_setcharge
- .4byte atkCC_callterrainattack
- .4byte atkCD_cureifburnedparalysedorpoisoned
- .4byte atkCE_settorment
- .4byte atkCF_jumpifnodamage
- .4byte atkD0_settaunt
- .4byte sub_802A170
- .4byte sub_802A218
- .4byte sub_802A4B0
- .4byte atkD4_802C408
- .4byte sub_802A5FC
- .4byte atkD6_doubledamagedealtifdamaged
- .4byte sub_802A6BC
- .4byte atkD8_setdamagetohealthdifference
- .4byte atkD9_scaledamagebyhealthratio
- .4byte atkDA_abilityswap
- .4byte atkDB_imprisoneffect
- .4byte atkDC_setgrudge
- .4byte atkDD_weightdamagecalculation
- .4byte atkDE_asistattackselect
- .4byte atkDF_setmagiccoat
- .4byte atkE0_setstealstatchange
- .4byte atkE1_802CBE4
- .4byte sub_802ADD8
- .4byte atkE3_jumpiffainted
- .4byte sub_802AEB0
- .4byte sub_802AF68
- .4byte atkE6_castform_transform
- .4byte atkE7_castform_switch
- .4byte atkE8_settypebasedhalvers
- .4byte sub_802B1C0
- .4byte atkEA_recycleitem
- .4byte atkEB_settypetoterrain
- .4byte sub_802B3E0
- .4byte sub_802B4B4
- .4byte sub_802B51C
- .4byte sub_802B5B8
- .4byte sub_802B960
- .4byte sub_802B9E0
- .4byte sub_802BA90
- .4byte atkF3_receive_new_pokemon_maybe
- .4byte sub_802BEF0
- .4byte sub_802BF20
- .4byte sub_802BF48
- .4byte sub_802BF54
-
- .align 2
-gAccuracyStageRatios:: @ 81FAB1C
- .byte 33, 100, 0, 0 @ -6
- .byte 36, 100, 0, 0 @ -5
- .byte 43, 100, 0, 0 @ -4
- .byte 50, 100, 0, 0 @ -3
- .byte 60, 100, 0, 0 @ -2
- .byte 75, 100, 0, 0 @ -1
- .byte 1, 1, 0, 0 @ 0
- .byte 133, 100, 0, 0 @ +1
- .byte 166, 100, 0, 0 @ +2
- .byte 2, 1, 0, 0 @ +3
- .byte 233, 100, 0, 0 @ +4
- .byte 133, 50, 0, 0 @ +5
- .byte 3, 1, 0, 0 @ +6
-
-@ The chance is 1/N for each stage.
- .align 1
-gCriticalHitChance:: @ 81FAB50
- .2byte 16 @ +0
- .2byte 8 @ +1
- .2byte 4 @ +2
- .2byte 3 @ +3
- .2byte 2 @ +4
-
- .align 2
-gStatusFlagsForMoveEffects:: @ 81FAB5C
- .4byte 0x00000000
- .4byte 0x00000007
- .4byte 0x00000008
- .4byte 0x00000010
- .4byte 0x00000020
- .4byte 0x00000040
- .4byte 0x00000080
- .4byte 0x00000007
- .4byte 0x00000008
- .4byte 0x00000000
- .4byte 0x00000070
- .4byte 0x00000000
- .4byte 0x00001000
- .4byte 0x0000E000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00400000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x04000000
- .4byte 0x08000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000C00
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
- .4byte 0x00000000
-
- .align 2
-gMoveEffectBS_Ptrs:: @ 81FAC4C
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D965A
- .4byte BattleScript_1D9669
- .4byte BattleScript_1D9678
- .4byte BattleScript_1D9687
- .4byte BattleScript_1D969D
- .4byte BattleScript_1D96BA
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D9696
- .4byte BattleScript_1D96AA
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D96B1
- .4byte BattleScript_1D96C8
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D963E
- .4byte BattleScript_1D96C8
-
-@ unreferenced bit masks
- .byte 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F
-
-gLevelUpStatBoxStats:: @ 81FACEF
- .byte 0x3A @ HP
- .byte 0x3E @ Sp. Attack
- .byte 0x3B @ Attack
- .byte 0x3F @ Sp. Defense
- .byte 0x3C @ Defense
- .byte 0x3D @ Speed
-
- .align 1
-gProtectSuccessRates:: @ 81FACF6
- .2byte 0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF
-
- .align 1
-gUnknown_081FACFE:: @ 81FACFE
- .2byte MOVE_METRONOME
- .2byte MOVE_STRUGGLE
- .2byte MOVE_SKETCH
- .2byte MOVE_MIMIC
- .2byte 0xFFFE
- .2byte MOVE_COUNTER
- .2byte MOVE_MIRROR_COAT
- .2byte MOVE_PROTECT
- .2byte MOVE_DETECT
- .2byte MOVE_ENDURE
- .2byte MOVE_DESTINY_BOND
- .2byte MOVE_SLEEP_TALK
- .2byte MOVE_THIEF
- .2byte MOVE_FOLLOW_ME
- .2byte MOVE_SNATCH
- .2byte MOVE_HELPING_HAND
- .2byte MOVE_COVET
- .2byte MOVE_TRICK
- .2byte MOVE_FOCUS_PUNCH
- .2byte 0xFFFF
-
-gUnknown_081FAD26:: @ 81FAD26
- .byte 1, 200
- .byte 4, 150
- .byte 9, 100
- .byte 16, 80
- .byte 32, 40
- .byte 48, 20
-
- .align 1
-gNaturePowerMoves:: @ 81FAD32
- .2byte MOVE_STUN_SPORE
- .2byte MOVE_RAZOR_LEAF
- .2byte MOVE_EARTHQUAKE
- .2byte MOVE_HYDRO_PUMP
- .2byte MOVE_SURF
- .2byte MOVE_BUBBLE_BEAM
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_SHADOW_BALL
- .2byte MOVE_SWIFT
- .2byte MOVE_SWIFT
-
-@ weight-based damage table for Low Kick
-@ format: min. weight (hectograms), base power
-
- .align 1
-gWeightDamage:: @ 81FAD46
- .2byte 100, 20
- .2byte 250, 40
- .2byte 500, 60
- .2byte 1000, 80
- .2byte 2000, 100
- .2byte -1, -1
-
- .align 1
-gPickupItems:: @ 81FAD5E
- .2byte ITEM_SUPER_POTION, 30
- .2byte ITEM_FULL_HEAL, 40
- .2byte ITEM_ULTRA_BALL, 50
- .2byte ITEM_RARE_CANDY, 60
- .2byte ITEM_FULL_RESTORE, 70
- .2byte ITEM_REVIVE, 80
- .2byte ITEM_NUGGET, 90
- .2byte ITEM_PROTEIN, 95
- .2byte ITEM_PP_UP, 99
- .2byte ITEM_KINGS_ROCK, 1
-
-gTerrainToType:: @ 81FAD86
- .byte TYPE_GRASS @ tall grass
- .byte TYPE_GRASS @ long grass
- .byte TYPE_GROUND @ sand
- .byte TYPE_WATER @ underwater
- .byte TYPE_WATER @ water
- .byte TYPE_WATER @ pond water
- .byte TYPE_ROCK @ rock
- .byte TYPE_ROCK @ cave
- .byte TYPE_NORMAL @ building
- .byte TYPE_NORMAL @ plain
-
-gBallCatchBonuses:: @ 81FAD90
- .byte 20 @ Ultra Ball
- .byte 15 @ Great Ball
- .byte 10 @ Poké Ball
- .byte 15 @ Safari Ball
-
- .string "ターン$" @ "turn"
-
- .align 2
-gPlayerBufferCommands:: @ 81FAD98
- .4byte PlayerHandleGetAttributes
- .4byte sub_802ECF0
- .4byte PlayerHandleSetAttributes
- .4byte sub_802F7CC
- .4byte PlayerHandleLoadPokeSprite
- .4byte PlayerHandleSendOutPoke
- .4byte PlayerHandleReturnPokeToBall
- .4byte PlayerHandleTrainerThrow
- .4byte PlayerHandleTrainerSlide
- .4byte PlayerHandleTrainerSlideBack
- .4byte sub_802FE7C
- .4byte sub_802FF60
- .4byte sub_802FF80
- .4byte PlayerHandleBallThrow
- .4byte PlayerHandlePuase
- .4byte PlayerHandleMoveAnimation
- .4byte PlayerHandlePrintString
- .4byte PlayerHandlePrintStringPlayerOnly
- .4byte sub_803037C
- .4byte nullsub_42
- .4byte sub_8030468
- .4byte PlayerHandleOpenBag
- .4byte sub_8030594
- .4byte sub_8030674
- .4byte PlayerHandleHealthBarUpdate
- .4byte PlayerHandleExpBarUpdate
- .4byte PlayerHandleStatusIconUpdate
- .4byte PlayerHandleStatusAnimation
- .4byte PlayerHandleStatusXor
- .4byte sub_803097C
- .4byte PlayerHandleDMATransfer
- .4byte sub_8030A3C
- .4byte sub_8030A6C
- .4byte sub_8030A78
- .4byte sub_8030A8C
- .4byte sub_8030AA0
- .4byte sub_8030AB4
- .4byte sub_8030AC8
- .4byte sub_8030AE4
- .4byte sub_8030B1C
- .4byte sub_8030B34
- .4byte PlayerHandleHitAnimation
- .4byte sub_8030BCC
- .4byte PlayerHandleEffectivenessSound
- .4byte sub_8030C1C
- .4byte PlayerHandleFaintingCry
- .4byte PlayerHandleIntroSlide
- .4byte PlayerHandleTrainerBallThrow
- .4byte sub_8030FAC
- .4byte sub_80310A4
- .4byte sub_80310F0
- .4byte PlayerHandleSpriteInvisibility
- .4byte PlayerHandleBattleAnimation
- .4byte PlayerHandleLinkStandbyMsg
- .4byte PlayerHandleResetActionMoveSelection
- .4byte sub_80312A0
- .4byte nullsub_43
-
-gUnknown_081FAE7C:: @ 81FAE7C
- .byte 0, 2, 3, 1
-
-gUnknown_081FAE80:: @ 81FAE80
- .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}$"
-
-gUnknown_081FAE89:: @ 81FAE89
- .byte 8, 120
- .byte 88, 120
- .byte 8, 136
- .byte 88, 136
-
-gUnknown_081FAE91:: @ 81FAE91
- .byte 144, 120
- .byte 190, 120
- .byte 144, 136
- .byte 190, 136
- .byte 72, 72
- .byte 32, 90
- .byte 80, 80
- .byte 80, 88
-
- .align 2
-gUnknown_081FAEA4:: @ 81FAEA4
- obj_tiles gSmokescreenImpactTiles, 0x180, 55019
-
- .align 2
-gUnknown_081FAEAC:: @ 81FAEAC
- obj_pal gSmokescreenImpactPalette, 55019
-
- .align 2
-gOamData_81FAEB4:: @ 81FAEB4
- .2byte 0x0000
- .2byte 0x4000
- .2byte 0x0400
-
- .align 2
-gSpriteAnim_81FAEBC:: @ 81FAEBC
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 4, 4
- obj_image_anim_frame 8, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_81FAECC:: @ 81FAECC
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_81FAEDC:: @ 81FAEDC
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_81FAEEC:: @ 81FAEEC
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_81FAEFC:: @ 81FAEFC
- .4byte gSpriteAnim_81FAEBC
- .4byte gSpriteAnim_81FAECC
- .4byte gSpriteAnim_81FAEDC
- .4byte gSpriteAnim_81FAEEC
-
- .align 2
-gSpriteTemplate_81FAF0C:: @ 81FAF0C
- spr_template 55019, 55019, gOamData_81FAEB4, gSpriteAnimTable_81FAEFC, NULL, gDummySpriteAffineAnimTable, sub_80463CC
-
- .align 2
-gUnknown_081FAF24:: @ 81FAF24
- obj_tiles gEnemyMonShadow_Gfx, 128, 0xD759
-
- .align 2
-gOamData_81FAF2C:: @ 81FAF2C
- .2byte 0x4000
- .2byte 0x4000
- .2byte 0x0C00
-
- .align 2
-gSpriteTemplate_81FAF34:: @ 81FAF34
- spr_template 55129, 55039, gOamData_81FAF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8032978
-
- .align 2
-gUnknown_081FAF4C:: @ 81FAF4C
- .4byte 0x02008000
- .4byte 0x0200a000
- .4byte 0x0200c000
- .4byte 0x0200e000
-
- .align 2
-gOpponentBufferCommands:: @ 81FAF5C
- .4byte OpponentHandleGetAttributes
- .4byte dp01t_01_2_read_pokmon_data_slice
- .4byte OpponentHandleSetAttributes
- .4byte sub_8034744
- .4byte OpponentHandleLoadPokeSprite
- .4byte OpponentHandleSendOutPoke
- .4byte OpponentHandleReturnPokeToBall
- .4byte OpponentHandleTrainerThrow
- .4byte OpponentHandleTrainerSlide
- .4byte OpponentHandleTrainerSlideBack
- .4byte sub_8035030
- .4byte sub_80350D4
- .4byte sub_80350E0
- .4byte OpponentHandleBallThrow
- .4byte OpponentHandlePause
- .4byte OpponentHandleMoveAnimation
- .4byte OpponentHandlePrintString
- .4byte OpponentHandlePrintStringPlayerOnly
- .4byte sub_803540C
- .4byte sub_803541C
- .4byte sub_8035428
- .4byte sub_8035590
- .4byte sub_80355C0
- .4byte sub_80356C0
- .4byte OpponentHandleHealthBarUpdate
- .4byte OpponentHandleExpBarUpdate
- .4byte OpponentHandleStatusIconUpdate
- .4byte OpponentHandleStatusAnimation
- .4byte OpponentHandleStatusXor
- .4byte sub_80358B0
- .4byte OpponentHandleDMATransfer
- .4byte sub_80358C8
- .4byte sub_80358D4
- .4byte sub_80358E0
- .4byte sub_80358EC
- .4byte sub_80358F8
- .4byte sub_8035904
- .4byte sub_8035910
- .4byte sub_803592C
- .4byte sub_8035964
- .4byte sub_803597C
- .4byte OpponentHandleHitAnimation
- .4byte sub_8035A14
- .4byte OpponentHandleEffectivenessSound
- .4byte sub_8035A64
- .4byte OpponentHandleFaintingCry
- .4byte dp01t_2E_7_battle_intro
- .4byte sub_8035B04
- .4byte dp01t_30_7_0803D67C
- .4byte sub_8035E6C
- .4byte sub_8035EB8
- .4byte OpponentHandleSpriteInvisibility
- .4byte OpponentHandleBattleAnimation
- .4byte OpponentHandleLinkStandbyMsg
- .4byte OpponentHandleResetActionMoveSelection
- .4byte sub_8035FA4
- .4byte nullsub_46
-
-@ unreferenced unknown values
- .byte 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20
-
- .align 2
-gLinkOpponentBufferCommands:: @ 81FB048
- .4byte LinkOpponentHandleGetAttributes
- .4byte sub_803889C
- .4byte sub_80388A8
- .4byte sub_8039220
- .4byte sub_8039294
- .4byte sub_80393E4
- .4byte sub_80395B4
- .4byte sub_80396D0
- .4byte sub_80398A4
- .4byte sub_80398B0
- .4byte sub_803995C
- .4byte sub_8039A00
- .4byte sub_8039A0C
- .4byte sub_8039A18
- .4byte sub_8039A24
- .4byte sub_8039A30
- .4byte sub_8039CC8
- .4byte sub_8039D2C
- .4byte sub_8039D38
- .4byte sub_8039D44
- .4byte sub_8039D50
- .4byte sub_8039D5C
- .4byte sub_8039D68
- .4byte sub_8039D74
- .4byte sub_8039D80
- .4byte sub_8039E70
- .4byte sub_8039E7C
- .4byte sub_8039EF0
- .4byte sub_8039F58
- .4byte sub_8039F64
- .4byte sub_8039F70
- .4byte sub_8039F7C
- .4byte sub_8039F88
- .4byte sub_8039F94
- .4byte sub_8039FA0
- .4byte sub_8039FAC
- .4byte sub_8039FB8
- .4byte sub_8039FC4
- .4byte sub_8039FE0
- .4byte sub_803A018
- .4byte sub_803A030
- .4byte dp01t_29_4_blink
- .4byte sub_803A0C8
- .4byte sub_803A0D4
- .4byte sub_803A118
- .4byte sub_803A148
- .4byte dp01t_2E_4_battle_intro
- .4byte sub_803A1B8
- .4byte sub_803A3DC
- .4byte sub_803A520
- .4byte sub_803A56C
- .4byte sub_803A578
- .4byte bx_exec_buffer_A_ch0_tbl4
- .4byte sub_803A640
- .4byte sub_803A64C
- .4byte sub_803A658
- .4byte nullsub_48
-
-@ 81FB12C
- .include "data/battle_moves.inc"
-
- .align 2
-gUnknown_081FC1D0:: @ 81FC1D0
- .2byte 0x34, 0x10, 0x101
- .space 2
-
- .2byte -1, -1, -1
- .space 2
diff --git a/data/data2b.s b/data/data2b.s
new file mode 100644
index 000000000..ef16eaa25
--- /dev/null
+++ b/data/data2b.s
@@ -0,0 +1,296 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+ .string "ターン$" @ "turn"
+
+ .align 2
+gPlayerBufferCommands:: @ 81FAD98
+ .4byte PlayerHandleGetAttributes
+ .4byte sub_802ECF0
+ .4byte PlayerHandleSetAttributes
+ .4byte sub_802F7CC
+ .4byte PlayerHandleLoadPokeSprite
+ .4byte PlayerHandleSendOutPoke
+ .4byte PlayerHandleReturnPokeToBall
+ .4byte PlayerHandleTrainerThrow
+ .4byte PlayerHandleTrainerSlide
+ .4byte PlayerHandleTrainerSlideBack
+ .4byte sub_802FE7C
+ .4byte sub_802FF60
+ .4byte sub_802FF80
+ .4byte PlayerHandleBallThrow
+ .4byte PlayerHandlePuase
+ .4byte PlayerHandleMoveAnimation
+ .4byte PlayerHandlePrintString
+ .4byte PlayerHandlePrintStringPlayerOnly
+ .4byte sub_803037C
+ .4byte nullsub_42
+ .4byte sub_8030468
+ .4byte PlayerHandleOpenBag
+ .4byte sub_8030594
+ .4byte sub_8030674
+ .4byte PlayerHandleHealthBarUpdate
+ .4byte PlayerHandleExpBarUpdate
+ .4byte PlayerHandleStatusIconUpdate
+ .4byte PlayerHandleStatusAnimation
+ .4byte PlayerHandleStatusXor
+ .4byte sub_803097C
+ .4byte PlayerHandleDMATransfer
+ .4byte sub_8030A3C
+ .4byte sub_8030A6C
+ .4byte sub_8030A78
+ .4byte sub_8030A8C
+ .4byte sub_8030AA0
+ .4byte sub_8030AB4
+ .4byte sub_8030AC8
+ .4byte sub_8030AE4
+ .4byte sub_8030B1C
+ .4byte sub_8030B34
+ .4byte PlayerHandleHitAnimation
+ .4byte sub_8030BCC
+ .4byte PlayerHandleEffectivenessSound
+ .4byte sub_8030C1C
+ .4byte PlayerHandleFaintingCry
+ .4byte PlayerHandleIntroSlide
+ .4byte PlayerHandleTrainerBallThrow
+ .4byte sub_8030FAC
+ .4byte sub_80310A4
+ .4byte sub_80310F0
+ .4byte PlayerHandleSpriteInvisibility
+ .4byte PlayerHandleBattleAnimation
+ .4byte PlayerHandleLinkStandbyMsg
+ .4byte PlayerHandleResetActionMoveSelection
+ .4byte sub_80312A0
+ .4byte nullsub_43
+
+gUnknown_081FAE7C:: @ 81FAE7C
+ .byte 0, 2, 3, 1
+
+gUnknown_081FAE80:: @ 81FAE80
+ .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}$"
+
+gUnknown_081FAE89:: @ 81FAE89
+ .byte 8, 120
+ .byte 88, 120
+ .byte 8, 136
+ .byte 88, 136
+
+gUnknown_081FAE91:: @ 81FAE91
+ .byte 144, 120
+ .byte 190, 120
+ .byte 144, 136
+ .byte 190, 136
+ .byte 72, 72
+ .byte 32, 90
+ .byte 80, 80
+ .byte 80, 88
+
+ .align 2
+gUnknown_081FAEA4:: @ 81FAEA4
+ obj_tiles gSmokescreenImpactTiles, 0x180, 55019
+
+ .align 2
+gUnknown_081FAEAC:: @ 81FAEAC
+ obj_pal gSmokescreenImpactPalette, 55019
+
+ .align 2
+gOamData_81FAEB4:: @ 81FAEB4
+ .2byte 0x0000
+ .2byte 0x4000
+ .2byte 0x0400
+
+ .align 2
+gSpriteAnim_81FAEBC:: @ 81FAEBC
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 4, 4
+ obj_image_anim_frame 8, 4
+ obj_image_anim_end
+
+ .align 2
+gSpriteAnim_81FAECC:: @ 81FAECC
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+ .align 2
+gSpriteAnim_81FAEDC:: @ 81FAEDC
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+ .align 2
+gSpriteAnim_81FAEEC:: @ 81FAEEC
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+ .align 2
+gSpriteAnimTable_81FAEFC:: @ 81FAEFC
+ .4byte gSpriteAnim_81FAEBC
+ .4byte gSpriteAnim_81FAECC
+ .4byte gSpriteAnim_81FAEDC
+ .4byte gSpriteAnim_81FAEEC
+
+ .align 2
+gSpriteTemplate_81FAF0C:: @ 81FAF0C
+ spr_template 55019, 55019, gOamData_81FAEB4, gSpriteAnimTable_81FAEFC, NULL, gDummySpriteAffineAnimTable, sub_80463CC
+
+ .align 2
+gUnknown_081FAF24:: @ 81FAF24
+ obj_tiles gEnemyMonShadow_Gfx, 128, 0xD759
+
+ .align 2
+gOamData_81FAF2C:: @ 81FAF2C
+ .2byte 0x4000
+ .2byte 0x4000
+ .2byte 0x0C00
+
+ .align 2
+gSpriteTemplate_81FAF34:: @ 81FAF34
+ spr_template 55129, 55039, gOamData_81FAF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8032978
+
+ .align 2
+gUnknown_081FAF4C:: @ 81FAF4C
+ .4byte 0x02008000
+ .4byte 0x0200a000
+ .4byte 0x0200c000
+ .4byte 0x0200e000
+
+ .align 2
+gOpponentBufferCommands:: @ 81FAF5C
+ .4byte OpponentHandleGetAttributes
+ .4byte dp01t_01_2_read_pokmon_data_slice
+ .4byte OpponentHandleSetAttributes
+ .4byte sub_8034744
+ .4byte OpponentHandleLoadPokeSprite
+ .4byte OpponentHandleSendOutPoke
+ .4byte OpponentHandleReturnPokeToBall
+ .4byte OpponentHandleTrainerThrow
+ .4byte OpponentHandleTrainerSlide
+ .4byte OpponentHandleTrainerSlideBack
+ .4byte sub_8035030
+ .4byte sub_80350D4
+ .4byte sub_80350E0
+ .4byte OpponentHandleBallThrow
+ .4byte OpponentHandlePause
+ .4byte OpponentHandleMoveAnimation
+ .4byte OpponentHandlePrintString
+ .4byte OpponentHandlePrintStringPlayerOnly
+ .4byte sub_803540C
+ .4byte sub_803541C
+ .4byte sub_8035428
+ .4byte sub_8035590
+ .4byte sub_80355C0
+ .4byte sub_80356C0
+ .4byte OpponentHandleHealthBarUpdate
+ .4byte OpponentHandleExpBarUpdate
+ .4byte OpponentHandleStatusIconUpdate
+ .4byte OpponentHandleStatusAnimation
+ .4byte OpponentHandleStatusXor
+ .4byte sub_80358B0
+ .4byte OpponentHandleDMATransfer
+ .4byte sub_80358C8
+ .4byte sub_80358D4
+ .4byte sub_80358E0
+ .4byte sub_80358EC
+ .4byte sub_80358F8
+ .4byte sub_8035904
+ .4byte sub_8035910
+ .4byte sub_803592C
+ .4byte sub_8035964
+ .4byte sub_803597C
+ .4byte OpponentHandleHitAnimation
+ .4byte sub_8035A14
+ .4byte OpponentHandleEffectivenessSound
+ .4byte sub_8035A64
+ .4byte OpponentHandleFaintingCry
+ .4byte dp01t_2E_7_battle_intro
+ .4byte sub_8035B04
+ .4byte dp01t_30_7_0803D67C
+ .4byte sub_8035E6C
+ .4byte sub_8035EB8
+ .4byte OpponentHandleSpriteInvisibility
+ .4byte OpponentHandleBattleAnimation
+ .4byte OpponentHandleLinkStandbyMsg
+ .4byte OpponentHandleResetActionMoveSelection
+ .4byte sub_8035FA4
+ .4byte nullsub_46
+
+@ unreferenced unknown values
+ .byte 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20
+
+ .align 2
+gLinkOpponentBufferCommands:: @ 81FB048
+ .4byte LinkOpponentHandleGetAttributes
+ .4byte sub_803889C
+ .4byte sub_80388A8
+ .4byte sub_8039220
+ .4byte sub_8039294
+ .4byte sub_80393E4
+ .4byte sub_80395B4
+ .4byte sub_80396D0
+ .4byte sub_80398A4
+ .4byte sub_80398B0
+ .4byte sub_803995C
+ .4byte sub_8039A00
+ .4byte sub_8039A0C
+ .4byte sub_8039A18
+ .4byte sub_8039A24
+ .4byte sub_8039A30
+ .4byte sub_8039CC8
+ .4byte sub_8039D2C
+ .4byte sub_8039D38
+ .4byte sub_8039D44
+ .4byte sub_8039D50
+ .4byte sub_8039D5C
+ .4byte sub_8039D68
+ .4byte sub_8039D74
+ .4byte sub_8039D80
+ .4byte sub_8039E70
+ .4byte sub_8039E7C
+ .4byte sub_8039EF0
+ .4byte sub_8039F58
+ .4byte sub_8039F64
+ .4byte sub_8039F70
+ .4byte sub_8039F7C
+ .4byte sub_8039F88
+ .4byte sub_8039F94
+ .4byte sub_8039FA0
+ .4byte sub_8039FAC
+ .4byte sub_8039FB8
+ .4byte sub_8039FC4
+ .4byte sub_8039FE0
+ .4byte sub_803A018
+ .4byte sub_803A030
+ .4byte dp01t_29_4_blink
+ .4byte sub_803A0C8
+ .4byte sub_803A0D4
+ .4byte sub_803A118
+ .4byte sub_803A148
+ .4byte dp01t_2E_4_battle_intro
+ .4byte sub_803A1B8
+ .4byte sub_803A3DC
+ .4byte sub_803A520
+ .4byte sub_803A56C
+ .4byte sub_803A578
+ .4byte bx_exec_buffer_A_ch0_tbl4
+ .4byte sub_803A640
+ .4byte sub_803A64C
+ .4byte sub_803A658
+ .4byte nullsub_48
+
+@ 81FB12C
+ .include "data/battle_moves.inc"
+
+ .align 2
+gUnknown_081FC1D0:: @ 81FC1D0
+ .2byte 0x34, 0x10, 0x101
+ .space 2
+
+ .2byte -1, -1, -1
+ .space 2
diff --git a/include/battle.h b/include/battle.h
index d4cb53689..fb5077f6a 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -28,64 +28,83 @@
#define AI_ACTION_UNK7 0x0040
#define AI_ACTION_UNK8 0x0080
-#define STATUS_SLEEP 0x7
-#define STATUS_POISON 0x8
-#define STATUS_BURN 0x10
-#define STATUS_FREEZE 0x20
-#define STATUS_PARALYSIS 0x40
-#define STATUS_TOXIC_POISON 0x80
+#define STATUS_SLEEP 0x7
+#define STATUS_POISON 0x8
+#define STATUS_BURN 0x10
+#define STATUS_FREEZE 0x20
+#define STATUS_PARALYSIS 0x40
+#define STATUS_TOXIC_POISON 0x80
#define STATUS2_CONFUSION 0x00000007
#define STATUS2_UPROAR 0x00000070
+#define STATUS2_BIDE 0x00000300 //two bits 0x100 0x200
#define STATUS2_LOCK_CONFUSE 0x00000C00
#define STATUS2_MULTIPLETURNS 0x00001000
#define STATUS2_WRAPPED 0x0000E000
+#define STATUS2_INFATUATION 0x000F0000
#define STATUS2_FOCUS_ENERGY 0x00100000
#define STATUS2_TRANSFORMED 0x00200000
#define STATUS2_RECHARGE 0x00400000
#define STATUS2_RAGE 0x00800000
#define STATUS2_SUBSTITUTE 0x01000000
+#define STATUS2_DESTINY_BOND 0x02000000
#define STATUS2_ESCAPE_PREVENTION 0x04000000
#define STATUS2_NIGHTMARE 0x08000000
#define STATUS2_CURSED 0x10000000
#define STATUS2_FORESIGHT 0x20000000
+#define STATUS2_DEFENSE_CURL 0x40000000
+#define STATUS2_TORMENT 0x80000000
-#define STATUS3_LEECHSEED_RECEIVER 0x3 //two bits for the bank that gets hp
+#define STATUS3_LEECHSEED_BANK 0x3
#define STATUS3_LEECHSEED 0x4
#define STATUS3_ALWAYS_HITS 0x18 //two bits
#define STATUS3_PERISH_SONG 0x20
#define STATUS3_ON_AIR 0x40
#define STATUS3_UNDERGROUND 0x80
#define STATUS3_MINIMIZED 0x100
+#define STATUS3_ROOTED 0x400
#define STATUS3_CHARGED_UP 0x200
-#define STATUS3_ROOTED 0x400
+#define STATUS3_YAWN 0x1800 //two bits
+#define STATUS3_IMPRISIONED 0x2000
#define STATUS3_GRUDGE 0x4000
#define STATUS3_CANT_SCORE_A_CRIT 0x8000
#define STATUS3_MUDSPORT 0x10000
#define STATUS3_WATERSPORT 0x20000
#define STATUS3_UNDERWATER 0x40000
-#define HITMARKER_x20 0x0000020
-#define HITMARKER_DESTINYBOND 0x0000040
-#define HITMARKER_NO_ANIMATIONS 0x0000080
-#define HITMARKER_IGNORE_SUBSTITUTE 0x0000100
-#define HITMARKER_NO_ATTACKSTRING 0x0000200
-#define HITMARKER_ATTACKSTRING_PRINTED 0x0000400
-#define HITMARKER_NO_PPDEDUCT 0x0000800
-#define HITMARKER_IGNORE_SAFEGUARD 0x0002000
-#define HITMARKER_SYNCHRONISE_EFFECT 0x0004000
-#define HITMARKER_IGNORE_ON_AIR 0x0010000
-#define HITMARKER_IGNORE_UNDERGROUND 0x0020000
-#define HITMARKER_IGNORE_UNDERWATER 0x0040000
-#define HITMARKER_x80000 0x0080000
-#define HITMARKER_x100000 0x0100000
-#define HITMARKER_x400000 0x0400000
-#define HITMARKER_x800000 0x0800000
-#define HITMARKER_GRUDGE 0x1000000
-#define HITMARKER_OBEYS 0x2000000
+#define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER))
+
+#define HITMARKER_x20 0x00000020
+#define HITMARKER_DESTINYBOND 0x00000040
+#define HITMARKER_NO_ANIMATIONS 0x00000080
+#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
+#define HITMARKER_NO_ATTACKSTRING 0x00000200
+#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
+#define HITMARKER_NO_PPDEDUCT 0x00000800
+#define HITMARKER_PURSUIT_TRAP 0x00001000
+#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
+#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
+#define HITMARKER_IGNORE_ON_AIR 0x00010000
+#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
+#define HITMARKER_IGNORE_UNDERWATER 0x00040000
+#define HITMARKER_x80000 0x00080000
+#define HITMARKER_x100000 0x00100000
+#define HITMARKER_x400000 0x00400000
+#define HITMARKER_x800000 0x00800000
+#define HITMARKER_GRUDGE 0x01000000
+#define HITMARKER_OBEYS 0x02000000
+#define HITMARKER_x8000000 0x08000000
#define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C))
#define HITMARKER_UNK(bank) ((0x10000000 << bank))
+#define SIDE_REFLECT 0x1
+#define SIDE_LIGHTSCREEN 0x2
+#define SIDE_SPIKES 0x10
+#define SIDE_SAFEGUARD 0x20
+#define SIDE_FUTUREATTACK 0x40
+#define SIDE_MIST 0x100
+#define SIDE_SPIKES_DMG_DONE 0x200
+
#define MAX_TRAINER_ITEMS 4
#define MAX_MON_MOVES 4
#define MAX_BANKS_BATTLE 4
@@ -165,31 +184,28 @@ struct BattleStruct /* 0x2000000 */
/*0x15DDE*/ u8 unk15DDE;
/*0x15DDF*/ u8 unk15DDF;
/*0x15DE0*/ u8 filler15DE0[0x222];
- /*0x16002*/ u8 AnimTurn;
- /*0x16003*/ u8 ScriptingActive;
- /*0x16004*/ u8 WrappedMove1[4];
- /*0x16008*/ u8 WrappedMove2[4];
+ /*0x16002*/ u8 animTurn;
+ /*0x16003*/ u8 scriptingActive;
+ /*0x16004*/ u8 wrappedMove1[4];
+ /*0x16008*/ u8 wrappedMove2[4];
/*0x1600C*/ u8 cmd49StateTracker;
/*0x1600D*/ u8 unk1600D;
/*0x1600E*/ u8 unk1600E;
- /*0x1600F*/ u8 atk23StateTracker;
- /*0x16010*/ u8 unk16010;
- /*0x16011*/ u8 unk16011;
- /*0x16012*/ u8 unk16012;
- /*0x16013*/ u8 unk16013;
+ /*0x1600F*/ u8 cmd23StateTracker;
+ /*0x16010*/ u8 moveTarget[4];
/*0x16014*/ u8 unk16014;
/*0x16015*/ u8 unk16015;
/*0x16016*/ u8 unk16016;
/*0x16017*/ u8 unk16017;
/*0x16018*/ u8 expGetterID;
/*0x16019*/ u8 unk16019;
- /*0x1601A*/ u8 unk1601A;
+ /*0x1601A*/ u8 atk5A_StateTracker; //also atk5B, statetracker
/*0x1601B*/ u8 wildVictorySong;
- /*0x1601C*/ u8 DynamicMoveType;
+ /*0x1601C*/ u8 dynamicMoveType;
/*0x1601D*/ u8 unk1601D;
/*0x1601E*/ u8 statChanger;
- /*0x1601F*/ u8 DmgMultiplier;
- /*0x16020*/ u8 WrappedBy[4];
+ /*0x1601F*/ u8 dmgMultiplier;
+ /*0x16020*/ u8 wrappedBy[4];
/*0x16024*/ u8 unk16024;
/*0x16025*/ u8 unk16025;
/*0x16026*/ u8 unk16026;
@@ -240,7 +256,7 @@ struct BattleStruct /* 0x2000000 */
/*0x16053*/ u8 unk16053;
/*0x16054*/ u8 unk16054;
/*0x16055*/ u8 unk16055;
- /*0x16056*/ u8 unk16056;
+ /*0x16056*/ u8 moneyMultiplier;
/*0x16057*/ u8 unk16057;
/*0x16058*/ u8 unk16058;
/*0x16059*/ u8 unk16059;
@@ -250,38 +266,11 @@ struct BattleStruct /* 0x2000000 */
/*0x1605E*/ u8 unk1605E;
/*0x1605F*/ u8 sentInPokes;
/*0x16060*/ u8 unk16060[4];
- /*0x16064*/ u8 unk16064;
- /*0x16065*/ u8 unk16065;
- /*0x16066*/ u8 unk16066;
- /*0x16067*/ u8 unk16067;
- /*0x16068*/ u8 unk16068;
- /*0x16069*/ u8 unk16069;
- /*0x1606A*/ u8 unk1606A;
- /*0x1606B*/ u8 unk1606B;
- /*0x1606C*/ u8 unk1606C;
- /*0x1606D*/ u8 unk1606D;
- /*0x1606E*/ u8 unk1606E;
- /*0x1606F*/ u8 unk1606F;
- /*0x16070*/ u8 unk16070;
- /*0x16071*/ u8 unk16071;
- /*0x16072*/ u8 unk16072;
- /*0x16073*/ u8 unk16073;
- /*0x16074*/ u8 unk16074;
- /*0x16075*/ u8 unk16075;
- /*0x16076*/ u8 unk16076;
- /*0x16077*/ u8 unk16077;
+ /*0x16064*/ u8 unk16064[4];
+ /*0x16068*/ u8 unk16068[4];
+ /*0x1606C*/ u8 unk1606C[4][3];
/*0x16078*/ u8 unk16078;
- /*0x16079*/ u8 unk16079;
- /*0x1607A*/ u8 unk1607A;
- /*0x1607B*/ u8 unk1607B;
- /*0x1607C*/ u8 unk1607C;
- /*0x1607D*/ u8 unk1607D;
- /*0x1607E*/ u8 unk1607E;
- /*0x1607F*/ u8 unk1607F;
- /*0x16080*/ u8 unk16080;
- /*0x16081*/ u8 unk16081;
- /*0x16082*/ u8 unk16082;
- /*0x16083*/ u8 unk16083;
+ /*0x16079*/ u8 caughtNick[11];
/*0x16084*/ u8 unk16084;
/*0x16085*/ u8 unk16085;
/*0x16086*/ u8 unk16086;
@@ -302,17 +291,17 @@ struct BattleStruct /* 0x2000000 */
/*0x16098*/ u8 unk16098;
/*0x16099*/ u8 unk16099;
/*0x1609A*/ u8 unk1609a;
- /*0x1609B*/ u8 unk1609b;
- /*0x1609C*/ u8 unk1609C;
+ /*0x1609B*/ u8 castformToChangeInto;
+ /*0x1609C*/ u8 atk6C_statetracker;
/*0x1609D*/ u8 unk1609D;
/*0x1609E*/ u8 unk1609E;
/*0x1609F*/ u8 unk1609F;
/*0x160A0*/ u8 unk160a0;
- /*0x160A1*/ u8 AnimTargetsHit;
+ /*0x160A1*/ u8 animTargetsHit;
/*0x160A2*/ u8 expGetterBank;
/*0x160A3*/ u8 unk160A3;
- /*0x160A4*/ u8 AnimArg1;
- /*0x160A5*/ u8 AnimArg2;
+ /*0x160A4*/ u8 animArg1;
+ /*0x160A5*/ u8 animArg2;
/*0x160A6*/ u8 unk160A6;
/*0x160A7*/ u8 unk160A7;
/*0x160A8*/ u8 unk160A8;
@@ -335,12 +324,9 @@ struct BattleStruct /* 0x2000000 */
/*0x160B9*/ u8 unk160B9;
/*0x160BA*/ u8 unk160Ba;
/*0x160BB*/ u8 unk160Bb;
- /*0x160BC*/ u8 unk160BC;
- /*0x160BD*/ u8 unk160BD;
- /*0x160BE*/ u8 unk160BE;
- /*0x160BF*/ u8 unk160BF;
+ /*0x160BC*/ u16 HP_OnSwitchout[2];
/*0x160C0*/ u8 unk160C0;
- /*0x160C1*/ u8 unk160C1;
+ /*0x160C1*/ u8 hpScale;
/*0x160C2*/ u8 unk160C2;
/*0x160C3*/ u8 unk160C3;
/*0x160C4*/ u8 unk160C4;
@@ -349,57 +335,68 @@ struct BattleStruct /* 0x2000000 */
/*0x160C7*/ u8 unk160C7;
/*0x160C8*/ u8 unk160C8;
/*0x160C9*/ u8 unk160C9;
- /*0x160CA*/ u8 SynchroniseEffect;
+ /*0x160CA*/ u8 synchroniseEffect;
/*0x160CB*/ u8 linkPlayerIndex;
- /*0x160CC*/ u16 UsedHeldItems[4];
+ /*0x160CC*/ u16 usedHeldItems[4];
u8 filler2[0x72E];
/* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2;
};
struct DisableStruct
{
- /*0x00*/ u8 filler0[0x3];
- /*0x04*/ u16 DisabledMove;
- /*0x06*/ u16 EncoredMove;
- /*0x08*/ u8 ProtectUses;
- /*0x09*/ u8 StockpileCounter;
- /*0x0A*/ u8 SubstituteHP;
- u8 fillerB[4];
- u8 unkF_0:4;
- u8 unkF_4:4;
- u8 filler10[3];
- /*0x13*/ u8 taunt:4;
- /*0x13*/ u8 unkC:4;
- /*0x14*/ u8 BankPreventingEscape;
- /*0x15*/ u8 BankWithSureHit;
- /*0x16*/ u8 IsFirstTurn;
+ /*0x00*/ u32 unk0;
+ /*0x04*/ u16 disabledMove;
+ /*0x06*/ u16 encoredMove;
+ /*0x08*/ u8 protectUses;
+ /*0x09*/ u8 stockpileCounter;
+ /*0x0A*/ u8 substituteHP;
+ /*0x0B*/ u8 disableTimer1 : 4;
+ /*0x0B*/ u8 disableTimer2 : 4;
+ /*0x0C*/ u8 encoredMovePos;
+ /*0x0D*/ u8 unkD;
+ /*0x0E*/ u8 encoreTimer1 : 4;
+ /*0x0E*/ u8 encoreTimer2 : 4;
+ /*0x0F*/ u8 perishSong1 : 4;
+ /*0x0F*/ u8 perishSong2 : 4;
+ /*0x10*/ u8 furyCutterCounter;
+ /*0x11*/ u8 rolloutTimer1 : 4;
+ /*0x11*/ u8 rolloutTimer2 : 4;
+ /*0x12*/ u8 chargeTimer1 : 4;
+ /*0x12*/ u8 chargeTimer2 : 4;
+ /*0x13*/ u8 tauntTimer1:4;
+ /*0x13*/ u8 tauntTimer2:4;
+ /*0x14*/ u8 bankPreventingEscape;
+ /*0x15*/ u8 bankWithSureHit;
+ /*0x16*/ u8 isFirstTurn;
/*0x17*/ u8 unk17;
- /*0x18*/ u8 TruantCounter;
- /*0x19*/ u8 RechargeCounter;
+ /*0x18*/ u8 truantCounter : 1;
+ /*0x18*/ u8 unk18_a : 3;
+ /*0x18*/ u8 unk18_b : 4;
+ /*0x19*/ u8 rechargeCounter;
/*0x1A*/ u8 unk1A[2];
};
struct BattleResults
{
- u8 PlayerFaintCounter; // 0x0
- u8 OpponentFaintCounter; // 0x1
+ u8 playerFaintCounter; // 0x0
+ u8 opponentFaintCounter; // 0x1
u8 unk2; // 0x2
u8 unk3; // 0x3
u8 unk4; // 0x4
u8 unk5_0:1; // 0x5
u8 unk5_1:1; // 0x5
- u16 Poke1Species; // 0x6
- u8 PokeString1[10]; // 0x8
+ u16 poke1Species; // 0x6
+ u8 pokeString1[10]; // 0x8
u8 unk12;
- u8 BattleTurnCounter; // 0x13
- u8 PokeString2[10]; // 0x14
+ u8 battleTurnCounter; // 0x13
+ u8 pokeString2[10]; // 0x14
u8 filler1E[2];
- u16 LastOpponentSpecies; // 0x20
- u16 LastUsedMove; // 0x22
- u16 OpponentMove; // 0x24
- u16 OpponentSpecies; // 0x26
- u16 CaughtPoke; // 0x28
- u8 CaughtNick[10]; // 0x2A
+ u16 lastOpponentSpecies; // 0x20
+ u16 lastUsedMove; // 0x22
+ u16 opponentMove; // 0x24
+ u16 opponentSpecies; // 0x26
+ u16 caughtPoke; // 0x28
+ u8 caughtNick[10]; // 0x2A
u8 filler34[2];
u8 unk36[10];
};
@@ -454,34 +451,34 @@ struct Struct20238C8
struct ProtectStruct
{
/*field0*/
- u32 Protected:1;
- u32 Endured:1;
- u32 OnlyStruggle:1;
- u32 HelpingHand:1;
- u32 BounceMove:1;
- u32 StealMove:1;
- u32 Flag0Unknown:1;
- u32 PrlzImmobility:1;
+ u32 protected:1;
+ u32 endured:1;
+ u32 onlyStruggle:1;
+ u32 helpingHand:1;
+ u32 bounceMove:1;
+ u32 stealMove:1;
+ u32 flag0Unknown:1;
+ u32 prlzImmobility:1;
/*field1*/
- u32 ConfusionSelfDmg:1;
- u32 NotEffective:1;
- u32 ChargingTurn:1;
- u32 FleeFlag:2; //for RunAway and Smoke Ball
- u32 UsedImprisionedMove:1;
- u32 LoveImmobility:1;
- u32 UsedDisabledMove:1;
+ u32 confusionSelfDmg:1;
+ u32 notEffective:1;
+ u32 chargingTurn:1;
+ u32 fleeFlag:2; //for RunAway and Smoke Ball
+ u32 usedImprisionedMove:1;
+ u32 loveImmobility:1;
+ u32 usedDisabledMove:1;
/*field2*/
- u32 UsedTauntedMove:1;
- u32 Flag2Unknown:1;
- u32 FlinchImmobility:1;
- u32 NotFirstStrike:1;
- u32 Free : 4;
+ u32 usedTauntedMove:1;
+ u32 flag2Unknown:1;
+ u32 flinchImmobility:1;
+ u32 notFirstStrike:1;
+ u32 free : 4;
/*field3*/
u32 field3 : 8;
- u32 PhysicalDmg;
- u32 SpecialDmg;
- u8 PhysicalBank;
- u8 SpecialBank;
+ u32 physicalDmg;
+ u32 specialDmg;
+ u8 physicalBank;
+ u8 specialBank;
u16 fieldE;
};
@@ -497,7 +494,7 @@ struct SpecialStatus
u8 focusBanded : 1;
u8 field1[3];
u32 moveturnLostHP;
- u32 moveturnlostHP_physical;
+ u32 moveturnLostHP_physical;
u32 moveturnLostHP_special;
u8 moveturnPhysicalBank;
u8 moveturnSpecialBank;
@@ -507,18 +504,18 @@ struct SpecialStatus
struct sideTimer
{
- u8 reflectTimer;
- u8 reflectBank;
- u8 lightscreenTimer;
- u8 lightscreenBank;
- u8 mistTimer;
- u8 mistBank;
- u8 safeguardTimer;
- u8 safeguardBank;
- u8 followmeTimer;
- u8 followmeTarget;
- u8 spikesAmount;
- u8 fieldB;
+ u8 reflectTimer; //0x0
+ u8 lightscreenTimer; //0x1
+ u8 mistTimer; //0x2
+ u8 field3; //0x3
+ u8 field4; //0x4
+ u8 field5; //0x5
+ u8 spikesAmount; //0x6
+ u8 safeguardTimer; //0x7
+ u8 followmeTimer; //0x8
+ u8 followmeTarget; //0x9
+ u8 fieldA; //0xA
+ u8 fieldB; //0xB
};
struct WishFutureKnock
@@ -528,7 +525,7 @@ struct WishFutureKnock
s32 futureSightDmg[MAX_BANKS_BATTLE];
u16 futureSightMove[MAX_BANKS_BATTLE];
u8 wishCounter[MAX_BANKS_BATTLE];
- u8 wishUserBank[MAX_BANKS_BATTLE];
+ u8 wishUserID[MAX_BANKS_BATTLE];
u8 weatherDuration;
u8 knockedOffPokes[2];
};
@@ -554,6 +551,58 @@ extern u8 ewram[];
#define ewram17800 ((struct Struct2017800 *) (ewram + 0x17800))
#define ewram17810 ((struct Struct2017810 *) (ewram + 0x17810))
#define ewram17840 (*(struct Struct2017840 *) (ewram + 0x17840))
+#define B_FUNCTION_STACK ((struct funcStack *)(0x02017140))
+
+struct funcStack
+{
+ void* ptr[8];
+ u8 size;
+};
+
+extern u8 gBattleTextBuff1[];
+
+//function declarations of buffer emits
+void EmitGetAttributes(u8 buffID, u8 request, u8 c); //0x0
+void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); //0x1
+void EmitSetAttributes(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2
+void EmitSwitchInAnim(u8 a, u8 b, u8 c); //0x5
+void EmitReturnPokeToBall(u8 a, u8 b); //0x6
+void EmitTrainerSlide(u8 a); //0x8
+void EmitFaintAnimation(u8 a); //0xA
+void EmitBallThrowAnim(u8 a, u8 shakes); //0xD
+//void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF
+void EmitPrintString(u8 a, u16 stringID); //0x10
+//void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11
+void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); //0x16
+//void EmitHealthBarUpdate(u8 a, u16 b); //0x18; Had to declare the second arg as u16 because s16 wont match in atk0b
+//void EmitExpBarUpdate(u8 a, u8 b, u16 c); //0x19
+void EmitStatusIconUpdate(u8 a, u32 b, u32 c); //0x1A
+void EmitStatusAnimation(u8 a, u8 b, u32 c); //0x1B
+void EmitStatusXor(u8 a, u8 b); //0x1C
+void EmitHitAnimation(u8 a); //0x29
+void EmitEffectivenessSound(u8 a, u16 sound); //0x2B
+void EmitPlaySound(u8 a, u16 sound); //0x2C
+void EmitFaintingCry(u8 a); //0x2D
+void EmitBattleIntroSlide(u8 a, u8 b); //0x2E
+void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); //0x30
+void dp01_build_cmdbuf_x31_31_31_31(u8 a); //0x31
+void EmitSpriteInvisibility(u8 a, u8 b); //0x33
+void EmitBattleAnimation(u8 a, u8 b, u16 c); //0x34
+void EmitResetActionMoveSelection(u8 a, u8 b); //0x36
+void dp01_build_cmdbuf_x37_a(u8 a, u8 b); //0x37
+
+#define REQUEST_ALL_BATTLE 0x0
+#define REQUEST_SPECIES_BATTLE 0x1
+#define REQUEST_HELDITEM_BATTLE 0x2
+#define REQUEST_MOVES_PP_BATTLE 0x3
+#define REQUEST_PPMOVE1_BATTLE 0x9
+#define REQUEST_PPMOVE2_BATTLE 0xA
+#define REQUEST_PPMOVE3_BATTLE 0xB
+#define REQUEST_PPMOVE4_BATTLE 0xC
+#define REQUEST_STATUS_BATTLE 0x28
+#define REQUEST_HP_BATTLE 0x2A
+
+void MarkBufferBankForExecution(u8 bank);
extern u8 gBattleTextBuff1[];
@@ -611,7 +660,6 @@ u8 b_first_side(u8, u8, u8);
void TurnValuesCleanUp(u8);
void SpecialStatusesClear(void);
void sub_80138F0(void);
-void MarkBufferBankForExecution();
void sub_80155A4();
void CancelMultiTurnMoves(u8);
void PrepareStringBattle();
@@ -625,11 +673,11 @@ u8 TurnBasedEffects();
u8 sub_80170DC();
u8 sub_80173A4();
u8 AbilityBattleEffects(u8, u8, u8, u8, u16);
-u8 sub_801A02C();
+u8 ItemBattleEffects();
// asm/battle_4.o
void AI_CalcDmg(u8, u8);
-void TypeCalc(u16, u8, u8);
+u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def);
// asm/battle_5.o
void nullsub_91(void);
diff --git a/include/pokemon.h b/include/pokemon.h
index c69fb87e0..9dd7ba06c 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -392,9 +392,14 @@ struct BattleMove
u8 secondaryEffectChance;
u8 target;
u8 priority;
- u32 flags;
+ u8 flags;
+ u8 pad[3];
};
+#define FLAG_PROTECT_AFFECTED 0x2
+#define FLAG_MAGICCOAT_AFFECTED 0x4
+#define FLAG_SNATCH_AFFECTED 0x8
+
struct PokemonStorage
{
/*0x00*/ u8 currentBox;
diff --git a/include/rom3.h b/include/rom3.h
index a45ec7dc4..6b1dacd9c 100644
--- a/include/rom3.h
+++ b/include/rom3.h
@@ -14,23 +14,22 @@ void sub_800C35C(void);
void sub_800C47C(u8);
void EmitGetAttributes(u8 a, u8 b, u8 c);
void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c);
-void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, u8 *e);
void dp01_build_cmdbuf_x04_4_4_4(u8 a);
-void sub_800C704(u8, u8, u8);
-void dp01_build_cmdbuf_x06_a(u8 a, u8 b);
+void EmitSwitchInAnim(u8, u8, u8);
+void EmitReturnPokeToBall(u8 a, u8 b);
void dp01_build_cmdbuf_x07_7_7_7(u8 a);
-void dp01_build_cmdbuf_x08_8_8_8(u8 a);
+void EmitTrainerSlide(u8 a);
void dp01_build_cmdbuf_x09_9_9_9(u8 a);
void EmitFaintAnimation(u8 a);
void dp01_build_cmdbuf_x0B_B_B_B(u8 a);
void dp01_build_cmdbuf_x0C_C_C_C(u8 a);
-void dp01_build_cmdbuf_x0D_a(u8 a, u8 b);
+void EmitBallThrowAnim(u8 a, u8 b);
void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, u8 *g);
void EmitPrintString(u8 a, u16 b);
void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c);
void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d);
void sub_800CBE0(u8 a, u8 *b);
-void dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f(u8 a, u8 b, u8 c, u8 d, u8 *e);
+void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e);
void dp01_build_cmdbuf_x17_17_17_17(u8 a);
void EmitHealthBarUpdate(u8 a, s16 b);
void EmitExpBarUpdate(u8 a, u8 b, s16 c);
@@ -49,7 +48,7 @@ void dp01_build_cmdbuf_x28_28_28_28(u8 a);
void EmitHitAnimation(u8 a);
void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a);
void EmitEffectivenessSound(u8 a, u16 b);
-void sub_800D074(u8 a, u16 b);
+void EmitPlaySound(u8 a, u16 b);
void EmitFaintingCry(u8 a);
void EmitBattleIntroSlide(u8 a, u8 b);
void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a);
diff --git a/ld_script.txt b/ld_script.txt
index 3e12b279d..8ed41e797 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -54,7 +54,7 @@ SECTIONS {
src/battle_2.o(.text);
asm/battle_2.o(.text);
asm/battle_3.o(.text);
- asm/battle_4.o(.text);
+ src/battle_4.o(.text);
asm/battle_5.o(.text);
src/battle_6.o(.text);
src/battle_7.o(.text);
@@ -331,7 +331,9 @@ SECTIONS {
src/link.o(.rodata);
src/rtc.o(.rodata);
data/main_menu.o(.rodata);
- data/data2.o(.rodata);
+ data/data2a.o(.rodata);
+ src/battle_4.o(.rodata);
+ data/data2b.o(.rodata);
src/pokemon_data.o(.rodata);
. = ALIGN(4);
src/trig.o(.rodata);
diff --git a/src/battle_2.c b/src/battle_2.c
index d08f2b8df..7772444d7 100644
--- a/src/battle_2.c
+++ b/src/battle_2.c
@@ -1584,7 +1584,7 @@ void sub_8010874(void)
for (j = 0; j < (u32)0x1C; j++)
r4[j] = 0;
- gDisableStructs[i].IsFirstTurn = 2;
+ gDisableStructs[i].isFirstTurn= 2;
gUnknown_02024C70[i] = 0;
gLastUsedMove[i] = 0;
gMoveHitWith[i] = 0;
@@ -1655,25 +1655,25 @@ void sub_8010874(void)
ewram16113 = 0;
for (i = 0; i < 11; i++)
gBattleResults.unk36[i] = 0;
- gBattleResults.BattleTurnCounter = 0;
- gBattleResults.PlayerFaintCounter = 0;
- gBattleResults.OpponentFaintCounter = 0;
+ gBattleResults.battleTurnCounter = 0;
+ gBattleResults.playerFaintCounter = 0;
+ gBattleResults.opponentFaintCounter = 0;
gBattleResults.unk2 = 0;
gBattleResults.unk3 = 0;
gBattleResults.unk4 = 0;
gBattleResults.unk5_0 = 0;
gBattleResults.unk5_1 = 0;
- gBattleResults.LastOpponentSpecies = 0;
- gBattleResults.LastUsedMove = 0;
- gBattleResults.OpponentMove = 0;
- gBattleResults.Poke1Species = 0;
- gBattleResults.OpponentSpecies = 0;
- gBattleResults.CaughtPoke = 0;
+ gBattleResults.lastOpponentSpecies = 0;
+ gBattleResults.lastUsedMove = 0;
+ gBattleResults.opponentMove = 0;
+ gBattleResults.poke1Species = 0;
+ gBattleResults.opponentSpecies = 0;
+ gBattleResults.caughtPoke = 0;
for (i = 0; i < 10; i++)
{
- gBattleResults.PokeString1[i] = 0;
- gBattleResults.PokeString2[i] = 0;
- gBattleResults.CaughtNick[i] = 0;
+ gBattleResults.pokeString1[i] = 0;
+ gBattleResults.pokeString2[i] = 0;
+ gBattleResults.caughtNick[i] = 0;
}
}
@@ -1692,25 +1692,25 @@ void SwitchInClearStructs(void)
{
struct UnknownStruct12 *sp20 = &gUnknown_02024AD0[i];
- if ((sp20->unk0 & 0x04000000) && gDisableStructs[i].BankPreventingEscape == gActiveBank)
+ if ((sp20->unk0 & 0x04000000) && gDisableStructs[i].bankPreventingEscape == gActiveBank)
sp20->unk0 &= ~0x04000000;
- if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].BankWithSureHit == gActiveBank)
+ if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].bankWithSureHit == gActiveBank)
{
gStatuses3[i] &= ~STATUS3_ALWAYS_HITS;
- gDisableStructs[i].BankWithSureHit = 0;
+ gDisableStructs[i].bankWithSureHit = 0;
}
}
}
if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS)
{
gBattleMons[gActiveBank].status2 &= (STATUS2_CONFUSION | STATUS2_FOCUS_ENERGY | STATUS2_SUBSTITUTE | STATUS2_ESCAPE_PREVENTION | STATUS2_CURSED);
- gStatuses3[gActiveBank] &= (STATUS3_LEECHSEED_RECEIVER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT);
+ gStatuses3[gActiveBank] &= (STATUS3_LEECHSEED_BANK | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT);
for (i = 0; i < gNoOfAllBanks; i++)
{
if (GetBankSide(gActiveBank) != GetBankSide(i)
&& (gStatuses3[i] & STATUS3_ALWAYS_HITS) != 0
- && (gDisableStructs[i].BankWithSureHit == gActiveBank))
+ && (gDisableStructs[i].bankWithSureHit == gActiveBank))
{
gStatuses3[i] &= ~STATUS3_ALWAYS_HITS;
gStatuses3[i] |= 0x10;
@@ -1740,13 +1740,13 @@ void SwitchInClearStructs(void)
if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS)
{
- gDisableStructs[gActiveBank].SubstituteHP = sp0.SubstituteHP;
- gDisableStructs[gActiveBank].BankWithSureHit = sp0.BankWithSureHit;
- gDisableStructs[gActiveBank].unkF_0 = sp0.unkF_0;
- gDisableStructs[gActiveBank].unkF_4 = sp0.unkF_4;
+ gDisableStructs[gActiveBank].substituteHP = sp0.substituteHP;
+ gDisableStructs[gActiveBank].bankWithSureHit = sp0.bankWithSureHit;
+ gDisableStructs[gActiveBank].perishSong1 = sp0.perishSong1;
+ gDisableStructs[gActiveBank].perishSong2 = sp0.perishSong2;
}
- gDisableStructs[gActiveBank].IsFirstTurn = 2;
+ gDisableStructs[gActiveBank].isFirstTurn= 2;
gLastUsedMove[gActiveBank] = 0;
gMoveHitWith[gActiveBank] = 0;
gUnknown_02024C44[gActiveBank] = 0;
@@ -1781,7 +1781,7 @@ void UndoEffectsAfterFainting(void)
gStatuses3[gActiveBank] = 0;
for (i = 0; i < gNoOfAllBanks; i++)
{
- if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].BankPreventingEscape == gActiveBank)
+ if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].bankPreventingEscape == gActiveBank)
gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION;
if (gBattleMons[i].status2 & (gBitTable[gActiveBank] << 16))
gBattleMons[i].status2 &= ~(gBitTable[gActiveBank] << 16);
@@ -1794,27 +1794,27 @@ void UndoEffectsAfterFainting(void)
ptr = (u8 *)&gDisableStructs[gActiveBank];
for (i = 0; i < (u32)0x1C; i++)
ptr[i] = 0;
- gProtectStructs[gActiveBank].Protected = 0;
- gProtectStructs[gActiveBank].Endured = 0;
- gProtectStructs[gActiveBank].OnlyStruggle = 0;
- gProtectStructs[gActiveBank].HelpingHand = 0;
- gProtectStructs[gActiveBank].BounceMove = 0;
- gProtectStructs[gActiveBank].StealMove = 0;
- gProtectStructs[gActiveBank].Flag0Unknown = 0;
- gProtectStructs[gActiveBank].PrlzImmobility = 0;
- gProtectStructs[gActiveBank].ConfusionSelfDmg = 0;
- gProtectStructs[gActiveBank].NotEffective = 0;
- gProtectStructs[gActiveBank].ChargingTurn = 0;
- gProtectStructs[gActiveBank].FleeFlag = 0;
- gProtectStructs[gActiveBank].UsedImprisionedMove = 0;
- gProtectStructs[gActiveBank].LoveImmobility = 0;
- gProtectStructs[gActiveBank].UsedDisabledMove = 0;
- gProtectStructs[gActiveBank].UsedTauntedMove = 0;
- gProtectStructs[gActiveBank].Flag2Unknown = 0;
- gProtectStructs[gActiveBank].FlinchImmobility = 0;
- gProtectStructs[gActiveBank].NotFirstStrike = 0;
-
- gDisableStructs[gActiveBank].IsFirstTurn = 2;
+ gProtectStructs[gActiveBank].protected = 0;
+ gProtectStructs[gActiveBank].endured = 0;
+ gProtectStructs[gActiveBank].onlyStruggle = 0;
+ gProtectStructs[gActiveBank].helpingHand = 0;
+ gProtectStructs[gActiveBank].bounceMove = 0;
+ gProtectStructs[gActiveBank].stealMove = 0;
+ gProtectStructs[gActiveBank].flag0Unknown = 0;
+ gProtectStructs[gActiveBank].prlzImmobility = 0;
+ gProtectStructs[gActiveBank].confusionSelfDmg = 0;
+ gProtectStructs[gActiveBank].notEffective = 0;
+ gProtectStructs[gActiveBank].chargingTurn = 0;
+ gProtectStructs[gActiveBank].fleeFlag = 0;
+ gProtectStructs[gActiveBank].usedImprisionedMove = 0;
+ gProtectStructs[gActiveBank].loveImmobility = 0;
+ gProtectStructs[gActiveBank].usedDisabledMove = 0;
+ gProtectStructs[gActiveBank].usedTauntedMove = 0;
+ gProtectStructs[gActiveBank].flag2Unknown = 0;
+ gProtectStructs[gActiveBank].flinchImmobility = 0;
+ gProtectStructs[gActiveBank].notFirstStrike = 0;
+
+ gDisableStructs[gActiveBank].isFirstTurn= 2;
gLastUsedMove[gActiveBank] = 0;
gMoveHitWith[gActiveBank] = 0;
gUnknown_02024C44[gActiveBank] = 0;
@@ -2140,7 +2140,7 @@ void unref_sub_8011A68(void)
{
if (GetBankSide(gActiveBank) == 0)
{
- sub_800C704(0, gBattlePartyID[gActiveBank], 0);
+ EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], 0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2191,7 +2191,7 @@ void BattleBeginFirstTurn(void)
return;
while (ewram160F9 < gNoOfAllBanks)
{
- if (sub_801A02C(0, gTurnOrder[ewram160F9], 0) != 0)
+ if (ItemBattleEffects(0, gTurnOrder[ewram160F9], 0) != 0)
r9++;
ewram160F9++;
if (r9 != 0)
@@ -2286,8 +2286,8 @@ void BattleTurnPassed(void)
gBattleMainFunc = sub_80138F0;
return;
}
- if (gBattleResults.BattleTurnCounter < 0xFF)
- gBattleResults.BattleTurnCounter++;
+ if (gBattleResults.battleTurnCounter < 0xFF)
+ gBattleResults.battleTurnCounter++;
for (i = 0; i < gNoOfAllBanks; i++)
{
gActionForBanks[i] = 0xFF;
diff --git a/src/battle_4.c b/src/battle_4.c
new file mode 100644
index 000000000..9ca75e4b9
--- /dev/null
+++ b/src/battle_4.c
@@ -0,0 +1,18534 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_move_effects.h"
+#include "moves.h"
+#include "abilities.h"
+#include "item.h"
+#include "items.h"
+#include "data2.h"
+#include "hold_effects.h"
+#include "rng.h"
+#include "species.h"
+#include "pokemon.h"
+#include "text.h"
+#include "palette.h"
+#include "main.h"
+#include "sound.h"
+#include "task.h"
+#include "decompress.h"
+#include "naming_screen.h"
+
+//for now TODO: move to battle.h
+void EmitHealthBarUpdate(u8 a, u16 b); //0x18; Had to declare the second arg as u16 because s16 wont match in atk0b
+void EmitExpBarUpdate(u8 a, u8 b, u16 c); //0x19
+void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11
+void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF
+
+//extern needed variables
+extern u8 gCritMultiplier;
+extern s32 gBattleMoveDamage;
+extern u32 gStatuses3[4];
+extern u16 gBattleTypeFlags;
+extern const u32 gBitTable[];
+extern const struct BaseStats gBaseStats[];
+extern struct BattleEnigmaBerry gEnigmaBerries[4];
+extern struct BattlePokemon gBattleMons[4];
+extern u8 gActiveBank;
+extern u32 gBattleExecBuffer;
+extern u8 gNoOfAllBanks;
+extern u16 gBattlePartyID[4];
+extern u8 gTurnOrder[4];
+extern u8 gUnknown_02024A76[4];
+extern u16 gCurrentMove;
+extern u8 gLastUsedAbility;
+extern u16 gBattleWeather;
+extern u8 gStringBank;
+extern u8 gEffectBank;
+extern u8 gAbsentBankFlags;
+extern u8 gMultiHitCounter;
+extern u16 gLastUsedMove[4];
+extern u16 gLockedMove[4];
+extern u16 gChosenMovesByBanks[4];
+extern u16 gSideAffecting[2];
+extern u16 gPauseCounterBattle;
+extern u16 gPaydayMoney;
+extern u16 gRandomTurnNumber;
+extern u8 gBattleOutcome;
+extern u8 gBattleTerrain;
+extern u16 gTrainerBattleOpponent;
+extern u8 gBankAttacker;
+extern u8 gBankTarget;
+extern u8* gBattlescriptCurrInstr;
+extern u8 gCurrMovePos;
+extern u8 gFightStateTracker;
+extern u32 gHitMarker;
+extern u8 gBattleMoveFlags;
+extern u8 gBattleCommunication[];
+extern u16 gMoveHitWith[4];
+extern u16 gUnknown_02024C44[4];
+extern u8 gStringBank;
+extern u16 gDynamicBasePower;
+extern const u8 gTypeEffectiveness[];
+extern u16 gLastUsedItem;
+extern u16 gBattleMovePower;
+extern s32 gHP_dealt;
+extern s32 gTakenDmg[4];
+extern u8 gTakenDmgBanks[4];
+extern const u16 gMissStrings[];
+extern u8 gSentPokesToOpponent[2];
+extern u8 gBank1;
+extern u16 gExpShareExp;
+extern u8 gBattleTextBuff1[];
+extern u8 gBattleTextBuff2[];
+extern u8 gBattleTextBuff3[];
+extern u8 gLeveledUpInBattle;
+extern void (*gBattleMainFunc)(void);
+extern struct Window gUnknown_03004210;
+extern const u8 gUnknown_08400D7A[];
+extern u8 gPlayerPartyCount;
+extern u16 word_2024E82; //move to learn
+extern const u8 gTrainerMoney[];
+extern u16 gRandomMove;
+extern u8* gBattleScriptsEffectsTable[];
+extern u16 gUnknown_02024BE8; //last used move in battle
+extern u8 gBankInMenu;
+extern u8 gActionForBanks[4];
+extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch
+extern u16 gUnknown_030041B0;
+extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one
+extern u8 gCurrentMoveTurn;
+
+//extern functions
+bool8 CantUseMove(void);
+void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move);
+void CancelMultiTurnMoves(u8 bank);
+void b_movescr_stack_push(u8* BS_ptr);
+void b_movescr_stack_push_cursor(void);
+void RecordAbilityBattle(u8 bank, u8 ability);
+void RecordItemBattle(u8 bank, u8 item);
+int IsPokeDisobedient(void);
+static bool8 IsTwoTurnsMove(u16 move);
+static void DestinyBondFlagUpdate(void);
+static void b_wonderguard_and_levitate(void);
+u8 GetBankIdentity(u8 bank);
+u8 GetBankSide(u8 bank);
+u8 GetBattleBank(u8 bankValue);
+s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def);
+static u8 AttacksThisTurn(u8 bank, u16 move); //Note: returns 1 if it's a charging turn, otherwise 2
+void UndoEffectsAfterFainting(void);
+void BattleMusicStop(void);
+void PlayBGM(u16 songID);
+void MonGainEVs(struct Pokemon*, u16 defeatedSpecies);
+extern u8 gBattleBufferB[4][0x200];
+void sub_80324F8(struct Pokemon*, u8 bank);
+void AdjustFriendship(struct Pokemon*, u8 value);
+bool8 IsTradedMon(struct Pokemon*);
+void b_movescr_stack_pop_cursor(void);
+void SwitchInClearStructs(void);
+u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8);
+u8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID);
+u16 SpeciesToNationalPokedexNum(u16 species);
+u8 sub_803FC34(u8 bank);
+u16 sub_803FBFC(u8 a);
+u8 GetBankByPlayerAI(u8 ID);
+void sub_8012258(u8);
+void sub_80157C4(u8 bank); //update sent pokes in battle
+//sub_803B7C8 teach poke a move
+u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move);
+void IncrementGameStat(u8 index);
+u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
+u16 GetPokedexHeightWeight(u16 national_num, u8 heightweight);
+u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5);
+void DestroyMenuCursor(void);
+void sub_802BC6C(void);
+void sub_809D9F0(struct Pokemon *party, u8, u8, void *, u32);
+u8 sub_809FA30(void);
+bool32 IsHMMove2(u16 move);
+void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0);
+void nullsub_6(void);
+void ReshowBattleScreenAfterMenu(void);
+void sub_800F808(void);
+void sub_80B79B8(u32* moneySaveblock, u32 to_give);
+void sub_80156DC(void); //set sentpokes value
+bool8 sub_8014AB8(u8 bank); //can run from battle
+u8 CountAliveMons(u8 caseID);
+void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp);
+u8 CanRunFromBattle(void);
+u8 sub_801B5C0(u16 move, u8 targetbyte); //get target of move
+void sub_80153D0(u8 atk); //pressure perish song pp decrement
+u8 castform_switch(u8 bank);
+void b_push_move_exec(u8* bs_ptr);
+u8 sav1_map_get_light_level(void);
+u8 CalculatePlayerPartyCount(void);
+u16 Sqrt(u32 num);
+u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display
+void sub_814A880(u8 a1, u8 a2);
+u8 sub_8015A98(u8 bank, u8 unusable_moves, u8 flags); //choose move limitations
+void sub_801529C(u8 bank);
+bool8 IsLinkDoubleBattle(void);
+void sub_8094B6C(u8 bank, u8 partyID, u8 r2);
+
+//extern BattleScripts
+extern u8 BattleScript_EndTurn[];
+extern u8 BattleScript_NoPPForMove[];
+extern u8 BattleScript_MagicCoatBounce[];
+extern u8 BattleScript_TookAttack[];
+extern u8 BattleScript_SnatchedMove[];
+extern u8 BattleScript_Pausex20[];
+extern u8 BattleScript_SubstituteFade[];
+extern u8 BattleScript_HangedOnMsg[];
+extern u8 BattleScript_OneHitKOMsg[];
+extern u8 BattleScript_EnduredMsg[];
+extern u8 BattleScript_PSNPrevention[];
+extern u8 BattleScript_BRNPrevention[];
+extern u8 BattleScript_PRLZPrevention[];
+extern u8 BattleScript_FlinchPrevention[];
+extern u8 BattleScript_StatUp[];
+extern u8 BattleScript_StatDown[];
+extern u8 BattleScript_NoItemSteal[];
+extern u8 BattleScript_ItemSteal[];
+extern u8 BattleScript_RapidSpinAway[];
+extern u8 BattleScript_TargetPRLZHeal[];
+extern u8 BattleScript_KnockedOff[];
+extern u8 BattleScript_LevelUp[];
+extern u8 BattleScript_WrapFree[];
+extern u8 BattleScript_LeechSeedFree[];
+extern u8 BattleScript_SpikesFree[];
+extern u8 BattleScript_ButItFailed[];
+extern u8 BattleScript_ObliviousPreventsAttraction[];
+extern u8 BattleScript_MistProtected[];
+extern u8 BattleScript_AbilityNoStatLoss[];
+extern u8 BattleScript_AbilityNoSpecificStatLoss[];
+extern u8 BattleScript_TrainerBallBlock[];
+extern u8 BattleScript_WallyBallThrow[];
+extern u8 BattleScript_SuccessBallThrow[];
+extern u8 BattleScript_ShakeBallThrow[];
+
+extern u8 gUnknown_081D919F[]; //spikes1
+extern u8 gUnknown_081D9171[]; //spikes2
+extern u8 gUnknown_081D91CD[]; //spikes3
+extern u8 BattleScript_1D6F44[]; //present dmg
+extern u8 BattleScript_1D83B5[]; //present full hp
+extern u8 BattleScript_1D839B[]; //present hp heal
+extern u8 BattleScript_1D6F74[];
+extern u8 gUnknown_081D977D[]; //castform change bs
+extern u8 gUnknown_081D9834[];
+extern u8 gUnknown_081D90FC[]; //bs random switchout
+extern u8 gUnknown_081D95DB[]; //bs payday money give
+
+//useful macros
+//read via orr
+#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
+#define BSScriptRead16(ptr) ((ptr)[0] | (ptr)[1] << 8)
+#define BSScriptRead8(ptr) (((u8)((ptr)[0])))
+#define BSScriptReadPtr(ptr) ((u8*) BSScriptRead32(ptr))
+
+//read via add
+#define BS2ScriptRead32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
+#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8))
+#define BS2ScriptReadPtr(ptr) ((u8*) BS2ScriptRead32(ptr))
+
+#define ATLEAST_ONE(value)(value != 0 ? value : 1)
+#define ATLEAST_ONE2(value)(value == 0 ? 1 : value)
+#define ATLEAST_ONE_NEGATIVE(value)(value != 0 ? value : -1)
+#define ATLEAST_ONE_PTR(value)(*value != 0 ? *value : (*value = 1))
+#define ATLEAST_ONE_PTR_NEGATIVE(value)(*value != 0 ? *value : (*value = -1))
+
+#define MOVE_MISSED 0x1
+#define MOVE_SUPEREFFECTIVE 0x2
+#define MOVE_NOTVERYEFFECTIVE 0x4
+#define MOVE_NOTAFFECTED 0x8
+#define MOVE_ONEHITKO 0x10
+#define MOVE_FAILED 0x20
+#define MOVE_ENDURED 0x40
+#define MOVE_HANGEDON 0x80
+
+#define MOVE_NO_EFFECT ((MOVE_MISSED | MOVE_NOTAFFECTED | MOVE_FAILED))
+
+#define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
+
+#define ABILITY_CONTACT 0x4
+#define ABILITY_STATUS_IMMUNNITY 0x5
+#define ABILITY_TARGET_SYNCHRONIZE 0x7
+#define ABILITY_ATK_SYNCHRONIZE 0x8
+#define ABILITY_CHECK_OTHER_SIDE 0xC
+#define ABILITY_CHECK_BANK_SIDE 0xD
+#define ABILITY_COUNT_OTHER_SIDE 0x10
+#define ABILITY_COUNT_BANK_SIDE 0x11
+#define ABILITT_COUNT_ON_FIELD 0x12
+#define ABILITY_CHECK_ON_FIELD 0x13
+
+#define HP_BUFF 0x0
+#define ATK_BUFF 0x1
+#define DEF_BUFF 0x2
+#define SPD_BUFF 0x3
+#define SPATK_BUFF 0x4
+#define SPDEF_BUFF 0x5
+#define ACC_BUFF 0x6
+#define EVASION_BUFF 0x7
+
+//array entries for battle communication
+#define MOVE_EFFECT_BYTE 0x3
+#define MULTISTRING_CHOOSER 0x5
+#define MSG_DISPLAY 0x7
+
+#define TARGET_SELECTED 0x0
+#define TARGET_DEPENDS 0x1
+#define TARGET_BOTH 0x8
+#define TARGET_FOES_AND_ALLY 0x20
+#define TARGET_OPPONENTS_FIELD 0x40
+
+#define TYPE_FORESIGHT 0xFE
+#define TYPE_ENDTABLE 0xFF
+
+#define CMP_EQUAL 0x0
+#define CMP_NOT_EQUAL 0x1
+#define CMP_GREATER_THAN 0x2
+#define CMP_LESS_THAN 0x3
+#define CMP_COMMON_BITS 0x4
+#define CMP_NO_COMMON_BITS 0x5
+
+#define BATTLE_WON 0x1
+#define BATTLE_LOST 0x2
+#define BATTLE_DREW 0x3
+#define BATTLE_RAN 0x4
+#define BATTLE_PLAYER_TELEPORTED 0x5
+#define BATTLE_POKE_FLED 0x6
+#define BATTLE_CAUGHT 0x7
+#define BATTLE_OPPONENT_TELEPORTED 0xA
+
+#define uBYTE0_16(value)(( (u8) (((u16)(value) & (0x000000FF)) >> 0x00)))
+#define uBYTE1_16(value)(( (u8) (((u16)(value) & (0x0000FF00)) >> 0x08)))
+
+#define uBYTE0_32(value)(( (u8) (((u32)(value) & (0x000000FF)) >> 0x00)))
+#define uBYTE1_32(value)(( (u8) (((u32)(value) & (0x0000FF00)) >> 0x08)))
+#define uBYTE2_32(value)(( (u8) (((u32)(value) & (0x00FF0000)) >> 0x10)))
+#define uBYTE3_32(value)(( (u8) (((u32)(value) & (0xFF000000)) >> 0x18)))
+
+#define sBYTE0_16(value)(( (u8) (((s16)(value) & (0x000000FF)) >> 0x00)))
+#define sBYTE1_16(value)(( (u8) (((s16)(value) & (0x0000FF00)) >> 0x08)))
+
+#define sBYTE0_32(value)(( (u8) (((s32)(value) & (0x000000FF)) >> 0x00)))
+#define sBYTE1_32(value)(( (u8) (((s32)(value) & (0x0000FF00)) >> 0x08)))
+#define sBYTE2_32(value)(( (u8) (((s32)(value) & (0x00FF0000)) >> 0x10)))
+#define sBYTE3_32(value)(( (u8) (((s32)(value) & (0xFF000000)) >> 0x18)))
+
+#define UsedHeldItem(bank)((((u16*)(&unk_2000000[bank * 2 + 0x160cc]))))
+
+#define RecordAbilitySetField6(ability, fieldValue) \
+(gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability)) \
+
+#define ValidPoke(poke)(((GetMonData(poke, MON_DATA_SPECIES) && !GetMonData(poke, MON_DATA_IS_EGG) && GetMonData(poke, MON_DATA_HP))))
+#define ValidPoke2(poke)((GetMonData(poke, MON_DATA_HP) && GetMonData(poke, MON_DATA_SPECIES) && !GetMonData(poke, MON_DATA_IS_EGG)))
+#define ValidPoke3(poke)(((GetMonData(poke, MON_DATA_SPECIES) && GetMonData(poke, MON_DATA_IS_EGG) != 1 && GetMonData(poke, MON_DATA_HP))))
+
+#define WeatherHasEffect ((!AbilityBattleEffects(ABILITY_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITY_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
+#define TargetTurnDamaged (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special)))
+
+#define HP_ON_SWITCHOUT (((u16*)(0x020160bc)))
+
+static void atk00_attackcanceler(void);
+static void atk01_accuracycheck(void);
+static void atk02_attackstring(void);
+static void atk03_ppreduce(void);
+static void atk04_critcalc(void);
+static void atk05_damagecalc1(void);
+static void atk06_typecalc(void);
+static void atk07_dmg_adjustment(void);
+static void atk08_dmg_adjustment2(void);
+static void atk09_attackanimation(void);
+static void atk0A_waitanimation(void);
+static void atk0B_healthbarupdate(void);
+static void atk0C_datahpupdate(void);
+static void atk0D_critmessage(void);
+static void atk0E_effectiveness_sound(void);
+static void atk0F_resultmessage(void);
+static void atk10_printstring(void);
+static void atk11_printstring_playeronly(void);
+static void atk12_waitmessage(void);
+static void atk13_printfromtable(void);
+static void atk14_printfromtable_playeronly(void);
+static void atk15_seteffectwithchancetarget(void);
+static void atk16_seteffectprimary(void);
+static void atk17_seteffectsecondary(void);
+static void atk18_status_effect_clear(void);
+static void atk19_faint_pokemon(void);
+static void atk1A_faint_animation(void);
+static void atk1B_faint_effects_clear(void);
+static void atk1C_jumpifstatus(void);
+static void atk1D_jumpifstatus2(void);
+static void atk1E_jumpifability(void);
+static void atk1F_jumpifsideaffecting(void);
+static void atk20_jumpifstat(void);
+static void atk21_jumpifstatus3(void);
+static void atk22_jumpiftype(void);
+static void atk23_getexp(void);
+static void atk24(void);
+static void atk25_move_values_cleanup(void);
+static void atk26_set_multihit(void);
+static void atk27_decrement_multihit(void);
+static void atk28_goto(void);
+static void atk29_jumpifbyte(void);
+static void atk2A_jumpifhalfword(void);
+static void atk2B_jumpifword(void);
+static void atk2C_jumpifarrayequal(void);
+static void atk2D_jumpifarraynotequal(void);
+static void atk2E_setbyte(void);
+static void atk2F_addbyte(void);
+static void atk30_subbyte(void);
+static void atk31_copyarray(void);
+static void atk32_copyarray_withindex(void);
+static void atk33_orbyte(void);
+static void atk34_orhalfword(void);
+static void atk35_orword(void);
+static void atk36_bicbyte(void);
+static void atk37_bichalfword(void);
+static void atk38_bicword(void);
+static void atk39_pause(void);
+static void atk3A_waitstate(void);
+static void atk3B_healthbar_update(void);
+static void atk3C_return(void);
+static void atk3D_end(void);
+static void atk3E_end2(void);
+static void atk3F_end3(void);
+static void atk40_jump_if_move_affected_by_protect(void);
+static void atk41_call(void);
+static void atk42_jumpiftype2(void);
+static void atk43_jumpifabilitypresent(void);
+static void atk44(void);
+static void atk45_playanimation(void);
+static void atk46_playanimation2(void);
+static void atk47_setgraphicalstatchangevalues(void);
+static void atk48_playstatchangeanimation(void);
+static void atk49_moveendturn(void);
+static void atk4A_typecalc2(void);
+static void atk4B_return_atk_to_ball(void);
+static void atk4C_copy_poke_data(void);
+static void atk4D_switch_data_update(void);
+static void atk4E_switchin_anim(void);
+static void atk4F_jump_if_cannot_switch(void);
+static void atk50_openpartyscreen(void);
+static void atk51_switch_handle_order(void);
+static void atk52_switch_in_effects(void);
+static void atk53_trainer_slide(void);
+static void atk54_effectiveness_sound(void);
+static void atk55_play_sound(void);
+static void atk56_fainting_cry(void);
+static void atk57(void);
+static void atk58_return_to_ball(void);
+static void atk59_learnmove_inbattle(void);
+static void atk5A(void);
+static void atk5B_80256E0(void);
+static void atk5C_hitanimation(void);
+static void atk5D_getmoneyreward(void);
+static void atk5E_8025A70(void);
+static void atk5F_8025B24(void);
+static void atk60_increment_gamestat(void);
+static void atk61_8025BA4(void);
+static void atk62_08025C6C(void);
+static void atk63_jumptorandomattack(void);
+static void atk64_statusanimation(void);
+static void atk65_status2animation(void);
+static void atk66_chosenstatusanimation(void);
+static void atk67_8025ECC(void);
+static void atk68_80246A0(void);
+static void atk69_dmg_adjustment2(void);
+static void atk6A_removeitem(void);
+static void atk6B_atknameinbuff1(void);
+static void atk6C_lvlbox_display(void);
+static void atk6D_set_sentpokes_values(void);
+static void atk6E_set_atk_to_player0(void);
+static void atk6F_set_visible(void);
+static void atk70_record_ability(void);
+static void atk71_buffer_move_to_learn(void);
+static void atk72_jump_if_can_run_frombattle(void);
+static void atk73_hp_thresholds(void);
+static void atk74_hp_thresholds2(void);
+static void atk75_8026A58(void);
+static void atk76_various(void);
+static void atk77_setprotect(void);
+static void atk78_faintifabilitynotdamp(void);
+static void atk79_setatkhptozero(void);
+static void atk7A_jumpwhiletargetvalid(void);
+static void atk7B_healhalfHP_if_possible(void);
+static void atk7C_8025508(void);
+static void atk7D_set_rain(void);
+static void atk7E_setreflect(void);
+static void atk7F_setseeded(void);
+static void atk80_manipulatedamage(void);
+static void atk81_setrest(void);
+static void atk82_jumpifnotfirstturn(void);
+static void atk83_nop(void);
+static void atk84_jump_if_cant_sleep(void);
+static void atk85_stockpile(void);
+static void atk86_stockpiletobasedamage(void);
+static void atk87_stockpiletohpheal(void);
+static void atk88_negativedamage(void);
+static void atk89_statbuffchange(void);
+static void atk8A_normalisebuffs(void);
+static void atk8B_setbide(void);
+static void atk8C_confuseifrepeatingattackends(void);
+static void atk8D_setmultihit_counter(void);
+static void atk8E_prepare_multihit(void);
+static void atk8F_forcerandomswitch(void);
+static void atk90_conversion_type_change(void);
+static void atk91_givepaydaymoney(void);
+static void atk92_setlightscreen(void);
+static void atk93_ko_move(void);
+static void atk94_gethalfcurrentenemyhp(void);
+static void atk95_setsandstorm(void);
+static void atk96_weatherdamage(void);
+static void atk97_try_infatuation(void);
+static void atk98_status_icon_update(void);
+static void atk99_setmist(void);
+static void atk9A_set_focusenergy(void);
+static void atk9B_transformdataexecution(void);
+static void atk9C_set_substitute(void);
+static void atk9D_copyattack(void);
+static void atk9E_metronome(void);
+static void atk9F_dmgtolevel(void);
+static void atkA0_psywavedamageeffect(void);
+static void atkA1_counterdamagecalculator(void);
+static void atkA2_mirrorcoatdamagecalculator(void);
+static void atkA3_disablelastusedattack(void);
+static void atkA4_setencore(void);
+static void atkA5_painsplitdmgcalc(void);
+static void atkA6_settypetorandomresistance(void);
+static void atkA7_setalwayshitflag(void);
+static void atkA8_copymovepermanently(void);
+static void atkA9_sleeptalk_choose_move(void);
+static void atkAA_set_destinybond(void);
+static void atkAB_DestinyBondFlagUpdate(void);
+static void atkAC_remaininghptopower(void);
+static void atkAD_spite_ppreduce(void);
+static void atkAE_heal_party_status(void);
+static void atkAF_cursetarget(void);
+static void atkB0_set_spikes(void);
+static void atkB1_set_foresight(void);
+static void atkB2_setperishsong(void);
+static void atkB3_rolloutdamagecalculation(void);
+static void atkB4_jumpifconfusedandstatmaxed(void);
+static void atkB5_furycuttercalc(void);
+static void atkB6_happinesstodamagecalculation(void);
+static void atkB7_presentdamagecalculation(void);
+static void atkB8_set_safeguard(void);
+static void atkB9_magnitudedamagecalculation(void);
+static void atkBA_jumpifnopursuitswitchdmg(void);
+static void atkBB_setsunny(void);
+static void atkBC_maxattackhalvehp(void);
+static void atkBD_copyfoestats(void);
+static void atkBE_breakfree(void);
+static void atkBF_set_defense_curl(void);
+static void atkC0_recoverbasedonsunlight(void);
+static void atkC1_hidden_power(void);
+static void atkC2_selectnexttarget(void);
+static void atkC3_setfutureattack(void);
+static void atkC4_beat_up(void);
+static void atkC5_hidepreattack(void);
+static void atkC6_unhidepostattack(void);
+static void atkC7_setminimize(void);
+static void atkC8_sethail(void);
+static void atkC9_jumpifattackandspecialattackcannotfall(void);
+static void atkCA_setforcedtarget(void);
+static void atkCB_setcharge(void);
+static void atkCC_callterrainattack(void);
+static void atkCD_cureifburnedparalysedorpoisoned(void);
+static void atkCE_settorment(void);
+static void atkCF_jumpifnodamage(void);
+static void atkD0_settaunt(void);
+static void atkD1_set_helpinghand(void);
+static void atkD2_swap_items(void);
+static void atkD3_copy_ability(void);
+static void atkD4_wish_effect(void);
+static void atkD5_setroots(void);
+static void atkD6_doubledamagedealtifdamaged(void);
+static void atkD7_setyawn(void);
+static void atkD8_setdamagetohealthdifference(void);
+static void atkD9_scaledamagebyhealthratio(void);
+static void atkDA_abilityswap(void);
+static void atkDB_imprisoneffect(void);
+static void atkDC_setgrudge(void);
+static void atkDD_weightdamagecalculation(void);
+static void atkDE_asistattackselect(void);
+static void atkDF_setmagiccoat(void);
+static void atkE0_setstealstatchange(void);
+static void atkE1_intimidate_string_loader(void);
+static void atkE2_switchout_abilities(void);
+static void atkE3_jumpiffainted(void);
+static void atkE4_getsecretpowereffect(void);
+static void atkE5_pickup(void);
+static void atkE6_castform_change_animation(void);
+static void atkE7_castform_data_change(void);
+static void atkE8_settypebasedhalvers(void);
+static void atkE9_setweatherballtype(void);
+static void atkEA_recycleitem(void);
+static void atkEB_settypetoterrain(void);
+static void atkEC_pursuit_sth(void);
+static void atkED_802B4B4(void);
+static void atkEE_removelightscreenreflect(void);
+static void atkEF_pokeball_catch_calculation(void);
+static void atkF0_copy_caught_poke(void);
+static void atkF1_setpoke_as_caught(void);
+static void atkF2_display_dex_info(void);
+static void atkF3_nickname_caught_poke(void);
+static void atkF4_802BEF0(void);
+static void atkF5_removeattackerstatus1(void);
+static void atkF6_802BF48(void);
+static void atkF7_802BF54(void);
+
+typedef void (*BattleCmdFunc)(void);
+
+const BattleCmdFunc gBattleScriptingCommandsTable[] =
+{
+ atk00_attackcanceler,
+ atk01_accuracycheck,
+ atk02_attackstring,
+ atk03_ppreduce,
+ atk04_critcalc,
+ atk05_damagecalc1,
+ atk06_typecalc,
+ atk07_dmg_adjustment,
+ atk08_dmg_adjustment2,
+ atk09_attackanimation,
+ atk0A_waitanimation,
+ atk0B_healthbarupdate,
+ atk0C_datahpupdate,
+ atk0D_critmessage,
+ atk0E_effectiveness_sound,
+ atk0F_resultmessage,
+ atk10_printstring,
+ atk11_printstring_playeronly,
+ atk12_waitmessage,
+ atk13_printfromtable,
+ atk14_printfromtable_playeronly,
+ atk15_seteffectwithchancetarget,
+ atk16_seteffectprimary,
+ atk17_seteffectsecondary,
+ atk18_status_effect_clear,
+ atk19_faint_pokemon,
+ atk1A_faint_animation,
+ atk1B_faint_effects_clear,
+ atk1C_jumpifstatus,
+ atk1D_jumpifstatus2,
+ atk1E_jumpifability,
+ atk1F_jumpifsideaffecting,
+ atk20_jumpifstat,
+ atk21_jumpifstatus3,
+ atk22_jumpiftype,
+ atk23_getexp,
+ atk24,
+ atk25_move_values_cleanup,
+ atk26_set_multihit,
+ atk27_decrement_multihit,
+ atk28_goto,
+ atk29_jumpifbyte,
+ atk2A_jumpifhalfword,
+ atk2B_jumpifword,
+ atk2C_jumpifarrayequal,
+ atk2D_jumpifarraynotequal,
+ atk2E_setbyte,
+ atk2F_addbyte,
+ atk30_subbyte,
+ atk31_copyarray,
+ atk32_copyarray_withindex,
+ atk33_orbyte,
+ atk34_orhalfword,
+ atk35_orword,
+ atk36_bicbyte,
+ atk37_bichalfword,
+ atk38_bicword,
+ atk39_pause,
+ atk3A_waitstate,
+ atk3B_healthbar_update,
+ atk3C_return,
+ atk3D_end,
+ atk3E_end2,
+ atk3F_end3,
+ atk40_jump_if_move_affected_by_protect,
+ atk41_call,
+ atk42_jumpiftype2,
+ atk43_jumpifabilitypresent,
+ atk44,
+ atk45_playanimation,
+ atk46_playanimation2,
+ atk47_setgraphicalstatchangevalues,
+ atk48_playstatchangeanimation,
+ atk49_moveendturn,
+ atk4A_typecalc2,
+ atk4B_return_atk_to_ball,
+ atk4C_copy_poke_data,
+ atk4D_switch_data_update,
+ atk4E_switchin_anim,
+ atk4F_jump_if_cannot_switch,
+ atk50_openpartyscreen,
+ atk51_switch_handle_order,
+ atk52_switch_in_effects,
+ atk53_trainer_slide,
+ atk54_effectiveness_sound,
+ atk55_play_sound,
+ atk56_fainting_cry,
+ atk57,
+ atk58_return_to_ball,
+ atk59_learnmove_inbattle,
+ atk5A,
+ atk5B_80256E0,
+ atk5C_hitanimation,
+ atk5D_getmoneyreward,
+ atk5E_8025A70,
+ atk5F_8025B24,
+ atk60_increment_gamestat,
+ atk61_8025BA4,
+ atk62_08025C6C,
+ atk63_jumptorandomattack,
+ atk64_statusanimation,
+ atk65_status2animation,
+ atk66_chosenstatusanimation,
+ atk67_8025ECC,
+ atk68_80246A0,
+ atk69_dmg_adjustment2,
+ atk6A_removeitem,
+ atk6B_atknameinbuff1,
+ atk6C_lvlbox_display,
+ atk6D_set_sentpokes_values,
+ atk6E_set_atk_to_player0,
+ atk6F_set_visible,
+ atk70_record_ability,
+ atk71_buffer_move_to_learn,
+ atk72_jump_if_can_run_frombattle,
+ atk73_hp_thresholds,
+ atk74_hp_thresholds2,
+ atk75_8026A58,
+ atk76_various,
+ atk77_setprotect,
+ atk78_faintifabilitynotdamp,
+ atk79_setatkhptozero,
+ atk7A_jumpwhiletargetvalid,
+ atk7B_healhalfHP_if_possible,
+ atk7C_8025508,
+ atk7D_set_rain,
+ atk7E_setreflect,
+ atk7F_setseeded,
+ atk80_manipulatedamage,
+ atk81_setrest,
+ atk82_jumpifnotfirstturn,
+ atk83_nop,
+ atk84_jump_if_cant_sleep,
+ atk85_stockpile,
+ atk86_stockpiletobasedamage,
+ atk87_stockpiletohpheal,
+ atk88_negativedamage,
+ atk89_statbuffchange,
+ atk8A_normalisebuffs,
+ atk8B_setbide,
+ atk8C_confuseifrepeatingattackends,
+ atk8D_setmultihit_counter,
+ atk8E_prepare_multihit,
+ atk8F_forcerandomswitch,
+ atk90_conversion_type_change,
+ atk91_givepaydaymoney,
+ atk92_setlightscreen,
+ atk93_ko_move,
+ atk94_gethalfcurrentenemyhp,
+ atk95_setsandstorm,
+ atk96_weatherdamage,
+ atk97_try_infatuation,
+ atk98_status_icon_update,
+ atk99_setmist,
+ atk9A_set_focusenergy,
+ atk9B_transformdataexecution,
+ atk9C_set_substitute,
+ atk9D_copyattack,
+ atk9E_metronome,
+ atk9F_dmgtolevel,
+ atkA0_psywavedamageeffect,
+ atkA1_counterdamagecalculator,
+ atkA2_mirrorcoatdamagecalculator,
+ atkA3_disablelastusedattack,
+ atkA4_setencore,
+ atkA5_painsplitdmgcalc,
+ atkA6_settypetorandomresistance,
+ atkA7_setalwayshitflag,
+ atkA8_copymovepermanently,
+ atkA9_sleeptalk_choose_move,
+ atkAA_set_destinybond,
+ atkAB_DestinyBondFlagUpdate,
+ atkAC_remaininghptopower,
+ atkAD_spite_ppreduce,
+ atkAE_heal_party_status,
+ atkAF_cursetarget,
+ atkB0_set_spikes,
+ atkB1_set_foresight,
+ atkB2_setperishsong,
+ atkB3_rolloutdamagecalculation,
+ atkB4_jumpifconfusedandstatmaxed,
+ atkB5_furycuttercalc,
+ atkB6_happinesstodamagecalculation,
+ atkB7_presentdamagecalculation,
+ atkB8_set_safeguard,
+ atkB9_magnitudedamagecalculation,
+ atkBA_jumpifnopursuitswitchdmg,
+ atkBB_setsunny,
+ atkBC_maxattackhalvehp,
+ atkBD_copyfoestats,
+ atkBE_breakfree,
+ atkBF_set_defense_curl,
+ atkC0_recoverbasedonsunlight,
+ atkC1_hidden_power,
+ atkC2_selectnexttarget,
+ atkC3_setfutureattack,
+ atkC4_beat_up,
+ atkC5_hidepreattack,
+ atkC6_unhidepostattack,
+ atkC7_setminimize,
+ atkC8_sethail,
+ atkC9_jumpifattackandspecialattackcannotfall,
+ atkCA_setforcedtarget,
+ atkCB_setcharge,
+ atkCC_callterrainattack,
+ atkCD_cureifburnedparalysedorpoisoned,
+ atkCE_settorment,
+ atkCF_jumpifnodamage,
+ atkD0_settaunt,
+ atkD1_set_helpinghand,
+ atkD2_swap_items,
+ atkD3_copy_ability,
+ atkD4_wish_effect,
+ atkD5_setroots,
+ atkD6_doubledamagedealtifdamaged,
+ atkD7_setyawn,
+ atkD8_setdamagetohealthdifference,
+ atkD9_scaledamagebyhealthratio,
+ atkDA_abilityswap,
+ atkDB_imprisoneffect,
+ atkDC_setgrudge,
+ atkDD_weightdamagecalculation,
+ atkDE_asistattackselect,
+ atkDF_setmagiccoat,
+ atkE0_setstealstatchange,
+ atkE1_intimidate_string_loader,
+ atkE2_switchout_abilities,
+ atkE3_jumpiffainted,
+ atkE4_getsecretpowereffect,
+ atkE5_pickup,
+ atkE6_castform_change_animation,
+ atkE7_castform_data_change,
+ atkE8_settypebasedhalvers,
+ atkE9_setweatherballtype,
+ atkEA_recycleitem,
+ atkEB_settypetoterrain,
+ atkEC_pursuit_sth,
+ atkED_802B4B4,
+ atkEE_removelightscreenreflect,
+ atkEF_pokeball_catch_calculation,
+ atkF0_copy_caught_poke,
+ atkF1_setpoke_as_caught,
+ atkF2_display_dex_info,
+ atkF3_nickname_caught_poke,
+ atkF4_802BEF0,
+ atkF5_removeattackerstatus1,
+ atkF6_802BF48,
+ atkF7_802BF54,
+};
+
+struct statFractions{
+ u8 dividend;
+ u8 divisor;
+ u16 pad;
+};
+
+static const struct statFractions gAccuracyStageRatios[] =
+{
+ {33, 100, 0}, // -6
+ {36, 100, 0}, // -5
+ {43, 100, 0}, // -4
+ {50, 100, 0}, // -3
+ {60, 100, 0}, // -2
+ {75, 100, 0}, // -1
+ {1, 1, 0}, // 0
+ {133, 100, 0}, // +1
+ {166, 100, 0}, // +2
+ {2, 1, 0}, // +3
+ {233, 100, 0}, // +4
+ {133, 50, 0}, // +5
+ {3, 1, 0}, // +6
+};
+//The chance is 1/N for each stage.
+
+static const u16 gCriticalHitChance[] = {16, 8, 4, 3, 2};
+
+static const u32 gStatusFlagsForMoveEffects[] =
+{
+ 0x00000000,
+ 0x00000007,
+ 0x00000008,
+ 0x00000010,
+ 0x00000020,
+ 0x00000040,
+ 0x00000080,
+ 0x00000007,
+ 0x00000008,
+ 0x00000000,
+ 0x00000070,
+ 0x00000000,
+ 0x00001000,
+ 0x0000E000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00400000,
+ 0x00000000,
+ 0x00000000,
+ 0x04000000,
+ 0x08000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000C00,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000
+};
+
+extern const u8 BattleScript_1D963E[];
+extern const u8 BattleScript_1D965A[];
+extern const u8 BattleScript_1D9669[];
+extern const u8 BattleScript_1D9678[];
+extern const u8 BattleScript_1D9687[];
+extern const u8 BattleScript_1D969D[];
+extern const u8 BattleScript_1D96BA[];
+extern const u8 BattleScript_1D9696[];
+extern const u8 BattleScript_1D96B1[];
+extern const u8 BattleScript_1D96AA[];
+extern const u8 BattleScript_1D96C8[];
+
+const u8* const gMoveEffectBS_Ptrs[] =
+{
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D965A,
+ BattleScript_1D9669,
+ BattleScript_1D9678,
+ BattleScript_1D9687,
+ BattleScript_1D969D,
+ BattleScript_1D96BA,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D9696,
+ BattleScript_1D96AA,
+ BattleScript_1D963E,
+ BattleScript_1D96B1,
+ BattleScript_1D96C8,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D963E,
+ BattleScript_1D96C8
+};
+
+const u8 sUnreferencedBitMask1[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F};
+
+const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPD};
+
+static const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF};
+
+static const u16 sUnknown_081FACFE[] = //banned moves to copy
+{
+ MOVE_METRONOME,
+ MOVE_STRUGGLE,
+ MOVE_SKETCH,
+ MOVE_MIMIC,
+ 0xFFFE,
+ MOVE_COUNTER,
+ MOVE_MIRROR_COAT,
+ MOVE_PROTECT,
+ MOVE_DETECT,
+ MOVE_ENDURE,
+ MOVE_DESTINY_BOND,
+ MOVE_SLEEP_TALK,
+ MOVE_THIEF,
+ MOVE_FOLLOW_ME,
+ MOVE_SNATCH,
+ MOVE_HELPING_HAND,
+ MOVE_COVET,
+ MOVE_TRICK,
+ MOVE_FOCUS_PUNCH,
+ 0xFFFF
+};
+
+static const u8 sUnknown_081FAD26[] =
+{
+ 1, 200,
+ 4, 150,
+ 9, 100,
+ 16, 80,
+ 32, 40,
+ 48, 20
+};
+
+static const u16 sNaturePowerMoves[] =
+{
+ MOVE_STUN_SPORE,
+ MOVE_RAZOR_LEAF,
+ MOVE_EARTHQUAKE,
+ MOVE_HYDRO_PUMP,
+ MOVE_SURF,
+ MOVE_BUBBLE_BEAM,
+ MOVE_ROCK_SLIDE,
+ MOVE_SHADOW_BALL,
+ MOVE_SWIFT,
+ MOVE_SWIFT
+};
+
+//weight-based damage table for Low Kick
+//format: min. weight (hectograms), base power
+static const u16 sWeightDamage[] =
+{
+ 100, 20,
+ 250, 40,
+ 500, 60,
+ 1000, 80,
+ 2000, 100,
+ -1, -1
+};
+
+static const u16 sPickupItems[] =
+{
+ ITEM_SUPER_POTION, 30,
+ ITEM_FULL_HEAL, 40,
+ ITEM_ULTRA_BALL, 50,
+ ITEM_RARE_CANDY, 60,
+ ITEM_FULL_RESTORE, 70,
+ ITEM_REVIVE, 80,
+ ITEM_NUGGET, 90,
+ ITEM_PROTEIN, 95,
+ ITEM_PP_UP, 99,
+ ITEM_KINGS_ROCK, 1
+};
+
+static const u8 sTerrainToType[] =
+{
+ TYPE_GRASS, // tall grass
+ TYPE_GRASS, // long grass
+ TYPE_GROUND, // sand
+ TYPE_WATER, // underwater
+ TYPE_WATER, // water
+ TYPE_WATER, // pond water
+ TYPE_ROCK , // rock
+ TYPE_ROCK , // cave
+ TYPE_NORMAL, // building
+ TYPE_NORMAL, // plain
+};
+
+static const u8 sBallCatchBonuses[] =
+{
+ 20, 15, 10, 15 //Ultra, Great, Poke, Safari
+};
+
+static void atk00_attackcanceler(void)
+{
+ int i;
+ if (gBattleOutcome)
+ {
+ gFightStateTracker = 0xC;
+ return;
+ }
+ if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
+ {
+ gHitMarker |= HITMARKER_x80000;
+ gBattlescriptCurrInstr = BattleScript_EndTurn;
+ return;
+ }
+ if (CantUseMove())
+ return;
+ if (AbilityBattleEffects(2, gBankTarget, 0, 0, 0))
+ return;
+ if (!gBattleMons[gBankAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & 0x800200)
+ && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS))
+ {
+ gBattlescriptCurrInstr = BattleScript_NoPPForMove;
+ gBattleMoveFlags |= MOVE_MISSED;
+ return;
+ }
+ gHitMarker &= ~(HITMARKER_x800000);
+ if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS))
+ {
+ u8 disobedient = IsPokeDisobedient();
+ asm("":::"r0"); //It's impossible to match
+ asm("":::"r1");
+ if ((disobedient))
+ {
+ if (disobedient == 2) {gHitMarker |= HITMARKER_OBEYS;}
+ else {gBattleMoveFlags |= MOVE_MISSED;}
+ return;
+ }
+ }
+ gHitMarker |= HITMARKER_OBEYS;
+ if (gProtectStructs[gBankTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED)
+ {
+ PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT);
+ gProtectStructs[gBankTarget].bounceMove = 0;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_MagicCoatBounce;
+ return;
+ }
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if ((gProtectStructs[gTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED)
+ {
+ PressurePPLose(gBankAttacker, gTurnOrder[i], MOVE_SNATCH);
+ gProtectStructs[gTurnOrder[i]].stealMove = 0;
+ BATTLE_STRUCT->scriptingActive = gTurnOrder[i];
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_SnatchedMove;
+ return;
+ }
+ }
+ if (gSpecialStatuses[gBankTarget].lightningRodRedirected)
+ {
+ gSpecialStatuses[gBankTarget].lightningRodRedirected = 0;
+ gLastUsedAbility = ABILITY_LIGHTNING_ROD;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_TookAttack;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ else if (TargetProtectAffected &&
+ (gCurrentMove != MOVE_CURSE || (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST)) &&
+ ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS))))
+ {
+ CancelMultiTurnMoves(gBankAttacker);
+ gBattleMoveFlags |= MOVE_MISSED;
+ gMoveHitWith[gBankTarget] = 0;
+ gUnknown_02024C44[gBankTarget] = 0;
+ gBattleCommunication[6] = 1;
+ gBattlescriptCurrInstr++;
+ }
+ else
+ gBattlescriptCurrInstr++;
+}
+
+static void JumpIfMoveFailed(u8 adder, u16 move)
+{
+ void* to_store = gBattlescriptCurrInstr + adder;
+ if (gBattleMoveFlags & MOVE_NO_EFFECT)
+ {
+ gMoveHitWith[gBankTarget] = 0;
+ gUnknown_02024C44[gBankTarget] = 0;
+ to_store = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ DestinyBondFlagUpdate();
+ if (AbilityBattleEffects(3, gBankTarget, 0, 0, move))
+ return;
+ }
+ gBattlescriptCurrInstr = to_store;
+}
+
+static void atk40_jump_if_move_affected_by_protect(void)
+{
+ if (TargetProtectAffected)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ JumpIfMoveFailed(5, 0);
+ gBattleCommunication[6] = 1;
+ }
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static bool8 JumpIfMoveAffectedByProtect(u16 move)
+{
+ bool8 affected = 0;
+ if (TargetProtectAffected)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ JumpIfMoveFailed(7, move);
+ gBattleCommunication[6] = 1;
+ affected = 1;
+ }
+ return affected;
+}
+
+static bool8 AccuracyCalcHelper(u16 move)
+{
+ if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker)
+ {
+ JumpIfMoveFailed(7, move);
+ return 1;
+ }
+
+ if (!(gHitMarker & HITMARKER_IGNORE_ON_AIR) && gStatuses3[gBankTarget] & STATUS3_ON_AIR)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ JumpIfMoveFailed(7, move);
+ return 1;
+ }
+ gHitMarker &= ~HITMARKER_IGNORE_ON_AIR;
+
+ if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBankTarget] & STATUS3_UNDERGROUND)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ JumpIfMoveFailed(7, move);
+ return 1;
+ }
+ gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND;
+
+ if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBankTarget] & STATUS3_UNDERWATER)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ JumpIfMoveFailed(7, move);
+ return 1;
+ }
+ gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER;
+
+ if ((WeatherHasEffect && (gBattleWeather & WEATHER_RAINY) && gBattleMoves[move].effect == EFFECT_THUNDER)
+ || (gBattleMoves[move].effect == EFFECT_ALWAYS_HIT || gBattleMoves[move].effect == EFFECT_VITAL_THROW))
+ {
+ JumpIfMoveFailed(7, move);
+ return 1;
+ }
+ return 0;
+}
+
+static void atk01_accuracycheck(void)
+{
+ u16 move = BSScriptRead16(gBattlescriptCurrInstr + 5);
+ if (move == 0xFFFE || move == 0xFFFF)
+ {
+ if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker)
+ gBattlescriptCurrInstr += 7;
+ else if (gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else if (!JumpIfMoveAffectedByProtect(0))
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ u8 type; s8 buff; u8 MoveAcc; u16 calc; u8 hold_effect; u8 quality;
+ if (move == 0) {move = gCurrentMove;}
+
+ if (BATTLE_STRUCT->dynamicMoveType)
+ type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ else
+ type = gBattleMoves[move].type;
+
+ if (JumpIfMoveAffectedByProtect(move))
+ return;
+ if (AccuracyCalcHelper(move))
+ return;
+
+ if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT)
+ {
+ u8 acc = gBattleMons[gBankAttacker].statStages[ACC_BUFF];
+ buff = acc;
+ }
+ else
+ {
+ u8 acc = gBattleMons[gBankAttacker].statStages[ACC_BUFF];
+ buff = acc + 6 - gBattleMons[gBankTarget].statStages[EVASION_BUFF];
+ }
+
+ if (buff < 0) {buff = 0;}
+ if (buff > 0xC) {buff = 0xC;}
+
+ MoveAcc = gBattleMoves[move].accuracy;
+ //check Thunder on sunny weather
+ if (WeatherHasEffect && gBattleWeather & WEATHER_SUNNY && gBattleMoves[move].effect == EFFECT_THUNDER)
+ MoveAcc = 50;
+
+ calc = gAccuracyStageRatios[buff].dividend * MoveAcc;
+ calc /= gAccuracyStageRatios[buff].divisor;
+
+ if (gBattleMons[gBankAttacker].ability == ABILITY_COMPOUND_EYES)
+ calc = (calc * 130) / 100; //1.3 compound eyes boost
+ if (WeatherHasEffect && gBattleMons[gBankTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORMY)
+ calc = (calc * 80) / 100; //1.2 sand veil loss;
+ if (gBattleMons[gBankAttacker].ability == ABILITY_HUSTLE && type < 9)
+ calc = (calc * 80) / 100; //1.2 hustle loss;
+
+ if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
+ hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ else
+ {
+ hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
+ quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item);
+ }
+
+ gStringBank = gBankTarget;
+
+ if (hold_effect == HOLD_EFFECT_EVASION_UP)
+ calc = (calc * (100 - quality)) / 100;
+
+ //final calculation
+ if ((Random() % 100 + 1) > calc)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20))
+ gBattleCommunication[6] = 2;
+ else
+ gBattleCommunication[6] = 0;
+ b_wonderguard_and_levitate();
+
+ }
+ JumpIfMoveFailed(7, move);
+ }
+}
+
+static void atk02_attackstring(void)
+{
+ if (gBattleExecBuffer)
+ return;
+ if (!(gHitMarker & (HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED)))
+ {
+ PrepareStringBattle(4, gBankAttacker);
+ gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED;
+ }
+ gBattlescriptCurrInstr++;
+ gBattleCommunication[MSG_DISPLAY] = 0;
+}
+
+static void atk03_ppreduce(void)
+{
+ int to_deduct = 1;
+ if (gBattleExecBuffer)
+ return;
+ if (!gSpecialStatuses[gBankAttacker].flag20)
+ {
+ switch (gBattleMoves[gCurrentMove].target)
+ {
+ case TARGET_FOES_AND_ALLY:
+ to_deduct += AbilityBattleEffects(ABILITT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0);
+ break;
+ case TARGET_BOTH:
+ case TARGET_OPPONENTS_FIELD:
+ to_deduct += AbilityBattleEffects(ABILITY_COUNT_OTHER_SIDE, gBankAttacker, ABILITY_PRESSURE, 0, 0);
+ break;
+ default:
+ if (gBankAttacker != gBankTarget && gBattleMons[gBankTarget].ability == ABILITY_PRESSURE)
+ to_deduct++;
+ break;
+ }
+ }
+ if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBankAttacker].pp[gCurrMovePos])
+ {
+ gProtectStructs[gBankAttacker].notFirstStrike = 1;
+ if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > to_deduct)
+ gBattleMons[gBankAttacker].pp[gCurrMovePos] -= to_deduct;
+ else
+ gBattleMons[gBankAttacker].pp[gCurrMovePos] = 0;
+
+ if (!(gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED)
+ && !((gDisableStructs[gBankAttacker].unk18_b) & gBitTable[gCurrMovePos]))
+ {
+ gActiveBank = gBankAttacker;
+ EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBankAttacker].pp[gCurrMovePos]);
+ MarkBufferBankForExecution(gBankAttacker);
+ }
+ }
+ gHitMarker &= ~(HITMARKER_NO_PPDEDUCT);
+ gBattlescriptCurrInstr++;
+}
+
+static void atk04_critcalc(void)
+{
+ u8 hold_effect; u16 item; u16 crit_chance; int adderv3, adderv5, adderv6, adderv7, adderv8, adderv9, adderv10, adderv11; u16 adderv12;
+ item = gBattleMons[gBankAttacker].item;
+ if (item == ITEM_ENIGMA_BERRY)
+ hold_effect = gEnigmaBerries[gBankAttacker].holdEffect;
+ else
+ hold_effect = ItemId_GetHoldEffect(item);
+
+ gStringBank = gBankAttacker;
+
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY)
+ adderv3 = 2;
+ else
+ adderv3 = 0;
+
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) {adderv3++;}
+ adderv5 = adderv3;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) {adderv5 = adderv3 + 1;}
+
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) {adderv5++;}
+ adderv6 = adderv5;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) {adderv6 = adderv5 + 1;}
+
+ adderv7 = 0;
+ if (hold_effect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) {adderv7 = 1;}
+ adderv8 = 2 * adderv7;
+ adderv9 = 0;
+ if (hold_effect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD) {adderv9 = 1;}
+ adderv11 = 2 * adderv9;
+ if (hold_effect == HOLD_EFFECT_SCOPE_LENS)
+ {adderv10 = 1 + adderv6 + adderv8; adderv12 = adderv10 + adderv11;}
+ else
+ {adderv10 = adderv6 + adderv8; adderv12 = adderv10 + adderv11;}
+
+ crit_chance = adderv12;
+
+ if (crit_chance > 4) {crit_chance = 4;}
+
+ if ((gBattleMons[gBankTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBankTarget].ability != ABILITY_SHELL_ARMOR)
+ && !(gStatuses3[gBankAttacker] & STATUS3_CANT_SCORE_A_CRIT)
+ && !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE))
+ && !(Random() % gCriticalHitChance[crit_chance]))
+ gCritMultiplier = 2;
+
+ else
+ gCritMultiplier = 1;
+ gBattlescriptCurrInstr++;
+}
+
+static void atk05_damagecalc1(void)
+{
+ u16 side_hword = gSideAffecting[GetBankIdentity(gBankTarget) & 1];
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove,
+ side_hword, gDynamicBasePower,
+ BATTLE_STRUCT->dynamicMoveType, gBankAttacker, gBankTarget);
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier;
+
+ if (gStatuses3[gBankAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ gBattleMoveDamage *= 2;
+ if (gProtectStructs[gBankAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+
+ gBattlescriptCurrInstr++;
+}
+
+void AI_CalcDmg(u8 BankAtk, u8 BankDef)
+{
+ u16 side_hword = gSideAffecting[GetBankIdentity(BankDef) & 1];
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[BankAtk], &gBattleMons[BankDef], gCurrentMove,
+ side_hword, gDynamicBasePower,
+ BATTLE_STRUCT->dynamicMoveType, BankAtk, BankDef);
+ gDynamicBasePower = 0;
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier;
+
+ if (gStatuses3[BankAtk] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ gBattleMoveDamage *= 2;
+ if (gProtectStructs[BankAtk].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+}
+
+static void ModulateDmgByType(u8 multiplier)
+{
+ gBattleMoveDamage = gBattleMoveDamage * multiplier / 10;
+ if (gBattleMoveDamage == 0 && multiplier != 0) {gBattleMoveDamage = 1;}
+
+ switch (multiplier)
+ {
+ case 0: //no effect
+ gBattleMoveFlags |= MOVE_NOTAFFECTED;
+ gBattleMoveFlags &= ~MOVE_NOTVERYEFFECTIVE;
+ gBattleMoveFlags &= ~MOVE_SUPEREFFECTIVE;
+ break;
+ case 5: //not very effecting
+ if (gBattleMoves[gCurrentMove].power && !(gBattleMoveFlags & MOVE_NO_EFFECT))
+ {
+ if (gBattleMoveFlags & MOVE_SUPEREFFECTIVE)
+ gBattleMoveFlags &= ~MOVE_SUPEREFFECTIVE;
+ else
+ gBattleMoveFlags |= MOVE_NOTVERYEFFECTIVE;
+ }
+ break;
+ case 20: //super effective
+ if (gBattleMoves[gCurrentMove].power && !(gBattleMoveFlags & MOVE_NO_EFFECT))
+ {
+ if (gBattleMoveFlags & MOVE_NOTVERYEFFECTIVE)
+ gBattleMoveFlags &= ~MOVE_NOTVERYEFFECTIVE;
+ else
+ gBattleMoveFlags |= MOVE_SUPEREFFECTIVE;
+ }
+ break;
+ }
+}
+
+static void atk06_typecalc(void)
+{
+ int i = 0;
+ u8 move_type;
+ if (gCurrentMove == MOVE_STRUGGLE) {goto END;}
+
+ if (BATTLE_STRUCT->dynamicMoveType)
+ move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ else
+ move_type = gBattleMoves[gCurrentMove].type;
+
+ //check stab
+ if (gBattleMons[gBankAttacker].type1 == move_type || gBattleMons[gBankAttacker].type2 == move_type)
+ {
+ gBattleMoveDamage = gBattleMoveDamage * 15;
+ gBattleMoveDamage = gBattleMoveDamage / 10;
+ }
+
+ if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND)
+ {
+ gLastUsedAbility = gBattleMons[gBankTarget].ability;
+ gBattleMoveFlags |= (MOVE_MISSED | MOVE_NOTAFFECTED);
+ gMoveHitWith[gBankTarget] = 0;
+ gUnknown_02024C44[gBankTarget] = 0;
+ gBattleCommunication[6] = move_type;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ else
+ {
+ while (gTypeEffectiveness[i]!= TYPE_ENDTABLE)
+ {
+ if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) {break;}
+ else {i += 3; continue;}
+ }
+
+ if (gTypeEffectiveness[i] == move_type)
+ {
+ //check type1
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1)
+ ModulateDmgByType(gTypeEffectiveness[i + 2]);
+ //check type2
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 &&
+ gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2)
+ ModulateDmgByType(gTypeEffectiveness[i + 2]);
+ }
+ i += 3;
+ }
+ }
+
+ if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2 &&
+ (!(gBattleMoveFlags & MOVE_SUPEREFFECTIVE) || ((gBattleMoveFlags & (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE)) == (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE))) &&
+ gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gBattleMoveFlags |= MOVE_MISSED;
+ gMoveHitWith[gBankTarget] = 0;
+ gUnknown_02024C44[gBankTarget] = 0;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ if (gBattleMoveFlags & MOVE_NOTAFFECTED)
+ gProtectStructs[gBankAttacker].notEffective = 1;
+
+ END:
+ gBattlescriptCurrInstr++;
+}
+
+static void b_wonderguard_and_levitate(void)
+{
+ u8 flags = 0;
+ int i = 0;
+ u8 move_type;
+ if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power) {return;}
+
+ if (BATTLE_STRUCT->dynamicMoveType)
+ move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ else
+ move_type = gBattleMoves[gCurrentMove].type;
+
+ if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND)
+ {
+ RecordAbilitySetField6(ABILITY_LEVITATE, move_type);
+ return;
+ }
+
+ while (gTypeEffectiveness[i]!= TYPE_ENDTABLE)
+ {
+ if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) {break;}
+ else {i += 3; continue;}
+ }
+
+ if (gTypeEffectiveness[i] == move_type)
+ {
+ //check no effect
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 0)
+ {
+ gBattleMoveFlags |= MOVE_NOTAFFECTED;
+ gProtectStructs[gBankAttacker].notEffective = 1;
+ }
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 &&
+ gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 &&
+ gTypeEffectiveness[i + 2] == 0)
+ {
+ gBattleMoveFlags |= MOVE_NOTAFFECTED;
+ gProtectStructs[gBankAttacker].notEffective = 1;
+ }
+
+ //check super effective
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 20)
+ { flags |= 1;}
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 &&
+ gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 &&
+ gTypeEffectiveness[i + 2] == 20)
+ { flags |= 1;}
+
+ //check not very effective
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 5)
+ { flags |= 2;}
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 &&
+ gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 &&
+ gTypeEffectiveness[i + 2] == 5)
+ { flags |= 2;}
+ }
+ i += 3;
+ }
+
+ if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2)
+ {
+ register u8 three asm("r0") = (1 | 2);
+ if (!((flags & three) == 1) && gBattleMoves[gCurrentMove].power)
+ {
+ RecordAbilitySetField6(ABILITY_WONDER_GUARD, 3);
+ }
+ }
+}
+
+static void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags) //a literal copy of the ModulateDmgbyType1 with different args...
+{
+ gBattleMoveDamage = gBattleMoveDamage * multiplier / 10;
+ if (gBattleMoveDamage == 0 && multiplier != 0) {gBattleMoveDamage = 1;}
+
+ switch (multiplier)
+ {
+ case 0: //no effect
+ *flags |= MOVE_NOTAFFECTED;
+ *flags &= ~MOVE_NOTVERYEFFECTIVE;
+ *flags &= ~MOVE_SUPEREFFECTIVE;
+ break;
+ case 5: //not very effecting
+ if (gBattleMoves[move].power && !(*flags & MOVE_NO_EFFECT))
+ {
+ if (*flags & MOVE_SUPEREFFECTIVE)
+ *flags &= ~MOVE_SUPEREFFECTIVE;
+ else
+ *flags |= MOVE_NOTVERYEFFECTIVE;
+ }
+ break;
+ case 20: //super effective
+ if (gBattleMoves[move].power && !(*flags & MOVE_NO_EFFECT))
+ {
+ if (*flags & MOVE_NOTVERYEFFECTIVE)
+ *flags &= ~MOVE_NOTVERYEFFECTIVE;
+ else
+ *flags |= MOVE_SUPEREFFECTIVE;
+ }
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
+{
+ int i = 0;
+ u8 flags = 0;
+ u8 move_type;
+ if (move == MOVE_STRUGGLE) {return 0;}
+
+ move_type = gBattleMoves[move].type;
+
+ //check stab
+ if (gBattleMons[bank_atk].type1 == move_type || gBattleMons[bank_atk].type2 == move_type)
+ {
+ gBattleMoveDamage = gBattleMoveDamage * 15;
+ gBattleMoveDamage = gBattleMoveDamage / 10;
+ }
+
+ if (gBattleMons[bank_def].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND)
+ {
+ flags |= (MOVE_MISSED | MOVE_NOTAFFECTED);
+ }
+ else
+ {
+ while (gTypeEffectiveness[i]!= TYPE_ENDTABLE)
+ {
+ if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[bank_def].status2 & STATUS2_FORESIGHT) {break;}
+ else {i += 3; continue;}
+ }
+
+ else if (gTypeEffectiveness[i] == move_type)
+ {
+ //check type1
+ if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type1)
+ ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags);
+ //check type2
+ if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type2 &&
+ gBattleMons[bank_def].type1 != gBattleMons[bank_def].type2)
+ ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags);
+ }
+ i += 3;
+ }
+ }
+
+ if (gBattleMons[bank_def].ability == ABILITY_WONDER_GUARD && !(flags & MOVE_MISSED) &&
+ AttacksThisTurn(bank_atk, move) == 2 &&
+ (!(flags & MOVE_SUPEREFFECTIVE) || ((flags & (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE)) == (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE))) &&
+ gBattleMoves[move].power)
+ {
+ flags |= MOVE_MISSED;
+ }
+ return flags;
+}
+#else
+__attribute__((naked))
+u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x14\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r10, r0\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ str r1, [sp, 0x4]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ mov r9, r2\n\
+ movs r7, 0\n\
+ mov r0, sp\n\
+ strb r7, [r0]\n\
+ mov r0, r10\n\
+ cmp r0, 0xA5\n\
+ bne _0801D2AE\n\
+ movs r0, 0\n\
+ b _0801D43A\n\
+ _0801D2AE:\n\
+ ldr r1, _0801D31C @ =gBattleMoves\n\
+ mov r3, r10\n\
+ lsls r2, r3, 1\n\
+ adds r0, r2, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ str r0, [sp, 0x8]\n\
+ ldr r1, _0801D320 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ ldr r3, [sp, 0x4]\n\
+ muls r0, r3\n\
+ adds r3, r0, r1\n\
+ adds r0, r3, 0\n\
+ adds r0, 0x21\n\
+ ldrb r0, [r0]\n\
+ str r2, [sp, 0xC]\n\
+ adds r5, r1, 0\n\
+ ldr r1, [sp, 0x8]\n\
+ cmp r0, r1\n\
+ beq _0801D2E2\n\
+ adds r0, r3, 0\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r1\n\
+ bne _0801D2F4\n\
+ _0801D2E2:\n\
+ ldr r4, _0801D324 @ =gBattleMoveDamage\n\
+ ldr r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ subs r0, r1\n\
+ str r0, [r4]\n\
+ movs r1, 0xA\n\
+ bl __divsi3\n\
+ str r0, [r4]\n\
+ _0801D2F4:\n\
+ movs r0, 0x58\n\
+ mov r2, r9\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, r5\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1A\n\
+ bne _0801D328\n\
+ ldr r3, [sp, 0x8]\n\
+ cmp r3, 0x4\n\
+ bne _0801D328\n\
+ movs r1, 0x9\n\
+ mov r0, sp\n\
+ ldrb r0, [r0]\n\
+ orrs r0, r1\n\
+ mov r1, sp\n\
+ strb r0, [r1]\n\
+ b _0801D3DC\n\
+ .align 2, 0\n\
+ _0801D31C: .4byte gBattleMoves\n\
+ _0801D320: .4byte gBattleMons\n\
+ _0801D324: .4byte gBattleMoveDamage\n\
+ _0801D328:\n\
+ ldr r1, _0801D344 @ =gTypeEffectiveness\n\
+ adds r0, r7, r1\n\
+ ldrb r0, [r0]\n\
+ adds r2, r1, 0\n\
+ cmp r0, 0xFF\n\
+ beq _0801D3DC\n\
+ cmp r0, 0xFE\n\
+ bne _0801D34C\n\
+ movs r0, 0x58\n\
+ mov r1, r9\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ b _0801D3CA\n\
+ .align 2, 0\n\
+ _0801D344: .4byte gTypeEffectiveness\n\
+ _0801D348:\n\
+ adds r7, 0x3\n\
+ b _0801D3B6\n\
+ _0801D34C:\n\
+ ldr r6, _0801D44C @ =gTypeEffectiveness\n\
+ adds r0, r7, r6\n\
+ ldrb r0, [r0]\n\
+ ldr r2, [sp, 0x8]\n\
+ cmp r0, r2\n\
+ bne _0801D3B0\n\
+ adds r1, r7, 0x1\n\
+ adds r1, r6\n\
+ ldr r3, _0801D450 @ =gBattleMons\n\
+ mov r8, r3\n\
+ movs r3, 0x58\n\
+ mov r0, r9\n\
+ muls r0, r3\n\
+ mov r2, r8\n\
+ adds r5, r0, r2\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x21\n\
+ ldrb r4, [r1]\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ bne _0801D388\n\
+ adds r0, r7, 0x2\n\
+ adds r0, r6\n\
+ ldrb r0, [r0]\n\
+ mov r1, r10\n\
+ mov r2, sp\n\
+ str r3, [sp, 0x10]\n\
+ bl ModulateDmgByType2\n\
+ ldr r3, [sp, 0x10]\n\
+ _0801D388:\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ bne _0801D3B0\n\
+ ldr r0, _0801D454 @ =gBankTarget\n\
+ ldrb r0, [r0]\n\
+ muls r0, r3\n\
+ add r0, r8\n\
+ adds r0, 0x21\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r4\n\
+ beq _0801D3B0\n\
+ adds r0, r7, 0x2\n\
+ adds r0, r6\n\
+ ldrb r0, [r0]\n\
+ mov r1, r10\n\
+ mov r2, sp\n\
+ bl ModulateDmgByType2\n\
+ _0801D3B0:\n\
+ adds r7, 0x3\n\
+ ldr r5, _0801D450 @ =gBattleMons\n\
+ ldr r2, _0801D44C @ =gTypeEffectiveness\n\
+ _0801D3B6:\n\
+ adds r0, r7, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xFF\n\
+ beq _0801D3DC\n\
+ cmp r0, 0xFE\n\
+ bne _0801D34C\n\
+ movs r0, 0x58\n\
+ mov r3, r9\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ _0801D3CA:\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 22\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801D348\n\
+ _0801D3DC:\n\
+ movs r0, 0x58\n\
+ mov r1, r9\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r0, r5\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x19\n\
+ bne _0801D436\n\
+ mov r0, sp\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801D436\n\
+ ldr r0, [sp, 0x4]\n\
+ mov r1, r10\n\
+ bl AttacksThisTurn\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ cmp r1, 0x2\n\
+ bne _0801D436\n\
+ mov r0, sp\n\
+ ldrb r3, [r0]\n\
+ adds r0, r1, 0\n\
+ ands r0, r3\n\
+ cmp r0, 0\n\
+ beq _0801D41E\n\
+ movs r0, 0x6\n\
+ ands r0, r3\n\
+ cmp r0, 0x6\n\
+ bne _0801D436\n\
+ _0801D41E:\n\
+ ldr r0, _0801D458 @ =gBattleMoves\n\
+ ldr r1, [sp, 0xC]\n\
+ add r1, r10\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0\n\
+ beq _0801D436\n\
+ mov r0, sp\n\
+ movs r1, 0x1\n\
+ orrs r1, r3\n\
+ strb r1, [r0]\n\
+ _0801D436:\n\
+ mov r0, sp\n\
+ ldrb r0, [r0]\n\
+ _0801D43A:\n\
+ add sp, 0x14\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+ _0801D44C: .4byte gTypeEffectiveness\n\
+ _0801D450: .4byte gBattleMons\n\
+ _0801D454: .4byte gBankTarget\n\
+ _0801D458: .4byte gBattleMoves\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+u8 AI_TypeCalc(u16 move, u16 species, u8 ability)
+{
+ int i = 0;
+ u8 flags = 0;
+ u8 type1 = gBaseStats[species].type1, type2 = gBaseStats[species].type2, move_type;
+ if (move == MOVE_STRUGGLE) {return 0;}
+
+ move_type = gBattleMoves[move].type;
+
+ if (ability == ABILITY_LEVITATE && move_type == TYPE_GROUND)
+ flags = MOVE_MISSED | MOVE_NOTAFFECTED;
+ else
+ {
+ while (gTypeEffectiveness[i]!= TYPE_ENDTABLE)
+ {
+ if (gTypeEffectiveness[i] == TYPE_FORESIGHT) {i += 3; continue;}
+
+ if (gTypeEffectiveness[i] == move_type)
+ {
+ //check type1
+ if (gTypeEffectiveness[i + 1] == type1)
+ ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags);
+ //check type2
+ if (gTypeEffectiveness[i + 1] == type2 && gBattleMons[gBankTarget].type1 != type2) //gf you morons, you should check if (type1 != type2)...
+ ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags);
+ }
+ i += 3;
+ }
+ }
+ if (ability == ABILITY_WONDER_GUARD &&
+ (!(flags & MOVE_SUPEREFFECTIVE) || ((flags & (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE)) == (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE))) &&
+ gBattleMoves[move].power)
+ flags |= MOVE_NOTAFFECTED;
+ return flags;
+}
+
+static inline void RandDmgMultiplier(void)
+{
+ u16 rand = Random();
+ u16 multiplier = 100 - (rand & 0xF);
+ if (gBattleMoveDamage)
+ {
+ gBattleMoveDamage *= multiplier;
+ gBattleMoveDamage /= 100;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ }
+}
+
+void Unused_RandDmgMultiplier(void)
+{
+ RandDmgMultiplier();
+}
+
+static void atk07_dmg_adjustment(void)
+{
+ u8 hold_effect, quality;
+ RandDmgMultiplier();
+ if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
+ hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ else
+ {
+ hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
+ quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item);
+ }
+
+ gStringBank = gBankTarget;
+
+ if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality)
+ {
+ RecordItemBattle(gBankTarget, hold_effect);
+ gSpecialStatuses[gBankTarget].focusBanded = 1;
+ }
+ if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE)
+ goto END;
+ if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBankTarget].endured
+ && !gSpecialStatuses[gBankTarget].focusBanded)
+ goto END;
+
+ if (gBattleMons[gBankTarget].hp > gBattleMoveDamage)
+ goto END;
+
+ gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1;
+
+ if (gProtectStructs[gBankTarget].endured)
+ {
+ gBattleMoveFlags |= MOVE_ENDURED;
+ goto END;
+ }
+ if (gSpecialStatuses[gBankTarget].focusBanded)
+ {
+ gBattleMoveFlags |= MOVE_HANGEDON;
+ gLastUsedItem = gBattleMons[gBankTarget].item;
+ }
+
+ END:
+ gBattlescriptCurrInstr++;
+}
+
+static void atk08_dmg_adjustment2(void) //literally the same as 0x7 except it doesn't check for false swipe move effect...
+{
+ u8 hold_effect, quality;
+ RandDmgMultiplier();
+ if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
+ hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ else
+ {
+ hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
+ quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item);
+ }
+
+ gStringBank = gBankTarget;
+
+ if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality)
+ {
+ RecordItemBattle(gBankTarget, hold_effect);
+ gSpecialStatuses[gBankTarget].focusBanded = 1;
+ }
+ if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE)
+ goto END;
+ if (!gProtectStructs[gBankTarget].endured
+ && !gSpecialStatuses[gBankTarget].focusBanded)
+ goto END;
+
+ if (gBattleMons[gBankTarget].hp > gBattleMoveDamage)
+ goto END;
+
+ gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1;
+
+ if (gProtectStructs[gBankTarget].endured)
+ {
+ gBattleMoveFlags |= MOVE_ENDURED;
+ goto END;
+ }
+ if (gSpecialStatuses[gBankTarget].focusBanded)
+ {
+ gBattleMoveFlags |= MOVE_HANGEDON;
+ gLastUsedItem = gBattleMons[gBankTarget].item;
+ }
+
+ END:
+ gBattlescriptCurrInstr++;
+}
+
+static void atk09_attackanimation(void)
+{
+ if (gBattleExecBuffer) {return;}
+
+ if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE))
+ {
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_Pausex20;
+ BATTLE_STRUCT->animTurn += 1;
+ BATTLE_STRUCT->animTargetsHit += 1;
+ }
+ else
+ {
+ if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && BATTLE_STRUCT->animTargetsHit)
+ {gBattlescriptCurrInstr++; return;}
+
+ if (!(gBattleMoveFlags & MOVE_NO_EFFECT))
+ {
+ gActiveBank = gBankAttacker;
+
+ EmitMoveAnimation(0, gCurrentMove, BATTLE_STRUCT->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]);
+ BATTLE_STRUCT->animTurn += 1;
+ BATTLE_STRUCT->animTargetsHit += 1;
+ MarkBufferBankForExecution(gBankAttacker);
+ gBattlescriptCurrInstr++;
+ }
+ else
+ {
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_Pausex20;
+ }
+ }
+}
+
+static void atk0A_waitanimation(void)
+{
+ if (gBattleExecBuffer) {return;}
+ gBattlescriptCurrInstr++;
+}
+
+static void atk0B_healthbarupdate(void)
+{
+ if (gBattleExecBuffer) {return;}
+ if (gBattleMoveFlags & MOVE_NO_EFFECT) {goto END;}
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+
+ if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ {PrepareStringBattle(0x80, gActiveBank); goto END;}
+
+ EmitHealthBarUpdate(0, gBattleMoveDamage);
+ MarkBufferBankForExecution(gActiveBank);
+
+ if (!GetBankSide(gActiveBank) && gBattleMoveDamage > 0)
+ {gBattleResults.unk5_0 = 1;}
+
+ END:
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk0C_datahpupdate(void)
+{
+ register u32 move_type asm("r6"); //no idea how to match it otherwise
+ u8 dynamic_move_type;
+ if (gBattleExecBuffer) {return;}
+
+ dynamic_move_type = BATTLE_STRUCT->dynamicMoveType;
+ if (dynamic_move_type && !(dynamic_move_type & 0x40))
+ {move_type = 0x3F; move_type &= dynamic_move_type;}
+ else
+ {move_type = gBattleMoves[gCurrentMove].type;}
+
+ if (!(gBattleMoveFlags & MOVE_NO_EFFECT))
+ {
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ {
+ if (gDisableStructs[gActiveBank].substituteHP >= gBattleMoveDamage)
+ {
+ if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0 ) {gSpecialStatuses[gActiveBank].moveturnLostHP = gBattleMoveDamage;}
+ gDisableStructs[gActiveBank].substituteHP -= gBattleMoveDamage;
+ gHP_dealt = gBattleMoveDamage;
+ }
+ else
+ {
+ if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0 ) {gSpecialStatuses[gActiveBank].moveturnLostHP = gDisableStructs[gActiveBank].substituteHP;}
+ gHP_dealt = gDisableStructs[gActiveBank].substituteHP;
+ gDisableStructs[gActiveBank].substituteHP = 0;
+ }
+ //check substitute fading
+ if (gDisableStructs[gActiveBank].substituteHP == 0)
+ {
+ gBattlescriptCurrInstr += 2;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_SubstituteFade;
+ return;
+ }
+ }
+ else
+ {
+ gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE);
+ if (gBattleMoveDamage < 0) //hp goes up
+ {
+ gBattleMons[gActiveBank].hp -= gBattleMoveDamage;
+ if (gBattleMons[gActiveBank].hp > gBattleMons[gActiveBank].maxHP)
+ gBattleMons[gActiveBank].hp = gBattleMons[gActiveBank].maxHP;
+
+ }
+ else //hp goes down
+ {
+ if (gHitMarker & HITMARKER_x20)
+ { gHitMarker &= ~(HITMARKER_x20);}
+ else
+ {
+ gTakenDmg[gActiveBank] += gBattleMoveDamage;
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0)
+ gTakenDmgBanks[gActiveBank] = gBankAttacker;
+ else
+ gTakenDmgBanks[gActiveBank] = gBankTarget;
+ }
+
+ if (gBattleMons[gActiveBank].hp > gBattleMoveDamage)
+ {
+ gBattleMons[gActiveBank].hp -= gBattleMoveDamage;
+ gHP_dealt = gBattleMoveDamage;
+ }
+ else
+ {
+ gHP_dealt = gBattleMons[gActiveBank].hp;
+ gBattleMons[gActiveBank].hp = 0;
+ }
+
+ if (!gSpecialStatuses[gActiveBank].moveturnLostHP && !(gHitMarker & HITMARKER_x100000))
+ gSpecialStatuses[gActiveBank].moveturnLostHP = gHP_dealt;
+
+ if (move_type <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
+ {
+ gProtectStructs[gActiveBank].physicalDmg = gHP_dealt;
+ gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHP_dealt;
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0)
+ {
+ gProtectStructs[gActiveBank].physicalBank = gBankAttacker;
+ gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankAttacker;
+ }
+ else
+ {
+ gProtectStructs[gActiveBank].physicalBank = gBankTarget;
+ gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankTarget;
+ }
+ }
+ else if (move_type > 8 && !(gHitMarker & HITMARKER_x100000))
+ {
+ gProtectStructs[gActiveBank].specialDmg = gHP_dealt;
+ gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHP_dealt;
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0)
+ {
+ gProtectStructs[gActiveBank].specialBank = gBankAttacker;
+ gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankAttacker;
+ }
+ else
+ {
+ gProtectStructs[gActiveBank].specialBank = gBankTarget;
+ gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankTarget;
+ }
+ }
+ }
+ gHitMarker &= ~(HITMARKER_x100000);
+ EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ }
+ else
+ {
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0)
+ gSpecialStatuses[gActiveBank].moveturnLostHP = 0xFFFF;
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk0D_critmessage(void)
+{
+ if (gBattleExecBuffer) {return;}
+ if (gCritMultiplier == 2 && !(gBattleMoveFlags & MOVE_NO_EFFECT))
+ {PrepareStringBattle(0xD9, gBankAttacker); gBattleCommunication[MSG_DISPLAY] = 1;}
+ gBattlescriptCurrInstr++;
+}
+
+static void atk0E_effectiveness_sound(void)
+{
+ if (gBattleExecBuffer) {return;}
+ gActiveBank = gBankTarget;
+ if (!(gBattleMoveFlags & MOVE_MISSED))
+ {
+ u8 flag = ~MOVE_MISSED;
+ switch (gBattleMoveFlags & flag)
+ {
+ case MOVE_SUPEREFFECTIVE:
+ EmitEffectivenessSound(0, 14);
+ MarkBufferBankForExecution(gActiveBank);
+ break;
+ case MOVE_NOTVERYEFFECTIVE:
+ EmitEffectivenessSound(0, 12);
+ MarkBufferBankForExecution(gActiveBank);
+ break;
+ case MOVE_NOTAFFECTED:
+ case MOVE_FAILED:
+ break;
+ case MOVE_ENDURED:
+ case MOVE_ONEHITKO:
+ case MOVE_HANGEDON:
+ default:
+ if (gBattleMoveFlags & MOVE_SUPEREFFECTIVE)
+ {EmitEffectivenessSound(0, 14); MarkBufferBankForExecution(gActiveBank);}
+ else if (gBattleMoveFlags & MOVE_NOTVERYEFFECTIVE)
+ {EmitEffectivenessSound(0, 12); MarkBufferBankForExecution(gActiveBank);}
+ else if (!(gBattleMoveFlags & (MOVE_NOTAFFECTED | MOVE_FAILED)))
+ {EmitEffectivenessSound(0, 13); MarkBufferBankForExecution(gActiveBank);}
+ break;
+ }
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk0F_resultmessage(void)
+{
+ u16 stringID = 0;
+ if (gBattleExecBuffer) {return;}
+
+ if (gBattleMoveFlags & MOVE_MISSED && (!(gBattleMoveFlags & MOVE_NOTAFFECTED) || gBattleCommunication[6] > 2))
+ {
+ stringID = gMissStrings[gBattleCommunication[6]];
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+ else
+ {
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ switch (gBattleMoveFlags & 0xFE)
+ {
+ case MOVE_SUPEREFFECTIVE:
+ stringID = 0xDE; break;
+ case MOVE_NOTVERYEFFECTIVE:
+ stringID = 0xDD; break;
+ case MOVE_ONEHITKO:
+ stringID = 0xDA; break;
+ case MOVE_ENDURED:
+ stringID = 0x99; break;
+ case MOVE_FAILED:
+ goto FAILED;
+ case MOVE_NOTAFFECTED:
+ goto NOTAFFECTED;
+ case MOVE_HANGEDON:
+ gLastUsedItem = gBattleMons[gBankTarget].item;
+ gStringBank = gBankTarget;
+ gBattleMoveFlags &= ~(MOVE_ENDURED | MOVE_HANGEDON);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return;
+ default:
+ if (gBattleMoveFlags & MOVE_NOTAFFECTED)
+ NOTAFFECTED:
+ stringID = 0x1B;
+ else if (gBattleMoveFlags & MOVE_ONEHITKO)
+ {
+ gBattleMoveFlags &= ~(MOVE_ONEHITKO);
+ gBattleMoveFlags &= ~(MOVE_SUPEREFFECTIVE);
+ gBattleMoveFlags &= ~(MOVE_NOTVERYEFFECTIVE);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_OneHitKOMsg; return;
+ }
+ else if (gBattleMoveFlags & MOVE_ENDURED)
+ {
+ gBattleMoveFlags &= ~(MOVE_ENDURED | MOVE_HANGEDON);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_EnduredMsg; return;
+ }
+ else if (gBattleMoveFlags & MOVE_HANGEDON)
+ {
+ gLastUsedItem = gBattleMons[gBankTarget].item;
+ gStringBank = gBankTarget;
+ gBattleMoveFlags &= ~(MOVE_ENDURED | MOVE_HANGEDON);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return;
+ }
+ else if (gBattleMoveFlags & MOVE_FAILED)
+ FAILED:
+ stringID = 0xE5;
+ else
+ gBattleCommunication[MSG_DISPLAY] = 0;
+ }
+ }
+
+ if (stringID)
+ {
+ register u16 dummy asm("r0") = stringID; //Can't match it otherwise
+ PrepareStringBattle(dummy, gBankAttacker);
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk10_printstring(void)
+{
+ if (gBattleExecBuffer) {return;}
+
+ PrepareStringBattle(BSScriptRead16(gBattlescriptCurrInstr + 1), gBankAttacker);
+ gBattlescriptCurrInstr += 3;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+}
+
+static void atk11_printstring_playeronly(void)
+{
+ gActiveBank = gBankAttacker;
+ EmitPrintStringPlayerOnly(0, BSScriptRead16(gBattlescriptCurrInstr + 1));
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 3;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+}
+
+static void atk12_waitmessage(void)
+{
+ if (gBattleExecBuffer) {return;}
+
+ if (!gBattleCommunication[MSG_DISPLAY])
+ gBattlescriptCurrInstr += 3;
+ else
+ {
+ u16 to_wait = BSScriptRead16(gBattlescriptCurrInstr + 1);
+ if (++gPauseCounterBattle >= to_wait)
+ {
+ gPauseCounterBattle = 0;
+ gBattlescriptCurrInstr += 3;
+ gBattleCommunication[MSG_DISPLAY] = 0;
+ }
+ }
+}
+
+static void atk13_printfromtable(void)
+{
+ void* Ptr;
+ if (gBattleExecBuffer) {return;}
+
+ Ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1) + 2 * gBattleCommunication[MULTISTRING_CHOOSER];
+ PrepareStringBattle(*(u16*)Ptr, gBankAttacker);
+ gBattlescriptCurrInstr += 5;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+}
+
+static void atk14_printfromtable_playeronly(void)
+{
+ void* Ptr;
+ if (gBattleExecBuffer) {return;}
+
+ Ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1) + 2 * gBattleCommunication[MULTISTRING_CHOOSER];
+ gActiveBank = gBankAttacker;
+ EmitPrintStringPlayerOnly(0, *(u16*)Ptr);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 5;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+}
+
+u8 BankGetTurnOrder(u8 bank)
+{
+ int i;
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gTurnOrder[i] == bank) {break;}
+ }
+ return i;
+}
+
+//Someone please decompile this monstrosity below...
+#ifdef NONMATCHING
+void SetMoveEffect(bool8 primary, u8 certainArg)
+{
+ #define EffectAffectsUser 0x40
+ register u8 certain asm("r5") = certainArg;
+ register bool32 StatusChanged asm("r10") = 0;
+ register int AffectsUser asm("r6") = 0; //0x40 otherwise
+ bool32 NoSunCanFreeze = 1;
+
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] & EffectAffectsUser)
+ {
+ gEffectBank = gBankAttacker; //bank that effects get applied on
+ gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(EffectAffectsUser);
+ AffectsUser = EffectAffectsUser;
+ BATTLE_STRUCT->scriptingActive = gBankTarget; //theoretically the attacker
+ }
+ else
+ {
+ gEffectBank = gBankTarget;
+ BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ }
+
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
+ !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9)
+ {gBattlescriptCurrInstr++; return;}
+
+ if (gSideAffecting[get_bank_identity(gEffectBank) & 1] & SIDE_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
+ !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7)
+ {gBattlescriptCurrInstr++; return;}
+
+ //make sure at least ONE HP except payday and thief
+ if (gBattleMons[gEffectBank].current_hp == 0 && gBattleCommunication[MOVE_EFFECT_BYTE] != 0xB && gBattleCommunication[MOVE_EFFECT_BYTE] != 0x1F)
+ {gBattlescriptCurrInstr++; return;}
+
+ if (gBattleMons[gEffectBank].status2 & STATUS2_SUBSTITUTE && AffectsUser != EffectAffectsUser)
+ {gBattlescriptCurrInstr++; return;}
+
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) //status change
+ {
+ switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ {
+ case STATUS_SLEEP:
+ //check active uproar
+ if (gBattleMons[gEffectBank].ability_id != ABILITY_SOUNDPROOF)
+ {
+ for (gActiveBank = 0; gActiveBank < gNoOfAllBanks && !(gBattleMons[gActiveBank].status2 & STATUS2_UPROAR); gActiveBank++) {}
+ }
+ else
+ gActiveBank = gNoOfAllBanks;
+ if (gBattleMons[gEffectBank].status) {break;}
+ if (gActiveBank != gNoOfAllBanks) {break;} //nice way of checking uproar...
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_VITAL_SPIRIT) {break;}
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_INSOMNIA) {break;}
+
+ b_cancel_multi_turn_move_maybe(gEffectBank);
+ StatusChanged = 1;
+ break;
+ case STATUS_POISON:
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
+ {
+ gLastUsedAbility = ABILITY_IMMUNITY;
+ RecordAbility(gEffectBank, ABILITY_IMMUNITY);
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ //_0801E664:
+ gBattlescriptCurrInstr = BS_PSN_PREVENTION;
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication.multistring_chooser = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ return;
+ }
+ else
+ {gBattleCommunication.multistring_chooser = 0; return;}
+ }
+ if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL)
+ && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80))
+ {
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_PSN_PREVENTION;
+ gBattleCommunication.multistring_chooser = 2;
+ return;
+ }
+ if (gBattleMons[gEffectBank].type1 == TYPE_POISON) {break;}
+ if (gBattleMons[gEffectBank].type2 == TYPE_POISON) {break;}
+ if (gBattleMons[gEffectBank].type1 == TYPE_STEEL) {break;}
+ if (gBattleMons[gEffectBank].type2 == TYPE_STEEL) {break;}
+ if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;}
+ StatusChanged = 1;
+ break;
+ case STATUS_BURN:
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80))
+ {
+ gLastUsedAbility = ABILITY_WATER_VEIL;
+ RecordAbility(gEffectBank, ABILITY_WATER_VEIL);
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ //_0801E664:
+ gBattlescriptCurrInstr = BS_BRN_PREVENTION;
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication.multistring_chooser = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ return;
+ }
+ else
+ {gBattleCommunication.multistring_chooser = 0; return;}
+ }
+ if ((gBattleMons[gEffectBank].type1 == TYPE_FIRE || gBattleMons[gEffectBank].type2 == TYPE_FIRE)
+ && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80))
+ {
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_BRN_PREVENTION;
+ gBattleCommunication.multistring_chooser = 2;
+ return;
+ }
+ if (gBattleMons[gEffectBank].type1 == TYPE_FIRE) {break;}
+ if (gBattleMons[gEffectBank].type2 == TYPE_FIRE) {break;}
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL) {break;}
+ if (gBattleMons[gEffectBank].status1 == 0) {break;}
+ StatusChanged = 1;
+ break;
+ case STATUS_FREEZE:
+ if (WeatherHasEffect && gBattleWeather & WEATHER_SUNNY) {NoSunCanFreeze = 0;}
+ if (gBattleMons[gEffectBank].type1 == TYPE_ICE) {break;}
+ if (gBattleMons[gEffectBank].type2 == TYPE_ICE) {break;}
+ if (gBattleMons[gEffectBank].status) {break;}
+ if (NoSunCanFreeze == 0) {break;}
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_MAGMA_ARMOR) {break;}
+
+ b_cancel_multi_turn_move_maybe(gEffectBank);
+ StatusChanged = 1;
+ break;
+ case STATUS_PARALYSIS:
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_LIMBER)
+ {
+ if ((primary == 1 || certain == 0x80))
+ {
+ gLastUsedAbility = ABILITY_LIMBER;
+ RecordAbility(gEffectBank, ABILITY_LIMBER);
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ //_0801E664:
+ gBattlescriptCurrInstr = BS_PRLZ_PREVENTION;
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication.multistring_chooser = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ return;
+ }
+ else
+ {gBattleCommunication.multistring_chooser = 0; return;}
+ }
+ else {break;}
+ }
+ if (gBattleMons[gEffectBank].status) {break;}
+ StatusChanged = 1;
+ break;
+ case STATUS_TOXIC_POISON:
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
+ {
+ gLastUsedAbility = ABILITY_IMMUNITY;
+ RecordAbility(gEffectBank, ABILITY_IMMUNITY);
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ //_0801E664:
+ gBattlescriptCurrInstr = BS_PSN_PREVENTION;
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication.multistring_chooser = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ return;
+ }
+ else
+ {gBattleCommunication.multistring_chooser = 0; return;}
+ }
+ if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL)
+ && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80))
+ {
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_PSN_PREVENTION;
+ gBattleCommunication.multistring_chooser = 2;
+ return;
+ }
+ if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].type1 != TYPE_POISON &&
+ gBattleMons[gEffectBank].type2 != TYPE_POISON &&
+ gBattleMons[gEffectBank].type1 != TYPE_STEEL &&
+ gBattleMons[gEffectBank].type2 != TYPE_STEEL)
+ {
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;}
+ gBattleMons[gEffectBank].status1 |= ~(STATUS_POISON); //TODO: fix OR to AND
+ StatusChanged = 1;
+ break;
+ }
+ else
+ gBattleMoveFlags |= MOVE_NOTAFFECTED;
+ break;
+ }
+ if (StatusChanged == 1)
+ {
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP)
+ gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2);
+ else
+ gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gActiveBank = gEffectBank;
+ bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status);
+ mark_buffer_bank_for_execution(gActiveBank);
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication.multistring_chooser = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ }
+ else
+ gBattleCommunication.multistring_chooser = 0;
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] == 2 || gBattleCommunication[MOVE_EFFECT_BYTE] == 6 || gBattleCommunication[MOVE_EFFECT_BYTE] == 5 || gBattleCommunication[MOVE_EFFECT_BYTE] == 3)
+ {
+ BATTLE_STRUCT->SynchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
+ gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT;
+ }
+ return;
+ }
+ else if (StatusChanged == 0)
+ {gBattlescriptCurrInstr++; return;}
+ }
+ else
+ {
+ if (gBattleMons[gEffectBank].status2 & gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ {gBattlescriptCurrInstr++; return;}
+ switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ {
+ case 7: //confusion
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_OWN_TEMPO)
+ {gBattlescriptCurrInstr++; return;}
+ if (gBattleMons[gEffectBank].status2 & STATUS2_CONFUSION)
+ {gBattlescriptCurrInstr++; return;}
+ gBattleMons[gEffectBank].status2 |= (((Random()) % 0x4)) + 2;
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ break;
+ case 8: //flinch
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_INNER_FOCUS)
+ {
+ if (primary == 1 || certain == 0x80)
+ {
+ gLastUsedAbility = ABILITY_INNER_FOCUS;
+ RecordAbility(gEffectBank, ABILITY_INNER_FOCUS);
+ gBattlescriptCurrInstr = BS_FLINCH_PREVENTION;
+ return;
+ }
+ else
+ {gBattlescriptCurrInstr++; return;}
+ }
+ else
+ {
+ if (BankGetTurnOrder(gEffectBank) > gCurrentMoveTurn)
+ gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr++; return;
+ }
+ break;
+ case 10: //uproar
+ if (gBattleMons[gEffectBank].status2 & STATUS2_UPROAR)
+ {gBattlescriptCurrInstr++; return;}
+ gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMove[gEffectBank] = gCurrentMove;
+ gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4;
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ break;
+ case 11: //pay day
+ if (!(get_bank_identity(gEffectBank) & 1))
+ {
+ u16 PayDay = gPaydayMoney;
+ gPaydayMoney += (gBattleMons[gEffectBank].level * 5);
+ if (PayDay > gPaydayMoney)
+ gPaydayMoney = 0xFFFF;
+ }
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ break;
+ case 9: //tri attack
+ if (gBattleMons[gEffectBank].status)
+ {gBattlescriptCurrInstr++; return;}
+ gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3;
+ SetMoveEffect(0, 0);
+ break;
+ case 12: //charging move
+ gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMove[gEffectBank] = gCurrentMove;
+ gProtectStructs[gEffectBank].flag1_chargingturn = 1;
+ gBattlescriptCurrInstr++;
+ break;
+ case 13: //wrap
+ if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED)
+ {gBattlescriptCurrInstr++; return;}
+ gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 0xD;
+ BATTLE_STRUCT->WrappedMove1[gEffectBank] = gCurrentMove;
+ BATTLE_STRUCT->WrappedMove2[gEffectBank] = gCurrentMove >> 8;
+ BATTLE_STRUCT->WrappedBy[gEffectBank] = gBankAttacker;
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+
+ for (gBattleCommunication.multistring_chooser = 0;
+ gBattleCommunication.multistring_chooser <= 4 && gCurrentMove != gTrappingMoves[gBattleCommunication.multistring_chooser];
+ gBattleCommunication.multistring_chooser++) {}
+ break;
+ case 14: //recoil
+ gBattleMoveDamage = (gHP_dealt) / 4;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ break;
+ case 15 ... 21: //stat + 1
+ if (ChangeStats(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;}
+ else
+ {
+ BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one
+ BATTLE_STRUCT->animArg2 = 0;
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_STAT_UP;
+ }
+ break;
+ case 22 ... 28: //stat - 1
+ if (ChangeStats(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly
+ else
+ {
+ BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_STAT_DOWN;
+ }
+ break;
+ case 39 ... 45: //stat + 2
+ if (ChangeStats(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;}
+ else
+ {
+ BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_STAT_UP;
+ }
+ break;
+ case 46 ... 52: //stat - 2
+ if (ChangeStats(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;}
+ else
+ {
+ BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_STAT_DOWN;
+ }
+ break;
+ case 29: //recharge
+ gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE;
+ gDisableStructs[gEffectBank].recharge_counter = 2;
+ gLockedMove[gEffectBank] = gCurrentMove;
+ gBattlescriptCurrInstr++;
+ break;
+ case 30: //rage
+ gBattleMons[gBankAttacker].status2 |= STATUS2_RAGE;
+ gBattlescriptCurrInstr++;
+ break;
+ case 31: //item steal
+ {
+ u8 side = battle_side_get_owner(gBankAttacker);
+ if (battle_side_get_owner(gBankAttacker) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400)
+ {gBattlescriptCurrInstr++; return;}
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.KnockedOff[side] & gBitTable[gBattlePartyID[gBankAttacker]]))
+ {gBattlescriptCurrInstr++; return;}
+ if (gBattleMons[gBankTarget].held_item && gBattleMons[gBankTarget].ability_id == ABILITY_STICKY_HOLD)
+ {
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BS_NO_ITEMSTEAL;
+ gLastUsedAbility = gBattleMons[gBankTarget].ability_id;
+ RecordAbility(gBankTarget, gLastUsedAbility);
+ return;
+ }
+ if (gBattleMons[gBankAttacker].held_item)
+ {gBattlescriptCurrInstr++; return;}
+ if (gBattleMons[gBankTarget].held_item == ITEM_ENIGMA_BERRY)
+ {gBattlescriptCurrInstr++; return;}
+ if (gBattleMons[gBankTarget].held_item == 0)
+ {gBattlescriptCurrInstr++; return;}
+
+ CHANGED_HELDITEMS[gBankAttacker] = gLastUsedItem = gBattleMons[gBankTarget].held_item;
+ gBattleMons[gBankTarget].held_item = 0;
+
+ gActiveBank = gBankAttacker;
+ bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem);
+ mark_buffer_bank_for_execution(gBankAttacker);
+
+ gActiveBank = gBankTarget;
+ bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].held_item);
+ mark_buffer_bank_for_execution(gBankTarget);
+
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_ITEMSTEAL;
+
+ STORE_CHOICEMOVE(gBankTarget, 0);
+ }
+ break;
+ case 32: //escape prevention
+ gBattleMons[gBankTarget].status2 |= STATUS2_RECHARGE;
+ gDisableStructs[gBankTarget].BankPreventingEscape = gBankAttacker;
+ gBattlescriptCurrInstr++;
+ break;
+ case 33: //nightmare
+ gBattleMons[gBankTarget].status2 |= STATUS2_NIGHTMARE;
+ gBattlescriptCurrInstr++;
+ break;
+ case 34:
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = gUnknown_081D9224;
+ return;
+ case 35: //break free rapidspin
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_RAPIDSPINAWAY;
+ return;
+ case 36: //paralysis removal
+ if (gBattleMons[gBankTarget].status1 & STATUS_PARALYSIS)
+ {
+ gBattleMons[gBankTarget].status1 &= ~(STATUS_PARALYSIS);
+ gActiveBank = gBankTarget;
+ bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status);
+ mark_buffer_bank_for_execution(gActiveBank);
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_PARALYSISHEALED;
+ }
+ else
+ {gBattlescriptCurrInstr++; return;}
+ break;
+ case 37: //
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = gUnknown_081D93FA;
+ return;
+ case 38: //recoil plus paralysis
+ gBattleMoveDamage = gHP_dealt / 3;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ break;
+ case 53: //thrash
+ if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE))
+ {
+ gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMove[gEffectBank] = gCurrentMove;
+ gBattleMons[gEffectBank].status2 |= (((Random() & 1) + 2) << 0xA);
+ }
+ else
+ {gBattlescriptCurrInstr++; return;}
+ break;
+ case 54: //knock off
+ if (gBattleMons[gEffectBank].ability_id == ABILITY_STICKY_HOLD)
+ {
+ if (gBattleMons[gEffectBank].held_item == 0)
+ {gBattlescriptCurrInstr++; return;}
+ gLastUsedAbility = ABILITY_STICKY_HOLD;
+ gBattlescriptCurrInstr = BS_STICKYHOLD_ACTIVATES;
+ RecordAbility(gEffectBank, ABILITY_STICKY_HOLD);
+ return;
+ }
+ if (gBattleMons[gEffectBank].held_item == 0)
+ {gBattlescriptCurrInstr++; return;}
+ else
+ {
+ u8 side = battle_side_get_owner(gEffectBank);
+ gLastUsedItem = gBattleMons[gEffectBank].held_item;
+ gBattleMons[gEffectBank].held_item = 0;
+ gWishFutureKnock.KnockedOff[side] |= gBitTable[gBattlePartyID[gEffectBank]];
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BS_KNOCKEDOFF;
+
+ STORE_CHOICEMOVE(gEffectBank, 0);
+ }
+ break;
+ case 59: //overheat I guess, dont remember
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = gUnknown_081D94B0;
+ return;
+ }
+ }
+}
+#else
+__attribute__((naked))
+void SetMoveEffect(bool8 primary, u8 certainArg)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x8\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ lsls r1, 24\n\
+ lsrs r5, r1, 24\n\
+ movs r0, 0\n\
+ mov r10, r0\n\
+ movs r6, 0\n\
+ movs r1, 0x1\n\
+ str r1, [sp, 0x4]\n\
+ ldr r1, _0801E430 @ =gBattleCommunication\n\
+ ldrb r3, [r1, 0x3]\n\
+ movs r0, 0x40\n\
+ ands r0, r3\n\
+ adds r7, r1, 0\n\
+ cmp r0, 0\n\
+ beq _0801E444\n\
+ ldr r2, _0801E434 @ =gEffectBank\n\
+ ldr r0, _0801E438 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r2]\n\
+ movs r0, 0xBF\n\
+ ands r0, r3\n\
+ strb r0, [r7, 0x3]\n\
+ movs r6, 0x40\n\
+ ldr r0, _0801E43C @ =0x02000000\n\
+ ldr r1, _0801E440 @ =gBankTarget\n\
+ b _0801E450\n\
+ .align 2, 0\n\
+_0801E430: .4byte gBattleCommunication\n\
+_0801E434: .4byte gEffectBank\n\
+_0801E438: .4byte gBankAttacker\n\
+_0801E43C: .4byte 0x02000000\n\
+_0801E440: .4byte gBankTarget\n\
+_0801E444:\n\
+ ldr r2, _0801E538 @ =gEffectBank\n\
+ ldr r0, _0801E53C @ =gBankTarget\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r2]\n\
+ ldr r0, _0801E540 @ =0x02000000\n\
+ ldr r1, _0801E544 @ =gBankAttacker\n\
+_0801E450:\n\
+ ldrb r1, [r1]\n\
+ ldr r3, _0801E548 @ =0x00016003\n\
+ adds r0, r3\n\
+ strb r1, [r0]\n\
+ mov r8, r2\n\
+ ldr r2, _0801E54C @ =gBattleMons\n\
+ mov r0, r8\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r2\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x13\n\
+ bne _0801E48A\n\
+ ldr r0, _0801E550 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801E48A\n\
+ cmp r4, 0\n\
+ bne _0801E48A\n\
+ ldrb r0, [r7, 0x3]\n\
+ cmp r0, 0x9\n\
+ bhi _0801E48A\n\
+ bl _0801F5DC\n\
+_0801E48A:\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ bl GetBankIdentity\n\
+ ldr r2, _0801E554 @ =gSideAffecting\n\
+ movs r1, 0x1\n\
+ ands r1, r0\n\
+ lsls r1, 1\n\
+ adds r1, r2\n\
+ ldrh r1, [r1]\n\
+ movs r0, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801E4C4\n\
+ ldr r0, _0801E550 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801E4C4\n\
+ cmp r4, 0\n\
+ bne _0801E4C4\n\
+ ldr r0, _0801E558 @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x3]\n\
+ cmp r0, 0x7\n\
+ bhi _0801E4C4\n\
+ bl _0801F5DC\n\
+_0801E4C4:\n\
+ ldr r3, _0801E54C @ =gBattleMons\n\
+ ldr r2, _0801E538 @ =gEffectBank\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0, 0x28]\n\
+ mov r8, r2\n\
+ mov r9, r3\n\
+ cmp r0, 0\n\
+ bne _0801E4EA\n\
+ ldr r0, _0801E558 @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x3]\n\
+ cmp r0, 0xB\n\
+ beq _0801E4EA\n\
+ cmp r0, 0x1F\n\
+ beq _0801E4EA\n\
+ bl _0801F5DC\n\
+_0801E4EA:\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ mov r1, r9\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 17\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801E50C\n\
+ cmp r6, 0x40\n\
+ beq _0801E50C\n\
+ bl _0801F5DC\n\
+_0801E50C:\n\
+ ldr r0, _0801E558 @ =gBattleCommunication\n\
+ ldrb r1, [r0, 0x3]\n\
+ adds r7, r0, 0\n\
+ cmp r1, 0x6\n\
+ bls _0801E518\n\
+ b _0801EB4A\n\
+_0801E518:\n\
+ ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects\n\
+ ldrb r0, [r7, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0x10\n\
+ bne _0801E528\n\
+ b _0801E714\n\
+_0801E528:\n\
+ cmp r0, 0x10\n\
+ bhi _0801E560\n\
+ cmp r0, 0x7\n\
+ beq _0801E57A\n\
+ cmp r0, 0x8\n\
+ bne _0801E536\n\
+ b _0801E630\n\
+_0801E536:\n\
+ b _0801EA14\n\
+ .align 2, 0\n\
+_0801E538: .4byte gEffectBank\n\
+_0801E53C: .4byte gBankTarget\n\
+_0801E540: .4byte 0x02000000\n\
+_0801E544: .4byte gBankAttacker\n\
+_0801E548: .4byte 0x00016003\n\
+_0801E54C: .4byte gBattleMons\n\
+_0801E550: .4byte gHitMarker\n\
+_0801E554: .4byte gSideAffecting\n\
+_0801E558: .4byte gBattleCommunication\n\
+_0801E55C: .4byte gStatusFlagsForMoveEffects\n\
+_0801E560:\n\
+ cmp r0, 0x40\n\
+ bne _0801E566\n\
+ b _0801E888\n\
+_0801E566:\n\
+ cmp r0, 0x40\n\
+ bhi _0801E572\n\
+ cmp r0, 0x20\n\
+ bne _0801E570\n\
+ b _0801E7EA\n\
+_0801E570:\n\
+ b _0801EA14\n\
+_0801E572:\n\
+ cmp r0, 0x80\n\
+ bne _0801E578\n\
+ b _0801E8E4\n\
+_0801E578:\n\
+ b _0801EA14\n\
+_0801E57A:\n\
+ mov r3, r8\n\
+ ldrb r1, [r3]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ add r0, r9\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x2B\n\
+ beq _0801E5DC\n\
+ ldr r0, _0801E5D4 @ =gActiveBank\n\
+ movs r1, 0\n\
+ strb r1, [r0]\n\
+ ldr r1, _0801E5D8 @ =gNoOfAllBanks\n\
+ ldrb r3, [r1]\n\
+ adds r7, r0, 0\n\
+ mov r12, r1\n\
+ cmp r3, 0\n\
+ beq _0801E5E8\n\
+ mov r4, r9\n\
+ ldr r0, [r4, 0x50]\n\
+ movs r1, 0x70\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801E5E8\n\
+ adds r1, r7, 0\n\
+ mov r6, r9\n\
+ adds r6, 0x50\n\
+ movs r5, 0x58\n\
+ movs r4, 0x70\n\
+_0801E5B4:\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, r3\n\
+ bcs _0801E5E8\n\
+ ldrb r0, [r7]\n\
+ muls r0, r5\n\
+ adds r0, r6\n\
+ ldr r0, [r0]\n\
+ ands r0, r4\n\
+ cmp r0, 0\n\
+ beq _0801E5B4\n\
+ b _0801E5E8\n\
+ .align 2, 0\n\
+_0801E5D4: .4byte gActiveBank\n\
+_0801E5D8: .4byte gNoOfAllBanks\n\
+_0801E5DC:\n\
+ ldr r0, _0801E628 @ =gActiveBank\n\
+ ldr r2, _0801E62C @ =gNoOfAllBanks\n\
+ ldrb r1, [r2]\n\
+ strb r1, [r0]\n\
+ adds r7, r0, 0\n\
+ mov r12, r2\n\
+_0801E5E8:\n\
+ mov r0, r8\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ adds r1, r2, 0\n\
+ muls r1, r0\n\
+ mov r0, r9\n\
+ adds r0, 0x4C\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0801E600\n\
+ b _0801EA14\n\
+_0801E600:\n\
+ ldrb r0, [r7]\n\
+ mov r3, r12\n\
+ ldrb r3, [r3]\n\
+ cmp r0, r3\n\
+ beq _0801E60C\n\
+ b _0801EA14\n\
+_0801E60C:\n\
+ mov r4, r9\n\
+ adds r0, r1, r4\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x48\n\
+ bne _0801E61A\n\
+ b _0801EA14\n\
+_0801E61A:\n\
+ cmp r0, 0xF\n\
+ bne _0801E620\n\
+ b _0801EA14\n\
+_0801E620:\n\
+ adds r0, r2, 0\n\
+ bl CancelMultiTurnMoves\n\
+ b _0801EA04\n\
+ .align 2, 0\n\
+_0801E628: .4byte gActiveBank\n\
+_0801E62C: .4byte gNoOfAllBanks\n\
+_0801E630:\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ add r0, r9\n\
+ adds r0, 0x20\n\
+ ldrb r1, [r0]\n\
+ cmp r1, 0x11\n\
+ bne _0801E688\n\
+ cmp r4, 0x1\n\
+ beq _0801E64A\n\
+ cmp r5, 0x80\n\
+ bne _0801E688\n\
+_0801E64A:\n\
+ ldr r0, _0801E678 @ =gLastUsedAbility\n\
+ strb r1, [r0]\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x11\n\
+ bl RecordAbilityBattle\n\
+ ldr r4, _0801E67C @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801E680 @ =BattleScript_PSNPrevention\n\
+_0801E664:\n\
+ str r0, [r4]\n\
+ ldr r2, _0801E684 @ =gHitMarker\n\
+ ldr r1, [r2]\n\
+ movs r0, 0x80\n\
+ lsls r0, 6\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801E676\n\
+ b _0801E928\n\
+_0801E676:\n\
+ b _0801E94C\n\
+ .align 2, 0\n\
+_0801E678: .4byte gLastUsedAbility\n\
+_0801E67C: .4byte gBattlescriptCurrInstr\n\
+_0801E680: .4byte BattleScript_PSNPrevention\n\
+_0801E684: .4byte gHitMarker\n\
+_0801E688:\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ movs r1, 0x58\n\
+ muls r0, r1\n\
+ add r0, r9\n\
+ adds r1, r0, 0\n\
+ adds r1, 0x21\n\
+ ldrb r1, [r1]\n\
+ cmp r1, 0x3\n\
+ beq _0801E6AC\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x3\n\
+ beq _0801E6AC\n\
+ cmp r1, 0x8\n\
+ beq _0801E6AC\n\
+ cmp r0, 0x8\n\
+ bne _0801E6C6\n\
+_0801E6AC:\n\
+ ldr r0, _0801E710 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801E6C6\n\
+ cmp r4, 0x1\n\
+ bne _0801E6C0\n\
+ b _0801E98C\n\
+_0801E6C0:\n\
+ cmp r5, 0x80\n\
+ bne _0801E6C6\n\
+ b _0801E98C\n\
+_0801E6C6:\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x58\n\
+ muls r1, r0\n\
+ mov r4, r9\n\
+ adds r3, r1, r4\n\
+ adds r0, r3, 0\n\
+ adds r0, 0x21\n\
+ ldrb r4, [r0]\n\
+ cmp r4, 0x3\n\
+ bne _0801E6DE\n\
+ b _0801EA14\n\
+_0801E6DE:\n\
+ adds r0, 0x1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x3\n\
+ bne _0801E6E8\n\
+ b _0801EA14\n\
+_0801E6E8:\n\
+ cmp r4, 0x8\n\
+ bne _0801E6EE\n\
+ b _0801EA14\n\
+_0801E6EE:\n\
+ cmp r0, 0x8\n\
+ bne _0801E6F4\n\
+ b _0801EA14\n\
+_0801E6F4:\n\
+ mov r0, r9\n\
+ adds r0, 0x4C\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0801E702\n\
+ b _0801EA14\n\
+_0801E702:\n\
+ adds r0, r3, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x11\n\
+ bne _0801E70E\n\
+ b _0801EA14\n\
+_0801E70E:\n\
+ b _0801EA04\n\
+ .align 2, 0\n\
+_0801E710: .4byte gHitMarker\n\
+_0801E714:\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ add r0, r9\n\
+ adds r0, 0x20\n\
+ ldrb r1, [r0]\n\
+ cmp r1, 0x29\n\
+ bne _0801E758\n\
+ cmp r4, 0x1\n\
+ beq _0801E72E\n\
+ cmp r5, 0x80\n\
+ bne _0801E758\n\
+_0801E72E:\n\
+ ldr r0, _0801E74C @ =gLastUsedAbility\n\
+ strb r1, [r0]\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x29\n\
+ bl RecordAbilityBattle\n\
+ ldr r4, _0801E750 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801E754 @ =BattleScript_BRNPrevention\n\
+ b _0801E664\n\
+ .align 2, 0\n\
+_0801E74C: .4byte gLastUsedAbility\n\
+_0801E750: .4byte gBattlescriptCurrInstr\n\
+_0801E754: .4byte BattleScript_BRNPrevention\n\
+_0801E758:\n\
+ mov r0, r8\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ mov r2, r9\n\
+ adds r1, r0, r2\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x21\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xA\n\
+ beq _0801E778\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xA\n\
+ bne _0801E7A8\n\
+_0801E778:\n\
+ ldr r0, _0801E79C @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801E7A8\n\
+ cmp r4, 0x1\n\
+ beq _0801E78E\n\
+ cmp r5, 0x80\n\
+ bne _0801E7A8\n\
+_0801E78E:\n\
+ ldr r4, _0801E7A0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801E7A4 @ =BattleScript_BRNPrevention\n\
+ b _0801E998\n\
+ .align 2, 0\n\
+_0801E79C: .4byte gHitMarker\n\
+_0801E7A0: .4byte gBattlescriptCurrInstr\n\
+_0801E7A4: .4byte BattleScript_BRNPrevention\n\
+_0801E7A8:\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x58\n\
+ adds r2, r0, 0\n\
+ muls r2, r1\n\
+ mov r4, r9\n\
+ adds r1, r2, r4\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x21\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xA\n\
+ bne _0801E7C2\n\
+ b _0801EA14\n\
+_0801E7C2:\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xA\n\
+ bne _0801E7CE\n\
+ b _0801EA14\n\
+_0801E7CE:\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x29\n\
+ bne _0801E7DA\n\
+ b _0801EA14\n\
+_0801E7DA:\n\
+ mov r0, r9\n\
+ adds r0, 0x4C\n\
+ adds r0, r2, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0801E7E8\n\
+ b _0801EA14\n\
+_0801E7E8:\n\
+ b _0801EA04\n\
+_0801E7EA:\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0x13\n\
+ movs r1, 0\n\
+ movs r2, 0xD\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0\n\
+ bne _0801E826\n\
+ str r0, [sp]\n\
+ movs r0, 0x13\n\
+ movs r1, 0\n\
+ movs r2, 0x4D\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0801E826\n\
+ ldr r0, _0801E87C @ =gBattleWeather\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x60\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801E826\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x4]\n\
+_0801E826:\n\
+ ldr r4, _0801E880 @ =gBattleMons\n\
+ ldr r0, _0801E884 @ =gEffectBank\n\
+ ldrb r3, [r0]\n\
+ movs r0, 0x58\n\
+ adds r2, r3, 0\n\
+ muls r2, r0\n\
+ adds r1, r2, r4\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x21\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xF\n\
+ bne _0801E840\n\
+ b _0801EA14\n\
+_0801E840:\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xF\n\
+ bne _0801E84C\n\
+ b _0801EA14\n\
+_0801E84C:\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x4C\n\
+ adds r0, r2, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0801E85A\n\
+ b _0801EA14\n\
+_0801E85A:\n\
+ ldr r2, [sp, 0x4]\n\
+ cmp r2, 0\n\
+ bne _0801E862\n\
+ b _0801EA14\n\
+_0801E862:\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x28\n\
+ bne _0801E86E\n\
+ b _0801EA14\n\
+_0801E86E:\n\
+ adds r0, r3, 0\n\
+ bl CancelMultiTurnMoves\n\
+ movs r3, 0x1\n\
+ mov r10, r3\n\
+ b _0801EA14\n\
+ .align 2, 0\n\
+_0801E87C: .4byte gBattleWeather\n\
+_0801E880: .4byte gBattleMons\n\
+_0801E884: .4byte gEffectBank\n\
+_0801E888:\n\
+ mov r0, r8\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r1, r0\n\
+ mov r2, r9\n\
+ adds r0, r1, r2\n\
+ adds r0, 0x20\n\
+ ldrb r2, [r0]\n\
+ cmp r2, 0x7\n\
+ bne _0801E8D0\n\
+ cmp r4, 0x1\n\
+ beq _0801E8A6\n\
+ cmp r5, 0x80\n\
+ beq _0801E8A6\n\
+ b _0801EA14\n\
+_0801E8A6:\n\
+ ldr r0, _0801E8C4 @ =gLastUsedAbility\n\
+ strb r2, [r0]\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x7\n\
+ bl RecordAbilityBattle\n\
+ ldr r4, _0801E8C8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801E8CC @ =BattleScript_PRLZPrevention\n\
+ b _0801E664\n\
+ .align 2, 0\n\
+_0801E8C4: .4byte gLastUsedAbility\n\
+_0801E8C8: .4byte gBattlescriptCurrInstr\n\
+_0801E8CC: .4byte BattleScript_PRLZPrevention\n\
+_0801E8D0:\n\
+ mov r0, r9\n\
+ adds r0, 0x4C\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0801E8DE\n\
+ b _0801EA14\n\
+_0801E8DE:\n\
+ movs r4, 0x1\n\
+ mov r10, r4\n\
+ b _0801EA14\n\
+_0801E8E4:\n\
+ mov r0, r8\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ add r0, r9\n\
+ adds r0, 0x20\n\
+ ldrb r1, [r0]\n\
+ cmp r1, 0x11\n\
+ bne _0801E952\n\
+ cmp r4, 0x1\n\
+ beq _0801E8FE\n\
+ cmp r5, 0x80\n\
+ bne _0801E952\n\
+_0801E8FE:\n\
+ ldr r0, _0801E938 @ =gLastUsedAbility\n\
+ strb r1, [r0]\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ movs r1, 0x11\n\
+ bl RecordAbilityBattle\n\
+ ldr r4, _0801E93C @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801E940 @ =BattleScript_PSNPrevention\n\
+ str r0, [r4]\n\
+ ldr r2, _0801E944 @ =gHitMarker\n\
+ ldr r1, [r2]\n\
+ movs r0, 0x80\n\
+ lsls r0, 6\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801E94C\n\
+_0801E928:\n\
+ movs r0, 0x1\n\
+ strb r0, [r7, 0x5]\n\
+ ldr r0, _0801E948 @ =0xffffdfff\n\
+ ands r1, r0\n\
+ str r1, [r2]\n\
+ bl _0801F5FA\n\
+ .align 2, 0\n\
+_0801E938: .4byte gLastUsedAbility\n\
+_0801E93C: .4byte gBattlescriptCurrInstr\n\
+_0801E940: .4byte BattleScript_PSNPrevention\n\
+_0801E944: .4byte gHitMarker\n\
+_0801E948: .4byte 0xffffdfff\n\
+_0801E94C:\n\
+ strb r0, [r7, 0x5]\n\
+ bl _0801F5FA\n\
+_0801E952:\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ movs r1, 0x58\n\
+ muls r0, r1\n\
+ add r0, r9\n\
+ adds r1, r0, 0\n\
+ adds r1, 0x21\n\
+ ldrb r1, [r1]\n\
+ cmp r1, 0x3\n\
+ beq _0801E976\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x3\n\
+ beq _0801E976\n\
+ cmp r1, 0x8\n\
+ beq _0801E976\n\
+ cmp r0, 0x8\n\
+ bne _0801E9B4\n\
+_0801E976:\n\
+ ldr r0, _0801E9A4 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801E9B4\n\
+ cmp r4, 0x1\n\
+ beq _0801E98C\n\
+ cmp r5, 0x80\n\
+ bne _0801E9B4\n\
+_0801E98C:\n\
+ ldr r4, _0801E9A8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801E9AC @ =BattleScript_PSNPrevention\n\
+_0801E998:\n\
+ str r0, [r4]\n\
+ ldr r1, _0801E9B0 @ =gBattleCommunication\n\
+ movs r0, 0x2\n\
+ strb r0, [r1, 0x5]\n\
+ bl _0801F5FA\n\
+ .align 2, 0\n\
+_0801E9A4: .4byte gHitMarker\n\
+_0801E9A8: .4byte gBattlescriptCurrInstr\n\
+_0801E9AC: .4byte BattleScript_PSNPrevention\n\
+_0801E9B0: .4byte gBattleCommunication\n\
+_0801E9B4:\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ movs r6, 0x58\n\
+ muls r0, r6\n\
+ mov r2, r9\n\
+ adds r2, 0x4C\n\
+ adds r5, r0, r2\n\
+ ldr r4, [r5]\n\
+ cmp r4, 0\n\
+ bne _0801EA14\n\
+ mov r3, r9\n\
+ adds r1, r0, r3\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x21\n\
+ ldrb r3, [r0]\n\
+ cmp r3, 0x3\n\
+ beq _0801EA0A\n\
+ adds r0, 0x1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x3\n\
+ beq _0801EA0A\n\
+ cmp r3, 0x8\n\
+ beq _0801EA0A\n\
+ cmp r0, 0x8\n\
+ beq _0801EA0A\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x11\n\
+ beq _0801EA14\n\
+ mov r4, r8\n\
+ ldrb r0, [r4]\n\
+ adds r1, r0, 0\n\
+ muls r1, r6\n\
+ adds r1, r2\n\
+ ldr r0, [r1]\n\
+ movs r2, 0x9\n\
+ negs r2, r2\n\
+ ands r0, r2\n\
+ str r0, [r1]\n\
+_0801EA04:\n\
+ movs r0, 0x1\n\
+ mov r10, r0\n\
+ b _0801EA14\n\
+_0801EA0A:\n\
+ ldr r0, _0801EA58 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x8\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+_0801EA14:\n\
+ mov r1, r10\n\
+ cmp r1, 0x1\n\
+ beq _0801EA1C\n\
+ b _0801EB3C\n\
+_0801EA1C:\n\
+ ldr r0, _0801EA5C @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r0]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\
+ ldr r0, _0801EA64 @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r3, [r0]\n\
+ cmp r3, 0x7\n\
+ bne _0801EA70\n\
+ bl Random\n\
+ ldr r2, _0801EA68 @ =gBattleMons\n\
+ ldr r1, _0801EA6C @ =gEffectBank\n\
+ ldrb r3, [r1]\n\
+ movs r1, 0x58\n\
+ muls r3, r1\n\
+ adds r2, 0x4C\n\
+ adds r3, r2\n\
+ movs r1, 0x3\n\
+ ands r1, r0\n\
+ adds r1, 0x2\n\
+ ldr r0, [r3]\n\
+ orrs r0, r1\n\
+ str r0, [r3]\n\
+ b _0801EA84\n\
+ .align 2, 0\n\
+_0801EA58: .4byte gBattleMoveFlags\n\
+_0801EA5C: .4byte gBattlescriptCurrInstr\n\
+_0801EA60: .4byte gStatusFlagsForMoveEffects\n\
+_0801EA64: .4byte gBattleCommunication\n\
+_0801EA68: .4byte gBattleMons\n\
+_0801EA6C: .4byte gEffectBank\n\
+_0801EA70:\n\
+ ldr r2, _0801EAD4 @ =gBattleMons\n\
+ ldr r0, _0801EAD8 @ =gEffectBank\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r1, r0\n\
+ adds r2, 0x4C\n\
+ adds r1, r2\n\
+ ldr r0, [r1]\n\
+ orrs r0, r3\n\
+ str r0, [r1]\n\
+_0801EA84:\n\
+ ldr r2, _0801EADC @ =gBattlescriptCurrInstr\n\
+ ldr r1, _0801EAE0 @ =gMoveEffectBS_Ptrs\n\
+ ldr r5, _0801EAE4 @ =gBattleCommunication\n\
+ ldrb r0, [r5, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ str r0, [r2]\n\
+ ldr r4, _0801EAE8 @ =gActiveBank\n\
+ ldr r1, _0801EAD8 @ =gEffectBank\n\
+ ldrb r0, [r1]\n\
+ strb r0, [r4]\n\
+ ldrb r1, [r1]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ ldr r1, _0801EAEC @ =gUnknown_02024ACC\n\
+ adds r0, r1\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x28\n\
+ movs r2, 0\n\
+ movs r3, 0x4\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r2, _0801EAF0 @ =gHitMarker\n\
+ ldr r1, [r2]\n\
+ movs r0, 0x80\n\
+ lsls r0, 6\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801EAF8\n\
+ movs r0, 0x1\n\
+ strb r0, [r5, 0x5]\n\
+ ldr r0, _0801EAF4 @ =0xffffdfff\n\
+ ands r1, r0\n\
+ str r1, [r2]\n\
+ b _0801EAFA\n\
+ .align 2, 0\n\
+_0801EAD4: .4byte gBattleMons\n\
+_0801EAD8: .4byte gEffectBank\n\
+_0801EADC: .4byte gBattlescriptCurrInstr\n\
+_0801EAE0: .4byte gMoveEffectBS_Ptrs\n\
+_0801EAE4: .4byte gBattleCommunication\n\
+_0801EAE8: .4byte gActiveBank\n\
+_0801EAEC: .4byte gUnknown_02024ACC\n\
+_0801EAF0: .4byte gHitMarker\n\
+_0801EAF4: .4byte 0xffffdfff\n\
+_0801EAF8:\n\
+ strb r0, [r5, 0x5]\n\
+_0801EAFA:\n\
+ ldr r0, _0801EB2C @ =gBattleCommunication\n\
+ ldrb r2, [r0, 0x3]\n\
+ adds r7, r0, 0\n\
+ cmp r2, 0x2\n\
+ beq _0801EB14\n\
+ cmp r2, 0x6\n\
+ beq _0801EB14\n\
+ cmp r2, 0x5\n\
+ beq _0801EB14\n\
+ cmp r2, 0x3\n\
+ beq _0801EB14\n\
+ bl _0801F5FA\n\
+_0801EB14:\n\
+ ldr r0, _0801EB30 @ =0x02000000\n\
+ ldrb r1, [r7, 0x3]\n\
+ ldr r2, _0801EB34 @ =0x000160ca\n\
+ adds r0, r2\n\
+ strb r1, [r0]\n\
+ ldr r2, _0801EB38 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 7\n\
+ bl _0801F4F2\n\
+ .align 2, 0\n\
+_0801EB2C: .4byte gBattleCommunication\n\
+_0801EB30: .4byte 0x02000000\n\
+_0801EB34: .4byte 0x000160ca\n\
+_0801EB38: .4byte gHitMarker\n\
+_0801EB3C:\n\
+ mov r3, r10\n\
+ cmp r3, 0\n\
+ beq _0801EB46\n\
+ bl _0801F5FA\n\
+_0801EB46:\n\
+ bl _0801F5DC\n\
+_0801EB4A:\n\
+ mov r0, r8\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r1, r0\n\
+ mov r0, r9\n\
+ adds r0, 0x50\n\
+ adds r1, r0\n\
+ ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects\n\
+ ldrb r3, [r7, 0x3]\n\
+ lsls r0, r3, 2\n\
+ adds r0, r2\n\
+ ldr r1, [r1]\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _0801EB6E\n\
+ bl _0801F5DC\n\
+_0801EB6E:\n\
+ subs r0, r3, 0x7\n\
+ cmp r0, 0x34\n\
+ bls _0801EB78\n\
+ bl _0801F5FA\n\
+_0801EB78:\n\
+ lsls r0, 2\n\
+ ldr r1, _0801EB88 @ =_0801EB8C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_0801EB84: .4byte gStatusFlagsForMoveEffects\n\
+_0801EB88: .4byte _0801EB8C\n\
+ .align 2, 0\n\
+_0801EB8C:\n\
+ .4byte _0801EC60\n\
+ .4byte _0801ECD4\n\
+ .4byte _0801EE4C\n\
+ .4byte _0801ED60\n\
+ .4byte _0801EDDC\n\
+ .4byte _0801EE84\n\
+ .4byte _0801EECC\n\
+ .4byte _0801EFA8\n\
+ .4byte _0801EFEC\n\
+ .4byte _0801EFEC\n\
+ .4byte _0801EFEC\n\
+ .4byte _0801EFEC\n\
+ .4byte _0801EFEC\n\
+ .4byte _0801EFEC\n\
+ .4byte _0801EFEC\n\
+ .4byte _0801F040\n\
+ .4byte _0801F040\n\
+ .4byte _0801F040\n\
+ .4byte _0801F040\n\
+ .4byte _0801F040\n\
+ .4byte _0801F040\n\
+ .4byte _0801F040\n\
+ .4byte _0801F13C\n\
+ .4byte _0801F184\n\
+ .4byte _0801F1A4\n\
+ .4byte _0801F364\n\
+ .4byte _0801F3A0\n\
+ .4byte _0801F3BC\n\
+ .4byte _0801F3D4\n\
+ .4byte _0801F3EC\n\
+ .4byte _0801F44C\n\
+ .4byte _0801F464\n\
+ .4byte _0801F094\n\
+ .4byte _0801F094\n\
+ .4byte _0801F094\n\
+ .4byte _0801F094\n\
+ .4byte _0801F094\n\
+ .4byte _0801F094\n\
+ .4byte _0801F094\n\
+ .4byte _0801F0E8\n\
+ .4byte _0801F0E8\n\
+ .4byte _0801F0E8\n\
+ .4byte _0801F0E8\n\
+ .4byte _0801F0E8\n\
+ .4byte _0801F0E8\n\
+ .4byte _0801F0E8\n\
+ .4byte _0801F4A8\n\
+ .4byte _0801F500\n\
+ .4byte _0801F5FA\n\
+ .4byte _0801F5FA\n\
+ .4byte _0801F5FA\n\
+ .4byte _0801F5FA\n\
+ .4byte _0801F5EC\n\
+_0801EC60:\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ movs r5, 0x58\n\
+ adds r1, r0, 0\n\
+ muls r1, r5\n\
+ mov r2, r9\n\
+ adds r0, r1, r2\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x14\n\
+ bne _0801EC7A\n\
+ bl _0801F5DC\n\
+_0801EC7A:\n\
+ mov r4, r9\n\
+ adds r4, 0x50\n\
+ adds r0, r1, r4\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801EC8E\n\
+ bl _0801F5DC\n\
+_0801EC8E:\n\
+ bl Random\n\
+ mov r3, r8\n\
+ ldrb r1, [r3]\n\
+ adds r2, r1, 0\n\
+ muls r2, r5\n\
+ adds r2, r4\n\
+ lsls r0, 16\n\
+ movs r1, 0xC0\n\
+ lsls r1, 10\n\
+ ands r1, r0\n\
+ lsrs r1, 16\n\
+ adds r1, 0x2\n\
+ ldr r0, [r2]\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ ldr r4, _0801ECC8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r1, _0801ECCC @ =gMoveEffectBS_Ptrs\n\
+ ldr r0, _0801ECD0 @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ bl _0801F5F8\n\
+ .align 2, 0\n\
+_0801ECC8: .4byte gBattlescriptCurrInstr\n\
+_0801ECCC: .4byte gMoveEffectBS_Ptrs\n\
+_0801ECD0: .4byte gBattleCommunication\n\
+_0801ECD4:\n\
+ mov r0, r8\n\
+ ldrb r2, [r0]\n\
+ movs r6, 0x58\n\
+ adds r0, r2, 0\n\
+ muls r0, r6\n\
+ add r0, r9\n\
+ adds r0, 0x20\n\
+ ldrb r1, [r0]\n\
+ cmp r1, 0x27\n\
+ bne _0801ED18\n\
+ cmp r4, 0x1\n\
+ beq _0801ECF4\n\
+ cmp r5, 0x80\n\
+ beq _0801ECF4\n\
+ bl _0801F5DC\n\
+_0801ECF4:\n\
+ ldr r0, _0801ED0C @ =gLastUsedAbility\n\
+ strb r1, [r0]\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ movs r1, 0x27\n\
+ bl RecordAbilityBattle\n\
+ ldr r1, _0801ED10 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _0801ED14 @ =BattleScript_FlinchPrevention\n\
+ str r0, [r1]\n\
+ bl _0801F5FA\n\
+ .align 2, 0\n\
+_0801ED0C: .4byte gLastUsedAbility\n\
+_0801ED10: .4byte gBattlescriptCurrInstr\n\
+_0801ED14: .4byte BattleScript_FlinchPrevention\n\
+_0801ED18:\n\
+ adds r0, r2, 0\n\
+ bl BankGetTurnOrder\n\
+ ldr r1, _0801ED54 @ =gCurrentMoveTurn\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bhi _0801ED2E\n\
+ bl _0801F5DC\n\
+_0801ED2E:\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ adds r2, r0, 0\n\
+ muls r2, r6\n\
+ mov r0, r9\n\
+ adds r0, 0x50\n\
+ adds r2, r0\n\
+ ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects\n\
+ ldr r0, _0801ED5C @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r1, [r2]\n\
+ ldr r0, [r0]\n\
+ orrs r1, r0\n\
+ str r1, [r2]\n\
+ bl _0801F5DC\n\
+ .align 2, 0\n\
+_0801ED54: .4byte gCurrentMoveTurn\n\
+_0801ED58: .4byte gStatusFlagsForMoveEffects\n\
+_0801ED5C: .4byte gBattleCommunication\n\
+_0801ED60:\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ movs r5, 0x58\n\
+ muls r0, r5\n\
+ mov r4, r9\n\
+ adds r4, 0x50\n\
+ adds r2, r0, r4\n\
+ ldr r1, [r2]\n\
+ movs r0, 0x70\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801ED7C\n\
+ bl _0801F5DC\n\
+_0801ED7C:\n\
+ movs r0, 0x80\n\
+ lsls r0, 5\n\
+ orrs r1, r0\n\
+ str r1, [r2]\n\
+ ldr r1, _0801EDC8 @ =gLockedMove\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldr r1, _0801EDCC @ =gCurrentMove\n\
+ ldrh r1, [r1]\n\
+ strh r1, [r0]\n\
+ bl Random\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ adds r2, r1, 0\n\
+ muls r2, r5\n\
+ adds r2, r4\n\
+ movs r1, 0x3\n\
+ ands r1, r0\n\
+ adds r1, 0x2\n\
+ lsls r1, 4\n\
+ ldr r0, [r2]\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ ldr r4, _0801EDD0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r1, _0801EDD4 @ =gMoveEffectBS_Ptrs\n\
+ ldr r0, _0801EDD8 @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ bl _0801F5F8\n\
+ .align 2, 0\n\
+_0801EDC8: .4byte gLockedMove\n\
+_0801EDCC: .4byte gCurrentMove\n\
+_0801EDD0: .4byte gBattlescriptCurrInstr\n\
+_0801EDD4: .4byte gMoveEffectBS_Ptrs\n\
+_0801EDD8: .4byte gBattleCommunication\n\
+_0801EDDC:\n\
+ ldr r5, _0801EE30 @ =gBankAttacker\n\
+ ldrb r0, [r5]\n\
+ bl GetBankIdentity\n\
+ movs r1, 0x1\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _0801EE14\n\
+ ldr r4, _0801EE34 @ =gPaydayMoney\n\
+ ldrh r3, [r4]\n\
+ ldr r2, _0801EE38 @ =gBattleMons\n\
+ ldrb r1, [r5]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r2\n\
+ adds r0, 0x2A\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ adds r0, r3, r0\n\
+ strh r0, [r4]\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r3, r0\n\
+ bls _0801EE14\n\
+ ldr r3, _0801EE3C @ =0x0000ffff\n\
+ adds r0, r3, 0\n\
+ strh r0, [r4]\n\
+_0801EE14:\n\
+ ldr r4, _0801EE40 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r1, _0801EE44 @ =gMoveEffectBS_Ptrs\n\
+ ldr r0, _0801EE48 @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ bl _0801F5F8\n\
+ .align 2, 0\n\
+_0801EE30: .4byte gBankAttacker\n\
+_0801EE34: .4byte gPaydayMoney\n\
+_0801EE38: .4byte gBattleMons\n\
+_0801EE3C: .4byte 0x0000ffff\n\
+_0801EE40: .4byte gBattlescriptCurrInstr\n\
+_0801EE44: .4byte gMoveEffectBS_Ptrs\n\
+_0801EE48: .4byte gBattleCommunication\n\
+_0801EE4C:\n\
+ mov r4, r8\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ mov r1, r9\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0801EE62\n\
+ b _0801F5DC\n\
+_0801EE62:\n\
+ bl Random\n\
+ ldr r4, _0801EE80 @ =gBattleCommunication\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ adds r0, 0x3\n\
+ strb r0, [r4, 0x3]\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ bl SetMoveEffect\n\
+ b _0801F5FA\n\
+ .align 2, 0\n\
+_0801EE80: .4byte gBattleCommunication\n\
+_0801EE84:\n\
+ mov r0, r8\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ adds r2, r1, 0\n\
+ muls r2, r0\n\
+ mov r0, r9\n\
+ adds r0, 0x50\n\
+ adds r2, r0\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 5\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ ldr r1, _0801EEC0 @ =gLockedMove\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldr r1, _0801EEC4 @ =gCurrentMove\n\
+ ldrh r1, [r1]\n\
+ strh r1, [r0]\n\
+ ldr r0, _0801EEC8 @ =gProtectStructs\n\
+ ldrb r1, [r2]\n\
+ lsls r1, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ movs r2, 0x4\n\
+ orrs r0, r2\n\
+ strb r0, [r1, 0x1]\n\
+ b _0801F5DC\n\
+ .align 2, 0\n\
+_0801EEC0: .4byte gLockedMove\n\
+_0801EEC4: .4byte gCurrentMove\n\
+_0801EEC8: .4byte gProtectStructs\n\
+_0801EECC:\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ movs r6, 0x58\n\
+ muls r0, r6\n\
+ mov r4, r9\n\
+ adds r4, 0x50\n\
+ adds r0, r4\n\
+ ldr r5, [r0]\n\
+ movs r0, 0xE0\n\
+ lsls r0, 8\n\
+ ands r5, r0\n\
+ cmp r5, 0\n\
+ beq _0801EEE8\n\
+ b _0801F5DC\n\
+_0801EEE8:\n\
+ bl Random\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ adds r2, r1, 0\n\
+ muls r2, r6\n\
+ adds r2, r4\n\
+ movs r1, 0x3\n\
+ ands r1, r0\n\
+ adds r1, 0x3\n\
+ lsls r1, 13\n\
+ ldr r0, [r2]\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ ldr r2, _0801EF80 @ =0x02000000\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 1\n\
+ ldr r4, _0801EF84 @ =0x00016004\n\
+ adds r0, r4\n\
+ adds r0, r2\n\
+ ldr r6, _0801EF88 @ =gCurrentMove\n\
+ ldrh r1, [r6]\n\
+ strb r1, [r0]\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 1\n\
+ ldr r1, _0801EF8C @ =0x00016005\n\
+ adds r0, r1\n\
+ adds r0, r2\n\
+ ldrh r1, [r6]\n\
+ lsrs r1, 8\n\
+ strb r1, [r0]\n\
+ ldrb r0, [r3]\n\
+ ldr r3, _0801EF90 @ =0x00016020\n\
+ adds r0, r3\n\
+ adds r0, r2\n\
+ ldr r1, _0801EF94 @ =gBankAttacker\n\
+ ldrb r1, [r1]\n\
+ strb r1, [r0]\n\
+ ldr r4, _0801EF98 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r1, _0801EF9C @ =gMoveEffectBS_Ptrs\n\
+ ldr r2, _0801EFA0 @ =gBattleCommunication\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ str r0, [r4]\n\
+ strb r5, [r2, 0x5]\n\
+ ldr r1, _0801EFA4 @ =gTrappingMoves\n\
+ ldrh r0, [r1]\n\
+ ldrh r4, [r6]\n\
+ cmp r0, r4\n\
+ bne _0801EF5C\n\
+ b _0801F5FA\n\
+_0801EF5C:\n\
+ adds r3, r1, 0\n\
+ adds r1, r6, 0\n\
+_0801EF60:\n\
+ ldrb r0, [r2, 0x5]\n\
+ adds r0, 0x1\n\
+ strb r0, [r2, 0x5]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x4\n\
+ bls _0801EF70\n\
+ b _0801F5FA\n\
+_0801EF70:\n\
+ ldrb r0, [r2, 0x5]\n\
+ lsls r0, 1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ ldrh r4, [r1]\n\
+ cmp r0, r4\n\
+ bne _0801EF60\n\
+ b _0801F5FA\n\
+ .align 2, 0\n\
+_0801EF80: .4byte 0x02000000\n\
+_0801EF84: .4byte 0x00016004\n\
+_0801EF88: .4byte gCurrentMove\n\
+_0801EF8C: .4byte 0x00016005\n\
+_0801EF90: .4byte 0x00016020\n\
+_0801EF94: .4byte gBankAttacker\n\
+_0801EF98: .4byte gBattlescriptCurrInstr\n\
+_0801EF9C: .4byte gMoveEffectBS_Ptrs\n\
+_0801EFA0: .4byte gBattleCommunication\n\
+_0801EFA4: .4byte gTrappingMoves\n\
+_0801EFA8:\n\
+ ldr r1, _0801EFD8 @ =gBattleMoveDamage\n\
+ ldr r0, _0801EFDC @ =gHP_dealt\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bge _0801EFB4\n\
+ adds r0, 0x3\n\
+_0801EFB4:\n\
+ asrs r0, 2\n\
+ str r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _0801EFC0\n\
+ movs r0, 0x1\n\
+ str r0, [r1]\n\
+_0801EFC0:\n\
+ ldr r4, _0801EFE0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r1, _0801EFE4 @ =gMoveEffectBS_Ptrs\n\
+ ldr r0, _0801EFE8 @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801EFD8: .4byte gBattleMoveDamage\n\
+_0801EFDC: .4byte gHP_dealt\n\
+_0801EFE0: .4byte gBattlescriptCurrInstr\n\
+_0801EFE4: .4byte gMoveEffectBS_Ptrs\n\
+_0801EFE8: .4byte gBattleCommunication\n\
+_0801EFEC:\n\
+ ldrb r1, [r7, 0x3]\n\
+ adds r1, 0xF2\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ movs r0, 0x10\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl ChangeStatBuffs\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ cmp r3, 0\n\
+ beq _0801F008\n\
+ b _0801F5DC\n\
+_0801F008:\n\
+ ldr r2, _0801F02C @ =0x02000000\n\
+ ldrb r1, [r7, 0x3]\n\
+ movs r0, 0x3F\n\
+ ands r0, r1\n\
+ ldr r4, _0801F030 @ =0x000160a4\n\
+ adds r1, r2, r4\n\
+ strb r0, [r1]\n\
+ ldr r0, _0801F034 @ =0x000160a5\n\
+ adds r2, r0\n\
+ strb r3, [r2]\n\
+ ldr r4, _0801F038 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F03C @ =BattleScript_StatUp\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801F02C: .4byte 0x02000000\n\
+_0801F030: .4byte 0x000160a4\n\
+_0801F034: .4byte 0x000160a5\n\
+_0801F038: .4byte gBattlescriptCurrInstr\n\
+_0801F03C: .4byte BattleScript_StatUp\n\
+_0801F040:\n\
+ movs r0, 0x70\n\
+ negs r0, r0\n\
+ ldrb r1, [r7, 0x3]\n\
+ adds r1, 0xEB\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl ChangeStatBuffs\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ cmp r3, 0\n\
+ beq _0801F05E\n\
+ b _0801F5DC\n\
+_0801F05E:\n\
+ ldr r2, _0801F080 @ =0x02000000\n\
+ ldrb r1, [r7, 0x3]\n\
+ movs r0, 0x3F\n\
+ ands r0, r1\n\
+ ldr r4, _0801F084 @ =0x000160a4\n\
+ adds r1, r2, r4\n\
+ strb r0, [r1]\n\
+ ldr r0, _0801F088 @ =0x000160a5\n\
+ adds r2, r0\n\
+ strb r3, [r2]\n\
+ ldr r4, _0801F08C @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F090 @ =BattleScript_StatDown\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801F080: .4byte 0x02000000\n\
+_0801F084: .4byte 0x000160a4\n\
+_0801F088: .4byte 0x000160a5\n\
+_0801F08C: .4byte gBattlescriptCurrInstr\n\
+_0801F090: .4byte BattleScript_StatDown\n\
+_0801F094:\n\
+ ldrb r1, [r7, 0x3]\n\
+ adds r1, 0xDA\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ movs r0, 0x20\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl ChangeStatBuffs\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ cmp r3, 0\n\
+ beq _0801F0B0\n\
+ b _0801F5DC\n\
+_0801F0B0:\n\
+ ldr r2, _0801F0D4 @ =0x02000000\n\
+ ldrb r1, [r7, 0x3]\n\
+ movs r0, 0x3F\n\
+ ands r0, r1\n\
+ ldr r4, _0801F0D8 @ =0x000160a4\n\
+ adds r1, r2, r4\n\
+ strb r0, [r1]\n\
+ ldr r0, _0801F0DC @ =0x000160a5\n\
+ adds r2, r0\n\
+ strb r3, [r2]\n\
+ ldr r4, _0801F0E0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F0E4 @ =BattleScript_StatUp\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801F0D4: .4byte 0x02000000\n\
+_0801F0D8: .4byte 0x000160a4\n\
+_0801F0DC: .4byte 0x000160a5\n\
+_0801F0E0: .4byte gBattlescriptCurrInstr\n\
+_0801F0E4: .4byte BattleScript_StatUp\n\
+_0801F0E8:\n\
+ movs r0, 0x60\n\
+ negs r0, r0\n\
+ ldrb r1, [r7, 0x3]\n\
+ adds r1, 0xD3\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl ChangeStatBuffs\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ cmp r3, 0\n\
+ beq _0801F106\n\
+ b _0801F5DC\n\
+_0801F106:\n\
+ ldr r2, _0801F128 @ =0x02000000\n\
+ ldrb r1, [r7, 0x3]\n\
+ movs r0, 0x3F\n\
+ ands r0, r1\n\
+ ldr r4, _0801F12C @ =0x000160a4\n\
+ adds r1, r2, r4\n\
+ strb r0, [r1]\n\
+ ldr r0, _0801F130 @ =0x000160a5\n\
+ adds r2, r0\n\
+ strb r3, [r2]\n\
+ ldr r4, _0801F134 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F138 @ =BattleScript_StatDown\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801F128: .4byte 0x02000000\n\
+_0801F12C: .4byte 0x000160a4\n\
+_0801F130: .4byte 0x000160a5\n\
+_0801F134: .4byte gBattlescriptCurrInstr\n\
+_0801F138: .4byte BattleScript_StatDown\n\
+_0801F13C:\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x58\n\
+ adds r2, r1, 0\n\
+ muls r2, r0\n\
+ mov r0, r9\n\
+ adds r0, 0x50\n\
+ adds r2, r0\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 15\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ ldr r2, _0801F178 @ =gDisableStructs\n\
+ mov r3, r8\n\
+ ldrb r1, [r3]\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ movs r1, 0x2\n\
+ strb r1, [r0, 0x19]\n\
+ ldr r1, _0801F17C @ =gLockedMove\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldr r1, _0801F180 @ =gCurrentMove\n\
+ ldrh r1, [r1]\n\
+ strh r1, [r0]\n\
+ b _0801F5DC\n\
+ .align 2, 0\n\
+_0801F178: .4byte gDisableStructs\n\
+_0801F17C: .4byte gLockedMove\n\
+_0801F180: .4byte gCurrentMove\n\
+_0801F184:\n\
+ ldr r0, _0801F1A0 @ =gBankAttacker\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ adds r2, r1, 0\n\
+ muls r2, r0\n\
+ mov r0, r9\n\
+ adds r0, 0x50\n\
+ adds r2, r0\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 16\n\
+_0801F19A:\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ b _0801F5DC\n\
+ .align 2, 0\n\
+_0801F1A0: .4byte gBankAttacker\n\
+_0801F1A4:\n\
+ ldr r4, _0801F254 @ =gBankAttacker\n\
+ ldrb r0, [r4]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ ldrb r0, [r4]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _0801F1D8\n\
+ ldr r0, _0801F258 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _0801F25C @ =0x00000902\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801F214\n\
+ ldr r0, _0801F260 @ =gTrainerBattleOpponent\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r1, r0\n\
+ beq _0801F1D8\n\
+ b _0801F5DC\n\
+_0801F1D8:\n\
+ ldr r0, _0801F258 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _0801F25C @ =0x00000902\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801F214\n\
+ ldr r0, _0801F260 @ =gTrainerBattleOpponent\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r1, r0\n\
+ beq _0801F214\n\
+ ldr r0, _0801F264 @ =gWishFutureKnock\n\
+ adds r0, 0x29\n\
+ adds r0, r6, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r3, _0801F268 @ =gBitTable\n\
+ ldr r2, _0801F26C @ =gBattlePartyID\n\
+ ldr r0, _0801F254 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ ldrh r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _0801F214\n\
+ b _0801F5DC\n\
+_0801F214:\n\
+ ldr r2, _0801F270 @ =gBattleMons\n\
+ ldr r1, _0801F274 @ =gBankTarget\n\
+ ldrb r0, [r1]\n\
+ movs r3, 0x58\n\
+ muls r0, r3\n\
+ adds r4, r0, r2\n\
+ ldrh r0, [r4, 0x2E]\n\
+ adds r7, r1, 0\n\
+ mov r9, r2\n\
+ cmp r0, 0\n\
+ beq _0801F284\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x3C\n\
+ bne _0801F284\n\
+ ldr r1, _0801F278 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _0801F27C @ =BattleScript_NoItemSteal\n\
+ str r0, [r1]\n\
+ ldr r1, _0801F280 @ =gLastUsedAbility\n\
+ ldrb r0, [r7]\n\
+ muls r0, r3\n\
+ add r0, r9\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ ldrb r1, [r1]\n\
+ bl RecordAbilityBattle\n\
+ b _0801F5FA\n\
+ .align 2, 0\n\
+_0801F254: .4byte gBankAttacker\n\
+_0801F258: .4byte gBattleTypeFlags\n\
+_0801F25C: .4byte 0x00000902\n\
+_0801F260: .4byte gTrainerBattleOpponent\n\
+_0801F264: .4byte gWishFutureKnock\n\
+_0801F268: .4byte gBitTable\n\
+_0801F26C: .4byte gBattlePartyID\n\
+_0801F270: .4byte gBattleMons\n\
+_0801F274: .4byte gBankTarget\n\
+_0801F278: .4byte gBattlescriptCurrInstr\n\
+_0801F27C: .4byte BattleScript_NoItemSteal\n\
+_0801F280: .4byte gLastUsedAbility\n\
+_0801F284:\n\
+ ldr r4, _0801F340 @ =gBankAttacker\n\
+ mov r10, r4\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x58\n\
+ mov r8, r0\n\
+ mov r0, r8\n\
+ muls r0, r1\n\
+ add r0, r9\n\
+ ldrh r3, [r0, 0x2E]\n\
+ cmp r3, 0\n\
+ beq _0801F29C\n\
+ b _0801F5DC\n\
+_0801F29C:\n\
+ ldrb r0, [r7]\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ add r0, r9\n\
+ ldrh r2, [r0, 0x2E]\n\
+ adds r0, r2, 0\n\
+ cmp r0, 0xAF\n\
+ bne _0801F2B0\n\
+ b _0801F5DC\n\
+_0801F2B0:\n\
+ cmp r0, 0\n\
+ bne _0801F2B6\n\
+ b _0801F5DC\n\
+_0801F2B6:\n\
+ lsls r0, r1, 1\n\
+ ldr r5, _0801F344 @ =0x020160f0\n\
+ adds r0, r5\n\
+ ldr r1, _0801F348 @ =gLastUsedItem\n\
+ strh r2, [r0]\n\
+ strh r2, [r1]\n\
+ ldrb r0, [r7]\n\
+ mov r4, r8\n\
+ muls r4, r0\n\
+ adds r0, r4, 0\n\
+ add r0, r9\n\
+ movs r6, 0\n\
+ strh r3, [r0, 0x2E]\n\
+ ldr r4, _0801F34C @ =gActiveBank\n\
+ mov r2, r10\n\
+ ldrb r0, [r2]\n\
+ strb r0, [r4]\n\
+ str r1, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ movs r2, 0\n\
+ movs r3, 0x2\n\
+ bl EmitSetAttributes\n\
+ mov r3, r10\n\
+ ldrb r0, [r3]\n\
+ bl MarkBufferBankForExecution\n\
+ ldrb r0, [r7]\n\
+ strb r0, [r4]\n\
+ ldrb r0, [r7]\n\
+ mov r4, r8\n\
+ muls r4, r0\n\
+ adds r0, r4, 0\n\
+ mov r1, r9\n\
+ adds r1, 0x2E\n\
+ adds r0, r1\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ movs r2, 0\n\
+ movs r3, 0x2\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r7]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r4, _0801F350 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F354 @ =BattleScript_ItemSteal\n\
+ str r0, [r4]\n\
+ ldr r0, _0801F358 @ =0xfffe9f10\n\
+ adds r5, r0\n\
+ ldrb r0, [r7]\n\
+ lsls r0, 1\n\
+ ldr r1, _0801F35C @ =0x000160e8\n\
+ adds r0, r1\n\
+ adds r0, r5\n\
+ strb r6, [r0]\n\
+ ldrb r0, [r7]\n\
+ lsls r0, 1\n\
+ ldr r2, _0801F360 @ =0x000160e9\n\
+ adds r0, r2\n\
+ adds r0, r5\n\
+ strb r6, [r0]\n\
+ b _0801F5FA\n\
+ .align 2, 0\n\
+_0801F340: .4byte gBankAttacker\n\
+_0801F344: .4byte 0x020160f0\n\
+_0801F348: .4byte gLastUsedItem\n\
+_0801F34C: .4byte gActiveBank\n\
+_0801F350: .4byte gBattlescriptCurrInstr\n\
+_0801F354: .4byte BattleScript_ItemSteal\n\
+_0801F358: .4byte 0xfffe9f10\n\
+_0801F35C: .4byte 0x000160e8\n\
+_0801F360: .4byte 0x000160e9\n\
+_0801F364:\n\
+ ldr r3, _0801F394 @ =gBankTarget\n\
+ ldrb r1, [r3]\n\
+ movs r0, 0x58\n\
+ adds r2, r1, 0\n\
+ muls r2, r0\n\
+ mov r0, r9\n\
+ adds r0, 0x50\n\
+ adds r2, r0\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 19\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ ldr r2, _0801F398 @ =gDisableStructs\n\
+ ldrb r1, [r3]\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldr r1, _0801F39C @ =gBankAttacker\n\
+ ldrb r1, [r1]\n\
+ strb r1, [r0, 0x14]\n\
+ b _0801F5DC\n\
+ .align 2, 0\n\
+_0801F394: .4byte gBankTarget\n\
+_0801F398: .4byte gDisableStructs\n\
+_0801F39C: .4byte gBankAttacker\n\
+_0801F3A0:\n\
+ ldr r0, _0801F3B8 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ adds r2, r1, 0\n\
+ muls r2, r0\n\
+ mov r0, r9\n\
+ adds r0, 0x50\n\
+ adds r2, r0\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 20\n\
+ b _0801F19A\n\
+ .align 2, 0\n\
+_0801F3B8: .4byte gBankTarget\n\
+_0801F3BC:\n\
+ ldr r4, _0801F3CC @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F3D0 @ =gUnknown_081D9224\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801F3CC: .4byte gBattlescriptCurrInstr\n\
+_0801F3D0: .4byte gUnknown_081D9224\n\
+_0801F3D4:\n\
+ ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F3E8 @ =BattleScript_RapidSpinAway\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801F3E4: .4byte gBattlescriptCurrInstr\n\
+_0801F3E8: .4byte BattleScript_RapidSpinAway\n\
+_0801F3EC:\n\
+ ldr r6, _0801F43C @ =gBankTarget\n\
+ ldrb r0, [r6]\n\
+ movs r2, 0x58\n\
+ muls r0, r2\n\
+ mov r1, r9\n\
+ adds r1, 0x4C\n\
+ adds r5, r0, r1\n\
+ ldr r4, [r5]\n\
+ movs r0, 0x40\n\
+ ands r0, r4\n\
+ cmp r0, 0\n\
+ bne _0801F406\n\
+ b _0801F5DC\n\
+_0801F406:\n\
+ movs r0, 0x41\n\
+ negs r0, r0\n\
+ ands r4, r0\n\
+ str r4, [r5]\n\
+ ldr r4, _0801F440 @ =gActiveBank\n\
+ ldrb r0, [r6]\n\
+ strb r0, [r4]\n\
+ ldrb r0, [r4]\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x28\n\
+ movs r2, 0\n\
+ movs r3, 0x4\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r4, _0801F444 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F448 @ =BattleScript_TargetPRLZHeal\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801F43C: .4byte gBankTarget\n\
+_0801F440: .4byte gActiveBank\n\
+_0801F444: .4byte gBattlescriptCurrInstr\n\
+_0801F448: .4byte BattleScript_TargetPRLZHeal\n\
+_0801F44C:\n\
+ ldr r4, _0801F45C @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F460 @ =gUnknown_081D93FA\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801F45C: .4byte gBattlescriptCurrInstr\n\
+_0801F460: .4byte gUnknown_081D93FA\n\
+_0801F464:\n\
+ ldr r4, _0801F494 @ =gBattleMoveDamage\n\
+ ldr r0, _0801F498 @ =gHP_dealt\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x3\n\
+ bl __divsi3\n\
+ str r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _0801F47A\n\
+ movs r0, 0x1\n\
+ str r0, [r4]\n\
+_0801F47A:\n\
+ ldr r4, _0801F49C @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r1, _0801F4A0 @ =gMoveEffectBS_Ptrs\n\
+ ldr r0, _0801F4A4 @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ b _0801F5F8\n\
+ .align 2, 0\n\
+_0801F494: .4byte gBattleMoveDamage\n\
+_0801F498: .4byte gHP_dealt\n\
+_0801F49C: .4byte gBattlescriptCurrInstr\n\
+_0801F4A0: .4byte gMoveEffectBS_Ptrs\n\
+_0801F4A4: .4byte gBattleCommunication\n\
+_0801F4A8:\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ movs r5, 0x58\n\
+ muls r0, r5\n\
+ mov r4, r9\n\
+ adds r4, 0x50\n\
+ adds r2, r0, r4\n\
+ ldr r1, [r2]\n\
+ movs r0, 0xC0\n\
+ lsls r0, 4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801F4C4\n\
+ b _0801F5DC\n\
+_0801F4C4:\n\
+ movs r0, 0x80\n\
+ lsls r0, 5\n\
+ orrs r1, r0\n\
+ str r1, [r2]\n\
+ ldr r1, _0801F4F8 @ =gLockedMove\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldr r1, _0801F4FC @ =gCurrentMove\n\
+ ldrh r1, [r1]\n\
+ strh r1, [r0]\n\
+ bl Random\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ adds r2, r1, 0\n\
+ muls r2, r5\n\
+ adds r2, r4\n\
+ movs r1, 0x1\n\
+ ands r1, r0\n\
+ adds r1, 0x2\n\
+ lsls r1, 10\n\
+ ldr r0, [r2]\n\
+_0801F4F2:\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ b _0801F5FA\n\
+ .align 2, 0\n\
+_0801F4F8: .4byte gLockedMove\n\
+_0801F4FC: .4byte gCurrentMove\n\
+_0801F500:\n\
+ mov r5, r8\n\
+ ldrb r3, [r5]\n\
+ movs r4, 0x58\n\
+ adds r0, r3, 0\n\
+ muls r0, r4\n\
+ mov r2, r9\n\
+ adds r1, r0, r2\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r2, [r0]\n\
+ cmp r2, 0x3C\n\
+ bne _0801F540\n\
+ ldrh r0, [r1, 0x2E]\n\
+ cmp r0, 0\n\
+ beq _0801F5DC\n\
+ ldr r0, _0801F534 @ =gLastUsedAbility\n\
+ strb r2, [r0]\n\
+ ldr r1, _0801F538 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _0801F53C @ =BattleScript_NoItemSteal\n\
+ str r0, [r1]\n\
+ ldrb r0, [r5]\n\
+ movs r1, 0x3C\n\
+ bl RecordAbilityBattle\n\
+ b _0801F5FA\n\
+ .align 2, 0\n\
+_0801F534: .4byte gLastUsedAbility\n\
+_0801F538: .4byte gBattlescriptCurrInstr\n\
+_0801F53C: .4byte BattleScript_NoItemSteal\n\
+_0801F540:\n\
+ ldrh r0, [r1, 0x2E]\n\
+ cmp r0, 0\n\
+ beq _0801F5DC\n\
+ adds r0, r3, 0\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ ldr r1, _0801F5B8 @ =gLastUsedItem\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ muls r0, r4\n\
+ add r0, r9\n\
+ ldrh r0, [r0, 0x2E]\n\
+ strh r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ muls r0, r4\n\
+ add r0, r9\n\
+ movs r5, 0\n\
+ movs r1, 0\n\
+ strh r1, [r0, 0x2E]\n\
+ ldr r2, _0801F5BC @ =gWishFutureKnock\n\
+ adds r2, 0x29\n\
+ adds r2, r6, r2\n\
+ ldr r3, _0801F5C0 @ =gBitTable\n\
+ ldr r1, _0801F5C4 @ =gBattlePartyID\n\
+ mov r4, r8\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r4, _0801F5C8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F5CC @ =BattleScript_KnockedOff\n\
+ str r0, [r4]\n\
+ ldr r1, _0801F5D0 @ =0x02000000\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 1\n\
+ ldr r3, _0801F5D4 @ =0x000160e8\n\
+ adds r0, r3\n\
+ adds r0, r1\n\
+ strb r5, [r0]\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 1\n\
+ ldr r4, _0801F5D8 @ =0x000160e9\n\
+ adds r0, r4\n\
+ adds r0, r1\n\
+ strb r5, [r0]\n\
+ b _0801F5FA\n\
+ .align 2, 0\n\
+_0801F5B8: .4byte gLastUsedItem\n\
+_0801F5BC: .4byte gWishFutureKnock\n\
+_0801F5C0: .4byte gBitTable\n\
+_0801F5C4: .4byte gBattlePartyID\n\
+_0801F5C8: .4byte gBattlescriptCurrInstr\n\
+_0801F5CC: .4byte BattleScript_KnockedOff\n\
+_0801F5D0: .4byte 0x02000000\n\
+_0801F5D4: .4byte 0x000160e8\n\
+_0801F5D8: .4byte 0x000160e9\n\
+_0801F5DC:\n\
+ ldr r1, _0801F5E8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x1\n\
+ str r0, [r1]\n\
+ b _0801F5FA\n\
+ .align 2, 0\n\
+_0801F5E8: .4byte gBattlescriptCurrInstr\n\
+_0801F5EC:\n\
+ ldr r4, _0801F60C @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801F610 @ =gUnknown_081D94B0\n\
+_0801F5F8:\n\
+ str r0, [r4]\n\
+_0801F5FA:\n\
+ add sp, 0x8\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0801F60C: .4byte gBattlescriptCurrInstr\n\
+_0801F610: .4byte gUnknown_081D94B0\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+static void atk15_seteffectwithchancetarget(void)
+{
+ u32 PercentChance;
+ if (gBattleMons[gBankAttacker].ability == ABILITY_SERENE_GRACE)
+ PercentChance = gBattleMoves[gCurrentMove].secondaryEffectChance * 2;
+ else
+ PercentChance = gBattleMoves[gCurrentMove].secondaryEffectChance;
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] & 0x80 && !(gBattleMoveFlags & MOVE_NO_EFFECT))
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] &= 0x7F;
+ SetMoveEffect(0, 0x80);
+ }
+ else if (Random() % 100 <= PercentChance && gBattleCommunication[MOVE_EFFECT_BYTE] && !(gBattleMoveFlags & MOVE_NO_EFFECT))
+ {
+ if (PercentChance >= 100)
+ SetMoveEffect(0, 0x80);
+ else
+ SetMoveEffect(0, 0);
+ }
+ else
+ gBattlescriptCurrInstr++;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later
+}
+
+static void atk16_seteffectprimary(void)
+{
+ SetMoveEffect(1, 0);
+}
+
+static void atk17_seteffectsecondary(void)
+{
+ SetMoveEffect(0, 0);
+}
+
+static void atk18_status_effect_clear(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6)
+ gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+ else
+ gBattleMons[gActiveBank].status2 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattlescriptCurrInstr += 2;
+ BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later
+}
+
+//Fuck this, Maybe later
+__attribute__((naked))
+static void atk19_faint_pokemon(void)
+{
+ asm(".syntax unified\n\
+push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ ldr r0, _0801F81C @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r0]\n\
+ ldrb r1, [r2, 0x2]\n\
+ adds r6, r0, 0\n\
+ cmp r1, 0\n\
+ beq _0801F834\n\
+ ldrb r0, [r2, 0x1]\n\
+ bl GetBattleBank\n\
+ ldr r5, _0801F820 @ =gActiveBank\n\
+ strb r0, [r5]\n\
+ ldr r2, _0801F824 @ =gHitMarker\n\
+ ldr r1, _0801F828 @ =gBitTable\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r2]\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801F7E6\n\
+ b _0801FB1C\n\
+_0801F7E6:\n\
+ ldr r1, [r6]\n\
+ ldrb r4, [r1, 0x3]\n\
+ ldrb r0, [r1, 0x4]\n\
+ lsls r0, 8\n\
+ orrs r4, r0\n\
+ ldrb r0, [r1, 0x5]\n\
+ lsls r0, 16\n\
+ orrs r4, r0\n\
+ ldrb r0, [r1, 0x6]\n\
+ lsls r0, 24\n\
+ orrs r4, r0\n\
+ bl b_movescr_stack_pop_cursor\n\
+ str r4, [r6]\n\
+ ldrb r0, [r5]\n\
+ bl GetBankSide\n\
+ ldr r1, _0801F82C @ =gSideAffecting\n\
+ lsls r0, 24\n\
+ lsrs r0, 23\n\
+ adds r0, r1\n\
+ ldrh r2, [r0]\n\
+ ldr r1, _0801F830 @ =0x0000fdff\n\
+ ands r1, r2\n\
+ strh r1, [r0]\n\
+ b _0801FB22\n\
+ .align 2, 0\n\
+_0801F81C: .4byte gBattlescriptCurrInstr\n\
+_0801F820: .4byte gActiveBank\n\
+_0801F824: .4byte gHitMarker\n\
+_0801F828: .4byte gBitTable\n\
+_0801F82C: .4byte gSideAffecting\n\
+_0801F830: .4byte 0x0000fdff\n\
+_0801F834:\n\
+ ldrb r0, [r2, 0x1]\n\
+ cmp r0, 0x1\n\
+ bne _0801F85C\n\
+ ldr r1, _0801F84C @ =gActiveBank\n\
+ ldr r0, _0801F850 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldr r0, _0801F854 @ =gBankTarget\n\
+ ldrb r7, [r0]\n\
+ ldr r4, _0801F858 @ =gUnknown_081D8C58\n\
+ b _0801F86A\n\
+ .align 2, 0\n\
+_0801F84C: .4byte gActiveBank\n\
+_0801F850: .4byte gBankAttacker\n\
+_0801F854: .4byte gBankTarget\n\
+_0801F858: .4byte gUnknown_081D8C58\n\
+_0801F85C:\n\
+ ldr r1, _0801F954 @ =gActiveBank\n\
+ ldr r0, _0801F958 @ =gBankTarget\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldr r0, _0801F95C @ =gBankAttacker\n\
+ ldrb r7, [r0]\n\
+ ldr r4, _0801F960 @ =gUnknown_081D8C65\n\
+_0801F86A:\n\
+ ldr r0, _0801F964 @ =gAbsentBankFlags\n\
+ ldrb r1, [r0]\n\
+ ldr r0, _0801F968 @ =gBitTable\n\
+ mov r12, r0\n\
+ ldr r2, _0801F954 @ =gActiveBank\n\
+ mov r8, r2\n\
+ ldrb r2, [r2]\n\
+ lsls r0, r2, 2\n\
+ add r0, r12\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _0801F886\n\
+ b _0801FB1C\n\
+_0801F886:\n\
+ ldr r3, _0801F96C @ =gBattleMons\n\
+ mov r10, r3\n\
+ movs r5, 0x58\n\
+ mov r9, r5\n\
+ mov r0, r9\n\
+ muls r0, r2\n\
+ add r0, r10\n\
+ ldrh r3, [r0, 0x28]\n\
+ cmp r3, 0\n\
+ beq _0801F89C\n\
+ b _0801FB1C\n\
+_0801F89C:\n\
+ ldr r2, _0801F970 @ =0x02000000\n\
+ lsls r1, r7, 1\n\
+ ldr r5, _0801F974 @ =0x000160ac\n\
+ adds r0, r1, r5\n\
+ adds r0, r2\n\
+ strb r3, [r0]\n\
+ ldr r0, _0801F978 @ =0x000160ad\n\
+ adds r1, r0\n\
+ adds r1, r2\n\
+ strb r3, [r1]\n\
+ lsls r1, r7, 2\n\
+ adds r5, 0x54\n\
+ adds r0, r1, r5\n\
+ adds r0, r2\n\
+ strb r3, [r0]\n\
+ adds r5, 0x1\n\
+ adds r0, r1, r5\n\
+ adds r0, r2\n\
+ strb r3, [r0]\n\
+ adds r5, 0x1\n\
+ adds r0, r1, r5\n\
+ adds r0, r2\n\
+ strb r3, [r0]\n\
+ ldr r0, _0801F97C @ =0x00016103\n\
+ adds r1, r0\n\
+ adds r1, r2\n\
+ strb r3, [r1]\n\
+ ldr r5, _0801F980 @ =gHitMarker\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 2\n\
+ add r0, r12\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r5]\n\
+ orrs r0, r1\n\
+ str r0, [r5]\n\
+ ldr r0, [r6]\n\
+ adds r0, 0x7\n\
+ bl b_movescr_stack_push\n\
+ str r4, [r6]\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0801F9B0\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x80\n\
+ lsls r1, 15\n\
+ orrs r0, r1\n\
+ str r0, [r5]\n\
+ ldr r1, _0801F984 @ =gBattleResults\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xFE\n\
+ bhi _0801F914\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+_0801F914:\n\
+ mov r0, r9\n\
+ muls r0, r7\n\
+ add r0, r10\n\
+ adds r3, r0, 0\n\
+ adds r3, 0x2A\n\
+ mov r4, r8\n\
+ ldrb r2, [r4]\n\
+ mov r0, r9\n\
+ muls r0, r2\n\
+ add r0, r10\n\
+ adds r1, r0, 0\n\
+ adds r1, 0x2A\n\
+ ldrb r0, [r3]\n\
+ ldrb r5, [r1]\n\
+ cmp r0, r5\n\
+ bls _0801F9CC\n\
+ ldrb r1, [r1]\n\
+ subs r0, r1\n\
+ cmp r0, 0x1D\n\
+ ble _0801F990\n\
+ ldr r1, _0801F988 @ =gBattlePartyID\n\
+ lsls r0, r2, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _0801F98C @ =gPlayerParty\n\
+ adds r0, r1\n\
+ movs r1, 0x8\n\
+ bl AdjustFriendship\n\
+ b _0801F9CC\n\
+ .align 2, 0\n\
+_0801F954: .4byte gActiveBank\n\
+_0801F958: .4byte gBankTarget\n\
+_0801F95C: .4byte gBankAttacker\n\
+_0801F960: .4byte gUnknown_081D8C65\n\
+_0801F964: .4byte gAbsentBankFlags\n\
+_0801F968: .4byte gBitTable\n\
+_0801F96C: .4byte gBattleMons\n\
+_0801F970: .4byte 0x02000000\n\
+_0801F974: .4byte 0x000160ac\n\
+_0801F978: .4byte 0x000160ad\n\
+_0801F97C: .4byte 0x00016103\n\
+_0801F980: .4byte gHitMarker\n\
+_0801F984: .4byte gBattleResults\n\
+_0801F988: .4byte gBattlePartyID\n\
+_0801F98C: .4byte gPlayerParty\n\
+_0801F990:\n\
+ ldr r1, _0801F9A8 @ =gBattlePartyID\n\
+ lsls r0, r2, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _0801F9AC @ =gPlayerParty\n\
+ adds r0, r1\n\
+ movs r1, 0x6\n\
+ bl AdjustFriendship\n\
+ b _0801F9CC\n\
+ .align 2, 0\n\
+_0801F9A8: .4byte gBattlePartyID\n\
+_0801F9AC: .4byte gPlayerParty\n\
+_0801F9B0:\n\
+ ldr r1, _0801FAE0 @ =gBattleResults\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0xFE\n\
+ bhi _0801F9BC\n\
+ adds r0, 0x1\n\
+ strb r0, [r1, 0x1]\n\
+_0801F9BC:\n\
+ ldr r2, _0801FAE4 @ =gActiveBank\n\
+ ldrb r0, [r2]\n\
+ mov r3, r9\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ add r0, r10\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r1, 0x20]\n\
+_0801F9CC:\n\
+ ldr r0, _0801FAE8 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801FA02\n\
+ ldr r6, _0801FAEC @ =gBattleMons\n\
+ ldr r0, _0801FAF0 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ movs r5, 0x58\n\
+ muls r0, r5\n\
+ adds r0, r6\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ beq _0801FA02\n\
+ ldr r4, _0801FAF4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ bl b_movescr_stack_push\n\
+ ldr r1, _0801FAF8 @ =gBattleMoveDamage\n\
+ adds r0, r7, 0\n\
+ muls r0, r5\n\
+ adds r0, r6\n\
+ ldrh r0, [r0, 0x28]\n\
+ str r0, [r1]\n\
+ ldr r0, _0801FAFC @ =gUnknown_081D9156\n\
+ str r0, [r4]\n\
+_0801FA02:\n\
+ ldr r1, _0801FB00 @ =gStatuses3\n\
+ ldr r6, _0801FB04 @ =gBankTarget\n\
+ ldrb r0, [r6]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801FA1A\n\
+ b _0801FB22\n\
+_0801FA1A:\n\
+ ldr r0, _0801FAE8 @ =gHitMarker\n\
+ ldr r5, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 17\n\
+ ands r5, r0\n\
+ cmp r5, 0\n\
+ bne _0801FB22\n\
+ ldr r4, _0801FAF0 @ =gBankAttacker\n\
+ mov r8, r4\n\
+ ldrb r0, [r4]\n\
+ bl GetBankSide\n\
+ adds r4, r0, 0\n\
+ ldrb r0, [r6]\n\
+ bl GetBankSide\n\
+ lsls r4, 24\n\
+ lsls r0, 24\n\
+ cmp r4, r0\n\
+ beq _0801FB22\n\
+ ldr r0, _0801FAEC @ =gBattleMons\n\
+ mov r9, r0\n\
+ mov r1, r8\n\
+ ldrb r2, [r1]\n\
+ movs r7, 0x58\n\
+ adds r3, r2, 0\n\
+ muls r3, r7\n\
+ adds r0, r3, r0\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ beq _0801FB22\n\
+ ldr r0, _0801FB08 @ =gCurrentMove\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0xA5\n\
+ beq _0801FB22\n\
+ ldr r1, _0801FB0C @ =0x02000000\n\
+ ldr r4, _0801FB10 @ =0x0001608c\n\
+ adds r0, r2, r4\n\
+ adds r0, r1\n\
+ ldrb r4, [r0]\n\
+ adds r0, r4, r3\n\
+ mov r6, r9\n\
+ adds r6, 0x24\n\
+ adds r0, r6\n\
+ strb r5, [r0]\n\
+ ldr r5, _0801FAF4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r5]\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _0801FB14 @ =gUnknown_081D9468\n\
+ str r0, [r5]\n\
+ ldr r5, _0801FAE4 @ =gActiveBank\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ strb r0, [r5]\n\
+ adds r1, r4, 0\n\
+ adds r1, 0x9\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ ldrb r0, [r5]\n\
+ muls r0, r7\n\
+ adds r0, r6\n\
+ adds r0, r4\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r2, 0\n\
+ movs r3, 0x1\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r5]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r1, _0801FB18 @ =gBattleTextBuff1\n\
+ movs r0, 0xFD\n\
+ strb r0, [r1]\n\
+ movs r0, 0x2\n\
+ strb r0, [r1, 0x1]\n\
+ lsls r4, 1\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ muls r0, r7\n\
+ adds r0, r4, r0\n\
+ mov r2, r9\n\
+ adds r2, 0xC\n\
+ adds r0, r2\n\
+ ldrh r0, [r0]\n\
+ strb r0, [r1, 0x2]\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ muls r0, r7\n\
+ adds r4, r0\n\
+ adds r4, r2\n\
+ ldrh r0, [r4]\n\
+ lsrs r0, 8\n\
+ strb r0, [r1, 0x3]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x4]\n\
+ b _0801FB22\n\
+ .align 2, 0\n\
+_0801FAE0: .4byte gBattleResults\n\
+_0801FAE4: .4byte gActiveBank\n\
+_0801FAE8: .4byte gHitMarker\n\
+_0801FAEC: .4byte gBattleMons\n\
+_0801FAF0: .4byte gBankAttacker\n\
+_0801FAF4: .4byte gBattlescriptCurrInstr\n\
+_0801FAF8: .4byte gBattleMoveDamage\n\
+_0801FAFC: .4byte gUnknown_081D9156\n\
+_0801FB00: .4byte gStatuses3\n\
+_0801FB04: .4byte gBankTarget\n\
+_0801FB08: .4byte gCurrentMove\n\
+_0801FB0C: .4byte 0x02000000\n\
+_0801FB10: .4byte 0x0001608c\n\
+_0801FB14: .4byte gUnknown_081D9468\n\
+_0801FB18: .4byte gBattleTextBuff1\n\
+_0801FB1C:\n\
+ ldr r0, [r6]\n\
+ adds r0, 0x7\n\
+ str r0, [r6]\n\
+_0801FB22:\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+
+static void atk1A_faint_animation(void)
+{
+ if (gBattleExecBuffer) {return;}
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ EmitFaintAnimation(0);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk1B_faint_effects_clear(void)
+{
+ //Clears things like attraction or trapping to other banks
+ if (gBattleExecBuffer) {return;}
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ gBattleMons[gActiveBank].status1 = 0;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ UndoEffectsAfterFainting();
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk1C_jumpifstatus(void)
+{
+ u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
+ void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+ if (gBattleMons[bank].status1 & flags && gBattleMons[bank].hp)
+ gBattlescriptCurrInstr = jump_loc;
+ else
+ gBattlescriptCurrInstr += 10;
+}
+
+static void atk1D_jumpifstatus2(void)
+{
+ u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
+ void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+ if (gBattleMons[bank].status2 & flags && gBattleMons[bank].hp)
+ gBattlescriptCurrInstr = jump_loc;
+ else
+ gBattlescriptCurrInstr += 10;
+}
+
+static void atk1E_jumpifability(void)
+{
+ u8 bank;
+ u8 ability = BSScriptRead8(gBattlescriptCurrInstr + 2);
+ void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 8)
+ {
+ bank = AbilityBattleEffects(ABILITY_CHECK_BANK_SIDE, gBankAttacker, ability, 0, 0);
+ if (bank)
+ {
+ gLastUsedAbility = ability;
+ gBattlescriptCurrInstr = jump_loc;
+ RecordAbilityBattle(bank -1, gLastUsedAbility);
+ unk_2000000[0x160f8] = bank - 1;
+ }
+ else
+ gBattlescriptCurrInstr += 7;
+ }
+ else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 9)
+ {
+ bank = AbilityBattleEffects(ABILITY_CHECK_OTHER_SIDE, gBankAttacker, ability, 0, 0);
+ if (bank)
+ {
+ gLastUsedAbility = ability;
+ gBattlescriptCurrInstr = jump_loc;
+ RecordAbilityBattle(bank - 1, gLastUsedAbility);
+ unk_2000000[0x160f8] = bank - 1;
+ }
+ else
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ if (gBattleMons[bank].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ gBattlescriptCurrInstr = jump_loc;
+ RecordAbilityBattle(bank, gLastUsedAbility);
+ unk_2000000[0x160f8] = bank;
+ }
+ else
+ gBattlescriptCurrInstr += 7;
+ }
+}
+
+static void atk1F_jumpifsideaffecting(void)
+{
+ u8 side;
+ u16 flags;
+ void* jump_loc;
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1)
+ side = GetBankIdentity(gBankAttacker) & 1;
+ else
+ side = GetBankIdentity(gBankTarget) & 1;
+
+ flags = BS2ScriptRead16(gBattlescriptCurrInstr + 2);
+ jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 4);
+
+ if (gSideAffecting[side] & flags)
+ gBattlescriptCurrInstr = jump_loc;
+ else
+ gBattlescriptCurrInstr += 8;
+}
+
+static void atk20_jumpifstat(void)
+{
+ u8 ret = 0;
+ u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ u8 value = gBattleMons[bank].statStages[BSScriptRead8(gBattlescriptCurrInstr + 3)];
+ switch (BSScriptRead8(gBattlescriptCurrInstr + 2))
+ {
+ case CMP_EQUAL:
+ if (value == BSScriptRead8(gBattlescriptCurrInstr + 4))
+ ret++;
+ break;
+ case CMP_NOT_EQUAL:
+ if (value != BSScriptRead8(gBattlescriptCurrInstr + 4))
+ ret++;
+ break;
+ case CMP_GREATER_THAN:
+ if (value > BSScriptRead8(gBattlescriptCurrInstr + 4))
+ ret++;
+ break;
+ case CMP_LESS_THAN:
+ if (value < BSScriptRead8(gBattlescriptCurrInstr + 4))
+ ret++;
+ break;
+ case CMP_COMMON_BITS:
+ if (value & BSScriptRead8(gBattlescriptCurrInstr + 4))
+ ret++;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(value & BSScriptRead8(gBattlescriptCurrInstr + 4)))
+ ret++;
+ break;
+ }
+ if (ret)
+ gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ else
+ gBattlescriptCurrInstr += 9;
+}
+
+static void atk21_jumpifstatus3(void)
+{
+ u32 flags;
+ void* jump_loc;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
+ jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7);
+ if (BSScriptRead8(gBattlescriptCurrInstr + 6))
+ {
+ if ((gStatuses3[gActiveBank] & flags) != 0)
+ gBattlescriptCurrInstr += 11;
+ else
+ gBattlescriptCurrInstr = jump_loc;
+ }
+ else
+ {
+ if ((gStatuses3[gActiveBank] & flags) != 0)
+ gBattlescriptCurrInstr = jump_loc;
+ else
+ gBattlescriptCurrInstr += 11;
+ }
+}
+
+static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr
+{
+ u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ u8 type = BSScriptRead8(gBattlescriptCurrInstr + 2);
+ void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
+
+ if (gBattleMons[bank].type1 == type || gBattleMons[bank].type2 == type)
+ gBattlescriptCurrInstr = jump_loc;
+ else
+ gBattlescriptCurrInstr += 7;
+}
+
+//here we go again...
+#ifdef NONMATCHING
+static void atk23_getexp(void)
+{
+ u8 hold_effect;
+ int via_expshare = 0, sent_in;
+ u16* exp = &BATTLE_STRUCT->exp;
+ gBank1 = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ sent_in = gSentPokesToOpponent[(gBank1 & 2) >> 1];
+ switch (BATTLE_STRUCT->atk23StateTracker)
+ {
+ case 0: //check if should receive exp at all
+ if (GetBankSide(gBank1) != 1 || (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
+ BATTLE_STRUCT->atk23StateTracker = 6; //goto last case
+ else
+ {
+ BATTLE_STRUCT->atk23StateTracker++;
+ unk_2000000[0x16113] |= gBitTable[gBattlePartyID[gBank1]];
+ }
+ break;
+ case 1: //calculate experience points to redistribute
+ {
+ int via_sent_in = 0, i;
+ u16 calculatedExp;
+ for (i = 0; i < 6; i++)
+ {
+ u16 item;
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
+ continue;
+ if (gBitTable[i] & sent_in)
+ via_sent_in++;
+
+ item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ if (item == ITEM_ENIGMA_BERRY)
+ hold_effect = gSaveBlock1.enigmaBerry.holdEffect;
+ else
+ hold_effect = ItemId_GetHoldEffect(item);
+
+ if (hold_effect == HOLD_EFFECT_EXP_SHARE)
+ via_expshare++;
+ }
+ calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7;
+ if (via_expshare) //at least one poke is getting exp via exp share
+ {
+ calculatedExp /= 2;
+ *exp = calculatedExp / via_sent_in;
+ ATLEAST_ONE_PTR(exp);
+
+ gExpShareExp = calculatedExp / via_expshare;
+ ATLEAST_ONE_PTR(&gExpShareExp);
+ }
+ else
+ {
+ *exp = calculatedExp / via_sent_in;
+ ATLEAST_ONE_PTR(exp);
+ gExpShareExp = 0;
+ }
+ BATTLE_STRUCT->atk23StateTracker++;
+ BATTLE_STRUCT->expGetterID = 0;
+ BATTLE_STRUCT->sentInPokes = sent_in;
+ } //no break statement
+ case 2: //loop; set exp value to the poke in expgetter_id and print message
+ if (gBattleExecBuffer == 0)
+ {
+ u16 item = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HELD_ITEM);
+ u8* tracker; u32 zero;
+ if (item == ITEM_ENIGMA_BERRY)
+ hold_effect = gSaveBlock1.enigmaBerry.holdEffect;
+ else
+ hold_effect = ItemId_GetHoldEffect(item);
+
+ if ((hold_effect != HOLD_EFFECT_EXP_SHARE && !(BATTLE_STRUCT->sentInPokes & 1)))
+ {
+ BATTLE_STRUCT->sentInPokes >>= 1;
+ tracker = &BATTLE_STRUCT->atk23StateTracker;
+ zero = 0;
+ goto LABEL;
+ }
+ else if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) == 100)
+ {
+
+ BATTLE_STRUCT->sentInPokes >>= 1;
+ tracker = &BATTLE_STRUCT->atk23StateTracker;
+ zero = 0;
+ LABEL:
+ *tracker = 5; //increment looper
+ gBattleMoveDamage = zero; //used for exp
+ }
+ else
+ {
+ //music change in wild battle after fainting a poke
+ if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !BATTLE_STRUCT->wildVictorySong)
+ {
+ BattleMusicStop();
+ PlayBGM(0x161);
+ BATTLE_STRUCT->wildVictorySong++;
+ }
+
+ if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP))
+ {
+ s16 stringID;
+ if (BATTLE_STRUCT->sentInPokes & 1)
+ gBattleMoveDamage = *exp;
+ else
+ gBattleMoveDamage = 0;
+
+ if (hold_effect == HOLD_EFFECT_EXP_SHARE)
+ gBattleMoveDamage += gExpShareExp;
+ if (hold_effect == HOLD_EFFECT_LUCKY_EGG)
+ gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
+
+ if (IsTradedMon(&gPlayerParty[BATTLE_STRUCT->expGetterID]))
+ {
+ gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
+ stringID = 0x14A;
+ }
+ else
+ stringID = 0x149;
+
+ //get exp getter bank
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (!(gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) && !(gAbsentBankFlags & gBitTable[2]))
+ BATTLE_STRUCT->expGetterBank = 2;
+ else
+ {
+ if (!(gAbsentBankFlags & gBitTable[0]))
+ BATTLE_STRUCT->expGetterBank = 0;
+ else
+ BATTLE_STRUCT->expGetterBank = 2;
+ }
+ }
+ else
+ BATTLE_STRUCT->expGetterBank = 0;
+
+ //buffer poke name
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 4;
+ gBattleTextBuff1[2] = BATTLE_STRUCT->expGetterBank;
+ gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID;
+ gBattleTextBuff1[4] = 0xFF;
+
+ //buffer 'gained' or 'gained a boosted'
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 0;
+ gBattleTextBuff2[2] = sBYTE0_32(stringID);
+ gBattleTextBuff2[3] = sBYTE1_32(stringID);
+ gBattleTextBuff2[4] = 0xFF;
+
+ //buffer exp number
+ gBattleTextBuff3[0] = 0xFD;
+ gBattleTextBuff3[1] = 1;
+ gBattleTextBuff3[2] = 4; //word
+ gBattleTextBuff3[3] = 5; //max digits
+ gBattleTextBuff3[4] = gBattleMoveDamage;
+ gBattleTextBuff3[5] = sBYTE1_32(gBattleMoveDamage);
+ gBattleTextBuff3[6] = sBYTE2_32(gBattleMoveDamage);
+ gBattleTextBuff3[7] = sBYTE3_32(gBattleMoveDamage);
+ gBattleTextBuff3[8] = 0xFF;
+
+ PrepareStringBattle(0xD, BATTLE_STRUCT->expGetterBank);
+ MonGainEVs(&gPlayerParty[BATTLE_STRUCT->expGetterID], gBattleMons[gBank1].species);
+ }
+ BATTLE_STRUCT->sentInPokes >>= 1;
+ BATTLE_STRUCT->atk23StateTracker++;
+ }
+ }
+ break;
+ case 3: //Set Stats and give exp
+ if (gBattleExecBuffer == 0)
+ {
+ gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0;
+ if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100)
+ {
+ BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); //doesnt match
+ BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
+ BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
+ BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD);
+ BATTLE_STRUCT->beforeLvlUp[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
+ BATTLE_STRUCT->beforeLvlUp[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF);
+
+ gActiveBank = BATTLE_STRUCT->expGetterBank;
+ EmitExpBarUpdate(0, BATTLE_STRUCT->expGetterID, gBattleMoveDamage);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ BATTLE_STRUCT->atk23StateTracker++;
+ }
+ break;
+ case 4: //lvl up if necessary
+ if (gBattleExecBuffer == 0)
+ {
+ gActiveBank = BATTLE_STRUCT->expGetterBank;
+ if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID)
+ sub_80324F8(&gPlayerParty[gActiveBank], gActiveBank);
+
+ //buff poke name
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 4;
+ gBattleTextBuff1[2] = gActiveBank;
+ gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID;
+ gBattleTextBuff1[4] = 0xFF;
+
+ //buff level
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 1;
+ gBattleTextBuff2[2] = 1;
+ gBattleTextBuff2[3] = 3;
+ gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL);
+ gBattleTextBuff2[5] = 0xFF;
+
+ b_movescr_stack_push_cursor();
+ gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID];
+ gBattlescriptCurrInstr = BattleScript_LevelUp;
+ gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8));
+ AdjustFriendship(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0);
+
+ //update battle mon structure after level up
+ if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && gBattleMons[0].hp)
+ {
+ gBattleMons[0].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL);
+ gBattleMons[0].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP);
+ gBattleMons[0].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
+ gBattleMons[0].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
+ gBattleMons[0].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD);
+ gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
+ gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF);
+ }
+ //What is else if? Guess it's too advanced for GameFreak
+ if (gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gBattleMons[2].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL);
+ gBattleMons[2].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP);
+ gBattleMons[2].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
+ gBattleMons[2].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
+ gBattleMons[2].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
+ //There are no words...GF can't even copy&paste code properly
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD);
+ gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD /*RIP*/);
+ gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
+ }
+ BATTLE_STRUCT->atk23StateTracker = 5;
+ }
+ else
+ {
+ gBattleMoveDamage = 0;
+ BATTLE_STRUCT->atk23StateTracker = 5;
+ }
+ }
+ break;
+ case 5: //looper increment
+ if (gBattleMoveDamage) //there is exp to give, goto case 3 that gives exp
+ BATTLE_STRUCT->atk23StateTracker = 3;
+ else
+ {
+ if (++BATTLE_STRUCT->expGetterID <= 5)
+ BATTLE_STRUCT->atk23StateTracker = 2; //loop again
+ else
+ BATTLE_STRUCT->atk23StateTracker = 6; //we're done
+ }
+ break;
+ case 6: //increment instruction
+ if (gBattleExecBuffer == 0)
+ {
+ //not even sure why gamefreak clears that data in this place
+ gBattleMons[gBank1].item = 0;
+ gBattleMons[gBank1].ability = 0;
+ gBattlescriptCurrInstr += 2;
+ }
+ break;
+ }
+}
+#else
+__attribute__((naked))
+static void atk23_getexp(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ movs r6, 0\n\
+ ldr r0, _0802004C @ =0x0201605c\n\
+ mov r10, r0\n\
+ ldr r0, _08020050 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x1]\n\
+ bl GetBattleBank\n\
+ ldr r1, _08020054 @ =gBank1\n\
+ strb r0, [r1]\n\
+ ldr r2, _08020058 @ =gSentPokesToOpponent\n\
+ movs r1, 0x2\n\
+ ands r1, r0\n\
+ lsls r1, 24\n\
+ lsrs r1, 25\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ mov r8, r1\n\
+ mov r0, r10\n\
+ subs r0, 0x4D\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x6\n\
+ bls _08020040\n\
+ bl _08020996\n\
+_08020040:\n\
+ lsls r0, 2\n\
+ ldr r1, _0802005C @ =_08020060\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_0802004C: .4byte 0x0201605c\n\
+_08020050: .4byte gBattlescriptCurrInstr\n\
+_08020054: .4byte gBank1\n\
+_08020058: .4byte gSentPokesToOpponent\n\
+_0802005C: .4byte _08020060\n\
+ .align 2, 0\n\
+_08020060:\n\
+ .4byte _0802007C\n\
+ .4byte _080200FC\n\
+ .4byte _08020216\n\
+ .4byte _0802055C\n\
+ .4byte _08020648\n\
+ .4byte _08020910\n\
+ .4byte _0802096C\n\
+_0802007C:\n\
+ ldr r4, _080200A8 @ =gBank1\n\
+ ldrb r0, [r4]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _08020098\n\
+ ldr r0, _080200AC @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _080200B0 @ =0x00000982\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080200BC\n\
+_08020098:\n\
+ ldr r0, _080200B4 @ =0x02000000\n\
+ ldr r1, _080200B8 @ =0x0001600f\n\
+ adds r0, r1\n\
+ movs r1, 0x6\n\
+ strb r1, [r0]\n\
+ bl _08020996\n\
+ .align 2, 0\n\
+_080200A8: .4byte gBank1\n\
+_080200AC: .4byte gBattleTypeFlags\n\
+_080200B0: .4byte 0x00000982\n\
+_080200B4: .4byte 0x02000000\n\
+_080200B8: .4byte 0x0001600f\n\
+_080200BC:\n\
+ ldr r2, _080200E8 @ =0x02000000\n\
+ ldr r3, _080200EC @ =0x0001600f\n\
+ adds r1, r2, r3\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ ldr r0, _080200F0 @ =0x00016113\n\
+ adds r2, r0\n\
+ ldr r3, _080200F4 @ =gBitTable\n\
+ ldr r1, _080200F8 @ =gBattlePartyID\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ bl _08020996\n\
+ .align 2, 0\n\
+_080200E8: .4byte 0x02000000\n\
+_080200EC: .4byte 0x0001600f\n\
+_080200F0: .4byte 0x00016113\n\
+_080200F4: .4byte gBitTable\n\
+_080200F8: .4byte gBattlePartyID\n\
+_080200FC:\n\
+ movs r5, 0\n\
+ movs r7, 0\n\
+ ldr r1, _08020150 @ =gSaveBlock1 + 0x3688\n\
+ mov r9, r1\n\
+_08020104:\n\
+ movs r0, 0x64\n\
+ adds r1, r7, 0\n\
+ muls r1, r0\n\
+ ldr r0, _08020154 @ =gPlayerParty\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0802016A\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0802016A\n\
+ ldr r0, _08020158 @ =gBitTable\n\
+ lsls r1, r7, 2\n\
+ adds r1, r0\n\
+ ldr r0, [r1]\n\
+ mov r2, r8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _08020138\n\
+ adds r5, 0x1\n\
+_08020138:\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xC\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0xAF\n\
+ bne _0802015C\n\
+ mov r3, r9\n\
+ ldrb r4, [r3]\n\
+ b _08020164\n\
+ .align 2, 0\n\
+_08020150: .4byte gSaveBlock1 + 0x3688\n\
+_08020154: .4byte gPlayerParty\n\
+_08020158: .4byte gBitTable\n\
+_0802015C:\n\
+ bl ItemId_GetHoldEffect\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+_08020164:\n\
+ cmp r4, 0x19\n\
+ bne _0802016A\n\
+ adds r6, 0x1\n\
+_0802016A:\n\
+ adds r7, 0x1\n\
+ cmp r7, 0x5\n\
+ ble _08020104\n\
+ ldr r3, _080201D0 @ =gBaseStats\n\
+ ldr r2, _080201D4 @ =gBattleMons\n\
+ ldr r0, _080201D8 @ =gBank1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r1, r0\n\
+ adds r1, r2\n\
+ ldrh r2, [r1]\n\
+ lsls r0, r2, 3\n\
+ subs r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ ldrb r2, [r0, 0x9]\n\
+ adds r1, 0x2A\n\
+ ldrb r0, [r1]\n\
+ muls r0, r2\n\
+ movs r1, 0x7\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r6, 0\n\
+ beq _080201E0\n\
+ lsrs r4, r0, 17\n\
+ adds r0, r4, 0\n\
+ adds r1, r5, 0\n\
+ bl __divsi3\n\
+ mov r1, r10\n\
+ strh r0, [r1]\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ bne _080201B6\n\
+ movs r0, 0x1\n\
+ strh r0, [r1]\n\
+_080201B6:\n\
+ ldr r5, _080201DC @ =gExpShareExp\n\
+ adds r0, r4, 0\n\
+ adds r1, r6, 0\n\
+ bl __divsi3\n\
+ strh r0, [r5]\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ bne _080201FA\n\
+ movs r0, 0x1\n\
+ strh r0, [r5]\n\
+ b _080201FA\n\
+ .align 2, 0\n\
+_080201D0: .4byte gBaseStats\n\
+_080201D4: .4byte gBattleMons\n\
+_080201D8: .4byte gBank1\n\
+_080201DC: .4byte gExpShareExp\n\
+_080201E0:\n\
+ adds r0, r1, 0\n\
+ adds r1, r5, 0\n\
+ bl __divsi3\n\
+ mov r2, r10\n\
+ strh r0, [r2]\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ bne _080201F6\n\
+ movs r0, 0x1\n\
+ strh r0, [r2]\n\
+_080201F6:\n\
+ ldr r0, _08020248 @ =gExpShareExp\n\
+ strh r6, [r0]\n\
+_080201FA:\n\
+ ldr r1, _0802024C @ =0x02000000\n\
+ ldr r3, _08020250 @ =0x0001600f\n\
+ adds r2, r1, r3\n\
+ ldrb r0, [r2]\n\
+ adds r0, 0x1\n\
+ movs r3, 0\n\
+ strb r0, [r2]\n\
+ ldr r2, _08020254 @ =0x00016018\n\
+ adds r0, r1, r2\n\
+ strb r3, [r0]\n\
+ ldr r3, _08020258 @ =0x0001605f\n\
+ adds r1, r3\n\
+ mov r0, r8\n\
+ strb r0, [r1]\n\
+_08020216:\n\
+ ldr r0, _0802025C @ =gBattleExecBuffer\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08020220\n\
+ b _08020996\n\
+_08020220:\n\
+ ldr r0, _0802024C @ =0x02000000\n\
+ ldr r1, _08020254 @ =0x00016018\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _08020260 @ =gPlayerParty\n\
+ adds r0, r1\n\
+ movs r1, 0xC\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0xAF\n\
+ bne _0802026C\n\
+ ldr r0, _08020264 @ =gSaveBlock1\n\
+ ldr r2, _08020268 @ =0x00003688\n\
+ adds r0, r2\n\
+ ldrb r4, [r0]\n\
+ b _08020274\n\
+ .align 2, 0\n\
+_08020248: .4byte gExpShareExp\n\
+_0802024C: .4byte 0x02000000\n\
+_08020250: .4byte 0x0001600f\n\
+_08020254: .4byte 0x00016018\n\
+_08020258: .4byte 0x0001605f\n\
+_0802025C: .4byte gBattleExecBuffer\n\
+_08020260: .4byte gPlayerParty\n\
+_08020264: .4byte gSaveBlock1\n\
+_08020268: .4byte 0x00003688\n\
+_0802026C:\n\
+ bl ItemId_GetHoldEffect\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+_08020274:\n\
+ ldr r5, _08020294 @ =0x02000000\n\
+ cmp r4, 0x19\n\
+ beq _080202A0\n\
+ ldr r3, _08020298 @ =0x0001605f\n\
+ adds r1, r5, r3\n\
+ ldrb r0, [r1]\n\
+ movs r2, 0x1\n\
+ ands r2, r0\n\
+ cmp r2, 0\n\
+ bne _080202A0\n\
+ lsrs r0, 1\n\
+ strb r0, [r1]\n\
+ ldr r0, _0802029C @ =0x0001600f\n\
+ adds r1, r5, r0\n\
+ b _080202C8\n\
+ .align 2, 0\n\
+_08020294: .4byte 0x02000000\n\
+_08020298: .4byte 0x0001605f\n\
+_0802029C: .4byte 0x0001600f\n\
+_080202A0:\n\
+ ldr r1, _080202D4 @ =0x00016018\n\
+ adds r0, r5, r1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _080202D8 @ =gPlayerParty\n\
+ adds r0, r1\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ cmp r0, 0x64\n\
+ bne _080202E8\n\
+ ldr r2, _080202DC @ =0x0001605f\n\
+ adds r1, r5, r2\n\
+ ldrb r0, [r1]\n\
+ lsrs r0, 1\n\
+ movs r2, 0\n\
+ strb r0, [r1]\n\
+ ldr r3, _080202E0 @ =0x0001600f\n\
+ adds r1, r5, r3\n\
+_080202C8:\n\
+ movs r0, 0x5\n\
+ strb r0, [r1]\n\
+ ldr r0, _080202E4 @ =gBattleMoveDamage\n\
+ str r2, [r0]\n\
+ b _08020996\n\
+ .align 2, 0\n\
+_080202D4: .4byte 0x00016018\n\
+_080202D8: .4byte gPlayerParty\n\
+_080202DC: .4byte 0x0001605f\n\
+_080202E0: .4byte 0x0001600f\n\
+_080202E4: .4byte gBattleMoveDamage\n\
+_080202E8:\n\
+ ldr r0, _0802034C @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08020316\n\
+ ldr r0, _08020350 @ =gBattleMons\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08020316\n\
+ ldr r0, _08020354 @ =0x0001601b\n\
+ adds r5, r0\n\
+ ldrb r0, [r5]\n\
+ cmp r0, 0\n\
+ bne _08020316\n\
+ bl BattleMusicStop\n\
+ ldr r0, _08020358 @ =0x00000161\n\
+ bl PlayBGM\n\
+ ldrb r0, [r5]\n\
+ adds r0, 0x1\n\
+ strb r0, [r5]\n\
+_08020316:\n\
+ ldr r5, _0802035C @ =0x02000000\n\
+ ldr r1, _08020360 @ =0x00016018\n\
+ adds r0, r5, r1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _08020364 @ =gPlayerParty\n\
+ adds r0, r1\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _08020332\n\
+ b _0802051E\n\
+_08020332:\n\
+ ldr r2, _08020368 @ =0x0001605f\n\
+ adds r0, r5, r2\n\
+ ldrb r0, [r0]\n\
+ movs r3, 0x1\n\
+ ands r3, r0\n\
+ cmp r3, 0\n\
+ beq _08020370\n\
+ ldr r1, _0802036C @ =gBattleMoveDamage\n\
+ mov r3, r10\n\
+ ldrh r0, [r3]\n\
+ str r0, [r1]\n\
+ mov r8, r1\n\
+ b _08020376\n\
+ .align 2, 0\n\
+_0802034C: .4byte gBattleTypeFlags\n\
+_08020350: .4byte gBattleMons\n\
+_08020354: .4byte 0x0001601b\n\
+_08020358: .4byte 0x00000161\n\
+_0802035C: .4byte 0x02000000\n\
+_08020360: .4byte 0x00016018\n\
+_08020364: .4byte gPlayerParty\n\
+_08020368: .4byte 0x0001605f\n\
+_0802036C: .4byte gBattleMoveDamage\n\
+_08020370:\n\
+ ldr r0, _080203EC @ =gBattleMoveDamage\n\
+ str r3, [r0]\n\
+ mov r8, r0\n\
+_08020376:\n\
+ cmp r4, 0x19\n\
+ bne _08020386\n\
+ ldr r0, _080203F0 @ =gExpShareExp\n\
+ ldrh r1, [r0]\n\
+ mov r2, r8\n\
+ ldr r0, [r2]\n\
+ adds r0, r1\n\
+ str r0, [r2]\n\
+_08020386:\n\
+ cmp r4, 0x28\n\
+ bne _0802039C\n\
+ mov r3, r8\n\
+ ldr r1, [r3]\n\
+ movs r0, 0x96\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ mov r1, r8\n\
+ str r0, [r1]\n\
+_0802039C:\n\
+ ldr r0, _080203F4 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080203B8\n\
+ ldr r4, _080203EC @ =gBattleMoveDamage\n\
+ ldr r1, [r4]\n\
+ movs r0, 0x96\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ str r0, [r4]\n\
+_080203B8:\n\
+ ldr r0, _080203F8 @ =0x02000000\n\
+ ldr r2, _080203FC @ =0x00016018\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _08020400 @ =gPlayerParty\n\
+ adds r0, r1\n\
+ bl IsTradedMon\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08020404\n\
+ ldr r4, _080203EC @ =gBattleMoveDamage\n\
+ ldr r1, [r4]\n\
+ movs r0, 0x96\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ str r0, [r4]\n\
+ movs r7, 0xA5\n\
+ lsls r7, 1\n\
+ mov r8, r4\n\
+ b _0802040A\n\
+ .align 2, 0\n\
+_080203EC: .4byte gBattleMoveDamage\n\
+_080203F0: .4byte gExpShareExp\n\
+_080203F4: .4byte gBattleTypeFlags\n\
+_080203F8: .4byte 0x02000000\n\
+_080203FC: .4byte 0x00016018\n\
+_08020400: .4byte gPlayerParty\n\
+_08020404:\n\
+ ldr r7, _0802043C @ =0x00000149\n\
+ ldr r3, _08020440 @ =gBattleMoveDamage\n\
+ mov r8, r3\n\
+_0802040A:\n\
+ ldr r0, _08020444 @ =gBattleTypeFlags\n\
+ ldrh r0, [r0]\n\
+ movs r1, 0x1\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _08020488\n\
+ ldr r1, _08020448 @ =gBattlePartyID\n\
+ ldr r0, _0802044C @ =0x02000000\n\
+ ldr r3, _08020450 @ =0x00016018\n\
+ adds r2, r0, r3\n\
+ ldrh r1, [r1, 0x4]\n\
+ adds r5, r0, 0\n\
+ ldr r4, _08020454 @ =gBitTable\n\
+ ldr r3, _08020458 @ =gAbsentBankFlags\n\
+ ldrb r2, [r2]\n\
+ cmp r1, r2\n\
+ bne _08020460\n\
+ ldrb r1, [r3]\n\
+ ldr r0, [r4, 0x8]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _08020460\n\
+ ldr r0, _0802045C @ =0x000160a2\n\
+ adds r1, r5, r0\n\
+ b _0802047C\n\
+ .align 2, 0\n\
+_0802043C: .4byte 0x00000149\n\
+_08020440: .4byte gBattleMoveDamage\n\
+_08020444: .4byte gBattleTypeFlags\n\
+_08020448: .4byte gBattlePartyID\n\
+_0802044C: .4byte 0x02000000\n\
+_08020450: .4byte 0x00016018\n\
+_08020454: .4byte gBitTable\n\
+_08020458: .4byte gAbsentBankFlags\n\
+_0802045C: .4byte 0x000160a2\n\
+_08020460:\n\
+ ldrb r2, [r3]\n\
+ ldr r0, [r4]\n\
+ ands r2, r0\n\
+ cmp r2, 0\n\
+ bne _08020478\n\
+ ldr r1, _08020474 @ =0x000160a2\n\
+ adds r0, r5, r1\n\
+ strb r2, [r0]\n\
+ b _08020490\n\
+ .align 2, 0\n\
+_08020474: .4byte 0x000160a2\n\
+_08020478:\n\
+ ldr r2, _08020484 @ =0x000160a2\n\
+ adds r1, r5, r2\n\
+_0802047C:\n\
+ movs r0, 0x2\n\
+ strb r0, [r1]\n\
+ b _08020490\n\
+ .align 2, 0\n\
+_08020484: .4byte 0x000160a2\n\
+_08020488:\n\
+ ldr r0, _08020530 @ =0x02000000\n\
+ ldr r3, _08020534 @ =0x000160a2\n\
+ adds r0, r3\n\
+ strb r1, [r0]\n\
+_08020490:\n\
+ ldr r1, _08020538 @ =gBattleTextBuff1\n\
+ movs r3, 0\n\
+ movs r2, 0xFD\n\
+ strb r2, [r1]\n\
+ movs r5, 0x4\n\
+ strb r5, [r1, 0x1]\n\
+ ldr r4, _08020530 @ =0x02000000\n\
+ ldr r0, _08020534 @ =0x000160a2\n\
+ adds r6, r4, r0\n\
+ ldrb r0, [r6]\n\
+ strb r0, [r1, 0x2]\n\
+ ldr r0, _0802053C @ =0x00016018\n\
+ adds r4, r0\n\
+ ldrb r0, [r4]\n\
+ strb r0, [r1, 0x3]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x4]\n\
+ ldr r1, _08020540 @ =gBattleTextBuff2\n\
+ strb r2, [r1]\n\
+ strb r3, [r1, 0x1]\n\
+ strb r7, [r1, 0x2]\n\
+ movs r3, 0xFF\n\
+ lsls r3, 8\n\
+ ands r7, r3\n\
+ asrs r0, r7, 8\n\
+ strb r0, [r1, 0x3]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ strb r0, [r1, 0x4]\n\
+ ldr r1, _08020544 @ =gBattleTextBuff3\n\
+ strb r2, [r1]\n\
+ movs r0, 0x1\n\
+ strb r0, [r1, 0x1]\n\
+ strb r5, [r1, 0x2]\n\
+ movs r0, 0x5\n\
+ strb r0, [r1, 0x3]\n\
+ mov r0, r8\n\
+ ldr r2, [r0]\n\
+ strb r2, [r1, 0x4]\n\
+ adds r0, r2, 0\n\
+ ands r0, r3\n\
+ asrs r0, 8\n\
+ strb r0, [r1, 0x5]\n\
+ movs r0, 0xFF\n\
+ lsls r0, 16\n\
+ ands r0, r2\n\
+ asrs r0, 16\n\
+ strb r0, [r1, 0x6]\n\
+ lsrs r2, 24\n\
+ strb r2, [r1, 0x7]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ strb r0, [r1, 0x8]\n\
+ ldrb r1, [r6]\n\
+ movs r0, 0xD\n\
+ bl PrepareStringBattle\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _08020548 @ =gPlayerParty\n\
+ adds r0, r1\n\
+ ldr r3, _0802054C @ =gBattleMons\n\
+ ldr r1, _08020550 @ =gBank1\n\
+ ldrb r2, [r1]\n\
+ movs r1, 0x58\n\
+ muls r1, r2\n\
+ adds r1, r3\n\
+ ldrh r1, [r1]\n\
+ bl MonGainEVs\n\
+_0802051E:\n\
+ ldr r1, _08020530 @ =0x02000000\n\
+ ldr r3, _08020554 @ =0x0001605f\n\
+ adds r2, r1, r3\n\
+ ldrb r0, [r2]\n\
+ lsrs r0, 1\n\
+ strb r0, [r2]\n\
+ ldr r0, _08020558 @ =0x0001600f\n\
+ adds r1, r0\n\
+ b _08020618\n\
+ .align 2, 0\n\
+_08020530: .4byte 0x02000000\n\
+_08020534: .4byte 0x000160a2\n\
+_08020538: .4byte gBattleTextBuff1\n\
+_0802053C: .4byte 0x00016018\n\
+_08020540: .4byte gBattleTextBuff2\n\
+_08020544: .4byte gBattleTextBuff3\n\
+_08020548: .4byte gPlayerParty\n\
+_0802054C: .4byte gBattleMons\n\
+_08020550: .4byte gBank1\n\
+_08020554: .4byte 0x0001605f\n\
+_08020558: .4byte 0x0001600f\n\
+_0802055C:\n\
+ ldr r0, _08020620 @ =gBattleExecBuffer\n\
+ ldr r2, [r0]\n\
+ cmp r2, 0\n\
+ beq _08020566\n\
+ b _08020996\n\
+_08020566:\n\
+ ldr r1, _08020624 @ =gBattleBufferB\n\
+ ldr r4, _08020628 @ =0x02000000\n\
+ ldr r3, _0802062C @ =0x000160a2\n\
+ adds r3, r4\n\
+ mov r8, r3\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 9\n\
+ adds r0, r1\n\
+ strb r2, [r0]\n\
+ ldr r0, _08020630 @ =0x00016018\n\
+ adds r7, r4, r0\n\
+ ldrb r0, [r7]\n\
+ movs r6, 0x64\n\
+ muls r0, r6\n\
+ ldr r5, _08020634 @ =gPlayerParty\n\
+ adds r0, r5\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _08020612\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ cmp r0, 0x64\n\
+ beq _08020612\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ movs r1, 0x3A\n\
+ bl GetMonData\n\
+ ldr r1, _08020638 @ =0x00017180\n\
+ adds r4, r1\n\
+ strh r0, [r4]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ movs r1, 0x3B\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x2]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ movs r1, 0x3C\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x4]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ movs r1, 0x3D\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x6]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ movs r1, 0x3E\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x8]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ movs r1, 0x3F\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0xA]\n\
+ ldr r4, _0802063C @ =gActiveBank\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ strb r0, [r4]\n\
+ ldrb r1, [r7]\n\
+ ldr r0, _08020640 @ =gBattleMoveDamage\n\
+ ldrh r2, [r0]\n\
+ movs r0, 0\n\
+ bl EmitExpBarUpdate\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+_08020612:\n\
+ ldr r1, _08020628 @ =0x02000000\n\
+ ldr r3, _08020644 @ =0x0001600f\n\
+ adds r1, r3\n\
+_08020618:\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ b _08020996\n\
+ .align 2, 0\n\
+_08020620: .4byte gBattleExecBuffer\n\
+_08020624: .4byte gBattleBufferB\n\
+_08020628: .4byte 0x02000000\n\
+_0802062C: .4byte 0x000160a2\n\
+_08020630: .4byte 0x00016018\n\
+_08020634: .4byte gPlayerParty\n\
+_08020638: .4byte 0x00017180\n\
+_0802063C: .4byte gActiveBank\n\
+_08020640: .4byte gBattleMoveDamage\n\
+_08020644: .4byte 0x0001600f\n\
+_08020648:\n\
+ ldr r0, _080208AC @ =gBattleExecBuffer\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08020652\n\
+ b _08020996\n\
+_08020652:\n\
+ ldr r1, _080208B0 @ =gActiveBank\n\
+ ldr r4, _080208B4 @ =0x02000000\n\
+ ldr r2, _080208B8 @ =0x000160a2\n\
+ adds r0, r4, r2\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldr r2, _080208BC @ =gBattleBufferB\n\
+ ldrb r3, [r1]\n\
+ lsls r1, r3, 9\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x21\n\
+ beq _0802066E\n\
+ b _080208F0\n\
+_0802066E:\n\
+ adds r0, r2, 0x1\n\
+ adds r0, r1, r0\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xB\n\
+ beq _0802067A\n\
+ b _080208F0\n\
+_0802067A:\n\
+ ldr r0, _080208C0 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080206A8\n\
+ ldr r1, _080208C4 @ =gBattlePartyID\n\
+ lsls r0, r3, 1\n\
+ adds r2, r0, r1\n\
+ ldr r0, _080208C8 @ =0x00016018\n\
+ adds r1, r4, r0\n\
+ ldrh r0, [r2]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bne _080206A8\n\
+ adds r1, r0, 0\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _080208CC @ =gPlayerParty\n\
+ adds r0, r1\n\
+ adds r1, r3, 0\n\
+ bl sub_80324F8\n\
+_080206A8:\n\
+ ldr r1, _080208D0 @ =gBattleTextBuff1\n\
+ movs r2, 0xFD\n\
+ strb r2, [r1]\n\
+ movs r0, 0x4\n\
+ strb r0, [r1, 0x1]\n\
+ ldr r5, _080208B0 @ =gActiveBank\n\
+ ldrb r0, [r5]\n\
+ strb r0, [r1, 0x2]\n\
+ ldr r0, _080208B4 @ =0x02000000\n\
+ ldr r3, _080208C8 @ =0x00016018\n\
+ adds r6, r0, r3\n\
+ ldrb r0, [r6]\n\
+ strb r0, [r1, 0x3]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x4]\n\
+ ldr r4, _080208D4 @ =gBattleTextBuff2\n\
+ strb r2, [r4]\n\
+ movs r0, 0x1\n\
+ strb r0, [r4, 0x1]\n\
+ strb r0, [r4, 0x2]\n\
+ movs r0, 0x3\n\
+ strb r0, [r4, 0x3]\n\
+ ldrb r0, [r6]\n\
+ movs r1, 0x64\n\
+ mov r8, r1\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ ldr r7, _080208CC @ =gPlayerParty\n\
+ adds r0, r7\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ strb r0, [r4, 0x4]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ strb r0, [r4, 0x5]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r2, _080208D8 @ =gLeveledUpInBattle\n\
+ ldr r1, _080208DC @ =gBitTable\n\
+ ldrb r0, [r6]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r1, _080208E0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _080208E4 @ =BattleScript_LevelUp\n\
+ str r0, [r1]\n\
+ ldr r4, _080208E8 @ =gBattleMoveDamage\n\
+ ldr r2, _080208BC @ =gBattleBufferB\n\
+ ldrb r1, [r5]\n\
+ lsls r1, 9\n\
+ adds r0, r2, 0x2\n\
+ adds r0, r1, r0\n\
+ ldrb r3, [r0]\n\
+ adds r2, 0x3\n\
+ adds r1, r2\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 8\n\
+ orrs r3, r0\n\
+ str r3, [r4]\n\
+ ldrb r0, [r6]\n\
+ mov r3, r8\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ adds r0, r7\n\
+ movs r1, 0\n\
+ bl AdjustFriendship\n\
+ ldr r0, _080208C4 @ =gBattlePartyID\n\
+ ldrb r1, [r6]\n\
+ ldrh r0, [r0]\n\
+ cmp r0, r1\n\
+ bne _080207EC\n\
+ ldr r4, _080208EC @ =gBattleMons\n\
+ ldrh r0, [r4, 0x28]\n\
+ cmp r0, 0\n\
+ beq _080207EC\n\
+ mov r0, r8\n\
+ muls r0, r1\n\
+ adds r0, r7\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ adds r1, r4, 0\n\
+ adds r1, 0x2A\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r6]\n\
+ mov r1, r8\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r0, r7\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x28]\n\
+ ldrb r0, [r6]\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, r7\n\
+ movs r1, 0x3A\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x2C]\n\
+ ldrb r0, [r6]\n\
+ mov r3, r8\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ adds r0, r7\n\
+ movs r1, 0x3B\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x2]\n\
+ ldrb r0, [r6]\n\
+ mov r1, r8\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r0, r7\n\
+ movs r1, 0x3C\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x4]\n\
+ ldrb r0, [r6]\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, r7\n\
+ movs r1, 0x3D\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x6]\n\
+ ldrb r0, [r6]\n\
+ mov r3, r8\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ adds r0, r7\n\
+ movs r1, 0x3D\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x6]\n\
+ ldrb r0, [r6]\n\
+ mov r1, r8\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r0, r7\n\
+ movs r1, 0x3E\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0x8]\n\
+ ldrb r0, [r6]\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, r7\n\
+ movs r1, 0x3F\n\
+ bl GetMonData\n\
+ strh r0, [r4, 0xA]\n\
+_080207EC:\n\
+ ldr r0, _080208C4 @ =gBattlePartyID\n\
+ ldr r1, _080208B4 @ =0x02000000\n\
+ ldr r3, _080208C8 @ =0x00016018\n\
+ adds r7, r1, r3\n\
+ ldrb r2, [r7]\n\
+ ldrh r0, [r0, 0x4]\n\
+ cmp r0, r2\n\
+ bne _080208F6\n\
+ ldr r6, _080208EC @ =gBattleMons\n\
+ movs r0, 0xD8\n\
+ adds r0, r6\n\
+ mov r8, r0\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080208F6\n\
+ ldr r0, _080208C0 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080208F6\n\
+ movs r5, 0x64\n\
+ adds r0, r2, 0\n\
+ muls r0, r5\n\
+ ldr r4, _080208CC @ =gPlayerParty\n\
+ adds r0, r4\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ adds r1, r6, 0\n\
+ adds r1, 0xDA\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r5\n\
+ adds r0, r4\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ mov r1, r8\n\
+ strh r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r5\n\
+ adds r0, r4\n\
+ movs r1, 0x3A\n\
+ bl GetMonData\n\
+ adds r1, r6, 0\n\
+ adds r1, 0xDC\n\
+ strh r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r5\n\
+ adds r0, r4\n\
+ movs r1, 0x3B\n\
+ bl GetMonData\n\
+ adds r1, r6, 0\n\
+ adds r1, 0xB2\n\
+ strh r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r5\n\
+ adds r0, r4\n\
+ movs r1, 0x3C\n\
+ bl GetMonData\n\
+ adds r1, r6, 0\n\
+ adds r1, 0xB4\n\
+ strh r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r5\n\
+ adds r0, r4\n\
+ movs r1, 0x3D\n\
+ bl GetMonData\n\
+ movs r2, 0xB6\n\
+ adds r2, r6\n\
+ mov r8, r2\n\
+ strh r0, [r2]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r5\n\
+ adds r0, r4\n\
+ movs r1, 0x3D\n\
+ bl GetMonData\n\
+ mov r3, r8\n\
+ strh r0, [r3]\n\
+ ldrb r0, [r7]\n\
+ muls r0, r5\n\
+ adds r0, r4\n\
+ movs r1, 0x3E\n\
+ bl GetMonData\n\
+ adds r1, r6, 0\n\
+ adds r1, 0xB8\n\
+ strh r0, [r1]\n\
+ b _080208F6\n\
+ .align 2, 0\n\
+_080208AC: .4byte gBattleExecBuffer\n\
+_080208B0: .4byte gActiveBank\n\
+_080208B4: .4byte 0x02000000\n\
+_080208B8: .4byte 0x000160a2\n\
+_080208BC: .4byte gBattleBufferB\n\
+_080208C0: .4byte gBattleTypeFlags\n\
+_080208C4: .4byte gBattlePartyID\n\
+_080208C8: .4byte 0x00016018\n\
+_080208CC: .4byte gPlayerParty\n\
+_080208D0: .4byte gBattleTextBuff1\n\
+_080208D4: .4byte gBattleTextBuff2\n\
+_080208D8: .4byte gLeveledUpInBattle\n\
+_080208DC: .4byte gBitTable\n\
+_080208E0: .4byte gBattlescriptCurrInstr\n\
+_080208E4: .4byte BattleScript_LevelUp\n\
+_080208E8: .4byte gBattleMoveDamage\n\
+_080208EC: .4byte gBattleMons\n\
+_080208F0:\n\
+ ldr r1, _08020904 @ =gBattleMoveDamage\n\
+ movs r0, 0\n\
+ str r0, [r1]\n\
+_080208F6:\n\
+ ldr r0, _08020908 @ =0x02000000\n\
+ ldr r1, _0802090C @ =0x0001600f\n\
+ adds r0, r1\n\
+ movs r1, 0x5\n\
+ strb r1, [r0]\n\
+ b _08020996\n\
+ .align 2, 0\n\
+_08020904: .4byte gBattleMoveDamage\n\
+_08020908: .4byte 0x02000000\n\
+_0802090C: .4byte 0x0001600f\n\
+_08020910:\n\
+ ldr r0, _08020924 @ =gBattleMoveDamage\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08020930\n\
+ ldr r0, _08020928 @ =0x02000000\n\
+ ldr r2, _0802092C @ =0x0001600f\n\
+ adds r0, r2\n\
+ movs r1, 0x3\n\
+ strb r1, [r0]\n\
+ b _08020996\n\
+ .align 2, 0\n\
+_08020924: .4byte gBattleMoveDamage\n\
+_08020928: .4byte 0x02000000\n\
+_0802092C: .4byte 0x0001600f\n\
+_08020930:\n\
+ ldr r2, _08020950 @ =0x02000000\n\
+ ldr r3, _08020954 @ =0x00016018\n\
+ adds r1, r2, r3\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x5\n\
+ bhi _0802095C\n\
+ ldr r0, _08020958 @ =0x0001600f\n\
+ adds r1, r2, r0\n\
+ movs r0, 0x2\n\
+ strb r0, [r1]\n\
+ b _08020996\n\
+ .align 2, 0\n\
+_08020950: .4byte 0x02000000\n\
+_08020954: .4byte 0x00016018\n\
+_08020958: .4byte 0x0001600f\n\
+_0802095C:\n\
+ ldr r3, _08020968 @ =0x0001600f\n\
+ adds r1, r2, r3\n\
+ movs r0, 0x6\n\
+ strb r0, [r1]\n\
+ b _08020996\n\
+ .align 2, 0\n\
+_08020968: .4byte 0x0001600f\n\
+_0802096C:\n\
+ ldr r0, _080209A4 @ =gBattleExecBuffer\n\
+ ldr r5, [r0]\n\
+ cmp r5, 0\n\
+ bne _08020996\n\
+ ldr r4, _080209A8 @ =gBattleMons\n\
+ ldr r2, _080209AC @ =gBank1\n\
+ ldrb r0, [r2]\n\
+ movs r1, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r4\n\
+ movs r3, 0\n\
+ strh r5, [r0, 0x2E]\n\
+ ldrb r0, [r2]\n\
+ muls r0, r1\n\
+ adds r0, r4\n\
+ adds r0, 0x20\n\
+ strb r3, [r0]\n\
+ ldr r1, _080209B0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x2\n\
+ str r0, [r1]\n\
+_08020996:\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080209A4: .4byte gBattleExecBuffer\n\
+_080209A8: .4byte gBattleMons\n\
+_080209AC: .4byte gBank1\n\
+_080209B0: .4byte gBattlescriptCurrInstr\n\
+ .syntax divided\n");
+}
+
+#endif // NONMATCHING
+
+#ifdef NONMATCHING
+static void atk24(void)
+{
+ u16 HP_count = 0;
+ int i;
+ if (gBattleExecBuffer) {return;}
+
+ for (i = 0; i < 6; 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 |= BATTLE_LOST;
+
+ for (HP_count = 0, i = 0; i < 6; 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)
+ gBattleOutcome |= BATTLE_WON;
+
+ if (!gBattleOutcome && (gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ register int found1 asm("r2");
+ register int found2 asm("r4");
+
+ //I can't for the love of god decompile that part
+
+ for (found1 = 0, i = 0; i < gNoOfAllBanks; i += 2)
+ {
+ if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
+ found1++;
+ }
+
+ for (found2 = 0, i = 1; i < gNoOfAllBanks; i += 2)
+ {
+ if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
+ found2++;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (found2 + found1 > 1)
+ gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ if (found2 != 0 && found1 != 0)
+ gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+ else
+ gBattlescriptCurrInstr += 5;
+
+}
+#else
+__attribute__((naked))
+static void atk24(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ movs r6, 0\n\
+ ldr r0, _08020AF0 @ =gBattleExecBuffer\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080209C6\n\
+ b _08020B46\n\
+_080209C6:\n\
+ movs r5, 0\n\
+_080209C8:\n\
+ movs r0, 0x64\n\
+ adds r1, r5, 0\n\
+ muls r1, r0\n\
+ ldr r0, _08020AF4 @ =gPlayerParty\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _080209F8\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x2D\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _080209F8\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ adds r0, r6, r0\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+_080209F8:\n\
+ adds r5, 0x1\n\
+ cmp r5, 0x5\n\
+ ble _080209C8\n\
+ cmp r6, 0\n\
+ bne _08020A0C\n\
+ ldr r0, _08020AF8 @ =gBattleOutcome\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x2\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+_08020A0C:\n\
+ movs r6, 0\n\
+ movs r5, 0\n\
+_08020A10:\n\
+ movs r0, 0x64\n\
+ adds r1, r5, 0\n\
+ muls r1, r0\n\
+ ldr r0, _08020AFC @ =gEnemyParty\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _08020A40\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x2D\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _08020A40\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ adds r0, r6, r0\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+_08020A40:\n\
+ adds r5, 0x1\n\
+ cmp r5, 0x5\n\
+ ble _08020A10\n\
+ ldr r2, _08020AF8 @ =gBattleOutcome\n\
+ cmp r6, 0\n\
+ bne _08020A54\n\
+ ldrb r0, [r2]\n\
+ movs r1, 0x1\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+_08020A54:\n\
+ ldrb r0, [r2]\n\
+ cmp r0, 0\n\
+ bne _08020B3E\n\
+ ldr r2, _08020B00 @ =gBattleTypeFlags\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ mov r8, r2\n\
+ cmp r0, 0\n\
+ beq _08020B3E\n\
+ movs r2, 0\n\
+ movs r5, 0\n\
+ ldr r0, _08020B04 @ =gNoOfAllBanks\n\
+ ldrb r3, [r0]\n\
+ mov r12, r0\n\
+ ldr r7, _08020B08 @ =gBattlescriptCurrInstr\n\
+ cmp r2, r3\n\
+ bge _08020AA0\n\
+ ldr r0, _08020B0C @ =gHitMarker\n\
+ movs r1, 0x80\n\
+ lsls r1, 21\n\
+ ldr r6, [r0]\n\
+ adds r4, r3, 0\n\
+ ldr r3, _08020B10 @ =gSpecialStatuses\n\
+_08020A84:\n\
+ adds r0, r1, 0\n\
+ lsls r0, r5\n\
+ ands r0, r6\n\
+ cmp r0, 0\n\
+ beq _08020A98\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08020A98\n\
+ adds r2, 0x1\n\
+_08020A98:\n\
+ adds r3, 0x28\n\
+ adds r5, 0x2\n\
+ cmp r5, r4\n\
+ blt _08020A84\n\
+_08020AA0:\n\
+ movs r4, 0\n\
+ movs r5, 0x1\n\
+ mov r0, r12\n\
+ ldrb r3, [r0]\n\
+ cmp r5, r3\n\
+ bge _08020ADA\n\
+ ldr r0, _08020B0C @ =gHitMarker\n\
+ movs r1, 0x80\n\
+ lsls r1, 21\n\
+ mov r12, r1\n\
+ ldr r1, [r0]\n\
+ ldr r0, _08020B10 @ =gSpecialStatuses\n\
+ adds r6, r3, 0\n\
+ adds r3, r0, 0\n\
+ adds r3, 0x14\n\
+_08020ABE:\n\
+ mov r0, r12\n\
+ lsls r0, r5\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08020AD2\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08020AD2\n\
+ adds r4, 0x1\n\
+_08020AD2:\n\
+ adds r3, 0x28\n\
+ adds r5, 0x2\n\
+ cmp r5, r6\n\
+ blt _08020ABE\n\
+_08020ADA:\n\
+ mov r0, r8\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08020B14\n\
+ adds r0, r4, r2\n\
+ cmp r0, 0x1\n\
+ bgt _08020B1C\n\
+ b _08020B36\n\
+ .align 2, 0\n\
+_08020AF0: .4byte gBattleExecBuffer\n\
+_08020AF4: .4byte gPlayerParty\n\
+_08020AF8: .4byte gBattleOutcome\n\
+_08020AFC: .4byte gEnemyParty\n\
+_08020B00: .4byte gBattleTypeFlags\n\
+_08020B04: .4byte gNoOfAllBanks\n\
+_08020B08: .4byte gBattlescriptCurrInstr\n\
+_08020B0C: .4byte gHitMarker\n\
+_08020B10: .4byte gSpecialStatuses\n\
+_08020B14:\n\
+ cmp r4, 0\n\
+ beq _08020B36\n\
+ cmp r2, 0\n\
+ beq _08020B36\n\
+_08020B1C:\n\
+ ldr r2, [r7]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ adds r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ adds r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 24\n\
+ adds r1, r0\n\
+ str r1, [r7]\n\
+ b _08020B46\n\
+_08020B36:\n\
+ ldr r0, [r7]\n\
+ adds r0, 0x5\n\
+ str r0, [r7]\n\
+ b _08020B46\n\
+_08020B3E:\n\
+ ldr r1, _08020B50 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x5\n\
+ str r0, [r1]\n\
+_08020B46:\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08020B50: .4byte gBattlescriptCurrInstr\n\
+ .syntax divided\n");
+}
+#endif
+
+static void MoveValuesCleanUp(void)
+{
+ gBattleMoveFlags = 0;
+ BATTLE_STRUCT->dmgMultiplier = 1;
+ gCritMultiplier = 1;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattleCommunication[6] = 0;
+ gHitMarker &= ~(HITMARKER_DESTINYBOND);
+ gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
+}
+
+static void atk25_move_values_cleanup(void)
+{
+ MoveValuesCleanUp();
+ gBattlescriptCurrInstr += 1;
+}
+
+static void atk26_set_multihit(void)
+{
+ gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk27_decrement_multihit(void)
+{
+ if (--gMultiHitCounter == 0)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atk28_goto(void)
+{
+ gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atk29_jumpifbyte(void)
+{
+ u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1);
+ u8* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
+ u8 value = BSScriptRead8(gBattlescriptCurrInstr + 6);
+ u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7);
+ gBattlescriptCurrInstr += 11;
+ switch (caseID)
+ {
+ case CMP_EQUAL:
+ if (*ptr == value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_NOT_EQUAL:
+ if (*ptr != value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_GREATER_THAN:
+ if (*ptr > value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_LESS_THAN:
+ if (*ptr < value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_COMMON_BITS:
+ if (*ptr & value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(*ptr & value))
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ }
+}
+
+static void atk2A_jumpifhalfword(void)
+{
+ u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1);
+ u16* ptr = (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
+ u16 value = BSScriptRead16(gBattlescriptCurrInstr + 6);
+ u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 8);
+ gBattlescriptCurrInstr += 12;
+ switch (caseID)
+ {
+ case CMP_EQUAL:
+ if (*ptr == value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_NOT_EQUAL:
+ if (*ptr != value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_GREATER_THAN:
+ if (*ptr > value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_LESS_THAN:
+ if (*ptr < value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_COMMON_BITS:
+ if (*ptr & value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(*ptr & value))
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ }
+}
+
+static void atk2B_jumpifword(void)
+{
+ u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1);
+ u32* ptr = (u32*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
+ u32 value = BSScriptRead32(gBattlescriptCurrInstr + 6);
+ u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10);
+ gBattlescriptCurrInstr += 14;
+ switch (caseID)
+ {
+ case CMP_EQUAL:
+ if (*ptr == value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_NOT_EQUAL:
+ if (*ptr != value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_GREATER_THAN:
+ if (*ptr > value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_LESS_THAN:
+ if (*ptr < value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_COMMON_BITS:
+ if (*ptr & value)
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(*ptr & value))
+ gBattlescriptCurrInstr = jump_loc;
+ break;
+ }
+}
+
+static void atk2C_jumpifarrayequal(void)
+{
+ //Mem1, Mem2, Size, Jump Loc
+ u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9);
+ u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10);
+
+ u8 i;
+ for (i = 0; i < size; i++)
+ {
+ if (*mem1 != *mem2)
+ {
+ gBattlescriptCurrInstr += 14;
+ break;
+ }
+ mem1++, mem2++;
+ }
+
+ if (i == size)
+ gBattlescriptCurrInstr = jump_loc;
+}
+
+static void atk2D_jumpifarraynotequal(void)
+{
+ //Mem1, Mem2, Size, Jump Loc
+ u8 equal_bytes = 0;
+ u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9);
+ u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10);
+
+ u8 i;
+ for (i = 0; i < size; i++)
+ {
+ if (*mem1 == *mem2)
+ {
+ equal_bytes++;
+ }
+ mem1++, mem2++;
+ }
+
+ if (equal_bytes != size)
+ gBattlescriptCurrInstr = jump_loc;
+ else
+ gBattlescriptCurrInstr += 14;
+}
+
+static void atk2E_setbyte(void)
+{
+ u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ *mem = BSScriptRead8(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk2F_addbyte(void)
+{
+ u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ *mem += BSScriptRead8(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk30_subbyte(void)
+{
+ u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ *mem -= BSScriptRead8(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk31_copyarray(void)
+{
+ u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ s32 size = BSScriptRead8(gBattlescriptCurrInstr + 9);
+
+ s32 i;
+ for (i = 0; i < size; i++)
+ {
+ mem1[i] = mem2[i];
+ }
+
+ gBattlescriptCurrInstr += 10;
+}
+
+static void atk32_copyarray_withindex(void)
+{
+ u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ u8* index = BS2ScriptReadPtr(gBattlescriptCurrInstr + 9);
+ s32 size = BSScriptRead8(gBattlescriptCurrInstr + 13);
+
+ s32 i;
+ for (i = 0; i < size; i++)
+ {
+ mem1[i] = mem2[i + *index];
+ }
+
+ gBattlescriptCurrInstr += 14;
+}
+
+static void atk33_orbyte(void)
+{
+ u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ *mem |= BSScriptRead8(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk34_orhalfword(void)
+{
+ u16* mem = (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ *mem |= BSScriptRead16(gBattlescriptCurrInstr + 5); //lmao gamefreak, decide on your macros...
+ gBattlescriptCurrInstr += 7;
+}
+
+static void atk35_orword(void)
+{
+ u32* mem = (u32*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ *mem |= BS2ScriptRead32(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr += 9;
+}
+
+static void atk36_bicbyte(void)
+{
+ u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ *mem &= ~(BSScriptRead8(gBattlescriptCurrInstr + 5));
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk37_bichalfword(void)
+{
+ u16* mem = (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ *mem &= ~(BSScriptRead16(gBattlescriptCurrInstr + 5));
+ gBattlescriptCurrInstr += 7;
+}
+
+static void atk38_bicword(void)
+{
+ u32* mem = (u32*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ *mem &= ~(BS2ScriptRead32(gBattlescriptCurrInstr + 5));
+ gBattlescriptCurrInstr += 9;
+}
+
+static void atk39_pause(void)
+{
+ if (gBattleExecBuffer == 0)
+ {
+ u16 value = BSScriptRead16(gBattlescriptCurrInstr + 1);
+ if (++gPauseCounterBattle >= value)
+ {
+ gPauseCounterBattle = 0;
+ gBattlescriptCurrInstr += 3;
+ }
+ }
+}
+
+static void atk3A_waitstate(void)
+{
+ if (gBattleExecBuffer == 0)
+ gBattlescriptCurrInstr++;
+}
+
+static void atk3B_healthbar_update(void)
+{
+ if (!BSScriptRead8(gBattlescriptCurrInstr + 1))
+ gActiveBank = gBankTarget;
+ else
+ gActiveBank = gBankAttacker;
+
+ EmitHealthBarUpdate(0, gBattleMoveDamage);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk3C_return(void)
+{
+ b_movescr_stack_pop_cursor();
+}
+
+static void atk3D_end(void)
+{
+ gBattleMoveFlags = 0;
+ gActiveBank = 0;
+ gFightStateTracker = 0xB;
+}
+
+static void atk3E_end2(void)
+{
+ //not much difference between this and 3D. It's more apparent in Emerald
+ gActiveBank = 0;
+ gFightStateTracker = 0xB;
+}
+
+static void atk3F_end3(void) //pops the main function stack
+{
+ b_movescr_stack_pop_cursor();
+ if (B_FUNCTION_STACK->size)
+ B_FUNCTION_STACK->size--;
+ gBattleMainFunc = B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size];
+}
+
+static void atk41_call(void)
+{
+ b_movescr_stack_push(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atk42_jumpiftype2(void) //u8 bank, u8 type, *ptr
+{
+ u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+
+ if (BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type1 || BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type2)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+}
+
+static void atk43_jumpifabilitypresent(void)
+{
+ if (AbilityBattleEffects(ABILITY_CHECK_ON_FIELD, 0, BSScriptRead8(gBattlescriptCurrInstr + 1), 0, 0))
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk44(void)
+{
+ unk_2000000[gBankAttacker + 0x16060] = 1;
+}
+
+#ifdef NONMATCHING
+
+static void atk45_playanimation(void)
+{
+ #define ANIMATION_ID BSScriptRead8(gBattlescriptCurrInstr + 2)
+ #define ARGUMENT (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 3)
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+
+ if ( ANIMATION_ID == 1 || ANIMATION_ID == 0x11 || ANIMATION_ID == 2) {
+ EmitBattleAnimation(0, ANIMATION_ID, *argument);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 7;
+ } else if (gHitMarker & HITMARKER_NO_ANIMATIONS) {
+ b_movescr_stack_push(gBattlescriptCurrInstr + 7);
+ gBattlescriptCurrInstr = BattleScript_Pausex20;
+ } else {
+ if (((ANIMATION_ID - 10) > 3 && gStatuses3[gActiveBank] & (STATUS3_SEMI_INVULNERABLE))) {
+ gBattlescriptCurrInstr += 7;
+ } else {
+ EmitBattleAnimation(0, ANIMATION_ID, *argument);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 7;
+ }
+ }
+}
+
+#else
+__attribute__((naked))
+static void atk45_playanimation(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ ldr r5, _08021444 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r5]\n\
+ ldrb r0, [r0, 0x1]\n\
+ bl GetBattleBank\n\
+ ldr r6, _08021448 @ =gActiveBank\n\
+ strb r0, [r6]\n\
+ ldr r2, [r5]\n\
+ ldrb r1, [r2, 0x3]\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 8\n\
+ adds r1, r0\n\
+ ldrb r0, [r2, 0x5]\n\
+ lsls r0, 16\n\
+ adds r1, r0\n\
+ ldrb r0, [r2, 0x6]\n\
+ lsls r0, 24\n\
+ adds r3, r1, r0\n\
+ ldrb r4, [r2, 0x2]\n\
+ adds r0, r4, 0\n\
+ cmp r0, 0x1\n\
+ beq _08021426\n\
+ cmp r0, 0x11\n\
+ beq _08021426\n\
+ cmp r0, 0x2\n\
+ bne _0802144C\n\
+_08021426:\n\
+ ldr r4, _08021444 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r4]\n\
+ ldrb r1, [r0, 0x2]\n\
+ ldrh r2, [r3]\n\
+ movs r0, 0\n\
+ bl EmitBattleAnimation\n\
+ ldr r0, _08021448 @ =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x7\n\
+ str r0, [r4]\n\
+ b _080214AE\n\
+ .align 2, 0\n\
+_08021444: .4byte gBattlescriptCurrInstr\n\
+_08021448: .4byte gActiveBank\n\
+_0802144C:\n\
+ ldr r0, _08021464 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0802146C\n\
+ adds r0, r2, 0x7\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _08021468 @ =BattleScript_Pausex20\n\
+ b _080214AC\n\
+ .align 2, 0\n\
+_08021464: .4byte gHitMarker\n\
+_08021468: .4byte BattleScript_Pausex20\n\
+_0802146C:\n\
+ adds r0, r4, 0\n\
+ subs r0, 0xA\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x3\n\
+ bls _08021498\n\
+ ldr r1, _08021490 @ =gStatuses3\n\
+ ldrb r0, [r6]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ ldr r1, _08021494 @ =0x000400c0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021498\n\
+ adds r0, r2, 0x7\n\
+ b _080214AC\n\
+ .align 2, 0\n\
+_08021490: .4byte gStatuses3\n\
+_08021494: .4byte 0x000400c0\n\
+_08021498:\n\
+ ldrb r1, [r2, 0x2]\n\
+ ldrh r2, [r3]\n\
+ movs r0, 0\n\
+ bl EmitBattleAnimation\n\
+ ldrb r0, [r6]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, [r5]\n\
+ adds r0, 0x7\n\
+_080214AC:\n\
+ str r0, [r5]\n\
+_080214AE:\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+#ifdef NONMATCHING
+static void atk46_playanimation2(void)
+{
+
+}
+
+#else
+__attribute__((naked))
+static void atk46_playanimation2(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ ldr r6, _0802151C @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r6]\n\
+ ldrb r0, [r0, 0x1]\n\
+ bl GetBattleBank\n\
+ ldr r7, _08021520 @ =gActiveBank\n\
+ strb r0, [r7]\n\
+ ldr r2, [r6]\n\
+ ldrb r1, [r2, 0x2]\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 8\n\
+ adds r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 16\n\
+ adds r1, r0\n\
+ ldrb r0, [r2, 0x5]\n\
+ lsls r0, 24\n\
+ adds r3, r1, r0\n\
+ ldrb r1, [r2, 0x6]\n\
+ ldrb r0, [r2, 0x7]\n\
+ lsls r0, 8\n\
+ adds r1, r0\n\
+ ldrb r0, [r2, 0x8]\n\
+ lsls r0, 16\n\
+ adds r1, r0\n\
+ ldrb r0, [r2, 0x9]\n\
+ lsls r0, 24\n\
+ adds r4, r1, r0\n\
+ ldrb r5, [r3]\n\
+ adds r0, r5, 0\n\
+ cmp r0, 0x1\n\
+ beq _080214FE\n\
+ cmp r0, 0x11\n\
+ beq _080214FE\n\
+ cmp r0, 0x2\n\
+ bne _08021524\n\
+_080214FE:\n\
+ ldrb r1, [r3]\n\
+ ldrh r2, [r4]\n\
+ movs r0, 0\n\
+ bl EmitBattleAnimation\n\
+ ldr r0, _08021520 @ =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r1, _0802151C @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0xA\n\
+ str r0, [r1]\n\
+ b _0802157A\n\
+ .align 2, 0\n\
+_0802151C: .4byte gBattlescriptCurrInstr\n\
+_08021520: .4byte gActiveBank\n\
+_08021524:\n\
+ ldr r0, _08021534 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021538\n\
+ adds r0, r2, 0\n\
+ b _08021576\n\
+ .align 2, 0\n\
+_08021534: .4byte gHitMarker\n\
+_08021538:\n\
+ adds r0, r5, 0\n\
+ subs r0, 0xA\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x3\n\
+ bls _08021564\n\
+ ldr r1, _0802155C @ =gStatuses3\n\
+ ldrb r0, [r7]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ ldr r1, _08021560 @ =0x000400c0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021564\n\
+ adds r0, r2, 0\n\
+ b _08021576\n\
+ .align 2, 0\n\
+_0802155C: .4byte gStatuses3\n\
+_08021560: .4byte 0x000400c0\n\
+_08021564:\n\
+ ldrb r1, [r3]\n\
+ ldrh r2, [r4]\n\
+ movs r0, 0\n\
+ bl EmitBattleAnimation\n\
+ ldrb r0, [r7]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, [r6]\n\
+_08021576:\n\
+ adds r0, 0xA\n\
+ str r0, [r6]\n\
+_0802157A:\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided ");
+}
+#endif // NONMATCHING
+
+static void atk47_setgraphicalstatchangevalues(void)
+{
+ u8 to_add = 0;
+ switch (BATTLE_STRUCT->statChanger & 0xF0)
+ {
+ case 0x10: //+1
+ to_add = 0xF;
+ break;
+ case 0x20: //+2
+ to_add = 0x27;
+ break;
+ case 0x90: //-1
+ to_add = 0x16;
+ break;
+ case 0xA0: //-2
+ to_add = 0x2E;
+ break;
+ }
+ BATTLE_STRUCT->animArg1 = (BATTLE_STRUCT->statChanger & 0xF) + to_add - 1;
+ BATTLE_STRUCT->animArg2 = 0;
+ gBattlescriptCurrInstr++;
+}
+
+#ifdef NONMATCHING
+static void atk48_playstatchangeanimation(void)
+{
+ int curr_stat = 0;
+ u16 stat_animID = 0;
+ int changeable_stats = 0;
+ u32 stats_to_check;
+ u8 arg3;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ stats_to_check = BSScriptRead8(gBattlescriptCurrInstr + 2);
+ arg3 = BSScriptRead8(gBattlescriptCurrInstr + 3);
+ if (arg3 & 1)
+ {
+ u16 r1 = 0x15;
+ if (arg3 & 0x2)
+ r1 = 0x2D;
+ while (stats_to_check != 0)
+ {
+ if (!(stats_to_check & 1))
+ continue;
+ if (!(BSScriptRead8(gBattlescriptCurrInstr + 3)))
+ {
+ u8 ability;
+ if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer)
+ continue;
+ ability = gBattleMons[gActiveBank].ability;
+ if (ability == ABILITY_CLEAR_BODY || ability == ABILITY_WHITE_SMOKE || (ability == ABILITY_KEEN_EYE && curr_stat == 6) || (ability == ABILITY_HYPER_CUTTER && curr_stat == 1))
+ continue;
+ }
+ if (gBattleMons[gActiveBank].statStages[curr_stat] > 0)
+ {
+ stat_animID = r1;
+ changeable_stats++;
+ }
+
+ stats_to_check >>= 1;
+ r1 += 1;
+ curr_stat++;
+ }
+ if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2)
+ stat_animID = 0x39;
+ else
+ stat_animID = 0x3A;
+ }
+ else
+ {
+ u16 r1 = 0x15;
+ if (arg3 & 0x2)
+ r1 = 0x2D;
+ while (stats_to_check != 0)
+ {
+ if (!(stats_to_check & 1))
+ continue;
+ if (gBattleMons[gActiveBank].statStages[curr_stat] < 0xB)
+ {
+ stat_animID = r1;
+ changeable_stats++;
+ }
+
+ stats_to_check >>= 1;
+ r1 += 1;
+ curr_stat++;
+ }
+ if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2)
+ stat_animID = 0x37;
+ else
+ stat_animID = 0x38;
+ }
+ if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1)
+ || changeable_stats == 0 || BATTLE_STRUCT->filler2[0] != 0)
+ gBattlescriptCurrInstr += 4;
+ else
+ {
+ EmitBattleAnimation(0, 1, stat_animID);
+ MarkBufferBankForExecution(gActiveBank);
+ if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1)
+ BATTLE_STRUCT->filler2[0] = 1;
+ gBattlescriptCurrInstr += 4;
+ }
+}
+
+#else
+__attribute__((naked))
+static void atk48_playstatchangeanimation(void)
+{
+ asm(".syntax unified\n\
+push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ movs r7, 0\n\
+ movs r0, 0\n\
+ mov r8, r0\n\
+ movs r3, 0\n\
+ ldr r5, _08021670 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r5]\n\
+ ldrb r0, [r0, 0x1]\n\
+ str r3, [sp]\n\
+ bl GetBattleBank\n\
+ ldr r2, _08021674 @ =gActiveBank\n\
+ strb r0, [r2]\n\
+ ldr r0, [r5]\n\
+ ldrb r4, [r0, 0x2]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ ldr r3, [sp]\n\
+ cmp r0, 0\n\
+ beq _08021710\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ movs r1, 0x15\n\
+ cmp r0, 0\n\
+ beq _0802163C\n\
+ movs r1, 0x2D\n\
+_0802163C:\n\
+ cmp r4, 0\n\
+ beq _080216E4\n\
+ movs r0, 0x1\n\
+ mov r10, r0\n\
+ ldr r0, _08021678 @ =gUnknown_02024A98\n\
+ mov r9, r0\n\
+ lsls r5, r1, 16\n\
+_0802164A:\n\
+ adds r0, r4, 0\n\
+ mov r1, r10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080216D6\n\
+ ldr r0, _08021670 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0802167C\n\
+ ldr r0, _08021674 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r7, r0\n\
+ b _080216C4\n\
+ .align 2, 0\n\
+_08021670: .4byte gBattlescriptCurrInstr\n\
+_08021674: .4byte gActiveBank\n\
+_08021678: .4byte gUnknown_02024A98\n\
+_0802167C:\n\
+ ldr r6, _08021700 @ =gActiveBank\n\
+ ldrb r0, [r6]\n\
+ str r3, [sp]\n\
+ bl GetBankIdentity\n\
+ mov r1, r10\n\
+ ands r1, r0\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ ldr r1, _08021704 @ =gSideTimer\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ ldr r3, [sp]\n\
+ cmp r0, 0\n\
+ bne _080216D6\n\
+ ldr r0, _08021708 @ =gBattleMons\n\
+ ldrb r2, [r6]\n\
+ movs r1, 0x58\n\
+ muls r2, r1\n\
+ adds r0, r2, r0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1D\n\
+ beq _080216D6\n\
+ cmp r0, 0x49\n\
+ beq _080216D6\n\
+ cmp r0, 0x33\n\
+ bne _080216BA\n\
+ cmp r7, 0x6\n\
+ beq _080216D6\n\
+_080216BA:\n\
+ cmp r0, 0x34\n\
+ bne _080216C2\n\
+ cmp r7, 0x1\n\
+ beq _080216D6\n\
+_080216C2:\n\
+ adds r0, r7, r2\n\
+_080216C4:\n\
+ add r0, r9\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0\n\
+ ble _080216D6\n\
+ lsrs r0, r5, 16\n\
+ mov r8, r0\n\
+ adds r3, 0x1\n\
+_080216D6:\n\
+ lsrs r4, 1\n\
+ movs r1, 0x80\n\
+ lsls r1, 9\n\
+ adds r5, r1\n\
+ adds r7, 0x1\n\
+ cmp r4, 0\n\
+ bne _0802164A\n\
+_080216E4:\n\
+ ldr r0, _0802170C @ =gBattlescriptCurrInstr\n\
+ mov r9, r0\n\
+ cmp r3, 0x1\n\
+ ble _08021772\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ movs r1, 0x39\n\
+ mov r8, r1\n\
+ cmp r0, 0\n\
+ beq _08021772\n\
+ movs r0, 0x3A\n\
+ b _08021770\n\
+ .align 2, 0\n\
+_08021700: .4byte gActiveBank\n\
+_08021704: .4byte gSideTimer\n\
+_08021708: .4byte gBattleMons\n\
+_0802170C: .4byte gBattlescriptCurrInstr\n\
+_08021710:\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ movs r1, 0xE\n\
+ cmp r0, 0\n\
+ beq _0802171C\n\
+ movs r1, 0x26\n\
+_0802171C:\n\
+ mov r9, r5\n\
+ cmp r4, 0\n\
+ beq _08021758\n\
+ ldr r6, _0802178C @ =gUnknown_02024A98\n\
+ adds r5, r2, 0\n\
+ lsls r2, r1, 16\n\
+_08021728:\n\
+ movs r0, 0x1\n\
+ ands r0, r4\n\
+ cmp r0, 0\n\
+ beq _0802174A\n\
+ ldrb r1, [r5]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r7, r0\n\
+ adds r0, r6\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0xB\n\
+ bgt _0802174A\n\
+ lsrs r1, r2, 16\n\
+ mov r8, r1\n\
+ adds r3, 0x1\n\
+_0802174A:\n\
+ lsrs r4, 1\n\
+ movs r0, 0x80\n\
+ lsls r0, 9\n\
+ adds r2, r0\n\
+ adds r7, 0x1\n\
+ cmp r4, 0\n\
+ bne _08021728\n\
+_08021758:\n\
+ cmp r3, 0x1\n\
+ ble _08021772\n\
+ mov r1, r9\n\
+ ldr r0, [r1]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ movs r1, 0x37\n\
+ mov r8, r1\n\
+ cmp r0, 0\n\
+ beq _08021772\n\
+ movs r0, 0x38\n\
+_08021770:\n\
+ mov r8, r0\n\
+_08021772:\n\
+ mov r1, r9\n\
+ ldr r2, [r1]\n\
+ ldrb r1, [r2, 0x3]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021790\n\
+ cmp r3, 0x1\n\
+ bgt _08021790\n\
+ adds r0, r2, 0x4\n\
+ mov r1, r9\n\
+ b _080217E6\n\
+ .align 2, 0\n\
+_0802178C: .4byte gUnknown_02024A98\n\
+_08021790:\n\
+ cmp r3, 0\n\
+ beq _080217E0\n\
+ ldr r0, _080217D0 @ =0x02000000\n\
+ ldr r1, _080217D4 @ =0x000160dc\n\
+ adds r4, r0, r1\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _080217E0\n\
+ movs r0, 0\n\
+ movs r1, 0x1\n\
+ mov r2, r8\n\
+ str r3, [sp]\n\
+ bl EmitBattleAnimation\n\
+ ldr r0, _080217D8 @ =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, _080217DC @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ ldr r3, [sp]\n\
+ cmp r0, 0\n\
+ beq _080217CC\n\
+ cmp r3, 0x1\n\
+ ble _080217CC\n\
+ movs r0, 0x1\n\
+ strb r0, [r4]\n\
+_080217CC:\n\
+ ldr r1, _080217DC @ =gBattlescriptCurrInstr\n\
+ b _080217E2\n\
+ .align 2, 0\n\
+_080217D0: .4byte 0x02000000\n\
+_080217D4: .4byte 0x000160dc\n\
+_080217D8: .4byte gActiveBank\n\
+_080217DC: .4byte gBattlescriptCurrInstr\n\
+_080217E0:\n\
+ mov r1, r9\n\
+_080217E2:\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x4\n\
+_080217E6:\n\
+ str r0, [r1]\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided");
+}
+
+#endif // NONMATCHING
+
+#ifdef NONMATCHING
+static void atk49_moveendturn(void)
+{
+ int i;
+ int effect = 0;
+ u16 last_move = 0, *choiced_move_atk;
+ int arg1, arg2, hold_effect_atk, move_type;
+ if (gLastUsedMove != 0xFFFF)
+ last_move = gLastUsedMove;
+
+ arg1 = BSScriptRead8(gBattlescriptCurrInstr + 1);
+ arg2 = BSScriptRead8(gBattlescriptCurrInstr + 2);
+ if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
+ hold_effect_atk = gEnigmaBerries[gBankAttacker].holdEffect;
+ else
+ hold_effect_atk = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
+
+ choiced_move_atk = (u16*)(gBankAttacker * 0x020160e8);
+ if (BATTLE_STRUCT->dynamicMoveType)
+ move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ else
+ move_type = gBattleMoves[gCurrentMove].type;
+
+ do
+ {
+ switch (BATTLE_STRUCT->cmd49StateTracker)
+ {
+ case 0: //rage check
+ if (gBattleMons[gBankTarget].status2 & STATUS2_RAGE
+ && gBattleMons[gBankTarget].hp && gBankAttacker != gBankTarget
+ && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)
+ && !(gBattleMoveFlags & MOVE_NO_EFFECT) && TargetTurnDamaged
+ && gBattleMoves[gCurrentMove].power && gBattleMons[gBankTarget].statStages[ATK_BUFF] <= 0xB)
+ {
+ gBattleMons[gBankTarget].statStages[ATK_BUFF]++;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = gUnknown_081D9132;
+ effect = 1;
+ }
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 1: //defrosting check
+ if (gBattleMons[gBankTarget].status1 & STATUS_FREEZE
+ && gBattleMons[gBankTarget].hp && gBankAttacker != gBankTarget
+ && gSpecialStatuses[gBankTarget].moveturnLostHP
+ && !(gBattleMoveFlags & MOVE_NO_EFFECT) && move_type == TYPE_FIRE)
+ {
+ gBattleMons[gBankTarget].status1 &= ~(STATUS_FREEZE);
+ gActiveBank = gBankTarget;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = gUnknown_081D955D;
+ effect = 1;
+ }
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 2: //target synchronize
+ if (AbilityBattleEffects(ABILITY_TARGET_SYNCHRONIZE, gBankTarget, 0, 0, 0))
+ effect = 1;
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 3: //contact abilities
+ if (AbilityBattleEffects(ABILITY_CONTACT, gBankTarget, 0, 0, 0))
+ effect = 1;
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 4: //status immunities
+ if (AbilityBattleEffects(ABILITY_STATUS_IMMUNNITY, 0, 0, 0, 0))
+ effect = 1; //it loops through 4 banks, so we increment after its done with all banks
+ else
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 5: //attacker synchronize
+ if (AbilityBattleEffects(ABILITY_ATK_SYNCHRONIZE, gBankAttacker, 0, 0, 0))
+ effect = 1;
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 6: //update choice band move
+ if (gHitMarker & HITMARKER_OBEYS && hold_effect_atk == HOLD_EFFECT_CHOICE_BAND
+ && gLastUsedMove != MOVE_STRUGGLE && (*choiced_move_atk == 0 || *choiced_move_atk == 0xFFF)
+ && gLastUsedMove != MOVE_BATON_PASS && !(gBattleMoveFlags & MOVE_NO_EFFECT))
+ {
+ *choiced_move_atk = gLastUsedMove;
+ for (i = 0; i < 4 && gBattleMons[gBankAttacker].moves[i] != *choiced_move_atk; i++){}
+ if (i == 4)
+ *choiced_move_atk = 0;
+ }
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 7: //changed held items
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ #define CHANGED_ITEM (((*u16)(0x020160f0)))
+ if (CHANGED_ITEM(i))
+ gBattleMons[i].item = CHANGED_ITEM(i);
+ }
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 8: //make sprite invisible
+ if (gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)
+ && !(gHitMarker & HITMARKER_NO_ANIMATIONS))
+ {
+ gActiveBank = gBankAttacker;
+ EmitSpriteInvisibility(0, 1);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ //sub_8015660 CheckIfMoveFailed
+ case 9: //semi-invlurneable attacker make visible
+ if (!(gBattleMoveFlags & MOVE_NO_EFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ || sub_8015660(gBankAttacker))
+ {
+ gActiveBank = gBankAttacker;
+ EmitSpriteInvisibility(0, 0);
+ MarkBufferBankForExecution(gActiveBank);
+ gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER);
+ gSpecialStatuses[gBankAttacker].restored_bank_sprite = 1;
+ }
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 10: //semi-invlurneable target make visible
+ if (!(gBattleMoveFlags & MOVE_NO_EFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ || sub_8015660(gBankTarget))
+ {
+ gActiveBank = gBankTarget;
+ EmitSpriteInvisibility(0, 0);
+ MarkBufferBankForExecution(gActiveBank);
+ gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER);
+ gSpecialStatuses[gBankTarget].restored_bank_sprite = 1;
+ }
+ BATTLE_STRUCT->cmd49StateTracker++;
+ break;
+ case 11: //
+ }
+
+ } while (effect == 0)
+}
+#else
+__attribute__((naked))
+static void atk49_moveendturn(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x18\n\
+ movs r0, 0\n\
+ mov r10, r0\n\
+ ldr r0, _08021834 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r0, 0x1]\n\
+ str r1, [sp, 0x10]\n\
+ ldrb r0, [r0, 0x2]\n\
+ str r0, [sp, 0x14]\n\
+ ldr r1, _08021838 @ =gBattleMons\n\
+ ldr r0, _0802183C @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r1, r0, r1\n\
+ ldrh r0, [r1, 0x2E]\n\
+ cmp r0, 0xAF\n\
+ bne _08021844\n\
+ ldr r1, _08021840 @ =gEnigmaBerries\n\
+ lsls r0, r2, 3\n\
+ subs r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x7]\n\
+ b _0802184E\n\
+ .align 2, 0\n\
+_08021834: .4byte gBattlescriptCurrInstr\n\
+_08021838: .4byte gBattleMons\n\
+_0802183C: .4byte gBankAttacker\n\
+_08021840: .4byte gEnigmaBerries\n\
+_08021844:\n\
+ ldrh r0, [r1, 0x2E]\n\
+ bl ItemId_GetHoldEffect\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+_0802184E:\n\
+ str r0, [sp, 0x8]\n\
+ ldr r0, _0802186C @ =gBankAttacker\n\
+ ldrb r1, [r0]\n\
+ lsls r1, 1\n\
+ ldr r0, _08021870 @ =0x020160e8\n\
+ adds r1, r0\n\
+ str r1, [sp, 0xC]\n\
+ subs r0, 0xCC\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080218C0\n\
+ movs r2, 0x3F\n\
+ ands r2, r0\n\
+ str r2, [sp, 0x4]\n\
+ b _080218D2\n\
+ .align 2, 0\n\
+_0802186C: .4byte gBankAttacker\n\
+_08021870: .4byte 0x020160e8\n\
+_08021874:\n\
+ strb r2, [r7]\n\
+ ldr r0, [r5]\n\
+ orrs r0, r6\n\
+ str r0, [r5]\n\
+ ldr r0, _080218AC @ =0x02000000\n\
+ ldr r3, _080218B0 @ =0x0001600c\n\
+ adds r0, r3\n\
+ strb r4, [r0]\n\
+ bl MoveValuesCleanUp\n\
+ ldr r2, _080218B4 @ =gBattleScriptsEffectsTable\n\
+ mov r4, r8\n\
+ ldrh r1, [r4]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ add r0, r9\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldr r0, [r0]\n\
+ bl b_movescr_stack_push\n\
+ ldr r1, _080218B8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _080218BC @ =gUnknown_081D9B2D\n\
+ bl _0802229C\n\
+ .align 2, 0\n\
+_080218AC: .4byte 0x02000000\n\
+_080218B0: .4byte 0x0001600c\n\
+_080218B4: .4byte gBattleScriptsEffectsTable\n\
+_080218B8: .4byte gBattlescriptCurrInstr\n\
+_080218BC: .4byte gUnknown_081D9B2D\n\
+_080218C0:\n\
+ ldr r2, _080218D8 @ =gBattleMoves\n\
+ ldr r0, _080218DC @ =gCurrentMove\n\
+ ldrh r1, [r0]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r0, [r0, 0x2]\n\
+ str r0, [sp, 0x4]\n\
+_080218D2:\n\
+ ldr r5, _080218E0 @ =0x02000000\n\
+ mov r12, r5\n\
+ b _080218EE\n\
+ .align 2, 0\n\
+_080218D8: .4byte gBattleMoves\n\
+_080218DC: .4byte gCurrentMove\n\
+_080218E0: .4byte 0x02000000\n\
+_080218E4:\n\
+ mov r0, r10\n\
+ cmp r0, 0\n\
+ beq _080218EE\n\
+ bl _08022286\n\
+_080218EE:\n\
+ ldr r0, _08021908 @ =0x0001600c\n\
+ add r0, r12\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x11\n\
+ bls _080218FC\n\
+ bl _0802224E\n\
+_080218FC:\n\
+ lsls r0, 2\n\
+ ldr r1, _0802190C @ =_08021910\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_08021908: .4byte 0x0001600c\n\
+_0802190C: .4byte _08021910\n\
+ .align 2, 0\n\
+_08021910:\n\
+ .4byte _08021958\n\
+ .4byte _08021A34\n\
+ .4byte _08021AF0\n\
+ .4byte _08021B20\n\
+ .4byte _08021B44\n\
+ .4byte _08021B78\n\
+ .4byte _08021B9C\n\
+ .4byte _08021C40\n\
+ .4byte _08021C78\n\
+ .4byte _08021CA8\n\
+ .4byte _08021CCC\n\
+ .4byte _08021D18\n\
+ .4byte _08021DAC\n\
+ .4byte _08021E30\n\
+ .4byte _08021E70\n\
+ .4byte _08022068\n\
+ .4byte _080221C0\n\
+ .4byte _0802224E\n\
+_08021958:\n\
+ ldr r5, _08021A08 @ =gBattleMons\n\
+ ldr r2, _08021A0C @ =gBankTarget\n\
+ ldrb r4, [r2]\n\
+ movs r6, 0x58\n\
+ adds r3, r4, 0\n\
+ muls r3, r6\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x50\n\
+ adds r0, r3, r0\n\
+ ldr r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 16\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _080219FE\n\
+ adds r0, r3, r5\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ beq _080219FE\n\
+ ldr r0, _08021A10 @ =gBankAttacker\n\
+ ldrb r1, [r0]\n\
+ cmp r1, r4\n\
+ beq _080219FE\n\
+ adds r0, r1, 0\n\
+ bl GetBankSide\n\
+ adds r4, r0, 0\n\
+ ldr r1, _08021A0C @ =gBankTarget\n\
+ ldrb r0, [r1]\n\
+ bl GetBankSide\n\
+ lsls r4, 24\n\
+ lsls r0, 24\n\
+ cmp r4, r0\n\
+ beq _080219FE\n\
+ ldr r0, _08021A14 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080219FE\n\
+ ldr r2, _08021A18 @ =gProtectStructs\n\
+ ldr r4, _08021A0C @ =gBankTarget\n\
+ ldrb r3, [r4]\n\
+ lsls r1, r3, 4\n\
+ adds r0, r2, 0x4\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080219C8\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080219FE\n\
+_080219C8:\n\
+ ldr r2, _08021A1C @ =gBattleMoves\n\
+ ldr r0, _08021A20 @ =gCurrentMove\n\
+ ldrh r1, [r0]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r0, [r0, 0x1]\n\
+ cmp r0, 0\n\
+ beq _080219FE\n\
+ adds r0, r3, 0\n\
+ muls r0, r6\n\
+ adds r1, r0, r5\n\
+ ldrb r2, [r1, 0x19]\n\
+ movs r0, 0x19\n\
+ ldrsb r0, [r1, r0]\n\
+ cmp r0, 0xB\n\
+ bgt _080219FE\n\
+ adds r0, r2, 0x1\n\
+ strb r0, [r1, 0x19]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08021A24 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08021A28 @ =gUnknown_081D9132\n\
+ str r0, [r1]\n\
+ movs r5, 0x1\n\
+ mov r10, r5\n\
+_080219FE:\n\
+ ldr r2, _08021A2C @ =0x02000000\n\
+ ldr r0, _08021A30 @ =0x0001600c\n\
+ adds r1, r2, r0\n\
+ b _08021E00\n\
+ .align 2, 0\n\
+_08021A08: .4byte gBattleMons\n\
+_08021A0C: .4byte gBankTarget\n\
+_08021A10: .4byte gBankAttacker\n\
+_08021A14: .4byte gBattleMoveFlags\n\
+_08021A18: .4byte gProtectStructs\n\
+_08021A1C: .4byte gBattleMoves\n\
+_08021A20: .4byte gCurrentMove\n\
+_08021A24: .4byte gBattlescriptCurrInstr\n\
+_08021A28: .4byte gUnknown_081D9132\n\
+_08021A2C: .4byte 0x02000000\n\
+_08021A30: .4byte 0x0001600c\n\
+_08021A34:\n\
+ ldr r2, _08021AD0 @ =gBattleMons\n\
+ ldr r1, _08021AD4 @ =gBankTarget\n\
+ ldrb r4, [r1]\n\
+ movs r3, 0x58\n\
+ mov r12, r3\n\
+ mov r3, r12\n\
+ muls r3, r4\n\
+ adds r7, r2, 0\n\
+ adds r7, 0x4C\n\
+ adds r6, r3, r7\n\
+ ldr r5, [r6]\n\
+ movs r0, 0x20\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ bne _08021A54\n\
+ b _08021DFA\n\
+_08021A54:\n\
+ adds r0, r3, r2\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08021A5E\n\
+ b _08021DFA\n\
+_08021A5E:\n\
+ ldr r0, _08021AD8 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r4\n\
+ bne _08021A68\n\
+ b _08021DFA\n\
+_08021A68:\n\
+ ldr r0, _08021ADC @ =gSpecialStatuses\n\
+ lsls r1, r4, 2\n\
+ adds r1, r4\n\
+ lsls r1, 2\n\
+ adds r0, 0xC\n\
+ adds r1, r0\n\
+ ldr r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _08021A7C\n\
+ b _08021DFA\n\
+_08021A7C:\n\
+ ldr r0, _08021AE0 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021A8A\n\
+ b _08021DFA\n\
+_08021A8A:\n\
+ ldr r4, [sp, 0x4]\n\
+ cmp r4, 0xA\n\
+ beq _08021A92\n\
+ b _08021DFA\n\
+_08021A92:\n\
+ movs r0, 0x21\n\
+ negs r0, r0\n\
+ ands r5, r0\n\
+ str r5, [r6]\n\
+ ldr r4, _08021AE4 @ =gActiveBank\n\
+ ldr r5, _08021AD4 @ =gBankTarget\n\
+ ldrb r0, [r5]\n\
+ strb r0, [r4]\n\
+ ldrb r0, [r5]\n\
+ mov r1, r12\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r0, r7\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x28\n\
+ movs r2, 0\n\
+ movs r3, 0x4\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08021AE8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08021AEC @ =gUnknown_081D955D\n\
+ str r0, [r1]\n\
+ movs r2, 0x1\n\
+ mov r10, r2\n\
+ b _08021DFA\n\
+ .align 2, 0\n\
+_08021AD0: .4byte gBattleMons\n\
+_08021AD4: .4byte gBankTarget\n\
+_08021AD8: .4byte gBankAttacker\n\
+_08021ADC: .4byte gSpecialStatuses\n\
+_08021AE0: .4byte gBattleMoveFlags\n\
+_08021AE4: .4byte gActiveBank\n\
+_08021AE8: .4byte gBattlescriptCurrInstr\n\
+_08021AEC: .4byte gUnknown_081D955D\n\
+_08021AF0:\n\
+ ldr r0, _08021B14 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0x7\n\
+ movs r2, 0\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08021B0C\n\
+ movs r4, 0x1\n\
+ mov r10, r4\n\
+_08021B0C:\n\
+ ldr r2, _08021B18 @ =0x02000000\n\
+ ldr r5, _08021B1C @ =0x0001600c\n\
+ adds r1, r2, r5\n\
+ b _08021E00\n\
+ .align 2, 0\n\
+_08021B14: .4byte gBankTarget\n\
+_08021B18: .4byte 0x02000000\n\
+_08021B1C: .4byte 0x0001600c\n\
+_08021B20:\n\
+ ldr r0, _08021B40 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0x4\n\
+ movs r2, 0\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08021B3A\n\
+ b _08021DFA\n\
+_08021B3A:\n\
+ movs r0, 0x1\n\
+ mov r10, r0\n\
+ b _08021DFA\n\
+ .align 2, 0\n\
+_08021B40: .4byte gBankTarget\n\
+_08021B44:\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0x5\n\
+ movs r1, 0\n\
+ movs r2, 0\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08021B68\n\
+ movs r4, 0x1\n\
+ mov r10, r4\n\
+ ldr r5, _08021B64 @ =0x02000000\n\
+ mov r12, r5\n\
+ b _0802224E\n\
+ .align 2, 0\n\
+_08021B64: .4byte 0x02000000\n\
+_08021B68:\n\
+ ldr r2, _08021B70 @ =0x02000000\n\
+ ldr r0, _08021B74 @ =0x0001600c\n\
+ adds r1, r2, r0\n\
+ b _08021E00\n\
+ .align 2, 0\n\
+_08021B70: .4byte 0x02000000\n\
+_08021B74: .4byte 0x0001600c\n\
+_08021B78:\n\
+ ldr r0, _08021B98 @ =gBankAttacker\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0x8\n\
+ movs r2, 0\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08021B92\n\
+ b _08021DFA\n\
+_08021B92:\n\
+ movs r1, 0x1\n\
+ mov r10, r1\n\
+ b _08021DFA\n\
+ .align 2, 0\n\
+_08021B98: .4byte gBankAttacker\n\
+_08021B9C:\n\
+ ldr r0, _08021C28 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 18\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021BE0\n\
+ ldr r4, [sp, 0x8]\n\
+ cmp r4, 0x1D\n\
+ bne _08021BE0\n\
+ ldr r0, _08021C2C @ =gUnknown_02024BE8\n\
+ ldrh r2, [r0]\n\
+ adds r7, r0, 0\n\
+ cmp r2, 0xA5\n\
+ beq _08021BE0\n\
+ ldr r5, [sp, 0xC]\n\
+ ldrh r1, [r5]\n\
+ cmp r1, 0\n\
+ beq _08021BC8\n\
+ ldr r0, _08021C30 @ =0x0000ffff\n\
+ cmp r1, r0\n\
+ bne _08021BE0\n\
+_08021BC8:\n\
+ cmp r2, 0xE2\n\
+ bne _08021BDA\n\
+ ldr r0, _08021C34 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08021BDA\n\
+ b _08022244\n\
+_08021BDA:\n\
+ ldrh r0, [r7]\n\
+ ldr r1, [sp, 0xC]\n\
+ strh r0, [r1]\n\
+_08021BE0:\n\
+ movs r4, 0\n\
+ ldr r2, _08021C38 @ =gBattleMons\n\
+ ldr r3, _08021C3C @ =gBankAttacker\n\
+ ldrb r1, [r3]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r2, 0xC\n\
+ adds r0, r2\n\
+ ldrh r0, [r0]\n\
+ ldr r5, [sp, 0xC]\n\
+ ldrh r1, [r5]\n\
+ mov r9, r3\n\
+ cmp r0, r1\n\
+ beq _08021C18\n\
+ mov r6, r9\n\
+ movs r3, 0x58\n\
+ adds r5, r1, 0\n\
+_08021C02:\n\
+ adds r4, 0x1\n\
+ cmp r4, 0x3\n\
+ bgt _08021C18\n\
+ lsls r0, r4, 1\n\
+ ldrb r1, [r6]\n\
+ muls r1, r3\n\
+ adds r0, r1\n\
+ adds r0, r2\n\
+ ldrh r0, [r0]\n\
+ cmp r0, r5\n\
+ bne _08021C02\n\
+_08021C18:\n\
+ cmp r4, 0x4\n\
+ beq _08021C1E\n\
+ b _08022244\n\
+_08021C1E:\n\
+ movs r0, 0\n\
+ ldr r1, [sp, 0xC]\n\
+_08021C22:\n\
+ strh r0, [r1]\n\
+ b _08022244\n\
+ .align 2, 0\n\
+_08021C28: .4byte gHitMarker\n\
+_08021C2C: .4byte gUnknown_02024BE8\n\
+_08021C30: .4byte 0x0000ffff\n\
+_08021C34: .4byte gBattleMoveFlags\n\
+_08021C38: .4byte gBattleMons\n\
+_08021C3C: .4byte gBankAttacker\n\
+_08021C40:\n\
+ movs r4, 0\n\
+ ldr r0, _08021C6C @ =gNoOfAllBanks\n\
+ ldrb r2, [r0]\n\
+ cmp r4, r2\n\
+ blt _08021C4C\n\
+ b _08022244\n\
+_08021C4C:\n\
+ movs r5, 0\n\
+ ldr r2, _08021C70 @ =0x020160f0\n\
+ ldr r3, _08021C74 @ =gBattleMons\n\
+_08021C52:\n\
+ ldrh r1, [r2]\n\
+ cmp r1, 0\n\
+ beq _08021C5C\n\
+ strh r1, [r3, 0x2E]\n\
+ strh r5, [r2]\n\
+_08021C5C:\n\
+ adds r2, 0x2\n\
+ adds r3, 0x58\n\
+ adds r4, 0x1\n\
+ ldrb r1, [r0]\n\
+ cmp r4, r1\n\
+ blt _08021C52\n\
+ b _08022244\n\
+ .align 2, 0\n\
+_08021C6C: .4byte gNoOfAllBanks\n\
+_08021C70: .4byte 0x020160f0\n\
+_08021C74: .4byte gBattleMons\n\
+_08021C78:\n\
+ movs r0, 0x3\n\
+ movs r1, 0\n\
+ movs r2, 0\n\
+ bl ItemBattleEffects\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08021C98\n\
+ movs r2, 0x1\n\
+ mov r10, r2\n\
+ ldr r3, _08021C94 @ =0x02000000\n\
+ mov r12, r3\n\
+ b _0802224E\n\
+ .align 2, 0\n\
+_08021C94: .4byte 0x02000000\n\
+_08021C98:\n\
+ ldr r2, _08021CA0 @ =0x02000000\n\
+ ldr r4, _08021CA4 @ =0x0001600c\n\
+ adds r1, r2, r4\n\
+ b _08021E00\n\
+ .align 2, 0\n\
+_08021CA0: .4byte 0x02000000\n\
+_08021CA4: .4byte 0x0001600c\n\
+_08021CA8:\n\
+ movs r0, 0x4\n\
+ movs r1, 0\n\
+ movs r2, 0\n\
+ bl ItemBattleEffects\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08021CBC\n\
+ movs r5, 0x1\n\
+ mov r10, r5\n\
+_08021CBC:\n\
+ ldr r2, _08021CC4 @ =0x02000000\n\
+ ldr r0, _08021CC8 @ =0x0001600c\n\
+ adds r1, r2, r0\n\
+ b _08021E00\n\
+ .align 2, 0\n\
+_08021CC4: .4byte 0x02000000\n\
+_08021CC8: .4byte 0x0001600c\n\
+_08021CCC:\n\
+ ldr r1, _08021D04 @ =gStatuses3\n\
+ ldr r0, _08021D08 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ lsls r0, r2, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ ldr r1, _08021D0C @ =0x000400c0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08021CE2\n\
+ b _08021DFA\n\
+_08021CE2:\n\
+ ldr r0, _08021D10 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08021CF0\n\
+ b _08021DFA\n\
+_08021CF0:\n\
+ ldr r4, _08021D14 @ =gActiveBank\n\
+ strb r2, [r4]\n\
+ movs r0, 0\n\
+ movs r1, 0x1\n\
+ bl EmitSpriteInvisibility\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ b _08021DFA\n\
+ .align 2, 0\n\
+_08021D04: .4byte gStatuses3\n\
+_08021D08: .4byte gBankAttacker\n\
+_08021D0C: .4byte 0x000400c0\n\
+_08021D10: .4byte gHitMarker\n\
+_08021D14: .4byte gActiveBank\n\
+_08021D18:\n\
+ ldr r0, _08021D88 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08021D44\n\
+ ldr r1, _08021D8C @ =gStatuses3\n\
+ ldr r0, _08021D90 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ lsls r0, r2, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ ldr r1, _08021D94 @ =0x000400c0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021D44\n\
+ adds r0, r2, 0\n\
+ bl sub_8015660\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08021D7E\n\
+_08021D44:\n\
+ ldr r4, _08021D98 @ =gActiveBank\n\
+ ldr r5, _08021D90 @ =gBankAttacker\n\
+ ldrb r0, [r5]\n\
+ strb r0, [r4]\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ bl EmitSpriteInvisibility\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, _08021D8C @ =gStatuses3\n\
+ ldrb r2, [r5]\n\
+ lsls r2, 2\n\
+ adds r2, r0\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08021D9C @ =0xfffbff3f\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r2, _08021DA0 @ =gSpecialStatuses\n\
+ ldrb r1, [r5]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x4\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+_08021D7E:\n\
+ ldr r2, _08021DA4 @ =0x02000000\n\
+ ldr r4, _08021DA8 @ =0x0001600c\n\
+ adds r1, r2, r4\n\
+ b _08021E00\n\
+ .align 2, 0\n\
+_08021D88: .4byte gBattleMoveFlags\n\
+_08021D8C: .4byte gStatuses3\n\
+_08021D90: .4byte gBankAttacker\n\
+_08021D94: .4byte 0x000400c0\n\
+_08021D98: .4byte gActiveBank\n\
+_08021D9C: .4byte 0xfffbff3f\n\
+_08021DA0: .4byte gSpecialStatuses\n\
+_08021DA4: .4byte 0x02000000\n\
+_08021DA8: .4byte 0x0001600c\n\
+_08021DAC:\n\
+ ldr r2, _08021E0C @ =gSpecialStatuses\n\
+ ldr r1, _08021E10 @ =gBankTarget\n\
+ ldrb r3, [r1]\n\
+ lsls r4, r3, 2\n\
+ adds r0, r4, r3\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 29\n\
+ cmp r0, 0\n\
+ blt _08021DFA\n\
+ ldr r0, _08021E14 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r3, r0\n\
+ bcs _08021DFA\n\
+ ldr r5, _08021E18 @ =gStatuses3\n\
+ adds r0, r4, r5\n\
+ ldr r0, [r0]\n\
+ ldr r1, _08021E1C @ =0x000400c0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08021DFA\n\
+ ldr r4, _08021E20 @ =gActiveBank\n\
+ strb r3, [r4]\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ bl EmitSpriteInvisibility\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, _08021E10 @ =gBankTarget\n\
+ ldrb r2, [r0]\n\
+ lsls r2, 2\n\
+ adds r2, r5\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08021E24 @ =0xfffbff3f\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+_08021DFA:\n\
+ ldr r2, _08021E28 @ =0x02000000\n\
+ ldr r3, _08021E2C @ =0x0001600c\n\
+ adds r1, r2, r3\n\
+_08021E00:\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ mov r12, r2\n\
+ b _0802224E\n\
+ .align 2, 0\n\
+_08021E0C: .4byte gSpecialStatuses\n\
+_08021E10: .4byte gBankTarget\n\
+_08021E14: .4byte gNoOfAllBanks\n\
+_08021E18: .4byte gStatuses3\n\
+_08021E1C: .4byte 0x000400c0\n\
+_08021E20: .4byte gActiveBank\n\
+_08021E24: .4byte 0xfffbff3f\n\
+_08021E28: .4byte 0x02000000\n\
+_08021E2C: .4byte 0x0001600c\n\
+_08021E30:\n\
+ movs r4, 0\n\
+ ldr r0, _08021E60 @ =gNoOfAllBanks\n\
+ ldrb r5, [r0]\n\
+ cmp r4, r5\n\
+ blt _08021E3C\n\
+ b _08022244\n\
+_08021E3C:\n\
+ ldr r2, _08021E64 @ =gDisableStructs\n\
+ ldr r5, _08021E68 @ =0xfeffffff\n\
+ adds r3, r0, 0\n\
+ ldr r1, _08021E6C @ =gUnknown_02024AD0\n\
+_08021E44:\n\
+ ldrb r0, [r2, 0xA]\n\
+ cmp r0, 0\n\
+ bne _08021E50\n\
+ ldr r0, [r1]\n\
+ ands r0, r5\n\
+ str r0, [r1]\n\
+_08021E50:\n\
+ adds r2, 0x1C\n\
+ adds r1, 0x58\n\
+ adds r4, 0x1\n\
+ ldrb r0, [r3]\n\
+ cmp r4, r0\n\
+ blt _08021E44\n\
+ b _08022244\n\
+ .align 2, 0\n\
+_08021E60: .4byte gNoOfAllBanks\n\
+_08021E64: .4byte gDisableStructs\n\
+_08021E68: .4byte 0xfeffffff\n\
+_08021E6C: .4byte gUnknown_02024AD0\n\
+_08021E70:\n\
+ ldr r1, _08021F2C @ =gHitMarker\n\
+ ldr r3, [r1]\n\
+ movs r0, 0x80\n\
+ lsls r0, 5\n\
+ ands r0, r3\n\
+ ldr r2, _08021F30 @ =gBankAttacker\n\
+ mov r9, r2\n\
+ adds r5, r1, 0\n\
+ cmp r0, 0\n\
+ beq _08021E9A\n\
+ ldr r0, _08021F34 @ =gActiveBank\n\
+ ldrb r2, [r2]\n\
+ strb r2, [r0]\n\
+ ldr r1, _08021F38 @ =gBankTarget\n\
+ ldrb r0, [r1]\n\
+ mov r4, r9\n\
+ strb r0, [r4]\n\
+ strb r2, [r1]\n\
+ ldr r0, _08021F3C @ =0xffffefff\n\
+ ands r3, r0\n\
+ str r3, [r5]\n\
+_08021E9A:\n\
+ ldr r1, _08021F40 @ =gBattleMoves\n\
+ ldr r2, _08021F44 @ =gUnknown_02024BE8\n\
+ ldrh r3, [r2]\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ mov r8, r1\n\
+ adds r7, r2, 0\n\
+ cmp r0, 0x7F\n\
+ bne _08021EBE\n\
+ ldr r0, _08021F48 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021ECA\n\
+_08021EBE:\n\
+ ldr r1, _08021F4C @ =gUnknown_02024C2C\n\
+ mov r2, r9\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ strh r3, [r0]\n\
+_08021ECA:\n\
+ ldr r0, _08021F50 @ =gAbsentBankFlags\n\
+ ldrb r1, [r0]\n\
+ ldr r2, _08021F54 @ =gBitTable\n\
+ mov r3, r9\n\
+ ldrb r4, [r3]\n\
+ lsls r0, r4, 2\n\
+ adds r0, r2\n\
+ ldr r3, [r0]\n\
+ ands r1, r3\n\
+ adds r6, r2, 0\n\
+ cmp r1, 0\n\
+ beq _08021EE4\n\
+ b _08022244\n\
+_08021EE4:\n\
+ ldr r0, _08021F58 @ =0x000160a6\n\
+ add r0, r12\n\
+ ldrb r0, [r0]\n\
+ ands r0, r3\n\
+ cmp r0, 0\n\
+ beq _08021EF2\n\
+ b _08022244\n\
+_08021EF2:\n\
+ ldrh r2, [r7]\n\
+ lsls r0, r2, 1\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ add r0, r8\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x7F\n\
+ bne _08021F04\n\
+ b _08022244\n\
+_08021F04:\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x80\n\
+ lsls r1, 18\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021F68\n\
+ ldr r1, _08021F5C @ =gLastUsedMove\n\
+ lsls r0, r4, 1\n\
+ adds r0, r1\n\
+ strh r2, [r0]\n\
+ ldr r0, _08021F60 @ =gUnknown_02024C4C\n\
+ mov r4, r9\n\
+ ldrb r1, [r4]\n\
+ lsls r1, 1\n\
+ adds r1, r0\n\
+ ldr r0, _08021F64 @ =gCurrentMove\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r1]\n\
+ b _08021F82\n\
+ .align 2, 0\n\
+_08021F2C: .4byte gHitMarker\n\
+_08021F30: .4byte gBankAttacker\n\
+_08021F34: .4byte gActiveBank\n\
+_08021F38: .4byte gBankTarget\n\
+_08021F3C: .4byte 0xffffefff\n\
+_08021F40: .4byte gBattleMoves\n\
+_08021F44: .4byte gUnknown_02024BE8\n\
+_08021F48: .4byte gBattleMoveFlags\n\
+_08021F4C: .4byte gUnknown_02024C2C\n\
+_08021F50: .4byte gAbsentBankFlags\n\
+_08021F54: .4byte gBitTable\n\
+_08021F58: .4byte 0x000160a6\n\
+_08021F5C: .4byte gLastUsedMove\n\
+_08021F60: .4byte gUnknown_02024C4C\n\
+_08021F64: .4byte gCurrentMove\n\
+_08021F68:\n\
+ ldr r1, _08021FD0 @ =gLastUsedMove\n\
+ lsls r0, r4, 1\n\
+ adds r0, r1\n\
+ ldr r1, _08021FD4 @ =0x0000ffff\n\
+ strh r1, [r0]\n\
+ ldr r1, _08021FD8 @ =gUnknown_02024C4C\n\
+ mov r2, r9\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ movs r1, 0x1\n\
+ negs r1, r1\n\
+ strh r1, [r0]\n\
+_08021F82:\n\
+ ldr r2, _08021FDC @ =gBankTarget\n\
+ ldrb r3, [r2]\n\
+ lsls r0, r3, 2\n\
+ adds r0, r6\n\
+ ldr r0, [r0]\n\
+ lsls r0, 28\n\
+ ldr r1, [r5]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _08021FA0\n\
+ ldr r0, _08021FE0 @ =gUnknown_02024C5C\n\
+ adds r0, r3, r0\n\
+ mov r3, r9\n\
+ ldrb r1, [r3]\n\
+ strb r1, [r0]\n\
+_08021FA0:\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x80\n\
+ lsls r1, 18\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0802204C\n\
+ ldr r0, _08021FE4 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0802204C\n\
+ ldrh r2, [r7]\n\
+ ldr r0, _08021FD4 @ =0x0000ffff\n\
+ cmp r2, r0\n\
+ bne _08021FEC\n\
+ ldr r1, _08021FE8 @ =gMoveHitWith\n\
+ ldr r4, _08021FDC @ =gBankTarget\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ strh r2, [r0]\n\
+ b _08022244\n\
+ .align 2, 0\n\
+_08021FD0: .4byte gLastUsedMove\n\
+_08021FD4: .4byte 0x0000ffff\n\
+_08021FD8: .4byte gUnknown_02024C4C\n\
+_08021FDC: .4byte gBankTarget\n\
+_08021FE0: .4byte gUnknown_02024C5C\n\
+_08021FE4: .4byte gBattleMoveFlags\n\
+_08021FE8: .4byte gMoveHitWith\n\
+_08021FEC:\n\
+ ldr r0, _08022014 @ =gMoveHitWith\n\
+ ldr r5, _08022018 @ =gBankTarget\n\
+ ldrb r1, [r5]\n\
+ lsls r1, 1\n\
+ adds r1, r0\n\
+ ldr r4, _0802201C @ =gCurrentMove\n\
+ ldrh r0, [r4]\n\
+ strh r0, [r1]\n\
+ ldr r0, _08022020 @ =0x0001601c\n\
+ add r0, r12\n\
+ ldrb r3, [r0]\n\
+ cmp r3, 0\n\
+ beq _08022028\n\
+ ldr r0, _08022024 @ =gUnknown_02024C44\n\
+ ldrb r1, [r5]\n\
+ lsls r1, 1\n\
+ adds r1, r0\n\
+ movs r0, 0x3F\n\
+ ands r0, r3\n\
+ b _08021C22\n\
+ .align 2, 0\n\
+_08022014: .4byte gMoveHitWith\n\
+_08022018: .4byte gBankTarget\n\
+_0802201C: .4byte gCurrentMove\n\
+_08022020: .4byte 0x0001601c\n\
+_08022024: .4byte gUnknown_02024C44\n\
+_08022028:\n\
+ ldr r0, _08022044 @ =gUnknown_02024C44\n\
+ ldr r1, _08022048 @ =gBankTarget\n\
+ ldrb r2, [r1]\n\
+ lsls r2, 1\n\
+ adds r2, r0\n\
+ ldrh r1, [r4]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ add r0, r8\n\
+ ldrb r0, [r0, 0x2]\n\
+ strh r0, [r2]\n\
+ b _08022244\n\
+ .align 2, 0\n\
+_08022044: .4byte gUnknown_02024C44\n\
+_08022048: .4byte gBankTarget\n\
+_0802204C:\n\
+ ldr r0, _0802205C @ =gMoveHitWith\n\
+ ldr r2, _08022060 @ =gBankTarget\n\
+ ldrb r1, [r2]\n\
+ lsls r1, 1\n\
+ adds r1, r0\n\
+ ldr r0, _08022064 @ =0x0000ffff\n\
+ b _08021C22\n\
+ .align 2, 0\n\
+_0802205C: .4byte gMoveHitWith\n\
+_08022060: .4byte gBankTarget\n\
+_08022064: .4byte 0x0000ffff\n\
+_08022068:\n\
+ ldr r0, _0802212C @ =gAbsentBankFlags\n\
+ ldrb r1, [r0]\n\
+ ldr r6, _08022130 @ =gBitTable\n\
+ ldr r2, _08022134 @ =gBankAttacker\n\
+ ldrb r5, [r2]\n\
+ lsls r0, r5, 2\n\
+ adds r0, r6\n\
+ ldr r4, [r0]\n\
+ ands r1, r4\n\
+ mov r9, r2\n\
+ cmp r1, 0\n\
+ beq _08022082\n\
+ b _08022244\n\
+_08022082:\n\
+ ldr r0, _08022138 @ =0x000160a6\n\
+ add r0, r12\n\
+ ldrb r0, [r0]\n\
+ ands r0, r4\n\
+ cmp r0, 0\n\
+ beq _08022090\n\
+ b _08022244\n\
+_08022090:\n\
+ ldr r1, _0802213C @ =gBattleMoves\n\
+ ldr r4, _08022140 @ =gUnknown_02024BE8\n\
+ ldrh r3, [r4]\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0802215C\n\
+ ldr r0, _08022144 @ =gHitMarker\n\
+ ldr r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 18\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0802215C\n\
+ ldr r2, _08022148 @ =gBankTarget\n\
+ ldrb r0, [r2]\n\
+ cmp r5, r0\n\
+ bne _080220C0\n\
+ b _08022244\n\
+_080220C0:\n\
+ adds r2, r0, 0\n\
+ lsls r0, r2, 2\n\
+ adds r0, r6\n\
+ ldr r0, [r0]\n\
+ lsls r0, 28\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _0802215C\n\
+ ldr r0, _0802214C @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0802215C\n\
+ lsls r0, r2, 1\n\
+ ldr r5, _08022150 @ =0x000160ac\n\
+ adds r0, r5\n\
+ add r0, r12\n\
+ strb r3, [r0]\n\
+ ldr r0, _08022148 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r1, 1\n\
+ ldr r2, _08022154 @ =0x000160ad\n\
+ adds r1, r2\n\
+ add r1, r12\n\
+ ldrh r0, [r4]\n\
+ lsrs r0, 8\n\
+ strb r0, [r1]\n\
+ ldr r3, _08022148 @ =gBankTarget\n\
+ ldrb r2, [r3]\n\
+ lsls r2, 2\n\
+ mov r5, r9\n\
+ ldrb r0, [r5]\n\
+ lsrs r0, 1\n\
+ lsls r0, 1\n\
+ ldr r1, _08022158 @ =0x00016100\n\
+ adds r0, r1\n\
+ adds r2, r0\n\
+ add r2, r12\n\
+ ldrh r0, [r4]\n\
+ strb r0, [r2]\n\
+ ldrb r2, [r3]\n\
+ lsls r2, 2\n\
+ ldrb r0, [r5]\n\
+ lsrs r0, 1\n\
+ lsls r0, 1\n\
+ adds r1, 0x1\n\
+ adds r0, r1\n\
+ adds r2, r0\n\
+ add r2, r12\n\
+ ldrh r0, [r4]\n\
+ lsrs r0, 8\n\
+ strb r0, [r2]\n\
+ b _08022244\n\
+ .align 2, 0\n\
+_0802212C: .4byte gAbsentBankFlags\n\
+_08022130: .4byte gBitTable\n\
+_08022134: .4byte gBankAttacker\n\
+_08022138: .4byte 0x000160a6\n\
+_0802213C: .4byte gBattleMoves\n\
+_08022140: .4byte gUnknown_02024BE8\n\
+_08022144: .4byte gHitMarker\n\
+_08022148: .4byte gBankTarget\n\
+_0802214C: .4byte gBattleMoveFlags\n\
+_08022150: .4byte 0x000160ac\n\
+_08022154: .4byte 0x000160ad\n\
+_08022158: .4byte 0x00016100\n\
+_0802215C:\n\
+ mov r1, r9\n\
+ ldrb r0, [r1]\n\
+ ldr r2, _080221B4 @ =gBankTarget\n\
+ ldrb r2, [r2]\n\
+ cmp r0, r2\n\
+ beq _08022244\n\
+ ldr r3, _080221B4 @ =gBankTarget\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 1\n\
+ ldr r4, _080221B8 @ =0x000160ac\n\
+ adds r0, r4\n\
+ add r0, r12\n\
+ movs r3, 0\n\
+ strb r3, [r0]\n\
+ ldr r5, _080221B4 @ =gBankTarget\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 1\n\
+ ldr r1, _080221BC @ =0x000160ad\n\
+ adds r0, r1\n\
+ add r0, r12\n\
+ strb r3, [r0]\n\
+ ldrb r2, [r5]\n\
+ lsls r2, 2\n\
+ mov r4, r9\n\
+ ldrb r0, [r4]\n\
+ lsrs r0, 1\n\
+ lsls r0, 1\n\
+ adds r1, 0x53\n\
+ adds r0, r1\n\
+ adds r2, r0\n\
+ add r2, r12\n\
+ strb r3, [r2]\n\
+ ldrb r2, [r5]\n\
+ lsls r2, 2\n\
+ ldrb r0, [r4]\n\
+ lsrs r0, 1\n\
+ lsls r0, 1\n\
+ adds r1, 0x1\n\
+ adds r0, r1\n\
+ adds r2, r0\n\
+ add r2, r12\n\
+ strb r3, [r2]\n\
+ b _08022244\n\
+ .align 2, 0\n\
+_080221B4: .4byte gBankTarget\n\
+_080221B8: .4byte 0x000160ac\n\
+_080221BC: .4byte 0x000160ad\n\
+_080221C0:\n\
+ ldr r5, _080222B0 @ =gHitMarker\n\
+ ldr r2, [r5]\n\
+ movs r0, 0x80\n\
+ lsls r0, 12\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _08022244\n\
+ ldr r0, _080222B4 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08022244\n\
+ ldr r1, _080222B8 @ =gProtectStructs\n\
+ ldr r0, _080222BC @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x1]\n\
+ lsls r0, 29\n\
+ cmp r0, 0\n\
+ blt _08022244\n\
+ ldr r0, _080222C0 @ =gBattleMoves\n\
+ mov r9, r0\n\
+ ldr r1, _080222C4 @ =gCurrentMove\n\
+ mov r8, r1\n\
+ ldrh r0, [r1]\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ add r1, r9\n\
+ ldrb r0, [r1, 0x6]\n\
+ cmp r0, 0x8\n\
+ bne _08022244\n\
+ movs r6, 0x80\n\
+ lsls r6, 2\n\
+ adds r4, r6, 0\n\
+ ands r4, r2\n\
+ cmp r4, 0\n\
+ bne _08022244\n\
+ ldr r7, _080222C8 @ =gBankTarget\n\
+ ldrb r0, [r7]\n\
+ bl GetBankIdentity\n\
+ movs r1, 0x2\n\
+ eors r0, r1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankByPlayerAI\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ ldr r1, _080222CC @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ beq _0802223A\n\
+ bl _08021874\n\
+_0802223A:\n\
+ ldr r0, [r5]\n\
+ orrs r0, r6\n\
+ str r0, [r5]\n\
+ ldr r2, _080222D0 @ =0x02000000\n\
+ mov r12, r2\n\
+_08022244:\n\
+ ldr r1, _080222D4 @ =0x0001600c\n\
+ add r1, r12\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+_0802224E:\n\
+ ldr r3, [sp, 0x10]\n\
+ cmp r3, 0x1\n\
+ bne _08022262\n\
+ mov r4, r10\n\
+ cmp r4, 0\n\
+ bne _08022262\n\
+ ldr r1, _080222D4 @ =0x0001600c\n\
+ add r1, r12\n\
+ movs r0, 0x11\n\
+ strb r0, [r1]\n\
+_08022262:\n\
+ ldr r5, [sp, 0x10]\n\
+ cmp r5, 0x2\n\
+ bne _08022278\n\
+ ldr r1, _080222D4 @ =0x0001600c\n\
+ add r1, r12\n\
+ ldr r0, [sp, 0x14]\n\
+ ldrb r2, [r1]\n\
+ cmp r0, r2\n\
+ bne _08022278\n\
+ movs r0, 0x11\n\
+ strb r0, [r1]\n\
+_08022278:\n\
+ ldr r0, _080222D4 @ =0x0001600c\n\
+ add r0, r12\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x11\n\
+ beq _08022286\n\
+ bl _080218E4\n\
+_08022286:\n\
+ ldr r0, _080222D4 @ =0x0001600c\n\
+ add r0, r12\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x11\n\
+ bne _0802229E\n\
+ mov r3, r10\n\
+ cmp r3, 0\n\
+ bne _0802229E\n\
+ ldr r1, _080222D8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x3\n\
+_0802229C:\n\
+ str r0, [r1]\n\
+_0802229E:\n\
+ add sp, 0x18\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080222B0: .4byte gHitMarker\n\
+_080222B4: .4byte gBattleTypeFlags\n\
+_080222B8: .4byte gProtectStructs\n\
+_080222BC: .4byte gBankAttacker\n\
+_080222C0: .4byte gBattleMoves\n\
+_080222C4: .4byte gCurrentMove\n\
+_080222C8: .4byte gBankTarget\n\
+_080222CC: .4byte gBattleMons\n\
+_080222D0: .4byte 0x02000000\n\
+_080222D4: .4byte 0x0001600c\n\
+_080222D8: .4byte gBattlescriptCurrInstr\n\
+ .syntax divided"
+ );
+}
+#endif // NONMATCHING
+
+static void atk4A_typecalc2(void)
+{
+ u8 flags = 0;
+ int i = 0;
+ u8 move_type = gBattleMoves[gCurrentMove].type;
+
+ if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND)
+ {
+ gLastUsedAbility = gBattleMons[gBankTarget].ability;
+ gBattleMoveFlags |= (MOVE_MISSED | MOVE_NOTAFFECTED);
+ gMoveHitWith[gBankTarget] = 0;
+ gBattleCommunication[6] = move_type;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ else
+ {
+ while (gTypeEffectiveness[i]!= TYPE_ENDTABLE)
+ {
+ if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) {break;}
+ else {i += 3; continue;}
+ }
+
+ if (gTypeEffectiveness[i] == move_type)
+ {
+ //check type1
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1)
+ {
+ if (gTypeEffectiveness[i + 2] == 0)
+ {
+ gBattleMoveFlags |= MOVE_NOTAFFECTED;
+ break;
+ }
+ if (gTypeEffectiveness[i + 2] == 5)
+ flags |= MOVE_NOTVERYEFFECTIVE;
+ if (gTypeEffectiveness[i + 2] == 20)
+ flags |= MOVE_SUPEREFFECTIVE;
+ }
+ //check type2
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2)
+ {
+ if (gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2
+ && gTypeEffectiveness[i + 2] == 0)
+ {
+ gBattleMoveFlags |= MOVE_NOTAFFECTED;
+ break;
+ }
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && gTypeEffectiveness[i + 2] == 5)
+ flags |= MOVE_NOTVERYEFFECTIVE;
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2
+ && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && gTypeEffectiveness[i + 2] == 20)
+ flags |= MOVE_SUPEREFFECTIVE;
+ }
+ }
+ i += 3;
+ }
+ }
+
+ if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && !(flags & MOVE_NO_EFFECT) && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2 &&
+ (!(flags & MOVE_SUPEREFFECTIVE) || ((flags & (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE)) == (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE))) &&
+ gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gBattleMoveFlags |= MOVE_MISSED;
+ gMoveHitWith[gBankTarget] = 0;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ if (gBattleMoveFlags & MOVE_NOTAFFECTED)
+ gProtectStructs[gBankAttacker].notEffective = 1;
+
+ gBattlescriptCurrInstr++;
+}
+
+static void atk4B_return_atk_to_ball(void)
+{
+ gActiveBank = gBankAttacker;
+ if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank)))
+ {
+ EmitReturnPokeToBall(0, 0);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk4C_copy_poke_data(void)
+{
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+
+ gBattlePartyID[gActiveBank] = unk_2000000[0x16068 + gActiveBank];
+
+ EmitGetAttributes(0, 0, gBitTable[gBattlePartyID[gActiveBank]]);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+static inline u8 get_knocked_off_byte(u8 bank)
+{
+ register u32 side asm("r2") = GetBankSide(bank);
+ register struct WishFutureKnock* dummy = &gWishFutureKnock;
+ register u8* aa = ((u8*)((u8*)(dummy)));
+ register u8* bb = aa + 0x29;
+ register u8* cc asm("r0") = side + bb;
+ return *cc;
+}
+
+static void atk4D_switch_data_update(void)
+{
+ struct BattlePokemon OldData;
+ int i;
+ u8 *monData;
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ OldData = gBattleMons[gActiveBank];
+ monData = (u8*)(&gBattleMons[gActiveBank]);
+ for (i = 0; i < sizeof(struct BattlePokemon); i++)
+ {
+ monData[i] = gBattleBufferB[gActiveBank][4 + i];
+ }
+
+ gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1;
+ gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2;
+ gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility);
+ //check knocked off item
+ if (get_knocked_off_byte(gActiveBank) & gBitTable[gBattlePartyID[gActiveBank]])
+ {
+ gBattleMons[gActiveBank].item = 0;
+ }
+
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS)
+ {
+ for (i = 0; i < 8; i++)
+ {
+ gBattleMons[gActiveBank].statStages[i] = OldData.statStages[i];
+ }
+ gBattleMons[gActiveBank].status2 = OldData.status2;
+ }
+ SwitchInClearStructs();
+ BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 7;
+ gBattleTextBuff1[2] = gActiveBank;
+ gBattleTextBuff1[3] = gBattlePartyID[gActiveBank];
+ gBattleTextBuff1[4] = 0xFF;
+
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk4E_switchin_anim(void)
+{
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER)))
+ {
+ GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
+ }
+ gAbsentBankFlags &= ~(gBitTable[gActiveBank]);
+ EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2));
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 3;
+}
+
+static void atk4F_jump_if_cannot_switch(void)
+{
+ int val, to_cmp;
+ register struct Pokemon* poke;
+ u8 r7;
+ //0x80 byte is used as a way of telling the function whether to not check status2/status3
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x7F);
+ if (!(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x80)
+ && ((gBattleMons[gActiveBank].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
+ || (gStatuses3[gActiveBank] & STATUS3_ROOTED)))
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ return;
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (GetBankSide(gActiveBank) == 1)
+ poke = gEnemyParty;
+ else
+ poke = gPlayerParty;
+ val = 0;
+ if (sub_803FBFC(sub_803FC34(gActiveBank)) == 1)
+ val = 3;
+ for (to_cmp = val + 3; val < to_cmp; val++)
+ {
+ if (ValidPoke(&poke[val]) && gBattlePartyID[gActiveBank] != val)
+ break;
+ }
+ if (val == to_cmp)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+ }
+ else
+ {
+ if (GetBankSide(gActiveBank) == 1)
+ {
+ r7 = GetBankByPlayerAI(1);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ to_cmp = GetBankByPlayerAI(3);
+ else
+ to_cmp = r7;
+ poke = gEnemyParty;
+ }
+ else
+ {
+ r7 = GetBankByPlayerAI(0);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ to_cmp = GetBankByPlayerAI(2);
+ else
+ to_cmp = r7;
+ poke = gPlayerParty;
+ }
+ for (val = 0; val < 6; val++)
+ {
+ if (ValidPoke2(&poke[val]) && val != gBattlePartyID[r7] && val != gBattlePartyID[to_cmp])
+ break;
+ }
+ if (val == 6)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+ }
+}
+
+void sub_8022A3C(u8 unkown)
+{
+ //BATTLE_STRUCT->unk16064[gActiveBank] = gBattlePartyID[gActiveBank];
+ ewram[gActiveBank + 0x16064] = gBattlePartyID[gActiveBank];
+ EmitChoosePokemon(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]);
+ MarkBufferBankForExecution(gActiveBank);
+}
+
+/*
+static void atk50_openpartyscreen(void)
+{
+ int i = 0;
+ int r9 = 0;
+ u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5)
+ {
+ if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE)
+ {
+ for (gActiveBank = i; gActiveBank < gNoOfAllBanks; gActiveBank++)
+ {
+ if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank)))
+ {
+ EmitLinkStandbyMsg(0, 2);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ else if (sub_8018018(gActiveBank, 6, 6) == 0
+ && !gSpecialStatuses[gActiveBank].flag40)
+ {
+ sub_8022A3C(6);
+ gSpecialStatuses[gActiveBank].flag40 = 1;
+ }
+ else
+ {
+ gAbsentBankFlags |= gBitTable[gActiveBank];
+ gHitMarker &= (~HITMARKER_FAINTED(gActiveBank));
+ EmitLinkStandbyMsg(0, 2);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ }
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (!(gHitMarker >> 0x1C & gBitTable[0]))
+ {
+
+ }
+ else if (sub_8018018(gActiveBank, 6, 6) == 0
+ && !gSpecialStatuses[gActiveBank].flag40)
+ {
+
+ }
+ else
+ {
+
+ }
+ }
+ }
+}
+*/
+
+__attribute__((naked))
+static void atk50_openpartyscreen(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ sub sp, 0x4\n\
+ movs r7, 0\n\
+ movs r0, 0\n\
+ mov r9, r0\n\
+ ldr r6, _08022B44 @ =gBattlescriptCurrInstr\n\
+ ldr r1, [r6]\n\
+ ldrb r2, [r1, 0x2]\n\
+ ldrb r0, [r1, 0x3]\n\
+ lsls r0, 8\n\
+ orrs r2, r0\n\
+ ldrb r0, [r1, 0x4]\n\
+ lsls r0, 16\n\
+ orrs r2, r0\n\
+ ldrb r0, [r1, 0x5]\n\
+ lsls r0, 24\n\
+ orrs r2, r0\n\
+ mov r8, r2\n\
+ ldrb r2, [r1, 0x1]\n\
+ adds r0, r2, 0\n\
+ mov r12, r6\n\
+ cmp r0, 0x5\n\
+ beq _08022ACE\n\
+ b _08022F74\n\
+_08022ACE:\n\
+ ldr r0, _08022B48 @ =gBattleTypeFlags\n\
+ ldrh r0, [r0]\n\
+ movs r1, 0x41\n\
+ ands r1, r0\n\
+ cmp r1, 0x1\n\
+ beq _08022BBC\n\
+ ldr r1, _08022B4C @ =gActiveBank\n\
+ strb r7, [r1]\n\
+ ldr r0, _08022B50 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r7, r0\n\
+ bcc _08022AE8\n\
+ b _08022F62\n\
+_08022AE8:\n\
+ ldr r7, _08022B54 @ =gHitMarker\n\
+ ldr r6, _08022B58 @ =gBitTable\n\
+ adds r4, r1, 0\n\
+ ldr r0, _08022B5C @ =gAbsentBankFlags\n\
+ mov r8, r0\n\
+_08022AF2:\n\
+ ldrb r2, [r4]\n\
+ lsls r0, r2, 2\n\
+ adds r0, r6\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r7]\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08022B94\n\
+ adds r0, r2, 0\n\
+ movs r1, 0x6\n\
+ movs r2, 0x6\n\
+ bl sub_8018018\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08022B60\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r0, [r0]\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r7]\n\
+ bics r0, r1\n\
+ str r0, [r7]\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ b _08022BA2\n\
+ .align 2, 0\n\
+_08022B44: .4byte gBattlescriptCurrInstr\n\
+_08022B48: .4byte gBattleTypeFlags\n\
+_08022B4C: .4byte gActiveBank\n\
+_08022B50: .4byte gNoOfAllBanks\n\
+_08022B54: .4byte gHitMarker\n\
+_08022B58: .4byte gBitTable\n\
+_08022B5C: .4byte gAbsentBankFlags\n\
+_08022B60:\n\
+ ldr r5, _08022B90 @ =gSpecialStatuses\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r5\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08022BA2\n\
+ movs r0, 0x6\n\
+ bl sub_8022A3C\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x40\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ b _08022BA2\n\
+ .align 2, 0\n\
+_08022B90: .4byte gSpecialStatuses\n\
+_08022B94:\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+_08022BA2:\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ ldr r1, _08022BB8 @ =gNoOfAllBanks\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bcc _08022AF2\n\
+ b _08022F62\n\
+ .align 2, 0\n\
+_08022BB8: .4byte gNoOfAllBanks\n\
+_08022BBC:\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _08022BC4\n\
+ b _08022F62\n\
+_08022BC4:\n\
+ ldr r0, _08022C1C @ =gHitMarker\n\
+ mov r8, r0\n\
+ ldr r0, [r0]\n\
+ lsrs r5, r0, 28\n\
+ ldr r6, _08022C20 @ =gBitTable\n\
+ ldr r0, [r6]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _08022C7E\n\
+ ldr r4, _08022C24 @ =gActiveBank\n\
+ strb r7, [r4]\n\
+ movs r0, 0\n\
+ movs r1, 0x6\n\
+ movs r2, 0x6\n\
+ bl sub_8018018\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08022C2C\n\
+ ldr r2, _08022C28 @ =gAbsentBankFlags\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ mov r2, r8\n\
+ ldr r0, [r2]\n\
+ bics r0, r1\n\
+ str r0, [r2]\n\
+ movs r0, 0\n\
+ bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ b _08022C7E\n\
+ .align 2, 0\n\
+_08022C1C: .4byte gHitMarker\n\
+_08022C20: .4byte gBitTable\n\
+_08022C24: .4byte gActiveBank\n\
+_08022C28: .4byte gAbsentBankFlags\n\
+_08022C2C:\n\
+ ldr r6, _08022C60 @ =gSpecialStatuses\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r6\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08022C6C\n\
+ ldr r0, _08022C64 @ =0x02000000\n\
+ ldr r1, _08022C68 @ =0x0001606a\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_8022A3C\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x40\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ b _08022C7E\n\
+ .align 2, 0\n\
+_08022C60: .4byte gSpecialStatuses\n\
+_08022C64: .4byte 0x02000000\n\
+_08022C68: .4byte 0x0001606a\n\
+_08022C6C:\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ movs r2, 0x1\n\
+ mov r9, r2\n\
+_08022C7E:\n\
+ ldr r6, _08022CD8 @ =gBitTable\n\
+ ldr r0, [r6, 0x8]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _08022D40\n\
+ ldr r0, [r6]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ bne _08022D40\n\
+ ldr r4, _08022CDC @ =gActiveBank\n\
+ movs r0, 0x2\n\
+ strb r0, [r4]\n\
+ movs r0, 0x2\n\
+ movs r1, 0x6\n\
+ movs r2, 0x6\n\
+ bl sub_8018018\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08022CE8\n\
+ ldr r2, _08022CE0 @ =gAbsentBankFlags\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r2, _08022CE4 @ =gHitMarker\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r2]\n\
+ bics r0, r1\n\
+ str r0, [r2]\n\
+ movs r0, 0\n\
+ bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ b _08022D40\n\
+ .align 2, 0\n\
+_08022CD8: .4byte gBitTable\n\
+_08022CDC: .4byte gActiveBank\n\
+_08022CE0: .4byte gAbsentBankFlags\n\
+_08022CE4: .4byte gHitMarker\n\
+_08022CE8:\n\
+ ldr r6, _08022D1C @ =gSpecialStatuses\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r6\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08022D28\n\
+ ldr r0, _08022D20 @ =0x02000000\n\
+ ldr r1, _08022D24 @ =0x00016068\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_8022A3C\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x40\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ b _08022D40\n\
+ .align 2, 0\n\
+_08022D1C: .4byte gSpecialStatuses\n\
+_08022D20: .4byte 0x02000000\n\
+_08022D24: .4byte 0x00016068\n\
+_08022D28:\n\
+ movs r0, 0x1\n\
+ mov r2, r9\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _08022D40\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+_08022D40:\n\
+ ldr r6, _08022D90 @ =gBitTable\n\
+ ldr r0, [r6, 0x4]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _08022DF6\n\
+ ldr r4, _08022D94 @ =gActiveBank\n\
+ movs r0, 0x1\n\
+ strb r0, [r4]\n\
+ movs r0, 0x1\n\
+ movs r1, 0x6\n\
+ movs r2, 0x6\n\
+ bl sub_8018018\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08022DA0\n\
+ ldr r2, _08022D98 @ =gAbsentBankFlags\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r2, _08022D9C @ =gHitMarker\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r2]\n\
+ bics r0, r1\n\
+ str r0, [r2]\n\
+ movs r0, 0\n\
+ bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ b _08022DF6\n\
+ .align 2, 0\n\
+_08022D90: .4byte gBitTable\n\
+_08022D94: .4byte gActiveBank\n\
+_08022D98: .4byte gAbsentBankFlags\n\
+_08022D9C: .4byte gHitMarker\n\
+_08022DA0:\n\
+ ldr r6, _08022DD4 @ =gSpecialStatuses\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r6\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08022DE0\n\
+ ldr r0, _08022DD8 @ =0x02000000\n\
+ ldr r1, _08022DDC @ =0x0001606b\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_8022A3C\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x40\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ b _08022DF6\n\
+ .align 2, 0\n\
+_08022DD4: .4byte gSpecialStatuses\n\
+_08022DD8: .4byte 0x02000000\n\
+_08022DDC: .4byte 0x0001606b\n\
+_08022DE0:\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ movs r0, 0x2\n\
+ mov r2, r9\n\
+ orrs r2, r0\n\
+ mov r9, r2\n\
+_08022DF6:\n\
+ ldr r6, _08022E50 @ =gBitTable\n\
+ ldr r0, [r6, 0xC]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _08022EB8\n\
+ ldr r0, [r6, 0x4]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ bne _08022EB8\n\
+ ldr r4, _08022E54 @ =gActiveBank\n\
+ movs r0, 0x3\n\
+ strb r0, [r4]\n\
+ movs r0, 0x3\n\
+ movs r1, 0x6\n\
+ movs r2, 0x6\n\
+ bl sub_8018018\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08022E60\n\
+ ldr r2, _08022E58 @ =gAbsentBankFlags\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r2, _08022E5C @ =gHitMarker\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r2]\n\
+ bics r0, r1\n\
+ str r0, [r2]\n\
+ movs r0, 0\n\
+ bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ b _08022EB8\n\
+ .align 2, 0\n\
+_08022E50: .4byte gBitTable\n\
+_08022E54: .4byte gActiveBank\n\
+_08022E58: .4byte gAbsentBankFlags\n\
+_08022E5C: .4byte gHitMarker\n\
+_08022E60:\n\
+ ldr r6, _08022E94 @ =gSpecialStatuses\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r6\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08022EA0\n\
+ ldr r0, _08022E98 @ =0x02000000\n\
+ ldr r1, _08022E9C @ =0x00016069\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_8022A3C\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x40\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ b _08022EB8\n\
+ .align 2, 0\n\
+_08022E94: .4byte gSpecialStatuses\n\
+_08022E98: .4byte 0x02000000\n\
+_08022E9C: .4byte 0x00016069\n\
+_08022EA0:\n\
+ movs r0, 0x2\n\
+ mov r2, r9\n\
+ ands r2, r0\n\
+ cmp r2, 0\n\
+ bne _08022EB8\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+_08022EB8:\n\
+ ldr r1, _08022EE8 @ =gSpecialStatuses\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08022F0C\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x28\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08022F0C\n\
+ cmp r5, 0\n\
+ beq _08022F0C\n\
+ ldr r0, _08022EEC @ =gAbsentBankFlags\n\
+ ldrb r1, [r0]\n\
+ ldr r0, _08022EF0 @ =gBitTable\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _08022EF8\n\
+ ldr r1, _08022EF4 @ =gActiveBank\n\
+ movs r0, 0x2\n\
+ strb r0, [r1]\n\
+ b _08022EFC\n\
+ .align 2, 0\n\
+_08022EE8: .4byte gSpecialStatuses\n\
+_08022EEC: .4byte gAbsentBankFlags\n\
+_08022EF0: .4byte gBitTable\n\
+_08022EF4: .4byte gActiveBank\n\
+_08022EF8:\n\
+ ldr r0, _08022F3C @ =gActiveBank\n\
+ strb r1, [r0]\n\
+_08022EFC:\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldr r0, _08022F3C @ =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ bl MarkBufferBankForExecution\n\
+_08022F0C:\n\
+ ldr r1, _08022F40 @ =gSpecialStatuses\n\
+ ldrb r0, [r1, 0x14]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08022F62\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x3C\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _08022F62\n\
+ cmp r5, 0\n\
+ beq _08022F62\n\
+ ldr r0, _08022F44 @ =gAbsentBankFlags\n\
+ ldrb r0, [r0]\n\
+ ldr r1, _08022F48 @ =gBitTable\n\
+ ldr r1, [r1, 0x4]\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08022F4C\n\
+ ldr r1, _08022F3C @ =gActiveBank\n\
+ movs r0, 0x3\n\
+ b _08022F50\n\
+ .align 2, 0\n\
+_08022F3C: .4byte gActiveBank\n\
+_08022F40: .4byte gSpecialStatuses\n\
+_08022F44: .4byte gAbsentBankFlags\n\
+_08022F48: .4byte gBitTable\n\
+_08022F4C:\n\
+ ldr r1, _08022F6C @ =gActiveBank\n\
+ movs r0, 0x1\n\
+_08022F50:\n\
+ strb r0, [r1]\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldr r0, _08022F6C @ =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ bl MarkBufferBankForExecution\n\
+_08022F62:\n\
+ ldr r1, _08022F70 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x6\n\
+ str r0, [r1]\n\
+ b _08023302\n\
+ .align 2, 0\n\
+_08022F6C: .4byte gActiveBank\n\
+_08022F70: .4byte gBattlescriptCurrInstr\n\
+_08022F74:\n\
+ cmp r0, 0x6\n\
+ beq _08022F7A\n\
+ b _08023170\n\
+_08022F7A:\n\
+ ldr r0, _08022FF0 @ =gBattleTypeFlags\n\
+ ldrh r2, [r0]\n\
+ movs r0, 0x40\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _08022F88\n\
+ b _0802310C\n\
+_08022F88:\n\
+ movs r0, 0x1\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _08022F92\n\
+ b _0802310C\n\
+_08022F92:\n\
+ ldr r7, _08022FF4 @ =gHitMarker\n\
+ ldr r0, [r7]\n\
+ lsrs r5, r0, 28\n\
+ ldr r4, _08022FF8 @ =gBitTable\n\
+ ldr r0, [r4, 0x8]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _0802303A\n\
+ ldr r0, [r4]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _0802303A\n\
+ ldr r6, _08022FFC @ =gActiveBank\n\
+ movs r0, 0x2\n\
+ strb r0, [r6]\n\
+ ldr r0, _08023000 @ =gBattleBufferB\n\
+ ldrb r1, [r0, 0x1]\n\
+ movs r0, 0x2\n\
+ movs r2, 0x6\n\
+ bl sub_8018018\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08023008\n\
+ ldr r2, _08023004 @ =gAbsentBankFlags\n\
+ ldrb r0, [r6]\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldrb r0, [r6]\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r7]\n\
+ bics r0, r1\n\
+ str r0, [r7]\n\
+ movs r0, 0\n\
+ bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ ldrb r0, [r6]\n\
+ bl MarkBufferBankForExecution\n\
+ b _0802303A\n\
+ .align 2, 0\n\
+_08022FF0: .4byte gBattleTypeFlags\n\
+_08022FF4: .4byte gHitMarker\n\
+_08022FF8: .4byte gBitTable\n\
+_08022FFC: .4byte gActiveBank\n\
+_08023000: .4byte gBattleBufferB\n\
+_08023004: .4byte gAbsentBankFlags\n\
+_08023008:\n\
+ ldr r4, _08023098 @ =gSpecialStatuses\n\
+ ldrb r0, [r6]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r4\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _0802303A\n\
+ ldr r0, _0802309C @ =0x02000000\n\
+ ldr r1, _080230A0 @ =0x00016068\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_8022A3C\n\
+ ldrb r1, [r6]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x40\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+_0802303A:\n\
+ ldr r4, _080230A4 @ =gBitTable\n\
+ ldr r0, [r4, 0xC]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _080230EE\n\
+ ldr r0, [r4, 0x4]\n\
+ ands r5, r0\n\
+ cmp r5, 0\n\
+ beq _080230EE\n\
+ ldr r5, _080230A8 @ =gActiveBank\n\
+ movs r0, 0x3\n\
+ strb r0, [r5]\n\
+ ldr r0, _080230AC @ =gBattleBufferB\n\
+ ldr r2, _080230B0 @ =0x00000201\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x3\n\
+ movs r2, 0x6\n\
+ bl sub_8018018\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080230BC\n\
+ ldr r2, _080230B4 @ =gAbsentBankFlags\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r2, _080230B8 @ =gHitMarker\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r2]\n\
+ bics r0, r1\n\
+ str r0, [r2]\n\
+ movs r0, 0\n\
+ bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ ldrb r0, [r5]\n\
+ bl MarkBufferBankForExecution\n\
+ b _080230EE\n\
+ .align 2, 0\n\
+_08023098: .4byte gSpecialStatuses\n\
+_0802309C: .4byte 0x02000000\n\
+_080230A0: .4byte 0x00016068\n\
+_080230A4: .4byte gBitTable\n\
+_080230A8: .4byte gActiveBank\n\
+_080230AC: .4byte gBattleBufferB\n\
+_080230B0: .4byte 0x00000201\n\
+_080230B4: .4byte gAbsentBankFlags\n\
+_080230B8: .4byte gHitMarker\n\
+_080230BC:\n\
+ ldr r4, _080230FC @ =gSpecialStatuses\n\
+ ldrb r0, [r5]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r4\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ blt _080230EE\n\
+ ldr r0, _08023100 @ =0x02000000\n\
+ ldr r1, _08023104 @ =0x00016069\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_8022A3C\n\
+ ldrb r1, [r5]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x40\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+_080230EE:\n\
+ ldr r1, _08023108 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x6\n\
+ str r0, [r1]\n\
+ mov r12, r1\n\
+ b _08023110\n\
+ .align 2, 0\n\
+_080230FC: .4byte gSpecialStatuses\n\
+_08023100: .4byte 0x02000000\n\
+_08023104: .4byte 0x00016069\n\
+_08023108: .4byte gBattlescriptCurrInstr\n\
+_0802310C:\n\
+ adds r0, r1, 0x6\n\
+ str r0, [r6]\n\
+_08023110:\n\
+ ldr r0, _08023160 @ =gHitMarker\n\
+ ldr r0, [r0]\n\
+ lsrs r5, r0, 28\n\
+ ldr r1, _08023164 @ =gBank1\n\
+ movs r0, 0\n\
+ strb r0, [r1]\n\
+ ldr r4, _08023168 @ =gBitTable\n\
+ ldr r2, [r4]\n\
+ ands r2, r5\n\
+ ldr r6, _0802316C @ =gNoOfAllBanks\n\
+ cmp r2, 0\n\
+ bne _0802314C\n\
+ adds r7, r6, 0\n\
+ ldrb r0, [r6]\n\
+ cmp r2, r0\n\
+ bcs _0802314C\n\
+ adds r3, r1, 0\n\
+_08023132:\n\
+ ldrb r0, [r3]\n\
+ adds r0, 0x1\n\
+ strb r0, [r3]\n\
+ ldrb r2, [r3]\n\
+ lsls r0, r2, 2\n\
+ adds r0, r4\n\
+ ldr r0, [r0]\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ bne _0802314C\n\
+ ldrb r0, [r7]\n\
+ cmp r2, r0\n\
+ bcc _08023132\n\
+_0802314C:\n\
+ ldrb r0, [r1]\n\
+ ldrb r6, [r6]\n\
+ cmp r0, r6\n\
+ beq _08023156\n\
+ b _08023302\n\
+_08023156:\n\
+ mov r1, r8\n\
+ mov r2, r12\n\
+ str r1, [r2]\n\
+ b _08023302\n\
+ .align 2, 0\n\
+_08023160: .4byte gHitMarker\n\
+_08023164: .4byte gBank1\n\
+_08023168: .4byte gBitTable\n\
+_0802316C: .4byte gNoOfAllBanks\n\
+_08023170:\n\
+ movs r0, 0x80\n\
+ ands r0, r2\n\
+ movs r5, 0x1\n\
+ cmp r0, 0\n\
+ beq _0802317C\n\
+ movs r5, 0\n\
+_0802317C:\n\
+ movs r0, 0x7F\n\
+ ands r0, r2\n\
+ bl GetBattleBank\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ ldr r1, _080231A4 @ =gSpecialStatuses\n\
+ lsls r0, r7, 2\n\
+ adds r0, r7\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 25\n\
+ cmp r0, 0\n\
+ bge _080231A8\n\
+ ldr r0, [r6]\n\
+ adds r0, 0x6\n\
+ str r0, [r6]\n\
+ b _08023302\n\
+ .align 2, 0\n\
+_080231A4: .4byte gSpecialStatuses\n\
+_080231A8:\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x6\n\
+ movs r2, 0x6\n\
+ bl sub_8018018\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080231F8\n\
+ ldr r2, _080231E8 @ =gActiveBank\n\
+ strb r7, [r2]\n\
+ ldr r3, _080231EC @ =gAbsentBankFlags\n\
+ ldr r4, _080231F0 @ =gBitTable\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r3]\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ ldr r3, _080231F4 @ =gHitMarker\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldr r1, [r0]\n\
+ lsls r1, 28\n\
+ ldr r0, [r3]\n\
+ bics r0, r1\n\
+ str r0, [r3]\n\
+ mov r0, r8\n\
+ str r0, [r6]\n\
+ b _08023302\n\
+ .align 2, 0\n\
+_080231E8: .4byte gActiveBank\n\
+_080231EC: .4byte gAbsentBankFlags\n\
+_080231F0: .4byte gBitTable\n\
+_080231F4: .4byte gHitMarker\n\
+_080231F8:\n\
+ ldr r4, _080232A0 @ =gActiveBank\n\
+ strb r7, [r4]\n\
+ ldr r3, _080232A4 @ =0x02000000\n\
+ ldrb r0, [r4]\n\
+ ldr r2, _080232A8 @ =0x00016064\n\
+ adds r1, r0, r2\n\
+ adds r1, r3\n\
+ ldr r2, _080232AC @ =gBattlePartyID\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ ldrh r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x2\n\
+ eors r0, r1\n\
+ ldr r1, _080232B0 @ =0x00016068\n\
+ adds r0, r1\n\
+ adds r0, r3\n\
+ ldrb r2, [r0]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ ldr r1, _080232B4 @ =0x0001606c\n\
+ adds r3, r1\n\
+ adds r0, r3\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ adds r1, r5, 0\n\
+ movs r3, 0\n\
+ bl EmitChoosePokemon\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, [r6]\n\
+ adds r0, 0x6\n\
+ str r0, [r6]\n\
+ ldrb r0, [r4]\n\
+ bl GetBankIdentity\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0802325A\n\
+ ldr r1, _080232B8 @ =gBattleResults\n\
+ ldrb r0, [r1, 0x2]\n\
+ cmp r0, 0xFE\n\
+ bhi _0802325A\n\
+ adds r0, 0x1\n\
+ strb r0, [r1, 0x2]\n\
+_0802325A:\n\
+ ldr r0, _080232BC @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080232C4\n\
+ ldr r1, _080232A0 @ =gActiveBank\n\
+ movs r0, 0\n\
+ strb r0, [r1]\n\
+ ldr r0, _080232C0 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08023302\n\
+ adds r4, r1, 0\n\
+_08023276:\n\
+ ldrb r0, [r4]\n\
+ cmp r0, r7\n\
+ beq _0802328A\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+_0802328A:\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ ldr r1, _080232C0 @ =gNoOfAllBanks\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bcc _08023276\n\
+ b _08023302\n\
+ .align 2, 0\n\
+_080232A0: .4byte gActiveBank\n\
+_080232A4: .4byte 0x02000000\n\
+_080232A8: .4byte 0x00016064\n\
+_080232AC: .4byte gBattlePartyID\n\
+_080232B0: .4byte 0x00016068\n\
+_080232B4: .4byte 0x0001606c\n\
+_080232B8: .4byte gBattleResults\n\
+_080232BC: .4byte gBattleTypeFlags\n\
+_080232C0: .4byte gNoOfAllBanks\n\
+_080232C4:\n\
+ adds r0, r7, 0\n\
+ bl GetBankIdentity\n\
+ movs r1, 0x1\n\
+ eors r0, r1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankByPlayerAI\n\
+ ldr r4, _08023310 @ =gActiveBank\n\
+ strb r0, [r4]\n\
+ ldr r0, _08023314 @ =gAbsentBankFlags\n\
+ ldrb r1, [r0]\n\
+ ldr r2, _08023318 @ =gBitTable\n\
+ ldrb r3, [r4]\n\
+ lsls r0, r3, 2\n\
+ adds r0, r2\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _080232F4\n\
+ movs r0, 0x2\n\
+ eors r3, r0\n\
+ strb r3, [r4]\n\
+_080232F4:\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ bl EmitLinkStandbyMsg\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+_08023302:\n\
+ add sp, 0x4\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08023310: .4byte gActiveBank\n\
+_08023314: .4byte gAbsentBankFlags\n\
+_08023318: .4byte gBitTable\n\
+ .syntax divided");
+}
+
+static void atk51_switch_handle_order(void)
+{
+ int i;
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ switch (BSScriptRead8(gBattlescriptCurrInstr + 2))
+ {
+ case 0:
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleBufferB[i][0] == 0x22)
+ ewram[i + 0x16068] = gBattleBufferB[i][1];
+ }
+ break;
+ case 1:
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ sub_8012258(gActiveBank);
+ break;
+ case 2:
+ gBattleCommunication[0] = gBattleBufferB[gActiveBank][1];
+ ewram[gActiveBank + 0x16068] = gBattleBufferB[gActiveBank][1];
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+
+ ewram[(gActiveBank) * 3 + (0x1606C + 0)] &= 0xF;
+ ewram[(gActiveBank) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0);
+ ewram[(gActiveBank) * 3 + (0x1606C + 1)] = gBattleBufferB[gActiveBank][3];
+
+ ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] &= (0xF0);
+ ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0) >> 4;
+ ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 2)] = gBattleBufferB[gActiveBank][3];
+ }
+ else
+ sub_8012258(gActiveBank);
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 6;
+ gBattleTextBuff1[2] = gBattleMons[gBankAttacker].species;
+ gBattleTextBuff1[3] = gBattleMons[gBankAttacker].species >> 8;
+ gBattleTextBuff1[4] = 0xFF;
+
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 7;
+ gBattleTextBuff2[2] = gActiveBank;
+ gBattleTextBuff2[3] = gBattleBufferB[gActiveBank][1];
+ gBattleTextBuff2[4] = 0xFF;
+ break;
+ }
+ gBattlescriptCurrInstr += 3;
+}
+
+static void atk52_switch_in_effects(void)
+{
+ int i;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ sub_80157C4(gActiveBank);
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank));
+ gSpecialStatuses[gActiveBank].flag40 = 0;
+
+ if (!(gSideAffecting[GetBankSide(gActiveBank)] & SIDE_SPIKES_DMG_DONE) && (gSideAffecting[GetBankSide(gActiveBank)] & SIDE_SPIKES)
+ && gBattleMons[gActiveBank].type1 != TYPE_FLYING && gBattleMons[gActiveBank].type2 != TYPE_FLYING && gBattleMons[gActiveBank].ability != ABILITY_LEVITATE)
+ {
+ u8 spikesDmg;
+
+ gSideAffecting[GetBankSide(gActiveBank)] |= SIDE_SPIKES_DMG_DONE;
+ spikesDmg = (5 - gSideTimer[GetBankSide(gActiveBank)].spikesAmount) * 2;
+ gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / (spikesDmg);
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ BATTLE_STRUCT->scriptingActive = gActiveBank;
+ b_movescr_stack_push_cursor();
+
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0)
+ gBattlescriptCurrInstr = gUnknown_081D919F;
+ else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1)
+ gBattlescriptCurrInstr = gUnknown_081D9171;
+ else
+ gBattlescriptCurrInstr = gUnknown_081D91CD;
+ }
+ else
+ {
+ if (gBattleMons[gActiveBank].ability == ABILITY_TRUANT)
+ {
+ gDisableStructs[gActiveBank].truantCounter = 1;
+ }
+
+ if (AbilityBattleEffects(0, gActiveBank, 0, 0, 0) == 0 && ItemBattleEffects(0, gActiveBank, 0) == 0)
+ {
+ gSideAffecting[GetBankSide(gActiveBank)] &= ~(SIDE_SPIKES_DMG_DONE);
+
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gTurnOrder[i] == gActiveBank)
+ gUnknown_02024A76[i] = 0xC;
+ }
+
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ *(HP_ON_SWITCHOUT + GetBankSide(i)) = gBattleMons[i].hp;
+ }
+
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5)
+ {
+ u32 hitmark = gHitMarker >> 0x1C;
+ gBank1++;
+ while (1)
+ {
+ if (hitmark & gBitTable[gBank1] && !(gAbsentBankFlags & gBitTable[gBank1]))
+ break;
+ if (gBank1 >= gNoOfAllBanks)
+ break;
+ gBank1++;
+ }
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+ }
+}
+
+static void atk53_trainer_slide(void)
+{
+ if (!BSScriptRead8(gBattlescriptCurrInstr + 1))
+ gActiveBank = GetBankByPlayerAI(0);
+ else
+ gActiveBank = GetBankByPlayerAI(1);
+
+ EmitTrainerSlide(0);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk54_effectiveness_sound(void)
+{
+ gActiveBank = gBankAttacker;
+ EmitEffectivenessSound(0, BSScriptRead16(gBattlescriptCurrInstr + 1));
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 3;
+}
+
+static void atk55_play_sound(void)
+{
+ gActiveBank = gBankAttacker;
+ EmitPlaySound(0, BSScriptRead16(gBattlescriptCurrInstr + 1));
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 3;
+}
+
+static void atk56_fainting_cry(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ EmitFaintingCry(0);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk57(void)
+{
+ gActiveBank = GetBankByPlayerAI(0);
+ dp01_build_cmdbuf_x37_a(0, gBattleOutcome);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 1;
+}
+
+static void atk58_return_to_ball(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ EmitReturnPokeToBall(0, 1);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk59_learnmove_inbattle(void)
+{
+ u8* loc1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* loc2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
+
+ u16 ret;
+ for (ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], BSScriptRead8(gBattlescriptCurrInstr + 9)); ret == 0xFFFE;
+ ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0)) {}
+ if (ret == 0)
+ gBattlescriptCurrInstr = loc2;
+ else if (ret == 0xFFFF)
+ gBattlescriptCurrInstr += 10;
+ else
+ {
+ gActiveBank = GetBankByPlayerAI(0);
+ if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
+ GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if
+ {
+ gActiveBank = GetBankByPlayerAI(2);
+ if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
+ GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret);
+ }
+ gBattlescriptCurrInstr = loc1;
+ }
+}
+
+void sub_8023A80(void)
+{
+ sub_802BBD4(0x18, 8, 0x1D, 0xD, 0);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D7A, 0x100, 0x19, 0x9);
+ sub_8002F44(&gUnknown_03004210);
+ sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20);
+}
+
+void sub_8023AD8(void)
+{
+ sub_802BBD4(0x18, 8, 0x1D, 0xD, 1);
+ DestroyMenuCursor();
+}
+
+#ifdef NONMATCHING
+static void atk5A(void)
+{
+ gActiveBank = 0;
+ switch (BATTLE_STRUCT->atk5A_StateTracker)
+ {
+ case 0:
+ sub_8023A80();
+ BATTLE_STRUCT->atk5A_StateTracker++;
+ gBattleCommunication[1] = 0;
+ sub_802BC6C();
+ break;
+ case 1:
+ if (gMain.newKeys & 0x40 && gBattleCommunication[1] != 0)
+ {
+ PlaySE(5);
+ nullsub_6();
+ gBattleCommunication[1] = 0;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & 0x80 && gBattleCommunication[1] == 0)
+ {
+ PlaySE(5);
+ nullsub_6();
+ gBattleCommunication[1] = 1;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & 0x1)
+ {
+ PlaySE(5);
+ if (gBattleCommunication[1] == 0)
+ {
+ sub_8023AD8();
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ BATTLE_STRUCT->atk5A_StateTracker++;
+ }
+ else
+ goto TRACKER_4;
+ }
+ else if (gMain.newKeys & 0x2)
+ {
+ PlaySE(5);
+ TRACKER_4:
+ BATTLE_STRUCT->atk5A_StateTracker = 4;
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, word_2024E82);
+ BATTLE_STRUCT->atk5A_StateTracker++;
+ }
+ break;
+ case 3:
+ if (!gPaletteFade.active && gMain.callback1 == sub_800F808)
+ {
+ u8 move_pos = sub_809FA30();
+ if (move_pos == 4)
+ {
+ BATTLE_STRUCT->atk5A_StateTracker = 4;
+ }
+ else
+ {
+ u16 move = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MOVE1 + move_pos);
+ if (IsHMMove2(move))
+ {
+ PrepareStringBattle(0x13F, gActiveBank);
+ BATTLE_STRUCT->atk5A_StateTracker = 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 2;
+ gBattleTextBuff2[2] = move;
+ gBattleTextBuff2[3] = move >> 8;
+ gBattleTextBuff2[4] = 0xFF;
+ RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos);
+ SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], word_2024E82, move_pos);
+ if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[0].unk18_b & gBitTable[move_pos]))
+ {
+ RemoveBattleMonPPBonus(&gBattleMons[0], move_pos);
+ SetBattleMonMoveSlot(&gBattleMons[0], word_2024E82, move_pos);
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[2].unk18_b & gBitTable[move_pos]))
+ {
+ RemoveBattleMonPPBonus(&gBattleMons[2], move_pos);
+ SetBattleMonMoveSlot(&gBattleMons[2], word_2024E82, move_pos);
+ }
+ }
+ }
+ }
+ break;
+ case 4:
+ sub_8023AD8();
+ gBattlescriptCurrInstr += 5;
+ break;
+ case 5:
+ if (gBattleExecBuffer == 0)
+ {
+ BATTLE_STRUCT->atk5A_StateTracker = 2;
+ }
+ break;
+ }
+}
+
+#else
+__attribute__((naked))
+static void atk5A(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ sub sp, 0x4\n\
+ ldr r1, _08023B24 @ =gActiveBank\n\
+ movs r0, 0\n\
+ strb r0, [r1]\n\
+ ldr r1, _08023B28 @ =0x02000000\n\
+ ldr r2, _08023B2C @ =0x0001601a\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ adds r5, r1, 0\n\
+ cmp r0, 0x5\n\
+ bls _08023B18\n\
+ b _08023E5C\n\
+_08023B18:\n\
+ lsls r0, 2\n\
+ ldr r1, _08023B30 @ =_08023B34\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_08023B24: .4byte gActiveBank\n\
+_08023B28: .4byte 0x02000000\n\
+_08023B2C: .4byte 0x0001601a\n\
+_08023B30: .4byte _08023B34\n\
+ .align 2, 0\n\
+_08023B34:\n\
+ .4byte _08023B4C\n\
+ .4byte _08023B74\n\
+ .4byte _08023C30\n\
+ .4byte _08023C84\n\
+ .4byte _08023E38\n\
+ .4byte _08023E4C\n\
+_08023B4C:\n\
+ bl sub_8023A80\n\
+ ldr r1, _08023B68 @ =0x02000000\n\
+ ldr r0, _08023B6C @ =0x0001601a\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ movs r2, 0\n\
+ strb r0, [r1]\n\
+ ldr r0, _08023B70 @ =gBattleCommunication\n\
+ strb r2, [r0, 0x1]\n\
+ bl sub_802BC6C\n\
+ b _08023E5C\n\
+ .align 2, 0\n\
+_08023B68: .4byte 0x02000000\n\
+_08023B6C: .4byte 0x0001601a\n\
+_08023B70: .4byte gBattleCommunication\n\
+_08023B74:\n\
+ ldr r0, _08023BFC @ =gMain\n\
+ ldrh r1, [r0, 0x2E]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08023B9A\n\
+ ldr r4, _08023C00 @ =gBattleCommunication\n\
+ ldrb r0, [r4, 0x1]\n\
+ cmp r0, 0\n\
+ beq _08023B9A\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ bl nullsub_6\n\
+ movs r0, 0\n\
+ strb r0, [r4, 0x1]\n\
+ bl sub_802BC6C\n\
+_08023B9A:\n\
+ ldr r0, _08023BFC @ =gMain\n\
+ ldrh r1, [r0, 0x2E]\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08023BC0\n\
+ ldr r4, _08023C00 @ =gBattleCommunication\n\
+ ldrb r0, [r4, 0x1]\n\
+ cmp r0, 0\n\
+ bne _08023BC0\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ bl nullsub_6\n\
+ movs r0, 0x1\n\
+ strb r0, [r4, 0x1]\n\
+ bl sub_802BC6C\n\
+_08023BC0:\n\
+ ldr r0, _08023BFC @ =gMain\n\
+ ldrh r1, [r0, 0x2E]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08023C0C\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ ldr r0, _08023C00 @ =gBattleCommunication\n\
+ ldrb r4, [r0, 0x1]\n\
+ cmp r4, 0\n\
+ bne _08023C1C\n\
+ bl sub_8023AD8\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ str r4, [sp]\n\
+ movs r1, 0\n\
+ movs r2, 0\n\
+ movs r3, 0x10\n\
+ bl BeginNormalPaletteFade\n\
+ ldr r1, _08023C04 @ =0x02000000\n\
+ ldr r2, _08023C08 @ =0x0001601a\n\
+ adds r1, r2\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ b _08023E5A\n\
+ .align 2, 0\n\
+_08023BFC: .4byte gMain\n\
+_08023C00: .4byte gBattleCommunication\n\
+_08023C04: .4byte 0x02000000\n\
+_08023C08: .4byte 0x0001601a\n\
+_08023C0C:\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08023C16\n\
+ b _08023E5C\n\
+_08023C16:\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+_08023C1C:\n\
+ ldr r0, _08023C28 @ =0x02000000\n\
+ ldr r1, _08023C2C @ =0x0001601a\n\
+ adds r0, r1\n\
+ movs r1, 0x4\n\
+ strb r1, [r0]\n\
+ b _08023E5C\n\
+ .align 2, 0\n\
+_08023C28: .4byte 0x02000000\n\
+_08023C2C: .4byte 0x0001601a\n\
+_08023C30:\n\
+ ldr r0, _08023C68 @ =gPaletteFade\n\
+ ldrb r1, [r0, 0x7]\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08023C3E\n\
+ b _08023E5C\n\
+_08023C3E:\n\
+ ldr r0, _08023C6C @ =gPlayerParty\n\
+ ldr r2, _08023C70 @ =0x00016018\n\
+ adds r1, r5, r2\n\
+ ldrb r1, [r1]\n\
+ ldr r2, _08023C74 @ =gPlayerPartyCount\n\
+ ldrb r2, [r2]\n\
+ subs r2, 0x1\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ ldr r3, _08023C78 @ =ReshowBattleScreenAfterMenu\n\
+ ldr r4, _08023C7C @ =word_2024E82\n\
+ ldrh r4, [r4]\n\
+ str r4, [sp]\n\
+ bl sub_809D9F0\n\
+ ldr r0, _08023C80 @ =0x0001601a\n\
+ adds r1, r5, r0\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ b _08023E5A\n\
+ .align 2, 0\n\
+_08023C68: .4byte gPaletteFade\n\
+_08023C6C: .4byte gPlayerParty\n\
+_08023C70: .4byte 0x00016018\n\
+_08023C74: .4byte gPlayerPartyCount\n\
+_08023C78: .4byte ReshowBattleScreenAfterMenu\n\
+_08023C7C: .4byte word_2024E82\n\
+_08023C80: .4byte 0x0001601a\n\
+_08023C84:\n\
+ ldr r0, _08023CB4 @ =gPaletteFade\n\
+ ldrb r1, [r0, 0x7]\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08023C92\n\
+ b _08023E5C\n\
+_08023C92:\n\
+ ldr r0, _08023CB8 @ =gMain\n\
+ ldr r1, [r0, 0x4]\n\
+ ldr r0, _08023CBC @ =sub_800F808\n\
+ cmp r1, r0\n\
+ beq _08023C9E\n\
+ b _08023E5C\n\
+_08023C9E:\n\
+ bl sub_809FA30\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0x4\n\
+ bne _08023CC8\n\
+ ldr r0, _08023CC0 @ =0x02000000\n\
+ ldr r1, _08023CC4 @ =0x0001601a\n\
+ adds r0, r1\n\
+ strb r5, [r0]\n\
+ b _08023E5C\n\
+ .align 2, 0\n\
+_08023CB4: .4byte gPaletteFade\n\
+_08023CB8: .4byte gMain\n\
+_08023CBC: .4byte sub_800F808\n\
+_08023CC0: .4byte 0x02000000\n\
+_08023CC4: .4byte 0x0001601a\n\
+_08023CC8:\n\
+ ldr r2, _08023D08 @ =0x02000000\n\
+ mov r9, r2\n\
+ ldr r6, _08023D0C @ =0x00016018\n\
+ add r6, r9\n\
+ ldrb r0, [r6]\n\
+ movs r1, 0x64\n\
+ mov r8, r1\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ ldr r7, _08023D10 @ =gPlayerParty\n\
+ adds r0, r7\n\
+ adds r1, r5, 0\n\
+ adds r1, 0xD\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ adds r0, r4, 0\n\
+ bl IsHMMove2\n\
+ cmp r0, 0\n\
+ beq _08023D20\n\
+ ldr r0, _08023D14 @ =0x0000013f\n\
+ ldr r1, _08023D18 @ =gActiveBank\n\
+ ldrb r1, [r1]\n\
+ bl PrepareStringBattle\n\
+ ldr r1, _08023D1C @ =0x0001601a\n\
+ add r1, r9\n\
+ movs r0, 0x5\n\
+ b _08023E5A\n\
+ .align 2, 0\n\
+_08023D08: .4byte 0x02000000\n\
+_08023D0C: .4byte 0x00016018\n\
+_08023D10: .4byte gPlayerParty\n\
+_08023D14: .4byte 0x0000013f\n\
+_08023D18: .4byte gActiveBank\n\
+_08023D1C: .4byte 0x0001601a\n\
+_08023D20:\n\
+ ldr r3, _08023E10 @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+ ldr r1, _08023E14 @ =gBattleTextBuff2\n\
+ movs r0, 0xFD\n\
+ strb r0, [r1]\n\
+ movs r0, 0x2\n\
+ strb r0, [r1, 0x1]\n\
+ strb r4, [r1, 0x2]\n\
+ lsrs r0, r4, 8\n\
+ strb r0, [r1, 0x3]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x4]\n\
+ ldrb r0, [r6]\n\
+ mov r1, r8\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r0, r7\n\
+ adds r1, r5, 0\n\
+ bl RemoveMonPPBonus\n\
+ ldrb r0, [r6]\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, r7\n\
+ ldr r7, _08023E18 @ =word_2024E82\n\
+ ldrh r1, [r7]\n\
+ adds r2, r5, 0\n\
+ bl SetMonMoveSlot\n\
+ ldr r0, _08023E1C @ =gBattlePartyID\n\
+ ldrh r0, [r0]\n\
+ ldrb r6, [r6]\n\
+ cmp r0, r6\n\
+ bne _08023DB0\n\
+ ldr r4, _08023E20 @ =gBattleMons\n\
+ ldr r0, [r4, 0x50]\n\
+ movs r1, 0x80\n\
+ lsls r1, 14\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08023DB0\n\
+ ldr r0, _08023E24 @ =gDisableStructs\n\
+ ldrb r1, [r0, 0x18]\n\
+ lsrs r1, 4\n\
+ ldr r2, _08023E28 @ =gBitTable\n\
+ lsls r0, r5, 2\n\
+ adds r0, r2\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _08023DB0\n\
+ adds r0, r4, 0\n\
+ adds r1, r5, 0\n\
+ bl RemoveBattleMonPPBonus\n\
+ ldrh r1, [r7]\n\
+ adds r0, r4, 0\n\
+ adds r2, r5, 0\n\
+ bl SetBattleMonMoveSlot\n\
+_08023DB0:\n\
+ ldr r0, _08023E2C @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08023E5C\n\
+ ldr r0, _08023E1C @ =gBattlePartyID\n\
+ ldr r1, _08023E30 @ =0x02000000\n\
+ ldr r2, _08023E34 @ =0x00016018\n\
+ adds r1, r2\n\
+ ldrh r0, [r0, 0x4]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bne _08023E5C\n\
+ ldr r4, _08023E20 @ =gBattleMons\n\
+ movs r1, 0x80\n\
+ lsls r1, 1\n\
+ adds r0, r4, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 14\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08023E5C\n\
+ ldr r0, _08023E24 @ =gDisableStructs\n\
+ adds r0, 0x50\n\
+ ldrb r1, [r0]\n\
+ lsrs r1, 4\n\
+ ldr r2, _08023E28 @ =gBitTable\n\
+ lsls r0, r5, 2\n\
+ adds r0, r2\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _08023E5C\n\
+ adds r4, 0xB0\n\
+ adds r0, r4, 0\n\
+ adds r1, r5, 0\n\
+ bl RemoveBattleMonPPBonus\n\
+ ldr r0, _08023E18 @ =word_2024E82\n\
+ ldrh r1, [r0]\n\
+ adds r0, r4, 0\n\
+ adds r2, r5, 0\n\
+ bl SetBattleMonMoveSlot\n\
+ b _08023E5C\n\
+ .align 2, 0\n\
+_08023E10: .4byte gBattlescriptCurrInstr\n\
+_08023E14: .4byte gBattleTextBuff2\n\
+_08023E18: .4byte word_2024E82\n\
+_08023E1C: .4byte gBattlePartyID\n\
+_08023E20: .4byte gBattleMons\n\
+_08023E24: .4byte gDisableStructs\n\
+_08023E28: .4byte gBitTable\n\
+_08023E2C: .4byte gBattleTypeFlags\n\
+_08023E30: .4byte 0x02000000\n\
+_08023E34: .4byte 0x00016018\n\
+_08023E38:\n\
+ bl sub_8023AD8\n\
+ ldr r1, _08023E48 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x5\n\
+ str r0, [r1]\n\
+ b _08023E5C\n\
+ .align 2, 0\n\
+_08023E48: .4byte gBattlescriptCurrInstr\n\
+_08023E4C:\n\
+ ldr r0, _08023E6C @ =gBattleExecBuffer\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08023E5C\n\
+ ldr r2, _08023E70 @ =0x0001601a\n\
+ adds r1, r5, r2\n\
+ movs r0, 0x2\n\
+_08023E5A:\n\
+ strb r0, [r1]\n\
+_08023E5C:\n\
+ add sp, 0x4\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08023E6C: .4byte gBattleExecBuffer\n\
+_08023E70: .4byte 0x0001601a\n\
+ .syntax divided");
+}
+#endif //NONMATCHING
+
+static void atk5B_80256E0(void)
+{
+ switch (BATTLE_STRUCT->atk5A_StateTracker)
+ {
+ case 0:
+ sub_8023A80();
+ BATTLE_STRUCT->atk5A_StateTracker++;
+ gBattleCommunication[1] = 0;
+ sub_802BC6C();
+ break;
+ case 1:
+ if (gMain.newKeys & 0x40 && gBattleCommunication[1] != 0)
+ {
+ PlaySE(5);
+ nullsub_6();
+ gBattleCommunication[1] = 0;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & 0x80 && gBattleCommunication[1] == 0)
+ {
+ PlaySE(5);
+ nullsub_6();
+ gBattleCommunication[1] = 1;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & 1)
+ {
+ PlaySE(5);
+ if (gBattleCommunication[1] != 0)
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+ sub_8023AD8();
+ }
+ else if (gMain.newKeys & 0x2)
+ {
+ PlaySE(5);
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ sub_8023AD8();
+ }
+ }
+}
+
+static void atk5C_hitanimation(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ if (gBattleMoveFlags & MOVE_NO_EFFECT)
+ gBattlescriptCurrInstr += 2;
+ else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) || gDisableStructs[gActiveBank].substituteHP == 0)
+ {
+ EmitHitAnimation(0);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+ }
+ else
+ gBattlescriptCurrInstr += 2;
+}
+
+#define MONEY_UNKNOWN ((*(u8*)(0x02017000 + 0x94)))
+
+#ifdef NONMATCHING
+static void atk5D_getmoneyreward(void)
+{
+ int i = 0;
+ u8 r5 = 0;
+ u32 money_to_give;
+ if (gTrainerBattleOpponent == 0x400)
+ {
+ money_to_give = 2 * BATTLE_STRUCT->moneyMultiplier * MONEY_UNKNOWN;
+ }
+ else
+ {
+ switch(gTrainers[gTrainerBattleOpponent].partyFlags)
+ {
+ case 0:
+ {
+ const struct PokeTrainerData1 *data = &gTrainers[gTrainerBattleOpponent].party->noItemNoMoves;
+ r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl;
+ }
+ break;
+ case 2:
+ {
+ const struct PokeTrainerData2 *data = &gTrainers[gTrainerBattleOpponent].party->itemNoMoves;
+ r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl;
+ }
+ break;
+ case 1:
+ case 3:
+ {
+ const struct PokeTrainerData3 *data = &gTrainers[gTrainerBattleOpponent].party->itemMoves;
+ r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl;
+ }
+ break;
+ }
+ for (; gTrainerMoney[i * 4] != 0xFF && gTrainerMoney[i * 4 + 1] != gTrainers[gTrainerBattleOpponent].trainerClass ; i++) {}
+
+ money_to_give = (r5 << 2) * BATTLE_STRUCT->moneyMultiplier;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ money_to_give = 2 * gTrainerMoney[i * 4 + 1] * money_to_give;
+ else
+ money_to_give = 1 * gTrainerMoney[i * 4 + 1] * money_to_give;
+ }
+
+ sub_80B79B8(&gSaveBlock1.money, money_to_give);
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 1;
+ gBattleTextBuff1[2] = 4;
+ gBattleTextBuff1[3] = 5;
+ gBattleTextBuff1[4] = BYTE0(money_to_give);
+ gBattleTextBuff1[5] = BYTE1(money_to_give);
+ gBattleTextBuff1[6] = BYTE2(money_to_give);
+ gBattleTextBuff1[7] = BYTE3(money_to_give);
+ gBattleTextBuff1[8] = 0xFF;
+
+ gBattlescriptCurrInstr += 1;
+}
+#else
+__attribute__((naked))
+static void atk5D_getmoneyreward(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ movs r6, 0\n\
+ movs r5, 0\n\
+ ldr r0, _08024048 @ =gTrainerBattleOpponent\n\
+ ldrh r2, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 3\n\
+ cmp r2, r1\n\
+ bne _08024058\n\
+ ldr r0, _0802404C @ =0x02017000\n\
+ adds r1, r0, 0\n\
+ adds r1, 0x94\n\
+ ldrb r2, [r1]\n\
+ ldr r1, _08024050 @ =0xfffff056\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r4, r2, 0\n\
+ muls r4, r0\n\
+ ldr r0, _08024054 @ =gSaveBlock1 + 0x490\n\
+ mov r8, r0\n\
+ b _08024140\n\
+ .align 2, 0\n\
+_08024048: .4byte gTrainerBattleOpponent\n\
+_0802404C: .4byte 0x02017000\n\
+_08024050: .4byte 0xfffff056\n\
+_08024054: .4byte gSaveBlock1 + 0x490\n\
+_08024058:\n\
+ ldr r2, _08024074 @ =gTrainers\n\
+ ldrh r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r3, r0, 3\n\
+ adds r4, r3, r2\n\
+ ldrb r1, [r4]\n\
+ cmp r1, 0x1\n\
+ beq _080240AE\n\
+ cmp r1, 0x1\n\
+ bgt _08024078\n\
+ cmp r1, 0\n\
+ beq _08024082\n\
+ b _080240C4\n\
+ .align 2, 0\n\
+_08024074: .4byte gTrainers\n\
+_08024078:\n\
+ cmp r1, 0x2\n\
+ beq _08024098\n\
+ cmp r1, 0x3\n\
+ beq _080240AE\n\
+ b _080240C4\n\
+_08024082:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x24\n\
+ adds r0, r3, r0\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ subs r0, 0x8\n\
+ b _080240C2\n\
+_08024098:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x24\n\
+ adds r0, r3, r0\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ subs r0, 0x8\n\
+ b _080240C2\n\
+_080240AE:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x24\n\
+ adds r0, r3, r0\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ subs r0, 0x10\n\
+_080240C2:\n\
+ ldrb r5, [r0, 0x2]\n\
+_080240C4:\n\
+ ldr r0, _08024120 @ =gTrainerMoney\n\
+ lsls r1, r6, 2\n\
+ adds r3, r1, r0\n\
+ ldrb r1, [r3]\n\
+ mov r12, r0\n\
+ lsls r4, r5, 2\n\
+ ldr r5, _08024124 @ =0x02000000\n\
+ ldr r7, _08024128 @ =gBattleTypeFlags\n\
+ ldr r0, _0802412C @ =gSaveBlock1 + 0x490\n\
+ mov r8, r0\n\
+ cmp r1, 0xFF\n\
+ beq _080240FE\n\
+ ldr r2, _08024130 @ =gTrainers\n\
+ ldr r0, _08024134 @ =gTrainerBattleOpponent\n\
+ ldrh r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r2\n\
+ ldrb r2, [r0, 0x1]\n\
+ adds r1, r3, 0\n\
+_080240EE:\n\
+ ldrb r0, [r1]\n\
+ cmp r0, r2\n\
+ beq _080240FE\n\
+ adds r1, 0x4\n\
+ adds r6, 0x1\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xFF\n\
+ bne _080240EE\n\
+_080240FE:\n\
+ ldr r1, _08024138 @ =0x00016056\n\
+ adds r0, r5, r1\n\
+ ldrb r0, [r0]\n\
+ adds r3, r4, 0\n\
+ muls r3, r0\n\
+ lsls r0, r6, 2\n\
+ add r0, r12\n\
+ ldrb r2, [r0, 0x1]\n\
+ ldrh r1, [r7]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0802413C\n\
+ lsls r0, r2, 1\n\
+ adds r4, r3, 0\n\
+ muls r4, r0\n\
+ b _08024140\n\
+ .align 2, 0\n\
+_08024120: .4byte gTrainerMoney\n\
+_08024124: .4byte 0x02000000\n\
+_08024128: .4byte gBattleTypeFlags\n\
+_0802412C: .4byte gSaveBlock1 + 0x490\n\
+_08024130: .4byte gTrainers\n\
+_08024134: .4byte gTrainerBattleOpponent\n\
+_08024138: .4byte 0x00016056\n\
+_0802413C:\n\
+ adds r4, r3, 0\n\
+ muls r4, r2\n\
+_08024140:\n\
+ mov r0, r8\n\
+ adds r1, r4, 0\n\
+ bl sub_80B79B8\n\
+ ldr r1, _0802418C @ =gBattleTextBuff1\n\
+ movs r0, 0xFD\n\
+ strb r0, [r1]\n\
+ movs r0, 0x1\n\
+ strb r0, [r1, 0x1]\n\
+ movs r0, 0x4\n\
+ strb r0, [r1, 0x2]\n\
+ movs r0, 0x5\n\
+ strb r0, [r1, 0x3]\n\
+ strb r4, [r1, 0x4]\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r4\n\
+ lsrs r0, 8\n\
+ strb r0, [r1, 0x5]\n\
+ movs r0, 0xFF\n\
+ lsls r0, 16\n\
+ ands r0, r4\n\
+ lsrs r0, 16\n\
+ strb r0, [r1, 0x6]\n\
+ lsrs r0, r4, 24\n\
+ strb r0, [r1, 0x7]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x8]\n\
+ ldr r1, _08024190 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x1\n\
+ str r0, [r1]\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0802418C: .4byte gBattleTextBuff1\n\
+_08024190: .4byte gBattlescriptCurrInstr\n\
+ .syntax divided");
+}
+#endif //NONMATCHING
+
+static void atk5E_8025A70(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ switch (gBattleCommunication[0])
+ {
+ case 0:
+ EmitGetAttributes(0, REQUEST_ALL_BATTLE, 0);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattleCommunication[0]++;
+ break;
+ case 1:
+ if (gBattleExecBuffer == 0)
+ {
+ int i;
+ struct BattlePokemon* bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBank][4];
+ for (i = 0; i < 4; i++)
+ {
+ gBattleMons[gActiveBank].moves[i] = bufferPoke->moves[i];
+ gBattleMons[gActiveBank].pp[i] = bufferPoke->pp[i];
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+ break;
+ }
+}
+
+static void atk5F_8025B24(void)
+{
+ gActiveBank = gBankAttacker;
+ gBankAttacker = gBankTarget;
+ gBankTarget = gActiveBank;
+ //what is xor...
+ if (gHitMarker & HITMARKER_PURSUIT_TRAP)
+ gHitMarker &= ~(HITMARKER_PURSUIT_TRAP);
+ else
+ gHitMarker |= HITMARKER_PURSUIT_TRAP;
+ gBattlescriptCurrInstr++;
+}
+
+static void atk60_increment_gamestat(void)
+{
+ if (GetBankSide(gBankAttacker) == 0)
+ {
+ IncrementGameStat(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+struct hp_status
+{
+ u16 hp;
+ u32 status;
+};
+
+static void atk61_8025BA4(void)
+{
+ int i;
+ struct Pokemon* poke;
+ struct hp_status hpStatus[6];
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ if (GetBankSide(gActiveBank) == 0)
+ poke = gPlayerParty;
+ else
+ poke = gEnemyParty;
+
+ for (i = 0; i < 6; i++)
+ {
+ if (GetMonData(&poke[i], MON_DATA_SPECIES2) == 0 || GetMonData(&poke[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ {
+ hpStatus[i].hp = 0xFFFF;
+ hpStatus[i].status = 0;
+ }
+ else
+ {
+ hpStatus[i].hp = GetMonData(&poke[i], MON_DATA_HP);
+ hpStatus[i].status = GetMonData(&poke[i], MON_DATA_STATUS);
+ }
+ }
+ dp01_build_cmdbuf_x30_TODO(0, (u8*)(hpStatus), 1);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk62_08025C6C(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ dp01_build_cmdbuf_x31_31_31_31(0);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk63_jumptorandomattack(void)
+{
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1))
+ gCurrentMove = gRandomMove;
+ else
+ gUnknown_02024BE8 = gCurrentMove = gRandomMove;
+
+ gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
+}
+
+static void atk64_statusanimation(void)
+{
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS))
+ {
+ EmitStatusAnimation(0, 0, gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk65_status2animation(void)
+{
+ u32 possible_to_anim;
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ possible_to_anim = BSScriptRead32(gBattlescriptCurrInstr + 2);
+ if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS))
+ {
+ EmitStatusAnimation(0, 1, gBattleMons[gActiveBank].status2 & possible_to_anim);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk66_chosenstatusanimation(void)
+{
+ u32 status;
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ status = BSScriptRead32(gBattlescriptCurrInstr + 3);
+ if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS))
+ {
+ EmitStatusAnimation(0, BSScriptRead8(gBattlescriptCurrInstr + 2), status);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ gBattlescriptCurrInstr += 7;
+}
+
+static void atk67_8025ECC(void)
+{
+ switch (gBattleCommunication[0])
+ {
+ case 0:
+ sub_8023A80();
+ gBattleCommunication[0]++;
+ gBattleCommunication[1] = 0;
+ sub_802BC6C();
+ break;
+ case 1:
+ if (gMain.newKeys & 0x40 && gBattleCommunication[1] != 0)
+ {
+ PlaySE(5);
+ nullsub_6();
+ gBattleCommunication[1] = 0;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & 0x80 && gBattleCommunication[1] == 0)
+ {
+ PlaySE(5);
+ nullsub_6();
+ gBattleCommunication[1] = 1;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & 0x2)
+ gBattleCommunication[1] = 1;
+ else if (!(gMain.newKeys & 0x1))
+ break;
+ PlaySE(5);
+ sub_8023AD8();
+ gBattlescriptCurrInstr++;
+ break;
+ }
+}
+
+static void atk68_80246A0(void)
+{
+ int i;
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ gUnknown_02024A76[i] = 0xC;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk69_dmg_adjustment2(void) //literally a copy of atk07 except theres no rand dmg modifier...
+{
+ u8 hold_effect, quality;
+ if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
+ hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ else
+ {
+ hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
+ quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item);
+ }
+
+ gStringBank = gBankTarget;
+
+ if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality)
+ {
+ RecordItemBattle(gBankTarget, hold_effect);
+ gSpecialStatuses[gBankTarget].focusBanded = 1;
+ }
+ if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) {goto END;}
+ if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBankTarget].endured
+ && !gSpecialStatuses[gBankTarget].focusBanded) {goto END;}
+
+ if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) {goto END;}
+
+ gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1;
+
+ if (gProtectStructs[gBankTarget].endured)
+ {
+ gBattleMoveFlags |= MOVE_ENDURED;
+ goto END;
+ }
+ if (gSpecialStatuses[gBankTarget].focusBanded)
+ {
+ gBattleMoveFlags |= MOVE_HANGEDON;
+ gLastUsedItem = gBattleMons[gBankTarget].item;
+ }
+
+ END:
+ gBattlescriptCurrInstr++;
+}
+
+#ifdef NONMATCHING
+
+static void atk6A_removeitem(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ //BATTLE_STRUCT->UsedHeldItems[gActiveBank] = gBattleMons[gActiveBank].item;
+ #define USED_HELD_ITEMS(bank)((u16)(*(u8*)(((u8)(bank) << 1) + 0x020160cc)))
+
+ USED_HELD_ITEMS(gActiveBank) = gBattleMons[gActiveBank].item;
+ gBattleMons[gActiveBank].item = 0;
+ EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+#else
+__attribute__((naked))
+static void atk6A_removeitem(void)
+{
+ asm(".syntax unified\n\
+push {r4-r6,lr}\n\
+ sub sp, 0x4\n\
+ ldr r6, _080248B0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r6]\n\
+ ldrb r0, [r0, 0x1]\n\
+ bl GetBattleBank\n\
+ ldr r5, _080248B4 @ =gActiveBank\n\
+ strb r0, [r5]\n\
+ ldrb r4, [r5]\n\
+ lsls r1, r4, 1\n\
+ ldr r0, _080248B8 @ =0x020160cc\n\
+ adds r1, r0\n\
+ ldr r2, _080248BC @ =gBattleMons\n\
+ movs r3, 0x58\n\
+ adds r0, r4, 0\n\
+ muls r0, r3\n\
+ adds r0, r2\n\
+ ldrh r0, [r0, 0x2E]\n\
+ strh r0, [r1]\n\
+ ldrb r0, [r5]\n\
+ muls r0, r3\n\
+ adds r0, r2\n\
+ movs r1, 0\n\
+ strh r1, [r0, 0x2E]\n\
+ ldrb r0, [r5]\n\
+ muls r0, r3\n\
+ adds r2, 0x2E\n\
+ adds r0, r2\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ movs r2, 0\n\
+ movs r3, 0x2\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r5]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, [r6]\n\
+ adds r0, 0x2\n\
+ str r0, [r6]\n\
+ add sp, 0x4\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080248B0: .4byte gBattlescriptCurrInstr\n\
+_080248B4: .4byte gActiveBank\n\
+_080248B8: .4byte 0x020160cc\n\
+_080248BC: .4byte gBattleMons\n\
+ .syntax divided");
+}
+
+#endif //NONMATCHING
+
+static void atk6B_atknameinbuff1(void)
+{
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 7;
+ gBattleTextBuff1[2] = gBankAttacker;
+ gBattleTextBuff1[3] = gBattlePartyID[gBankAttacker];
+ gBattleTextBuff1[4] = 0xFF;
+
+ gBattlescriptCurrInstr++;
+}
+
+#ifdef NONMATCHING
+static void atk6C_lvlbox_display(void)
+{
+ u8 r1 = 0;
+ u8 r7 = 0;
+ switch (BATTLE_STRUCT->atk6C_statetracker)
+ {
+ case 0:
+ sub_802BBD4(0xB, 0, 0x1D, 0x7, r1);
+ StringCopy(gStringVar4, gUnknown_08400D9F);
+
+ }
+}
+
+#else
+__attribute__((naked))
+static void atk6C_lvlbox_display(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ movs r1, 0\n\
+ movs r7, 0\n\
+ ldr r0, _08024928 @ =0x02000000\n\
+ mov r10, r0\n\
+ ldr r4, _0802492C @ =0x0001609c\n\
+ add r4, r10\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0x1\n\
+ bne _0802491C\n\
+ b _08024AF4\n\
+_0802491C:\n\
+ cmp r0, 0x1\n\
+ bgt _08024930\n\
+ cmp r0, 0\n\
+ beq _0802493E\n\
+ b _08024C38\n\
+ .align 2, 0\n\
+_08024928: .4byte 0x02000000\n\
+_0802492C: .4byte 0x0001609c\n\
+_08024930:\n\
+ cmp r0, 0x2\n\
+ bne _08024936\n\
+ b _08024C04\n\
+_08024936:\n\
+ cmp r0, 0x3\n\
+ bne _0802493C\n\
+ b _08024C30\n\
+_0802493C:\n\
+ b _08024C38\n\
+_0802493E:\n\
+ str r1, [sp]\n\
+ movs r0, 0xB\n\
+ movs r1, 0\n\
+ movs r2, 0x1D\n\
+ movs r3, 0x7\n\
+ bl sub_802BBD4\n\
+ ldr r0, _0802499C @ =gStringVar4\n\
+ ldr r1, _080249A0 @ =gUnknown_08400D9F\n\
+ bl StringCopy\n\
+ adds r5, r0, 0\n\
+ movs r1, 0\n\
+ mov r8, r1\n\
+_0802495A:\n\
+ movs r2, 0\n\
+ mov r9, r2\n\
+ ldr r0, _080249A4 @ =gUnknown_0840165C\n\
+ mov r1, r8\n\
+ lsls r4, r1, 2\n\
+ adds r0, r4, r0\n\
+ ldr r1, [r0]\n\
+ adds r0, r5, 0\n\
+ bl StringAppend\n\
+ adds r5, r0, 0\n\
+ ldr r0, _080249A8 @ =0x02000000\n\
+ ldr r2, _080249AC @ =0x00016018\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _080249B0 @ =gPlayerParty\n\
+ adds r0, r1\n\
+ ldr r1, _080249B4 @ =gLevelUpStatBoxStats\n\
+ add r1, r8\n\
+ ldrb r1, [r1]\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ mov r0, r8\n\
+ cmp r0, 0x5\n\
+ bhi _08024A1A\n\
+ ldr r0, _080249B8 @ =_080249BC\n\
+ adds r0, r4, r0\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_0802499C: .4byte gStringVar4\n\
+_080249A0: .4byte gUnknown_08400D9F\n\
+_080249A4: .4byte gUnknown_0840165C\n\
+_080249A8: .4byte 0x02000000\n\
+_080249AC: .4byte 0x00016018\n\
+_080249B0: .4byte gPlayerParty\n\
+_080249B4: .4byte gLevelUpStatBoxStats\n\
+_080249B8: .4byte _080249BC\n\
+ .align 2, 0\n\
+_080249BC:\n\
+ .4byte _080249D4\n\
+ .4byte _080249E0\n\
+ .4byte _080249EC\n\
+ .4byte _080249F8\n\
+ .4byte _08024A04\n\
+ .4byte _08024A10\n\
+_080249D4:\n\
+ ldr r0, _080249DC @ =0x02017180\n\
+ ldrh r0, [r0]\n\
+ b _08024A14\n\
+ .align 2, 0\n\
+_080249DC: .4byte 0x02017180\n\
+_080249E0:\n\
+ ldr r0, _080249E8 @ =0x02017180\n\
+ ldrh r0, [r0, 0x8]\n\
+ b _08024A14\n\
+ .align 2, 0\n\
+_080249E8: .4byte 0x02017180\n\
+_080249EC:\n\
+ ldr r0, _080249F4 @ =0x02017180\n\
+ ldrh r0, [r0, 0x2]\n\
+ b _08024A14\n\
+ .align 2, 0\n\
+_080249F4: .4byte 0x02017180\n\
+_080249F8:\n\
+ ldr r0, _08024A00 @ =0x02017180\n\
+ ldrh r0, [r0, 0xA]\n\
+ b _08024A14\n\
+ .align 2, 0\n\
+_08024A00: .4byte 0x02017180\n\
+_08024A04:\n\
+ ldr r0, _08024A0C @ =0x02017180\n\
+ ldrh r0, [r0, 0x4]\n\
+ b _08024A14\n\
+ .align 2, 0\n\
+_08024A0C: .4byte 0x02017180\n\
+_08024A10:\n\
+ ldr r0, _08024A54 @ =0x02017180\n\
+ ldrh r0, [r0, 0x6]\n\
+_08024A14:\n\
+ subs r0, r1, r0\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+_08024A1A:\n\
+ lsls r0, r7, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0\n\
+ bge _08024A2C\n\
+ negs r0, r0\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ movs r1, 0x1\n\
+ add r9, r1\n\
+_08024A2C:\n\
+ movs r0, 0xFC\n\
+ strb r0, [r5]\n\
+ movs r0, 0x13\n\
+ strb r0, [r5, 0x1]\n\
+ movs r1, 0x1\n\
+ mov r2, r8\n\
+ ands r1, r2\n\
+ lsls r0, r1, 3\n\
+ adds r0, r1\n\
+ adds r0, 0x5\n\
+ lsls r0, 3\n\
+ adds r0, 0x6\n\
+ strb r0, [r5, 0x2]\n\
+ adds r5, 0x3\n\
+ mov r0, r9\n\
+ cmp r0, 0\n\
+ beq _08024A5C\n\
+ ldr r1, _08024A58 @ =gUnknown_08400DAC\n\
+ b _08024A5E\n\
+ .align 2, 0\n\
+_08024A54: .4byte 0x02017180\n\
+_08024A58: .4byte gUnknown_08400DAC\n\
+_08024A5C:\n\
+ ldr r1, _08024AA4 @ =gUnknown_08400DAA\n\
+_08024A5E:\n\
+ adds r0, r5, 0\n\
+ bl StringCopy\n\
+ adds r5, r0, 0\n\
+ movs r6, 0xFC\n\
+ strb r6, [r5]\n\
+ movs r4, 0x14\n\
+ strb r4, [r5, 0x1]\n\
+ movs r0, 0x6\n\
+ strb r0, [r5, 0x2]\n\
+ adds r5, 0x3\n\
+ lsls r1, r7, 16\n\
+ asrs r1, 16\n\
+ adds r0, r5, 0\n\
+ movs r2, 0x1\n\
+ movs r3, 0x2\n\
+ bl ConvertIntToDecimalStringN\n\
+ adds r5, r0, 0\n\
+ strb r6, [r5]\n\
+ strb r4, [r5, 0x1]\n\
+ movs r0, 0\n\
+ strb r0, [r5, 0x2]\n\
+ adds r5, 0x3\n\
+ movs r0, 0x1\n\
+ mov r1, r8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08024AA8\n\
+ movs r0, 0xFE\n\
+ strb r0, [r5]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r5, 0x1]\n\
+ adds r5, 0x1\n\
+ b _08024AB8\n\
+ .align 2, 0\n\
+_08024AA4: .4byte gUnknown_08400DAA\n\
+_08024AA8:\n\
+ strb r6, [r5]\n\
+ movs r0, 0x11\n\
+ strb r0, [r5, 0x1]\n\
+ movs r0, 0x8\n\
+ strb r0, [r5, 0x2]\n\
+ adds r5, 0x3\n\
+ movs r0, 0xFF\n\
+ strb r0, [r5]\n\
+_08024AB8:\n\
+ movs r2, 0x1\n\
+ add r8, r2\n\
+ mov r0, r8\n\
+ cmp r0, 0x5\n\
+ bgt _08024AC4\n\
+ b _0802495A\n\
+_08024AC4:\n\
+ ldr r4, _08024AE4 @ =gUnknown_03004210\n\
+ ldr r1, _08024AE8 @ =gStringVar4\n\
+ adds r2, 0xFF\n\
+ movs r0, 0x1\n\
+ str r0, [sp]\n\
+ adds r0, r4, 0\n\
+ movs r3, 0xC\n\
+ bl InitWindow\n\
+ adds r0, r4, 0\n\
+ bl sub_8002F44\n\
+ ldr r1, _08024AEC @ =0x02000000\n\
+ ldr r2, _08024AF0 @ =0x0001609c\n\
+ adds r1, r2\n\
+ b _08024BEA\n\
+ .align 2, 0\n\
+_08024AE4: .4byte gUnknown_03004210\n\
+_08024AE8: .4byte gStringVar4\n\
+_08024AEC: .4byte 0x02000000\n\
+_08024AF0: .4byte 0x0001609c\n\
+_08024AF4:\n\
+ ldr r0, _08024B94 @ =gMain\n\
+ ldrh r0, [r0, 0x2E]\n\
+ cmp r0, 0\n\
+ bne _08024AFE\n\
+ b _08024C38\n\
+_08024AFE:\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ ldr r0, _08024B98 @ =gStringVar4\n\
+ ldr r1, _08024B9C @ =gUnknown_08400D9F\n\
+ bl StringCopy\n\
+ adds r5, r0, 0\n\
+ movs r0, 0\n\
+ mov r8, r0\n\
+ mov r9, r0\n\
+ movs r6, 0xFC\n\
+ movs r7, 0x14\n\
+ ldr r1, _08024BA0 @ =0x00016018\n\
+ add r10, r1\n\
+_08024B1C:\n\
+ ldr r1, _08024BA4 @ =gUnknown_0840165C\n\
+ mov r2, r8\n\
+ lsls r0, r2, 2\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ adds r0, r5, 0\n\
+ bl StringAppend\n\
+ adds r5, r0, 0\n\
+ mov r0, r10\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r0, r1\n\
+ ldr r1, _08024BA8 @ =gPlayerParty\n\
+ adds r0, r1\n\
+ ldr r1, _08024BAC @ =gLevelUpStatBoxStats\n\
+ add r1, r8\n\
+ ldrb r1, [r1]\n\
+ bl GetMonData\n\
+ adds r1, r0, 0\n\
+ strb r6, [r5]\n\
+ movs r0, 0x13\n\
+ strb r0, [r5, 0x1]\n\
+ movs r4, 0x1\n\
+ mov r2, r8\n\
+ ands r4, r2\n\
+ lsls r0, r4, 3\n\
+ adds r0, r4\n\
+ adds r0, 0x5\n\
+ lsls r0, 3\n\
+ adds r0, 0x6\n\
+ strb r0, [r5, 0x2]\n\
+ adds r5, 0x3\n\
+ strb r6, [r5]\n\
+ strb r7, [r5, 0x1]\n\
+ movs r0, 0x6\n\
+ strb r0, [r5, 0x2]\n\
+ adds r5, 0x3\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ adds r0, r5, 0\n\
+ movs r2, 0x1\n\
+ movs r3, 0x3\n\
+ bl ConvertIntToDecimalStringN\n\
+ adds r5, r0, 0\n\
+ strb r6, [r5]\n\
+ strb r7, [r5, 0x1]\n\
+ mov r0, r9\n\
+ strb r0, [r5, 0x2]\n\
+ adds r5, 0x3\n\
+ cmp r4, 0\n\
+ beq _08024BB0\n\
+ movs r0, 0xFE\n\
+ strb r0, [r5]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r5, 0x1]\n\
+ adds r5, 0x1\n\
+ b _08024BC0\n\
+ .align 2, 0\n\
+_08024B94: .4byte gMain\n\
+_08024B98: .4byte gStringVar4\n\
+_08024B9C: .4byte gUnknown_08400D9F\n\
+_08024BA0: .4byte 0x00016018\n\
+_08024BA4: .4byte gUnknown_0840165C\n\
+_08024BA8: .4byte gPlayerParty\n\
+_08024BAC: .4byte gLevelUpStatBoxStats\n\
+_08024BB0:\n\
+ strb r6, [r5]\n\
+ movs r0, 0x11\n\
+ strb r0, [r5, 0x1]\n\
+ movs r0, 0x8\n\
+ strb r0, [r5, 0x2]\n\
+ adds r5, 0x3\n\
+ movs r0, 0xFF\n\
+ strb r0, [r5]\n\
+_08024BC0:\n\
+ movs r1, 0x1\n\
+ add r8, r1\n\
+ mov r2, r8\n\
+ cmp r2, 0x5\n\
+ ble _08024B1C\n\
+ ldr r4, _08024BF4 @ =gUnknown_03004210\n\
+ ldr r1, _08024BF8 @ =gStringVar4\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ movs r0, 0x1\n\
+ str r0, [sp]\n\
+ adds r0, r4, 0\n\
+ movs r3, 0xC\n\
+ bl InitWindow\n\
+ adds r0, r4, 0\n\
+ bl sub_8002F44\n\
+ ldr r1, _08024BFC @ =0x02000000\n\
+ ldr r0, _08024C00 @ =0x0001609c\n\
+ adds r1, r0\n\
+_08024BEA:\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ b _08024C38\n\
+ .align 2, 0\n\
+_08024BF4: .4byte gUnknown_03004210\n\
+_08024BF8: .4byte gStringVar4\n\
+_08024BFC: .4byte 0x02000000\n\
+_08024C00: .4byte 0x0001609c\n\
+_08024C04:\n\
+ ldr r0, _08024C2C @ =gMain\n\
+ ldrh r0, [r0, 0x2E]\n\
+ cmp r0, 0\n\
+ beq _08024C38\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x1\n\
+ str r0, [sp]\n\
+ movs r0, 0xB\n\
+ movs r1, 0\n\
+ movs r2, 0x1D\n\
+ movs r3, 0x7\n\
+ bl sub_802BBD4\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ b _08024C38\n\
+ .align 2, 0\n\
+_08024C2C: .4byte gMain\n\
+_08024C30:\n\
+ ldr r1, _08024C48 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x1\n\
+ str r0, [r1]\n\
+_08024C38:\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08024C48: .4byte gBattlescriptCurrInstr\n\
+ .syntax divided");
+}
+
+#endif
+
+static void atk6D_set_sentpokes_values(void)
+{
+ sub_80156DC();
+ gBattlescriptCurrInstr++;
+}
+
+static void atk6E_set_atk_to_player0(void)
+{
+ gBankAttacker = GetBankByPlayerAI(0);
+ gBattlescriptCurrInstr++;
+}
+
+static void atk6F_set_visible(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ EmitSpriteInvisibility(0, 0);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk70_record_ability(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ RecordAbilityBattle(gActiveBank, gLastUsedAbility);
+ gBattlescriptCurrInstr += 1; //buggy, should be += 2, one byte for command, one byte for argument...
+}
+
+void sub_8024CEC(void)
+{
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 2;
+ gBattleTextBuff2[2] = (word_2024E82);
+ gBattleTextBuff2[3] = uBYTE1_16(word_2024E82);
+ gBattleTextBuff2[4] = 0xFF;
+}
+
+static void atk71_buffer_move_to_learn(void)
+{
+ sub_8024CEC();
+ gBattlescriptCurrInstr++;
+}
+
+static void atk72_jump_if_can_run_frombattle(void)
+{
+ if (sub_8014AB8(gBank1))
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static void atk73_hp_thresholds(void)
+{
+ u8 opposing_bank;
+ s32 result;
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ opposing_bank = gActiveBank ^ 1;
+ result = ATLEAST_ONE(gBattleMons[opposing_bank].hp * 100 / gBattleMons[opposing_bank].maxHP);
+
+ if (result > 69 || !gBattleMons[opposing_bank].hp)
+ BATTLE_STRUCT->hpScale = 0;
+ else if (result > 39)
+ BATTLE_STRUCT->hpScale = 1;
+ else if (result > 9)
+ BATTLE_STRUCT->hpScale = 2;
+ else
+ BATTLE_STRUCT->hpScale = 3;
+ }
+
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk74_hp_thresholds2(void)
+{
+ u8 opposing_bank;
+ u8 hp_switchout;
+ s32 result;
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ opposing_bank = gActiveBank ^ 1;
+ hp_switchout = ewram[2 * GetBankSide(opposing_bank) + 0x160bc]; //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)];
+ result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout;
+
+ if (gBattleMons[opposing_bank].hp >= hp_switchout)
+ BATTLE_STRUCT->hpScale = 0;
+ else if (result <= 29)
+ BATTLE_STRUCT->hpScale = 1;
+ else if (result <= 69)
+ BATTLE_STRUCT->hpScale = 2;
+ else
+ BATTLE_STRUCT->hpScale = 3;
+ }
+
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk75_8026A58(void)
+{
+ gBankInMenu = gBankAttacker;
+ sub_803E1B0(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1);
+ gBattlescriptCurrInstr += 1;
+}
+
+static void atk76_various(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ switch (BSScriptRead8(gBattlescriptCurrInstr + 2))
+ {
+ case 0:
+ CancelMultiTurnMoves(gActiveBank);
+ break;
+ case 1:
+ {
+ u8 side;
+ gBankAttacker = gBankTarget;
+ side = GetBankSide(gBankAttacker) ^ 1;
+ if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp)
+ gBankTarget = gSideTimer[side].followmeTarget;
+ else
+ gBankTarget = gActiveBank;
+ }
+ break;
+ case 2:
+ gBattleCommunication[0] = CanRunFromBattle();
+ break;
+ case 3:
+ gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ break;
+ case 4:
+ if (gHitMarker & HITMARKER_FAINTED(gActiveBank))
+ gBattleCommunication[0] = 1;
+ else
+ gBattleCommunication[0] = 0;
+ break;
+ case 5:
+ gSpecialStatuses[gActiveBank].intimidatedPoke = 0;
+ gSpecialStatuses[gActiveBank].traced = 0;
+ break;
+ case 6:
+ {
+ int i;
+ u16* choiced_move;
+ if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID)
+ goto ACTIVE_0;
+ if (gBattlePartyID[2] != BATTLE_STRUCT->expGetterID)
+ break;
+ if (gBattlePartyID[0] == gBattlePartyID[2])
+ {
+ ACTIVE_0:
+ gActiveBank = 0;
+ }
+ else
+ gActiveBank = 2;
+
+ choiced_move = (u16*)(&ewram[gActiveBank * 2 + 0x160e8]);
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[gActiveBank].moves[i] == *choiced_move)
+ break;
+ }
+ if (i == 4)
+ *choiced_move = 0;
+ }
+ break;
+ }
+
+ gBattlescriptCurrInstr += 3;
+}
+
+static void atk77_setprotect(void) //protect and endure
+{
+ bool8 not_last_turn = 1;
+ u16 last_move = gUnknown_02024C4C[gBankAttacker];
+
+ if (last_move != MOVE_PROTECT && last_move != MOVE_DETECT && last_move != MOVE_ENDURE)
+ gDisableStructs[gBankAttacker].protectUses = 0;
+ if (gCurrentMoveTurn == (gNoOfAllBanks - 1))
+ not_last_turn = 0;
+
+ if (sProtectSuccessRates[gDisableStructs[gBankAttacker].protectUses] > Random() && not_last_turn)
+ {
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_PROTECT)
+ {
+ gProtectStructs[gBankAttacker].protected = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE) //what is else if
+ {
+ gProtectStructs[gBankAttacker].endured = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ gDisableStructs[gBankAttacker].protectUses++;
+ }
+ else
+ {
+ gDisableStructs[gBankAttacker].protectUses = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ gBattleMoveFlags |= MOVE_MISSED;
+ }
+
+ gBattlescriptCurrInstr++;
+}
+
+static void atk78_faintifabilitynotdamp(void)
+{
+ if (gBattleExecBuffer)
+ return;
+
+ for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++)
+ {
+ if (gBattleMons[gBankTarget].ability == ABILITY_DAMP)
+ break;
+ }
+
+ if (gBankTarget == gNoOfAllBanks)
+ {
+ gActiveBank = gBankAttacker;
+ gBattleMoveDamage = gBattleMons[gActiveBank].hp;
+ EmitHealthBarUpdate(0, 0x7FFF);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr++;
+
+ for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++)
+ {
+ if (gBankTarget == gBankAttacker)
+ continue;
+ if (!(gAbsentBankFlags & gBitTable[gBankTarget]))
+ break;
+ }
+ }
+ else
+ {
+ gLastUsedAbility = ABILITY_DAMP;
+ RecordAbilityBattle(gBankTarget, gBattleMons[gBankTarget].ability);
+ gBattlescriptCurrInstr = gUnknown_081D9834;
+ }
+}
+
+static void atk79_setatkhptozero(void)
+{
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = gBankAttacker;
+ gBattleMons[gActiveBank].hp = 0;
+ EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp);
+ MarkBufferBankForExecution(gActiveBank);
+
+ gBattlescriptCurrInstr++;
+}
+
+static void atk7A_jumpwhiletargetvalid(void) //used by intimidate to loop through all targets
+{
+ u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ for (gBankTarget++; ; gBankTarget++)
+ {
+ if (gBankTarget == gBankAttacker)
+ continue;
+ if (!(gAbsentBankFlags & gBitTable[gBankTarget]))
+ break;
+ }
+
+ if (gBankTarget >= gNoOfAllBanks)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = jump_loc;
+ }
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static void atk7B_healhalfHP_if_possible(void)
+{
+ u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+
+ if (BSScriptRead8(gBattlescriptCurrInstr + 5) == 1)
+ gBankTarget = gBankAttacker;
+
+ gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ gBattleMoveDamage *= -1;
+
+ if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP)
+ gBattlescriptCurrInstr = fail_loc;
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk7C_8025508(void)
+{
+ u16 r7 = ewram[gBankAttacker * 2 + 0x160ac] | (ewram[gBankAttacker * 2 + 0x160ad] << 8);
+ u16 r6 = ewram[gBankAttacker * 4 + 0x16100] | (ewram[gBankAttacker * 4 + 0x16101] << 8);
+ u16 r5 = ewram[gBankAttacker * 4 + 0x16102] | (ewram[gBankAttacker * 4 + 0x16103] << 8);
+
+ if (r7 !=0 && r7 != 0xFFFF)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gCurrentMove = r7;
+ gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
+ }
+ else if (r6 != 0 && r5 != 0 && r6 != 0xFFFF && r5 != 0xFFFF)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ if (Random() & 1)
+ gCurrentMove = r6;
+ else
+ gCurrentMove = r5;
+ gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
+ }
+ else if (r6 != 0 && r6 != 0xFFFF)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gCurrentMove = r6;
+ gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
+ }
+ else if (r5 != 0 && r5 != 0xFFFF)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gCurrentMove = r5;
+ gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
+ }
+ else
+ {
+ gSpecialStatuses[gBankAttacker].flag20 = 1;
+ gBattlescriptCurrInstr++;
+ }
+}
+
+static void atk7D_set_rain(void)
+{
+ if (gBattleWeather & WEATHER_RAINY)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = weather_rain;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk7E_setreflect(void)
+{
+ if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_REFLECT)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else
+ {
+ gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_REFLECT;
+ gSideTimer[GetBankIdentity(gBankAttacker) & 1].reflectTimer = 5;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk7F_setseeded(void)
+{
+ if (gBattleMoveFlags & MOVE_NO_EFFECT || gStatuses3[gBankTarget] & STATUS3_LEECHSEED)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else if (gBattleMons[gBankTarget].type1 == TYPE_GRASS || gBattleMons[gBankTarget].type2 == TYPE_GRASS)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gStatuses3[gBankTarget] |= gBankAttacker;
+ gStatuses3[gBankTarget] |= STATUS3_LEECHSEED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+
+ gBattlescriptCurrInstr++;
+}
+
+static void atk80_manipulatedamage(void)
+{
+ switch (BSScriptRead8(gBattlescriptCurrInstr + 1))
+ {
+ case 0:
+ gBattleMoveDamage *= -1;
+ break;
+ case 1:
+ gBattleMoveDamage /= 2;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ if ((gBattleMons[gBankTarget].maxHP / 2) < gBattleMoveDamage)
+ gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2;
+ break;
+ case 2:
+ gBattleMoveDamage *= 2;
+ break;
+ }
+
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk81_setrest(void)
+{
+ u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gActiveBank = gBankTarget = gBankAttacker;
+ gBattleMoveDamage = gBattleMons[gBankTarget].maxHP * (-1);
+ if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP)
+ gBattlescriptCurrInstr = fail_loc;
+ else
+ {
+ if (gBattleMons[gBankTarget].status1 & ((u8)(~STATUS_SLEEP)))
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+
+ gBattleMons[gBankTarget].status1 = 3;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atk82_jumpifnotfirstturn(void)
+{
+ u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+
+ if (gDisableStructs[gBankAttacker].isFirstTurn)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = jump_loc;
+}
+
+static void atk83_nop(void)
+{
+ gBattlescriptCurrInstr++;
+}
+
+bool8 sub_8025A44(u8 bank) //uproar wakeup check
+{
+ int i;
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[bank].ability == ABILITY_SOUNDPROOF) //wtf gamefreak, you should check this only once, not every time in a loop...
+ continue;
+ BATTLE_STRUCT->scriptingActive = i;
+ if (gBankTarget == 0xFF)
+ gBankTarget = i;
+ else if (gBankTarget == i)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ break;
+ }
+ if (i == gNoOfAllBanks)
+ return 0;
+ else
+ return 1;
+}
+
+static void atk84_jump_if_cant_sleep(void)
+{
+ u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ if (sub_8025A44(gBankTarget))
+ gBattlescriptCurrInstr = jump_loc;
+ else if (gBattleMons[gBankTarget].ability == ABILITY_INSOMNIA || gBattleMons[gBankTarget].ability == ABILITY_VITAL_SPIRIT)
+ {
+ gLastUsedAbility = gBattleMons[gBankTarget].ability;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ gBattlescriptCurrInstr = jump_loc;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atk85_stockpile(void)
+{
+ if (gDisableStructs[gBankAttacker].stockpileCounter == 3)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gDisableStructs[gBankAttacker].stockpileCounter++;
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 1;
+ gBattleTextBuff1[2] = 1;
+ gBattleTextBuff1[3] = 1;
+ gBattleTextBuff1[4] = gDisableStructs[gBankAttacker].stockpileCounter;
+ gBattleTextBuff1[5] = 0xFF;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk86_stockpiletobasedamage(void)
+{
+ u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ if (gDisableStructs[gBankAttacker].stockpileCounter == 0)
+ gBattlescriptCurrInstr = jump_loc;
+ else
+ {
+ if (gBattleCommunication[6] != 1)
+ {
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove,
+ gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0,
+ 0, gBankAttacker, gBankTarget)
+ * gDisableStructs[gBankAttacker].stockpileCounter;
+ BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
+
+ if (gProtectStructs[gBankAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+ }
+ gDisableStructs[gBankAttacker].stockpileCounter = 0;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atk87_stockpiletohpheal(void)
+{
+ u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ if (gDisableStructs[gBankAttacker].stockpileCounter == 0)
+ {
+ gBattlescriptCurrInstr = jump_loc;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else if (gBattleMons[gBankAttacker].maxHP == gBattleMons[gBankAttacker].hp)
+ {
+ gDisableStructs[gBankAttacker].stockpileCounter = 0;
+ gBattlescriptCurrInstr = jump_loc;
+ gBankTarget = gBankAttacker;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / (1 << (3 - gDisableStructs[gBankAttacker].stockpileCounter));
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ gBattleMoveDamage *= -1;
+ BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
+ gDisableStructs[gBankAttacker].stockpileCounter = 0;
+ gBattlescriptCurrInstr += 5;
+ gBankTarget = gBankAttacker;
+ }
+}
+
+static void atk88_negativedamage(void)
+{
+ gBattleMoveDamage = (gHP_dealt / 2) *(-1);
+ ATLEAST_ONE_PTR_NEGATIVE(&gBattleMoveDamage);
+ gBattlescriptCurrInstr++;
+}
+
+#ifdef NONMATCHING
+u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr)
+{
+ u8 r9 = 0;
+ u8 r10 = 0;
+ u8 index;
+ if (flags & 0x40)
+ gActiveBank = gBankAttacker;
+ else
+ gActiveBank = gBankTarget;
+ flags &= ~(0x40);
+ if (flags & 0x80)
+ r9++;
+ flags &= ~(0x80);
+ if (flags & 0x20)
+ r10++;
+ flags &= ~(0x20);
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 5;
+ gBattleTextBuff1[2] = stat;
+ gBattleTextBuff1[3] = 0xFF;
+
+ if ((statchanger << 0x18) < 0) //stat decrease
+ {
+ if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE)
+ {
+ if (flags == 1)
+ {
+ if (gSpecialStatuses[gActiveBank].statloweringflag)
+ gBattlescriptCurrInstr = bs_ptr;
+ else
+ {
+ b_movescr_stack_push(bs_ptr);
+ BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gBattlescriptCurrInstr = BattleScript_MistProtected;
+ gSpecialStatuses[gActiveBank].statloweringflag = 1;
+ }
+ }
+ return 1;
+ }
+ else if (gCurrentMove != MOVE_CURSE && r10 != 1 && JumpIfMoveAffectedByProtect(0))
+ {
+ gBattlescriptCurrInstr = BattleScript_ButItFailed;
+ return 1;
+ }
+ else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) && !r9 && gCurrentMove != MOVE_CURSE)
+ {
+ if (flags == 1)
+ {
+ if (gSpecialStatuses[gActiveBank].statloweringflag)
+ gBattlescriptCurrInstr = bs_ptr;
+ else
+ {
+ b_movescr_stack_push(bs_ptr);
+ BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss;
+ gLastUsedAbility = gBattleMons[gActiveBank].ability;
+ RecordAbilityBattle(gActiveBank, gLastUsedAbility);
+ gSpecialStatuses[gActiveBank].statloweringflag = 1;
+ }
+ }
+ return 1;
+ }
+ else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE && !r9 && stat == ACC_BUFF)
+ {
+ if (flags == 1)
+ {
+ b_movescr_stack_push(bs_ptr);
+ BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
+ gLastUsedAbility = gBattleMons[gActiveBank].ability;
+ RecordAbilityBattle(gActiveBank, gLastUsedAbility);
+ }
+ return 1;
+ }
+ else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER && !r9 && stat == ATK_BUFF)
+ {
+ if (flags == 1)
+ {
+ b_movescr_stack_push(bs_ptr);
+ BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
+ gLastUsedAbility = gBattleMons[gActiveBank].ability;
+ RecordAbilityBattle(gActiveBank, gLastUsedAbility);
+ }
+ return 1;
+ }
+ else if (gBattleMons[gActiveBank].ability == ABILITY_SHIELD_DUST && flags == 0)
+ return 1;
+ else //decrease
+ {
+ statchanger = -((statchanger >> 4) & (7));
+ gBattleTextBuff2[0] = 0xFD;
+ index = 1;
+ if (statchanger == -2)
+ {
+ gBattleTextBuff2[1] = 0;
+ gBattleTextBuff2[2] = 0xD3; //harshly
+ gBattleTextBuff2[3] = 0x0;
+ index = 4;
+ }
+ gBattleTextBuff2[index] = 0;
+ index++;
+ gBattleTextBuff2[index] = 0xD4; //fell
+ index++;
+ gBattleTextBuff2[index] = 0;
+ index++;
+ gBattleTextBuff2[index] = 0xFF;
+
+ if (gBattleMons[gActiveBank].statStages[stat] == 0)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ u8 stringID = 0;
+ if (gBankTarget == gActiveBank)
+ stringID = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = stringID;
+ }
+ }
+ }
+ else //stat increase
+ {
+ statchanger = (statchanger >> 4) & (7);
+ gBattleTextBuff2[0] = 0xFD;
+ index = 1;
+ if (statchanger == 2)
+ {
+ gBattleTextBuff2[1] = 0;
+ gBattleTextBuff2[2] = 0xD1; //sharply
+ gBattleTextBuff2[3] = 0x0;
+ index = 4;
+ }
+ gBattleTextBuff2[index] = 0;
+ index++;
+ gBattleTextBuff2[index] = 0xD2; //rose
+ index++;
+ gBattleTextBuff2[index] = 0;
+ index++;
+ gBattleTextBuff2[index] = 0xFF;
+
+ if (gBattleMons[gActiveBank].statStages[stat] == 0xC)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ u8 stringID = 0;
+ if (gBankTarget == gActiveBank)
+ stringID = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = stringID;
+ }
+ }
+
+ gBattleMons[gActiveBank].statStages[stat] += statchanger;
+ if (gBattleMons[gActiveBank].statStages[stat] < 0)
+ gBattleMons[gActiveBank].statStages[stat] = 0;
+ if (gBattleMons[gActiveBank].statStages[stat] > 0xC)
+ gBattleMons[gActiveBank].statStages[stat] = 0xC;
+
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2)
+ {
+ if (flags & 1)
+ gBattleMoveFlags |= MOVE_MISSED;
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & 1)) //what the actual fuck gamefreak...
+ return 1;
+ }
+ return 0;
+}
+
+#else
+__attribute__((naked))
+u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ mov r8, r3\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ lsls r1, 24\n\
+ lsrs r7, r1, 24\n\
+ lsls r2, 24\n\
+ lsrs r5, r2, 24\n\
+ movs r0, 0\n\
+ mov r9, r0\n\
+ mov r10, r0\n\
+ movs r0, 0x40\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _08025E54\n\
+ ldr r0, _08025E4C @ =gActiveBank\n\
+ ldr r1, _08025E50 @ =gBankAttacker\n\
+ b _08025E58\n\
+ .align 2, 0\n\
+_08025E4C: .4byte gActiveBank\n\
+_08025E50: .4byte gBankAttacker\n\
+_08025E54:\n\
+ ldr r0, _08025EF8 @ =gActiveBank\n\
+ ldr r1, _08025EFC @ =gBankTarget\n\
+_08025E58:\n\
+ ldrb r1, [r1]\n\
+ strb r1, [r0]\n\
+ movs r0, 0xBF\n\
+ ands r5, r0\n\
+ movs r0, 0x80\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _08025E72\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08025E72:\n\
+ movs r0, 0x7F\n\
+ ands r5, r0\n\
+ movs r0, 0x20\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _08025E88\n\
+ mov r0, r10\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+_08025E88:\n\
+ movs r0, 0xDF\n\
+ ands r5, r0\n\
+ ldr r1, _08025F00 @ =gBattleTextBuff1\n\
+ movs r4, 0\n\
+ movs r2, 0xFD\n\
+ strb r2, [r1]\n\
+ movs r0, 0x5\n\
+ strb r0, [r1, 0x1]\n\
+ strb r7, [r1, 0x2]\n\
+ movs r3, 0x1\n\
+ negs r3, r3\n\
+ mov r12, r3\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x3]\n\
+ lsls r0, r6, 24\n\
+ cmp r0, 0\n\
+ blt _08025EAC\n\
+ b _080261B0\n\
+_08025EAC:\n\
+ ldr r4, _08025F04 @ =gSideTimer\n\
+ ldr r1, _08025EF8 @ =gActiveBank\n\
+ ldrb r0, [r1]\n\
+ bl GetBankIdentity\n\
+ movs r1, 0x1\n\
+ ands r1, r0\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldrb r0, [r0, 0x2]\n\
+ cmp r0, 0\n\
+ beq _08025F54\n\
+ mov r2, r9\n\
+ cmp r2, 0\n\
+ bne _08025F54\n\
+ ldr r0, _08025F08 @ =gCurrentMove\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0xAE\n\
+ beq _08025F84\n\
+ cmp r5, 0x1\n\
+ bne _08025F74\n\
+ ldr r4, _08025F0C @ =gSpecialStatuses\n\
+ ldr r3, _08025EF8 @ =gActiveBank\n\
+ ldrb r0, [r3]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r4\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08025F14\n\
+ ldr r0, _08025F10 @ =gBattlescriptCurrInstr\n\
+ mov r4, r8\n\
+ str r4, [r0]\n\
+ b _08025F74\n\
+ .align 2, 0\n\
+_08025EF8: .4byte gActiveBank\n\
+_08025EFC: .4byte gBankTarget\n\
+_08025F00: .4byte gBattleTextBuff1\n\
+_08025F04: .4byte gSideTimer\n\
+_08025F08: .4byte gCurrentMove\n\
+_08025F0C: .4byte gSpecialStatuses\n\
+_08025F10: .4byte gBattlescriptCurrInstr\n\
+_08025F14:\n\
+ mov r0, r8\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _08025F40 @ =0x02000000\n\
+ ldr r6, _08025F44 @ =gActiveBank\n\
+ ldrb r1, [r6]\n\
+ ldr r2, _08025F48 @ =0x00016003\n\
+ adds r0, r2\n\
+ strb r1, [r0]\n\
+ ldr r1, _08025F4C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08025F50 @ =BattleScript_MistProtected\n\
+ str r0, [r1]\n\
+ ldrb r1, [r6]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x1\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ b _08025F74\n\
+ .align 2, 0\n\
+_08025F40: .4byte 0x02000000\n\
+_08025F44: .4byte gActiveBank\n\
+_08025F48: .4byte 0x00016003\n\
+_08025F4C: .4byte gBattlescriptCurrInstr\n\
+_08025F50: .4byte BattleScript_MistProtected\n\
+_08025F54:\n\
+ ldr r0, _08025F78 @ =gCurrentMove\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0xAE\n\
+ beq _08025F84\n\
+ mov r3, r10\n\
+ cmp r3, 0x1\n\
+ beq _08025F84\n\
+ movs r0, 0\n\
+ bl JumpIfMoveAffectedByProtect\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08025F84\n\
+ ldr r1, _08025F7C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08025F80 @ =BattleScript_ButItFailed\n\
+ str r0, [r1]\n\
+_08025F74:\n\
+ movs r0, 0x1\n\
+ b _080262A4\n\
+ .align 2, 0\n\
+_08025F78: .4byte gCurrentMove\n\
+_08025F7C: .4byte gBattlescriptCurrInstr\n\
+_08025F80: .4byte BattleScript_ButItFailed\n\
+_08025F84:\n\
+ ldr r2, _08025FCC @ =gBattleMons\n\
+ ldr r1, _08025FD0 @ =gActiveBank\n\
+ ldrb r3, [r1]\n\
+ movs r4, 0x58\n\
+ adds r0, r3, 0\n\
+ muls r0, r4\n\
+ adds r0, r2\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ mov r10, r2\n\
+ cmp r0, 0x1D\n\
+ beq _08025FA0\n\
+ cmp r0, 0x49\n\
+ bne _08026040\n\
+_08025FA0:\n\
+ mov r0, r9\n\
+ cmp r0, 0\n\
+ bne _08026040\n\
+ ldr r0, _08025FD4 @ =gCurrentMove\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0xAE\n\
+ beq _08026040\n\
+ cmp r5, 0x1\n\
+ bne _08025F74\n\
+ ldr r4, _08025FD8 @ =gSpecialStatuses\n\
+ lsls r0, r3, 2\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08025FE0\n\
+ ldr r0, _08025FDC @ =gBattlescriptCurrInstr\n\
+ mov r1, r8\n\
+ str r1, [r0]\n\
+ b _08025F74\n\
+ .align 2, 0\n\
+_08025FCC: .4byte gBattleMons\n\
+_08025FD0: .4byte gActiveBank\n\
+_08025FD4: .4byte gCurrentMove\n\
+_08025FD8: .4byte gSpecialStatuses\n\
+_08025FDC: .4byte gBattlescriptCurrInstr\n\
+_08025FE0:\n\
+ mov r0, r8\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _08026028 @ =0x02000000\n\
+ ldr r2, _0802602C @ =gActiveBank\n\
+ ldrb r1, [r2]\n\
+ ldr r3, _08026030 @ =0x00016003\n\
+ adds r0, r3\n\
+ strb r1, [r0]\n\
+ ldr r1, _08026034 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08026038 @ =BattleScript_AbilityNoStatLoss\n\
+ str r0, [r1]\n\
+ ldr r1, _0802603C @ =gLastUsedAbility\n\
+ ldrb r0, [r2]\n\
+ movs r6, 0x58\n\
+ muls r0, r6\n\
+ add r0, r10\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r2]\n\
+ ldrb r1, [r1]\n\
+ bl RecordAbilityBattle\n\
+ ldr r0, _0802602C @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x1\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ b _08025F74\n\
+ .align 2, 0\n\
+_08026028: .4byte 0x02000000\n\
+_0802602C: .4byte gActiveBank\n\
+_08026030: .4byte 0x00016003\n\
+_08026034: .4byte gBattlescriptCurrInstr\n\
+_08026038: .4byte BattleScript_AbilityNoStatLoss\n\
+_0802603C: .4byte gLastUsedAbility\n\
+_08026040:\n\
+ ldr r1, _08026090 @ =gActiveBank\n\
+ ldrb r0, [r1]\n\
+ movs r4, 0x58\n\
+ muls r0, r4\n\
+ add r0, r10\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x33\n\
+ bne _080260A8\n\
+ mov r2, r9\n\
+ cmp r2, 0\n\
+ bne _080260A8\n\
+ cmp r7, 0x6\n\
+ bne _080260A8\n\
+ cmp r5, 0x1\n\
+ bne _08025F74\n\
+ mov r0, r8\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _08026094 @ =0x02000000\n\
+ ldr r3, _08026090 @ =gActiveBank\n\
+ ldrb r1, [r3]\n\
+ ldr r6, _08026098 @ =0x00016003\n\
+ adds r0, r6\n\
+ strb r1, [r0]\n\
+ ldr r1, _0802609C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _080260A0 @ =BattleScript_AbilityNoSpecificStatLoss\n\
+ str r0, [r1]\n\
+ ldr r1, _080260A4 @ =gLastUsedAbility\n\
+ ldrb r0, [r3]\n\
+ muls r0, r4\n\
+ add r0, r10\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ ldrb r1, [r1]\n\
+ bl RecordAbilityBattle\n\
+ b _08025F74\n\
+ .align 2, 0\n\
+_08026090: .4byte gActiveBank\n\
+_08026094: .4byte 0x02000000\n\
+_08026098: .4byte 0x00016003\n\
+_0802609C: .4byte gBattlescriptCurrInstr\n\
+_080260A0: .4byte BattleScript_AbilityNoSpecificStatLoss\n\
+_080260A4: .4byte gLastUsedAbility\n\
+_080260A8:\n\
+ ldr r1, _080260FC @ =gActiveBank\n\
+ ldrb r0, [r1]\n\
+ movs r4, 0x58\n\
+ muls r0, r4\n\
+ add r0, r10\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x34\n\
+ bne _08026114\n\
+ mov r2, r9\n\
+ cmp r2, 0\n\
+ bne _08026114\n\
+ cmp r7, 0x1\n\
+ bne _08026114\n\
+ cmp r5, 0x1\n\
+ beq _080260CA\n\
+ b _08025F74\n\
+_080260CA:\n\
+ mov r0, r8\n\
+ bl b_movescr_stack_push\n\
+ ldr r0, _08026100 @ =0x02000000\n\
+ ldr r3, _080260FC @ =gActiveBank\n\
+ ldrb r1, [r3]\n\
+ ldr r6, _08026104 @ =0x00016003\n\
+ adds r0, r6\n\
+ strb r1, [r0]\n\
+ ldr r1, _08026108 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _0802610C @ =BattleScript_AbilityNoSpecificStatLoss\n\
+ str r0, [r1]\n\
+ ldr r1, _08026110 @ =gLastUsedAbility\n\
+ ldrb r0, [r3]\n\
+ muls r0, r4\n\
+ add r0, r10\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ ldrb r1, [r1]\n\
+ bl RecordAbilityBattle\n\
+ b _08025F74\n\
+ .align 2, 0\n\
+_080260FC: .4byte gActiveBank\n\
+_08026100: .4byte 0x02000000\n\
+_08026104: .4byte 0x00016003\n\
+_08026108: .4byte gBattlescriptCurrInstr\n\
+_0802610C: .4byte BattleScript_AbilityNoSpecificStatLoss\n\
+_08026110: .4byte gLastUsedAbility\n\
+_08026114:\n\
+ ldr r0, _080261A0 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ add r0, r10\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x13\n\
+ bne _0802612C\n\
+ cmp r5, 0\n\
+ bne _0802612C\n\
+ b _08025F74\n\
+_0802612C:\n\
+ lsls r0, r6, 24\n\
+ asrs r0, 28\n\
+ movs r1, 0x7\n\
+ ands r0, r1\n\
+ negs r0, r0\n\
+ lsls r0, 24\n\
+ ldr r3, _080261A4 @ =gBattleTextBuff2\n\
+ movs r4, 0\n\
+ movs r1, 0xFD\n\
+ strb r1, [r3]\n\
+ movs r2, 0x1\n\
+ lsrs r6, r0, 24\n\
+ asrs r0, 24\n\
+ subs r1, 0xFF\n\
+ cmp r0, r1\n\
+ bne _08026156\n\
+ strb r4, [r3, 0x1]\n\
+ movs r0, 0xD3\n\
+ strb r0, [r3, 0x2]\n\
+ strb r4, [r3, 0x3]\n\
+ movs r2, 0x4\n\
+_08026156:\n\
+ adds r0, r2, r3\n\
+ strb r4, [r0]\n\
+ adds r2, 0x1\n\
+ adds r1, r2, r3\n\
+ movs r0, 0xD4\n\
+ strb r0, [r1]\n\
+ adds r2, 0x1\n\
+ adds r0, r2, r3\n\
+ strb r4, [r0]\n\
+ adds r2, 0x1\n\
+ adds r1, r2, r3\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1]\n\
+ ldr r1, _080261A0 @ =gActiveBank\n\
+ ldrb r2, [r1]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r7, r0\n\
+ mov r1, r10\n\
+ adds r1, 0x18\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0\n\
+ beq _08026206\n\
+ movs r1, 0\n\
+ ldr r0, _080261A8 @ =gBankTarget\n\
+ ldrb r0, [r0]\n\
+ ldr r3, _080261AC @ =gBattleCommunication\n\
+ mov r8, r3\n\
+ cmp r0, r2\n\
+ bne _0802619A\n\
+ movs r1, 0x1\n\
+_0802619A:\n\
+ mov r4, r8\n\
+ strb r1, [r4, 0x5]\n\
+ b _08026234\n\
+ .align 2, 0\n\
+_080261A0: .4byte gActiveBank\n\
+_080261A4: .4byte gBattleTextBuff2\n\
+_080261A8: .4byte gBankTarget\n\
+_080261AC: .4byte gBattleCommunication\n\
+_080261B0:\n\
+ asrs r6, r0, 28\n\
+ movs r0, 0x7\n\
+ ands r6, r0\n\
+ ldr r3, _08026210 @ =gBattleTextBuff2\n\
+ strb r2, [r3]\n\
+ movs r2, 0x1\n\
+ cmp r6, 0x2\n\
+ bne _080261CA\n\
+ strb r4, [r3, 0x1]\n\
+ movs r0, 0xD1\n\
+ strb r0, [r3, 0x2]\n\
+ strb r4, [r3, 0x3]\n\
+ movs r2, 0x4\n\
+_080261CA:\n\
+ adds r0, r2, r3\n\
+ strb r4, [r0]\n\
+ adds r2, 0x1\n\
+ adds r1, r2, r3\n\
+ movs r0, 0xD2\n\
+ strb r0, [r1]\n\
+ adds r2, 0x1\n\
+ adds r0, r2, r3\n\
+ strb r4, [r0]\n\
+ adds r2, 0x1\n\
+ adds r1, r2, r3\n\
+ ldrb r0, [r1]\n\
+ mov r2, r12\n\
+ orrs r0, r2\n\
+ strb r0, [r1]\n\
+ ldr r2, _08026214 @ =gBattleMons\n\
+ ldr r4, _08026218 @ =gActiveBank\n\
+ ldrb r3, [r4]\n\
+ movs r0, 0x58\n\
+ muls r0, r3\n\
+ adds r0, r7, r0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x18\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ mov r10, r2\n\
+ cmp r0, 0xC\n\
+ bne _08026220\n\
+_08026206:\n\
+ ldr r1, _0802621C @ =gBattleCommunication\n\
+ movs r0, 0x2\n\
+ strb r0, [r1, 0x5]\n\
+ mov r8, r1\n\
+ b _08026234\n\
+ .align 2, 0\n\
+_08026210: .4byte gBattleTextBuff2\n\
+_08026214: .4byte gBattleMons\n\
+_08026218: .4byte gActiveBank\n\
+_0802621C: .4byte gBattleCommunication\n\
+_08026220:\n\
+ movs r1, 0\n\
+ ldr r0, _080262B4 @ =gBankTarget\n\
+ ldrb r0, [r0]\n\
+ ldr r2, _080262B8 @ =gBattleCommunication\n\
+ mov r8, r2\n\
+ cmp r0, r3\n\
+ bne _08026230\n\
+ movs r1, 0x1\n\
+_08026230:\n\
+ mov r3, r8\n\
+ strb r1, [r3, 0x5]\n\
+_08026234:\n\
+ ldr r2, _080262BC @ =gActiveBank\n\
+ ldrb r0, [r2]\n\
+ movs r4, 0x58\n\
+ adds r1, r0, 0\n\
+ muls r1, r4\n\
+ adds r1, r7, r1\n\
+ mov r3, r10\n\
+ adds r3, 0x18\n\
+ adds r1, r3\n\
+ lsls r0, r6, 24\n\
+ asrs r0, 24\n\
+ ldrb r6, [r1]\n\
+ adds r0, r6\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r2]\n\
+ muls r0, r4\n\
+ adds r0, r7, r0\n\
+ adds r1, r0, r3\n\
+ movs r0, 0\n\
+ ldrsb r0, [r1, r0]\n\
+ cmp r0, 0\n\
+ bge _08026264\n\
+ movs r0, 0\n\
+ strb r0, [r1]\n\
+_08026264:\n\
+ ldr r1, _080262BC @ =gActiveBank\n\
+ ldrb r0, [r1]\n\
+ muls r0, r4\n\
+ adds r0, r7, r0\n\
+ adds r1, r0, r3\n\
+ movs r0, 0\n\
+ ldrsb r0, [r1, r0]\n\
+ cmp r0, 0xC\n\
+ ble _0802627A\n\
+ movs r0, 0xC\n\
+ strb r0, [r1]\n\
+_0802627A:\n\
+ mov r2, r8\n\
+ ldrb r0, [r2, 0x5]\n\
+ cmp r0, 0x2\n\
+ bne _080262A2\n\
+ movs r3, 0x1\n\
+ ands r3, r5\n\
+ cmp r3, 0\n\
+ beq _08026294\n\
+ ldr r0, _080262C0 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x1\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+_08026294:\n\
+ mov r4, r8\n\
+ ldrb r0, [r4, 0x5]\n\
+ cmp r0, 0x2\n\
+ bne _080262A2\n\
+ cmp r3, 0\n\
+ bne _080262A2\n\
+ b _08025F74\n\
+_080262A2:\n\
+ movs r0, 0\n\
+_080262A4:\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_080262B4: .4byte gBankTarget\n\
+_080262B8: .4byte gBattleCommunication\n\
+_080262BC: .4byte gActiveBank\n\
+_080262C0: .4byte gBattleMoveFlags\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+static void atk89_statbuffchange(void)
+{
+ u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, BSScriptRead8(gBattlescriptCurrInstr + 1), jump_loc) == 0)
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk8A_normalisebuffs(void) //haze
+{
+ int i, j;
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ for (j = 0; j < 8; j++)
+ {
+ gBattleMons[i].statStages[j] = 6;
+ }
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk8B_setbide(void)
+{
+ gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMove[gBankAttacker] = gCurrentMove;
+ gTakenDmg[gBankAttacker] = 0;
+ gBattleMons[gBankAttacker].status2 |= (STATUS2_BIDE - 0x100); //2 turns
+ gBattlescriptCurrInstr++;
+}
+
+static void atk8C_confuseifrepeatingattackends(void)
+{
+ if (!(gBattleMons[gBankAttacker].status2 & STATUS2_LOCK_CONFUSE))
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0x75;
+ gBattlescriptCurrInstr++;
+}
+
+static void atk8D_setmultihit_counter(void)
+{
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1))
+ gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gMultiHitCounter = Random() & 3;
+ if (gMultiHitCounter > 1)
+ gMultiHitCounter = (Random() & 3) + 2;
+ else
+ gMultiHitCounter += 2;
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk8E_prepare_multihit(void)
+{
+ ewram[0x160e0] = 0xFD;
+ ewram[0x160e1] = 1;
+ ewram[0x160e2] = 1;
+ ewram[0x160e3] = 1;
+ ewram[0x160e4] = 0;
+ ewram[0x160e5] = 0xFF;
+ gBattlescriptCurrInstr++;
+}
+
+static bool8 sub_80264C0(void)
+{
+ if (gBattleMons[gBankAttacker].level >= gBattleMons[gBankTarget].level)
+ {
+ ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget];
+ }
+ else
+ {
+ u16 random = Random() & 0xFF;
+ if ((u32)((random * (gBattleMons[gBankAttacker].level + gBattleMons[gBankTarget].level) >> 8) + 1) <= (gBattleMons[gBankTarget].level / 4))
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ return 0;
+ }
+ ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget];
+ }
+ gBattlescriptCurrInstr = gUnknown_081D90FC;
+ return 1;
+}
+
+static void atk8F_forcerandomswitch(void)
+{
+ if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER))
+ {
+ u8 i;
+ struct Pokemon* poke;
+ u8 valid;
+ u8 val;
+ if (!GetBankSide(gBankTarget))
+ poke = gPlayerParty;
+ else
+ poke = gEnemyParty;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ valid = 0;
+ val = 0;
+ if (sub_803FBFC(sub_803FC34(gBankTarget)) == 1)
+ val = 3;
+ for (i = val; i < val + 3; i++)
+ {
+ if (ValidPoke(&poke[i]))
+ valid++;
+ }
+ }
+ else
+ {
+ valid = 0;
+ for (i = 0; i < 6; i++)
+ {
+ if (ValidPoke(&poke[i]))
+ valid++;
+ }
+ }
+
+ if ((valid < 2 && (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE)
+ || (valid < 3 && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+ else if (sub_80264C0())
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ do
+ {
+ val = Random() % 3;
+ if (sub_803FBFC(sub_803FC34(gBankTarget)) == 1)
+ i = val + 3;
+ else
+ i = val;
+ } while (i == gBattlePartyID[gBankTarget] || i == gBattlePartyID[gBankTarget ^ 2] || !ValidPoke3(&poke[i]));
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ do
+ {
+ i = Random() % 6;
+ } while (i == gBattlePartyID[gBankTarget] || i == gBattlePartyID[gBankTarget ^ 2] || !ValidPoke3(&poke[i]));
+ }
+ else
+ {
+ do
+ {
+ i = Random() % 6;
+ } while (i == gBattlePartyID[gBankTarget] || !ValidPoke3(&poke[i]));
+ }
+ }
+ ewram[gBankTarget + 0x16068] = i;
+ if (!IsLinkDoubleBattle())
+ sub_8012258(gBankTarget);
+ sub_8094B6C(gBankTarget, i, 0);
+ sub_8094B6C(gBankTarget ^ 2, i, 1);
+ }
+ }
+ else
+ {
+ sub_80264C0();
+ }
+}
+
+static void atk90_conversion_type_change(void)
+{
+ //randomly changes user's type to one of its moves' type
+ u8 valid_moves = 0;
+ u8 checked_move;
+ u8 move_type;
+ while (valid_moves < 4)
+ {
+ if (gBattleMons[gBankAttacker].moves[valid_moves] == 0)
+ break;
+ valid_moves++;
+ }
+
+ for (checked_move = 0; checked_move < valid_moves; checked_move++)
+ {
+ move_type = gBattleMoves[gBattleMons[gBankAttacker].moves[checked_move]].type;
+ if (move_type == TYPE_MYSTERY)
+ {
+ if (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST)
+ move_type = TYPE_GHOST;
+ else
+ move_type = TYPE_NORMAL;
+ }
+ if (move_type != gBattleMons[gBankAttacker].type1 && move_type != gBattleMons[gBankAttacker].type2)
+ break;
+ }
+
+ if (checked_move == valid_moves)
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ do
+ {
+
+ while ((checked_move = Random() & 3) >= valid_moves);
+
+ move_type = gBattleMoves[gBattleMons[gBankAttacker].moves[checked_move]].type;
+ if (move_type == TYPE_MYSTERY)
+ {
+ if (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST)
+ move_type = TYPE_GHOST;
+ else
+ move_type = TYPE_NORMAL;
+ }
+ } while (move_type == gBattleMons[gBankAttacker].type1 || move_type == gBattleMons[gBankAttacker].type2);
+
+ gBattleMons[gBankAttacker].type1 = move_type;
+ gBattleMons[gBankAttacker].type2 = move_type;
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 3;
+ gBattleTextBuff1[2] = move_type;
+ gBattleTextBuff1[3] = 0xFF;
+
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atk91_givepaydaymoney(void)
+{
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney)
+ {
+ sub_80B79B8(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier);
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 1;
+ gBattleTextBuff1[2] = 2;
+ gBattleTextBuff1[3] = 5;
+ gBattleTextBuff1[4] = gPaydayMoney;
+ gBattleTextBuff1[5] = uBYTE1_16(gPaydayMoney);
+ gBattleTextBuff1[6] = 0xFF;
+ b_movescr_stack_push(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = gUnknown_081D95DB;
+ }
+ else
+ gBattlescriptCurrInstr++;
+}
+
+static void atk92_setlightscreen(void)
+{
+ if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_LIGHTSCREEN)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else
+ {
+ gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_LIGHTSCREEN;
+ gSideTimer[GetBankIdentity(gBankAttacker) & 1].lightscreenTimer = 5;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+#ifdef NOTMATCHING
+static void atk93_ko_move(void)
+{
+ if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
+ hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ else
+ {
+ hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
+ quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item);
+ }
+
+ gStringBank = gBankTarget;
+
+ if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality)
+ {
+ RecordItemBattle(gBankTarget, hold_effect);
+ gSpecialStatuses[gBankTarget].focusBanded = 1;
+ }
+
+ if (gBattleMons[gBankTarget].ability == ABILITY_STURDY)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gLastUsedAbility = ABILITY_STURDY;
+ gBattlescriptCurrInstr = x;
+ RecordAbilityBattle(gBankTarget, ABILITY_STURDY);
+ return;
+ }
+
+ if (!(gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS))
+ {
+ u16 to_cmp = gBattleMons[gBankAttacker].level - gBattleMons[gBankTarget].level + gBattleMoves[gCurrentMove].accuracy;
+ if (Random() % 0x64 + 1 < to_cmp || gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level)
+ {
+ goto MOVE_MISSED_LABEL;
+ }
+ }
+ else
+ {
+ if (gDisableStructs[gBankTarget].bankWithSureHit != gBankAttacker || gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level)
+ {
+
+ }
+ }
+
+MOVE_MISSED_LABEL:
+ gBattleTypeFlags |= MOVE_MISSED;
+ if (gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+#else
+__attribute((naked))
+static void atk93_ko_move(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ ldr r7, _08026BA8 @ =gBattleMons\n\
+ ldr r6, _08026BAC @ =gBankTarget\n\
+ ldrb r2, [r6]\n\
+ movs r5, 0x58\n\
+ adds r0, r2, 0\n\
+ muls r0, r5\n\
+ adds r1, r0, r7\n\
+ ldrh r0, [r1, 0x2E]\n\
+ cmp r0, 0xAF\n\
+ bne _08026BB4\n\
+ ldr r1, _08026BB0 @ =gEnigmaBerries\n\
+ lsls r0, r2, 3\n\
+ subs r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r4, [r0, 0x7]\n\
+ ldrb r6, [r0, 0x1A]\n\
+ b _08026BCE\n\
+ .align 2, 0\n\
+_08026BA8: .4byte gBattleMons\n\
+_08026BAC: .4byte gBankTarget\n\
+_08026BB0: .4byte gEnigmaBerries\n\
+_08026BB4:\n\
+ ldrh r0, [r1, 0x2E]\n\
+ bl ItemId_GetHoldEffect\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ ldrb r0, [r6]\n\
+ muls r0, r5\n\
+ adds r0, r7\n\
+ ldrh r0, [r0, 0x2E]\n\
+ bl ItemId_GetHoldEffectParam\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+_08026BCE:\n\
+ ldr r1, _08026C4C @ =gStringBank\n\
+ ldr r5, _08026C50 @ =gBankTarget\n\
+ ldrb r0, [r5]\n\
+ strb r0, [r1]\n\
+ cmp r4, 0x27\n\
+ bne _08026C0C\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x64\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, r6\n\
+ bcs _08026C0C\n\
+ ldrb r0, [r5]\n\
+ movs r1, 0x27\n\
+ bl RecordItemBattle\n\
+ ldr r2, _08026C54 @ =gSpecialStatuses\n\
+ ldrb r1, [r5]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x80\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+_08026C0C:\n\
+ ldr r0, _08026C58 @ =gBattleMons\n\
+ mov r8, r0\n\
+ ldr r1, _08026C50 @ =gBankTarget\n\
+ ldrb r2, [r1]\n\
+ movs r6, 0x58\n\
+ adds r0, r2, 0\n\
+ muls r0, r6\n\
+ mov r3, r8\n\
+ adds r5, r0, r3\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x20\n\
+ ldrb r3, [r0]\n\
+ mov r10, r8\n\
+ cmp r3, 0x5\n\
+ bne _08026C6C\n\
+ ldr r2, _08026C5C @ =gBattleMoveFlags\n\
+ ldrb r0, [r2]\n\
+ movs r1, 0x1\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r0, _08026C60 @ =gLastUsedAbility\n\
+ strb r3, [r0]\n\
+ ldr r1, _08026C64 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08026C68 @ =gUnknown_081D9826\n\
+ str r0, [r1]\n\
+ ldr r1, _08026C50 @ =gBankTarget\n\
+ ldrb r0, [r1]\n\
+ movs r1, 0x5\n\
+ bl RecordAbilityBattle\n\
+ b _08026E40\n\
+ .align 2, 0\n\
+_08026C4C: .4byte gStringBank\n\
+_08026C50: .4byte gBankTarget\n\
+_08026C54: .4byte gSpecialStatuses\n\
+_08026C58: .4byte gBattleMons\n\
+_08026C5C: .4byte gBattleMoveFlags\n\
+_08026C60: .4byte gLastUsedAbility\n\
+_08026C64: .4byte gBattlescriptCurrInstr\n\
+_08026C68: .4byte gUnknown_081D9826\n\
+_08026C6C:\n\
+ ldr r1, _08026CE0 @ =gStatuses3\n\
+ lsls r0, r2, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x18\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08026CF4\n\
+ ldr r1, _08026CE4 @ =gBattleMoves\n\
+ ldr r0, _08026CE8 @ =gCurrentMove\n\
+ ldrh r0, [r0]\n\
+ lsls r2, r0, 1\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r1\n\
+ ldr r7, _08026CEC @ =gBankAttacker\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ add r0, r10\n\
+ adds r0, 0x2A\n\
+ ldrb r0, [r0]\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ ldrb r1, [r1]\n\
+ subs r0, r1\n\
+ ldrb r2, [r2, 0x3]\n\
+ adds r0, r2\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x64\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ adds r0, 0x1\n\
+ cmp r0, r4\n\
+ bge _08026CDC\n\
+ ldrb r0, [r7]\n\
+ adds r1, r0, 0\n\
+ muls r1, r6\n\
+ add r1, r10\n\
+ adds r1, 0x2A\n\
+ ldr r2, _08026CF0 @ =gBankTarget\n\
+ ldrb r0, [r2]\n\
+ muls r0, r6\n\
+ add r0, r10\n\
+ adds r0, 0x2A\n\
+ ldrb r1, [r1]\n\
+ movs r4, 0x1\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ bcs _08026D20\n\
+_08026CDC:\n\
+ mov r10, r8\n\
+ b _08026DE0\n\
+ .align 2, 0\n\
+_08026CE0: .4byte gStatuses3\n\
+_08026CE4: .4byte gBattleMoves\n\
+_08026CE8: .4byte gCurrentMove\n\
+_08026CEC: .4byte gBankAttacker\n\
+_08026CF0: .4byte gBankTarget\n\
+_08026CF4:\n\
+ ldr r0, _08026D4C @ =gDisableStructs\n\
+ lsls r1, r2, 3\n\
+ subs r1, r2\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldr r2, _08026D50 @ =gBankAttacker\n\
+ ldrb r0, [r1, 0x15]\n\
+ movs r4, 0\n\
+ ldrb r3, [r2]\n\
+ cmp r0, r3\n\
+ bne _08026D20\n\
+ ldrb r0, [r2]\n\
+ muls r0, r6\n\
+ add r0, r10\n\
+ adds r0, 0x2A\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ ldrb r0, [r0]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bcc _08026D20\n\
+ movs r4, 0x1\n\
+_08026D20:\n\
+ cmp r4, 0\n\
+ beq _08026DE0\n\
+ ldr r0, _08026D54 @ =gProtectStructs\n\
+ ldr r1, _08026D58 @ =gBankTarget\n\
+ ldrb r2, [r1]\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 30\n\
+ cmp r0, 0\n\
+ bge _08026D64\n\
+ ldr r1, _08026D5C @ =gBattleMoveDamage\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ add r0, r10\n\
+ ldrh r0, [r0, 0x28]\n\
+ subs r0, 0x1\n\
+ str r0, [r1]\n\
+ ldr r2, _08026D60 @ =gBattleMoveFlags\n\
+ ldrb r0, [r2]\n\
+ movs r1, 0x40\n\
+ b _08026DC6\n\
+ .align 2, 0\n\
+_08026D4C: .4byte gDisableStructs\n\
+_08026D50: .4byte gBankAttacker\n\
+_08026D54: .4byte gProtectStructs\n\
+_08026D58: .4byte gBankTarget\n\
+_08026D5C: .4byte gBattleMoveDamage\n\
+_08026D60: .4byte gBattleMoveFlags\n\
+_08026D64:\n\
+ ldr r0, _08026DA0 @ =gSpecialStatuses\n\
+ lsls r1, r2, 2\n\
+ adds r1, r2\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ lsrs r0, 7\n\
+ cmp r0, 0\n\
+ beq _08026DB4\n\
+ ldr r1, _08026DA4 @ =gBattleMoveDamage\n\
+ movs r3, 0x58\n\
+ adds r0, r2, 0\n\
+ muls r0, r3\n\
+ add r0, r10\n\
+ ldrh r0, [r0, 0x28]\n\
+ subs r0, 0x1\n\
+ str r0, [r1]\n\
+ ldr r2, _08026DA8 @ =gBattleMoveFlags\n\
+ ldrb r0, [r2]\n\
+ movs r1, 0x80\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r1, _08026DAC @ =gLastUsedItem\n\
+ ldr r2, _08026DB0 @ =gBankTarget\n\
+ ldrb r0, [r2]\n\
+ muls r0, r3\n\
+ add r0, r10\n\
+ ldrh r0, [r0, 0x2E]\n\
+ strh r0, [r1]\n\
+ b _08026DCA\n\
+ .align 2, 0\n\
+_08026DA0: .4byte gSpecialStatuses\n\
+_08026DA4: .4byte gBattleMoveDamage\n\
+_08026DA8: .4byte gBattleMoveFlags\n\
+_08026DAC: .4byte gLastUsedItem\n\
+_08026DB0: .4byte gBankTarget\n\
+_08026DB4:\n\
+ ldr r1, _08026DD4 @ =gBattleMoveDamage\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ add r0, r10\n\
+ ldrh r0, [r0, 0x28]\n\
+ str r0, [r1]\n\
+ ldr r2, _08026DD8 @ =gBattleMoveFlags\n\
+ ldrb r0, [r2]\n\
+ movs r1, 0x10\n\
+_08026DC6:\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+_08026DCA:\n\
+ ldr r1, _08026DDC @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x5\n\
+ str r0, [r1]\n\
+ b _08026E40\n\
+ .align 2, 0\n\
+_08026DD4: .4byte gBattleMoveDamage\n\
+_08026DD8: .4byte gBattleMoveFlags\n\
+_08026DDC: .4byte gBattlescriptCurrInstr\n\
+_08026DE0:\n\
+ ldr r2, _08026E10 @ =gBattleMoveFlags\n\
+ ldrb r0, [r2]\n\
+ movs r1, 0x1\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r0, _08026E14 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ movs r2, 0x58\n\
+ adds r1, r0, 0\n\
+ muls r1, r2\n\
+ add r1, r10\n\
+ adds r1, 0x2A\n\
+ ldr r3, _08026E18 @ =gBankTarget\n\
+ ldrb r0, [r3]\n\
+ muls r0, r2\n\
+ add r0, r10\n\
+ adds r0, 0x2A\n\
+ ldrb r1, [r1]\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ bcc _08026E20\n\
+ ldr r1, _08026E1C @ =gBattleCommunication\n\
+ movs r0, 0\n\
+ b _08026E24\n\
+ .align 2, 0\n\
+_08026E10: .4byte gBattleMoveFlags\n\
+_08026E14: .4byte gBankAttacker\n\
+_08026E18: .4byte gBankTarget\n\
+_08026E1C: .4byte gBattleCommunication\n\
+_08026E20:\n\
+ ldr r1, _08026E50 @ =gBattleCommunication\n\
+ movs r0, 0x1\n\
+_08026E24:\n\
+ strb r0, [r1, 0x5]\n\
+ ldr r3, _08026E54 @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+_08026E40:\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08026E50: .4byte gBattleCommunication\n\
+_08026E54: .4byte gBattlescriptCurrInstr\n\
+ .syntax divided");
+}
+#endif // NOTMATCHING
+
+static void atk94_gethalfcurrentenemyhp(void) //super fang
+{
+ gBattleMoveDamage = gBattleMons[gBankTarget].hp / 2;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ gBattlescriptCurrInstr++;
+}
+
+static void atk95_setsandstorm(void)
+{
+ if (gBattleWeather & WEATHER_SANDSTORMY)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = weather_sandstorm;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk96_weatherdamage(void)
+{
+ if (WeatherHasEffect)
+ {
+ if (gBattleWeather & WEATHER_SANDSTORMY)
+ {
+ if (gBattleMons[gBankAttacker].type1 != TYPE_ROCK && gBattleMons[gBankAttacker].type1 != TYPE_STEEL && gBattleMons[gBankAttacker].type1 != TYPE_GROUND
+ && gBattleMons[gBankAttacker].type2 != TYPE_ROCK && gBattleMons[gBankAttacker].type2 != TYPE_STEEL && gBattleMons[gBankAttacker].type2 != TYPE_GROUND
+ && gBattleMons[gBankAttacker].ability != ABILITY_SAND_VEIL && !(gStatuses3[gBankAttacker] & STATUS3_UNDERGROUND) && !(gStatuses3[gBankAttacker] & STATUS3_UNDERWATER))
+ {
+ gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ }
+ else
+ gBattleMoveDamage = 0;
+ }
+ if (gBattleWeather & weather_hail)
+ {
+ if (gBattleMons[gBankAttacker].type1 != TYPE_ICE && gBattleMons[gBankAttacker].type2 != TYPE_ICE && !(gStatuses3[gBankAttacker] & STATUS3_UNDERGROUND) && !(gStatuses3[gBankAttacker] & STATUS3_UNDERWATER))
+ {
+ gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ }
+ else
+ gBattleMoveDamage = 0;
+ }
+ }
+ else
+ gBattleMoveDamage = 0;
+
+ if (gAbsentBankFlags & gBitTable[gBankAttacker])
+ gBattleMoveDamage = 0;
+
+ gBattlescriptCurrInstr++;
+}
+
+static void atk97_try_infatuation(void)
+{
+ struct Pokemon *attacker, *target;
+ u16 atk_species, def_species;
+ u32 atk_pid, def_pid;
+ if (!GetBankSide(gBankAttacker))
+ attacker = &gPlayerParty[gBattlePartyID[gBankAttacker]];
+ else
+ attacker = &gEnemyParty[gBattlePartyID[gBankAttacker]];
+
+ if (!GetBankSide(gBankTarget))
+ target = &gPlayerParty[gBattlePartyID[gBankTarget]];
+ else
+ target = &gEnemyParty[gBattlePartyID[gBankTarget]];
+
+ atk_species = GetMonData(attacker, MON_DATA_SPECIES);
+ atk_pid = GetMonData(attacker, MON_DATA_PERSONALITY);
+
+ def_species = GetMonData(target, MON_DATA_SPECIES);
+ def_pid = GetMonData(target, MON_DATA_PERSONALITY);
+
+ if (gBattleMons[gBankTarget].ability == ABILITY_OBLIVIOUS)
+ {
+ gBattlescriptCurrInstr = BattleScript_ObliviousPreventsAttraction;
+ gLastUsedAbility = ABILITY_OBLIVIOUS;
+ RecordAbilityBattle(gBankTarget, ABILITY_OBLIVIOUS);
+ }
+ else
+ {
+ if (GetGenderFromSpeciesAndPersonality(atk_species, atk_pid) == GetGenderFromSpeciesAndPersonality(def_species, def_pid)
+ || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE || gBattleMons[gBankTarget].status2 & STATUS2_INFATUATION || GetGenderFromSpeciesAndPersonality(atk_species, atk_pid) == 0xFF
+ || GetGenderFromSpeciesAndPersonality(def_species, def_pid) == 0xFF)
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gBattleMons[gBankTarget].status2 |= (gBitTable[gBankAttacker] << 16);
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+}
+
+static void atk98_status_icon_update(void)
+{
+ if (gBattleExecBuffer)
+ return;
+
+ if (BSScriptRead8(gBattlescriptCurrInstr + 1) != 4)
+ {
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 2;
+ }
+ else
+ {
+ gActiveBank = gBankAttacker;
+ if (!(gAbsentBankFlags & gBitTable[gActiveBank]))
+ {
+ EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2);
+ if (!(gAbsentBankFlags & gBitTable[gActiveBank]))
+ {
+ EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+static void atk99_setmist(void)
+{
+ if (gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer)
+ {
+ gBattleMoveFlags |= MOVE_FAILED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer = 5;
+ gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_MIST;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk9A_set_focusenergy(void)
+{
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY)
+ {
+ gBattleMoveFlags |= MOVE_FAILED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gBattleMons[gBankAttacker].status2 |= STATUS2_FOCUS_ENERGY;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atk9B_transformdataexecution(void)
+{
+ gUnknown_02024BE8 = 0xFFFF;
+ gBattlescriptCurrInstr++;
+ if (gBattleMons[gBankTarget].status2 & STATUS2_TRANSFORMED || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE)
+ {
+ gBattleMoveFlags |= MOVE_FAILED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ u32 i; s32 j;
+ u8 *atk_data, *def_data;
+ gBattleMons[gBankAttacker].status2 |= STATUS2_TRANSFORMED;
+ gDisableStructs[gBankAttacker].disabledMove = 0;
+ gDisableStructs[gBankAttacker].disableTimer1 = 0;
+ gDisableStructs[gBankAttacker].unk0 = gBattleMons[gBankTarget].personality;
+ gDisableStructs[gBankAttacker].unk18_b = 0;
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 6;
+ gBattleTextBuff1[2] = (gBattleMons[gBankTarget].species);
+ gBattleTextBuff1[3] = uBYTE1_16(gBattleMons[gBankTarget].species);
+ gBattleTextBuff1[4] = 0xFF;
+
+ atk_data = (u8*)(&gBattleMons[gBankAttacker]);
+ def_data = (u8*)(&gBattleMons[gBankTarget]);
+
+ for (i = 0; i < 0x24; i++)
+ atk_data[i] = def_data[i];
+
+ for (j = 0; j < 4; j++)
+ {
+ if (gBattleMoves[gBattleMons[gBankAttacker].moves[j]].pp < 5)
+ gBattleMons[gBankAttacker].pp[j] = gBattleMoves[gBattleMons[gBankAttacker].moves[j]].pp;
+ else
+ gBattleMons[gBankAttacker].pp[j] = 5;
+ }
+
+ gActiveBank = gBankAttacker;
+ EmitResetActionMoveSelection(0, 2);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+}
+
+static void atk9C_set_substitute(void)
+{
+ u32 hp = gBattleMons[gBankAttacker].maxHP / 4;
+ if (gBattleMons[gBankAttacker].maxHP / 4 == 0)
+ hp = 1;
+ if (gBattleMons[gBankAttacker].hp <= hp)
+ {
+ gBattleMoveDamage = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 4;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ gBattleMons[gBankAttacker].status2 |= STATUS2_SUBSTITUTE;
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_WRAPPED);
+ gDisableStructs[gBankAttacker].substituteHP = gBattleMoveDamage;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static bool8 IsMoveUncopyable(u16 move)
+{
+ int i;
+ for (i = 0; sUnknown_081FACFE[i] != 0xFFFE && sUnknown_081FACFE[i] != move; i++) {}
+ return (sUnknown_081FACFE[i] != 0xFFFE);
+}
+
+static void atk9D_copyattack(void)
+{
+ gUnknown_02024BE8 = 0xFFFF;
+ if (IsMoveUncopyable(gLastUsedMove[gBankTarget]) || gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED
+ || gLastUsedMove[gBankTarget] == 0 || gLastUsedMove[gBankTarget] == 0xFFFF)
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[gBankAttacker].moves[i] == gLastUsedMove[gBankTarget])
+ break;
+ }
+ if (i == 4)
+ {
+ gBattleMons[gBankAttacker].moves[gCurrMovePos] = gLastUsedMove[gBankTarget];
+ if (gBattleMoves[gLastUsedMove[gBankTarget]].pp < 5)
+ gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gLastUsedMove[gBankTarget]].pp;
+ else
+ gBattleMons[gBankAttacker].pp[gCurrMovePos] = 5;
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = gLastUsedMove[gBankTarget];
+ gBattleTextBuff1[3] = uBYTE1_16(gLastUsedMove[gBankTarget]);
+ gBattleTextBuff1[4] = 0xFF;
+
+ gDisableStructs[gBankAttacker].unk18_b |= gBitTable[gCurrMovePos];
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+}
+
+#ifdef NONMATCHING
+static void atk9E_metronome(void)
+{
+ // sUnknown_081FACFE
+ int i;
+ do
+ {
+ while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162);
+ for (i = 0; sUnknown_081FACFE[i] != gCurrentMove && sUnknown_081FACFE[i] != 0xFFFF; i++);
+ } while (sUnknown_081FACFE[i] != 0xFFFF);
+
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
+ gBankTarget = sub_801B5C0(gCurrentMove, 0);
+}
+
+#else
+__attribute__((naked))
+static void atk9E_metronome(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ ldr r7, _08027938 @ =gCurrentMove\n\
+ movs r6, 0xB1\n\
+ lsls r6, 1\n\
+ ldr r5, _0802793C @ =sUnknown_081FACFE\n\
+ ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\
+ mov r8, r0\n\
+_080278CA:\n\
+ bl Random\n\
+ ldr r2, _08027944 @ =0x000001ff\n\
+ adds r1, r2, 0\n\
+ ands r0, r1\n\
+ adds r0, 0x1\n\
+ strh r0, [r7]\n\
+ cmp r0, r6\n\
+ bhi _080278CA\n\
+ movs r0, 0x3\n\
+_080278DE:\n\
+ subs r0, 0x1\n\
+ cmp r0, 0\n\
+ bge _080278DE\n\
+ ldr r4, _08027938 @ =gCurrentMove\n\
+ ldrh r2, [r4]\n\
+ ldr r3, _08027948 @ =0x0000ffff\n\
+ subs r0, r5, 0x2\n\
+_080278EC:\n\
+ adds r0, 0x2\n\
+ ldrh r1, [r0]\n\
+ cmp r1, r2\n\
+ beq _080278F8\n\
+ cmp r1, r3\n\
+ bne _080278EC\n\
+_080278F8:\n\
+ ldr r0, _08027948 @ =0x0000ffff\n\
+ cmp r1, r0\n\
+ bne _080278CA\n\
+ ldr r2, _0802794C @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08027950 @ =0xfffffbff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r3, _08027954 @ =gBattleScriptsEffectsTable\n\
+ ldr r2, _08027958 @ =gBattleMoves\n\
+ ldrh r1, [r4]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ ldr r0, [r0]\n\
+ mov r1, r8\n\
+ str r0, [r1]\n\
+ ldrh r0, [r4]\n\
+ movs r1, 0\n\
+ bl sub_801B5C0\n\
+ ldr r1, _0802795C @ =gBankTarget\n\
+ strb r0, [r1]\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08027938: .4byte gCurrentMove\n\
+_0802793C: .4byte sUnknown_081FACFE\n\
+_08027940: .4byte gBattlescriptCurrInstr\n\
+_08027944: .4byte 0x000001ff\n\
+_08027948: .4byte 0x0000ffff\n\
+_0802794C: .4byte gHitMarker\n\
+_08027950: .4byte 0xfffffbff\n\
+_08027954: .4byte gBattleScriptsEffectsTable\n\
+_08027958: .4byte gBattleMoves\n\
+_0802795C: .4byte gBankTarget\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+static void atk9F_dmgtolevel(void)
+{
+ gBattleMoveDamage = gBattleMons[gBankAttacker].level;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkA0_psywavedamageeffect(void)
+{
+ s32 rand_dmg;
+ while ((rand_dmg = (Random() & 0xF)) > 0xA);
+ rand_dmg *= 10;
+ gBattleMoveDamage = gBattleMons[gBankAttacker].level * (rand_dmg + 50) / 100;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkA1_counterdamagecalculator(void)
+{
+ u8 atk_side = GetBankSide(gBankAttacker);
+ u8 def_side = GetBankSide(gProtectStructs[gBankAttacker].physicalBank);
+ if (gProtectStructs[gBankAttacker].physicalDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].physicalBank].hp)
+ {
+ gBattleMoveDamage = gProtectStructs[gBankAttacker].physicalDmg * 2;
+ if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp)
+ gBankTarget = gSideTimer[def_side].followmeTarget;
+ else
+ gBankTarget = gProtectStructs[gBankAttacker].physicalBank;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gSpecialStatuses[gBankAttacker].flag20 = 1;
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkA2_mirrorcoatdamagecalculator(void) //a copy of atkA1 with the physical -> special field changes
+{
+ u8 atk_side = GetBankSide(gBankAttacker);
+ u8 def_side = GetBankSide(gProtectStructs[gBankAttacker].specialBank);
+ if (gProtectStructs[gBankAttacker].specialDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].specialBank].hp)
+ {
+ gBattleMoveDamage = gProtectStructs[gBankAttacker].specialDmg * 2;
+ if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp)
+ gBankTarget = gSideTimer[def_side].followmeTarget;
+ else
+ gBankTarget = gProtectStructs[gBankAttacker].specialBank;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gSpecialStatuses[gBankAttacker].flag20 = 1;
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkA3_disablelastusedattack(void)
+{
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[gBankTarget].moves[i] == gLastUsedMove[gBankTarget])
+ break;
+ }
+ if (gDisableStructs[gBankTarget].disabledMove == 0 && i != 4 && gBattleMons[gBankTarget].pp[i] != 0)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = gBattleMons[gBankTarget].moves[i];
+ gBattleTextBuff1[3] = uBYTE1_16(gBattleMons[gBankTarget].moves[i]);
+ gBattleTextBuff1[4] = 0xFF;
+
+ gDisableStructs[gBankTarget].disabledMove = gBattleMons[gBankTarget].moves[i];
+ gDisableStructs[gBankTarget].disableTimer1 = (Random() & 3) + 2;
+ gDisableStructs[gBankTarget].disableTimer2 = gDisableStructs[gBankTarget].disableTimer1; //that's interesting
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkA4_setencore(void)
+{
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[gBankTarget].moves[i] == gLastUsedMove[gBankTarget])
+ break;
+ }
+ if (gLastUsedMove[gBankTarget] == MOVE_STRUGGLE || gLastUsedMove[gBankTarget] == MOVE_ENCORE || gLastUsedMove[gBankTarget] == MOVE_MIRROR_MOVE)
+ i = 4;
+ if (gDisableStructs[gBankTarget].encoredMove == 0 && i != 4 && gBattleMons[gBankTarget].pp[i] != 0)
+ {
+ gDisableStructs[gBankTarget].encoredMove = gBattleMons[gBankTarget].moves[i];
+ gDisableStructs[gBankTarget].encoredMovePos = i;
+ gDisableStructs[gBankTarget].encoreTimer1 = (Random() & 3) + 3;
+ gDisableStructs[gBankTarget].encoreTimer2 = gDisableStructs[gBankTarget].encoreTimer1;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkA5_painsplitdmgcalc(void)
+{
+ if (!(gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE))
+ {
+ s32 hp_diff = (gBattleMons[gBankAttacker].hp + gBattleMons[gBankTarget].hp) / 2;
+ s32 to_store = gBattleMoveDamage = gBattleMons[gBankTarget].hp - hp_diff;
+ BATTLE_STRUCT->unk16014 = sBYTE0_32(to_store);
+ BATTLE_STRUCT->unk16015 = sBYTE1_32(to_store);
+ BATTLE_STRUCT->unk16016 = sBYTE2_32(to_store);
+ BATTLE_STRUCT->unk16017 = sBYTE3_32(to_store);
+
+ gBattleMoveDamage = gBattleMons[gBankAttacker].hp - hp_diff;
+ gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF;
+
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+#ifdef NONMATCHING
+static void atkA6_settypetorandomresistance(void)
+{
+ if (gMoveHitWith[gBankAttacker] == 0 || gMoveHitWith[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gMoveHitWith[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg))
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ int type = 0, rands = 0;
+ do
+ {
+ while (((type = (Random() & 0x7F)) > 0x70));
+ type *= 3;
+ if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
+ {
+ gBattleMons[gBankAttacker].type1 = type;
+ gBattleMons[gBankAttacker].type2 = type;
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 3;
+ gBattleTextBuff1[2] = type;
+ gBattleTextBuff1[3] = 0xFF;
+ gBattlescriptCurrInstr += 5;
+ return;
+ }
+ rands++;
+ } while (rands <= 999);
+
+ type = 0, rands = 0;
+ do
+ {
+ if (gTypeEffectiveness[type] == 0xFE || gTypeEffectiveness[type] != 0xFF)
+ {
+ if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
+ {
+ gBattleMons[gBankAttacker].type1 = gTypeEffectiveness[rands + 1];
+ gBattleMons[gBankAttacker].type2 = gTypeEffectiveness[rands + 1];
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 3;
+ gBattleTextBuff1[2] = gTypeEffectiveness[rands + 1];
+ gBattleTextBuff1[3] = 0xFF;
+ gBattlescriptCurrInstr += 5;
+ return;
+ }
+ }
+ type += 3, rands += 3;
+ } while (rands < 336);
+
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+}
+
+#else
+__attribute__((naked))
+static void atkA6_settypetorandomresistance(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ ldr r1, _08027FA8 @ =gMoveHitWith\n\
+ ldr r4, _08027FAC @ =gBankAttacker\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 1\n\
+ adds r2, r0, r1\n\
+ ldrh r1, [r2]\n\
+ cmp r1, 0\n\
+ beq _08027F8C\n\
+ ldr r0, _08027FB0 @ =0x0000ffff\n\
+ cmp r1, r0\n\
+ beq _08027F8C\n\
+ ldrh r0, [r2]\n\
+ bl IsTwoTurnsMove\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08028024\n\
+ ldr r2, _08027FB4 @ =gProtectStructs\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 4\n\
+ adds r0, r2, 0x4\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08028024\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08028024\n\
+_08027F8C:\n\
+ ldr r3, _08027FB8 @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+ b _08028110\n\
+ .align 2, 0\n\
+_08027FA8: .4byte gMoveHitWith\n\
+_08027FAC: .4byte gBankAttacker\n\
+_08027FB0: .4byte 0x0000ffff\n\
+_08027FB4: .4byte gProtectStructs\n\
+_08027FB8: .4byte gBattlescriptCurrInstr\n\
+_08027FBC:\n\
+ mov r0, r12\n\
+ strb r5, [r0]\n\
+ mov r1, r10\n\
+ ldrb r0, [r1]\n\
+ muls r0, r2\n\
+ adds r0, r7\n\
+ adds r0, 0x22\n\
+ strb r5, [r0]\n\
+ ldr r1, _08027FE0 @ =gBattleTextBuff1\n\
+ movs r0, 0xFD\n\
+ strb r0, [r1]\n\
+ movs r0, 0x3\n\
+ strb r0, [r1, 0x1]\n\
+ strb r5, [r1, 0x2]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x3]\n\
+ ldr r1, _08027FE4 @ =gBattlescriptCurrInstr\n\
+ b _08028012\n\
+ .align 2, 0\n\
+_08027FE0: .4byte gBattleTextBuff1\n\
+_08027FE4: .4byte gBattlescriptCurrInstr\n\
+_08027FE8:\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ adds r0, r3\n\
+ ldrb r2, [r0]\n\
+ strb r2, [r4]\n\
+ mov r4, r10\n\
+ ldrb r0, [r4]\n\
+ muls r0, r6\n\
+ ldr r7, _0802801C @ =gBattleMons\n\
+ adds r0, r7\n\
+ adds r0, 0x22\n\
+ strb r2, [r0]\n\
+ ldr r1, _08028020 @ =gBattleTextBuff1\n\
+ movs r0, 0xFD\n\
+ strb r0, [r1]\n\
+ movs r0, 0x3\n\
+ strb r0, [r1, 0x1]\n\
+ strb r2, [r1, 0x2]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x3]\n\
+ mov r1, r12\n\
+_08028012:\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x5\n\
+ str r0, [r1]\n\
+ b _08028110\n\
+ .align 2, 0\n\
+_0802801C: .4byte gBattleMons\n\
+_08028020: .4byte gBattleTextBuff1\n\
+_08028024:\n\
+ movs r4, 0\n\
+ mov r8, r4\n\
+ movs r7, 0x7F\n\
+ mov r9, r7\n\
+_0802802C:\n\
+ bl Random\n\
+ mov r4, r9\n\
+ ands r4, r0\n\
+ cmp r4, 0x70\n\
+ bhi _0802802C\n\
+ lsls r0, r4, 1\n\
+ adds r4, r0, r4\n\
+ ldr r6, _08028120 @ =gTypeEffectiveness\n\
+ adds r3, r4, r6\n\
+ ldr r1, _08028124 @ =gUnknown_02024C44\n\
+ ldr r2, _08028128 @ =gBankAttacker\n\
+ ldrb r5, [r2]\n\
+ lsls r0, r5, 1\n\
+ adds r0, r1\n\
+ ldrb r1, [r3]\n\
+ mov r10, r2\n\
+ ldrh r0, [r0]\n\
+ cmp r1, r0\n\
+ bne _08028088\n\
+ adds r0, r4, 0x2\n\
+ adds r0, r6\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x5\n\
+ bhi _08028088\n\
+ ldr r7, _0802812C @ =gBattleMons\n\
+ movs r2, 0x58\n\
+ adds r0, r5, 0\n\
+ muls r0, r2\n\
+ adds r3, r0, r7\n\
+ movs r0, 0x21\n\
+ adds r0, r3\n\
+ mov r12, r0\n\
+ adds r0, r4, 0x1\n\
+ adds r0, r6\n\
+ ldrb r5, [r0]\n\
+ mov r1, r12\n\
+ ldrb r0, [r1]\n\
+ adds r1, r5, 0\n\
+ cmp r0, r1\n\
+ beq _08028088\n\
+ adds r0, r3, 0\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r1\n\
+ bne _08027FBC\n\
+_08028088:\n\
+ movs r7, 0x1\n\
+ add r8, r7\n\
+ ldr r0, _08028130 @ =0x000003e7\n\
+ cmp r8, r0\n\
+ ble _0802802C\n\
+ movs r0, 0\n\
+ mov r8, r0\n\
+ ldr r1, _08028134 @ =gBattlescriptCurrInstr\n\
+ mov r12, r1\n\
+ ldr r3, _08028120 @ =gTypeEffectiveness\n\
+ adds r0, r4, 0x1\n\
+ adds r0, r3\n\
+ mov r9, r0\n\
+ adds r5, r3, 0\n\
+_080280A4:\n\
+ ldrb r1, [r5]\n\
+ cmp r1, 0xFF\n\
+ bgt _080280AE\n\
+ cmp r1, 0xFE\n\
+ bge _080280E8\n\
+_080280AE:\n\
+ mov r4, r10\n\
+ ldrb r2, [r4]\n\
+ lsls r0, r2, 1\n\
+ ldr r7, _08028124 @ =gUnknown_02024C44\n\
+ adds r0, r7\n\
+ ldrh r0, [r0]\n\
+ cmp r1, r0\n\
+ bne _080280E8\n\
+ ldrb r0, [r5, 0x2]\n\
+ cmp r0, 0x5\n\
+ bhi _080280E8\n\
+ movs r6, 0x58\n\
+ adds r0, r2, 0\n\
+ muls r0, r6\n\
+ ldr r1, _0802812C @ =gBattleMons\n\
+ adds r2, r0, r1\n\
+ adds r4, r2, 0\n\
+ adds r4, 0x21\n\
+ ldrb r0, [r4]\n\
+ mov r7, r9\n\
+ ldrb r1, [r7]\n\
+ cmp r0, r1\n\
+ beq _080280E8\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r1\n\
+ beq _080280E8\n\
+ b _08027FE8\n\
+_080280E8:\n\
+ adds r5, 0x3\n\
+ movs r0, 0x3\n\
+ add r8, r0\n\
+ ldr r0, _08028138 @ =0x0000014f\n\
+ cmp r8, r0\n\
+ bls _080280A4\n\
+ mov r1, r12\n\
+ ldr r2, [r1]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ mov r4, r12\n\
+ str r1, [r4]\n\
+_08028110:\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08028120: .4byte gTypeEffectiveness\n\
+_08028124: .4byte gUnknown_02024C44\n\
+_08028128: .4byte gBankAttacker\n\
+_0802812C: .4byte gBattleMons\n\
+_08028130: .4byte 0x000003e7\n\
+_08028134: .4byte gBattlescriptCurrInstr\n\
+_08028138: .4byte 0x0000014f\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+static void atkA7_setalwayshitflag(void)
+{
+ gStatuses3[gBankTarget] &= ~(STATUS3_ALWAYS_HITS);
+ gStatuses3[gBankTarget] |= 0x10;
+ gDisableStructs[gBankTarget].bankWithSureHit = gBankAttacker;
+ gBattlescriptCurrInstr++;
+}
+
+struct move_pp
+{
+ u16 move[4];
+ u8 pp[4];
+ u8 ppBonuses;
+};
+
+static void atkA8_copymovepermanently(void)
+{
+ gUnknown_02024BE8 = 0xFFFF;
+ if (!(gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED) && gUnknown_02024C2C[gBankTarget] != MOVE_STRUGGLE && gUnknown_02024C2C[gBankTarget] != 0 && gUnknown_02024C2C[gBankTarget] != 0xFFFF && gUnknown_02024C2C[gBankTarget] != MOVE_SKETCH)
+ {
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[gBankAttacker].moves[i] == MOVE_SKETCH)
+ continue;
+ if (gBattleMons[gBankAttacker].moves[i] == gUnknown_02024C2C[gBankTarget])
+ break;
+ }
+ if (i != 4) //sketch fail
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else //sketch worked
+ {
+ struct move_pp moves_data;
+ gBattleMons[gBankAttacker].moves[gCurrMovePos] = gUnknown_02024C2C[gBankTarget];
+ gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gUnknown_02024C2C[gBankTarget]].pp;
+ gActiveBank = gBankAttacker;
+ for (i = 0; i < 4; i++)
+ {
+ moves_data.move[i] = gBattleMons[gBankAttacker].moves[i];
+ moves_data.pp[i] = gBattleMons[gBankAttacker].pp[i];
+ }
+ moves_data.ppBonuses = gBattleMons[gBankAttacker].ppBonuses;
+ EmitSetAttributes(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct move_pp), &moves_data);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = gUnknown_02024C2C[gBankTarget];
+ gBattleTextBuff1[3] = gUnknown_02024C2C[gBankTarget] >> 8;
+ gBattleTextBuff1[4] = 0xFF;
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+ else //sketch fail
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static bool8 IsTwoTurnsMove(u16 move)
+{
+ u8 effect = gBattleMoves[move].effect;
+ if (effect == EFFECT_SKULL_BASH || effect == EFFECT_RAZOR_WIND || effect == EFFECT_SKY_ATTACK || effect == EFFECT_SOLARBEAM || effect == EFFECT_FLY || effect == EFFECT_BIDE)
+ return 1;
+ else
+ return 0;
+}
+
+static bool8 IsMoveUnchoosable(u16 move)
+{
+ if (move == 0 || move == MOVE_SLEEP_TALK || move == MOVE_ASSIST || move == MOVE_MIRROR_MOVE || move == MOVE_METRONOME)
+ return 1;
+ else
+ return 0;
+}
+
+static u8 AttacksThisTurn(u8 bank, u16 move) //Note: returns 1 if it's a charging turn, otherwise 2
+{
+ //first argument is unused
+ u8 effect;
+ if (gBattleMoves[move].effect == EFFECT_SOLARBEAM && (gBattleWeather & WEATHER_SUNNY))
+ return 2;
+ effect = gBattleMoves[move].effect;
+ if (effect == EFFECT_SKULL_BASH || effect == EFFECT_RAZOR_WIND || effect == EFFECT_SKY_ATTACK || effect == EFFECT_SOLARBEAM || effect == EFFECT_FLY || effect == EFFECT_BIDE)
+ {
+ if ((gHitMarker & HITMARKER_x8000000))
+ return 1;
+ }
+ return 2;
+}
+
+static void atkA9_sleeptalk_choose_move(void)
+{
+ u8 unusable_moves = 0;
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (IsMoveUnchoosable(gBattleMons[gBankAttacker].moves[i]) || gBattleMons[gBankAttacker].moves[i] == MOVE_FOCUS_PUNCH
+ || gBattleMons[gBankAttacker].moves[i] == MOVE_UPROAR || IsTwoTurnsMove(gBattleMons[gBankAttacker].moves[i]))
+ unusable_moves |= gBitTable[i];
+ }
+ unusable_moves = sub_8015A98(gBankAttacker, unusable_moves, 0xFD);
+ if (unusable_moves == 0xF) //all 4 moves cannot be chosen
+ gBattlescriptCurrInstr += 5;
+ else //at least one move can be chosen
+ {
+ u32 random_pos;
+ do
+ {
+ random_pos = Random() & 3;
+ } while ((gBitTable[random_pos] & unusable_moves));
+
+ gRandomMove = gBattleMons[gBankAttacker].moves[random_pos];
+ gCurrMovePos = random_pos;
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gBankTarget = sub_801B5C0(gRandomMove, 0);
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkAA_set_destinybond(void)
+{
+ gBattleMons[gBankAttacker].status2 |= STATUS2_DESTINY_BOND;
+ gBattlescriptCurrInstr++;
+}
+
+static void DestinyBondFlagUpdate(void)
+{
+ u8 atk_side = GetBankSide(gBankAttacker);
+ u8 def_side = GetBankSide(gBankTarget);
+ if (gBattleMons[gBankTarget].status2 & STATUS2_DESTINY_BOND && atk_side != def_side && !(gHitMarker & HITMARKER_GRUDGE))
+ gHitMarker |= HITMARKER_DESTINYBOND;
+}
+
+static void atkAB_DestinyBondFlagUpdate(void)
+{
+ DestinyBondFlagUpdate();
+ gBattlescriptCurrInstr++;
+}
+
+static void atkAC_remaininghptopower(void)
+{
+ s32 hp_fraction = GetScaledHPFraction(gBattleMons[gBankAttacker].hp, gBattleMons[gBankAttacker].maxHP, 48);
+ int i;
+ for (i = 0; i < 12; i += 2)
+ {
+ if (hp_fraction <= sUnknown_081FAD26[i])
+ break;
+ }
+ gDynamicBasePower = sUnknown_081FAD26[i + 1];
+ gBattlescriptCurrInstr++;
+}
+
+static void atkAD_spite_ppreduce(void)
+{
+ if (gLastUsedMove[gBankTarget] != 0 && gLastUsedMove[gBankTarget] != 0xFFFF && !(gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE))
+ {
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ if (gLastUsedMove[gBankTarget] == gBattleMons[gBankTarget].moves[i])
+ break;
+ }
+ if (i != 4 && gBattleMons[gBankTarget].pp[i] > 1)
+ {
+ s32 lost_pp = (Random() & 3) + 2;
+ if (gBattleMons[gBankTarget].pp[i] < lost_pp)
+ lost_pp = gBattleMons[gBankTarget].pp[i];
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = gLastUsedMove[gBankTarget];
+ gBattleTextBuff1[3] = gLastUsedMove[gBankTarget] >> 8;
+ gBattleTextBuff1[4] = 0xFF;
+ ConvertIntToDecimalStringN(gBattleTextBuff2, lost_pp, 0, 1);
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 1;
+ gBattleTextBuff2[2] = 1;
+ gBattleTextBuff2[3] = 1;
+ gBattleTextBuff2[4] = lost_pp;
+ gBattleTextBuff2[5] = 0xFF;
+
+ gBattleMons[gBankTarget].pp[i] -= lost_pp;
+ gActiveBank = gBankTarget;
+ if (!(gDisableStructs[gActiveBank].unk18_b & gBitTable[i])
+ && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
+ {
+ EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ gBattlescriptCurrInstr += 5;
+ if (gBattleMons[gBankTarget].pp[i] == 0)
+ CancelMultiTurnMoves(gBankTarget);
+ return;
+ }
+ }
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkAE_heal_party_status(void)
+{
+ register u32 zero2 asm("r4") = 0;
+ u32 zero = zero2;
+ u8 to_heal = 0;
+ if (gCurrentMove == MOVE_HEAL_BELL)
+ {
+ struct Pokemon* poke;
+ int i;
+
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ if (GetBankSide(gBankAttacker) == 0)
+ poke = gPlayerParty;
+ else
+ poke = gEnemyParty;
+
+ if (gBattleMons[gBankAttacker].ability != ABILITY_SOUNDPROOF)
+ {
+ gBattleMons[gBankAttacker].status1 = 0;
+ }
+ else
+ {
+ RecordAbilityBattle(gBankAttacker, gBattleMons[gBankAttacker].ability);
+ gBattleCommunication[MULTISTRING_CHOOSER] |= 1;
+ }
+
+ gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]))
+ {
+ if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF)
+ {
+ gBattleMons[gActiveBank].status1 = 0;
+ }
+ else
+ {
+ RecordAbilityBattle(gActiveBank, gBattleMons[gActiveBank].ability);
+ gBattleCommunication[MULTISTRING_CHOOSER] |= 2;
+ }
+ }
+
+ for (i = 0; i < 6; i++)
+ {
+ u16 species = GetMonData(&poke[i], MON_DATA_SPECIES2);
+ u8 abilityBit = GetMonData(&poke[i], MON_DATA_ALT_ABILITY);
+ if (species != 0 && species != SPECIES_EGG)
+ {
+ u8 ability;
+ if (gBattlePartyID[gBankAttacker] == i)
+ ability = gBattleMons[gBankAttacker].ability;
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[gActiveBank] == i && !(gAbsentBankFlags & gBitTable[gActiveBank]))
+ ability = gBattleMons[gActiveBank].ability;
+ else
+ ability = GetAbilityBySpecies(species, abilityBit);
+ if (ability != ABILITY_SOUNDPROOF)
+ to_heal |= (1 << i);
+ }
+ }
+ }
+ else //Aromatherapy
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ to_heal = 0x3F;
+ gBattleMons[gBankAttacker].status1 = zero2;
+
+ gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]))
+ gBattleMons[gActiveBank].status1 = 0;
+
+ }
+ //missing check?
+ gActiveBank = gBankAttacker;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, to_heal, 4, &zero);
+ MarkBufferBankForExecution(gActiveBank);
+
+ gBattlescriptCurrInstr++;
+}
+
+static void atkAF_cursetarget(void)
+{
+ if (gBattleMons[gBankTarget].status2 & STATUS2_CURSED || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gBattleMons[gBankTarget].status2 |= STATUS2_CURSED;
+ gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkB0_set_spikes(void)
+{
+ u8 side = GetBankSide(gBankAttacker) ^ 1;
+ if (gSideTimer[side].spikesAmount == 3)
+ {
+ gSpecialStatuses[gBankAttacker].flag20 = 1;
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gSideAffecting[side] |= SIDE_SPIKES;
+ gSideTimer[side].spikesAmount++;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkB1_set_foresight(void)
+{
+ gBattleMons[gBankTarget].status2 |= STATUS2_FORESIGHT;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkB2_setperishsong(void)
+{
+ int not_affected_pokes = 0, i;
+
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gStatuses3[i] & STATUS3_PERISH_SONG || gBattleMons[i].ability == ABILITY_SOUNDPROOF)
+ not_affected_pokes++;
+ else
+ {
+ gStatuses3[i] |= STATUS3_PERISH_SONG;
+ gDisableStructs[i].perishSong1 = 3;
+ gDisableStructs[i].perishSong2 = 3;
+ }
+ }
+
+ sub_80153D0(gBankAttacker);
+ if (not_affected_pokes == gNoOfAllBanks)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static void atkB3_rolloutdamagecalculation(void)
+{
+ if (gBattleMoveFlags & MOVE_NO_EFFECT)
+ {
+ CancelMultiTurnMoves(gBankAttacker);
+ gBattlescriptCurrInstr = BattleScript_1D6F74;
+ }
+ else
+ {
+ int i;
+ if (!(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) //first hit
+ {
+ gDisableStructs[gBankAttacker].rolloutTimer1 = 5;
+ gDisableStructs[gBankAttacker].rolloutTimer2 = 5;
+ gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMove[gBankAttacker] = gCurrentMove;
+ }
+ if (--gDisableStructs[gBankAttacker].rolloutTimer1 == 0)
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS);
+
+ gDynamicBasePower = gBattleMoves[gCurrentMove].power;
+ for (i = 1; i < (5 - gDisableStructs[gBankAttacker].rolloutTimer1); i++)
+ gDynamicBasePower *= 2;
+
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_DEFENSE_CURL)
+ gDynamicBasePower *= 2;
+
+ gBattlescriptCurrInstr++;
+ }
+}
+
+static void atkB4_jumpifconfusedandstatmaxed(void)
+{
+ if (gBattleMons[gBankTarget].status2 & STATUS2_CONFUSION && gBattleMons[gBankTarget].statStages[BSScriptRead8(gBattlescriptCurrInstr + 1)] == 0xC)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atkB5_furycuttercalc(void)
+{
+ if (gBattleMoveFlags & MOVE_NO_EFFECT)
+ {
+ gDisableStructs[gBankAttacker].furyCutterCounter = 0;
+ gBattlescriptCurrInstr = BattleScript_1D6F74;
+ }
+ else
+ {
+ int i;
+
+ if (gDisableStructs[gBankAttacker].furyCutterCounter != 5)
+ gDisableStructs[gBankAttacker].furyCutterCounter++;
+
+ gDynamicBasePower = gBattleMoves[gCurrentMove].power;
+ for (i = 1; i < gDisableStructs[gBankAttacker].furyCutterCounter; i++)
+ gDynamicBasePower *= 2;
+
+ gBattlescriptCurrInstr++;
+ }
+}
+
+static void atkB6_happinesstodamagecalculation(void)
+{
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_RETURN)
+ gDynamicBasePower = 10 * (gBattleMons[gBankAttacker].friendship) / 25;
+ else //EFFECT_FRUSTRATION
+ gDynamicBasePower = 10 * (255 - gBattleMons[gBankAttacker].friendship) / 25;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkB7_presentdamagecalculation(void)
+{
+ s32 rand = Random() & 0xFF;
+ if (rand < 102)
+ gDynamicBasePower = 40;
+ else if (rand < 178)
+ gDynamicBasePower = 80;
+ else if (rand < 204)
+ gDynamicBasePower = 120;
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 4;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ gBattleMoveDamage *= -1;
+ }
+ if (rand < 204)
+ gBattlescriptCurrInstr = BattleScript_1D6F44;
+ else if (gBattleMons[gBankTarget].maxHP == gBattleMons[gBankTarget].hp)
+ gBattlescriptCurrInstr = BattleScript_1D83B5;
+ else
+ {
+ //gBattleMoveFlags &= ~(MOVE_NOTAFFECTED); only in Emerald
+ gBattlescriptCurrInstr = BattleScript_1D839B;
+ }
+}
+
+static void atkB8_set_safeguard(void)
+{
+ if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_SAFEGUARD)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else
+ {
+ gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_SAFEGUARD;
+ gSideTimer[GetBankIdentity(gBankAttacker) & 1].safeguardTimer = 5;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 5;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkB9_magnitudedamagecalculation(void)
+{
+ s32 magnitude = Random() % 100;
+ if (magnitude < 5)
+ {
+ gDynamicBasePower = 10;
+ magnitude = 4;
+ }
+ else if (magnitude < 15)
+ {
+ gDynamicBasePower = 30;
+ magnitude = 5;
+ }
+ else if (magnitude < 35)
+ {
+ gDynamicBasePower = 50;
+ magnitude = 6;
+ }
+ else if (magnitude < 65)
+ {
+ gDynamicBasePower = 70;
+ magnitude = 7;
+ }
+ else if (magnitude < 85)
+ {
+ gDynamicBasePower = 90;
+ magnitude = 8;
+ }
+ else if (magnitude < 95)
+ {
+ gDynamicBasePower = 110;
+ magnitude = 9;
+ }
+ else
+ {
+ gDynamicBasePower = 150;
+ magnitude = 10;
+ }
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 1;
+ gBattleTextBuff1[2] = 1;
+ gBattleTextBuff1[3] = 2;
+ gBattleTextBuff1[4] = magnitude;
+ gBattleTextBuff1[5] = 0xFF;
+
+ for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++)
+ {
+ if (gBankTarget == gBankAttacker)
+ continue;
+ if (!(gAbsentBankFlags & gBitTable[gBankTarget])) //a valid target was found
+ break;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkBA_jumpifnopursuitswitchdmg(void)
+{
+ if (gMultiHitCounter == 1)
+ {
+ if (GetBankSide(gBankAttacker) == 0)
+ gBankTarget = GetBankByPlayerAI(1);
+ else
+ gBankTarget = GetBankByPlayerAI(0);
+ }
+ else
+ {
+ if (GetBankSide(gBankAttacker) == 0)
+ gBankTarget = GetBankByPlayerAI(3);
+ else
+ gBankTarget = GetBankByPlayerAI(2);
+ }
+
+ if (gActionForBanks[gBankTarget] == 0 && gBankAttacker == ewram[gBankTarget + 0x16010] && !(gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE))
+ && gBattleMons[gBankAttacker].hp && !gDisableStructs[gBankTarget].truantCounter && gChosenMovesByBanks[gBankTarget] == MOVE_PURSUIT)
+ {
+ int i;
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gTurnOrder[i] == gBankTarget)
+ gUnknown_02024A76[i] = 11;
+ }
+ gCurrentMove = MOVE_PURSUIT;
+ gBattlescriptCurrInstr += 5;
+ BATTLE_STRUCT->animTurn = 1;
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkBB_setsunny(void)
+{
+ if (gBattleWeather & WEATHER_SUNNY)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = weather_sun;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkBC_maxattackhalvehp(void) //belly drum
+{
+ u32 half_hp = gBattleMons[gBankAttacker].maxHP / 2;
+ if (!(gBattleMons[gBankAttacker].maxHP / 2))
+ half_hp = 1;
+
+ if (gBattleMons[gBankAttacker].statStages[ATK_BUFF] < 0xC && gBattleMons[gBankAttacker].hp > half_hp)
+ {
+ gBattleMons[gBankAttacker].statStages[ATK_BUFF] = 0xC;
+ gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkBD_copyfoestats(void) //psych up
+{
+ int i;
+ for (i = 0; i < 8; i++)
+ {
+ gBattleMons[gBankAttacker].statStages[i] = gBattleMons[gBankTarget].statStages[i];
+ }
+ gBattlescriptCurrInstr += 5; //why not 1? possible unused fail possibility?
+}
+
+static void atkBE_breakfree(void) //rapid spin
+{
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_WRAPPED)
+ {
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_WRAPPED);
+ gBankTarget = ewram[gBankAttacker + 0x16020];
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = ewram[gBankAttacker * 2 + 0x16004];
+ gBattleTextBuff1[3] = ewram[gBankAttacker * 2 + 0x16005];
+ gBattleTextBuff1[4] = 0xFF;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_WrapFree;
+ }
+ else if (gStatuses3[gBankAttacker] & STATUS3_LEECHSEED)
+ {
+ gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED);
+ gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED_BANK);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_LeechSeedFree;
+ }
+ else if (gSideAffecting[GetBankSide(gBankAttacker)] & SIDE_SPIKES)
+ {
+ gSideAffecting[GetBankSide(gBankAttacker)] &= ~(SIDE_SPIKES);
+ gSideTimer[GetBankSide(gBankAttacker)].spikesAmount = 0;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_SpikesFree;
+ }
+ else
+ gBattlescriptCurrInstr++;
+}
+
+static void atkBF_set_defense_curl(void)
+{
+ gBattleMons[gBankAttacker].status2 |= STATUS2_DEFENSE_CURL;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkC0_recoverbasedonsunlight(void)
+{
+ gBankTarget = gBankAttacker;
+ if (gBattleMons[gBankAttacker].hp != gBattleMons[gBankAttacker].maxHP)
+ {
+ if (!gBattleWeather || !WeatherHasEffect)
+ gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2;
+ else if (gBattleWeather & WEATHER_SUNNY)
+ gBattleMoveDamage = 20 * gBattleMons[gBankAttacker].maxHP / 30;
+ else //not sunny weather
+ gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 4;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ gBattleMoveDamage *= -1;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+__attribute__((naked))
+static void atkC1_hidden_power(void)
+{
+ asm(".syntax unified\n\
+push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ ldr r2, _08029894 @ =gBattleMons\n\
+ ldr r0, _08029898 @ =gBankAttacker\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ adds r4, r1, 0\n\
+ muls r4, r0\n\
+ adds r4, r2\n\
+ ldrb r0, [r4, 0x14]\n\
+ mov r10, r0\n\
+ mov r7, r10\n\
+ lsls r7, 27\n\
+ adds r0, r7, 0\n\
+ lsrs r0, 27\n\
+ mov r10, r0\n\
+ movs r1, 0x2\n\
+ mov r2, r10\n\
+ ands r2, r1\n\
+ asrs r2, 1\n\
+ ldrh r7, [r4, 0x14]\n\
+ mov r9, r7\n\
+ mov r0, r9\n\
+ lsls r0, 22\n\
+ mov r9, r0\n\
+ lsrs r3, r0, 27\n\
+ adds r0, r1, 0\n\
+ ands r0, r3\n\
+ orrs r2, r0\n\
+ ldrb r7, [r4, 0x15]\n\
+ mov r8, r7\n\
+ mov r0, r8\n\
+ lsls r0, 25\n\
+ mov r8, r0\n\
+ lsrs r3, r0, 27\n\
+ adds r0, r1, 0\n\
+ ands r0, r3\n\
+ lsls r0, 1\n\
+ orrs r2, r0\n\
+ ldr r6, [r4, 0x14]\n\
+ lsls r6, 12\n\
+ lsrs r3, r6, 27\n\
+ adds r0, r1, 0\n\
+ ands r0, r3\n\
+ lsls r0, 2\n\
+ orrs r2, r0\n\
+ ldrh r5, [r4, 0x16]\n\
+ lsls r5, 23\n\
+ lsrs r3, r5, 27\n\
+ adds r0, r1, 0\n\
+ ands r0, r3\n\
+ lsls r0, 3\n\
+ orrs r2, r0\n\
+ ldrb r3, [r4, 0x17]\n\
+ lsls r3, 26\n\
+ lsrs r0, r3, 27\n\
+ ands r1, r0\n\
+ lsls r1, 4\n\
+ orrs r2, r1\n\
+ movs r1, 0x1\n\
+ adds r4, r1, 0\n\
+ mov r7, r10\n\
+ ands r4, r7\n\
+ mov r0, r9\n\
+ lsrs r0, 27\n\
+ mov r9, r0\n\
+ adds r0, r1, 0\n\
+ mov r7, r9\n\
+ ands r0, r7\n\
+ lsls r0, 1\n\
+ orrs r4, r0\n\
+ mov r0, r8\n\
+ lsrs r0, 27\n\
+ mov r8, r0\n\
+ adds r0, r1, 0\n\
+ mov r7, r8\n\
+ ands r0, r7\n\
+ lsls r0, 2\n\
+ orrs r4, r0\n\
+ lsrs r6, 27\n\
+ adds r0, r1, 0\n\
+ ands r0, r6\n\
+ lsls r0, 3\n\
+ orrs r4, r0\n\
+ lsrs r5, 27\n\
+ adds r0, r1, 0\n\
+ ands r0, r5\n\
+ lsls r0, 4\n\
+ orrs r4, r0\n\
+ lsrs r3, 27\n\
+ ands r1, r3\n\
+ lsls r1, 5\n\
+ orrs r4, r1\n\
+ ldr r5, _0802989C @ =gDynamicBasePower\n\
+ lsls r0, r2, 2\n\
+ adds r0, r2\n\
+ lsls r0, 3\n\
+ movs r1, 0x3F\n\
+ bl __divsi3\n\
+ adds r0, 0x1E\n\
+ strh r0, [r5]\n\
+ ldr r5, _080298A0 @ =0x02000000\n\
+ lsls r0, r4, 4\n\
+ subs r0, r4\n\
+ movs r1, 0x3F\n\
+ bl __divsi3\n\
+ adds r1, r0, 0x1\n\
+ ldr r0, _080298A4 @ =0x0001601c\n\
+ adds r5, r0\n\
+ strb r1, [r5]\n\
+ lsls r0, r1, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x8\n\
+ bls _08029876\n\
+ adds r0, r1, 0x1\n\
+ strb r0, [r5]\n\
+_08029876:\n\
+ ldrb r0, [r5]\n\
+ movs r1, 0xC0\n\
+ orrs r0, r1\n\
+ strb r0, [r5]\n\
+ ldr r1, _080298A8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x1\n\
+ str r0, [r1]\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08029894: .4byte gBattleMons\n\
+_08029898: .4byte gBankAttacker\n\
+_0802989C: .4byte gDynamicBasePower\n\
+_080298A0: .4byte 0x02000000\n\
+_080298A4: .4byte 0x0001601c\n\
+_080298A8: .4byte gBattlescriptCurrInstr\n\
+ .syntax divided");
+}
+
+static void atkC2_selectnexttarget(void)
+{
+ for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++)
+ {
+ if (gBankTarget == gBankAttacker)
+ continue;
+ if (!(gAbsentBankFlags & gBitTable[gBankTarget]))
+ break;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkC3_setfutureattack(void)
+{
+ if (gWishFutureKnock.futureSightCounter[gBankTarget] != 0)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gWishFutureKnock.futureSightMove[gBankTarget] = gCurrentMove;
+ gWishFutureKnock.futureSightAttacker[gBankTarget] = gBankAttacker;
+ gWishFutureKnock.futureSightCounter[gBankTarget] = 3;
+ gWishFutureKnock.futureSightDmg[gBankTarget] = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove,
+ gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0,
+ 0, gBankAttacker, gBankTarget);
+
+ if (gProtectStructs[gBankAttacker].helpingHand)
+ gWishFutureKnock.futureSightDmg[gBankTarget] = gWishFutureKnock.futureSightDmg[gBankTarget] * 15 / 10;
+
+ if (gCurrentMove == MOVE_DOOM_DESIRE)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+#ifdef NONMATCHING
+static void atkC4_beat_up(void)
+{
+ register struct Pokemon* poke asm("r7");
+ if (GetBankSide(gBankAttacker) == 0)
+ poke = gPlayerParty;
+ else
+ poke = gEnemyParty;
+
+ if (gBattleMons[gBankTarget].hp == 0)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ while (gBattleCommunication[0] < 6)
+ {
+ if (GetMonData(&poke[gBattleCommunication[0]], MON_DATA_HP) && GetMonData(&poke[gBattleCommunication[0]], MON_DATA_SPECIES2)
+ && GetMonData(&poke[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG && !GetMonData(&poke[gBattleCommunication[0]], MON_DATA_STATUS))
+ break;
+ gBattleCommunication[0]++;
+ }
+ if (gBattleCommunication[0] < 6)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 4;
+ gBattleTextBuff1[2] = gBankAttacker;
+ gBattleTextBuff1[3] = gBattleCommunication[0];
+ gBattleTextBuff1[4] = 0xFF;
+ gBattlescriptCurrInstr += 9;
+
+ gBattleMoveDamage = gBaseStats[GetMonData(&poke[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack;
+ gBattleMoveDamage *= gBattleMoves[gCurrentMove].power;
+ gBattleMoveDamage *= (GetMonData(&poke[gBattleCommunication[0]], MON_DATA_LEVEL) * 2 / 5 + 2);
+ gBattleMoveDamage /= gBaseStats[gBattleMons[gBankTarget].species].baseDefense;
+ gBattleMoveDamage = (gBattleMoveDamage / 50) + 2;
+ if (gProtectStructs[gBankAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+
+ gBattleCommunication[0]++;
+ }
+ else if (gBattleCommunication[0] != 0)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
+ }
+}
+#else
+__attribute__((naked))
+static void atkC4_beat_up(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ ldr r0, _08029A8C @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ ldr r7, _08029A90 @ =gEnemyParty\n\
+ cmp r0, 0\n\
+ bne _08029A62\n\
+ ldr r7, _08029A94 @ =gPlayerParty\n\
+_08029A62:\n\
+ ldr r2, _08029A98 @ =gBattleMons\n\
+ ldr r0, _08029A9C @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r2\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08029AA4\n\
+ ldr r3, _08029AA0 @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ b _08029C40\n\
+ .align 2, 0\n\
+_08029A8C: .4byte gBankAttacker\n\
+_08029A90: .4byte gEnemyParty\n\
+_08029A94: .4byte gPlayerParty\n\
+_08029A98: .4byte gBattleMons\n\
+_08029A9C: .4byte gBankTarget\n\
+_08029AA0: .4byte gBattlescriptCurrInstr\n\
+_08029AA4:\n\
+ ldr r6, _08029BE0 @ =gBattleCommunication\n\
+ ldrb r0, [r6]\n\
+ mov r8, r0\n\
+ cmp r0, 0x5\n\
+ bls _08029AB0\n\
+ b _08029C0C\n\
+_08029AB0:\n\
+ adds r4, r6, 0\n\
+ movs r5, 0x64\n\
+_08029AB4:\n\
+ ldrb r0, [r4]\n\
+ muls r0, r5\n\
+ adds r0, r7, r0\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _08029AF8\n\
+ ldrb r0, [r6]\n\
+ muls r0, r5\n\
+ adds r0, r7, r0\n\
+ movs r1, 0x41\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _08029AF8\n\
+ ldrb r0, [r4]\n\
+ muls r0, r5\n\
+ adds r0, r7, r0\n\
+ movs r1, 0x41\n\
+ bl GetMonData\n\
+ movs r1, 0xCE\n\
+ lsls r1, 1\n\
+ cmp r0, r1\n\
+ beq _08029AF8\n\
+ ldrb r0, [r4]\n\
+ muls r0, r5\n\
+ adds r0, r7, r0\n\
+ movs r1, 0x37\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _08029B08\n\
+_08029AF8:\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ adds r6, r4, 0\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x5\n\
+ bls _08029AB4\n\
+_08029B08:\n\
+ ldr r1, _08029BE0 @ =gBattleCommunication\n\
+ mov r9, r1\n\
+ ldrb r2, [r1]\n\
+ cmp r2, 0x5\n\
+ bhi _08029C0C\n\
+ ldr r1, _08029BE4 @ =gBattleTextBuff1\n\
+ movs r0, 0xFD\n\
+ strb r0, [r1]\n\
+ movs r0, 0x4\n\
+ strb r0, [r1, 0x1]\n\
+ ldr r6, _08029BE8 @ =gBankAttacker\n\
+ ldrb r0, [r6]\n\
+ strb r0, [r1, 0x2]\n\
+ strb r2, [r1, 0x3]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x4]\n\
+ ldr r1, _08029BEC @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x9\n\
+ str r0, [r1]\n\
+ ldr r2, _08029BF0 @ =gBattleMoveDamage\n\
+ mov r8, r2\n\
+ ldr r5, _08029BF4 @ =gBaseStats\n\
+ mov r1, r9\n\
+ ldrb r0, [r1]\n\
+ movs r4, 0x64\n\
+ muls r0, r4\n\
+ adds r0, r7, r0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r5\n\
+ ldrb r3, [r1, 0x1]\n\
+ mov r2, r8\n\
+ str r3, [r2]\n\
+ ldr r2, _08029BF8 @ =gBattleMoves\n\
+ ldr r0, _08029BFC @ =gCurrentMove\n\
+ ldrh r1, [r0]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r0, [r0, 0x1]\n\
+ muls r0, r3\n\
+ mov r1, r8\n\
+ str r0, [r1]\n\
+ mov r2, r9\n\
+ ldrb r0, [r2]\n\
+ muls r0, r4\n\
+ adds r0, r7, r0\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ lsls r0, 1\n\
+ movs r1, 0x5\n\
+ bl __udivsi3\n\
+ adds r0, 0x2\n\
+ mov r2, r8\n\
+ ldr r1, [r2]\n\
+ muls r0, r1\n\
+ str r0, [r2]\n\
+ ldr r3, _08029C00 @ =gBattleMons\n\
+ ldr r1, _08029C04 @ =gBankTarget\n\
+ ldrb r2, [r1]\n\
+ movs r1, 0x58\n\
+ muls r1, r2\n\
+ adds r1, r3\n\
+ ldrh r2, [r1]\n\
+ lsls r1, r2, 3\n\
+ subs r1, r2\n\
+ lsls r1, 2\n\
+ adds r1, r5\n\
+ ldrb r1, [r1, 0x2]\n\
+ bl __divsi3\n\
+ mov r1, r8\n\
+ str r0, [r1]\n\
+ movs r1, 0x32\n\
+ bl __divsi3\n\
+ adds r2, r0, 0x2\n\
+ mov r0, r8\n\
+ str r2, [r0]\n\
+ ldr r1, _08029C08 @ =gProtectStructs\n\
+ ldrb r0, [r6]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08029BD4\n\
+ lsls r0, r2, 4\n\
+ subs r0, r2\n\
+ movs r1, 0xA\n\
+ bl __divsi3\n\
+ mov r1, r8\n\
+ str r0, [r1]\n\
+_08029BD4:\n\
+ mov r2, r9\n\
+ ldrb r0, [r2]\n\
+ adds r0, 0x1\n\
+ strb r0, [r2]\n\
+ b _08029C46\n\
+ .align 2, 0\n\
+_08029BE0: .4byte gBattleCommunication\n\
+_08029BE4: .4byte gBattleTextBuff1\n\
+_08029BE8: .4byte gBankAttacker\n\
+_08029BEC: .4byte gBattlescriptCurrInstr\n\
+_08029BF0: .4byte gBattleMoveDamage\n\
+_08029BF4: .4byte gBaseStats\n\
+_08029BF8: .4byte gBattleMoves\n\
+_08029BFC: .4byte gCurrentMove\n\
+_08029C00: .4byte gBattleMons\n\
+_08029C04: .4byte gBankTarget\n\
+_08029C08: .4byte gProtectStructs\n\
+_08029C0C:\n\
+ mov r0, r8\n\
+ cmp r0, 0\n\
+ beq _08029C2C\n\
+ ldr r3, _08029C28 @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ b _08029C40\n\
+ .align 2, 0\n\
+_08029C28: .4byte gBattlescriptCurrInstr\n\
+_08029C2C:\n\
+ ldr r3, _08029C54 @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x5]\n\
+ ldrb r0, [r2, 0x6]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x7]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x8]\n\
+_08029C40:\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+_08029C46:\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08029C54: .4byte gBattlescriptCurrInstr\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+static void atkC5_hidepreattack(void)
+{
+ switch (gCurrentMove)
+ {
+ case MOVE_FLY:
+ case MOVE_BOUNCE:
+ gStatuses3[gBankAttacker] |= STATUS3_ON_AIR;
+ break;
+ case MOVE_DIG:
+ gStatuses3[gBankAttacker] |= STATUS3_UNDERGROUND;
+ break;
+ case MOVE_DIVE:
+ gStatuses3[gBankAttacker] |= STATUS3_UNDERWATER;
+ break;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkC6_unhidepostattack(void)
+{
+ switch (gCurrentMove)
+ {
+ case MOVE_FLY:
+ case MOVE_BOUNCE:
+ gStatuses3[gBankAttacker] &= ~STATUS3_ON_AIR;
+ break;
+ case MOVE_DIG:
+ gStatuses3[gBankAttacker] &= ~STATUS3_UNDERGROUND;
+ break;
+ case MOVE_DIVE:
+ gStatuses3[gBankAttacker] &= ~STATUS3_UNDERWATER;
+ break;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkC7_setminimize(void)
+{
+ if (gHitMarker & HITMARKER_OBEYS)
+ gStatuses3[gBankAttacker] |= STATUS3_MINIMIZED;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkC8_sethail(void)
+{
+ if (gBattleWeather & weather_hail)
+ {
+ gBattleMoveFlags |= MOVE_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = weather_hail;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 5;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkC9_jumpifattackandspecialattackcannotfall(void) //memento
+{
+ if (gBattleMons[gBankTarget].statStages[ATK_BUFF] == 0
+ && gBattleMons[gBankTarget].statStages[SPATK_BUFF] == 0
+ && gBattleCommunication[6] != 1)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gActiveBank = gBankAttacker;
+ gBattleMoveDamage = gBattleMons[gActiveBank].hp;
+ EmitHealthBarUpdate(0, 0x7FFF);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkCA_setforcedtarget(void) //follow me
+{
+ gSideTimer[GetBankSide(gBankAttacker)].followmeTimer = 1;
+ gSideTimer[GetBankSide(gBankAttacker)].followmeTarget = gBankAttacker;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkCB_setcharge(void)
+{
+ gStatuses3[gBankAttacker] |= STATUS3_CHARGED_UP;
+ gDisableStructs[gBankAttacker].chargeTimer1 = 2;
+ gDisableStructs[gBankAttacker].chargeTimer2 = 2;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkCC_callterrainattack(void) //nature power
+{
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gCurrentMove = sNaturePowerMoves[gBattleTerrain];
+ gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ b_movescr_stack_push(gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]);
+ gBattlescriptCurrInstr++;
+}
+
+static void atkCD_cureifburnedparalysedorpoisoned(void) //refresh
+{
+ if (gBattleMons[gBankAttacker].status1 & (STATUS_POISON | STATUS_BURN | STATUS_PARALYSIS | STATUS_TOXIC_POISON))
+ {
+ gBattleMons[gBankAttacker].status1 = 0;
+ gBattlescriptCurrInstr += 5;
+ gActiveBank = gBankAttacker;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkCE_settorment(void)
+{
+ if (gBattleMons[gBankTarget].status2 & STATUS2_TORMENT)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gBattleMons[gBankTarget].status2 |= STATUS2_TORMENT;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkCF_jumpifnodamage(void)
+{
+ if (gProtectStructs[gBankAttacker].physicalDmg || gProtectStructs[gBankAttacker].specialDmg)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkD0_settaunt(void)
+{
+ if (gDisableStructs[gBankTarget].tauntTimer1 == 0)
+ {
+ gDisableStructs[gBankTarget].tauntTimer1 = 2;
+ gDisableStructs[gBankTarget].tauntTimer2 = 2;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkD1_set_helpinghand(void)
+{
+ gBankTarget = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gBankTarget])
+ && !gProtectStructs[gBankAttacker].helpingHand && !gProtectStructs[gBankTarget].helpingHand)
+ {
+ gProtectStructs[gBankTarget].helpingHand = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+#ifdef NONMATCHING
+static void atkD2_swap_items(void)
+{
+ if ((GetBankSide(gBankAttacker) != 1 || gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER) || gTrainerBattleOpponent == 0x400))
+ {
+ u8 side = GetBankSide(gBankAttacker);
+ if (gBattleTypeFlags)
+ }
+
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+#else
+__attribute__((naked))
+static void atkD2_swap_items(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ ldr r0, _0802A30C @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _0802A24C\n\
+ ldr r0, _0802A310 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _0802A314 @ =0x00000902\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0802A24C\n\
+ ldr r0, _0802A318 @ =gTrainerBattleOpponent\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r1, r0\n\
+ bne _0802A2EE\n\
+_0802A24C:\n\
+ ldr r4, _0802A30C @ =gBankAttacker\n\
+ ldrb r0, [r4]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ ldr r0, _0802A310 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _0802A314 @ =0x00000902\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0802A290\n\
+ ldr r0, _0802A318 @ =gTrainerBattleOpponent\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r1, r0\n\
+ beq _0802A290\n\
+ ldr r0, _0802A31C @ =gWishFutureKnock\n\
+ adds r0, 0x29\n\
+ adds r0, r2, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r3, _0802A320 @ =gBitTable\n\
+ ldr r2, _0802A324 @ =gBattlePartyID\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ ldrh r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _0802A2EE\n\
+_0802A290:\n\
+ ldr r0, _0802A328 @ =gBattleMons\n\
+ mov r9, r0\n\
+ ldr r1, _0802A30C @ =gBankAttacker\n\
+ ldrb r4, [r1]\n\
+ movs r2, 0x58\n\
+ mov r8, r2\n\
+ mov r0, r8\n\
+ muls r0, r4\n\
+ mov r3, r9\n\
+ adds r5, r0, r3\n\
+ ldrh r3, [r5, 0x2E]\n\
+ adds r1, r3, 0\n\
+ cmp r1, 0\n\
+ bne _0802A2BE\n\
+ ldr r0, _0802A32C @ =gBankTarget\n\
+ ldrb r0, [r0]\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ add r0, r9\n\
+ ldrh r0, [r0, 0x2E]\n\
+ cmp r0, 0\n\
+ beq _0802A2EE\n\
+_0802A2BE:\n\
+ cmp r1, 0xAF\n\
+ beq _0802A2EE\n\
+ ldr r7, _0802A32C @ =gBankTarget\n\
+ ldrb r0, [r7]\n\
+ mov r1, r8\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ mov r1, r9\n\
+ adds r2, r0, r1\n\
+ ldrh r1, [r2, 0x2E]\n\
+ cmp r1, 0xAF\n\
+ beq _0802A2EE\n\
+ adds r0, r3, 0\n\
+ subs r0, 0x79\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0xB\n\
+ bls _0802A2EE\n\
+ adds r0, r1, 0\n\
+ subs r0, 0x79\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0xB\n\
+ bhi _0802A334\n\
+_0802A2EE:\n\
+ ldr r3, _0802A330 @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+ b _0802A49A\n\
+ .align 2, 0\n\
+_0802A30C: .4byte gBankAttacker\n\
+_0802A310: .4byte gBattleTypeFlags\n\
+_0802A314: .4byte 0x00000902\n\
+_0802A318: .4byte gTrainerBattleOpponent\n\
+_0802A31C: .4byte gWishFutureKnock\n\
+_0802A320: .4byte gBitTable\n\
+_0802A324: .4byte gBattlePartyID\n\
+_0802A328: .4byte gBattleMons\n\
+_0802A32C: .4byte gBankTarget\n\
+_0802A330: .4byte gBattlescriptCurrInstr\n\
+_0802A334:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x3C\n\
+ bne _0802A36C\n\
+ ldr r1, _0802A360 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _0802A364 @ =BattleScript_NoItemSteal\n\
+ str r0, [r1]\n\
+ ldr r1, _0802A368 @ =gLastUsedAbility\n\
+ ldrb r0, [r7]\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ add r0, r9\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ ldrb r1, [r1]\n\
+ bl RecordAbilityBattle\n\
+ b _0802A49A\n\
+ .align 2, 0\n\
+_0802A360: .4byte gBattlescriptCurrInstr\n\
+_0802A364: .4byte BattleScript_NoItemSteal\n\
+_0802A368: .4byte gLastUsedAbility\n\
+_0802A36C:\n\
+ lsls r0, r4, 1\n\
+ ldr r4, _0802A458 @ =0x020160f0\n\
+ adds r6, r0, r4\n\
+ ldrh r5, [r5, 0x2E]\n\
+ mov r10, r5\n\
+ strh r1, [r6]\n\
+ ldr r3, _0802A45C @ =gBankAttacker\n\
+ ldrb r0, [r3]\n\
+ mov r1, r8\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ add r0, r9\n\
+ movs r1, 0\n\
+ strh r1, [r0, 0x2E]\n\
+ ldrb r0, [r7]\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ add r0, r9\n\
+ mov r3, r10\n\
+ strh r3, [r0, 0x2E]\n\
+ ldr r5, _0802A460 @ =gActiveBank\n\
+ ldr r1, _0802A45C @ =gBankAttacker\n\
+ ldrb r0, [r1]\n\
+ strb r0, [r5]\n\
+ str r6, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ movs r2, 0\n\
+ movs r3, 0x2\n\
+ bl EmitSetAttributes\n\
+ ldr r2, _0802A45C @ =gBankAttacker\n\
+ ldrb r0, [r2]\n\
+ bl MarkBufferBankForExecution\n\
+ ldrb r0, [r7]\n\
+ strb r0, [r5]\n\
+ ldrb r0, [r7]\n\
+ mov r3, r8\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ mov r1, r9\n\
+ adds r1, 0x2E\n\
+ adds r0, r1\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ movs r2, 0\n\
+ movs r3, 0x2\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r7]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, _0802A464 @ =0xfffe9f10\n\
+ adds r4, r0\n\
+ ldrb r0, [r7]\n\
+ lsls r0, 1\n\
+ ldr r2, _0802A468 @ =0x000160e8\n\
+ adds r0, r2\n\
+ adds r0, r4\n\
+ movs r1, 0\n\
+ strb r1, [r0]\n\
+ ldrb r0, [r7]\n\
+ lsls r0, 1\n\
+ ldr r1, _0802A46C @ =0x000160e9\n\
+ adds r0, r1\n\
+ adds r0, r4\n\
+ movs r3, 0\n\
+ strb r3, [r0]\n\
+ ldr r3, _0802A45C @ =gBankAttacker\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ adds r0, r4\n\
+ movs r2, 0\n\
+ strb r2, [r0]\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ adds r0, r4\n\
+ strb r2, [r0]\n\
+ ldr r1, _0802A470 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x5\n\
+ str r0, [r1]\n\
+ ldr r1, _0802A474 @ =gBattleTextBuff1\n\
+ movs r3, 0xFD\n\
+ strb r3, [r1]\n\
+ movs r2, 0xA\n\
+ strb r2, [r1, 0x1]\n\
+ ldrh r0, [r6]\n\
+ strb r0, [r1, 0x2]\n\
+ ldrh r0, [r6]\n\
+ lsrs r0, 8\n\
+ strb r0, [r1, 0x3]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x4]\n\
+ ldr r1, _0802A478 @ =gBattleTextBuff2\n\
+ strb r3, [r1]\n\
+ strb r2, [r1, 0x1]\n\
+ mov r3, r10\n\
+ strb r3, [r1, 0x2]\n\
+ mov r2, r10\n\
+ lsrs r0, r2, 8\n\
+ strb r0, [r1, 0x3]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ strb r0, [r1, 0x4]\n\
+ cmp r2, 0\n\
+ beq _0802A480\n\
+ ldrh r0, [r6]\n\
+ cmp r0, 0\n\
+ beq _0802A494\n\
+ ldr r1, _0802A47C @ =gBattleCommunication\n\
+ movs r0, 0x2\n\
+ b _0802A498\n\
+ .align 2, 0\n\
+_0802A458: .4byte 0x020160f0\n\
+_0802A45C: .4byte gBankAttacker\n\
+_0802A460: .4byte gActiveBank\n\
+_0802A464: .4byte 0xfffe9f10\n\
+_0802A468: .4byte 0x000160e8\n\
+_0802A46C: .4byte 0x000160e9\n\
+_0802A470: .4byte gBattlescriptCurrInstr\n\
+_0802A474: .4byte gBattleTextBuff1\n\
+_0802A478: .4byte gBattleTextBuff2\n\
+_0802A47C: .4byte gBattleCommunication\n\
+_0802A480:\n\
+ ldrh r0, [r6]\n\
+ cmp r0, 0\n\
+ beq _0802A494\n\
+ ldr r0, _0802A490 @ =gBattleCommunication\n\
+ movs r3, 0\n\
+ strb r3, [r0, 0x5]\n\
+ b _0802A49A\n\
+ .align 2, 0\n\
+_0802A490: .4byte gBattleCommunication\n\
+_0802A494:\n\
+ ldr r1, _0802A4AC @ =gBattleCommunication\n\
+ movs r0, 0x1\n\
+_0802A498:\n\
+ strb r0, [r1, 0x5]\n\
+_0802A49A:\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0802A4AC: .4byte gBattleCommunication\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+static void atkD3_copy_ability(void) //role play
+{
+ if (gBattleMons[gBankTarget].ability != 0 && gBattleMons[gBankTarget].ability != ABILITY_WONDER_GUARD)
+ {
+ gBattleMons[gBankAttacker].ability = gBattleMons[gBankTarget].ability;
+ gLastUsedAbility = gBattleMons[gBankTarget].ability;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkD4_wish_effect(void)
+{
+ switch (BSScriptRead8(gBattlescriptCurrInstr + 1))
+ {
+ case 0: //use wish
+ if (gWishFutureKnock.wishCounter[gBankAttacker] == 0)
+ {
+ gWishFutureKnock.wishCounter[gBankAttacker] = 2;
+ gWishFutureKnock.wishUserID[gBankAttacker] = gBattlePartyID[gBankAttacker];
+ gBattlescriptCurrInstr += 6;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ break;
+ case 1: //heal effect
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 4;
+ gBattleTextBuff1[2] = gBankTarget;
+ gBattleTextBuff1[3] = gWishFutureKnock.wishUserID[gBankTarget];
+ gBattleTextBuff1[4] = 0xFF;
+ gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2;
+ ATLEAST_ONE_PTR(&gBattleMoveDamage);
+ gBattleMoveDamage *= -1;
+ if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+ break;
+ }
+}
+
+static void atkD5_setroots(void) //ingrain
+{
+ if (gStatuses3[gBankAttacker] & STATUS3_ROOTED)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gStatuses3[gBankAttacker] |= STATUS3_ROOTED;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkD6_doubledamagedealtifdamaged(void)
+{
+ if ((gProtectStructs[gBankAttacker].physicalDmg && gProtectStructs[gBankAttacker].physicalBank == gBankTarget)
+ || (gProtectStructs[gBankAttacker].specialDmg && gProtectStructs[gBankAttacker].specialBank == gBankTarget))
+ BATTLE_STRUCT->dmgMultiplier = 2;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkD7_setyawn(void)
+{
+ if (gStatuses3[gBankTarget] & STATUS3_YAWN || (u8) gBattleMons[gBankTarget].status1)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gStatuses3[gBankTarget] |= 0x1000;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkD8_setdamagetohealthdifference(void)
+{
+ if (gBattleMons[gBankTarget].hp <= gBattleMons[gBankAttacker].hp)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBankTarget].hp - gBattleMons[gBankAttacker].hp;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkD9_scaledamagebyhealthratio(void)
+{
+ if (gDynamicBasePower == 0)
+ {
+ u8 power = gBattleMoves[gCurrentMove].power;
+ gDynamicBasePower = gBattleMons[gBankAttacker].hp * power / gBattleMons[gBankAttacker].maxHP;
+ ATLEAST_ONE_PTR(&gDynamicBasePower);
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkDA_abilityswap(void)
+{
+ if ((gBattleMons[gBankAttacker].ability == 0 && gBattleMons[gBankTarget].ability == 0)
+ || gBattleMons[gBankAttacker].ability == ABILITY_WONDER_GUARD || gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD
+ || gBattleMoveFlags & MOVE_NO_EFFECT)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ u8 atk_ability = gBattleMons[gBankAttacker].ability;
+ gBattleMons[gBankAttacker].ability = gBattleMons[gBankTarget].ability;
+ gBattleMons[gBankTarget].ability = atk_ability;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkDB_imprisoneffect(void)
+{
+ u8 r8 = 0;
+ if ((gStatuses3[gBankAttacker] & STATUS3_IMPRISIONED))
+ {
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ u8 bank;
+ sub_801529C(gBankAttacker);
+ for (bank = 0; bank < gNoOfAllBanks; bank++)
+ {
+ if (r8 != GetBankSide(bank))
+ {
+ int j;
+ for (j = 0; j < 4; j++)
+ {
+ int k;
+ for (k = 0; k < 4; k++)
+ {
+ if (gBattleMons[gBankAttacker].moves[j] == gBattleMons[bank].moves[k] && gBattleMons[gBankAttacker].moves[j])
+ break;
+ }
+ if (k != 4)
+ break;
+ }
+ if (j != 4)
+ {
+ gStatuses3[gBankAttacker] |= STATUS3_IMPRISIONED;
+ gBattlescriptCurrInstr += 5;
+ break;
+ }
+ }
+ }
+ if (bank == gNoOfAllBanks)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkDC_setgrudge(void)
+{
+ if (gStatuses3[gBankAttacker] & STATUS3_GRUDGE)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gStatuses3[gBankAttacker] |= STATUS3_GRUDGE;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkDD_weightdamagecalculation(void)
+{
+ int i;
+ for (i = 0; sWeightDamage[i] != 0xFFFF; i += 2)
+ {
+ if (sWeightDamage[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
+ break;
+ }
+ if (sWeightDamage[i] != 0xFFFF)
+ gDynamicBasePower = sWeightDamage[i + 1];
+ else
+ gDynamicBasePower = 120;
+ gBattlescriptCurrInstr++;
+}
+
+#ifdef NONMATCHING
+static void atkDE_asistattackselect(void)
+{
+ u32 chooseable_moves_no = 0;
+ struct Pokemon* poke;
+ int i, j;
+ u16* chooseable_moves;
+ if (GetBankIdentity(gBankAttacker) & 1)
+ poke = gEnemyParty;
+ else
+ poke = gPlayerParty;
+
+ for (i = 0; i < 6; i++)
+ {
+ if (i == gBattlePartyID[gBankAttacker])
+ break;
+ if (!GetMonData(&poke[i], MON_DATA_SPECIES2) || GetMonData(&poke[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ break;
+ chooseable_moves = &BATTLE_STRUCT->assistMove[chooseable_moves_no];
+ for (j = 0; j < 4; j++)
+ {
+ int k;
+ u16 move = GetMonData(&poke[i], MON_DATA_MOVE1 + i);
+ if (IsMoveUnchoosable(move))
+ break;
+ //sUnknown_081FACFE[k]
+ for (k = 0; ;k++)
+ {
+ if (sUnknown_081FACFE[k] == 0xFFFF)
+ {
+ if (move)
+ {
+ *chooseable_moves = move;
+ chooseable_moves++;
+ chooseable_moves_no++;
+ }
+ break;
+ }
+ if (sUnknown_081FACFE[k] == move)
+ break;
+ }
+ }
+ }
+ if (chooseable_moves_no)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gRandomMove = BATTLE_STRUCT->assistMove[Random() % chooseable_moves_no];
+ gBankTarget = sub_801B5C0(gRandomMove, 0);
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+#else
+__attribute__((naked))
+static void atkDE_asistattackselect(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x8\n\
+ movs r0, 0\n\
+ mov r10, r0\n\
+ ldr r0, _0802AB9C @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBankIdentity\n\
+ movs r1, 0x1\n\
+ ands r1, r0\n\
+ ldr r0, _0802ABA0 @ =gPlayerParty\n\
+ str r0, [sp]\n\
+ cmp r1, 0\n\
+ beq _0802AAAC\n\
+ ldr r1, _0802ABA4 @ =gEnemyParty\n\
+ str r1, [sp]\n\
+_0802AAAC:\n\
+ movs r2, 0\n\
+_0802AAAE:\n\
+ ldr r1, _0802ABA8 @ =gBattlePartyID\n\
+ ldr r0, _0802AB9C @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ adds r1, r2, 0x1\n\
+ str r1, [sp, 0x4]\n\
+ ldrh r0, [r0]\n\
+ cmp r2, r0\n\
+ beq _0802AB54\n\
+ movs r0, 0x64\n\
+ adds r6, r2, 0\n\
+ muls r6, r0\n\
+ ldr r0, [sp]\n\
+ adds r4, r0, r6\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x41\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0802AB54\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x41\n\
+ bl GetMonData\n\
+ movs r1, 0xCE\n\
+ lsls r1, 1\n\
+ cmp r0, r1\n\
+ beq _0802AB54\n\
+ movs r5, 0\n\
+ ldr r1, _0802ABAC @ =0x0000ffff\n\
+ mov r8, r1\n\
+ mov r9, r6\n\
+ mov r1, r10\n\
+ lsls r0, r1, 1\n\
+ ldr r1, _0802ABB0 @ =0x02016024\n\
+ adds r6, r0, r1\n\
+_0802AAF8:\n\
+ movs r7, 0\n\
+ adds r1, r5, 0\n\
+ adds r1, 0xD\n\
+ ldr r0, [sp]\n\
+ add r0, r9\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ adds r0, r4, 0\n\
+ bl IsMoveUnchoosable\n\
+ lsls r0, 24\n\
+ adds r1, r5, 0x1\n\
+ cmp r0, 0\n\
+ bne _0802AB4E\n\
+ ldr r0, _0802ABB4 @ =sUnknown_081FACFE\n\
+ ldrh r2, [r0]\n\
+ adds r3, r0, 0\n\
+ cmp r2, r8\n\
+ beq _0802AB42\n\
+ cmp r4, r2\n\
+ beq _0802AB38\n\
+ ldr r5, _0802ABAC @ =0x0000ffff\n\
+ adds r2, r3, 0\n\
+_0802AB2A:\n\
+ adds r2, 0x2\n\
+ adds r7, 0x1\n\
+ ldrh r0, [r2]\n\
+ cmp r0, r5\n\
+ beq _0802AB42\n\
+ cmp r4, r0\n\
+ bne _0802AB2A\n\
+_0802AB38:\n\
+ lsls r0, r7, 1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ cmp r0, r8\n\
+ bne _0802AB4E\n\
+_0802AB42:\n\
+ cmp r4, 0\n\
+ beq _0802AB4E\n\
+ strh r4, [r6]\n\
+ adds r6, 0x2\n\
+ movs r0, 0x1\n\
+ add r10, r0\n\
+_0802AB4E:\n\
+ adds r5, r1, 0\n\
+ cmp r5, 0x3\n\
+ ble _0802AAF8\n\
+_0802AB54:\n\
+ ldr r2, [sp, 0x4]\n\
+ cmp r2, 0x5\n\
+ ble _0802AAAE\n\
+ mov r1, r10\n\
+ cmp r1, 0\n\
+ beq _0802ABCC\n\
+ ldr r2, _0802ABB8 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ ldr r1, _0802ABBC @ =0xfffffbff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r4, _0802ABC0 @ =gRandomMove\n\
+ bl Random\n\
+ movs r1, 0xFF\n\
+ ands r1, r0\n\
+ mov r0, r10\n\
+ muls r0, r1\n\
+ asrs r0, 8\n\
+ lsls r0, 1\n\
+ ldr r1, _0802ABB0 @ =0x02016024\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r4]\n\
+ ldrh r0, [r4]\n\
+ movs r1, 0\n\
+ bl sub_801B5C0\n\
+ ldr r1, _0802ABC4 @ =gBankTarget\n\
+ strb r0, [r1]\n\
+ ldr r1, _0802ABC8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x5\n\
+ str r0, [r1]\n\
+ b _0802ABE6\n\
+ .align 2, 0\n\
+_0802AB9C: .4byte gBankAttacker\n\
+_0802ABA0: .4byte gPlayerParty\n\
+_0802ABA4: .4byte gEnemyParty\n\
+_0802ABA8: .4byte gBattlePartyID\n\
+_0802ABAC: .4byte 0x0000ffff\n\
+_0802ABB0: .4byte 0x02016024\n\
+_0802ABB4: .4byte sUnknown_081FACFE\n\
+_0802ABB8: .4byte gHitMarker\n\
+_0802ABBC: .4byte 0xfffffbff\n\
+_0802ABC0: .4byte gRandomMove\n\
+_0802ABC4: .4byte gBankTarget\n\
+_0802ABC8: .4byte gBattlescriptCurrInstr\n\
+_0802ABCC:\n\
+ ldr r3, _0802ABF8 @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+_0802ABE6:\n\
+ add sp, 0x8\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0802ABF8: .4byte gBattlescriptCurrInstr\n\
+ .syntax divided");
+}
+
+#endif // NONMATCHING
+
+static void atkDF_setmagiccoat(void)
+{
+ gBankTarget = gBankAttacker;
+ gSpecialStatuses[gBankAttacker].flag20 = 1;
+ if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gProtectStructs[gBankAttacker].bounceMove = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkE0_setstealstatchange(void)
+{
+ gSpecialStatuses[gBankAttacker].flag20 = 1;
+ if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ gProtectStructs[gBankAttacker].stealMove = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkE1_intimidate_string_loader(void)
+{
+ u8 side;
+
+ BATTLE_STRUCT->scriptingActive = ewram[0x160dd];
+ side = GetBankSide(BATTLE_STRUCT->scriptingActive);
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 9;
+ gBattleTextBuff1[2] = gBattleMons[BATTLE_STRUCT->scriptingActive].ability;
+ gBattleTextBuff1[3] = 0xFF;
+
+ for (;gBankTarget < gNoOfAllBanks; gBankTarget++)
+ {
+ if (GetBankSide(gBankTarget) == side)
+ continue;
+ if (!(gAbsentBankFlags & gBitTable[gBankTarget]))
+ break;
+ }
+
+ if (gBankTarget >= gNoOfAllBanks)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static void atkE2_switchout_abilities(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ switch (gBattleMons[gActiveBank].ability)
+ {
+ case ABILITY_NATURAL_CURE:
+ gBattleMons[gActiveBank].status1 = 0;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, gBitTable[ewram[gActiveBank + 0x16064]], 4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ break;
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atkE3_jumpiffainted(void)
+{
+ gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
+ if (gBattleMons[gActiveBank].hp == 0)
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atkE4_getsecretpowereffect(void)
+{
+ switch (gBattleTerrain)
+ {
+ case 0:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 2;
+ break;
+ case 1:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 1;
+ break;
+ case 2:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 27;
+ break;
+ case 3:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 23;
+ break;
+ case 4:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 22;
+ break;
+ case 5:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 24;
+ break;
+ case 6:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 7;
+ break;
+ case 7:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 8;
+ break;
+ default:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 5;
+ break;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkE5_pickup(void)
+{
+ int i;
+ for (i = 0; i < 6; i++)
+ {
+ u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ u16 held_item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ u8 ability;
+ if (GetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY))
+ ability = gBaseStats[species].ability2;
+ else
+ ability = gBaseStats[species].ability1;
+
+ if (ability == ABILITY_PICKUP && species != 0 && species != SPECIES_EGG && held_item == 0 && (Random() % 10) == 0)
+ {
+ s32 chance = Random() % 100;
+ s32 j;
+ for (j = 0; j < 18; j += 2)
+ {
+ if (sPickupItems[j + 1] > chance)
+ break;
+ }
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (const void*) &sPickupItems[j]);
+ }
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkE6_castform_change_animation(void)
+{
+ gActiveBank = BATTLE_STRUCT->scriptingActive;
+ if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE)
+ BATTLE_STRUCT->castformToChangeInto |= 0x80;
+ EmitBattleAnimation(0, 0, BATTLE_STRUCT->castformToChangeInto);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr++;
+}
+
+static void atkE7_castform_data_change(void)
+{
+ u8 form;
+ gBattlescriptCurrInstr++;
+ form = castform_switch(BATTLE_STRUCT->scriptingActive);
+ if (form)
+ {
+ b_push_move_exec(gUnknown_081D977D);
+ BATTLE_STRUCT->castformToChangeInto = form - 1;
+ }
+}
+
+static void atkE8_settypebasedhalvers(void) //water/mud sport
+{
+ bool8 worked = FALSE;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT)
+ {
+ if (!(gStatuses3[gBankAttacker] & STATUS3_MUDSPORT))
+ {
+ gStatuses3[gBankAttacker] |= STATUS3_MUDSPORT;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ worked = TRUE;
+ }
+ }
+ else //water sport
+ {
+ if (!(gStatuses3[gBankAttacker] & STATUS3_WATERSPORT))
+ {
+ gStatuses3[gBankAttacker] |= STATUS3_WATERSPORT;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ worked = TRUE;
+ }
+ }
+ if (worked)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkE9_setweatherballtype(void)
+{
+ if (WeatherHasEffect)
+ {
+ if ((u8)(gBattleWeather))
+ BATTLE_STRUCT->dmgMultiplier = 2;
+ if (gBattleWeather & WEATHER_RAINY)
+ BATTLE_STRUCT->dynamicMoveType = TYPE_WATER | 0x80;
+ else if (gBattleWeather & WEATHER_SANDSTORMY)
+ BATTLE_STRUCT->dynamicMoveType = TYPE_ROCK | 0x80;
+ else if (gBattleWeather & WEATHER_SUNNY)
+ BATTLE_STRUCT->dynamicMoveType = TYPE_FIRE | 0x80;
+ else if (gBattleWeather & weather_hail)
+ BATTLE_STRUCT->dynamicMoveType = TYPE_ICE | 0x80;
+ else
+ BATTLE_STRUCT->dynamicMoveType = TYPE_NORMAL | 0x80;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkEA_recycleitem(void)
+{
+ u16* used_item;
+ gActiveBank = gBankAttacker;
+ used_item = UsedHeldItem(gActiveBank);
+ if (*used_item && gBattleMons[gActiveBank].item == 0)
+ {
+ gLastUsedItem = *used_item;
+ *used_item = 0;
+ gBattleMons[gActiveBank].item = gLastUsedItem;
+ EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkEB_settypetoterrain(void)
+{
+ if (gBattleMons[gBankAttacker].type1 != sTerrainToType[gBattleTerrain] && gBattleMons[gBankAttacker].type2 != sTerrainToType[gBattleTerrain])
+ {
+ gBattleMons[gBankAttacker].type1 = sTerrainToType[gBattleTerrain];
+ gBattleMons[gBankAttacker].type2 = sTerrainToType[gBattleTerrain];
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 3;
+ gBattleTextBuff1[2] = sTerrainToType[gBattleTerrain];
+ gBattleTextBuff1[3] = 0xFF;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkEC_pursuit_sth(void)
+{
+ gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]) && gActionForBanks[gActiveBank] == 0 && gChosenMovesByBanks[gActiveBank] == MOVE_PURSUIT)
+ {
+ gUnknown_02024A76[gActiveBank] = 11;
+ gCurrentMove = MOVE_PURSUIT;
+ gBattlescriptCurrInstr += 5;
+ BATTLE_STRUCT->animTurn = 1;
+ BATTLE_STRUCT->unk160A7 = gBankAttacker;
+ gBankAttacker = gActiveBank;
+ }
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+}
+
+static void atkED_802B4B4(void)
+{
+ gEffectBank = gBankAttacker;
+ if (gBankAttacker == gBankTarget)
+ gBankAttacker = gBankTarget = BATTLE_STRUCT->scriptingActive;
+ else
+ gBankTarget = BATTLE_STRUCT->scriptingActive;
+ BATTLE_STRUCT->scriptingActive = gEffectBank;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkEE_removelightscreenreflect(void) //brick break
+{
+ u8 side = GetBankSide(gBankAttacker) ^ 1;
+ if (gSideTimer[side].reflectTimer || gSideTimer[side].lightscreenTimer)
+ {
+ gSideAffecting[side] &= ~(SIDE_REFLECT);
+ gSideAffecting[side] &= ~(SIDE_LIGHTSCREEN);
+ gSideTimer[side].reflectTimer = 0;
+ gSideTimer[side].lightscreenTimer = 0;
+ BATTLE_STRUCT->animTurn = 1;
+ BATTLE_STRUCT->animTargetsHit = 1;
+ }
+ else
+ {
+ BATTLE_STRUCT->animTurn = 0;
+ BATTLE_STRUCT->animTargetsHit = 0;
+ }
+ gBattlescriptCurrInstr++;
+}
+
+static void atkEF_pokeball_catch_calculation(void)
+{
+ u8 ball_multiplier = 0;
+ if (gBattleExecBuffer)
+ return;
+
+ gActiveBank = gBankAttacker;
+ gBankTarget = gBankAttacker ^ 1;
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ EmitBallThrowAnim(0, 5);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr = BattleScript_TrainerBallBlock;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
+ {
+ EmitBallThrowAnim(0, 4);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr = BattleScript_WallyBallThrow;
+ }
+ else
+ {
+ u32 odds;
+ u8 catch_rate;
+ if (gLastUsedItem == ITEM_SAFARI_BALL)
+ catch_rate = BATTLE_STRUCT->unk16089 * 1275 / 100; //correct the name to safariFleeRate
+ else
+ catch_rate = gBaseStats[gBattleMons[gBankTarget].species].catchRate;
+ if (gLastUsedItem > 5)
+ {
+ switch (gLastUsedItem)
+ {
+ case ITEM_NET_BALL:
+ if (gBattleMons[gBankTarget].type1 == TYPE_WATER || gBattleMons[gBankTarget].type2 == TYPE_WATER || gBattleMons[gBankTarget].type1 == TYPE_BUG || gBattleMons[gBankTarget].type2 == TYPE_BUG)
+ ball_multiplier = 30;
+ else
+ ball_multiplier = 10;
+ break;
+ case ITEM_DIVE_BALL:
+ if (sav1_map_get_light_level() == 5)
+ ball_multiplier = 35;
+ else
+ ball_multiplier = 10;
+ break;
+ case ITEM_NEST_BALL:
+ if (gBattleMons[gBankTarget].level <= 39)
+ {
+ ball_multiplier = 40 - gBattleMons[gBankTarget].level;
+ if (ball_multiplier <= 9)
+ ball_multiplier = 10;
+ }
+ else
+ ball_multiplier = 10;
+ break;
+ case ITEM_REPEAT_BALL:
+ if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
+ ball_multiplier = 30;
+ else
+ ball_multiplier = 10;
+ break;
+ case ITEM_TIMER_BALL:
+ ball_multiplier = gBattleResults.battleTurnCounter + 10;
+ if (ball_multiplier > 40)
+ ball_multiplier = 40;
+ break;
+ case ITEM_LUXURY_BALL:
+ case ITEM_PREMIER_BALL:
+ ball_multiplier = 10;
+ break;
+ }
+ }
+ else
+ ball_multiplier = sBallCatchBonuses[gLastUsedItem - 2];
+
+ odds = (catch_rate * ball_multiplier / 10) * (gBattleMons[gBankTarget].maxHP * 3 - gBattleMons[gBankTarget].hp * 2) / (3 * gBattleMons[gBankTarget].maxHP);
+ if (gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE))
+ odds *= 2;
+ if (gBattleMons[gBankTarget].status1 & (STATUS_POISON | STATUS_BURN | STATUS_PARALYSIS /*| STATUS_TOXIC_POISON */)) //nice one gf
+ odds = (odds * 15) / 10;
+
+ //I have NO CLUE how to fix that.
+ if (gLastUsedItem != ITEM_SAFARI_BALL)
+ {
+ register u16* item asm("r1") = &gLastUsedItem;
+ if (*item == ITEM_MASTER_BALL)
+ gBattleResults.unk5_1 = 1;
+ else
+ {
+ u8* a = &((u8*)(&gBattleResults))[0];
+ asm("ldrh r1, [r1]\n\
+ add r0, r0, r1");
+ if ((a)[0x34] < 0xFF)
+ {
+ a[0x34] += 1;
+ }
+ }
+ }
+ if (odds > 254) //poke caught
+ {
+ EmitBallThrowAnim(0, 4);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
+ SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem);
+ if (CalculatePlayerPartyCount() == 6)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else //poke may be caught, calculate shakes
+ {
+ u8 shakes;
+ odds = Sqrt(Sqrt(16711680 / odds));
+ odds = 1048560 / odds;
+ for (shakes = 0; shakes < 4 && Random() < odds; shakes++) {}
+ if (gLastUsedItem == ITEM_MASTER_BALL)
+ shakes = 4; //why calculate the shakes before that check?
+ EmitBallThrowAnim(0, shakes);
+ MarkBufferBankForExecution(gActiveBank);
+ if (shakes == 4) //poke caught, copy of the code above
+ {
+ gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
+ SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem);
+ if (CalculatePlayerPartyCount() == 6)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else //rip
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = shakes;
+ gBattlescriptCurrInstr = BattleScript_ShakeBallThrow;
+ }
+ }
+ }
+}
+
+static void atkF0_copy_caught_poke(void)
+{
+ GiveMonToPlayer(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]);
+ gBattleResults.caughtPoke = gBattleMons[gBankAttacker ^ 1].species;
+ GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleResults.caughtNick);
+ gBattlescriptCurrInstr++;
+}
+
+static void atkF1_setpoke_as_caught(void)
+{
+ if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ else
+ {
+ GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 3);
+ if (gBattleMons[gBankTarget].species == SPECIES_UNOWN)
+ gSaveBlock2.pokedex.unownPersonality = gBattleMons[gBankTarget].personality;
+ if (gBattleMons[gBankTarget].species == SPECIES_SPINDA) //else if
+ gSaveBlock2.pokedex.spindaPersonality = gBattleMons[gBankTarget].personality;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+extern const u32 gBattleTerrainTiles_Building[];
+extern const u32 gBattleTerrainTilemap_Building[];
+extern const u32 gBattleTerrainPalette_BattleTower[];
+
+static void atkF2_display_dex_info(void)
+{
+ switch (gBattleCommunication[0])
+ {
+ case 0:
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gBattleCommunication[0]++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ gBattleCommunication[1] = sub_809070C(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), gBattleMons[gBankTarget].otId, gBattleMons[gBankTarget].personality);
+ gBattleCommunication[0]++;
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active && gMain.callback2 == sub_800F808 && !gTasks[gBattleCommunication[1]].isActive)
+ {
+ LZDecompressVram(gBattleTerrainTiles_Building, (void*)(0x06008000));
+ LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(0x0600d000));
+ LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60);
+ REG_BG3CNT = 0x5a0b;
+ gUnknown_030041B0 = 0x100;
+ BeginNormalPaletteFade(0xfffc, 0, 0x10, 0, 0);
+ gBattleCommunication[0]++;
+ }
+ break;
+ case 3:
+ if (!gPaletteFade.active)
+ gBattlescriptCurrInstr++;
+ break;
+ }
+}
+
+__attribute__((naked))
+void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ ldr r4, [sp, 0x20]\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ mov r12, r1\n\
+ lsls r2, 24\n\
+ lsrs r5, r2, 24\n\
+ lsls r3, 24\n\
+ lsrs r7, r3, 24\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ mov r8, r4\n\
+ mov r2, r12\n\
+ cmp r2, r7\n\
+ bgt _0802BC5A\n\
+ lsls r1, r6, 1\n\
+ ldr r0, _0802BC20 @ =0x0600c000\n\
+ adds r1, r0\n\
+ mov r9, r1\n\
+_0802BC06:\n\
+ adds r1, r6, 0\n\
+ adds r0, r2, 0x1\n\
+ mov r10, r0\n\
+ cmp r1, r5\n\
+ bgt _0802BC54\n\
+ lsls r0, r2, 6\n\
+ mov r4, r9\n\
+ adds r3, r4, r0\n\
+_0802BC16:\n\
+ cmp r2, r12\n\
+ bne _0802BC28\n\
+ ldr r0, _0802BC24 @ =0x00001022\n\
+ b _0802BC36\n\
+ .align 2, 0\n\
+_0802BC20: .4byte 0x0600c000\n\
+_0802BC24: .4byte 0x00001022\n\
+_0802BC28:\n\
+ cmp r2, r7\n\
+ bne _0802BC34\n\
+ ldr r0, _0802BC30 @ =0x00001028\n\
+ b _0802BC36\n\
+ .align 2, 0\n\
+_0802BC30: .4byte 0x00001028\n\
+_0802BC34:\n\
+ ldr r0, _0802BC68 @ =0x00001025\n\
+_0802BC36:\n\
+ cmp r1, r6\n\
+ beq _0802BC42\n\
+ adds r0, 0x1\n\
+ cmp r1, r5\n\
+ bne _0802BC42\n\
+ adds r0, 0x1\n\
+_0802BC42:\n\
+ mov r4, r8\n\
+ cmp r4, 0\n\
+ beq _0802BC4A\n\
+ movs r0, 0\n\
+_0802BC4A:\n\
+ strh r0, [r3]\n\
+ adds r3, 0x2\n\
+ adds r1, 0x1\n\
+ cmp r1, r5\n\
+ ble _0802BC16\n\
+_0802BC54:\n\
+ mov r2, r10\n\
+ cmp r2, r7\n\
+ ble _0802BC06\n\
+_0802BC5A:\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0802BC68: .4byte 0x00001025\n\
+ .syntax divided");
+}
+
+void sub_802BC6C(void)
+{
+ sub_814A880(0xC8, ((gBattleCommunication[1] << 28) + 1207959552) >> 24); //what could that be?
+}
+
+void nullsub_6(void)
+{
+ return;
+}
+
+static void atkF3_nickname_caught_poke(void)
+{
+ switch (gBattleCommunication[0])
+ {
+ case 0:
+ sub_8023A80();
+ gBattleCommunication[0]++;
+ gBattleCommunication[1] = 0;
+ sub_802BC6C();
+ break;
+ case 1:
+ if (gMain.newKeys & 0x40 && gBattleCommunication[1] != 0)
+ {
+ PlaySE(5);
+ nullsub_6();
+ gBattleCommunication[1] = 0;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & 0x80 && gBattleCommunication[1] == 0)
+ {
+ PlaySE(5);
+ nullsub_6();
+ gBattleCommunication[1] = 1;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & 1)
+ {
+ PlaySE(5);
+ if (gBattleCommunication[1] == 0)
+ {
+ gBattleCommunication[0]++;
+ BeginFastPaletteFade(3);
+ }
+ else
+ gBattleCommunication[0] = 4;
+ }
+ else if (gMain.newKeys & 2)
+ {
+ PlaySE(5);
+ gBattleCommunication[0] = 4;
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick);
+ DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), sub_800F808);
+ gBattleCommunication[0]++;
+ }
+ break;
+ case 3:
+ if (gMain.callback2 == sub_800F808 && !gPaletteFade.active )
+ {
+ SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick);
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ }
+ break;
+ case 4:
+ if (CalculatePlayerPartyCount() == 6)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ break;
+ }
+}
+
+static void atkF4_802BEF0(void)
+{
+ gBattleMons[gBankAttacker].hp -= gBattleMoveDamage;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkF5_removeattackerstatus1(void)
+{
+ gBattleMons[gBankAttacker].status1 = 0;
+ gBattlescriptCurrInstr++;
+}
+
+static void atkF6_802BF48(void)
+{
+ gFightStateTracker = 0xC;
+}
+
+static void atkF7_802BF54(void)
+{
+ gFightStateTracker = 0xC;
+ gCurrentMoveTurn = gNoOfAllBanks;
+}
diff --git a/src/battle_6.c b/src/battle_6.c
index 9ea3f240a..c833aef5e 100644
--- a/src/battle_6.c
+++ b/src/battle_6.c
@@ -83,7 +83,7 @@ extern void sub_802E220();
extern void sub_802E2D4();
extern void sub_802E004(void);
extern void sub_802DF30(void);
-extern void sub_80325B8(void);
+extern void BattleMusicStop(void);
extern void PlayerBufferExecCompleted(void);
extern void bx_t1_healthbar_update(void);
extern void nullsub_91(void);
@@ -1101,7 +1101,7 @@ void sub_8030594(void)
void sub_8030674(void)
{
- sub_80325B8();
+ BattleMusicStop();
BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
PlayerBufferExecCompleted();
}
diff --git a/src/battle_7.c b/src/battle_7.c
index a93237608..f2838467e 100644
--- a/src/battle_7.c
+++ b/src/battle_7.c
@@ -808,7 +808,7 @@ void sub_80324F8(struct Pokemon *pkmn, u8 b)
}
}
-void sub_80325B8(void)
+void BattleMusicStop(void)
{
u8 r4 = GetBankByPlayerAI(0);
diff --git a/src/battle_ai.c b/src/battle_ai.c
index 6f91a104d..4206e8f83 100644
--- a/src/battle_ai.c
+++ b/src/battle_ai.c
@@ -896,7 +896,7 @@ static void BattleAICmd_if_user_cant_damage(void)
static void BattleAICmd_get_turn_count(void)
{
- AI_THINKING_STRUCT->funcResult = gBattleResults.BattleTurnCounter;
+ AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter;
gAIScriptPtr += 1;
}
@@ -1412,8 +1412,8 @@ static void BattleAICmd_get_highest_possible_damage(void)
s32 i;
gDynamicBasePower = 0;
- BATTLE_STRUCT->DynamicMoveType = 0;
- BATTLE_STRUCT->DmgMultiplier = 1;
+ BATTLE_STRUCT->dynamicMoveType = 0;
+ BATTLE_STRUCT->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
AI_THINKING_STRUCT->funcResult = 0;
@@ -1452,8 +1452,8 @@ static void BattleAICmd_if_damage_bonus(void)
u8 damageVar;
gDynamicBasePower = 0;
- BATTLE_STRUCT->DynamicMoveType = 0;
- BATTLE_STRUCT->DmgMultiplier = 1;
+ BATTLE_STRUCT->dynamicMoveType = 0;
+ BATTLE_STRUCT->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
@@ -1659,8 +1659,8 @@ static void BattleAICmd_if_can_faint(void)
}
gDynamicBasePower = 0;
- BATTLE_STRUCT->DynamicMoveType = 0;
- BATTLE_STRUCT->DmgMultiplier = 1;
+ BATTLE_STRUCT->dynamicMoveType = 0;
+ BATTLE_STRUCT->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
@@ -1688,8 +1688,8 @@ static void BattleAICmd_if_cant_faint(void)
}
gDynamicBasePower = 0;
- BATTLE_STRUCT->DynamicMoveType = 0;
- BATTLE_STRUCT->DmgMultiplier = 1;
+ BATTLE_STRUCT->dynamicMoveType = 0;
+ BATTLE_STRUCT->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
@@ -1843,7 +1843,7 @@ static void BattleAICmd_if_last_move_did_damage(void)
if (gAIScriptPtr[2] == 0)
{
- if (gDisableStructs[index].DisabledMove == 0)
+ if (gDisableStructs[index].disabledMove == 0)
{
gAIScriptPtr += 7;
return;
@@ -1856,7 +1856,7 @@ static void BattleAICmd_if_last_move_did_damage(void)
gAIScriptPtr += 7;
return;
}
- else if (gDisableStructs[index].EncoredMove != 0)
+ else if (gDisableStructs[index].encoredMove != 0)
{
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
return;
@@ -1869,7 +1869,7 @@ static void BattleAICmd_if_encored(void)
switch (gAIScriptPtr[1])
{
case 0: // _08109348
- if (gDisableStructs[gActiveBank].DisabledMove == AI_THINKING_STRUCT->moveConsidered)
+ if (gDisableStructs[gActiveBank].disabledMove == AI_THINKING_STRUCT->moveConsidered)
{
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
return;
@@ -1877,7 +1877,7 @@ static void BattleAICmd_if_encored(void)
gAIScriptPtr += 6;
return;
case 1: // _08109370
- if (gDisableStructs[gActiveBank].EncoredMove == AI_THINKING_STRUCT->moveConsidered)
+ if (gDisableStructs[gActiveBank].encoredMove == AI_THINKING_STRUCT->moveConsidered)
{
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
return;
@@ -1954,7 +1954,7 @@ static void BattleAICmd_is_first_turn(void)
else
index = gBankTarget;
- AI_THINKING_STRUCT->funcResult = gDisableStructs[index].IsFirstTurn;
+ AI_THINKING_STRUCT->funcResult = gDisableStructs[index].isFirstTurn;
gAIScriptPtr += 2;
}
@@ -1968,7 +1968,7 @@ static void BattleAICmd_get_stockpile_count(void)
else
index = gBankTarget;
- AI_THINKING_STRUCT->funcResult = gDisableStructs[index].StockpileCounter;
+ AI_THINKING_STRUCT->funcResult = gDisableStructs[index].stockpileCounter;
gAIScriptPtr += 2;
}
@@ -2025,7 +2025,7 @@ static void BattleAICmd_get_protect_count(void)
else
index = gBankTarget;
- AI_THINKING_STRUCT->funcResult = gDisableStructs[index].ProtectUses;
+ AI_THINKING_STRUCT->funcResult = gDisableStructs[index].protectUses;
gAIScriptPtr += 2;
}
@@ -2104,7 +2104,7 @@ static void BattleAICmd_if_level_compare(void)
static void BattleAICmd_if_taunted(void)
{
- if (gDisableStructs[gBankTarget].taunt != 0)
+ if (gDisableStructs[gBankTarget].tauntTimer1 != 0)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
@@ -2112,7 +2112,7 @@ static void BattleAICmd_if_taunted(void)
static void BattleAICmd_if_not_taunted(void)
{
- if (gDisableStructs[gBankTarget].taunt == 0)
+ if (gDisableStructs[gBankTarget].tauntTimer1 == 0)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
diff --git a/src/rom3.c b/src/rom3.c
index 02def5dfa..282253bff 100644
--- a/src/rom3.c
+++ b/src/rom3.c
@@ -582,7 +582,7 @@ void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, u8 *e)
+void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e)
{
int i;
@@ -590,7 +590,7 @@ void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, u8 *e)
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
for (i = 0; i < d; i++)
- gBattleBuffersTransferData[3 + i] = *(e++);
+ gBattleBuffersTransferData[3 + i] = *(u8*)(e++);
dp01_prepare_buffer(a, gBattleBuffersTransferData, d + 3);
}
@@ -615,7 +615,7 @@ void dp01_build_cmdbuf_x04_4_4_4(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void sub_800C704(u8 a, u8 b, u8 c)
+void EmitSwitchInAnim(u8 a, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 5;
gBattleBuffersTransferData[1] = b;
@@ -624,7 +624,7 @@ void sub_800C704(u8 a, u8 b, u8 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x06_a(u8 a, u8 b)
+void EmitReturnPokeToBall(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 6;
gBattleBuffersTransferData[1] = b;
@@ -640,7 +640,7 @@ void dp01_build_cmdbuf_x07_7_7_7(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x08_8_8_8(u8 a)
+void EmitTrainerSlide(u8 a)
{
gBattleBuffersTransferData[0] = 8;
gBattleBuffersTransferData[1] = 8;
@@ -685,7 +685,7 @@ void dp01_build_cmdbuf_x0C_C_C_C(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x0D_a(u8 a, u8 b)
+void EmitBallThrowAnim(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 13;
gBattleBuffersTransferData[1] = b;
@@ -1060,7 +1060,7 @@ void sub_800CBE0(u8 a, u8 *b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f(u8 a, u8 b, u8 c, u8 d, u8 *e)
+void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e)
{
int i;
@@ -1284,7 +1284,7 @@ void EmitEffectivenessSound(u8 a, u16 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void sub_800D074(u8 a, u16 b)
+void EmitPlaySound(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 44;
gBattleBuffersTransferData[1] = b;
diff --git a/src/tv.c b/src/tv.c
index c5b47cdae..a254bcd5f 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -316,14 +316,14 @@ void GabbyAndTyBeforeInterview(void)
{
u8 i;
- gSaveBlock1.gabbyAndTyData.mon1 = gBattleResults.Poke1Species;
- gSaveBlock1.gabbyAndTyData.mon2 = gBattleResults.OpponentSpecies;
- gSaveBlock1.gabbyAndTyData.lastMove = gBattleResults.LastUsedMove;
+ gSaveBlock1.gabbyAndTyData.mon1 = gBattleResults.poke1Species;
+ gSaveBlock1.gabbyAndTyData.mon2 = gBattleResults.opponentSpecies;
+ gSaveBlock1.gabbyAndTyData.lastMove = gBattleResults.lastUsedMove;
if (gSaveBlock1.gabbyAndTyData.battleNum != 0xff)
gSaveBlock1.gabbyAndTyData.battleNum ++;
gSaveBlock1.gabbyAndTyData.valA_0 = gBattleResults.unk5_0;
- if (gBattleResults.PlayerFaintCounter)
+ if (gBattleResults.playerFaintCounter)
gSaveBlock1.gabbyAndTyData.valA_1 = 1;
else
gSaveBlock1.gabbyAndTyData.valA_1 = 0;
@@ -489,14 +489,14 @@ void sub_80BDEC8(void)
sub_80BEB20();
sub_80BE778();
- if (gBattleResults.CaughtPoke == 0)
+ if (gBattleResults.caughtPoke == 0)
{
sub_80BE074();
}
else
{
sub_80BE028();
- if (sub_80BF77C(0xffff) == 0 && StringCompareWithoutExtCtrlCodes(gSpeciesNames[gBattleResults.CaughtPoke], gBattleResults.CaughtNick) != 0)
+ if (sub_80BF77C(0xffff) == 0 && StringCompareWithoutExtCtrlCodes(gSpeciesNames[gBattleResults.caughtPoke], gBattleResults.caughtNick) != 0)
{
gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows);
if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_POKEMON_TODAY_CAUGHT) != 1)
@@ -527,8 +527,8 @@ void sub_80BDEC8(void)
pokemonToday->var12 = total;
pokemonToday->ball = item;
StringCopy(pokemonToday->playerName, gSaveBlock2.playerName);
- StringCopy(pokemonToday->nickname, gBattleResults.CaughtNick);
- pokemonToday->species = gBattleResults.CaughtPoke;
+ StringCopy(pokemonToday->nickname, gBattleResults.caughtNick);
+ pokemonToday->species = gBattleResults.caughtPoke;
sub_80BE138((TVShow *)pokemonToday);
pokemonToday->language = GAME_LANGUAGE;
pokemonToday->language2 = sub_80BDEAC(pokemonToday->nickname);
@@ -550,8 +550,8 @@ void sub_80BE028(void)
worldOfMasters->var00 = TVSHOW_WORLD_OF_MASTERS;
}
worldOfMasters->var02++;
- worldOfMasters->var04 = gBattleResults.CaughtPoke;
- worldOfMasters->var08 = gBattleResults.Poke1Species;
+ worldOfMasters->var04 = gBattleResults.caughtPoke;
+ worldOfMasters->var08 = gBattleResults.poke1Species;
worldOfMasters->var0a = gMapHeader.regionMapSectionId;
}
@@ -577,8 +577,8 @@ void sub_80BE074(void)
zero = 0;
pokemonTodayFailed->var00 = TVSHOW_POKEMON_TODAY_FAILED;
pokemonTodayFailed->var01 = zero;
- pokemonTodayFailed->species = gBattleResults.Poke1Species;
- pokemonTodayFailed->species2 = gBattleResults.LastOpponentSpecies;
+ pokemonTodayFailed->species = gBattleResults.poke1Species;
+ pokemonTodayFailed->species2 = gBattleResults.lastOpponentSpecies;
pokemonTodayFailed->var10 = total;
pokemonTodayFailed->var11 = gBattleOutcome;
pokemonTodayFailed->var12 = gMapHeader.regionMapSectionId;
diff --git a/sym_ewram.txt b/sym_ewram.txt
index ecf74b07c..0e8b25e28 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -113,7 +113,7 @@ gCurrentMove: @ 2024BE6
gUnknown_02024BE8: @ 2024BE8
.space 0x2
-gUnknown_02024BEA: @ 2024BEA
+gRandomMove: @ 2024BEA
.space 0x2
gBattleMoveDamage: @ 2024BEC