summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-01-06 13:56:53 -0800
committerMarcus Huderle <huderlem@gmail.com>2018-01-07 20:06:45 -0800
commit36841a8498134931be3d1c73927f6fec4482fb30 (patch)
tree6b66094b1060986db0a101f516dbaca05c3e0d71
parent17d5ba39acb897e07e6842cbff5b1172cc6f7951 (diff)
Decompile more battle_2 functions
-rw-r--r--asm/battle_2.s1999
-rw-r--r--include/pokemon.h2
-rw-r--r--src/battle/battle_2.c1645
-rw-r--r--src/battle/battle_ai.c4
4 files changed, 1647 insertions, 2003 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 5a751ba55..edd7fffde 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -5,2005 +5,6 @@
.text
- thumb_func_start sub_8012324
-sub_8012324: @ 8012324
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- ldr r0, _08012340 @ =gBattleCommunication
- movs r1, 0
- strb r1, [r0, 0x4]
- ldr r0, _08012344 @ =gActiveBank
- strb r1, [r0]
- ldr r0, _08012348 @ =gNoOfAllBanks
- bl _08012F74
- .align 2, 0
-_08012340: .4byte gBattleCommunication
-_08012344: .4byte gActiveBank
-_08012348: .4byte gNoOfAllBanks
-_0801234C:
- ldr r4, _08012374 @ =gActiveBank
- ldrb r0, [r4]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08012378 @ =gBattleCommunication
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x6
- bls _08012368
- bl _08012F66
-_08012368:
- lsls r0, 2
- ldr r1, _0801237C @ =_08012380
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08012374: .4byte gActiveBank
-_08012378: .4byte gBattleCommunication
-_0801237C: .4byte _08012380
- .align 2, 0
-_08012380:
- .4byte _0801239C
- .4byte _080124C8
- .4byte _08012A28
- .4byte _08012DA8
- .4byte _08012E50
- .4byte _08012E94
- .4byte _08012F38
-_0801239C:
- ldr r4, _08012434 @ =gSharedMem
- ldr r0, _08012438 @ =gActiveBank
- ldrb r0, [r0]
- ldr r1, _0801243C @ =0x00016068
- adds r0, r1
- adds r0, r4
- movs r1, 0x6
- strb r1, [r0]
- ldr r0, _08012440 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _080123F8
- movs r1, 0x2
- movs r0, 0x2
- ands r0, r5
- cmp r0, 0
- beq _080123F8
- eors r5, r1
- adds r0, r5, 0
- bl GetBankByPlayerAI
- ldr r2, _08012444 @ =0x000160a6
- adds r1, r4, r2
- ldrb r1, [r1]
- ldr r2, _08012448 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080123F8
- ldr r4, _0801244C @ =gBattleCommunication
- adds r0, r5, 0
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r0, 24
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x4
- beq _080123F8
- bl _08012F66
-_080123F8:
- ldr r0, _08012434 @ =gSharedMem
- ldr r3, _08012444 @ =0x000160a6
- adds r0, r3
- ldrb r3, [r0]
- ldr r1, _08012448 @ =gBitTable
- ldr r4, _08012438 @ =gActiveBank
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ands r3, r0
- cmp r3, 0
- beq _08012468
- ldr r0, _08012450 @ =gActionForBanks
- adds r0, r2, r0
- movs r1, 0xD
- strb r1, [r0]
- ldr r0, _08012440 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08012454
- ldr r0, _0801244C @ =gBattleCommunication
- ldrb r1, [r4]
- adds r1, r0
- movs r0, 0x4
- strb r0, [r1]
- bl _08012F66
- .align 2, 0
-_08012434: .4byte gSharedMem
-_08012438: .4byte gActiveBank
-_0801243C: .4byte 0x00016068
-_08012440: .4byte gBattleTypeFlags
-_08012444: .4byte 0x000160a6
-_08012448: .4byte gBitTable
-_0801244C: .4byte gBattleCommunication
-_08012450: .4byte gActionForBanks
-_08012454:
- ldr r0, _08012464 @ =gBattleCommunication
- ldrb r1, [r4]
- adds r1, r0
- movs r0, 0x3
- strb r0, [r1]
- bl _08012F66
- .align 2, 0
-_08012464: .4byte gBattleCommunication
-_08012468:
- ldr r1, _0801249C @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 5
- ands r0, r1
- cmp r0, 0
- bne _08012488
- movs r0, 0x80
- lsls r0, 15
- ands r1, r0
- cmp r1, 0
- beq _080124A8
-_08012488:
- ldr r0, _080124A0 @ =gActionForBanks
- adds r0, r2, r0
- strb r3, [r0]
- ldr r1, _080124A4 @ =gBattleCommunication
- ldrb r0, [r4]
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0]
- bl _08012F66
- .align 2, 0
-_0801249C: .4byte gBattleMons
-_080124A0: .4byte gActionForBanks
-_080124A4: .4byte gBattleCommunication
-_080124A8:
- ldr r0, _080124C0 @ =gActionForBanks
- ldrb r1, [r0]
- ldr r0, _080124C4 @ =gBattleBufferB
- ldrb r2, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r2, r0
- movs r0, 0
- bl Emitcmd18
- bl _08012E32
- .align 2, 0
-_080124C0: .4byte gActionForBanks
-_080124C4: .4byte gBattleBufferB
-_080124C8:
- ldr r4, _08012520 @ =gBattleExecBuffer
- ldr r1, _08012524 @ =gBitTable
- ldr r3, _08012528 @ =gActiveBank
- ldrb r5, [r3]
- lsls r0, r5, 2
- adds r0, r1
- ldr r2, [r0]
- lsls r0, r2, 4
- movs r1, 0xF0
- lsls r1, 24
- orrs r0, r1
- orrs r0, r2
- lsls r1, r2, 8
- orrs r0, r1
- lsls r2, 12
- orrs r0, r2
- ldr r1, [r4]
- ands r1, r0
- mov r8, r3
- cmp r1, 0
- beq _080124F6
- bl _08012F66
-_080124F6:
- ldr r2, _0801252C @ =gActionForBanks
- adds r2, r5, r2
- ldr r1, _08012530 @ =gBattleBufferB
- lsls r0, r5, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldrb r0, [r3]
- lsls r0, 9
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0xC
- bls _08012514
- b _08012968
-_08012514:
- lsls r0, 2
- ldr r1, _08012534 @ =_08012538
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08012520: .4byte gBattleExecBuffer
-_08012524: .4byte gBitTable
-_08012528: .4byte gActiveBank
-_0801252C: .4byte gActionForBanks
-_08012530: .4byte gBattleBufferB
-_08012534: .4byte _08012538
- .align 2, 0
-_08012538:
- .4byte _0801256C
- .4byte _080126B4
- .4byte _080126E0
- .4byte _08012968
- .4byte _08012968
- .4byte _080128B0
- .4byte _08012908
- .4byte _08012968
- .4byte _08012968
- .4byte _08012968
- .4byte _08012968
- .4byte _08012968
- .4byte _0801292C
-_0801256C:
- bl AreAllMovesUnusable
- lsls r0, 24
- cmp r0, 0
- beq _080125D0
- ldr r0, _080125B4 @ =gBattleCommunication
- ldr r2, _080125B8 @ =gActiveBank
- ldrb r1, [r2]
- adds r1, r0
- movs r4, 0
- movs r0, 0x5
- strb r0, [r1]
- ldr r3, _080125BC @ =gSharedMem
- ldrb r0, [r2]
- ldr r1, _080125C0 @ =0x00016060
- adds r0, r1
- adds r0, r3
- strb r4, [r0]
- ldrb r0, [r2]
- ldr r4, _080125C4 @ =0x00016094
- adds r0, r4
- adds r0, r3
- movs r1, 0x3
- strb r1, [r0]
- ldrb r1, [r2]
- ldr r0, _080125C8 @ =0x00016010
- adds r2, r1, r0
- adds r2, r3
- ldr r0, _080125CC @ =gBattleBufferB
- lsls r1, 9
- adds r0, 0x3
- adds r1, r0
- ldrb r0, [r1]
- strb r0, [r2]
- bl _08012F90
- .align 2, 0
-_080125B4: .4byte gBattleCommunication
-_080125B8: .4byte gActiveBank
-_080125BC: .4byte gSharedMem
-_080125C0: .4byte 0x00016060
-_080125C4: .4byte 0x00016094
-_080125C8: .4byte 0x00016010
-_080125CC: .4byte gBattleBufferB
-_080125D0:
- ldr r1, _080125FC @ =gDisableStructs
- ldr r5, _08012600 @ =gActiveBank
- ldrb r4, [r5]
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- ldrh r2, [r0, 0x6]
- cmp r2, 0
- beq _0801260C
- ldr r1, _08012604 @ =gChosenMovesByBanks
- lsls r0, r4, 1
- adds r0, r1
- strh r2, [r0]
- ldr r1, _08012608 @ =gBattleCommunication
- ldrb r0, [r5]
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0]
- bl _08012F90
- .align 2, 0
-_080125FC: .4byte gDisableStructs
-_08012600: .4byte gActiveBank
-_08012604: .4byte gChosenMovesByBanks
-_08012608: .4byte gBattleCommunication
-_0801260C:
- add r2, sp, 0x4
- ldr r3, _080126AC @ =gBattleMons
- movs r1, 0x58
- adds r0, r4, 0
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r2, 0x10]
- ldrb r0, [r5]
- muls r0, r1
- adds r0, r3
- adds r0, 0x21
- ldrb r0, [r0]
- strb r0, [r2, 0x12]
- ldrb r0, [r5]
- muls r0, r1
- adds r0, r3
- adds r0, 0x22
- ldrb r0, [r0]
- strb r0, [r2, 0x13]
- movs r4, 0
- mov r1, sp
- adds r1, 0xC
- str r1, [sp, 0x18]
- add r2, sp, 0x10
- mov r10, r2
- mov r8, r3
- adds r7, r5, 0
- movs r6, 0x58
- movs r3, 0xC
- add r3, r8
- mov r9, r3
- add r5, sp, 0x4
-_0801264E:
- lsls r2, r4, 1
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r2, r0
- add r0, r9
- ldrh r0, [r0]
- strh r0, [r5]
- ldr r0, [sp, 0x18]
- adds r3, r0, r4
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r4, r0
- mov r1, r8
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r3]
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- adds r2, r1
- add r2, r9
- ldrh r0, [r2]
- add r1, r8
- adds r1, 0x3B
- ldrb r1, [r1]
- lsls r2, r4, 24
- lsrs r2, 24
- bl CalculatePPWithBonus
- mov r2, r10
- adds r1, r2, r4
- strb r0, [r1]
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _0801264E
- ldr r0, _080126B0 @ =gBattleTypeFlags
- ldrb r0, [r0]
- movs r1, 0x1
- ands r1, r0
- movs r0, 0
- movs r2, 0
- add r3, sp, 0x4
- bl Emitcmd20
- b _0801289E
- .align 2, 0
-_080126AC: .4byte gBattleMons
-_080126B0: .4byte gBattleTypeFlags
-_080126B4:
- ldr r0, _080126D0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- ldr r0, _080126D4 @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _080126C2
- b _08012908
-_080126C2:
- ldr r1, _080126D8 @ =gUnknown_02024C1C
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080126DC @ =BattleScript_ActionSelectionItemsCantBeUsed
- b _080129CC
- .align 2, 0
-_080126D0: .4byte gBattleTypeFlags
-_080126D4: .4byte 0x00000902
-_080126D8: .4byte gUnknown_02024C1C
-_080126DC: .4byte BattleScript_ActionSelectionItemsCantBeUsed
-_080126E0:
- ldr r3, _08012738 @ =gSharedMem
- ldr r5, _0801273C @ =gActiveBank
- ldrb r0, [r5]
- ldr r4, _08012740 @ =0x00016064
- adds r1, r0, r4
- adds r1, r3
- ldr r2, _08012744 @ =gBattlePartyID
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1]
- ldr r7, _08012748 @ =gBattleMons
- ldrb r2, [r5]
- movs r6, 0x58
- adds r0, r2, 0
- muls r0, r6
- adds r1, r7, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _0801274C @ =0x0400e000
- ands r0, r1
- cmp r0, 0
- bne _08012722
- ldr r0, _08012750 @ =gStatuses3
- lsls r1, r2, 2
- adds r1, r0
- ldr r1, [r1]
- movs r0, 0x80
- lsls r0, 3
- ands r1, r0
- cmp r1, 0
- beq _08012758
-_08012722:
- lsls r0, r2, 1
- adds r0, r2
- ldr r2, _08012754 @ =0x0001606c
- adds r1, r3, r2
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0x6
- b _0801286C
- .align 2, 0
-_08012738: .4byte gSharedMem
-_0801273C: .4byte gActiveBank
-_08012740: .4byte 0x00016064
-_08012744: .4byte gBattlePartyID
-_08012748: .4byte gBattleMons
-_0801274C: .4byte 0x0400e000
-_08012750: .4byte gStatuses3
-_08012754: .4byte 0x0001606c
-_08012758:
- str r1, [sp]
- movs r0, 0xC
- adds r1, r2, 0
- movs r2, 0x17
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080127E0
- ldrb r1, [r5]
- str r4, [sp]
- movs r0, 0xC
- movs r2, 0x47
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080127A8
- ldrb r0, [r5]
- muls r0, r6
- adds r1, r0, r7
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _080127A8
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _080127A8
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1A
- bne _080127E0
-_080127A8:
- ldr r5, _08012808 @ =gActiveBank
- ldrb r1, [r5]
- movs r0, 0
- str r0, [sp]
- movs r0, 0xF
- movs r2, 0x2A
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _08012818
- ldr r2, _0801280C @ =gBattleMons
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x8
- beq _080127E0
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _08012818
-_080127E0:
- subs r1, r4, 0x1
- lsls r1, 4
- movs r0, 0x4
- orrs r1, r0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08012810 @ =gLastUsedAbility
- ldrb r3, [r0]
- ldr r0, _08012808 @ =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 1
- adds r0, r2
- ldr r2, _08012814 @ =gSharedMem + 0x1606C
- adds r0, r2
- str r0, [sp]
- movs r0, 0
- movs r2, 0x6
- bl EmitChoosePokemon
- b _0801289E
- .align 2, 0
-_08012808: .4byte gActiveBank
-_0801280C: .4byte gBattleMons
-_08012810: .4byte gLastUsedAbility
-_08012814: .4byte gSharedMem + 0x1606C
-_08012818:
- ldr r0, _08012830 @ =gActiveBank
- ldrb r1, [r0]
- mov r8, r0
- cmp r1, 0x2
- bne _08012840
- ldr r0, _08012834 @ =gActionForBanks
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _08012840
- ldr r3, _08012838 @ =gSharedMem
- ldr r4, _0801283C @ =0x00016068
- b _08012854
- .align 2, 0
-_08012830: .4byte gActiveBank
-_08012834: .4byte gActionForBanks
-_08012838: .4byte gSharedMem
-_0801283C: .4byte 0x00016068
-_08012840:
- mov r2, r8
- ldrb r0, [r2]
- cmp r0, 0x3
- bne _08012884
- ldr r0, _08012874 @ =gActionForBanks
- ldrb r0, [r0, 0x1]
- cmp r0, 0x2
- bne _08012884
- ldr r3, _08012878 @ =gSharedMem
- ldr r4, _0801287C @ =0x00016069
-_08012854:
- adds r0, r3, r4
- ldrb r2, [r0]
- mov r0, r8
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- ldr r1, _08012880 @ =0x0001606c
- adds r3, r1
- adds r0, r3
- str r0, [sp]
- movs r0, 0
- movs r1, 0
-_0801286C:
- movs r3, 0
- bl EmitChoosePokemon
- b _0801289E
- .align 2, 0
-_08012874: .4byte gActionForBanks
-_08012878: .4byte gSharedMem
-_0801287C: .4byte 0x00016069
-_08012880: .4byte 0x0001606c
-_08012884:
- ldr r0, _080128A8 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- ldr r1, _080128AC @ =gSharedMem + 0x1606C
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0
- movs r2, 0x6
- movs r3, 0
- bl EmitChoosePokemon
-_0801289E:
- ldr r0, _080128A8 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- b _08012968
- .align 2, 0
-_080128A8: .4byte gActiveBank
-_080128AC: .4byte gSharedMem + 0x1606C
-_080128B0:
- bl PlayerPartyAndPokemonStorageFull
- lsls r0, 24
- cmp r0, 0
- beq _08012968
- ldr r1, _080128EC @ =gUnknown_02024C1C
- ldr r2, _080128F0 @ =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080128F4 @ =BattleScript_PrintFullBox
- str r1, [r0]
- ldr r0, _080128F8 @ =gBattleCommunication
- ldrb r1, [r2]
- adds r1, r0
- movs r3, 0
- movs r0, 0x5
- strb r0, [r1]
- ldr r1, _080128FC @ =gSharedMem
- ldrb r0, [r2]
- ldr r4, _08012900 @ =0x00016060
- adds r0, r4
- adds r0, r1
- strb r3, [r0]
- ldrb r0, [r2]
- ldr r2, _08012904 @ =0x00016094
- adds r0, r2
- adds r0, r1
- strb r3, [r0]
- b _08012F90
- .align 2, 0
-_080128EC: .4byte gUnknown_02024C1C
-_080128F0: .4byte gActiveBank
-_080128F4: .4byte BattleScript_PrintFullBox
-_080128F8: .4byte gBattleCommunication
-_080128FC: .4byte gSharedMem
-_08012900: .4byte 0x00016060
-_08012904: .4byte 0x00016094
-_08012908:
- ldr r4, _08012924 @ =gActiveBank
- ldrb r0, [r4]
- lsls r1, r0, 1
- adds r1, r0
- ldr r0, _08012928 @ =gSharedMem + 0x1606C
- adds r1, r0
- movs r0, 0
- bl EmitOpenBag
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08012968
- .align 2, 0
-_08012924: .4byte gActiveBank
-_08012928: .4byte gSharedMem + 0x1606C
-_0801292C:
- ldr r4, _08012964 @ =gBattleCommunication
- mov r3, r8
- ldrb r1, [r3]
- adds r1, r4
- movs r5, 0
- movs r0, 0x6
- strb r0, [r1]
- ldrb r0, [r3]
- bl GetBankIdentity
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r0, 24
- adds r0, r4
- strb r5, [r0]
- movs r0, 0
- bl Emitcmd50
- mov r4, r8
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08012F90
- .align 2, 0
-_08012964: .4byte gBattleCommunication
-_08012968:
- ldr r0, _08012994 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0xA
- ands r0, r1
- cmp r0, 0x8
- bne _080129A8
- ldr r0, _08012998 @ =gBattleBufferB
- ldr r4, _0801299C @ =gActiveBank
- ldrb r1, [r4]
- lsls r1, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x3
- bne _080129A8
- ldr r0, _080129A0 @ =BattleScript_PrintCantRunFromTrainer
- bl b_call_bc_move_exec
- ldr r1, _080129A4 @ =gBattleCommunication
- ldrb r0, [r4]
- adds r0, r1
- b _08012BFE
- .align 2, 0
-_08012994: .4byte gBattleTypeFlags
-_08012998: .4byte gBattleBufferB
-_0801299C: .4byte gActiveBank
-_080129A0: .4byte BattleScript_PrintCantRunFromTrainer
-_080129A4: .4byte gBattleCommunication
-_080129A8:
- bl CanRunFromBattle
- lsls r0, 24
- cmp r0, 0
- beq _08012A14
- ldr r0, _080129F4 @ =gBattleBufferB
- ldr r3, _080129F8 @ =gActiveBank
- ldrb r2, [r3]
- lsls r1, r2, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x3
- bne _08012A14
- ldr r1, _080129FC @ =gUnknown_02024C1C
- lsls r0, r2, 2
- adds r0, r1
- ldr r1, _08012A00 @ =BattleScript_PrintCantEscapeFromBattle
-_080129CC:
- str r1, [r0]
- ldr r0, _08012A04 @ =gBattleCommunication
- ldrb r1, [r3]
- adds r1, r0
- movs r2, 0
- movs r0, 0x5
- strb r0, [r1]
- ldr r1, _08012A08 @ =gSharedMem
- ldrb r0, [r3]
- ldr r4, _08012A0C @ =0x00016060
- adds r0, r4
- adds r0, r1
- strb r2, [r0]
- ldrb r0, [r3]
- ldr r3, _08012A10 @ =0x00016094
- adds r0, r3
- adds r0, r1
- strb r2, [r0]
- b _08012F90
- .align 2, 0
-_080129F4: .4byte gBattleBufferB
-_080129F8: .4byte gActiveBank
-_080129FC: .4byte gUnknown_02024C1C
-_08012A00: .4byte BattleScript_PrintCantEscapeFromBattle
-_08012A04: .4byte gBattleCommunication
-_08012A08: .4byte gSharedMem
-_08012A0C: .4byte 0x00016060
-_08012A10: .4byte 0x00016094
-_08012A14:
- ldr r2, _08012A20 @ =gBattleCommunication
- ldr r0, _08012A24 @ =gActiveBank
- ldrb r1, [r0]
- adds r1, r2
- b _08012E3E
- .align 2, 0
-_08012A20: .4byte gBattleCommunication
-_08012A24: .4byte gActiveBank
-_08012A28:
- ldr r4, _08012A6C @ =gBattleExecBuffer
- ldr r1, _08012A70 @ =gBitTable
- ldr r3, _08012A74 @ =gActiveBank
- ldrb r5, [r3]
- lsls r0, r5, 2
- adds r0, r1
- ldr r2, [r0]
- lsls r0, r2, 4
- movs r1, 0xF0
- lsls r1, 24
- orrs r0, r1
- orrs r0, r2
- lsls r1, r2, 8
- orrs r0, r1
- lsls r2, 12
- orrs r0, r2
- ldr r1, [r4]
- ands r1, r0
- mov r8, r3
- cmp r1, 0
- beq _08012A54
- b _08012F66
-_08012A54:
- ldr r1, _08012A78 @ =gActionForBanks
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r3, r1, 0
- cmp r0, 0x9
- bls _08012A62
- b _08012F66
-_08012A62:
- lsls r0, 2
- ldr r1, _08012A7C @ =_08012A80
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08012A6C: .4byte gBattleExecBuffer
-_08012A70: .4byte gBitTable
-_08012A74: .4byte gActiveBank
-_08012A78: .4byte gActionForBanks
-_08012A7C: .4byte _08012A80
- .align 2, 0
-_08012A80:
- .4byte _08012AA8
- .4byte _08012BB0
- .4byte _08012BE8
- .4byte _08012CE0
- .4byte _08012D04
- .4byte _08012D18
- .4byte _08012D2C
- .4byte _08012D5C
- .4byte _08012D70
- .4byte _08012D94
-_08012AA8:
- ldr r0, _08012AC8 @ =gBattleBufferB
- mov r1, r8
- ldrb r4, [r1]
- lsls r1, r4, 9
- adds r2, r0, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r6, r0, 0
- cmp r1, 0x9
- bgt _08012ACC
- cmp r1, 0x3
- blt _08012ACC
- adds r0, r4, r3
- strb r1, [r0]
- b _08012F90
- .align 2, 0
-_08012AC8: .4byte gBattleBufferB
-_08012ACC:
- adds r3, r6, 0
- mov r5, r8
- ldrb r4, [r5]
- lsls r1, r4, 9
- adds r7, r3, 0x2
- adds r0, r1, r7
- ldrb r2, [r0]
- adds r3, 0x3
- mov r9, r3
- add r1, r9
- ldrb r0, [r1]
- lsls r0, 8
- orrs r2, r0
- ldr r0, _08012AF4 @ =0x0000ffff
- cmp r2, r0
- bne _08012AFC
- ldr r0, _08012AF8 @ =gBattleCommunication
- adds r0, r4, r0
- b _08012BFE
- .align 2, 0
-_08012AF4: .4byte 0x0000ffff
-_08012AF8: .4byte gBattleCommunication
-_08012AFC:
- bl sub_8015894
- lsls r0, 24
- cmp r0, 0
- beq _08012B48
- ldr r0, _08012B38 @ =gBattleCommunication
- ldrb r1, [r5]
- adds r1, r0
- movs r2, 0
- movs r0, 0x5
- strb r0, [r1]
- ldr r3, _08012B3C @ =gSharedMem
- ldrb r0, [r5]
- ldr r4, _08012B40 @ =0x00016060
- adds r0, r4
- adds r0, r3
- strb r2, [r0]
- ldrb r0, [r5]
- lsls r0, 9
- adds r1, r6, 0x1
- adds r0, r1
- strb r2, [r0]
- ldrb r0, [r5]
- ldr r1, _08012B44 @ =0x00016094
- adds r0, r1
- adds r0, r3
- movs r1, 0x1
- strb r1, [r0]
- b _08012F90
- .align 2, 0
-_08012B38: .4byte gBattleCommunication
-_08012B3C: .4byte gSharedMem
-_08012B40: .4byte 0x00016060
-_08012B44: .4byte 0x00016094
-_08012B48:
- ldr r6, _08012B98 @ =gSharedMem
- mov r2, r8
- ldrb r0, [r2]
- ldr r2, _08012B9C @ =0x0001608c
- adds r1, r0, r2
- adds r1, r6
- lsls r0, 9
- adds r0, r7
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _08012BA0 @ =gChosenMovesByBanks
- mov r4, r8
- ldrb r3, [r4]
- lsls r5, r3, 1
- adds r5, r0
- ldr r4, _08012BA4 @ =gBattleMons
- adds r2, r3, r2
- adds r2, r6
- ldrb r0, [r2]
- lsls r0, 1
- movs r1, 0x58
- muls r1, r3
- adds r0, r1
- adds r4, 0xC
- adds r0, r4
- ldrh r0, [r0]
- strh r0, [r5]
- mov r1, r8
- ldrb r0, [r1]
- ldr r2, _08012BA8 @ =0x00016010
- adds r1, r0, r2
- adds r1, r6
- lsls r0, 9
- add r0, r9
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _08012BAC @ =gBattleCommunication
- mov r3, r8
- ldrb r1, [r3]
- b _08012E3C
- .align 2, 0
-_08012B98: .4byte gSharedMem
-_08012B9C: .4byte 0x0001608c
-_08012BA0: .4byte gChosenMovesByBanks
-_08012BA4: .4byte gBattleMons
-_08012BA8: .4byte 0x00016010
-_08012BAC: .4byte gBattleCommunication
-_08012BB0:
- ldr r2, _08012BD8 @ =gBattleBufferB
- ldr r5, _08012BDC @ =gActiveBank
- ldrb r4, [r5]
- lsls r1, r4, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r0, [r1]
- lsls r0, 8
- orrs r3, r0
- cmp r3, 0
- bne _08012BCE
- b _08012F60
-_08012BCE:
- ldr r0, _08012BE0 @ =gLastUsedItem
- strh r3, [r0]
- ldr r0, _08012BE4 @ =gBattleCommunication
- ldrb r1, [r5]
- b _08012E3C
- .align 2, 0
-_08012BD8: .4byte gBattleBufferB
-_08012BDC: .4byte gActiveBank
-_08012BE0: .4byte gLastUsedItem
-_08012BE4: .4byte gBattleCommunication
-_08012BE8:
- ldr r4, _08012C04 @ =gBattleBufferB
- ldr r7, _08012C08 @ =gActiveBank
- ldrb r2, [r7]
- lsls r0, r2, 9
- adds r1, r4, 0x1
- adds r0, r1
- ldrb r1, [r0]
- cmp r1, 0x6
- bne _08012C10
- ldr r0, _08012C0C @ =gBattleCommunication
- adds r0, r2, r0
-_08012BFE:
- movs r1, 0
- strb r1, [r0]
- b _08012F66
- .align 2, 0
-_08012C04: .4byte gBattleBufferB
-_08012C08: .4byte gActiveBank
-_08012C0C: .4byte gBattleCommunication
-_08012C10:
- ldr r0, _08012CC4 @ =gSharedMem
- mov r12, r0
- ldr r3, _08012CC8 @ =0x00016068
- adds r0, r2, r3
- add r0, r12
- strb r1, [r0]
- ldr r0, _08012CCC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08012CBE
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- ldr r5, _08012CD0 @ =0x0001606c
- adds r1, r5
- add r1, r12
- ldrb r2, [r1]
- movs r0, 0xF
- ands r0, r2
- strb r0, [r1]
- ldrb r0, [r7]
- lsls r2, r0, 1
- adds r2, r0
- adds r2, r5
- add r2, r12
- lsls r0, 9
- adds r6, r4, 0x2
- adds r0, r6
- ldrb r1, [r0]
- movs r3, 0xF0
- adds r0, r3, 0
- ands r0, r1
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- ldr r2, _08012CD4 @ =0x0001606d
- adds r1, r2
- add r1, r12
- 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
- add r1, r12
- 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
- add r1, r12
- ldrb r0, [r7]
- lsls r0, 9
- adds r0, r6
- 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, _08012CD8 @ =0x0001606e
- adds r1, r3
- add r1, r12
- ldrb r0, [r7]
- lsls r0, 9
- add r0, r8
- ldrb r0, [r0]
- strb r0, [r1]
-_08012CBE:
- ldr r0, _08012CDC @ =gBattleCommunication
- ldrb r1, [r7]
- b _08012E3C
- .align 2, 0
-_08012CC4: .4byte gSharedMem
-_08012CC8: .4byte 0x00016068
-_08012CCC: .4byte gBattleTypeFlags
-_08012CD0: .4byte 0x0001606c
-_08012CD4: .4byte 0x0001606d
-_08012CD8: .4byte 0x0001606e
-_08012CDC: .4byte gBattleCommunication
-_08012CE0:
- ldr r2, _08012CF8 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 8
- orrs r0, r1
- str r0, [r2]
- ldr r2, _08012CFC @ =gBattleCommunication
- ldr r0, _08012D00 @ =gActiveBank
- ldrb r1, [r0]
- adds r1, r2
- b _08012E3E
- .align 2, 0
-_08012CF8: .4byte gHitMarker
-_08012CFC: .4byte gBattleCommunication
-_08012D00: .4byte gActiveBank
-_08012D04:
- ldr r2, _08012D10 @ =gBattleCommunication
- ldr r0, _08012D14 @ =gActiveBank
- ldrb r1, [r0]
- adds r1, r2
- b _08012E3E
- .align 2, 0
-_08012D10: .4byte gBattleCommunication
-_08012D14: .4byte gActiveBank
-_08012D18:
- ldr r2, _08012D24 @ =gBattleCommunication
- ldr r0, _08012D28 @ =gActiveBank
- ldrb r1, [r0]
- adds r1, r2
- b _08012E3E
- .align 2, 0
-_08012D24: .4byte gBattleCommunication
-_08012D28: .4byte gActiveBank
-_08012D2C:
- ldr r2, _08012D50 @ =gBattleBufferB
- ldr r0, _08012D54 @ =gActiveBank
- ldrb r4, [r0]
- lsls r1, r4, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r0, [r1]
- lsls r0, 8
- orrs r3, r0
- cmp r3, 0
- bne _08012D4A
- b _08012F60
-_08012D4A:
- ldr r1, _08012D58 @ =gBattleCommunication
- adds r1, r4, r1
- b _08012E3E
- .align 2, 0
-_08012D50: .4byte gBattleBufferB
-_08012D54: .4byte gActiveBank
-_08012D58: .4byte gBattleCommunication
-_08012D5C:
- ldr r2, _08012D68 @ =gBattleCommunication
- ldr r0, _08012D6C @ =gActiveBank
- ldrb r1, [r0]
- adds r1, r2
- b _08012E3E
- .align 2, 0
-_08012D68: .4byte gBattleCommunication
-_08012D6C: .4byte gActiveBank
-_08012D70:
- ldr r2, _08012D88 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 8
- orrs r0, r1
- str r0, [r2]
- ldr r2, _08012D8C @ =gBattleCommunication
- ldr r0, _08012D90 @ =gActiveBank
- ldrb r1, [r0]
- adds r1, r2
- b _08012E3E
- .align 2, 0
-_08012D88: .4byte gHitMarker
-_08012D8C: .4byte gBattleCommunication
-_08012D90: .4byte gActiveBank
-_08012D94:
- ldr r2, _08012DA0 @ =gBattleCommunication
- ldr r0, _08012DA4 @ =gActiveBank
- ldrb r1, [r0]
- adds r1, r2
- b _08012E3E
- .align 2, 0
-_08012DA0: .4byte gBattleCommunication
-_08012DA4: .4byte gActiveBank
-_08012DA8:
- ldr r3, _08012E10 @ =gBattleExecBuffer
- ldr r4, _08012E14 @ =gBitTable
- ldr r0, _08012E18 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r4
- ldr r2, [r0]
- lsls r1, r2, 4
- movs r0, 0xF0
- lsls r0, 24
- orrs r1, r0
- orrs r1, r2
- lsls r0, r2, 8
- orrs r1, r0
- lsls r2, 12
- orrs r1, r2
- ldr r0, [r3]
- ands r0, r1
- cmp r0, 0
- beq _08012DD2
- b _08012F66
-_08012DD2:
- ldr r0, _08012E1C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x41
- ands r0, r1
- cmp r0, 0x1
- bne _08012E06
- movs r1, 0x2
- movs r0, 0x2
- ands r0, r5
- cmp r0, 0
- bne _08012E06
- adds r0, r5, 0
- eors r0, r1
- bl GetBankByPlayerAI
- ldr r1, _08012E20 @ =gSharedMem
- ldr r2, _08012E24 @ =0x000160a6
- adds r1, r2
- ldrb r1, [r1]
- lsls r0, 24
- lsrs r0, 22
- adds r0, r4
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08012E28
-_08012E06:
- movs r0, 0
- movs r1, 0
- bl EmitLinkStandbyMsg
- b _08012E30
- .align 2, 0
-_08012E10: .4byte gBattleExecBuffer
-_08012E14: .4byte gBitTable
-_08012E18: .4byte gActiveBank
-_08012E1C: .4byte gBattleTypeFlags
-_08012E20: .4byte gSharedMem
-_08012E24: .4byte 0x000160a6
-_08012E28:
- movs r0, 0
- movs r1, 0x1
- bl EmitLinkStandbyMsg
-_08012E30:
- ldr r4, _08012E48 @ =gActiveBank
-_08012E32:
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, _08012E4C @ =gBattleCommunication
- ldrb r1, [r4]
-_08012E3C:
- adds r1, r0
-_08012E3E:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08012F66
- .align 2, 0
-_08012E48: .4byte gActiveBank
-_08012E4C: .4byte gBattleCommunication
-_08012E50:
- ldr r3, _08012E84 @ =gBattleExecBuffer
- ldr r1, _08012E88 @ =gBitTable
- ldr r0, _08012E8C @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r2, [r0]
- lsls r1, r2, 4
- movs r0, 0xF0
- lsls r0, 24
- orrs r1, r0
- orrs r1, r2
- lsls r0, r2, 8
- orrs r1, r0
- lsls r2, 12
- orrs r1, r2
- ldr r0, [r3]
- ands r0, r1
- cmp r0, 0
- bne _08012F66
- ldr r1, _08012E90 @ =gBattleCommunication
- ldrb r0, [r1, 0x4]
- adds r0, 0x1
- strb r0, [r1, 0x4]
- b _08012F66
- .align 2, 0
-_08012E84: .4byte gBattleExecBuffer
-_08012E88: .4byte gBitTable
-_08012E8C: .4byte gActiveBank
-_08012E90: .4byte gBattleCommunication
-_08012E94:
- ldr r2, _08012EB8 @ =gSharedMem
- ldr r5, _08012EBC @ =gActiveBank
- ldrb r1, [r5]
- ldr r3, _08012EC0 @ =0x00016060
- adds r0, r1, r3
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _08012ECC
- ldr r0, _08012EC4 @ =gBattleCommunication
- adds r0, r1, r0
- ldr r4, _08012EC8 @ =0x00016094
- adds r1, r4
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r0]
- b _08012F66
- .align 2, 0
-_08012EB8: .4byte gSharedMem
-_08012EBC: .4byte gActiveBank
-_08012EC0: .4byte 0x00016060
-_08012EC4: .4byte gBattleCommunication
-_08012EC8: .4byte 0x00016094
-_08012ECC:
- ldr r0, _08012F20 @ =gBankAttacker
- strb r1, [r0]
- ldr r7, _08012F24 @ =gBattlescriptCurrInstr
- ldr r6, _08012F28 @ =gUnknown_02024C1C
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r6
- ldr r4, [r0]
- str r4, [r7]
- ldr r3, _08012F2C @ =gBattleExecBuffer
- ldr r1, _08012F30 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r2, [r0]
- lsls r1, r2, 4
- movs r0, 0xF0
- lsls r0, 24
- orrs r1, r0
- orrs r1, r2
- lsls r0, r2, 8
- orrs r1, r0
- lsls r2, 12
- orrs r1, r2
- ldr r0, [r3]
- ands r0, r1
- cmp r0, 0
- bne _08012F12
- ldr r0, _08012F34 @ =gBattleScriptingCommandsTable
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
-_08012F12:
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r7]
- str r1, [r0]
- b _08012F66
- .align 2, 0
-_08012F20: .4byte gBankAttacker
-_08012F24: .4byte gBattlescriptCurrInstr
-_08012F28: .4byte gUnknown_02024C1C
-_08012F2C: .4byte gBattleExecBuffer
-_08012F30: .4byte gBitTable
-_08012F34: .4byte gBattleScriptingCommandsTable
-_08012F38:
- ldr r3, _08012FA0 @ =gBattleExecBuffer
- ldr r1, _08012FA4 @ =gBitTable
- ldr r0, _08012FA8 @ =gActiveBank
- ldrb r4, [r0]
- lsls r0, r4, 2
- adds r0, r1
- ldr r2, [r0]
- lsls r0, r2, 4
- movs r1, 0xF0
- lsls r1, 24
- orrs r0, r1
- orrs r0, r2
- lsls r1, r2, 8
- orrs r0, r1
- lsls r2, 12
- orrs r0, r2
- ldr r3, [r3]
- ands r3, r0
- cmp r3, 0
- bne _08012F66
-_08012F60:
- ldr r0, _08012FAC @ =gBattleCommunication
- adds r0, r4, r0
- strb r3, [r0]
-_08012F66:
- ldr r0, _08012FA8 @ =gActiveBank
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- ldr r0, _08012FB0 @ =gNoOfAllBanks
- lsls r1, 24
- lsrs r1, 24
-_08012F74:
- adds r2, r0, 0
- ldrb r0, [r2]
- cmp r1, r0
- bcs _08012F80
- bl _0801234C
-_08012F80:
- ldr r0, _08012FAC @ =gBattleCommunication
- ldrb r0, [r0, 0x4]
- ldrb r2, [r2]
- cmp r0, r2
- bne _08012F90
- ldr r1, _08012FB4 @ =gBattleMainFunc
- ldr r0, _08012FB8 @ =sub_80133C8
- str r0, [r1]
-_08012F90:
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08012FA0: .4byte gBattleExecBuffer
-_08012FA4: .4byte gBitTable
-_08012FA8: .4byte gActiveBank
-_08012FAC: .4byte gBattleCommunication
-_08012FB0: .4byte gNoOfAllBanks
-_08012FB4: .4byte gBattleMainFunc
-_08012FB8: .4byte sub_80133C8
- thumb_func_end sub_8012324
-
- thumb_func_start sub_8012FBC
-sub_8012FBC: @ 8012FBC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _08012FE8 @ =gUnknown_02024A76
- adds r4, r0, r2
- ldrb r5, [r4]
- adds r2, r1, r2
- ldrb r3, [r2]
- strb r3, [r4]
- strb r5, [r2]
- ldr r2, _08012FEC @ =gTurnOrder
- adds r0, r2
- ldrb r5, [r0]
- adds r1, r2
- ldrb r2, [r1]
- strb r2, [r0]
- strb r5, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08012FE8: .4byte gUnknown_02024A76
-_08012FEC: .4byte gTurnOrder
- thumb_func_end sub_8012FBC
-
- thumb_func_start GetWhoStrikesFirst
-GetWhoStrikesFirst: @ 8012FF0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _080130B8
- ldr r1, [sp, 0x8]
- str r1, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _080130B8
- ldr r1, _08013070 @ =gBattleMons
- movs r0, 0x58
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- adds r0, r1
- adds r0, 0x20
- ldrb r3, [r0]
- cmp r3, 0x21
- bne _0801305C
- ldr r0, _08013074 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801306C
-_0801305C:
- cmp r3, 0x22
- bne _08013078
- ldr r0, _08013074 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _08013078
-_0801306C:
- movs r3, 0x2
- b _0801307A
- .align 2, 0
-_08013070: .4byte gBattleMons
-_08013074: .4byte gBattleWeather
-_08013078:
- movs r3, 0x1
-_0801307A:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- ldr r2, _080130B0 @ =gBattleMons
- adds r0, r2
- adds r0, 0x20
- ldrb r2, [r0]
- cmp r2, 0x21
- bne _0801309A
- ldr r0, _080130B4 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _080130AA
-_0801309A:
- cmp r2, 0x22
- bne _080130BA
- ldr r0, _080130B4 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _080130BA
-_080130AA:
- movs r7, 0x2
- b _080130BC
- .align 2, 0
-_080130B0: .4byte gBattleMons
-_080130B4: .4byte gBattleWeather
-_080130B8:
- movs r3, 0x1
-_080130BA:
- movs r7, 0x1
-_080130BC:
- ldr r1, _08013100 @ =gBattleMons
- movs r0, 0x58
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- adds r4, r0, r1
- ldrh r0, [r4, 0x6]
- muls r3, r0
- ldr r2, _08013104 @ =gStatStageRatios
- movs r1, 0x1B
- ldrsb r1, [r4, r1]
- lsls r1, 1
- adds r0, r1, r2
- ldrb r0, [r0]
- muls r0, r3
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- bl __divsi3
- mov r8, r0
- ldrh r0, [r4, 0x2E]
- cmp r0, 0xAF
- bne _0801310C
- ldr r1, _08013108 @ =gEnigmaBerries
- mov r3, r9
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r6, [r0, 0x7]
- ldrb r5, [r0, 0x1A]
- b _08013120
- .align 2, 0
-_08013100: .4byte gBattleMons
-_08013104: .4byte gStatStageRatios
-_08013108: .4byte gEnigmaBerries
-_0801310C:
- ldrh r0, [r4, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r6, r0, 24
- ldrh r0, [r4, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r5, r0, 24
-_08013120:
- ldr r0, _080131DC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08013154
- ldr r0, _080131E0 @ =0x00000809
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _08013154
- mov r0, r9
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08013154
- movs r0, 0x6E
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- movs r1, 0x64
- bl __udivsi3
- mov r8, r0
-_08013154:
- cmp r6, 0x18
- bne _0801315E
- mov r2, r8
- lsrs r2, 1
- mov r8, r2
-_0801315E:
- ldr r1, _080131E4 @ =gBattleMons
- movs r0, 0x58
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801317C
- mov r0, r8
- lsrs r0, 2
- mov r8, r0
-_0801317C:
- cmp r6, 0x1A
- bne _08013198
- ldr r0, _080131E8 @ =gRandomTurnNumber
- ldrh r4, [r0]
- lsls r0, r5, 16
- subs r0, r5
- movs r1, 0x64
- bl __divsi3
- cmp r4, r0
- bge _08013198
- movs r1, 0x1
- negs r1, r1
- mov r8, r1
-_08013198:
- ldr r1, _080131E4 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r4, r0, r1
- ldrh r0, [r4, 0x6]
- adds r3, r0, 0
- muls r3, r7
- ldr r2, _080131EC @ =gStatStageRatios
- movs r1, 0x1B
- ldrsb r1, [r4, r1]
- lsls r1, 1
- adds r0, r1, r2
- ldrb r0, [r0]
- muls r0, r3
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- bl __divsi3
- adds r7, r0, 0
- ldrh r0, [r4, 0x2E]
- cmp r0, 0xAF
- bne _080131F4
- ldr r1, _080131F0 @ =gEnigmaBerries
- mov r3, r10
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r6, [r0, 0x7]
- ldrb r5, [r0, 0x1A]
- b _08013208
- .align 2, 0
-_080131DC: .4byte gBattleTypeFlags
-_080131E0: .4byte 0x00000809
-_080131E4: .4byte gBattleMons
-_080131E8: .4byte gRandomTurnNumber
-_080131EC: .4byte gStatStageRatios
-_080131F0: .4byte gEnigmaBerries
-_080131F4:
- ldrh r0, [r4, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r6, r0, 24
- ldrh r0, [r4, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r5, r0, 24
-_08013208:
- ldr r0, _08013280 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08013238
- ldr r0, _08013284 @ =0x00000809
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _08013238
- mov r0, r10
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08013238
- movs r0, 0x6E
- muls r0, r7
- movs r1, 0x64
- bl __udivsi3
- adds r7, r0, 0
-_08013238:
- cmp r6, 0x18
- bne _0801323E
- lsrs r7, 1
-_0801323E:
- ldr r2, _08013288 @ =gBattleMons
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801325A
- lsrs r7, 2
-_0801325A:
- cmp r6, 0x1A
- bne _08013274
- ldr r0, _0801328C @ =gRandomTurnNumber
- ldrh r4, [r0]
- lsls r0, r5, 16
- subs r0, r5
- movs r1, 0x64
- bl __divsi3
- cmp r4, r0
- bge _08013274
- movs r7, 0x1
- negs r7, r7
-_08013274:
- ldr r2, [sp, 0x4]
- cmp r2, 0
- beq _08013290
- movs r3, 0
- b _08013334
- .align 2, 0
-_08013280: .4byte gBattleTypeFlags
-_08013284: .4byte 0x00000809
-_08013288: .4byte gBattleMons
-_0801328C: .4byte gRandomTurnNumber
-_08013290:
- ldr r0, _080132B0 @ =gActionForBanks
- mov r3, r9
- adds r1, r3, r0
- ldrb r1, [r1]
- adds r2, r0, 0
- cmp r1, 0
- bne _080132E4
- ldr r0, _080132B4 @ =gProtectStructs
- lsls r1, r3, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 29
- cmp r0, 0
- bge _080132B8
- movs r3, 0xA5
- b _080132E6
- .align 2, 0
-_080132B0: .4byte gActionForBanks
-_080132B4: .4byte gProtectStructs
-_080132B8:
- ldr r1, _080132D8 @ =gSharedMem
- ldr r0, _080132DC @ =0x0001608c
- add r0, r9
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- movs r1, 0x58
- mov r3, r9
- muls r3, r1
- adds r1, r3, 0
- adds r0, r1
- ldr r1, _080132E0 @ =gBattleMons
- adds r1, 0xC
- adds r0, r1
- ldrh r3, [r0]
- b _080132E6
- .align 2, 0
-_080132D8: .4byte gSharedMem
-_080132DC: .4byte 0x0001608c
-_080132E0: .4byte gBattleMons
-_080132E4:
- movs r3, 0
-_080132E6:
- mov r1, r10
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _08013334
- ldr r0, _08013304 @ =gProtectStructs
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 29
- cmp r0, 0
- bge _08013308
- movs r2, 0xA5
- b _08013336
- .align 2, 0
-_08013304: .4byte gProtectStructs
-_08013308:
- ldr r1, _08013328 @ =gSharedMem
- ldr r0, _0801332C @ =0x0001608c
- add r0, r10
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- movs r1, 0x58
- mov r2, r10
- muls r2, r1
- adds r1, r2, 0
- adds r0, r1
- ldr r1, _08013330 @ =gBattleMons
- adds r1, 0xC
- adds r0, r1
- ldrh r2, [r0]
- b _08013336
- .align 2, 0
-_08013328: .4byte gSharedMem
-_0801332C: .4byte 0x0001608c
-_08013330: .4byte gBattleMons
-_08013334:
- movs r2, 0
-_08013336:
- ldr r4, _08013380 @ =gBattleMoves
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r4
- movs r1, 0x7
- ldrsb r1, [r0, r1]
- lsls r3, r2, 1
- cmp r1, 0
- bne _0801335A
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x7]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08013398
-_0801335A:
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x7]
- lsls r0, 24
- asrs r0, 24
- cmp r1, r0
- bne _0801338E
- cmp r8, r7
- bne _08013384
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08013384
- movs r3, 0x2
- b _080133B4
- .align 2, 0
-_08013380: .4byte gBattleMoves
-_08013384:
- cmp r8, r7
- bcs _080133B6
- movs r0, 0x1
- str r0, [sp, 0x8]
- b _080133B6
-_0801338E:
- cmp r1, r0
- bge _080133B6
- movs r1, 0x1
- str r1, [sp, 0x8]
- b _080133B6
-_08013398:
- cmp r8, r7
- bne _080133AE
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _080133AE
- movs r2, 0x2
- str r2, [sp, 0x8]
- b _080133B6
-_080133AE:
- cmp r8, r7
- bcs _080133B6
- movs r3, 0x1
-_080133B4:
- str r3, [sp, 0x8]
-_080133B6:
- ldr r0, [sp, 0x8]
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetWhoStrikesFirst
-
thumb_func_start sub_80133C8
sub_80133C8: @ 80133C8
push {r4-r7,lr}
diff --git a/include/pokemon.h b/include/pokemon.h
index a1c30f1f3..b6c6e0030 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -405,7 +405,7 @@ struct BattleMove
u8 pp;
u8 secondaryEffectChance;
u8 target;
- u8 priority;
+ s8 priority;
u8 flags;
u8 pad[3];
};
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c
index b0654950b..90d0d40e3 100644
--- a/src/battle/battle_2.c
+++ b/src/battle/battle_2.c
@@ -4,6 +4,7 @@
#include "battle_interface.h"
#include "battle_setup.h"
#include "data2.h"
+#include "event_data.h"
#include "item.h"
#include "link.h"
#include "main.h"
@@ -26,9 +27,10 @@
#include "trig.h"
#include "unknown_task.h"
#include "util.h"
+#include "constants/battle_move_effects.h"
#include "constants/items.h"
#include "constants/hold_effects.h"
-#include "constants/battle_move_effects.h"
+#include "constants/moves.h"
#include "ewram.h"
struct UnknownStruct7
@@ -56,6 +58,8 @@ struct UnknownStruct12
extern const u16 gUnknown_08D004E0[];
extern const struct MonCoords gCastformFrontSpriteCoords[];
+extern u8 gStatStageRatios[][2];
+extern u8 gUnknown_02024A76[4];
extern struct UnknownPokemonStruct2 gUnknown_02023A00[];
extern u8 gBattleBufferB[][0x200];
extern u8 gActiveBank;
@@ -2352,3 +2356,1642 @@ void sub_8012324(void)
}
}
*/
+__attribute__((naked))
+void sub_8012324(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, 0x1C\n\
+ ldr r0, _08012340 @ =gBattleCommunication\n\
+ movs r1, 0\n\
+ strb r1, [r0, 0x4]\n\
+ ldr r0, _08012344 @ =gActiveBank\n\
+ strb r1, [r0]\n\
+ ldr r0, _08012348 @ =gNoOfAllBanks\n\
+ bl _08012F74\n\
+ .align 2, 0\n\
+_08012340: .4byte gBattleCommunication\n\
+_08012344: .4byte gActiveBank\n\
+_08012348: .4byte gNoOfAllBanks\n\
+_0801234C:\n\
+ ldr r4, _08012374 @ =gActiveBank\n\
+ ldrb r0, [r4]\n\
+ bl GetBankIdentity\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ ldr r1, _08012378 @ =gBattleCommunication\n\
+ ldrb r0, [r4]\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x6\n\
+ bls _08012368\n\
+ bl _08012F66\n\
+_08012368:\n\
+ lsls r0, 2\n\
+ ldr r1, _0801237C @ =_08012380\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_08012374: .4byte gActiveBank\n\
+_08012378: .4byte gBattleCommunication\n\
+_0801237C: .4byte _08012380\n\
+ .align 2, 0\n\
+_08012380:\n\
+ .4byte _0801239C\n\
+ .4byte _080124C8\n\
+ .4byte _08012A28\n\
+ .4byte _08012DA8\n\
+ .4byte _08012E50\n\
+ .4byte _08012E94\n\
+ .4byte _08012F38\n\
+_0801239C:\n\
+ ldr r4, _08012434 @ =gSharedMem\n\
+ ldr r0, _08012438 @ =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ ldr r1, _0801243C @ =0x00016068\n\
+ adds r0, r1\n\
+ adds r0, r4\n\
+ movs r1, 0x6\n\
+ strb r1, [r0]\n\
+ ldr r0, _08012440 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080123F8\n\
+ movs r1, 0x2\n\
+ movs r0, 0x2\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ beq _080123F8\n\
+ eors r5, r1\n\
+ adds r0, r5, 0\n\
+ bl GetBankByPlayerAI\n\
+ ldr r2, _08012444 @ =0x000160a6\n\
+ adds r1, r4, r2\n\
+ ldrb r1, [r1]\n\
+ ldr r2, _08012448 @ =gBitTable\n\
+ lsls r0, 24\n\
+ lsrs r0, 22\n\
+ adds r0, r2\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _080123F8\n\
+ ldr r4, _0801244C @ =gBattleCommunication\n\
+ adds r0, r5, 0\n\
+ bl GetBankByPlayerAI\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ adds r0, r4\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x4\n\
+ beq _080123F8\n\
+ bl _08012F66\n\
+_080123F8:\n\
+ ldr r0, _08012434 @ =gSharedMem\n\
+ ldr r3, _08012444 @ =0x000160a6\n\
+ adds r0, r3\n\
+ ldrb r3, [r0]\n\
+ ldr r1, _08012448 @ =gBitTable\n\
+ ldr r4, _08012438 @ =gActiveBank\n\
+ ldrb r2, [r4]\n\
+ lsls r0, r2, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ ands r3, r0\n\
+ cmp r3, 0\n\
+ beq _08012468\n\
+ ldr r0, _08012450 @ =gActionForBanks\n\
+ adds r0, r2, r0\n\
+ movs r1, 0xD\n\
+ strb r1, [r0]\n\
+ ldr r0, _08012440 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08012454\n\
+ ldr r0, _0801244C @ =gBattleCommunication\n\
+ ldrb r1, [r4]\n\
+ adds r1, r0\n\
+ movs r0, 0x4\n\
+ strb r0, [r1]\n\
+ bl _08012F66\n\
+ .align 2, 0\n\
+_08012434: .4byte gSharedMem\n\
+_08012438: .4byte gActiveBank\n\
+_0801243C: .4byte 0x00016068\n\
+_08012440: .4byte gBattleTypeFlags\n\
+_08012444: .4byte 0x000160a6\n\
+_08012448: .4byte gBitTable\n\
+_0801244C: .4byte gBattleCommunication\n\
+_08012450: .4byte gActionForBanks\n\
+_08012454:\n\
+ ldr r0, _08012464 @ =gBattleCommunication\n\
+ ldrb r1, [r4]\n\
+ adds r1, r0\n\
+ movs r0, 0x3\n\
+ strb r0, [r1]\n\
+ bl _08012F66\n\
+ .align 2, 0\n\
+_08012464: .4byte gBattleCommunication\n\
+_08012468:\n\
+ ldr r1, _0801249C @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 5\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08012488\n\
+ movs r0, 0x80\n\
+ lsls r0, 15\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _080124A8\n\
+_08012488:\n\
+ ldr r0, _080124A0 @ =gActionForBanks\n\
+ adds r0, r2, r0\n\
+ strb r3, [r0]\n\
+ ldr r1, _080124A4 @ =gBattleCommunication\n\
+ ldrb r0, [r4]\n\
+ adds r0, r1\n\
+ movs r1, 0x3\n\
+ strb r1, [r0]\n\
+ bl _08012F66\n\
+ .align 2, 0\n\
+_0801249C: .4byte gBattleMons\n\
+_080124A0: .4byte gActionForBanks\n\
+_080124A4: .4byte gBattleCommunication\n\
+_080124A8:\n\
+ ldr r0, _080124C0 @ =gActionForBanks\n\
+ ldrb r1, [r0]\n\
+ ldr r0, _080124C4 @ =gBattleBufferB\n\
+ ldrb r2, [r0, 0x1]\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r2, r0\n\
+ movs r0, 0\n\
+ bl Emitcmd18\n\
+ bl _08012E32\n\
+ .align 2, 0\n\
+_080124C0: .4byte gActionForBanks\n\
+_080124C4: .4byte gBattleBufferB\n\
+_080124C8:\n\
+ ldr r4, _08012520 @ =gBattleExecBuffer\n\
+ ldr r1, _08012524 @ =gBitTable\n\
+ ldr r3, _08012528 @ =gActiveBank\n\
+ ldrb r5, [r3]\n\
+ lsls r0, r5, 2\n\
+ adds r0, r1\n\
+ ldr r2, [r0]\n\
+ lsls r0, r2, 4\n\
+ movs r1, 0xF0\n\
+ lsls r1, 24\n\
+ orrs r0, r1\n\
+ orrs r0, r2\n\
+ lsls r1, r2, 8\n\
+ orrs r0, r1\n\
+ lsls r2, 12\n\
+ orrs r0, r2\n\
+ ldr r1, [r4]\n\
+ ands r1, r0\n\
+ mov r8, r3\n\
+ cmp r1, 0\n\
+ beq _080124F6\n\
+ bl _08012F66\n\
+_080124F6:\n\
+ ldr r2, _0801252C @ =gActionForBanks\n\
+ adds r2, r5, r2\n\
+ ldr r1, _08012530 @ =gBattleBufferB\n\
+ lsls r0, r5, 9\n\
+ adds r1, 0x1\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r2]\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 9\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xC\n\
+ bls _08012514\n\
+ b _08012968\n\
+_08012514:\n\
+ lsls r0, 2\n\
+ ldr r1, _08012534 @ =_08012538\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_08012520: .4byte gBattleExecBuffer\n\
+_08012524: .4byte gBitTable\n\
+_08012528: .4byte gActiveBank\n\
+_0801252C: .4byte gActionForBanks\n\
+_08012530: .4byte gBattleBufferB\n\
+_08012534: .4byte _08012538\n\
+ .align 2, 0\n\
+_08012538:\n\
+ .4byte _0801256C\n\
+ .4byte _080126B4\n\
+ .4byte _080126E0\n\
+ .4byte _08012968\n\
+ .4byte _08012968\n\
+ .4byte _080128B0\n\
+ .4byte _08012908\n\
+ .4byte _08012968\n\
+ .4byte _08012968\n\
+ .4byte _08012968\n\
+ .4byte _08012968\n\
+ .4byte _08012968\n\
+ .4byte _0801292C\n\
+_0801256C:\n\
+ bl AreAllMovesUnusable\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080125D0\n\
+ ldr r0, _080125B4 @ =gBattleCommunication\n\
+ ldr r2, _080125B8 @ =gActiveBank\n\
+ ldrb r1, [r2]\n\
+ adds r1, r0\n\
+ movs r4, 0\n\
+ movs r0, 0x5\n\
+ strb r0, [r1]\n\
+ ldr r3, _080125BC @ =gSharedMem\n\
+ ldrb r0, [r2]\n\
+ ldr r1, _080125C0 @ =0x00016060\n\
+ adds r0, r1\n\
+ adds r0, r3\n\
+ strb r4, [r0]\n\
+ ldrb r0, [r2]\n\
+ ldr r4, _080125C4 @ =0x00016094\n\
+ adds r0, r4\n\
+ adds r0, r3\n\
+ movs r1, 0x3\n\
+ strb r1, [r0]\n\
+ ldrb r1, [r2]\n\
+ ldr r0, _080125C8 @ =0x00016010\n\
+ adds r2, r1, r0\n\
+ adds r2, r3\n\
+ ldr r0, _080125CC @ =gBattleBufferB\n\
+ lsls r1, 9\n\
+ adds r0, 0x3\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ strb r0, [r2]\n\
+ bl _08012F90\n\
+ .align 2, 0\n\
+_080125B4: .4byte gBattleCommunication\n\
+_080125B8: .4byte gActiveBank\n\
+_080125BC: .4byte gSharedMem\n\
+_080125C0: .4byte 0x00016060\n\
+_080125C4: .4byte 0x00016094\n\
+_080125C8: .4byte 0x00016010\n\
+_080125CC: .4byte gBattleBufferB\n\
+_080125D0:\n\
+ ldr r1, _080125FC @ =gDisableStructs\n\
+ ldr r5, _08012600 @ =gActiveBank\n\
+ ldrb r4, [r5]\n\
+ lsls r0, r4, 3\n\
+ subs r0, r4\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrh r2, [r0, 0x6]\n\
+ cmp r2, 0\n\
+ beq _0801260C\n\
+ ldr r1, _08012604 @ =gChosenMovesByBanks\n\
+ lsls r0, r4, 1\n\
+ adds r0, r1\n\
+ strh r2, [r0]\n\
+ ldr r1, _08012608 @ =gBattleCommunication\n\
+ ldrb r0, [r5]\n\
+ adds r0, r1\n\
+ movs r1, 0x3\n\
+ strb r1, [r0]\n\
+ bl _08012F90\n\
+ .align 2, 0\n\
+_080125FC: .4byte gDisableStructs\n\
+_08012600: .4byte gActiveBank\n\
+_08012604: .4byte gChosenMovesByBanks\n\
+_08012608: .4byte gBattleCommunication\n\
+_0801260C:\n\
+ add r2, sp, 0x4\n\
+ ldr r3, _080126AC @ =gBattleMons\n\
+ movs r1, 0x58\n\
+ adds r0, r4, 0\n\
+ muls r0, r1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r2, 0x10]\n\
+ ldrb r0, [r5]\n\
+ muls r0, r1\n\
+ adds r0, r3\n\
+ adds r0, 0x21\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r2, 0x12]\n\
+ ldrb r0, [r5]\n\
+ muls r0, r1\n\
+ adds r0, r3\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r2, 0x13]\n\
+ movs r4, 0\n\
+ mov r1, sp\n\
+ adds r1, 0xC\n\
+ str r1, [sp, 0x18]\n\
+ add r2, sp, 0x10\n\
+ mov r10, r2\n\
+ mov r8, r3\n\
+ adds r7, r5, 0\n\
+ movs r6, 0x58\n\
+ movs r3, 0xC\n\
+ add r3, r8\n\
+ mov r9, r3\n\
+ add r5, sp, 0x4\n\
+_0801264E:\n\
+ lsls r2, r4, 1\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r2, r0\n\
+ add r0, r9\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r5]\n\
+ ldr r0, [sp, 0x18]\n\
+ adds r3, r0, r4\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r4, r0\n\
+ mov r1, r8\n\
+ adds r1, 0x24\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r3]\n\
+ ldrb r0, [r7]\n\
+ adds r1, r0, 0\n\
+ muls r1, r6\n\
+ adds r2, r1\n\
+ add r2, r9\n\
+ ldrh r0, [r2]\n\
+ add r1, r8\n\
+ adds r1, 0x3B\n\
+ ldrb r1, [r1]\n\
+ lsls r2, r4, 24\n\
+ lsrs r2, 24\n\
+ bl CalculatePPWithBonus\n\
+ mov r2, r10\n\
+ adds r1, r2, r4\n\
+ strb r0, [r1]\n\
+ adds r5, 0x2\n\
+ adds r4, 0x1\n\
+ cmp r4, 0x3\n\
+ ble _0801264E\n\
+ ldr r0, _080126B0 @ =gBattleTypeFlags\n\
+ ldrb r0, [r0]\n\
+ movs r1, 0x1\n\
+ ands r1, r0\n\
+ movs r0, 0\n\
+ movs r2, 0\n\
+ add r3, sp, 0x4\n\
+ bl Emitcmd20\n\
+ b _0801289E\n\
+ .align 2, 0\n\
+_080126AC: .4byte gBattleMons\n\
+_080126B0: .4byte gBattleTypeFlags\n\
+_080126B4:\n\
+ ldr r0, _080126D0 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _080126D4 @ =0x00000902\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080126C2\n\
+ b _08012908\n\
+_080126C2:\n\
+ ldr r1, _080126D8 @ =gUnknown_02024C1C\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r1, _080126DC @ =BattleScript_ActionSelectionItemsCantBeUsed\n\
+ b _080129CC\n\
+ .align 2, 0\n\
+_080126D0: .4byte gBattleTypeFlags\n\
+_080126D4: .4byte 0x00000902\n\
+_080126D8: .4byte gUnknown_02024C1C\n\
+_080126DC: .4byte BattleScript_ActionSelectionItemsCantBeUsed\n\
+_080126E0:\n\
+ ldr r3, _08012738 @ =gSharedMem\n\
+ ldr r5, _0801273C @ =gActiveBank\n\
+ ldrb r0, [r5]\n\
+ ldr r4, _08012740 @ =0x00016064\n\
+ adds r1, r0, r4\n\
+ adds r1, r3\n\
+ ldr r2, _08012744 @ =gBattlePartyID\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ ldrh r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldr r7, _08012748 @ =gBattleMons\n\
+ ldrb r2, [r5]\n\
+ movs r6, 0x58\n\
+ adds r0, r2, 0\n\
+ muls r0, r6\n\
+ adds r1, r7, 0\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ ldr r1, _0801274C @ =0x0400e000\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08012722\n\
+ ldr r0, _08012750 @ =gStatuses3\n\
+ lsls r1, r2, 2\n\
+ adds r1, r0\n\
+ ldr r1, [r1]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _08012758\n\
+_08012722:\n\
+ lsls r0, r2, 1\n\
+ adds r0, r2\n\
+ ldr r2, _08012754 @ =0x0001606c\n\
+ adds r1, r3, r2\n\
+ adds r0, r1\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x2\n\
+ movs r2, 0x6\n\
+ b _0801286C\n\
+ .align 2, 0\n\
+_08012738: .4byte gSharedMem\n\
+_0801273C: .4byte gActiveBank\n\
+_08012740: .4byte 0x00016064\n\
+_08012744: .4byte gBattlePartyID\n\
+_08012748: .4byte gBattleMons\n\
+_0801274C: .4byte 0x0400e000\n\
+_08012750: .4byte gStatuses3\n\
+_08012754: .4byte 0x0001606c\n\
+_08012758:\n\
+ str r1, [sp]\n\
+ movs r0, 0xC\n\
+ adds r1, r2, 0\n\
+ movs r2, 0x17\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0\n\
+ bne _080127E0\n\
+ ldrb r1, [r5]\n\
+ str r4, [sp]\n\
+ movs r0, 0xC\n\
+ movs r2, 0x47\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0\n\
+ beq _080127A8\n\
+ ldrb r0, [r5]\n\
+ muls r0, r6\n\
+ adds r1, r0, r7\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x21\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x2\n\
+ beq _080127A8\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x2\n\
+ beq _080127A8\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1A\n\
+ bne _080127E0\n\
+_080127A8:\n\
+ ldr r5, _08012808 @ =gActiveBank\n\
+ ldrb r1, [r5]\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0xF\n\
+ movs r2, 0x2A\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0\n\
+ beq _08012818\n\
+ ldr r2, _0801280C @ =gBattleMons\n\
+ ldrb r1, [r5]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r1, r0, r2\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x21\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x8\n\
+ beq _080127E0\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x22\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x8\n\
+ bne _08012818\n\
+_080127E0:\n\
+ subs r1, r4, 0x1\n\
+ lsls r1, 4\n\
+ movs r0, 0x4\n\
+ orrs r1, r0\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ ldr r0, _08012810 @ =gLastUsedAbility\n\
+ ldrb r3, [r0]\n\
+ ldr r0, _08012808 @ =gActiveBank\n\
+ ldrb r2, [r0]\n\
+ lsls r0, r2, 1\n\
+ adds r0, r2\n\
+ ldr r2, _08012814 @ =gSharedMem + 0x1606C\n\
+ adds r0, r2\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r2, 0x6\n\
+ bl EmitChoosePokemon\n\
+ b _0801289E\n\
+ .align 2, 0\n\
+_08012808: .4byte gActiveBank\n\
+_0801280C: .4byte gBattleMons\n\
+_08012810: .4byte gLastUsedAbility\n\
+_08012814: .4byte gSharedMem + 0x1606C\n\
+_08012818:\n\
+ ldr r0, _08012830 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ mov r8, r0\n\
+ cmp r1, 0x2\n\
+ bne _08012840\n\
+ ldr r0, _08012834 @ =gActionForBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x2\n\
+ bne _08012840\n\
+ ldr r3, _08012838 @ =gSharedMem\n\
+ ldr r4, _0801283C @ =0x00016068\n\
+ b _08012854\n\
+ .align 2, 0\n\
+_08012830: .4byte gActiveBank\n\
+_08012834: .4byte gActionForBanks\n\
+_08012838: .4byte gSharedMem\n\
+_0801283C: .4byte 0x00016068\n\
+_08012840:\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ cmp r0, 0x3\n\
+ bne _08012884\n\
+ ldr r0, _08012874 @ =gActionForBanks\n\
+ ldrb r0, [r0, 0x1]\n\
+ cmp r0, 0x2\n\
+ bne _08012884\n\
+ ldr r3, _08012878 @ =gSharedMem\n\
+ ldr r4, _0801287C @ =0x00016069\n\
+_08012854:\n\
+ adds r0, r3, r4\n\
+ ldrb r2, [r0]\n\
+ mov r0, r8\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ ldr r1, _08012880 @ =0x0001606c\n\
+ adds r3, r1\n\
+ adds r0, r3\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+_0801286C:\n\
+ movs r3, 0\n\
+ bl EmitChoosePokemon\n\
+ b _0801289E\n\
+ .align 2, 0\n\
+_08012874: .4byte gActionForBanks\n\
+_08012878: .4byte gSharedMem\n\
+_0801287C: .4byte 0x00016069\n\
+_08012880: .4byte 0x0001606c\n\
+_08012884:\n\
+ ldr r0, _080128A8 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ ldr r1, _080128AC @ =gSharedMem + 0x1606C\n\
+ adds r0, r1\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ movs r2, 0x6\n\
+ movs r3, 0\n\
+ bl EmitChoosePokemon\n\
+_0801289E:\n\
+ ldr r0, _080128A8 @ =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ bl MarkBufferBankForExecution\n\
+ b _08012968\n\
+ .align 2, 0\n\
+_080128A8: .4byte gActiveBank\n\
+_080128AC: .4byte gSharedMem + 0x1606C\n\
+_080128B0:\n\
+ bl PlayerPartyAndPokemonStorageFull\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08012968\n\
+ ldr r1, _080128EC @ =gUnknown_02024C1C\n\
+ ldr r2, _080128F0 @ =gActiveBank\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r1, _080128F4 @ =BattleScript_PrintFullBox\n\
+ str r1, [r0]\n\
+ ldr r0, _080128F8 @ =gBattleCommunication\n\
+ ldrb r1, [r2]\n\
+ adds r1, r0\n\
+ movs r3, 0\n\
+ movs r0, 0x5\n\
+ strb r0, [r1]\n\
+ ldr r1, _080128FC @ =gSharedMem\n\
+ ldrb r0, [r2]\n\
+ ldr r4, _08012900 @ =0x00016060\n\
+ adds r0, r4\n\
+ adds r0, r1\n\
+ strb r3, [r0]\n\
+ ldrb r0, [r2]\n\
+ ldr r2, _08012904 @ =0x00016094\n\
+ adds r0, r2\n\
+ adds r0, r1\n\
+ strb r3, [r0]\n\
+ b _08012F90\n\
+ .align 2, 0\n\
+_080128EC: .4byte gUnknown_02024C1C\n\
+_080128F0: .4byte gActiveBank\n\
+_080128F4: .4byte BattleScript_PrintFullBox\n\
+_080128F8: .4byte gBattleCommunication\n\
+_080128FC: .4byte gSharedMem\n\
+_08012900: .4byte 0x00016060\n\
+_08012904: .4byte 0x00016094\n\
+_08012908:\n\
+ ldr r4, _08012924 @ =gActiveBank\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ ldr r0, _08012928 @ =gSharedMem + 0x1606C\n\
+ adds r1, r0\n\
+ movs r0, 0\n\
+ bl EmitOpenBag\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ b _08012968\n\
+ .align 2, 0\n\
+_08012924: .4byte gActiveBank\n\
+_08012928: .4byte gSharedMem + 0x1606C\n\
+_0801292C:\n\
+ ldr r4, _08012964 @ =gBattleCommunication\n\
+ mov r3, r8\n\
+ ldrb r1, [r3]\n\
+ adds r1, r4\n\
+ movs r5, 0\n\
+ movs r0, 0x6\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\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 r0, 24\n\
+ adds r0, r4\n\
+ strb r5, [r0]\n\
+ movs r0, 0\n\
+ bl Emitcmd50\n\
+ mov r4, r8\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ b _08012F90\n\
+ .align 2, 0\n\
+_08012964: .4byte gBattleCommunication\n\
+_08012968:\n\
+ ldr r0, _08012994 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0xA\n\
+ ands r0, r1\n\
+ cmp r0, 0x8\n\
+ bne _080129A8\n\
+ ldr r0, _08012998 @ =gBattleBufferB\n\
+ ldr r4, _0801299C @ =gActiveBank\n\
+ ldrb r1, [r4]\n\
+ lsls r1, 9\n\
+ adds r0, 0x1\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x3\n\
+ bne _080129A8\n\
+ ldr r0, _080129A0 @ =BattleScript_PrintCantRunFromTrainer\n\
+ bl b_call_bc_move_exec\n\
+ ldr r1, _080129A4 @ =gBattleCommunication\n\
+ ldrb r0, [r4]\n\
+ adds r0, r1\n\
+ b _08012BFE\n\
+ .align 2, 0\n\
+_08012994: .4byte gBattleTypeFlags\n\
+_08012998: .4byte gBattleBufferB\n\
+_0801299C: .4byte gActiveBank\n\
+_080129A0: .4byte BattleScript_PrintCantRunFromTrainer\n\
+_080129A4: .4byte gBattleCommunication\n\
+_080129A8:\n\
+ bl CanRunFromBattle\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08012A14\n\
+ ldr r0, _080129F4 @ =gBattleBufferB\n\
+ ldr r3, _080129F8 @ =gActiveBank\n\
+ ldrb r2, [r3]\n\
+ lsls r1, r2, 9\n\
+ adds r0, 0x1\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x3\n\
+ bne _08012A14\n\
+ ldr r1, _080129FC @ =gUnknown_02024C1C\n\
+ lsls r0, r2, 2\n\
+ adds r0, r1\n\
+ ldr r1, _08012A00 @ =BattleScript_PrintCantEscapeFromBattle\n\
+_080129CC:\n\
+ str r1, [r0]\n\
+ ldr r0, _08012A04 @ =gBattleCommunication\n\
+ ldrb r1, [r3]\n\
+ adds r1, r0\n\
+ movs r2, 0\n\
+ movs r0, 0x5\n\
+ strb r0, [r1]\n\
+ ldr r1, _08012A08 @ =gSharedMem\n\
+ ldrb r0, [r3]\n\
+ ldr r4, _08012A0C @ =0x00016060\n\
+ adds r0, r4\n\
+ adds r0, r1\n\
+ strb r2, [r0]\n\
+ ldrb r0, [r3]\n\
+ ldr r3, _08012A10 @ =0x00016094\n\
+ adds r0, r3\n\
+ adds r0, r1\n\
+ strb r2, [r0]\n\
+ b _08012F90\n\
+ .align 2, 0\n\
+_080129F4: .4byte gBattleBufferB\n\
+_080129F8: .4byte gActiveBank\n\
+_080129FC: .4byte gUnknown_02024C1C\n\
+_08012A00: .4byte BattleScript_PrintCantEscapeFromBattle\n\
+_08012A04: .4byte gBattleCommunication\n\
+_08012A08: .4byte gSharedMem\n\
+_08012A0C: .4byte 0x00016060\n\
+_08012A10: .4byte 0x00016094\n\
+_08012A14:\n\
+ ldr r2, _08012A20 @ =gBattleCommunication\n\
+ ldr r0, _08012A24 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ adds r1, r2\n\
+ b _08012E3E\n\
+ .align 2, 0\n\
+_08012A20: .4byte gBattleCommunication\n\
+_08012A24: .4byte gActiveBank\n\
+_08012A28:\n\
+ ldr r4, _08012A6C @ =gBattleExecBuffer\n\
+ ldr r1, _08012A70 @ =gBitTable\n\
+ ldr r3, _08012A74 @ =gActiveBank\n\
+ ldrb r5, [r3]\n\
+ lsls r0, r5, 2\n\
+ adds r0, r1\n\
+ ldr r2, [r0]\n\
+ lsls r0, r2, 4\n\
+ movs r1, 0xF0\n\
+ lsls r1, 24\n\
+ orrs r0, r1\n\
+ orrs r0, r2\n\
+ lsls r1, r2, 8\n\
+ orrs r0, r1\n\
+ lsls r2, 12\n\
+ orrs r0, r2\n\
+ ldr r1, [r4]\n\
+ ands r1, r0\n\
+ mov r8, r3\n\
+ cmp r1, 0\n\
+ beq _08012A54\n\
+ b _08012F66\n\
+_08012A54:\n\
+ ldr r1, _08012A78 @ =gActionForBanks\n\
+ adds r0, r5, r1\n\
+ ldrb r0, [r0]\n\
+ adds r3, r1, 0\n\
+ cmp r0, 0x9\n\
+ bls _08012A62\n\
+ b _08012F66\n\
+_08012A62:\n\
+ lsls r0, 2\n\
+ ldr r1, _08012A7C @ =_08012A80\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_08012A6C: .4byte gBattleExecBuffer\n\
+_08012A70: .4byte gBitTable\n\
+_08012A74: .4byte gActiveBank\n\
+_08012A78: .4byte gActionForBanks\n\
+_08012A7C: .4byte _08012A80\n\
+ .align 2, 0\n\
+_08012A80:\n\
+ .4byte _08012AA8\n\
+ .4byte _08012BB0\n\
+ .4byte _08012BE8\n\
+ .4byte _08012CE0\n\
+ .4byte _08012D04\n\
+ .4byte _08012D18\n\
+ .4byte _08012D2C\n\
+ .4byte _08012D5C\n\
+ .4byte _08012D70\n\
+ .4byte _08012D94\n\
+_08012AA8:\n\
+ ldr r0, _08012AC8 @ =gBattleBufferB\n\
+ mov r1, r8\n\
+ ldrb r4, [r1]\n\
+ lsls r1, r4, 9\n\
+ adds r2, r0, 0x1\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ adds r6, r0, 0\n\
+ cmp r1, 0x9\n\
+ bgt _08012ACC\n\
+ cmp r1, 0x3\n\
+ blt _08012ACC\n\
+ adds r0, r4, r3\n\
+ strb r1, [r0]\n\
+ b _08012F90\n\
+ .align 2, 0\n\
+_08012AC8: .4byte gBattleBufferB\n\
+_08012ACC:\n\
+ adds r3, r6, 0\n\
+ mov r5, r8\n\
+ ldrb r4, [r5]\n\
+ lsls r1, r4, 9\n\
+ adds r7, r3, 0x2\n\
+ adds r0, r1, r7\n\
+ ldrb r2, [r0]\n\
+ adds r3, 0x3\n\
+ mov r9, r3\n\
+ add r1, r9\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 8\n\
+ orrs r2, r0\n\
+ ldr r0, _08012AF4 @ =0x0000ffff\n\
+ cmp r2, r0\n\
+ bne _08012AFC\n\
+ ldr r0, _08012AF8 @ =gBattleCommunication\n\
+ adds r0, r4, r0\n\
+ b _08012BFE\n\
+ .align 2, 0\n\
+_08012AF4: .4byte 0x0000ffff\n\
+_08012AF8: .4byte gBattleCommunication\n\
+_08012AFC:\n\
+ bl sub_8015894\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08012B48\n\
+ ldr r0, _08012B38 @ =gBattleCommunication\n\
+ ldrb r1, [r5]\n\
+ adds r1, r0\n\
+ movs r2, 0\n\
+ movs r0, 0x5\n\
+ strb r0, [r1]\n\
+ ldr r3, _08012B3C @ =gSharedMem\n\
+ ldrb r0, [r5]\n\
+ ldr r4, _08012B40 @ =0x00016060\n\
+ adds r0, r4\n\
+ adds r0, r3\n\
+ strb r2, [r0]\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 9\n\
+ adds r1, r6, 0x1\n\
+ adds r0, r1\n\
+ strb r2, [r0]\n\
+ ldrb r0, [r5]\n\
+ ldr r1, _08012B44 @ =0x00016094\n\
+ adds r0, r1\n\
+ adds r0, r3\n\
+ movs r1, 0x1\n\
+ strb r1, [r0]\n\
+ b _08012F90\n\
+ .align 2, 0\n\
+_08012B38: .4byte gBattleCommunication\n\
+_08012B3C: .4byte gSharedMem\n\
+_08012B40: .4byte 0x00016060\n\
+_08012B44: .4byte 0x00016094\n\
+_08012B48:\n\
+ ldr r6, _08012B98 @ =gSharedMem\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ ldr r2, _08012B9C @ =0x0001608c\n\
+ adds r1, r0, r2\n\
+ adds r1, r6\n\
+ lsls r0, 9\n\
+ adds r0, r7\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldr r0, _08012BA0 @ =gChosenMovesByBanks\n\
+ mov r4, r8\n\
+ ldrb r3, [r4]\n\
+ lsls r5, r3, 1\n\
+ adds r5, r0\n\
+ ldr r4, _08012BA4 @ =gBattleMons\n\
+ adds r2, r3, r2\n\
+ adds r2, r6\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 1\n\
+ movs r1, 0x58\n\
+ muls r1, r3\n\
+ adds r0, r1\n\
+ adds r4, 0xC\n\
+ adds r0, r4\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r5]\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ ldr r2, _08012BA8 @ =0x00016010\n\
+ adds r1, r0, r2\n\
+ adds r1, r6\n\
+ lsls r0, 9\n\
+ add r0, r9\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldr r0, _08012BAC @ =gBattleCommunication\n\
+ mov r3, r8\n\
+ ldrb r1, [r3]\n\
+ b _08012E3C\n\
+ .align 2, 0\n\
+_08012B98: .4byte gSharedMem\n\
+_08012B9C: .4byte 0x0001608c\n\
+_08012BA0: .4byte gChosenMovesByBanks\n\
+_08012BA4: .4byte gBattleMons\n\
+_08012BA8: .4byte 0x00016010\n\
+_08012BAC: .4byte gBattleCommunication\n\
+_08012BB0:\n\
+ ldr r2, _08012BD8 @ =gBattleBufferB\n\
+ ldr r5, _08012BDC @ =gActiveBank\n\
+ ldrb r4, [r5]\n\
+ lsls r1, r4, 9\n\
+ adds r0, r2, 0x1\n\
+ adds r0, r1, r0\n\
+ ldrb r3, [r0]\n\
+ adds r2, 0x2\n\
+ adds r1, r2\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 8\n\
+ orrs r3, r0\n\
+ cmp r3, 0\n\
+ bne _08012BCE\n\
+ b _08012F60\n\
+_08012BCE:\n\
+ ldr r0, _08012BE0 @ =gLastUsedItem\n\
+ strh r3, [r0]\n\
+ ldr r0, _08012BE4 @ =gBattleCommunication\n\
+ ldrb r1, [r5]\n\
+ b _08012E3C\n\
+ .align 2, 0\n\
+_08012BD8: .4byte gBattleBufferB\n\
+_08012BDC: .4byte gActiveBank\n\
+_08012BE0: .4byte gLastUsedItem\n\
+_08012BE4: .4byte gBattleCommunication\n\
+_08012BE8:\n\
+ ldr r4, _08012C04 @ =gBattleBufferB\n\
+ ldr r7, _08012C08 @ =gActiveBank\n\
+ ldrb r2, [r7]\n\
+ lsls r0, r2, 9\n\
+ adds r1, r4, 0x1\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ cmp r1, 0x6\n\
+ bne _08012C10\n\
+ ldr r0, _08012C0C @ =gBattleCommunication\n\
+ adds r0, r2, r0\n\
+_08012BFE:\n\
+ movs r1, 0\n\
+ strb r1, [r0]\n\
+ b _08012F66\n\
+ .align 2, 0\n\
+_08012C04: .4byte gBattleBufferB\n\
+_08012C08: .4byte gActiveBank\n\
+_08012C0C: .4byte gBattleCommunication\n\
+_08012C10:\n\
+ ldr r0, _08012CC4 @ =gSharedMem\n\
+ mov r12, r0\n\
+ ldr r3, _08012CC8 @ =0x00016068\n\
+ adds r0, r2, r3\n\
+ add r0, r12\n\
+ strb r1, [r0]\n\
+ ldr r0, _08012CCC @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08012CBE\n\
+ ldrb r0, [r7]\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ ldr r5, _08012CD0 @ =0x0001606c\n\
+ adds r1, r5\n\
+ add r1, r12\n\
+ ldrb r2, [r1]\n\
+ movs r0, 0xF\n\
+ ands r0, r2\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ lsls r2, r0, 1\n\
+ adds r2, r0\n\
+ adds r2, r5\n\
+ add r2, r12\n\
+ lsls r0, 9\n\
+ adds r6, r4, 0x2\n\
+ adds r0, r6\n\
+ ldrb r1, [r0]\n\
+ movs r3, 0xF0\n\
+ adds r0, r3, 0\n\
+ ands r0, r1\n\
+ ldrb r1, [r2]\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldrb r0, [r7]\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ ldr r2, _08012CD4 @ =0x0001606d\n\
+ adds r1, r2\n\
+ add r1, r12\n\
+ lsls r0, 9\n\
+ adds r4, 0x3\n\
+ mov r8, r4\n\
+ add r0, r8\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ movs r4, 0x2\n\
+ eors r0, r4\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ adds r1, r5\n\
+ add r1, r12\n\
+ ldrb r2, [r1]\n\
+ adds r0, r3, 0\n\
+ ands r0, r2\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r7]\n\
+ eors r0, r4\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ adds r1, r5\n\
+ add r1, r12\n\
+ ldrb r0, [r7]\n\
+ lsls r0, 9\n\
+ adds r0, r6\n\
+ ldrb r0, [r0]\n\
+ ands r3, r0\n\
+ lsrs r3, 4\n\
+ ldrb r0, [r1]\n\
+ orrs r3, r0\n\
+ strb r3, [r1]\n\
+ ldrb r0, [r7]\n\
+ eors r4, r0\n\
+ lsls r1, r4, 1\n\
+ adds r1, r4\n\
+ ldr r3, _08012CD8 @ =0x0001606e\n\
+ adds r1, r3\n\
+ add r1, r12\n\
+ ldrb r0, [r7]\n\
+ lsls r0, 9\n\
+ add r0, r8\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+_08012CBE:\n\
+ ldr r0, _08012CDC @ =gBattleCommunication\n\
+ ldrb r1, [r7]\n\
+ b _08012E3C\n\
+ .align 2, 0\n\
+_08012CC4: .4byte gSharedMem\n\
+_08012CC8: .4byte 0x00016068\n\
+_08012CCC: .4byte gBattleTypeFlags\n\
+_08012CD0: .4byte 0x0001606c\n\
+_08012CD4: .4byte 0x0001606d\n\
+_08012CD8: .4byte 0x0001606e\n\
+_08012CDC: .4byte gBattleCommunication\n\
+_08012CE0:\n\
+ ldr r2, _08012CF8 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 8\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ ldr r2, _08012CFC @ =gBattleCommunication\n\
+ ldr r0, _08012D00 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ adds r1, r2\n\
+ b _08012E3E\n\
+ .align 2, 0\n\
+_08012CF8: .4byte gHitMarker\n\
+_08012CFC: .4byte gBattleCommunication\n\
+_08012D00: .4byte gActiveBank\n\
+_08012D04:\n\
+ ldr r2, _08012D10 @ =gBattleCommunication\n\
+ ldr r0, _08012D14 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ adds r1, r2\n\
+ b _08012E3E\n\
+ .align 2, 0\n\
+_08012D10: .4byte gBattleCommunication\n\
+_08012D14: .4byte gActiveBank\n\
+_08012D18:\n\
+ ldr r2, _08012D24 @ =gBattleCommunication\n\
+ ldr r0, _08012D28 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ adds r1, r2\n\
+ b _08012E3E\n\
+ .align 2, 0\n\
+_08012D24: .4byte gBattleCommunication\n\
+_08012D28: .4byte gActiveBank\n\
+_08012D2C:\n\
+ ldr r2, _08012D50 @ =gBattleBufferB\n\
+ ldr r0, _08012D54 @ =gActiveBank\n\
+ ldrb r4, [r0]\n\
+ lsls r1, r4, 9\n\
+ adds r0, r2, 0x1\n\
+ adds r0, r1, r0\n\
+ ldrb r3, [r0]\n\
+ adds r2, 0x2\n\
+ adds r1, r2\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 8\n\
+ orrs r3, r0\n\
+ cmp r3, 0\n\
+ bne _08012D4A\n\
+ b _08012F60\n\
+_08012D4A:\n\
+ ldr r1, _08012D58 @ =gBattleCommunication\n\
+ adds r1, r4, r1\n\
+ b _08012E3E\n\
+ .align 2, 0\n\
+_08012D50: .4byte gBattleBufferB\n\
+_08012D54: .4byte gActiveBank\n\
+_08012D58: .4byte gBattleCommunication\n\
+_08012D5C:\n\
+ ldr r2, _08012D68 @ =gBattleCommunication\n\
+ ldr r0, _08012D6C @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ adds r1, r2\n\
+ b _08012E3E\n\
+ .align 2, 0\n\
+_08012D68: .4byte gBattleCommunication\n\
+_08012D6C: .4byte gActiveBank\n\
+_08012D70:\n\
+ ldr r2, _08012D88 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 8\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ ldr r2, _08012D8C @ =gBattleCommunication\n\
+ ldr r0, _08012D90 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ adds r1, r2\n\
+ b _08012E3E\n\
+ .align 2, 0\n\
+_08012D88: .4byte gHitMarker\n\
+_08012D8C: .4byte gBattleCommunication\n\
+_08012D90: .4byte gActiveBank\n\
+_08012D94:\n\
+ ldr r2, _08012DA0 @ =gBattleCommunication\n\
+ ldr r0, _08012DA4 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ adds r1, r2\n\
+ b _08012E3E\n\
+ .align 2, 0\n\
+_08012DA0: .4byte gBattleCommunication\n\
+_08012DA4: .4byte gActiveBank\n\
+_08012DA8:\n\
+ ldr r3, _08012E10 @ =gBattleExecBuffer\n\
+ ldr r4, _08012E14 @ =gBitTable\n\
+ ldr r0, _08012E18 @ =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r4\n\
+ ldr r2, [r0]\n\
+ lsls r1, r2, 4\n\
+ movs r0, 0xF0\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ orrs r1, r2\n\
+ lsls r0, r2, 8\n\
+ orrs r1, r0\n\
+ lsls r2, 12\n\
+ orrs r1, r2\n\
+ ldr r0, [r3]\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08012DD2\n\
+ b _08012F66\n\
+_08012DD2:\n\
+ ldr r0, _08012E1C @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x41\n\
+ ands r0, r1\n\
+ cmp r0, 0x1\n\
+ bne _08012E06\n\
+ movs r1, 0x2\n\
+ movs r0, 0x2\n\
+ ands r0, r5\n\
+ cmp r0, 0\n\
+ bne _08012E06\n\
+ adds r0, r5, 0\n\
+ eors r0, r1\n\
+ bl GetBankByPlayerAI\n\
+ ldr r1, _08012E20 @ =gSharedMem\n\
+ ldr r2, _08012E24 @ =0x000160a6\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ lsls r0, 24\n\
+ lsrs r0, 22\n\
+ adds r0, r4\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _08012E28\n\
+_08012E06:\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ bl EmitLinkStandbyMsg\n\
+ b _08012E30\n\
+ .align 2, 0\n\
+_08012E10: .4byte gBattleExecBuffer\n\
+_08012E14: .4byte gBitTable\n\
+_08012E18: .4byte gActiveBank\n\
+_08012E1C: .4byte gBattleTypeFlags\n\
+_08012E20: .4byte gSharedMem\n\
+_08012E24: .4byte 0x000160a6\n\
+_08012E28:\n\
+ movs r0, 0\n\
+ movs r1, 0x1\n\
+ bl EmitLinkStandbyMsg\n\
+_08012E30:\n\
+ ldr r4, _08012E48 @ =gActiveBank\n\
+_08012E32:\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, _08012E4C @ =gBattleCommunication\n\
+ ldrb r1, [r4]\n\
+_08012E3C:\n\
+ adds r1, r0\n\
+_08012E3E:\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ b _08012F66\n\
+ .align 2, 0\n\
+_08012E48: .4byte gActiveBank\n\
+_08012E4C: .4byte gBattleCommunication\n\
+_08012E50:\n\
+ ldr r3, _08012E84 @ =gBattleExecBuffer\n\
+ ldr r1, _08012E88 @ =gBitTable\n\
+ ldr r0, _08012E8C @ =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r2, [r0]\n\
+ lsls r1, r2, 4\n\
+ movs r0, 0xF0\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ orrs r1, r2\n\
+ lsls r0, r2, 8\n\
+ orrs r1, r0\n\
+ lsls r2, 12\n\
+ orrs r1, r2\n\
+ ldr r0, [r3]\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08012F66\n\
+ ldr r1, _08012E90 @ =gBattleCommunication\n\
+ ldrb r0, [r1, 0x4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1, 0x4]\n\
+ b _08012F66\n\
+ .align 2, 0\n\
+_08012E84: .4byte gBattleExecBuffer\n\
+_08012E88: .4byte gBitTable\n\
+_08012E8C: .4byte gActiveBank\n\
+_08012E90: .4byte gBattleCommunication\n\
+_08012E94:\n\
+ ldr r2, _08012EB8 @ =gSharedMem\n\
+ ldr r5, _08012EBC @ =gActiveBank\n\
+ ldrb r1, [r5]\n\
+ ldr r3, _08012EC0 @ =0x00016060\n\
+ adds r0, r1, r3\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08012ECC\n\
+ ldr r0, _08012EC4 @ =gBattleCommunication\n\
+ adds r0, r1, r0\n\
+ ldr r4, _08012EC8 @ =0x00016094\n\
+ adds r1, r4\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ strb r1, [r0]\n\
+ b _08012F66\n\
+ .align 2, 0\n\
+_08012EB8: .4byte gSharedMem\n\
+_08012EBC: .4byte gActiveBank\n\
+_08012EC0: .4byte 0x00016060\n\
+_08012EC4: .4byte gBattleCommunication\n\
+_08012EC8: .4byte 0x00016094\n\
+_08012ECC:\n\
+ ldr r0, _08012F20 @ =gBankAttacker\n\
+ strb r1, [r0]\n\
+ ldr r7, _08012F24 @ =gBattlescriptCurrInstr\n\
+ ldr r6, _08012F28 @ =gUnknown_02024C1C\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r4, [r0]\n\
+ str r4, [r7]\n\
+ ldr r3, _08012F2C @ =gBattleExecBuffer\n\
+ ldr r1, _08012F30 @ =gBitTable\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r2, [r0]\n\
+ lsls r1, r2, 4\n\
+ movs r0, 0xF0\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ orrs r1, r2\n\
+ lsls r0, r2, 8\n\
+ orrs r1, r0\n\
+ lsls r2, 12\n\
+ orrs r1, r2\n\
+ ldr r0, [r3]\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08012F12\n\
+ ldr r0, _08012F34 @ =gBattleScriptingCommandsTable\n\
+ ldrb r1, [r4]\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldr r0, [r1]\n\
+ bl _call_via_r0\n\
+_08012F12:\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldr r1, [r7]\n\
+ str r1, [r0]\n\
+ b _08012F66\n\
+ .align 2, 0\n\
+_08012F20: .4byte gBankAttacker\n\
+_08012F24: .4byte gBattlescriptCurrInstr\n\
+_08012F28: .4byte gUnknown_02024C1C\n\
+_08012F2C: .4byte gBattleExecBuffer\n\
+_08012F30: .4byte gBitTable\n\
+_08012F34: .4byte gBattleScriptingCommandsTable\n\
+_08012F38:\n\
+ ldr r3, _08012FA0 @ =gBattleExecBuffer\n\
+ ldr r1, _08012FA4 @ =gBitTable\n\
+ ldr r0, _08012FA8 @ =gActiveBank\n\
+ ldrb r4, [r0]\n\
+ lsls r0, r4, 2\n\
+ adds r0, r1\n\
+ ldr r2, [r0]\n\
+ lsls r0, r2, 4\n\
+ movs r1, 0xF0\n\
+ lsls r1, 24\n\
+ orrs r0, r1\n\
+ orrs r0, r2\n\
+ lsls r1, r2, 8\n\
+ orrs r0, r1\n\
+ lsls r2, 12\n\
+ orrs r0, r2\n\
+ ldr r3, [r3]\n\
+ ands r3, r0\n\
+ cmp r3, 0\n\
+ bne _08012F66\n\
+_08012F60:\n\
+ ldr r0, _08012FAC @ =gBattleCommunication\n\
+ adds r0, r4, r0\n\
+ strb r3, [r0]\n\
+_08012F66:\n\
+ ldr r0, _08012FA8 @ =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ adds r1, 0x1\n\
+ strb r1, [r0]\n\
+ ldr r0, _08012FB0 @ =gNoOfAllBanks\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+_08012F74:\n\
+ adds r2, r0, 0\n\
+ ldrb r0, [r2]\n\
+ cmp r1, r0\n\
+ bcs _08012F80\n\
+ bl _0801234C\n\
+_08012F80:\n\
+ ldr r0, _08012FAC @ =gBattleCommunication\n\
+ ldrb r0, [r0, 0x4]\n\
+ ldrb r2, [r2]\n\
+ cmp r0, r2\n\
+ bne _08012F90\n\
+ ldr r1, _08012FB4 @ =gBattleMainFunc\n\
+ ldr r0, _08012FB8 @ =sub_80133C8\n\
+ str r0, [r1]\n\
+_08012F90:\n\
+ add sp, 0x1C\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\
+_08012FA0: .4byte gBattleExecBuffer\n\
+_08012FA4: .4byte gBitTable\n\
+_08012FA8: .4byte gActiveBank\n\
+_08012FAC: .4byte gBattleCommunication\n\
+_08012FB0: .4byte gNoOfAllBanks\n\
+_08012FB4: .4byte gBattleMainFunc\n\
+_08012FB8: .4byte sub_80133C8\n\
+ .syntax divided\n");
+}
+
+void sub_8012FBC(u8 a, u8 b)
+{
+ int temp;
+
+ temp = gUnknown_02024A76[a];
+ gUnknown_02024A76[a] = gUnknown_02024A76[b];
+ gUnknown_02024A76[b] = temp;
+
+ temp = gTurnOrder[a];
+ gTurnOrder[a] = gTurnOrder[b];
+ gTurnOrder[b] = temp;
+}
+
+// Determines which of the two given mons will strike first in a battle.
+// Returns:
+// 0 = first mon moves first
+// 1 = second mon moves first
+// 2 = second mon moves first because it won a 50/50 roll
+u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreMovePriorities)
+{
+ int bank1SpeedMultiplier, bank2SpeedMultiplier;
+ u32 bank1AdjustedSpeed, bank2AdjustedSpeed;
+ u8 heldItemEffect;
+ u8 heldItemEffectParam;
+ u16 bank1Move;
+ u16 bank2Move;
+ u8 strikesFirst = 0;
+
+ // Check for abilities that boost speed in weather.
+ if (WEATHER_HAS_EFFECT)
+ {
+ if ((gBattleMons[bank1].ability == ABILITY_SWIFT_SWIM && (gBattleWeather & WEATHER_RAIN_ANY))
+ || (gBattleMons[bank1].ability == ABILITY_CHLOROPHYLL && (gBattleWeather & WEATHER_SUN_ANY)))
+ bank1SpeedMultiplier = 2;
+ else
+ bank1SpeedMultiplier = 1;
+
+ if ((gBattleMons[bank2].ability == ABILITY_SWIFT_SWIM && (gBattleWeather & WEATHER_RAIN_ANY))
+ || (gBattleMons[bank2].ability == ABILITY_CHLOROPHYLL && (gBattleWeather & WEATHER_SUN_ANY)))
+ bank2SpeedMultiplier = 2;
+ else
+ bank2SpeedMultiplier = 1;
+ }
+ else
+ {
+ bank1SpeedMultiplier = 1;
+ bank2SpeedMultiplier = 1;
+ }
+
+ // Calculate adjusted speed for first mon.
+ bank1AdjustedSpeed = (gBattleMons[bank1].speed * bank1SpeedMultiplier)
+ * gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][0] / gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][1];
+
+ if (gBattleMons[bank1].item == ITEM_ENIGMA_BERRY)
+ {
+ heldItemEffect = gEnigmaBerries[bank1].holdEffect;
+ heldItemEffectParam = gEnigmaBerries[bank1].holdEffectParam;
+ }
+ else
+ {
+ heldItemEffect = ItemId_GetHoldEffect(gBattleMons[bank1].item);
+ heldItemEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank1].item);
+ }
+
+ // Only give badge speed boost to the player's mon.
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && FlagGet(FLAG_BADGE03_GET) && GetBankSide(bank1) == 0)
+ bank1AdjustedSpeed = (bank1AdjustedSpeed * 110) / 100;
+
+ if (heldItemEffect == HOLD_EFFECT_MACHO_BRACE)
+ bank1AdjustedSpeed /= 2;
+
+ if (gBattleMons[bank1].status1 & STATUS_PARALYSIS)
+ bank1AdjustedSpeed /= 4;
+
+ if (heldItemEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (heldItemEffectParam * 0xFFFF) / 100)
+ bank1AdjustedSpeed = UINT_MAX;
+
+ // Calculate adjusted speed for second mon.
+ bank2AdjustedSpeed = gBattleMons[bank2].speed * bank2SpeedMultiplier
+ * gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][0] / gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][1];
+
+ if (gBattleMons[bank2].item == ITEM_ENIGMA_BERRY)
+ {
+ heldItemEffect = gEnigmaBerries[bank2].holdEffect;
+ heldItemEffectParam = gEnigmaBerries[bank2].holdEffectParam;
+ }
+ else
+ {
+ heldItemEffect = ItemId_GetHoldEffect(gBattleMons[bank2].item);
+ heldItemEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank2].item);
+ }
+
+ // Only give badge speed boost to the player's mon.
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && FlagGet(FLAG_BADGE03_GET) && GetBankSide(bank2) == 0)
+ {
+ bank2AdjustedSpeed = (bank2AdjustedSpeed * 110) / 100;
+ }
+
+ if (heldItemEffect == HOLD_EFFECT_MACHO_BRACE)
+ bank2AdjustedSpeed /= 2;
+
+ if (gBattleMons[bank2].status1 & STATUS_PARALYSIS)
+ bank2AdjustedSpeed /= 4;
+
+ if (heldItemEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (heldItemEffectParam * 0xFFFF) / 100)
+ bank2AdjustedSpeed = UINT_MAX;
+
+ if (ignoreMovePriorities)
+ {
+ bank1Move = MOVE_NONE;
+ bank2Move = MOVE_NONE;
+ }
+ else
+ {
+ if (gActionForBanks[bank1] == 0)
+ {
+ if (gProtectStructs[bank1].onlyStruggle)
+ bank1Move = MOVE_STRUGGLE;
+ else
+ bank1Move = gBattleMons[bank1].moves[ewram1608Carr(bank1)];
+ }
+ else
+ bank1Move = MOVE_NONE;
+
+ if (gActionForBanks[bank2] == 0)
+ {
+ if (gProtectStructs[bank2].onlyStruggle)
+ bank2Move = MOVE_STRUGGLE;
+ else
+ bank2Move = gBattleMons[bank2].moves[ewram1608Carr(bank2)];
+ }
+ else
+ bank2Move = MOVE_NONE;
+ }
+
+ if (gBattleMoves[bank1Move].priority != 0 || gBattleMoves[bank2Move].priority != 0)
+ {
+ if (gBattleMoves[bank1Move].priority == gBattleMoves[bank2Move].priority)
+ {
+ if (bank1AdjustedSpeed == bank2AdjustedSpeed && (Random() & 1))
+ strikesFirst = 2;
+ else if (bank1AdjustedSpeed < bank2AdjustedSpeed)
+ strikesFirst = 1;
+ }
+ else if (gBattleMoves[bank1Move].priority < gBattleMoves[bank2Move].priority)
+ strikesFirst = 1;
+ }
+ else
+ {
+ if (bank1AdjustedSpeed == bank2AdjustedSpeed && (Random() & 1))
+ strikesFirst = 2;
+ else if (bank1AdjustedSpeed < bank2AdjustedSpeed)
+ strikesFirst = 1;
+ }
+
+ return strikesFirst;
+}
diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c
index 1fa7a2ed2..6b892ea7a 100644
--- a/src/battle/battle_ai.c
+++ b/src/battle/battle_ai.c
@@ -1275,7 +1275,7 @@ static void BattleAICmd_if_arg_not_equal(void)
static void BattleAICmd_if_would_go_first(void)
{
- if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1])
+ if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, TRUE) == gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -1283,7 +1283,7 @@ static void BattleAICmd_if_would_go_first(void)
static void BattleAICmd_if_would_not_go_first(void)
{
- if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1])
+ if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, TRUE) != gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;