summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-27 10:27:36 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-27 10:27:36 +0800
commitca130a8aeb39d05340495766a1f33dc854f6b4a1 (patch)
tree37613c40377ae380446a62c7cfda0ed8c4175e5a
parenta61be4c32d8b81bd0ee414f44e1b0c9095778148 (diff)
thru atkc0
-rw-r--r--asm/battle_script_commands.s6463
-rw-r--r--include/battle.h14
-rw-r--r--include/battle_script_commands.h4
-rw-r--r--include/constants/battle.h2
-rw-r--r--include/constants/battle_script_commands.h4
-rw-r--r--include/party_menu.h2
-rw-r--r--src/battle_ai_script_commands.c4
-rw-r--r--src/battle_script_commands.c1489
-rw-r--r--src/battle_util.c10
9 files changed, 1500 insertions, 6492 deletions
diff --git a/asm/battle_script_commands.s b/asm/battle_script_commands.s
index 68bff599e..5d8648ced 100644
--- a/asm/battle_script_commands.s
+++ b/asm/battle_script_commands.s
@@ -5,6469 +5,6 @@
.text
- thumb_func_start atk8F_forcerandomswitch
-atk8F_forcerandomswitch: @ 802830C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, _080283A4 @ =gBattleTypeFlags
- ldr r0, [r4]
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08028320
- b _080285F4
-_08028320:
- ldr r5, _080283A8 @ =gBattlerTarget
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _080283AC @ =gEnemyParty
- mov r8, r1
- cmp r0, 0
- bne _08028336
- ldr r0, _080283B0 @ =gPlayerParty
- mov r8, r0
-_08028336:
- ldr r0, [r4]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080283B4
- movs r7, 0
- movs r6, 0
- ldrb r0, [r5]
- bl GetBattlerMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- bl GetLinkTrainerFlankId
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _0802835C
- movs r6, 0x3
-_0802835C:
- adds r5, r6, 0
- adds r0, r5, 0x3
- cmp r5, r0
- bge _080283F4
-_08028364:
- 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 _08028396
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08028396
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08028396
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_08028396:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r6, 0x3
- cmp r5, r0
- blt _08028364
- b _080283F4
- .align 2, 0
-_080283A4: .4byte gBattleTypeFlags
-_080283A8: .4byte gBattlerTarget
-_080283AC: .4byte gEnemyParty
-_080283B0: .4byte gPlayerParty
-_080283B4:
- movs r7, 0
- movs r5, 0
-_080283B8:
- 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 _080283EA
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _080283EA
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080283EA
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_080283EA:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _080283B8
-_080283F4:
- cmp r7, 0x1
- bhi _08028404
- ldr r0, _08028438 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x41
- ands r0, r1
- cmp r0, 0x1
- bne _0802841C
-_08028404:
- cmp r7, 0x2
- bhi _08028440
- ldr r0, _08028438 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08028440
- movs r0, 0x40
- ands r1, r0
- cmp r1, 0
- bne _08028440
-_0802841C:
- ldr r3, _0802843C @ =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 _080285F8
- .align 2, 0
-_08028438: .4byte gBattleTypeFlags
-_0802843C: .4byte gBattlescriptCurrInstr
-_08028440:
- bl TryDoForceSwitchOut
- lsls r0, 24
- cmp r0, 0
- bne _0802844C
- b _080285F8
-_0802844C:
- ldr r0, _0802848C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080284F0
-_08028458:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08028490 @ =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- bl GetLinkTrainerFlankId
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _08028494
- adds r0, r6, 0x3
- lsls r0, 24
- lsrs r5, r0, 24
- b _08028496
- .align 2, 0
-_0802848C: .4byte gBattleTypeFlags
-_08028490: .4byte gBattlerTarget
-_08028494:
- adds r5, r6, 0
-_08028496:
- ldr r4, _080284E8 @ =gBattlerPartyIndexes
- ldr r0, _080284EC @ =gBattlerTarget
- 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 _08028458
- movs r0, 0x2
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r4
- ldrh r0, [r0]
- cmp r3, r0
- beq _08028458
- 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 _08028458
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _08028458
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08028458
- b _080285AE
- .align 2, 0
-_080284E8: .4byte gBattlerPartyIndexes
-_080284EC: .4byte gBattlerTarget
-_080284F0:
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08028560
- ldr r6, _08028558 @ =gBattlerPartyIndexes
-_080284FA:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0802855C @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r6
- adds r2, r5, 0
- ldrh r0, [r0]
- cmp r2, r0
- beq _080284FA
- movs r0, 0x2
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r6
- ldrh r0, [r0]
- cmp r2, r0
- beq _080284FA
- 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 _080284FA
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _080284FA
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080284FA
- b _080285AE
- .align 2, 0
-_08028558: .4byte gBattlerPartyIndexes
-_0802855C: .4byte gBattlerTarget
-_08028560:
- ldr r6, _080285E8 @ =gBattlerPartyIndexes
-_08028562:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080285EC @ =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- cmp r5, r0
- beq _08028562
- 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 _08028562
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _08028562
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08028562
-_080285AE:
- ldr r4, _080285EC @ =gBattlerTarget
- ldrb r0, [r4]
- ldr r1, _080285F0 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x5C
- strb r5, [r0]
- bl IsMultiBattle
- lsls r0, 24
- cmp r0, 0
- bne _080285CC
- ldrb r0, [r4]
- bl sub_8013F6C
-_080285CC:
- ldrb r0, [r4]
- adds r1, r5, 0
- movs r2, 0
- bl sub_8127EC4
- ldrb r1, [r4]
- movs r0, 0x2
- eors r0, r1
- adds r1, r5, 0
- movs r2, 0x1
- bl sub_8127EC4
- b _080285F8
- .align 2, 0
-_080285E8: .4byte gBattlerPartyIndexes
-_080285EC: .4byte gBattlerTarget
-_080285F0: .4byte gBattleStruct
-_080285F4:
- bl TryDoForceSwitchOut
-_080285F8:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk8F_forcerandomswitch
-
- thumb_func_start atk90_tryconversiontypechange
-atk90_tryconversiontypechange: @ 8028604
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- ldr r2, _08028698 @ =gBattleMons
- ldr r3, _0802869C @ =gBattlerAttacker
- 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 _08028646
- movs r5, 0x58
- adds r2, r1, 0
-_0802862C:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bhi _08028646
- lsls r1, r6, 1
- ldrb r0, [r3]
- muls r0, r5
- adds r1, r0
- adds r1, r2
- ldrh r0, [r1]
- cmp r0, 0
- bne _0802862C
-_08028646:
- movs r3, 0
- cmp r3, r6
- bcs _080286C8
- ldr r0, _080286A0 @ =gBattleMoves
- mov r10, r0
- ldr r5, _08028698 @ =gBattleMons
- mov r12, r5
- ldr r7, _0802869C @ =gBattlerAttacker
- ldrb r0, [r7]
- movs r4, 0x58
- adds r5, r0, 0
- muls r5, r4
- movs r0, 0xC
- add r0, r12
- mov r9, r0
-_08028664:
- 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 _080286A6
- mov r0, r8
- adds r1, r5, r0
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _08028692
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _080286A4
-_08028692:
- movs r2, 0x7
- b _080286A6
- .align 2, 0
-_08028698: .4byte gBattleMons
-_0802869C: .4byte gBattlerAttacker
-_080286A0: .4byte gBattleMoves
-_080286A4:
- movs r2, 0
-_080286A6:
- ldrb r0, [r7]
- muls r0, r4
- add r0, r12
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r1, [r1]
- cmp r2, r1
- beq _080286BE
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r2, r0
- bne _080286C8
-_080286BE:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r6
- bcc _08028664
-_080286C8:
- cmp r3, r6
- bne _080286EC
- ldr r3, _080286E8 @ =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 _08028790
- .align 2, 0
-_080286E8: .4byte gBattlescriptCurrInstr
-_080286EC:
- movs r7, 0x3
- ldr r5, _08028744 @ =gBattleMoves
- mov r9, r5
-_080286F2:
- bl Random
- adds r3, r0, 0
- ands r3, r7
- cmp r3, r6
- bcs _080286F2
- ldr r4, _08028748 @ =gBattleMons
- lsls r1, r3, 1
- ldr r3, _0802874C @ =gBattlerAttacker
- 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 _08028752
- mov r0, r8
- adds r2, r5, r0
- adds r0, r2, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _08028740
- adds r0, r2, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _08028750
-_08028740:
- movs r2, 0x7
- b _08028752
- .align 2, 0
-_08028744: .4byte gBattleMoves
-_08028748: .4byte gBattleMons
-_0802874C: .4byte gBattlerAttacker
-_08028750:
- movs r2, 0
-_08028752:
- 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 _080286F2
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r2, r0
- beq _080286F2
- strb r2, [r1]
- ldrb r0, [r4]
- muls r0, r3
- add r0, r8
- adds r0, 0x22
- strb r2, [r0]
- ldr r1, _080287A0 @ =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, _080287A4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08028790:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080287A0: .4byte gBattleTextBuff1
-_080287A4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk90_tryconversiontypechange
-
- thumb_func_start atk91_givepaydaymoney
-atk91_givepaydaymoney: @ 80287A8
- push {r4,r5,lr}
- ldr r0, _0802880C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r5, 0x2
- ands r0, r5
- cmp r0, 0
- bne _08028828
- ldr r1, _08028810 @ =gPaydayMoney
- ldrh r0, [r1]
- cmp r0, 0
- beq _08028828
- adds r1, r0, 0
- ldr r0, _08028814 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x4A
- ldrb r0, [r0]
- adds r4, r1, 0
- muls r4, r0
- ldr r0, _08028818 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xA4
- lsls r1, 2
- adds r0, r1
- adds r1, r4, 0
- bl AddMoney
- ldr r1, _0802881C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- strb r5, [r1, 0x2]
- movs r0, 0x5
- strb r0, [r1, 0x3]
- strb r4, [r1, 0x4]
- movs r0, 0xFF
- lsls r0, 8
- ands r4, r0
- lsrs r4, 8
- strb r4, [r1, 0x5]
- movs r0, 0xFF
- strb r0, [r1, 0x6]
- ldr r4, _08028820 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08028824 @ =BattleScript_PrintPayDayMoneyString
- str r0, [r4]
- b _08028830
- .align 2, 0
-_0802880C: .4byte gBattleTypeFlags
-_08028810: .4byte gPaydayMoney
-_08028814: .4byte gBattleStruct
-_08028818: .4byte gSaveBlock1Ptr
-_0802881C: .4byte gBattleTextBuff1
-_08028820: .4byte gBattlescriptCurrInstr
-_08028824: .4byte BattleScript_PrintPayDayMoneyString
-_08028828:
- ldr r1, _08028838 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_08028830:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08028838: .4byte gBattlescriptCurrInstr
- thumb_func_end atk91_givepaydaymoney
-
- thumb_func_start atk92_setlightscreen
-atk92_setlightscreen: @ 802883C
- push {r4-r6,lr}
- ldr r5, _0802886C @ =gBattlerAttacker
- ldrb r0, [r5]
- bl GetBattlerPosition
- ldr r4, _08028870 @ =gSideStatuses
- movs r6, 0x1
- adds r1, r6, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r1, [r1]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802887C
- ldr r2, _08028874 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08028878 @ =gBattleCommunication
- movs r0, 0
- b _080288F0
- .align 2, 0
-_0802886C: .4byte gBattlerAttacker
-_08028870: .4byte gSideStatuses
-_08028874: .4byte gMoveResultFlags
-_08028878: .4byte gBattleCommunication
-_0802887C:
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r6, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r5]
- bl GetBattlerPosition
- ldr r4, _080288E0 @ =gSideTimers
- adds r1, r6, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x5
- strb r1, [r0, 0x2]
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r6, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r5]
- strb r1, [r0, 0x3]
- ldr r0, _080288E4 @ =gBattleTypeFlags
- ldr r0, [r0]
- ands r0, r6
- cmp r0, 0
- beq _080288EC
- movs r0, 0x1
- bl CountAliveMonsInBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _080288EC
- ldr r1, _080288E8 @ =gBattleCommunication
- movs r0, 0x4
- b _080288F0
- .align 2, 0
-_080288E0: .4byte gSideTimers
-_080288E4: .4byte gBattleTypeFlags
-_080288E8: .4byte gBattleCommunication
-_080288EC:
- ldr r1, _08028900 @ =gBattleCommunication
- movs r0, 0x3
-_080288F0:
- strb r0, [r1, 0x5]
- ldr r1, _08028904 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08028900: .4byte gBattleCommunication
-_08028904: .4byte gBattlescriptCurrInstr
- thumb_func_end atk92_setlightscreen
-
- thumb_func_start atk93_tryKO
-atk93_tryKO: @ 8028908
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r7, _08028934 @ =gBattleMons
- ldr r6, _08028938 @ =gBattlerTarget
- 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 _08028940
- ldr r1, _0802893C @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _0802895A
- .align 2, 0
-_08028934: .4byte gBattleMons
-_08028938: .4byte gBattlerTarget
-_0802893C: .4byte gEnigmaBerries
-_08028940:
- 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
-_0802895A:
- ldr r1, _080289D4 @ =gPotentialItemEffectBattler
- ldr r5, _080289D8 @ =gBattlerTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _08028998
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _08028998
- ldrb r0, [r5]
- movs r1, 0x27
- bl RecordItemEffectBattle
- ldr r2, _080289DC @ =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]
-_08028998:
- ldr r1, _080289E0 @ =gBattleMons
- ldr r2, _080289D8 @ =gBattlerTarget
- ldrb r3, [r2]
- movs r6, 0x58
- adds r0, r3, 0
- muls r0, r6
- adds r5, r0, r1
- adds r0, r5, 0
- adds r0, 0x20
- ldrb r4, [r0]
- mov r8, r1
- mov r9, r2
- cmp r4, 0x5
- bne _080289F4
- ldr r2, _080289E4 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080289E8 @ =gLastUsedAbility
- strb r4, [r0]
- ldr r1, _080289EC @ =gBattlescriptCurrInstr
- ldr r0, _080289F0 @ =BattleScript_SturdyPreventsOHKO
- str r0, [r1]
- mov r1, r9
- ldrb r0, [r1]
- movs r1, 0x5
- bl RecordAbilityBattle
- b _08028C48
- .align 2, 0
-_080289D4: .4byte gPotentialItemEffectBattler
-_080289D8: .4byte gBattlerTarget
-_080289DC: .4byte gSpecialStatuses
-_080289E0: .4byte gBattleMons
-_080289E4: .4byte gMoveResultFlags
-_080289E8: .4byte gLastUsedAbility
-_080289EC: .4byte gBattlescriptCurrInstr
-_080289F0: .4byte BattleScript_SturdyPreventsOHKO
-_080289F4:
- ldr r1, _08028A68 @ =gStatuses3
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x18
- ands r0, r1
- cmp r0, 0
- bne _08028A78
- ldr r1, _08028A6C @ =gBattleMoves
- ldr r0, _08028A70 @ =gCurrentMove
- ldrh r0, [r0]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldr r7, _08028A74 @ =gBattlerAttacker
- ldrb r0, [r7]
- muls r0, r6
- add r0, r8
- 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
- blt _08028A48
- b _08028BE0
-_08028A48:
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- add r1, r8
- adds r1, 0x2A
- mov r2, r9
- ldrb r0, [r2]
- muls r0, r6
- add r0, r8
- adds r0, 0x2A
- ldrb r1, [r1]
- movs r4, 0x1
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08028B0E
- b _08028BE0
- .align 2, 0
-_08028A68: .4byte gStatuses3
-_08028A6C: .4byte gBattleMoves
-_08028A70: .4byte gCurrentMove
-_08028A74: .4byte gBattlerAttacker
-_08028A78:
- ldr r1, _08028B44 @ =gDisableStructs
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldr r1, _08028B48 @ =gBattlerAttacker
- ldrb r0, [r0, 0x15]
- adds r7, r1, 0
- ldrb r3, [r7]
- cmp r0, r3
- bne _08028AA2
- ldrb r0, [r7]
- muls r0, r6
- add r0, r8
- adds r0, 0x2A
- adds r1, r5, 0
- adds r1, 0x2A
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bcs _08028B1A
-_08028AA2:
- ldr r1, _08028B4C @ =gBattleMoves
- ldr r0, _08028B50 @ =gCurrentMove
- ldrh r0, [r0]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldr r6, _08028B54 @ =gBattleMons
- ldrb r0, [r7]
- movs r5, 0x58
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r1, [r0]
- ldr r0, _08028B58 @ =gBattlerTarget
- mov r8, r0
- ldrb r0, [r0]
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r0, [r0]
- subs r1, r0
- ldrb r2, [r2, 0x3]
- adds r1, r2
- lsls r1, 16
- lsrs r4, r1, 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 _08028B0C
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r6
- adds r1, 0x2A
- mov r2, r8
- ldrb r0, [r2]
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r1, [r1]
- movs r4, 0x1
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08028B0E
-_08028B0C:
- movs r4, 0
-_08028B0E:
- ldr r3, _08028B54 @ =gBattleMons
- mov r8, r3
- ldr r0, _08028B58 @ =gBattlerTarget
- mov r9, r0
- cmp r4, 0
- beq _08028BE0
-_08028B1A:
- ldr r0, _08028B5C @ =gProtectStructs
- mov r1, r9
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- bge _08028B68
- ldr r1, _08028B60 @ =gBattleMoveDamage
- movs r0, 0x58
- muls r0, r2
- add r0, r8
- ldrh r0, [r0, 0x28]
- subs r0, 0x1
- str r0, [r1]
- ldr r2, _08028B64 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x40
- b _08028BC6
- .align 2, 0
-_08028B44: .4byte gDisableStructs
-_08028B48: .4byte gBattlerAttacker
-_08028B4C: .4byte gBattleMoves
-_08028B50: .4byte gCurrentMove
-_08028B54: .4byte gBattleMons
-_08028B58: .4byte gBattlerTarget
-_08028B5C: .4byte gProtectStructs
-_08028B60: .4byte gBattleMoveDamage
-_08028B64: .4byte gMoveResultFlags
-_08028B68:
- ldr r0, _08028BA4 @ =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _08028BB4
- ldr r1, _08028BA8 @ =gBattleMoveDamage
- movs r3, 0x58
- adds r0, r2, 0
- muls r0, r3
- add r0, r8
- ldrh r0, [r0, 0x28]
- subs r0, 0x1
- str r0, [r1]
- ldr r2, _08028BAC @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08028BB0 @ =gLastUsedItem
- mov r2, r9
- ldrb r0, [r2]
- muls r0, r3
- add r0, r8
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
- b _08028BCA
- .align 2, 0
-_08028BA4: .4byte gSpecialStatuses
-_08028BA8: .4byte gBattleMoveDamage
-_08028BAC: .4byte gMoveResultFlags
-_08028BB0: .4byte gLastUsedItem
-_08028BB4:
- ldr r1, _08028BD4 @ =gBattleMoveDamage
- movs r0, 0x58
- muls r0, r2
- add r0, r8
- ldrh r0, [r0, 0x28]
- str r0, [r1]
- ldr r2, _08028BD8 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x10
-_08028BC6:
- orrs r0, r1
- strb r0, [r2]
-_08028BCA:
- ldr r1, _08028BDC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08028C48
- .align 2, 0
-_08028BD4: .4byte gBattleMoveDamage
-_08028BD8: .4byte gMoveResultFlags
-_08028BDC: .4byte gBattlescriptCurrInstr
-_08028BE0:
- ldr r2, _08028C14 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r3, _08028C18 @ =gBattleMons
- ldr r0, _08028C1C @ =gBattlerAttacker
- ldrb r0, [r0]
- movs r2, 0x58
- adds r1, r0, 0
- muls r1, r2
- adds r1, r3
- adds r1, 0x2A
- ldr r0, _08028C20 @ =gBattlerTarget
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- adds r0, 0x2A
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bcc _08028C28
- ldr r1, _08028C24 @ =gBattleCommunication
- movs r0, 0
- b _08028C2C
- .align 2, 0
-_08028C14: .4byte gMoveResultFlags
-_08028C18: .4byte gBattleMons
-_08028C1C: .4byte gBattlerAttacker
-_08028C20: .4byte gBattlerTarget
-_08028C24: .4byte gBattleCommunication
-_08028C28:
- ldr r1, _08028C54 @ =gBattleCommunication
- movs r0, 0x1
-_08028C2C:
- strb r0, [r1, 0x5]
- ldr r3, _08028C58 @ =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]
-_08028C48:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028C54: .4byte gBattleCommunication
-_08028C58: .4byte gBattlescriptCurrInstr
- thumb_func_end atk93_tryKO
-
- thumb_func_start atk94_damagetohalftargethp
-atk94_damagetohalftargethp: @ 8028C5C
- push {lr}
- ldr r3, _08028C88 @ =gBattleMoveDamage
- ldr r2, _08028C8C @ =gBattleMons
- ldr r0, _08028C90 @ =gBattlerTarget
- 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 _08028C7A
- movs r0, 0x1
- str r0, [r3]
-_08028C7A:
- ldr r1, _08028C94 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08028C88: .4byte gBattleMoveDamage
-_08028C8C: .4byte gBattleMons
-_08028C90: .4byte gBattlerTarget
-_08028C94: .4byte gBattlescriptCurrInstr
- thumb_func_end atk94_damagetohalftargethp
-
- thumb_func_start atk95_setsandstorm
-atk95_setsandstorm: @ 8028C98
- push {lr}
- ldr r2, _08028CB8 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x18
- ands r0, r1
- cmp r0, 0
- beq _08028CC4
- ldr r2, _08028CBC @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08028CC0 @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _08028CD6
- .align 2, 0
-_08028CB8: .4byte gBattleWeather
-_08028CBC: .4byte gMoveResultFlags
-_08028CC0: .4byte gBattleCommunication
-_08028CC4:
- movs r0, 0x8
- strh r0, [r2]
- ldr r1, _08028CE4 @ =gBattleCommunication
- movs r0, 0x3
- strb r0, [r1, 0x5]
- ldr r0, _08028CE8 @ =gWishFutureKnock
- adds r0, 0x28
- movs r1, 0x5
- strb r1, [r0]
-_08028CD6:
- ldr r1, _08028CEC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08028CE4: .4byte gBattleCommunication
-_08028CE8: .4byte gWishFutureKnock
-_08028CEC: .4byte gBattlescriptCurrInstr
- thumb_func_end atk95_setsandstorm
-
- thumb_func_start atk96_weatherdamage
-atk96_weatherdamage: @ 8028CF0
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, _08028DBC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0xA0
- lsls r1, 8
- ands r0, r1
- movs r1, 0x80
- lsls r1, 8
- cmp r0, r1
- bne _08028D18
- ldr r0, _08028DC0 @ =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08028D18
- b _08028E64
-_08028D18:
- 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 _08028D32
- b _08028E48
-_08028D32:
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08028D48
- b _08028E48
-_08028D48:
- ldr r2, _08028DC4 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x18
- ands r0, r1
- ldr r5, _08028DC0 @ =gBattlerAttacker
- adds r4, r2, 0
- cmp r0, 0
- beq _08028DDA
- ldr r0, _08028DC8 @ =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 _08028DD4
- cmp r0, 0x8
- beq _08028DD4
- cmp r0, 0x4
- beq _08028DD4
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x5
- beq _08028DD4
- cmp r0, 0x8
- beq _08028DD4
- cmp r0, 0x4
- beq _08028DD4
- adds r0, r3, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x8
- beq _08028DD4
- ldr r0, _08028DCC @ =gStatuses3
- lsls r1, r2, 2
- adds r1, r0
- ldr r1, [r1]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08028DD4
- movs r0, 0x80
- lsls r0, 11
- ands r1, r0
- cmp r1, 0
- bne _08028DD4
- ldr r1, _08028DD0 @ =gBattleMoveDamage
- ldrh r0, [r3, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _08028DDA
- movs r0, 0x1
- b _08028DD8
- .align 2, 0
-_08028DBC: .4byte gBattleTypeFlags
-_08028DC0: .4byte gBattlerAttacker
-_08028DC4: .4byte gBattleWeather
-_08028DC8: .4byte gBattleMons
-_08028DCC: .4byte gStatuses3
-_08028DD0: .4byte gBattleMoveDamage
-_08028DD4:
- ldr r1, _08028E30 @ =gBattleMoveDamage
- movs r0, 0
-_08028DD8:
- str r0, [r1]
-_08028DDA:
- ldrh r1, [r4]
- movs r4, 0x80
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08028E50
- ldr r1, _08028E34 @ =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 _08028E3C
- adds r0, r2, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xF
- beq _08028E3C
- ldr r0, _08028E38 @ =gStatuses3
- lsls r1, r3, 2
- adds r1, r0
- ldr r1, [r1]
- adds r0, r1, 0
- ands r0, r4
- cmp r0, 0
- bne _08028E3C
- movs r0, 0x80
- lsls r0, 11
- ands r1, r0
- cmp r1, 0
- bne _08028E3C
- ldr r1, _08028E30 @ =gBattleMoveDamage
- ldrh r0, [r2, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _08028E50
- movs r0, 0x1
- str r0, [r1]
- b _08028E50
- .align 2, 0
-_08028E30: .4byte gBattleMoveDamage
-_08028E34: .4byte gBattleMons
-_08028E38: .4byte gStatuses3
-_08028E3C:
- ldr r1, _08028E44 @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
- b _08028E50
- .align 2, 0
-_08028E44: .4byte gBattleMoveDamage
-_08028E48:
- ldr r1, _08028E7C @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
- ldr r5, _08028E80 @ =gBattlerAttacker
-_08028E50:
- ldr r0, _08028E84 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08028E88 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08028E6A
-_08028E64:
- ldr r1, _08028E7C @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
-_08028E6A:
- ldr r1, _08028E8C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08028E7C: .4byte gBattleMoveDamage
-_08028E80: .4byte gBattlerAttacker
-_08028E84: .4byte gAbsentBattlerFlags
-_08028E88: .4byte gBitTable
-_08028E8C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk96_weatherdamage
-
- thumb_func_start atk97_tryinfatuating
-atk97_tryinfatuating: @ 8028E90
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, _08028EBC @ =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08028EC8
- ldr r1, _08028EC0 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08028EC4 @ =gPlayerParty
- b _08028ED8
- .align 2, 0
-_08028EBC: .4byte gBattlerAttacker
-_08028EC0: .4byte gBattlerPartyIndexes
-_08028EC4: .4byte gPlayerParty
-_08028EC8:
- ldr r1, _08028EFC @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08028F00 @ =gEnemyParty
-_08028ED8:
- adds r5, r1, r0
- ldr r4, _08028F04 @ =gBattlerTarget
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08028F0C
- ldr r1, _08028EFC @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08028F08 @ =gPlayerParty
- b _08028F1C
- .align 2, 0
-_08028EFC: .4byte gBattlerPartyIndexes
-_08028F00: .4byte gEnemyParty
-_08028F04: .4byte gBattlerTarget
-_08028F08: .4byte gPlayerParty
-_08028F0C:
- ldr r1, _08028F78 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08028F7C @ =gEnemyParty
-_08028F1C:
- 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, _08028F80 @ =gBattlerTarget
- ldrb r0, [r5]
- movs r6, 0x58
- muls r0, r6
- ldr r1, _08028F84 @ =gBattleMons
- adds r0, r1
- adds r0, 0x20
- ldrb r2, [r0]
- cmp r2, 0xC
- bne _08028F94
- ldr r1, _08028F88 @ =gBattlescriptCurrInstr
- ldr r0, _08028F8C @ =BattleScript_ObliviousPreventsAttraction
- str r0, [r1]
- ldr r0, _08028F90 @ =gLastUsedAbility
- strb r2, [r0]
- ldrb r0, [r5]
- movs r1, 0xC
- bl RecordAbilityBattle
- b _0802902C
- .align 2, 0
-_08028F78: .4byte gBattlerPartyIndexes
-_08028F7C: .4byte gEnemyParty
-_08028F80: .4byte gBattlerTarget
-_08028F84: .4byte gBattleMons
-_08028F88: .4byte gBattlescriptCurrInstr
-_08028F8C: .4byte BattleScript_ObliviousPreventsAttraction
-_08028F90: .4byte gLastUsedAbility
-_08028F94:
- 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 _08028FE4
- ldrb r0, [r5]
- muls r0, r6
- ldr r4, _08029000 @ =gBattleMons
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0xF0
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- bne _08028FE4
- mov r0, r10
- mov r1, r9
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _08028FE4
- mov r0, r8
- adds r1, r7, 0
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _08029008
-_08028FE4:
- ldr r3, _08029004 @ =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 _0802902C
- .align 2, 0
-_08029000: .4byte gBattleMons
-_08029004: .4byte gBattlescriptCurrInstr
-_08029008:
- ldrb r0, [r5]
- adds r2, r0, 0
- muls r2, r6
- adds r2, r4
- ldr r1, _0802903C @ =gBitTable
- ldr r0, _08029040 @ =gBattlerAttacker
- 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, _08029044 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802902C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802903C: .4byte gBitTable
-_08029040: .4byte gBattlerAttacker
-_08029044: .4byte gBattlescriptCurrInstr
- thumb_func_end atk97_tryinfatuating
-
- thumb_func_start atk98_updatestatusicon
-atk98_updatestatusicon: @ 8029048
- push {r4-r7,lr}
- ldr r0, _080290B8 @ =gBattleControllerExecFlags
- ldr r1, [r0]
- cmp r1, 0
- beq _08029054
- b _080291C0
-_08029054:
- ldr r5, _080290BC @ =gBattlescriptCurrInstr
- ldr r2, [r5]
- ldrb r0, [r2, 0x1]
- cmp r0, 0xD
- bne _080290D4
- ldr r2, _080290C0 @ =gActiveBattler
- strb r1, [r2]
- ldr r0, _080290C4 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08029164
- ldr r7, _080290C8 @ =gBitTable
- adds r4, r2, 0
- ldr r5, _080290CC @ =gBattleMons
- adds r6, r5, 0
- adds r6, 0x50
-_08029074:
- ldr r0, _080290D0 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080290A2
- movs r0, 0x58
- muls r2, r0
- adds r0, r5, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r1, [r0]
- adds r2, r6
- ldr r2, [r2]
- movs r0, 0
- bl BtlController_EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
-_080290A2:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _080290C4 @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08029074
- b _08029164
- .align 2, 0
-_080290B8: .4byte gBattleControllerExecFlags
-_080290BC: .4byte gBattlescriptCurrInstr
-_080290C0: .4byte gActiveBattler
-_080290C4: .4byte gBattlersCount
-_080290C8: .4byte gBitTable
-_080290CC: .4byte gBattleMons
-_080290D0: .4byte gAbsentBattlerFlags
-_080290D4:
- cmp r0, 0x4
- bne _0802918C
- ldr r4, _08029170 @ =gActiveBattler
- ldr r5, _08029174 @ =gBattlerAttacker
- ldrb r0, [r5]
- strb r0, [r4]
- ldr r6, _08029178 @ =gAbsentBattlerFlags
- ldrb r1, [r6]
- ldr r7, _0802917C @ =gBitTable
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08029114
- ldr r3, _08029180 @ =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 BtlController_EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
-_08029114:
- ldr r0, _08029184 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08029164
- ldrb r0, [r5]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- 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 _08029164
- ldr r3, _08029180 @ =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 BtlController_EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
-_08029164:
- ldr r1, _08029188 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- b _080291C0
- .align 2, 0
-_08029170: .4byte gActiveBattler
-_08029174: .4byte gBattlerAttacker
-_08029178: .4byte gAbsentBattlerFlags
-_0802917C: .4byte gBitTable
-_08029180: .4byte gBattleMons
-_08029184: .4byte gBattleTypeFlags
-_08029188: .4byte gBattlescriptCurrInstr
-_0802918C:
- ldrb r0, [r2, 0x1]
- bl GetBattlerForBattleScript
- ldr r4, _080291C8 @ =gActiveBattler
- strb r0, [r4]
- ldr r3, _080291CC @ =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 BtlController_EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_080291C0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080291C8: .4byte gActiveBattler
-_080291CC: .4byte gBattleMons
- thumb_func_end atk98_updatestatusicon
-
- thumb_func_start atk99_setmist
-atk99_setmist: @ 80291D0
- push {r4-r6,lr}
- ldr r6, _08029200 @ =gSideTimers
- ldr r4, _08029204 @ =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerPosition
- 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, 0x4]
- cmp r0, 0
- beq _08029210
- ldr r2, _08029208 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0802920C @ =gBattleCommunication
- strb r5, [r0, 0x5]
- b _0802925E
- .align 2, 0
-_08029200: .4byte gSideTimers
-_08029204: .4byte gBattlerAttacker
-_08029208: .4byte gMoveResultFlags
-_0802920C: .4byte gBattleCommunication
-_08029210:
- ldrb r0, [r4]
- bl GetBattlerPosition
- 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, 0x4]
- ldrb r0, [r4]
- bl GetBattlerPosition
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r4]
- strb r1, [r0, 0x5]
- ldrb r0, [r4]
- bl GetBattlerPosition
- ldr r2, _0802926C @ =gSideStatuses
- 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, _08029270 @ =gBattleCommunication
- strb r3, [r0, 0x5]
-_0802925E:
- ldr r1, _08029274 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802926C: .4byte gSideStatuses
-_08029270: .4byte gBattleCommunication
-_08029274: .4byte gBattlescriptCurrInstr
- thumb_func_end atk99_setmist
-
- thumb_func_start atk9A_setfocusenergy
-atk9A_setfocusenergy: @ 8029278
- push {lr}
- ldr r1, _080292A8 @ =gBattleMons
- ldr r0, _080292AC @ =gBattlerAttacker
- 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 _080292B8
- ldr r2, _080292B0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _080292B4 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _080292C0
- .align 2, 0
-_080292A8: .4byte gBattleMons
-_080292AC: .4byte gBattlerAttacker
-_080292B0: .4byte gMoveResultFlags
-_080292B4: .4byte gBattleCommunication
-_080292B8:
- orrs r1, r3
- str r1, [r0]
- ldr r0, _080292CC @ =gBattleCommunication
- strb r2, [r0, 0x5]
-_080292C0:
- ldr r1, _080292D0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080292CC: .4byte gBattleCommunication
-_080292D0: .4byte gBattlescriptCurrInstr
- thumb_func_end atk9A_setfocusenergy
-
- thumb_func_start atk9B_transformdataexecution
-atk9B_transformdataexecution: @ 80292D4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r1, _0802932C @ =gChosenMove
- ldr r2, _08029330 @ =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _08029334 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- ldr r7, _08029338 @ =gBattleMons
- ldr r0, _0802933C @ =gBattlerTarget
- 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 _0802931A
- ldr r0, _08029340 @ =gStatuses3
- lsls r1, 2
- adds r1, r0
- ldr r2, [r1]
- ldr r0, _08029344 @ =0x000400c0
- ands r2, r0
- cmp r2, 0
- beq _08029350
-_0802931A:
- ldr r2, _08029348 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802934C @ =gBattleCommunication
- movs r0, 0x1
- b _08029464
- .align 2, 0
-_0802932C: .4byte gChosenMove
-_08029330: .4byte 0x0000ffff
-_08029334: .4byte gBattlescriptCurrInstr
-_08029338: .4byte gBattleMons
-_0802933C: .4byte gBattlerTarget
-_08029340: .4byte gStatuses3
-_08029344: .4byte 0x000400c0
-_08029348: .4byte gMoveResultFlags
-_0802934C: .4byte gBattleCommunication
-_08029350:
- ldr r3, _08029424 @ =gBattlerAttacker
- ldrb r0, [r3]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r5
- ldr r0, [r1]
- orrs r0, r4
- str r0, [r1]
- ldr r4, _08029428 @ =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, _0802942C @ =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, _08029430 @ =gActiveBattler
- mov r8, r0
-_080293E8:
- adds r0, r5, r4
- adds r1, r2, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x23
- bls _080293E8
- movs r4, 0
- ldr r7, _08029434 @ =gBattleMoves
- ldr r3, _08029438 @ =gUnknown_2023BF0
- adds r5, r3, 0
- adds r5, 0x18
-_08029400:
- 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 _0802943C
- adds r0, r4, r2
- adds r0, r5
- b _08029442
- .align 2, 0
-_08029424: .4byte gBattlerAttacker
-_08029428: .4byte gDisableStructs
-_0802942C: .4byte gBattleTextBuff1
-_08029430: .4byte gActiveBattler
-_08029434: .4byte gBattleMoves
-_08029438: .4byte gUnknown_2023BF0
-_0802943C:
- adds r0, r4, r2
- adds r0, r5
- movs r1, 0x5
-_08029442:
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x3
- ble _08029400
- ldrb r0, [r6]
- mov r1, r8
- strb r0, [r1]
- movs r0, 0
- movs r1, 0x2
- bl BtlController_EmitResetActionMoveSelection
- mov r2, r8
- ldrb r0, [r2]
- bl MarkBattlerForControllerExec
- ldr r1, _08029470 @ =gBattleCommunication
- movs r0, 0
-_08029464:
- strb r0, [r1, 0x5]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029470: .4byte gBattleCommunication
- thumb_func_end atk9B_transformdataexecution
-
- thumb_func_start atk9C_setsubstitute
-atk9C_setsubstitute: @ 8029474
- push {r4-r7,lr}
- ldr r7, _080294A4 @ =gBattleMons
- ldr r6, _080294A8 @ =gBattlerAttacker
- 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 _0802948E
- movs r2, 0x1
-_0802948E:
- ldrh r0, [r3, 0x28]
- cmp r0, r2
- bhi _080294B4
- ldr r1, _080294AC @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
- ldr r1, _080294B0 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08029508
- .align 2, 0
-_080294A4: .4byte gBattleMons
-_080294A8: .4byte gBattlerAttacker
-_080294AC: .4byte gBattleMoveDamage
-_080294B0: .4byte gBattleCommunication
-_080294B4:
- ldr r4, _08029518 @ =gBattleMoveDamage
- str r1, [r4]
- cmp r1, 0
- bne _080294C0
- movs r0, 0x1
- str r0, [r4]
-_080294C0:
- 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, _0802951C @ =0xffff1fff
- ands r0, r2
- str r0, [r1]
- ldr r2, _08029520 @ =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, _08029524 @ =gBattleCommunication
- strb r2, [r0, 0x5]
- ldr r2, _08029528 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 1
- orrs r0, r1
- str r0, [r2]
-_08029508:
- ldr r1, _0802952C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029518: .4byte gBattleMoveDamage
-_0802951C: .4byte 0xffff1fff
-_08029520: .4byte gDisableStructs
-_08029524: .4byte gBattleCommunication
-_08029528: .4byte gHitMarker
-_0802952C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk9C_setsubstitute
-
- thumb_func_start IsMoveUncopyableByMimic
-IsMoveUncopyableByMimic: @ 8029530
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r3, 0
- ldr r0, _08029570 @ =sMovesForbiddenToCopy
- ldrh r1, [r0]
- ldr r4, _08029574 @ =0x0000fffe
- adds r5, r0, 0
- cmp r1, r4
- beq _08029558
- cmp r1, r2
- beq _08029558
- adds r1, r5, 0
-_0802954A:
- adds r1, 0x2
- adds r3, 0x1
- ldrh r0, [r1]
- cmp r0, r4
- beq _08029558
- cmp r0, r2
- bne _0802954A
-_08029558:
- lsls r0, r3, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r0, _08029574 @ =0x0000fffe
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08029570: .4byte sMovesForbiddenToCopy
-_08029574: .4byte 0x0000fffe
- thumb_func_end IsMoveUncopyableByMimic
-
- thumb_func_start atk9D_mimicattackcopy
-atk9D_mimicattackcopy: @ 8029578
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _080295F0 @ =gChosenMove
- ldr r1, _080295F4 @ =0x0000ffff
- adds r7, r1, 0
- strh r7, [r0]
- ldr r5, _080295F8 @ =gLastMoves
- ldr r6, _080295FC @ =gBattlerTarget
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- bl IsMoveUncopyableByMimic
- lsls r0, 24
- cmp r0, 0
- bne _080295D2
- ldr r3, _08029600 @ =gBattleMons
- ldr r2, _08029604 @ =gBattlerAttacker
- 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 _080295D2
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- cmp r1, 0
- beq _080295D2
- cmp r1, r7
- bne _0802960C
-_080295D2:
- ldr r3, _08029608 @ =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 _08029744
- .align 2, 0
-_080295F0: .4byte gChosenMove
-_080295F4: .4byte 0x0000ffff
-_080295F8: .4byte gLastMoves
-_080295FC: .4byte gBattlerTarget
-_08029600: .4byte gBattleMons
-_08029604: .4byte gBattlerAttacker
-_08029608: .4byte gBattlescriptCurrInstr
-_0802960C:
- movs r2, 0
- mov r3, r12
- adds r3, 0xC
- adds r0, r4, r3
- ldrh r0, [r0]
- ldr r4, _0802969C @ =gBattlescriptCurrInstr
- mov r10, r4
- cmp r0, r1
- beq _08029646
- mov r8, r3
- adds r7, r5, 0
- adds r5, r6, 0
- mov r4, r9
- movs r3, 0x58
-_08029628:
- adds r2, 0x1
- cmp r2, 0x3
- bgt _08029646
- 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 _08029628
-_08029646:
- cmp r2, 0x4
- bne _08029728
- ldr r5, _080296A0 @ =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, _080296A4 @ =gLastMoves
- ldr r3, _080296A8 @ =gBattlerTarget
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r4, _080296AC @ =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 _080296B0
- 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 _080296C4
- .align 2, 0
-_0802969C: .4byte gBattlescriptCurrInstr
-_080296A0: .4byte gCurrMovePos
-_080296A4: .4byte gLastMoves
-_080296A8: .4byte gBattlerTarget
-_080296AC: .4byte gBattleMoves
-_080296B0:
- 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]
-_080296C4:
- ldr r1, _0802971C @ =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, _08029720 @ =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, _08029724 @ =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 _08029744
- .align 2, 0
-_0802971C: .4byte gBattleTextBuff1
-_08029720: .4byte gDisableStructs
-_08029724: .4byte gBitTable
-_08029728:
- 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]
-_08029744:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk9D_mimicattackcopy
-
- thumb_func_start atk9E_metronome
-atk9E_metronome: @ 8029754
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _080297D4 @ =gCurrentMove
- movs r6, 0xB1
- lsls r6, 1
- ldr r5, _080297D8 @ =sMovesForbiddenToCopy
- ldr r0, _080297DC @ =gBattlescriptCurrInstr
- mov r8, r0
-_08029766:
- bl Random
- ldr r2, _080297E0 @ =0x000001ff
- adds r1, r2, 0
- ands r0, r1
- adds r0, 0x1
- strh r0, [r7]
- cmp r0, r6
- bhi _08029766
- movs r0, 0x3
-_0802977A:
- subs r0, 0x1
- cmp r0, 0
- bge _0802977A
- ldr r4, _080297D4 @ =gCurrentMove
- ldrh r2, [r4]
- ldr r3, _080297E4 @ =0x0000ffff
- subs r0, r5, 0x2
-_08029788:
- adds r0, 0x2
- ldrh r1, [r0]
- cmp r1, r2
- beq _08029794
- cmp r1, r3
- bne _08029788
-_08029794:
- ldr r0, _080297E4 @ =0x0000ffff
- cmp r1, r0
- bne _08029766
- ldr r2, _080297E8 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _080297EC @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r3, _080297F0 @ =gBattleScriptsForMoveEffects
- ldr r2, _080297F4 @ =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 GetMoveTarget
- ldr r1, _080297F8 @ =gBattlerTarget
- strb r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080297D4: .4byte gCurrentMove
-_080297D8: .4byte sMovesForbiddenToCopy
-_080297DC: .4byte gBattlescriptCurrInstr
-_080297E0: .4byte 0x000001ff
-_080297E4: .4byte 0x0000ffff
-_080297E8: .4byte gHitMarker
-_080297EC: .4byte 0xfffffbff
-_080297F0: .4byte gBattleScriptsForMoveEffects
-_080297F4: .4byte gBattleMoves
-_080297F8: .4byte gBattlerTarget
- thumb_func_end atk9E_metronome
-
- thumb_func_start atk9F_dmgtolevel
-atk9F_dmgtolevel: @ 80297FC
- ldr r3, _0802981C @ =gBattleMoveDamage
- ldr r2, _08029820 @ =gBattleMons
- ldr r0, _08029824 @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r0, [r0]
- str r0, [r3]
- ldr r1, _08029828 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802981C: .4byte gBattleMoveDamage
-_08029820: .4byte gBattleMons
-_08029824: .4byte gBattlerAttacker
-_08029828: .4byte gBattlescriptCurrInstr
- thumb_func_end atk9F_dmgtolevel
-
- thumb_func_start atkA0_psywavedamageeffect
-atkA0_psywavedamageeffect: @ 802982C
- push {r4,lr}
- movs r4, 0xF
-_08029830:
- bl Random
- adds r3, r4, 0
- ands r3, r0
- cmp r3, 0xA
- bgt _08029830
- lsls r0, r3, 2
- adds r0, r3
- lsls r3, r0, 1
- ldr r4, _08029870 @ =gBattleMoveDamage
- ldr r2, _08029874 @ =gBattleMons
- ldr r0, _08029878 @ =gBattlerAttacker
- 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, _0802987C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08029870: .4byte gBattleMoveDamage
-_08029874: .4byte gBattleMons
-_08029878: .4byte gBattlerAttacker
-_0802987C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA0_psywavedamageeffect
-
- thumb_func_start atkA1_counterdamagecalculator
-atkA1_counterdamagecalculator: @ 8029880
- push {r4-r6,lr}
- ldr r4, _080298F0 @ =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _080298F4 @ =gProtectStructs
- ldrb r0, [r4]
- lsls r0, 4
- adds r0, r5
- ldrb r0, [r0, 0xC]
- bl GetBattlerSide
- 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 _08029934
- cmp r6, r2
- beq _08029934
- ldr r6, _080298F8 @ =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 _08029934
- ldr r1, _080298FC @ =gBattleMoveDamage
- lsls r0, r3, 1
- str r0, [r1]
- ldr r1, _08029900 @ =gSideTimers
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- beq _08029908
- ldrb r1, [r1, 0x9]
- adds r0, r1, 0
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08029908
- ldr r0, _08029904 @ =gBattlerTarget
- strb r1, [r0]
- b _08029918
- .align 2, 0
-_080298F0: .4byte gBattlerAttacker
-_080298F4: .4byte gProtectStructs
-_080298F8: .4byte gBattleMons
-_080298FC: .4byte gBattleMoveDamage
-_08029900: .4byte gSideTimers
-_08029904: .4byte gBattlerTarget
-_08029908:
- ldr r2, _08029924 @ =gBattlerTarget
- ldr r1, _08029928 @ =gProtectStructs
- ldr r0, _0802992C @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0xC]
- strb r0, [r2]
-_08029918:
- ldr r1, _08029930 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029964
- .align 2, 0
-_08029924: .4byte gBattlerTarget
-_08029928: .4byte gProtectStructs
-_0802992C: .4byte gBattlerAttacker
-_08029930: .4byte gBattlescriptCurrInstr
-_08029934:
- ldr r2, _0802996C @ =gSpecialStatuses
- ldr r0, _08029970 @ =gBattlerAttacker
- 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, _08029974 @ =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]
-_08029964:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802996C: .4byte gSpecialStatuses
-_08029970: .4byte gBattlerAttacker
-_08029974: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA1_counterdamagecalculator
-
- thumb_func_start atkA2_mirrorcoatdamagecalculator
-atkA2_mirrorcoatdamagecalculator: @ 8029978
- push {r4-r6,lr}
- ldr r4, _080299E8 @ =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _080299EC @ =gProtectStructs
- ldrb r0, [r4]
- lsls r0, 4
- adds r0, r5
- ldrb r0, [r0, 0xD]
- bl GetBattlerSide
- 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 _08029A2C
- cmp r6, r2
- beq _08029A2C
- ldr r6, _080299F0 @ =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 _08029A2C
- ldr r1, _080299F4 @ =gBattleMoveDamage
- lsls r0, r3, 1
- str r0, [r1]
- ldr r1, _080299F8 @ =gSideTimers
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- beq _08029A00
- ldrb r1, [r1, 0x9]
- adds r0, r1, 0
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08029A00
- ldr r0, _080299FC @ =gBattlerTarget
- strb r1, [r0]
- b _08029A10
- .align 2, 0
-_080299E8: .4byte gBattlerAttacker
-_080299EC: .4byte gProtectStructs
-_080299F0: .4byte gBattleMons
-_080299F4: .4byte gBattleMoveDamage
-_080299F8: .4byte gSideTimers
-_080299FC: .4byte gBattlerTarget
-_08029A00:
- ldr r2, _08029A1C @ =gBattlerTarget
- ldr r1, _08029A20 @ =gProtectStructs
- ldr r0, _08029A24 @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0xD]
- strb r0, [r2]
-_08029A10:
- ldr r1, _08029A28 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029A5C
- .align 2, 0
-_08029A1C: .4byte gBattlerTarget
-_08029A20: .4byte gProtectStructs
-_08029A24: .4byte gBattlerAttacker
-_08029A28: .4byte gBattlescriptCurrInstr
-_08029A2C:
- ldr r2, _08029A64 @ =gSpecialStatuses
- ldr r0, _08029A68 @ =gBattlerAttacker
- 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, _08029A6C @ =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]
-_08029A5C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08029A64: .4byte gSpecialStatuses
-_08029A68: .4byte gBattlerAttacker
-_08029A6C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA2_mirrorcoatdamagecalculator
-
- thumb_func_start atkA3_disablelastusedattack
-atkA3_disablelastusedattack: @ 8029A70
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r4, 0
- ldr r2, _08029B70 @ =gBattleMons
- ldr r3, _08029B74 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r7, r2, 0
- adds r7, 0xC
- adds r0, r7
- ldr r5, _08029B78 @ =gLastMoves
- lsls r1, 1
- adds r1, r5
- ldrh r0, [r0]
- mov r9, r2
- adds r6, r3, 0
- ldr r2, _08029B7C @ =gDisableStructs
- mov r8, r2
- ldrh r1, [r1]
- cmp r0, r1
- beq _08029AC4
- mov r12, r6
- movs r3, 0x58
-_08029AA4:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08029AC4
- 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 _08029AA4
-_08029AC4:
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r8
- ldrh r0, [r0, 0x4]
- cmp r0, 0
- bne _08029B88
- cmp r4, 0x4
- beq _08029B88
- 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 _08029B88
- ldr r1, _08029B80 @ =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, _08029B84 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029BA2
- .align 2, 0
-_08029B70: .4byte gBattleMons
-_08029B74: .4byte gBattlerTarget
-_08029B78: .4byte gLastMoves
-_08029B7C: .4byte gDisableStructs
-_08029B80: .4byte gBattleTextBuff1
-_08029B84: .4byte gBattlescriptCurrInstr
-_08029B88:
- ldr r3, _08029BB0 @ =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]
-_08029BA2:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029BB0: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA3_disablelastusedattack
-
- thumb_func_start atkA4_trysetencore
-atkA4_trysetencore: @ 8029BB4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r5, 0
- ldr r3, _08029CA8 @ =gBattleMons
- ldr r4, _08029CAC @ =gBattlerTarget
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r6, r3, 0
- adds r6, 0xC
- adds r0, r6
- ldr r2, _08029CB0 @ =gLastMoves
- lsls r1, 1
- adds r1, r2
- ldrh r0, [r0]
- mov r10, r3
- mov r8, r2
- ldr r2, _08029CB4 @ =gDisableStructs
- mov r9, r2
- ldrh r1, [r1]
- cmp r0, r1
- beq _08029C0E
- mov r12, r4
- adds r7, r6, 0
- mov r6, r8
- movs r3, 0x58
-_08029BEE:
- adds r5, 0x1
- cmp r5, 0x3
- bgt _08029C0E
- 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 _08029BEE
-_08029C0E:
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r2, [r0]
- cmp r2, 0xA5
- beq _08029C22
- cmp r2, 0xE3
- beq _08029C22
- cmp r2, 0x77
- bne _08029C24
-_08029C22:
- movs r5, 0x4
-_08029C24:
- 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 _08029CBC
- cmp r5, 0x4
- beq _08029CBC
- 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 _08029CBC
- 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, _08029CB8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029CD6
- .align 2, 0
-_08029CA8: .4byte gBattleMons
-_08029CAC: .4byte gBattlerTarget
-_08029CB0: .4byte gLastMoves
-_08029CB4: .4byte gDisableStructs
-_08029CB8: .4byte gBattlescriptCurrInstr
-_08029CBC:
- ldr r3, _08029CE4 @ =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]
-_08029CD6:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029CE4: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA4_trysetencore
-
- thumb_func_start atkA5_painsplitdmgcalc
-atkA5_painsplitdmgcalc: @ 8029CE8
- push {r4-r7,lr}
- ldr r6, _08029D68 @ =gBattleMons
- ldr r0, _08029D6C @ =gBattlerTarget
- mov r12, r0
- ldrb r0, [r0]
- movs r7, 0x58
- adds r2, r0, 0
- muls r2, r7
- adds r0, r6, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- bne _08029D88
- ldr r5, _08029D70 @ =gBattlerAttacker
- ldrb r0, [r5]
- muls r0, r7
- adds r0, r6
- ldrh r3, [r0, 0x28]
- adds r0, r2, r6
- ldrh r1, [r0, 0x28]
- adds r3, r1
- asrs r3, 1
- ldr r4, _08029D74 @ =gBattleMoveDamage
- subs r1, r3
- str r1, [r4]
- ldr r2, _08029D78 @ =gBattleScripting
- strb r1, [r2]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- asrs r0, 8
- strb r0, [r2, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- asrs r0, 16
- strb r0, [r2, 0x2]
- lsrs r1, 24
- strb r1, [r2, 0x3]
- ldrb r0, [r5]
- muls r0, r7
- adds r0, r6
- ldrh r0, [r0, 0x28]
- subs r0, r3
- str r0, [r4]
- ldr r2, _08029D7C @ =gSpecialStatuses
- mov r0, r12
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x4
- adds r0, r2
- ldr r1, _08029D80 @ =0x0000ffff
- str r1, [r0]
- ldr r1, _08029D84 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029DA2
- .align 2, 0
-_08029D68: .4byte gBattleMons
-_08029D6C: .4byte gBattlerTarget
-_08029D70: .4byte gBattlerAttacker
-_08029D74: .4byte gBattleMoveDamage
-_08029D78: .4byte gBattleScripting
-_08029D7C: .4byte gSpecialStatuses
-_08029D80: .4byte 0x0000ffff
-_08029D84: .4byte gBattlescriptCurrInstr
-_08029D88:
- ldr r3, _08029DA8 @ =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]
-_08029DA2:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029DA8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA5_painsplitdmgcalc
-
- thumb_func_start atkA6_settypetorandomresistance
-atkA6_settypetorandomresistance: @ 8029DAC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r1, _08029E14 @ =gLastLandedMoves
- ldr r4, _08029E18 @ =gBattlerAttacker
- ldrb r0, [r4]
- lsls r0, 1
- adds r2, r0, r1
- ldrh r1, [r2]
- cmp r1, 0
- beq _08029DF6
- ldr r0, _08029E1C @ =0x0000ffff
- cmp r1, r0
- beq _08029DF6
- ldrh r0, [r2]
- bl IsTwoTurnsMove
- lsls r0, 24
- cmp r0, 0
- beq _08029E94
- ldr r1, _08029E20 @ =gBattleMons
- ldr r2, _08029E24 @ =gLastHitBy
- ldrb r0, [r4]
- adds r0, r2
- 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 _08029E94
-_08029DF6:
- ldr r3, _08029E28 @ =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 _08029F80
- .align 2, 0
-_08029E14: .4byte gLastLandedMoves
-_08029E18: .4byte gBattlerAttacker
-_08029E1C: .4byte 0x0000ffff
-_08029E20: .4byte gBattleMons
-_08029E24: .4byte gLastHitBy
-_08029E28: .4byte gBattlescriptCurrInstr
-_08029E2C:
- 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, _08029E50 @ =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, _08029E54 @ =gBattlescriptCurrInstr
- b _08029E82
- .align 2, 0
-_08029E50: .4byte gBattleTextBuff1
-_08029E54: .4byte gBattlescriptCurrInstr
-_08029E58:
- 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, _08029E8C @ =gBattleMons
- adds r0, r7
- adds r0, 0x22
- strb r2, [r0]
- ldr r1, _08029E90 @ =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
-_08029E82:
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029F80
- .align 2, 0
-_08029E8C: .4byte gBattleMons
-_08029E90: .4byte gBattleTextBuff1
-_08029E94:
- movs r4, 0
- mov r8, r4
- movs r7, 0x7F
- mov r9, r7
-_08029E9C:
- bl Random
- mov r4, r9
- ands r4, r0
- cmp r4, 0x70
- bhi _08029E9C
- lsls r0, r4, 1
- adds r4, r0, r4
- ldr r6, _08029F90 @ =gTypeEffectiveness
- adds r3, r4, r6
- ldr r1, _08029F94 @ =gLastHitByType
- ldr r2, _08029F98 @ =gBattlerAttacker
- ldrb r5, [r2]
- lsls r0, r5, 1
- adds r0, r1
- ldrb r1, [r3]
- mov r10, r2
- ldrh r0, [r0]
- cmp r1, r0
- bne _08029EF8
- adds r0, r4, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _08029EF8
- ldr r7, _08029F9C @ =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 _08029EF8
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- bne _08029E2C
-_08029EF8:
- movs r7, 0x1
- add r8, r7
- ldr r0, _08029FA0 @ =0x000003e7
- cmp r8, r0
- ble _08029E9C
- movs r0, 0
- mov r8, r0
- ldr r1, _08029FA4 @ =gBattlescriptCurrInstr
- mov r12, r1
- ldr r3, _08029F90 @ =gTypeEffectiveness
- adds r0, r4, 0x1
- adds r0, r3
- mov r9, r0
- adds r5, r3, 0
-_08029F14:
- ldrb r1, [r5]
- cmp r1, 0xFF
- bgt _08029F1E
- cmp r1, 0xFE
- bge _08029F58
-_08029F1E:
- mov r4, r10
- ldrb r2, [r4]
- lsls r0, r2, 1
- ldr r7, _08029F94 @ =gLastHitByType
- adds r0, r7
- ldrh r0, [r0]
- cmp r1, r0
- bne _08029F58
- ldrb r0, [r5, 0x2]
- cmp r0, 0x5
- bhi _08029F58
- movs r6, 0x58
- adds r0, r2, 0
- muls r0, r6
- ldr r1, _08029F9C @ =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 _08029F58
- adds r0, r2, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- beq _08029F58
- b _08029E58
-_08029F58:
- adds r5, 0x3
- movs r0, 0x3
- add r8, r0
- ldr r0, _08029FA8 @ =0x0000014f
- cmp r8, r0
- bls _08029F14
- 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]
-_08029F80:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029F90: .4byte gTypeEffectiveness
-_08029F94: .4byte gLastHitByType
-_08029F98: .4byte gBattlerAttacker
-_08029F9C: .4byte gBattleMons
-_08029FA0: .4byte 0x000003e7
-_08029FA4: .4byte gBattlescriptCurrInstr
-_08029FA8: .4byte 0x0000014f
- thumb_func_end atkA6_settypetorandomresistance
-
- thumb_func_start atkA7_setalwayshitflag
-atkA7_setalwayshitflag: @ 8029FAC
- push {r4,lr}
- ldr r4, _08029FF0 @ =gStatuses3
- ldr r3, _08029FF4 @ =gBattlerTarget
- 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, _08029FF8 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _08029FFC @ =gBattlerAttacker
- ldrb r1, [r1]
- strb r1, [r0, 0x15]
- ldr r1, _0802A000 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08029FF0: .4byte gStatuses3
-_08029FF4: .4byte gBattlerTarget
-_08029FF8: .4byte gDisableStructs
-_08029FFC: .4byte gBattlerAttacker
-_0802A000: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA7_setalwayshitflag
-
- thumb_func_start atkA8_copymovepermanently
-atkA8_copymovepermanently: @ 802A004
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r0, _0802A164 @ =gChosenMove
- ldr r1, _0802A168 @ =0x0000ffff
- adds r5, r1, 0
- strh r5, [r0]
- ldr r3, _0802A16C @ =gBattleMons
- ldr r2, _0802A170 @ =gBattlerAttacker
- 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 _0802A03C
- b _0802A190
-_0802A03C:
- ldr r0, _0802A174 @ =gLastPrintedMoves
- ldr r2, _0802A178 @ =gBattlerTarget
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldrh r1, [r1]
- mov r9, r0
- mov r8, r2
- cmp r1, 0xA5
- bne _0802A052
- b _0802A190
-_0802A052:
- cmp r1, 0
- bne _0802A058
- b _0802A190
-_0802A058:
- cmp r1, r5
- bne _0802A05E
- b _0802A190
-_0802A05E:
- cmp r1, 0xA6
- bne _0802A064
- b _0802A190
-_0802A064:
- movs r7, 0
- mov r5, r9
- mov r0, r12
- adds r0, 0xC
- adds r1, r4, r0
- mov r3, r8
-_0802A070:
- ldrh r2, [r1]
- cmp r2, 0xA6
- beq _0802A082
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r2, r0
- beq _0802A08A
-_0802A082:
- adds r1, 0x2
- adds r7, 0x1
- cmp r7, 0x3
- ble _0802A070
-_0802A08A:
- cmp r7, 0x4
- beq _0802A090
- b _0802A190
-_0802A090:
- ldr r4, _0802A17C @ =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, _0802A180 @ =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, _0802A184 @ =gActiveBattler
- 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
-_0802A0F2:
- 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 _0802A0F2
- 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 BtlController_EmitSetMonData
- ldr r0, _0802A184 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBattlerForControllerExec
- ldr r1, _0802A188 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldr r3, _0802A174 @ =gLastPrintedMoves
- ldr r2, _0802A178 @ =gBattlerTarget
- 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, _0802A18C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802A1AA
- .align 2, 0
-_0802A164: .4byte gChosenMove
-_0802A168: .4byte 0x0000ffff
-_0802A16C: .4byte gBattleMons
-_0802A170: .4byte gBattlerAttacker
-_0802A174: .4byte gLastPrintedMoves
-_0802A178: .4byte gBattlerTarget
-_0802A17C: .4byte gCurrMovePos
-_0802A180: .4byte gBattleMoves
-_0802A184: .4byte gActiveBattler
-_0802A188: .4byte gBattleTextBuff1
-_0802A18C: .4byte gBattlescriptCurrInstr
-_0802A190:
- ldr r3, _0802A1BC @ =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]
-_0802A1AA:
- 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
-_0802A1BC: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA8_copymovepermanently
-
- thumb_func_start IsTwoTurnsMove
-IsTwoTurnsMove: @ 802A1C0
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _0802A1F0 @ =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1]
- cmp r0, 0x91
- beq _0802A1EA
- cmp r0, 0x27
- beq _0802A1EA
- cmp r0, 0x4B
- beq _0802A1EA
- cmp r0, 0x97
- beq _0802A1EA
- cmp r0, 0x9B
- beq _0802A1EA
- cmp r0, 0x1A
- bne _0802A1F4
-_0802A1EA:
- movs r0, 0x1
- b _0802A1F6
- .align 2, 0
-_0802A1F0: .4byte gBattleMoves
-_0802A1F4:
- movs r0, 0
-_0802A1F6:
- pop {r1}
- bx r1
- thumb_func_end IsTwoTurnsMove
-
- thumb_func_start IsInvalidForSleepTalkOrAssist
-IsInvalidForSleepTalkOrAssist: @ 802A1FC
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _0802A21A
- cmp r1, 0xD6
- beq _0802A21A
- movs r0, 0x89
- lsls r0, 1
- cmp r1, r0
- beq _0802A21A
- cmp r1, 0x77
- beq _0802A21A
- cmp r1, 0x76
- bne _0802A21E
-_0802A21A:
- movs r0, 0x1
- b _0802A220
-_0802A21E:
- movs r0, 0
-_0802A220:
- pop {r1}
- bx r1
- thumb_func_end IsInvalidForSleepTalkOrAssist
-
- thumb_func_start AttacksThisTurn
-AttacksThisTurn: @ 802A224
- push {lr}
- lsls r1, 16
- lsrs r2, r1, 16
- ldr r1, _0802A27C @ =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 _0802A248
- ldr r0, _0802A280 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- bne _0802A288
-_0802A248:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, 0x91
- beq _0802A26A
- cmp r0, 0x27
- beq _0802A26A
- cmp r0, 0x4B
- beq _0802A26A
- cmp r0, 0x97
- beq _0802A26A
- cmp r0, 0x9B
- beq _0802A26A
- cmp r0, 0x1A
- bne _0802A288
-_0802A26A:
- ldr r0, _0802A284 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 20
- ands r0, r1
- cmp r0, 0
- beq _0802A288
- movs r0, 0x1
- b _0802A28A
- .align 2, 0
-_0802A27C: .4byte gBattleMoves
-_0802A280: .4byte gBattleWeather
-_0802A284: .4byte gHitMarker
-_0802A288:
- movs r0, 0x2
-_0802A28A:
- pop {r1}
- bx r1
- thumb_func_end AttacksThisTurn
-
- thumb_func_start atkA9_trychoosesleeptalkmove
-atkA9_trychoosesleeptalkmove: @ 802A290
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- movs r5, 0
- ldr r0, _0802A320 @ =gBattlerAttacker
- mov r9, r0
- movs r1, 0x58
- mov r8, r1
- ldr r7, _0802A324 @ =gUnknown_2023BF0
- movs r0, 0x84
- lsls r0, 1
- mov r10, r0
-_0802A2AE:
- 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 IsInvalidForSleepTalkOrAssist
- lsls r0, 24
- cmp r0, 0
- bne _0802A2EE
- 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 _0802A2EE
- cmp r1, 0xFD
- beq _0802A2EE
- adds r0, r1, 0
- bl IsTwoTurnsMove
- lsls r0, 24
- cmp r0, 0
- beq _0802A2FC
-_0802A2EE:
- ldr r1, _0802A328 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r1
- ldr r0, [r0]
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0802A2FC:
- adds r5, 0x1
- cmp r5, 0x3
- ble _0802A2AE
- ldr r0, _0802A320 @ =gBattlerAttacker
- ldrb r0, [r0]
- adds r1, r6, 0
- movs r2, 0xFD
- bl CheckMoveLimitations
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xF
- bne _0802A330
- ldr r1, _0802A32C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802A394
- .align 2, 0
-_0802A320: .4byte gBattlerAttacker
-_0802A324: .4byte gUnknown_2023BF0
-_0802A328: .4byte gBitTable
-_0802A32C: .4byte gBattlescriptCurrInstr
-_0802A330:
- movs r7, 0x3
- ldr r4, _0802A3A4 @ =gBitTable
-_0802A334:
- 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 _0802A334
- ldr r4, _0802A3A8 @ =gCalledMove
- ldr r2, _0802A3AC @ =gBattleMons
- lsls r1, r5, 1
- ldr r0, _0802A3B0 @ =gBattlerAttacker
- 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, _0802A3B4 @ =gCurrMovePos
- strb r5, [r0]
- ldr r2, _0802A3B8 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0802A3BC @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldrh r0, [r4]
- movs r1, 0
- bl GetMoveTarget
- ldr r1, _0802A3C0 @ =gBattlerTarget
- strb r0, [r1]
- ldr r3, _0802A3C4 @ =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]
-_0802A394:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A3A4: .4byte gBitTable
-_0802A3A8: .4byte gCalledMove
-_0802A3AC: .4byte gBattleMons
-_0802A3B0: .4byte gBattlerAttacker
-_0802A3B4: .4byte gCurrMovePos
-_0802A3B8: .4byte gHitMarker
-_0802A3BC: .4byte 0xfffffbff
-_0802A3C0: .4byte gBattlerTarget
-_0802A3C4: .4byte gBattlescriptCurrInstr
- thumb_func_end atkA9_trychoosesleeptalkmove
-
- thumb_func_start atkAA_setdestinybond
-atkAA_setdestinybond: @ 802A3C8
- ldr r1, _0802A3EC @ =gBattleMons
- ldr r0, _0802A3F0 @ =gBattlerAttacker
- 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, _0802A3F4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802A3EC: .4byte gBattleMons
-_0802A3F0: .4byte gBattlerAttacker
-_0802A3F4: .4byte gBattlescriptCurrInstr
- thumb_func_end atkAA_setdestinybond
-
- thumb_func_start TrySetDestinyBondToHappen
-TrySetDestinyBondToHappen: @ 802A3F8
- push {r4,r5,lr}
- ldr r0, _0802A448 @ =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _0802A44C @ =gBattlerTarget
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, _0802A450 @ =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 _0802A442
- cmp r5, r3
- beq _0802A442
- ldr r2, _0802A454 @ =gHitMarker
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 17
- ands r0, r1
- cmp r0, 0
- bne _0802A442
- movs r0, 0x40
- orrs r1, r0
- str r1, [r2]
-_0802A442:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A448: .4byte gBattlerAttacker
-_0802A44C: .4byte gBattlerTarget
-_0802A450: .4byte gBattleMons
-_0802A454: .4byte gHitMarker
- thumb_func_end TrySetDestinyBondToHappen
-
- thumb_func_start atkAB_trysetdestinybondtohappen
-atkAB_trysetdestinybondtohappen: @ 802A458
- push {lr}
- bl TrySetDestinyBondToHappen
- ldr r1, _0802A46C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802A46C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkAB_trysetdestinybondtohappen
-
- thumb_func_start atkAC_remaininghptopower
-atkAC_remaininghptopower: @ 802A470
- push {lr}
- ldr r2, _0802A4C4 @ =gBattleMons
- ldr r0, _0802A4C8 @ =gBattlerAttacker
- 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, _0802A4CC @ =sFlailHpScaleToPowerTable
- ldrb r2, [r0]
- cmp r1, r2
- ble _0802A4AA
- adds r2, r0, 0
-_0802A49C:
- adds r3, 0x2
- cmp r3, 0xB
- bgt _0802A4AA
- adds r0, r3, r2
- ldrb r0, [r0]
- cmp r1, r0
- bgt _0802A49C
-_0802A4AA:
- ldr r2, _0802A4D0 @ =gDynamicBasePower
- ldr r1, _0802A4CC @ =sFlailHpScaleToPowerTable
- adds r0, r3, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strh r0, [r2]
- ldr r1, _0802A4D4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802A4C4: .4byte gBattleMons
-_0802A4C8: .4byte gBattlerAttacker
-_0802A4CC: .4byte sFlailHpScaleToPowerTable
-_0802A4D0: .4byte gDynamicBasePower
-_0802A4D4: .4byte gBattlescriptCurrInstr
- thumb_func_end atkAC_remaininghptopower
-
- thumb_func_start atkAD_tryspiteppreduce
-atkAD_tryspiteppreduce: @ 802A4D8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r4, _0802A658 @ =gLastMoves
- ldr r1, _0802A65C @ =gBattlerTarget
- ldrb r3, [r1]
- lsls r0, r3, 1
- adds r0, r4
- ldrh r2, [r0]
- mov r8, r1
- cmp r2, 0
- bne _0802A4F8
- b _0802A680
-_0802A4F8:
- ldr r0, _0802A660 @ =0x0000ffff
- cmp r2, r0
- bne _0802A500
- b _0802A680
-_0802A500:
- movs r7, 0
- ldr r0, _0802A664 @ =gBattleMons
- movs r1, 0x58
- muls r1, r3
- adds r3, r0, 0
- adds r3, 0xC
- adds r1, r3
- ldrh r1, [r1]
- cmp r2, r1
- beq _0802A538
- adds r6, r4, 0
- mov r5, r8
- adds r4, r3, 0
- movs r3, 0x58
-_0802A51C:
- adds r7, 0x1
- cmp r7, 0x3
- bgt _0802A538
- 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 _0802A51C
-_0802A538:
- cmp r7, 0x4
- bne _0802A53E
- b _0802A680
-_0802A53E:
- 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, _0802A664 @ =gBattleMons
- adds r1, 0x24
- mov r10, r1
- add r0, r10
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _0802A55E
- b _0802A680
-_0802A55E:
- 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 _0802A57C
- adds r6, r0, 0
-_0802A57C:
- ldr r1, _0802A668 @ =gBattleTextBuff1
- movs r5, 0xFD
- strb r5, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldr r2, _0802A658 @ =gLastMoves
- 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, _0802A66C @ =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, _0802A670 @ =gActiveBattler
- mov r3, r8
- ldrb r0, [r3]
- strb r0, [r4]
- ldr r1, _0802A674 @ =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, _0802A678 @ =gBitTable
- lsls r0, r7, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802A630
- mov r2, r9
- muls r2, r3
- ldr r0, _0802A664 @ =gBattleMons
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _0802A630
- 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 BtlController_EmitSetMonData
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
-_0802A630:
- ldr r1, _0802A67C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- ldr r1, _0802A664 @ =gBattleMons
- ldr r0, _0802A65C @ =gBattlerTarget
- 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 _0802A69A
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- b _0802A69A
- .align 2, 0
-_0802A658: .4byte gLastMoves
-_0802A65C: .4byte gBattlerTarget
-_0802A660: .4byte 0x0000ffff
-_0802A664: .4byte gBattleMons
-_0802A668: .4byte gBattleTextBuff1
-_0802A66C: .4byte gBattleTextBuff2
-_0802A670: .4byte gActiveBattler
-_0802A674: .4byte gDisableStructs
-_0802A678: .4byte gBitTable
-_0802A67C: .4byte gBattlescriptCurrInstr
-_0802A680:
- ldr r3, _0802A6AC @ =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]
-_0802A69A:
- 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
-_0802A6AC: .4byte gBattlescriptCurrInstr
- thumb_func_end atkAD_tryspiteppreduce
-
- thumb_func_start atkAE_healpartystatus
-atkAE_healpartystatus: @ 802A6B0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r4, 0
- str r4, [sp, 0x4]
- mov r8, r4
- ldr r0, _0802A720 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xD7
- beq _0802A6CC
- b _0802A8B6
-_0802A6CC:
- ldr r6, _0802A724 @ =gBattleCommunication
- mov r0, r8
- strb r0, [r6, 0x5]
- ldr r5, _0802A728 @ =gBattlerAttacker
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _0802A72C @ =gEnemyParty
- mov r10, r1
- cmp r0, 0
- bne _0802A6E8
- ldr r2, _0802A730 @ =gPlayerParty
- mov r10, r2
-_0802A6E8:
- ldr r4, _0802A734 @ =gBattleMons
- ldrb r3, [r5]
- movs r7, 0x58
- adds r2, r3, 0
- muls r2, r7
- adds r0, r2, r4
- adds r1, r0, 0
- adds r1, 0x20
- ldrb r0, [r1]
- cmp r0, 0x2B
- beq _0802A73C
- adds r0, r4, 0
- adds r0, 0x4C
- adds r0, r2, r0
- mov r1, r8
- str r1, [r0]
- ldrb r0, [r5]
- adds r2, r0, 0
- muls r2, r7
- adds r0, r4, 0
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _0802A738 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- b _0802A74C
- .align 2, 0
-_0802A720: .4byte gCurrentMove
-_0802A724: .4byte gBattleCommunication
-_0802A728: .4byte gBattlerAttacker
-_0802A72C: .4byte gEnemyParty
-_0802A730: .4byte gPlayerParty
-_0802A734: .4byte gBattleMons
-_0802A738: .4byte 0xf7ffffff
-_0802A73C:
- ldrb r1, [r1]
- adds r0, r3, 0
- bl RecordAbilityBattle
- ldrb r0, [r6, 0x5]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r6, 0x5]
-_0802A74C:
- ldr r7, _0802A7C0 @ =gActiveBattler
- ldr r0, _0802A7C4 @ =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerPosition
- movs r2, 0x2
- mov r9, r2
- mov r1, r9
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r1, _0802A7C8 @ =gBattleScripting
- strb r0, [r1, 0x17]
- strb r0, [r7]
- ldr r0, _0802A7CC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802A7F2
- ldr r0, _0802A7D0 @ =gAbsentBattlerFlags
- ldrb r2, [r0]
- ldr r1, _0802A7D4 @ =gBitTable
- ldrb r3, [r7]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- bne _0802A7F2
- ldr r5, _0802A7D8 @ =gBattleMons
- movs r6, 0x58
- adds r4, r3, 0
- muls r4, r6
- adds r0, r4, r5
- adds r1, r0, 0
- adds r1, 0x20
- ldrb r0, [r1]
- cmp r0, 0x2B
- beq _0802A7E0
- adds r0, r5, 0
- adds r0, 0x4C
- adds r0, r4, r0
- str r2, [r0]
- ldrb r0, [r7]
- adds r2, r0, 0
- muls r2, r6
- adds r0, r5, 0
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _0802A7DC @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- b _0802A7F2
- .align 2, 0
-_0802A7C0: .4byte gActiveBattler
-_0802A7C4: .4byte gBattlerAttacker
-_0802A7C8: .4byte gBattleScripting
-_0802A7CC: .4byte gBattleTypeFlags
-_0802A7D0: .4byte gAbsentBattlerFlags
-_0802A7D4: .4byte gBitTable
-_0802A7D8: .4byte gBattleMons
-_0802A7DC: .4byte 0xf7ffffff
-_0802A7E0:
- ldrb r1, [r1]
- adds r0, r3, 0
- bl RecordAbilityBattle
- ldr r1, _0802A838 @ =gBattleCommunication
- ldrb r0, [r1, 0x5]
- mov r2, r9
- orrs r0, r2
- strb r0, [r1, 0x5]
-_0802A7F2:
- movs r6, 0
- ldr r7, _0802A83C @ =gBattleMons
-_0802A7F6:
- movs r0, 0x64
- adds r4, r6, 0
- muls r4, r0
- add r4, r10
- 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 _0802A8AE
- movs r0, 0xCE
- lsls r0, 1
- cmp r5, r0
- beq _0802A8AE
- ldr r2, _0802A840 @ =gBattlerPartyIndexes
- ldr r0, _0802A844 @ =gBattlerAttacker
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r6
- bne _0802A848
- movs r0, 0x58
- muls r0, r1
- b _0802A878
- .align 2, 0
-_0802A838: .4byte gBattleCommunication
-_0802A83C: .4byte gBattleMons
-_0802A840: .4byte gBattlerPartyIndexes
-_0802A844: .4byte gBattlerAttacker
-_0802A848:
- ldr r0, _0802A880 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802A890
- ldr r0, _0802A884 @ =gActiveBattler
- ldrb r3, [r0]
- lsls r0, r3, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r6
- bne _0802A890
- ldr r0, _0802A888 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0802A88C @ =gBitTable
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802A890
- movs r0, 0x58
- muls r0, r3
-_0802A878:
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- b _0802A89C
- .align 2, 0
-_0802A880: .4byte gBattleTypeFlags
-_0802A884: .4byte gActiveBattler
-_0802A888: .4byte gAbsentBattlerFlags
-_0802A88C: .4byte gBitTable
-_0802A890:
- adds r0, r5, 0
- adds r1, r4, 0
- bl GetAbilityBySpecies
- lsls r0, 24
- lsrs r0, 24
-_0802A89C:
- cmp r0, 0x2B
- beq _0802A8AE
- movs r0, 0x1
- lsls r0, r6
- mov r1, r8
- orrs r1, r0
- lsls r0, r1, 24
- lsrs r0, 24
- mov r8, r0
-_0802A8AE:
- adds r6, 0x1
- cmp r6, 0x5
- ble _0802A7F6
- b _0802A934
-_0802A8B6:
- ldr r1, _0802A970 @ =gBattleCommunication
- movs r0, 0x4
- strb r0, [r1, 0x5]
- movs r2, 0x3F
- mov r8, r2
- ldr r3, _0802A974 @ =gBattleMons
- ldr r2, _0802A978 @ =gBattlerAttacker
- ldrb r0, [r2]
- movs r5, 0x58
- muls r0, r5
- movs r1, 0x4C
- adds r1, r3
- mov r9, r1
- add r0, r9
- str r4, [r0]
- ldrb r0, [r2]
- adds r1, r0, 0
- muls r1, r5
- adds r7, r3, 0
- adds r7, 0x50
- adds r1, r7
- ldr r0, [r1]
- ldr r6, _0802A97C @ =0xf7ffffff
- ands r0, r6
- str r0, [r1]
- ldrb r0, [r2]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r4, _0802A980 @ =gActiveBattler
- strb r0, [r4]
- ldr r0, _0802A984 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802A934
- ldr r0, _0802A988 @ =gAbsentBattlerFlags
- ldrb r2, [r0]
- ldr r1, _0802A98C @ =gBitTable
- ldrb r3, [r4]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- bne _0802A934
- adds r0, r3, 0
- muls r0, r5
- add r0, r9
- str r2, [r0]
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r7
- ldr r0, [r1]
- ands r0, r6
- str r0, [r1]
-_0802A934:
- mov r2, r8
- cmp r2, 0
- beq _0802A956
- ldr r4, _0802A980 @ =gActiveBattler
- ldr r0, _0802A978 @ =gBattlerAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- add r0, sp, 0x4
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r3, 0x4
- bl BtlController_EmitSetMonData
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
-_0802A956:
- ldr r1, _0802A990 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- 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
-_0802A970: .4byte gBattleCommunication
-_0802A974: .4byte gBattleMons
-_0802A978: .4byte gBattlerAttacker
-_0802A97C: .4byte 0xf7ffffff
-_0802A980: .4byte gActiveBattler
-_0802A984: .4byte gBattleTypeFlags
-_0802A988: .4byte gAbsentBattlerFlags
-_0802A98C: .4byte gBitTable
-_0802A990: .4byte gBattlescriptCurrInstr
- thumb_func_end atkAE_healpartystatus
-
- thumb_func_start atkAF_cursetarget
-atkAF_cursetarget: @ 802A994
- push {r4,r5,lr}
- ldr r5, _0802A9D4 @ =gBattleMons
- ldr r0, _0802A9D8 @ =gBattlerTarget
- ldrb r0, [r0]
- movs r4, 0x58
- adds r1, r0, 0
- muls r1, r4
- adds r0, r5, 0
- adds r0, 0x50
- adds r1, r0
- ldr r2, [r1]
- movs r3, 0x80
- lsls r3, 21
- adds r0, r2, 0
- ands r0, r3
- cmp r0, 0
- beq _0802A9E0
- ldr r3, _0802A9DC @ =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 _0802AA04
- .align 2, 0
-_0802A9D4: .4byte gBattleMons
-_0802A9D8: .4byte gBattlerTarget
-_0802A9DC: .4byte gBattlescriptCurrInstr
-_0802A9E0:
- orrs r2, r3
- str r2, [r1]
- ldr r1, _0802AA0C @ =gBattleMoveDamage
- ldr r0, _0802AA10 @ =gBattlerAttacker
- ldrb r0, [r0]
- muls r0, r4
- adds r0, r5
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _0802A9FC
- movs r0, 0x1
- str r0, [r1]
-_0802A9FC:
- ldr r1, _0802AA14 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802AA04:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AA0C: .4byte gBattleMoveDamage
-_0802AA10: .4byte gBattlerAttacker
-_0802AA14: .4byte gBattlescriptCurrInstr
- thumb_func_end atkAF_cursetarget
-
- thumb_func_start atkB0_trysetspikes
-atkB0_trysetspikes: @ 802AA18
- push {r4,lr}
- ldr r4, _0802AA6C @ =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0802AA70 @ =gSideTimers
- lsls r2, r0, 1
- adds r0, r2, r0
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3, 0xA]
- cmp r0, 0x3
- bne _0802AA7C
- ldr r2, _0802AA74 @ =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, _0802AA78 @ =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 _0802AA96
- .align 2, 0
-_0802AA6C: .4byte gBattlerAttacker
-_0802AA70: .4byte gSideTimers
-_0802AA74: .4byte gSpecialStatuses
-_0802AA78: .4byte gBattlescriptCurrInstr
-_0802AA7C:
- ldr r1, _0802AA9C @ =gSideStatuses
- adds r1, r2, r1
- ldrh r2, [r1]
- movs r0, 0x10
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r3, 0xA]
- adds r0, 0x1
- strb r0, [r3, 0xA]
- ldr r1, _0802AAA0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802AA96:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AA9C: .4byte gSideStatuses
-_0802AAA0: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB0_trysetspikes
-
- thumb_func_start atkB1_setforesight
-atkB1_setforesight: @ 802AAA4
- ldr r1, _0802AAC8 @ =gBattleMons
- ldr r0, _0802AACC @ =gBattlerTarget
- 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, _0802AAD0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802AAC8: .4byte gBattleMons
-_0802AACC: .4byte gBattlerTarget
-_0802AAD0: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB1_setforesight
-
- thumb_func_start atkB2_trysetperishsong
-atkB2_trysetperishsong: @ 802AAD4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r6, 0
- movs r3, 0
- ldr r0, _0802AB18 @ =gBattlersCount
- adds r7, r0, 0
- ldr r0, _0802AB1C @ =gBattlerAttacker
- mov r8, r0
- ldrb r1, [r7]
- cmp r6, r1
- bge _0802AB40
- movs r5, 0x20
- ldr r0, _0802AB20 @ =gBattleMons
- mov r12, r0
- ldr r0, _0802AB24 @ =gDisableStructs
- adds r4, r0, 0
- adds r4, 0xF
- ldr r2, _0802AB28 @ =gStatuses3
-_0802AAFC:
- ldr r1, [r2]
- adds r0, r1, 0
- ands r0, r5
- cmp r0, 0
- bne _0802AB14
- movs r0, 0x58
- muls r0, r3
- add r0, r12
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2B
- bne _0802AB2C
-_0802AB14:
- adds r6, 0x1
- b _0802AB34
- .align 2, 0
-_0802AB18: .4byte gBattlersCount
-_0802AB1C: .4byte gBattlerAttacker
-_0802AB20: .4byte gBattleMons
-_0802AB24: .4byte gDisableStructs
-_0802AB28: .4byte gStatuses3
-_0802AB2C:
- orrs r1, r5
- str r1, [r2]
- movs r0, 0x33
- strb r0, [r4]
-_0802AB34:
- adds r4, 0x1C
- adds r2, 0x4
- adds r3, 0x1
- ldrb r0, [r7]
- cmp r3, r0
- blt _0802AAFC
-_0802AB40:
- mov r1, r8
- ldrb r0, [r1]
- bl PressurePPLoseOnUsingPerishSong
- ldr r0, _0802AB6C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r6, r0
- bne _0802AB74
- ldr r3, _0802AB70 @ =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 _0802AB7C
- .align 2, 0
-_0802AB6C: .4byte gBattlersCount
-_0802AB70: .4byte gBattlescriptCurrInstr
-_0802AB74:
- ldr r1, _0802AB88 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802AB7C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AB88: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB2_trysetperishsong
-
- thumb_func_start atkB3_rolloutdamagecalculation
-atkB3_rolloutdamagecalculation: @ 802AB8C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _0802ABB0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0802ABC0
- ldr r0, _0802ABB4 @ =gBattlerAttacker
- ldrb r0, [r0]
- bl CancelMultiTurnMoves
- ldr r1, _0802ABB8 @ =gBattlescriptCurrInstr
- ldr r0, _0802ABBC @ =BattleScript_MoveMissedPause
- str r0, [r1]
- b _0802ACD8
- .align 2, 0
-_0802ABB0: .4byte gMoveResultFlags
-_0802ABB4: .4byte gBattlerAttacker
-_0802ABB8: .4byte gBattlescriptCurrInstr
-_0802ABBC: .4byte BattleScript_MoveMissedPause
-_0802ABC0:
- ldr r2, _0802ACE4 @ =gBattleMons
- ldr r1, _0802ACE8 @ =gBattlerAttacker
- 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, _0802ACEC @ =gDisableStructs
- mov r12, r1
- ldr r2, _0802ACF0 @ =gCurrentMove
- mov r8, r2
- cmp r0, 0
- bne _0802AC32
- 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, _0802ACF4 @ =gLockedMoves
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r1
- mov r2, r8
- ldrh r1, [r2]
- strh r1, [r0]
-_0802AC32:
- 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 _0802AC66
- ldrb r0, [r6]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r4
- ldr r0, [r1]
- ldr r2, _0802ACF8 @ =0xffffefff
- ands r0, r2
- str r0, [r1]
-_0802AC66:
- ldr r3, _0802ACFC @ =gDynamicBasePower
- ldr r2, _0802AD00 @ =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, _0802AD04 @ =gBattlescriptCurrInstr
- adds r5, r3, 0
- cmp r2, r1
- bge _0802ACB4
- adds r1, r5, 0
- adds r3, r4, 0
- movs r4, 0x5
-_0802ACA0:
- 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 _0802ACA0
-_0802ACB4:
- 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 _0802ACD2
- ldrh r0, [r5]
- lsls r0, 1
- strh r0, [r5]
-_0802ACD2:
- ldr r0, [r7]
- adds r0, 0x1
- str r0, [r7]
-_0802ACD8:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802ACE4: .4byte gBattleMons
-_0802ACE8: .4byte gBattlerAttacker
-_0802ACEC: .4byte gDisableStructs
-_0802ACF0: .4byte gCurrentMove
-_0802ACF4: .4byte gLockedMoves
-_0802ACF8: .4byte 0xffffefff
-_0802ACFC: .4byte gDynamicBasePower
-_0802AD00: .4byte gBattleMoves
-_0802AD04: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB3_rolloutdamagecalculation
-
- thumb_func_start atkB4_jumpifconfusedandstatmaxed
-atkB4_jumpifconfusedandstatmaxed: @ 802AD08
- push {r4,r5,lr}
- ldr r5, _0802AD58 @ =gBattleMons
- ldr r0, _0802AD5C @ =gBattlerTarget
- 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, _0802AD60 @ =gBattlescriptCurrInstr
- cmp r0, 0
- beq _0802AD64
- 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 _0802AD64
- 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 _0802AD6A
- .align 2, 0
-_0802AD58: .4byte gBattleMons
-_0802AD5C: .4byte gBattlerTarget
-_0802AD60: .4byte gBattlescriptCurrInstr
-_0802AD64:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_0802AD6A:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end atkB4_jumpifconfusedandstatmaxed
-
- thumb_func_start atkB5_furycuttercalc
-atkB5_furycuttercalc: @ 802AD70
- push {r4,r5,lr}
- ldr r0, _0802AD98 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0802ADAC
- ldr r2, _0802AD9C @ =gDisableStructs
- ldr r0, _0802ADA0 @ =gBattlerAttacker
- 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, _0802ADA4 @ =gBattlescriptCurrInstr
- ldr r0, _0802ADA8 @ =BattleScript_MoveMissedPause
- str r0, [r1]
- b _0802AE04
- .align 2, 0
-_0802AD98: .4byte gMoveResultFlags
-_0802AD9C: .4byte gDisableStructs
-_0802ADA0: .4byte gBattlerAttacker
-_0802ADA4: .4byte gBattlescriptCurrInstr
-_0802ADA8: .4byte BattleScript_MoveMissedPause
-_0802ADAC:
- ldr r5, _0802AE0C @ =gDisableStructs
- ldr r4, _0802AE10 @ =gBattlerAttacker
- 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 _0802ADC4
- adds r0, 0x1
- strb r0, [r1, 0x10]
-_0802ADC4:
- ldr r3, _0802AE14 @ =gDynamicBasePower
- ldr r2, _0802AE18 @ =gBattleMoves
- ldr r0, _0802AE1C @ =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, _0802AE20 @ =gBattlescriptCurrInstr
- ldrb r1, [r0, 0x10]
- cmp r2, r1
- bge _0802ADFE
- adds r1, r3, 0
- adds r3, r0, 0
-_0802ADF0:
- ldrh r0, [r1]
- lsls r0, 1
- strh r0, [r1]
- adds r2, 0x1
- ldrb r0, [r3, 0x10]
- cmp r2, r0
- blt _0802ADF0
-_0802ADFE:
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
-_0802AE04:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AE0C: .4byte gDisableStructs
-_0802AE10: .4byte gBattlerAttacker
-_0802AE14: .4byte gDynamicBasePower
-_0802AE18: .4byte gBattleMoves
-_0802AE1C: .4byte gCurrentMove
-_0802AE20: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB5_furycuttercalc
-
- thumb_func_start atkB6_happinesstodamagecalculation
-atkB6_happinesstodamagecalculation: @ 802AE24
- push {r4,lr}
- ldr r2, _0802AE50 @ =gBattleMoves
- ldr r0, _0802AE54 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x79
- bne _0802AE64
- ldr r4, _0802AE58 @ =gDynamicBasePower
- ldr r2, _0802AE5C @ =gBattleMons
- ldr r0, _0802AE60 @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2B
- ldrb r1, [r0]
- b _0802AE7A
- .align 2, 0
-_0802AE50: .4byte gBattleMoves
-_0802AE54: .4byte gCurrentMove
-_0802AE58: .4byte gDynamicBasePower
-_0802AE5C: .4byte gBattleMons
-_0802AE60: .4byte gBattlerAttacker
-_0802AE64:
- ldr r4, _0802AE98 @ =gDynamicBasePower
- ldr r2, _0802AE9C @ =gBattleMons
- ldr r0, _0802AEA0 @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2B
- ldrb r0, [r0]
- movs r1, 0xFF
- subs r1, r0
-_0802AE7A:
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- movs r1, 0x19
- bl __divsi3
- strh r0, [r4]
- ldr r1, _0802AEA4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AE98: .4byte gDynamicBasePower
-_0802AE9C: .4byte gBattleMons
-_0802AEA0: .4byte gBattlerAttacker
-_0802AEA4: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB6_happinesstodamagecalculation
-
- thumb_func_start atkB7_presentdamagecalculation
-atkB7_presentdamagecalculation: @ 802AEA8
- push {r4,lr}
- bl Random
- movs r4, 0xFF
- ands r4, r0
- cmp r4, 0x65
- bgt _0802AEC4
- ldr r1, _0802AEC0 @ =gDynamicBasePower
- movs r0, 0x28
- strh r0, [r1]
- b _0802AF06
- .align 2, 0
-_0802AEC0: .4byte gDynamicBasePower
-_0802AEC4:
- cmp r4, 0xB1
- bgt _0802AED4
- ldr r1, _0802AED0 @ =gDynamicBasePower
- movs r0, 0x50
- strh r0, [r1]
- b _0802AF06
- .align 2, 0
-_0802AED0: .4byte gDynamicBasePower
-_0802AED4:
- cmp r4, 0xCB
- bgt _0802AEE4
- ldr r1, _0802AEE0 @ =gDynamicBasePower
- movs r0, 0x78
- strh r0, [r1]
- b _0802AF06
- .align 2, 0
-_0802AEE0: .4byte gDynamicBasePower
-_0802AEE4:
- ldr r3, _0802AF10 @ =gBattleMoveDamage
- ldr r2, _0802AF14 @ =gBattleMons
- ldr r0, _0802AF18 @ =gBattlerTarget
- 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 _0802AF00
- movs r0, 0x1
- str r0, [r3]
-_0802AF00:
- ldr r0, [r3]
- negs r0, r0
- str r0, [r3]
-_0802AF06:
- cmp r4, 0xCB
- bgt _0802AF24
- ldr r1, _0802AF1C @ =gBattlescriptCurrInstr
- ldr r0, _0802AF20 @ =BattleScript_HitFromCritCalc
- b _0802AF5E
- .align 2, 0
-_0802AF10: .4byte gBattleMoveDamage
-_0802AF14: .4byte gBattleMons
-_0802AF18: .4byte gBattlerTarget
-_0802AF1C: .4byte gBattlescriptCurrInstr
-_0802AF20: .4byte BattleScript_HitFromCritCalc
-_0802AF24:
- ldr r2, _0802AF40 @ =gBattleMons
- ldr r0, _0802AF44 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r1, [r0, 0x2C]
- ldrh r0, [r0, 0x28]
- cmp r1, r0
- bne _0802AF50
- ldr r1, _0802AF48 @ =gBattlescriptCurrInstr
- ldr r0, _0802AF4C @ =BattleScript_AlreadyAtFullHp
- b _0802AF5E
- .align 2, 0
-_0802AF40: .4byte gBattleMons
-_0802AF44: .4byte gBattlerTarget
-_0802AF48: .4byte gBattlescriptCurrInstr
-_0802AF4C: .4byte BattleScript_AlreadyAtFullHp
-_0802AF50:
- ldr r2, _0802AF68 @ =gMoveResultFlags
- ldrb r1, [r2]
- movs r0, 0xF7
- ands r0, r1
- strb r0, [r2]
- ldr r1, _0802AF6C @ =gBattlescriptCurrInstr
- ldr r0, _0802AF70 @ =BattleScript_PresentHealTarget
-_0802AF5E:
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AF68: .4byte gMoveResultFlags
-_0802AF6C: .4byte gBattlescriptCurrInstr
-_0802AF70: .4byte BattleScript_PresentHealTarget
- thumb_func_end atkB7_presentdamagecalculation
-
- thumb_func_start atkB8_setsafeguard
-atkB8_setsafeguard: @ 802AF74
- push {r4-r7,lr}
- ldr r7, _0802AFA8 @ =gBattlerAttacker
- ldrb r0, [r7]
- bl GetBattlerPosition
- ldr r4, _0802AFAC @ =gSideStatuses
- movs r6, 0x1
- adds r1, r6, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r1, [r1]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802AFB8
- ldr r2, _0802AFB0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802AFB4 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- b _0802B000
- .align 2, 0
-_0802AFA8: .4byte gBattlerAttacker
-_0802AFAC: .4byte gSideStatuses
-_0802AFB0: .4byte gMoveResultFlags
-_0802AFB4: .4byte gBattleCommunication
-_0802AFB8:
- ldrb r0, [r7]
- bl GetBattlerPosition
- adds r1, r6, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r0, [r1]
- movs r2, 0x20
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r7]
- bl GetBattlerPosition
- ldr r5, _0802B010 @ =gSideTimers
- adds r1, r6, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r4, 0x5
- strb r4, [r0, 0x6]
- ldrb r0, [r7]
- bl GetBattlerPosition
- adds r1, r6, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r7]
- strb r1, [r0, 0x7]
- ldr r0, _0802B014 @ =gBattleCommunication
- strb r4, [r0, 0x5]
-_0802B000:
- ldr r1, _0802B018 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B010: .4byte gSideTimers
-_0802B014: .4byte gBattleCommunication
-_0802B018: .4byte gBattlescriptCurrInstr
- thumb_func_end atkB8_setsafeguard
-
- thumb_func_start atkB9_magnitudedamagecalculation
-atkB9_magnitudedamagecalculation: @ 802B01C
- 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 _0802B048
- ldr r1, _0802B044 @ =gDynamicBasePower
- movs r0, 0xA
- strh r0, [r1]
- movs r3, 0x4
- b _0802B0B4
- .align 2, 0
-_0802B044: .4byte gDynamicBasePower
-_0802B048:
- cmp r3, 0xE
- bgt _0802B05C
- ldr r1, _0802B058 @ =gDynamicBasePower
- movs r0, 0x1E
- strh r0, [r1]
- movs r3, 0x5
- b _0802B0B4
- .align 2, 0
-_0802B058: .4byte gDynamicBasePower
-_0802B05C:
- cmp r3, 0x22
- bgt _0802B070
- ldr r1, _0802B06C @ =gDynamicBasePower
- movs r0, 0x32
- strh r0, [r1]
- movs r3, 0x6
- b _0802B0B4
- .align 2, 0
-_0802B06C: .4byte gDynamicBasePower
-_0802B070:
- cmp r3, 0x40
- bgt _0802B084
- ldr r1, _0802B080 @ =gDynamicBasePower
- movs r0, 0x46
- strh r0, [r1]
- movs r3, 0x7
- b _0802B0B4
- .align 2, 0
-_0802B080: .4byte gDynamicBasePower
-_0802B084:
- cmp r3, 0x54
- bgt _0802B098
- ldr r1, _0802B094 @ =gDynamicBasePower
- movs r0, 0x5A
- strh r0, [r1]
- movs r3, 0x8
- b _0802B0B4
- .align 2, 0
-_0802B094: .4byte gDynamicBasePower
-_0802B098:
- cmp r3, 0x5E
- bgt _0802B0AC
- ldr r1, _0802B0A8 @ =gDynamicBasePower
- movs r0, 0x6E
- strh r0, [r1]
- movs r3, 0x9
- b _0802B0B4
- .align 2, 0
-_0802B0A8: .4byte gDynamicBasePower
-_0802B0AC:
- ldr r1, _0802B120 @ =gDynamicBasePower
- movs r0, 0x96
- strh r0, [r1]
- movs r3, 0xA
-_0802B0B4:
- ldr r1, _0802B124 @ =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, _0802B128 @ =gBattlerTarget
- strb r2, [r1]
- ldr r0, _0802B12C @ =gBattlersCount
- ldrb r3, [r0]
- adds r6, r1, 0
- ldr r0, _0802B130 @ =gBattlescriptCurrInstr
- mov r8, r0
- cmp r2, r3
- bcs _0802B10C
- adds r4, r6, 0
- ldr r0, _0802B134 @ =gBattlerAttacker
- ldrb r5, [r0]
- ldr r1, _0802B138 @ =gBitTable
- mov r12, r1
- ldr r7, _0802B13C @ =gAbsentBattlerFlags
-_0802B0EA:
- ldrb r2, [r4]
- cmp r2, r5
- beq _0802B100
- ldrb r0, [r7]
- ldrb r1, [r6]
- lsls r1, 2
- add r1, r12
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- beq _0802B10C
-_0802B100:
- adds r0, r2, 0x1
- strb r0, [r4]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r3
- bcc _0802B0EA
-_0802B10C:
- 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
-_0802B120: .4byte gDynamicBasePower
-_0802B124: .4byte gBattleTextBuff1
-_0802B128: .4byte gBattlerTarget
-_0802B12C: .4byte gBattlersCount
-_0802B130: .4byte gBattlescriptCurrInstr
-_0802B134: .4byte gBattlerAttacker
-_0802B138: .4byte gBitTable
-_0802B13C: .4byte gAbsentBattlerFlags
- thumb_func_end atkB9_magnitudedamagecalculation
-
- thumb_func_start atkBA_jumpifnopursuitswitchdmg
-atkBA_jumpifnopursuitswitchdmg: @ 802B140
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0802B164 @ =gMultiHitCounter
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0802B170
- ldr r0, _0802B168 @ =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0802B16C
- movs r0, 0x1
- b _0802B18A
- .align 2, 0
-_0802B164: .4byte gMultiHitCounter
-_0802B168: .4byte gBattlerAttacker
-_0802B16C:
- movs r0, 0
- b _0802B18A
-_0802B170:
- ldr r0, _0802B184 @ =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0802B188
- movs r0, 0x3
- b _0802B18A
- .align 2, 0
-_0802B184: .4byte gBattlerAttacker
-_0802B188:
- movs r0, 0x2
-_0802B18A:
- bl GetBattlerAtPosition
- ldr r1, _0802B264 @ =gBattlerTarget
- strb r0, [r1]
- ldr r0, _0802B268 @ =gChosenActionByBattler
- ldr r1, _0802B264 @ =gBattlerTarget
- ldrb r3, [r1]
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802B1A2
- b _0802B2A8
-_0802B1A2:
- ldr r5, _0802B26C @ =gBattlerAttacker
- ldr r0, _0802B270 @ =gBattleStruct
- ldr r1, [r0]
- adds r1, r3, r1
- ldrb r2, [r5]
- ldrb r1, [r1, 0xC]
- cmp r2, r1
- bne _0802B2A8
- ldr r4, _0802B274 @ =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 _0802B2A8
- ldrb r0, [r5]
- muls r0, r2
- adds r0, r4
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0802B2A8
- ldr r0, _0802B278 @ =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 _0802B2A8
- ldr r0, _0802B27C @ =gChosenMoveByBattler
- lsls r1, r3, 1
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0xE4
- bne _0802B2A8
- movs r1, 0
- ldr r0, _0802B280 @ =gBattlersCount
- ldr r2, _0802B284 @ =gCurrentMove
- mov r8, r2
- ldr r7, _0802B288 @ =gCurrMovePos
- mov r10, r7
- ldr r2, _0802B28C @ =gChosenMovePos
- mov r9, r2
- ldr r7, _0802B290 @ =gHitMarker
- mov r12, r7
- ldrb r2, [r0]
- cmp r1, r2
- bge _0802B22E
- ldr r6, _0802B294 @ =gBattlerByTurnOrder
- ldr r5, _0802B264 @ =gBattlerTarget
- ldr r4, _0802B298 @ =gActionsByTurnOrder
- movs r3, 0xB
- adds r2, r0, 0
-_0802B218:
- adds r0, r1, r6
- ldrb r0, [r0]
- ldrb r7, [r5]
- cmp r0, r7
- bne _0802B226
- adds r0, r1, r4
- strb r3, [r0]
-_0802B226:
- adds r1, 0x1
- ldrb r0, [r2]
- cmp r1, r0
- blt _0802B218
-_0802B22E:
- movs r0, 0xE4
- mov r1, r8
- strh r0, [r1]
- ldr r2, _0802B264 @ =gBattlerTarget
- ldrb r0, [r2]
- ldr r7, _0802B270 @ =gBattleStruct
- ldr r1, [r7]
- adds r0, r1
- adds r0, 0x80
- ldrb r0, [r0]
- mov r1, r9
- strb r0, [r1]
- mov r2, r10
- strb r0, [r2]
- ldr r7, _0802B29C @ =gBattlescriptCurrInstr
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- movs r0, 0x1
- ldr r1, _0802B2A0 @ =gBattleScripting
- strb r0, [r1, 0x18]
- mov r2, r12
- ldr r0, [r2]
- ldr r1, _0802B2A4 @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- b _0802B2C2
- .align 2, 0
-_0802B264: .4byte gBattlerTarget
-_0802B268: .4byte gChosenActionByBattler
-_0802B26C: .4byte gBattlerAttacker
-_0802B270: .4byte gBattleStruct
-_0802B274: .4byte gBattleMons
-_0802B278: .4byte gDisableStructs
-_0802B27C: .4byte gChosenMoveByBattler
-_0802B280: .4byte gBattlersCount
-_0802B284: .4byte gCurrentMove
-_0802B288: .4byte gCurrMovePos
-_0802B28C: .4byte gChosenMovePos
-_0802B290: .4byte gHitMarker
-_0802B294: .4byte gBattlerByTurnOrder
-_0802B298: .4byte gActionsByTurnOrder
-_0802B29C: .4byte gBattlescriptCurrInstr
-_0802B2A0: .4byte gBattleScripting
-_0802B2A4: .4byte 0xfffffbff
-_0802B2A8:
- ldr r3, _0802B2D0 @ =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]
-_0802B2C2:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B2D0: .4byte gBattlescriptCurrInstr
- thumb_func_end atkBA_jumpifnopursuitswitchdmg
-
- thumb_func_start atkBB_setsunny
-atkBB_setsunny: @ 802B2D4
- push {lr}
- ldr r2, _0802B2F4 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0802B300
- ldr r2, _0802B2F8 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802B2FC @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _0802B312
- .align 2, 0
-_0802B2F4: .4byte gBattleWeather
-_0802B2F8: .4byte gMoveResultFlags
-_0802B2FC: .4byte gBattleCommunication
-_0802B300:
- movs r0, 0x20
- strh r0, [r2]
- ldr r1, _0802B320 @ =gBattleCommunication
- movs r0, 0x4
- strb r0, [r1, 0x5]
- ldr r0, _0802B324 @ =gWishFutureKnock
- adds r0, 0x28
- movs r1, 0x5
- strb r1, [r0]
-_0802B312:
- ldr r1, _0802B328 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802B320: .4byte gBattleCommunication
-_0802B324: .4byte gWishFutureKnock
-_0802B328: .4byte gBattlescriptCurrInstr
- thumb_func_end atkBB_setsunny
-
- thumb_func_start atkBC_maxattackhalvehp
-atkBC_maxattackhalvehp: @ 802B32C
- push {r4,r5,lr}
- ldr r5, _0802B378 @ =gBattleMons
- ldr r4, _0802B37C @ =gBattlerAttacker
- 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 _0802B344
- movs r1, 0x1
-_0802B344:
- movs r0, 0x19
- ldrsb r0, [r2, r0]
- cmp r0, 0xB
- bgt _0802B388
- ldrh r0, [r2, 0x28]
- cmp r0, r1
- bls _0802B388
- movs r0, 0xC
- strb r0, [r2, 0x19]
- ldr r1, _0802B380 @ =gBattleMoveDamage
- ldrb r0, [r4]
- muls r0, r3
- adds r0, r5
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _0802B36C
- movs r0, 0x1
- str r0, [r1]
-_0802B36C:
- ldr r1, _0802B384 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802B3A2
- .align 2, 0
-_0802B378: .4byte gBattleMons
-_0802B37C: .4byte gBattlerAttacker
-_0802B380: .4byte gBattleMoveDamage
-_0802B384: .4byte gBattlescriptCurrInstr
-_0802B388:
- ldr r3, _0802B3A8 @ =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]
-_0802B3A2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B3A8: .4byte gBattlescriptCurrInstr
- thumb_func_end atkBC_maxattackhalvehp
-
- thumb_func_start atkBD_copyfoestats
-atkBD_copyfoestats: @ 802B3AC
- push {r4-r7,lr}
- movs r2, 0
- ldr r7, _0802B3E4 @ =gBattlescriptCurrInstr
- ldr r6, _0802B3E8 @ =gBattlerAttacker
- movs r4, 0x58
- ldr r3, _0802B3EC @ =gUnknown_2023BFC
- ldr r5, _0802B3F0 @ =gBattlerTarget
-_0802B3BA:
- 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 _0802B3BA
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B3E4: .4byte gBattlescriptCurrInstr
-_0802B3E8: .4byte gBattlerAttacker
-_0802B3EC: .4byte gUnknown_2023BFC
-_0802B3F0: .4byte gBattlerTarget
- thumb_func_end atkBD_copyfoestats
-
- thumb_func_start atkBE_rapidspinfree
-atkBE_rapidspinfree: @ 802B3F4
- push {r4-r6,lr}
- ldr r1, _0802B464 @ =gBattleMons
- ldr r5, _0802B468 @ =gBattlerAttacker
- ldrb r2, [r5]
- movs r6, 0x58
- adds r0, r2, 0
- muls r0, r6
- adds r4, r1, 0
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0xE0
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _0802B488
- ldr r1, _0802B46C @ =gBattleScripting
- ldr r3, _0802B470 @ =gBattlerTarget
- ldrb r0, [r3]
- strb r0, [r1, 0x17]
- ldrb r0, [r5]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r4
- ldr r0, [r1]
- ldr r2, _0802B474 @ =0xffff1fff
- ands r0, r2
- str r0, [r1]
- ldrb r0, [r5]
- ldr r1, _0802B478 @ =gBattleStruct
- ldr r2, [r1]
- adds r0, r2
- ldrb r0, [r0, 0x14]
- strb r0, [r3]
- ldr r1, _0802B47C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrb r0, [r0, 0x4]
- strb r0, [r1, 0x2]
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrb r0, [r0, 0x5]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- bl BattleScriptPushCursor
- ldr r1, _0802B480 @ =gBattlescriptCurrInstr
- ldr r0, _0802B484 @ =BattleScript_WrapFree
- b _0802B532
- .align 2, 0
-_0802B464: .4byte gBattleMons
-_0802B468: .4byte gBattlerAttacker
-_0802B46C: .4byte gBattleScripting
-_0802B470: .4byte gBattlerTarget
-_0802B474: .4byte 0xffff1fff
-_0802B478: .4byte gBattleStruct
-_0802B47C: .4byte gBattleTextBuff1
-_0802B480: .4byte gBattlescriptCurrInstr
-_0802B484: .4byte BattleScript_WrapFree
-_0802B488:
- ldr r4, _0802B4BC @ =gStatuses3
- lsls r0, r2, 2
- adds r3, r0, r4
- ldr r1, [r3]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0802B4C8
- 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 BattleScriptPushCursor
- ldr r1, _0802B4C0 @ =gBattlescriptCurrInstr
- ldr r0, _0802B4C4 @ =BattleScript_LeechSeedFree
- b _0802B532
- .align 2, 0
-_0802B4BC: .4byte gStatuses3
-_0802B4C0: .4byte gBattlescriptCurrInstr
-_0802B4C4: .4byte BattleScript_LeechSeedFree
-_0802B4C8:
- adds r0, r2, 0
- bl GetBattlerSide
- ldr r4, _0802B518 @ =gSideStatuses
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802B52C
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r2, [r0]
- ldr r1, _0802B51C @ =0x0000ffef
- ands r1, r2
- movs r4, 0
- strh r1, [r0]
- ldrb r0, [r5]
- bl GetBattlerSide
- ldr r2, _0802B520 @ =gSideTimers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- strb r4, [r1, 0xA]
- bl BattleScriptPushCursor
- ldr r1, _0802B524 @ =gBattlescriptCurrInstr
- ldr r0, _0802B528 @ =BattleScript_SpikesFree
- b _0802B532
- .align 2, 0
-_0802B518: .4byte gSideStatuses
-_0802B51C: .4byte 0x0000ffef
-_0802B520: .4byte gSideTimers
-_0802B524: .4byte gBattlescriptCurrInstr
-_0802B528: .4byte BattleScript_SpikesFree
-_0802B52C:
- ldr r1, _0802B53C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
-_0802B532:
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B53C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkBE_rapidspinfree
-
- thumb_func_start atkBF_setdefensecurlbit
-atkBF_setdefensecurlbit: @ 802B540
- ldr r1, _0802B564 @ =gBattleMons
- ldr r0, _0802B568 @ =gBattlerAttacker
- 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, _0802B56C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802B564: .4byte gBattleMons
-_0802B568: .4byte gBattlerAttacker
-_0802B56C: .4byte gBattlescriptCurrInstr
- thumb_func_end atkBF_setdefensecurlbit
-
- thumb_func_start atkC0_recoverbasedonsunlight
-atkC0_recoverbasedonsunlight: @ 802B570
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r1, _0802B5DC @ =gBattlerTarget
- ldr r5, _0802B5E0 @ =gBattlerAttacker
- ldrb r0, [r5]
- strb r0, [r1]
- ldr r7, _0802B5E4 @ =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 _0802B650
- ldr r4, _0802B5E8 @ =gBattleWeather
- ldrh r0, [r4]
- cmp r0, 0
- beq _0802B5C2
- 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 _0802B5C2
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0802B5F0
-_0802B5C2:
- ldr r3, _0802B5EC @ =gBattleMoveDamage
- ldr r2, _0802B5E4 @ =gBattleMons
- ldr r0, _0802B5E0 @ =gBattlerAttacker
- 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 _0802B62A
- .align 2, 0
-_0802B5DC: .4byte gBattlerTarget
-_0802B5E0: .4byte gBattlerAttacker
-_0802B5E4: .4byte gBattleMons
-_0802B5E8: .4byte gBattleWeather
-_0802B5EC: .4byte gBattleMoveDamage
-_0802B5F0:
- ldrh r1, [r4]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0802B61C
- ldr r4, _0802B618 @ =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 _0802B62A
- .align 2, 0
-_0802B618: .4byte gBattleMoveDamage
-_0802B61C:
- ldr r1, _0802B648 @ =gBattleMoveDamage
- ldrb r0, [r5]
- muls r0, r6
- adds r0, r7
- ldrh r0, [r0, 0x2C]
- lsrs r0, 2
- str r0, [r1]
-_0802B62A:
- adds r2, r1, 0
- ldr r0, [r2]
- cmp r0, 0
- bne _0802B636
- movs r0, 0x1
- str r0, [r2]
-_0802B636:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- ldr r1, _0802B64C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802B66A
- .align 2, 0
-_0802B648: .4byte gBattleMoveDamage
-_0802B64C: .4byte gBattlescriptCurrInstr
-_0802B650:
- ldr r3, _0802B674 @ =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]
-_0802B66A:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B674: .4byte gBattlescriptCurrInstr
- thumb_func_end atkC0_recoverbasedonsunlight
-
thumb_func_start atkC1_hiddenpowercalc
atkC1_hiddenpowercalc: @ 802B678
push {r4-r7,lr}
diff --git a/include/battle.h b/include/battle.h
index 8abb95333..88b440a22 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -147,19 +147,6 @@
#define TYPE_FORESIGHT 0xFE
#define TYPE_ENDTABLE 0xFF
-#define BS_GET_TARGET 0
-#define BS_GET_ATTACKER 1
-#define BS_GET_EFFECT_BANK 2
-#define BS_GET_gBank1 3
-#define BS_GET_BANK_0 7
-#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
-#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
-#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
-#define BS_GET_SCRIPTING_BANK 10
-#define BS_GET_OPPONENT1 12
-#define BS_GET_PLAYER2 13
-#define BS_GET_OPPONENT2 14
-
// for battle script commands
#define CMP_EQUAL 0x0
#define CMP_NOT_EQUAL 0x1
@@ -942,5 +929,6 @@ extern u8 gLeveledUpInBattle;
extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
+extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
#endif // GUARD_BATTLE_H
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index fa60e301a..d45675ff8 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -14,10 +14,6 @@
#define CMP_COMMON_BITS 0x4
#define CMP_NO_COMMON_BITS 0x5
-#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
-#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
-#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
-
#define ATK48_STAT_NEGATIVE 0x1
#define ATK48_STAT_BY_TWO 0x2
#define ATK48_BIT_x4 0x4
diff --git a/include/constants/battle.h b/include/constants/battle.h
index f524a7643..b9026262a 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -174,7 +174,7 @@
#define HITMARKER_GRUDGE 0x01000000
#define HITMARKER_OBEYS 0x02000000
#define HITMARKER_x4000000 0x04000000
-#define HITMARKER_x8000000 0x08000000
+#define HITMARKER_CHARGING 0x08000000
#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 0x1C)
#define HITMARKER_UNK(battler) (0x10000000 << battler)
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index 32d656673..3809610ba 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -39,13 +39,13 @@
#define BS_EFFECT_BATTLER 2
#define BS_FAINTED 3
#define BS_BATTLER_0 7
-#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
+#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_updatestatusicon
#define BS_ATTACKER_SIDE 8 // for atk1E_jumpifability
#define BS_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
#define BS_SCRIPTING 10
#define BS_PLAYER1 11
#define BS_OPPONENT1 12
-#define BS_PLAYER2 13
+#define BS_PLAYER2 13 // for atk98_updatestatusicon
#define BS_OPPONENT2 14
// atk 01, accuracy calc
diff --git a/include/party_menu.h b/include/party_menu.h
index 4c38df658..cd2a5bc37 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -79,5 +79,7 @@ u8 pokemon_order_func(u8);
void sub_8127CAC(void);
void sub_8127DA8(u8 battlerId, u8 multiplayerFlag);
void OpenPartyMenuInBattle(u8 arg);
+void sub_8127EC4(u8 battlerId, u8 unk, u8 arrayIndex);
+bool8 IsMultiBattle(void);
#endif // GUARD_PARTY_MENU_H
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index b7cf113d4..55d135a4e 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -1647,7 +1647,7 @@ static void BattleAICmd_if_last_move_did_damage(void)
if (gAIScriptPtr[2] == 0)
{
- if (gDisableStructs[index].disabledMove == 0)
+ if (gDisableStructs[index].disabledMove == MOVE_NONE)
{
gAIScriptPtr += 7;
return;
@@ -1660,7 +1660,7 @@ static void BattleAICmd_if_last_move_did_damage(void)
gAIScriptPtr += 7;
return;
}
- else if (gDisableStructs[index].encoredMove != 0)
+ else if (gDisableStructs[index].encoredMove != MOVE_NONE)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
return;
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 9d0c25fce..932e52791 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -6279,7 +6279,7 @@ void atk78_faintifabilitynotdamp(void)
{
if (!gBattleControllerExecFlags)
{
- for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; ++gBattlerTarget)
{
if (gBattleMons[gBattlerTarget].ability == ABILITY_DAMP)
break;
@@ -6292,7 +6292,7 @@ void atk78_faintifabilitynotdamp(void)
MarkBattlerForControllerExec(gActiveBattler);
++gBattlescriptCurrInstr;
- for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; ++gBattlerTarget)
{
if (gBattlerTarget == gBattlerAttacker)
continue;
@@ -7065,3 +7065,1488 @@ bool8 TryDoForceSwitchOut(void)
gBattlescriptCurrInstr = BattleScript_SuccessForceOut;
return TRUE;
}
+
+#define MON_CAN_BATTLE(mon) (((GetMonData(mon, MON_DATA_SPECIES) && GetMonData(mon, MON_DATA_IS_EGG) != TRUE && GetMonData(mon, MON_DATA_HP))))
+
+void atk8F_forcerandomswitch(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ u8 i;
+ struct Pokemon *party;
+ u8 valid;
+ u8 val;
+
+ if (!GetBattlerSide(gBattlerTarget))
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ valid = 0;
+ val = 0;
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == 1)
+ val = 3;
+ for (i = val; i < val + 3; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0)
+ ++valid;
+ }
+ }
+ else
+ {
+ valid = 0;
+ for (i = 0; i < 6; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0)
+ ++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 = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else if (TryDoForceSwitchOut())
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ do
+ {
+ val = Random() % 3;
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == 1)
+ i = val + 3;
+ else
+ i = val;
+ }
+ while (i == gBattlerPartyIndexes[gBattlerTarget]
+ || i == gBattlerPartyIndexes[gBattlerTarget ^ 2]
+ || !MON_CAN_BATTLE(&party[i]));
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ do
+ {
+ i = Random() % 6;
+ }
+ while (i == gBattlerPartyIndexes[gBattlerTarget]
+ || i == gBattlerPartyIndexes[gBattlerTarget ^ 2]
+ || !MON_CAN_BATTLE(&party[i]));
+ }
+ else
+ {
+ do
+ {
+ i = Random() % 6;
+ }
+ while (i == gBattlerPartyIndexes[gBattlerTarget]
+ || !MON_CAN_BATTLE(&party[i]));
+ }
+ }
+ *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i;
+ if (!IsMultiBattle())
+ sub_8013F6C(gBattlerTarget);
+ sub_8127EC4(gBattlerTarget, i, 0);
+ sub_8127EC4(gBattlerTarget ^ 2, i, 1);
+ }
+ }
+ else
+ {
+ TryDoForceSwitchOut();
+ }
+}
+
+void atk90_tryconversiontypechange(void) // randomly changes user's type to one of its moves' type
+{
+ u8 validMoves = 0;
+ u8 moveChecked;
+ u8 moveType;
+
+ while (validMoves < MAX_MON_MOVES)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[validMoves] == MOVE_NONE)
+ break;
+ ++validMoves;
+ }
+ for (moveChecked = 0; moveChecked < validMoves; ++moveChecked)
+ {
+ moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type;
+ if (moveType == TYPE_MYSTERY)
+ {
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
+ moveType = TYPE_GHOST;
+ else
+ moveType = TYPE_NORMAL;
+ }
+ if (moveType != gBattleMons[gBattlerAttacker].type1
+ && moveType != gBattleMons[gBattlerAttacker].type2)
+ {
+ break;
+ }
+ }
+ if (moveChecked == validMoves)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ do
+ {
+ while ((moveChecked = Random() & 3) >= validMoves);
+ moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type;
+ if (moveType == TYPE_MYSTERY)
+ {
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
+ moveType = TYPE_GHOST;
+ else
+ moveType = TYPE_NORMAL;
+ }
+ }
+ while (moveType == gBattleMons[gBattlerAttacker].type1
+ || moveType == gBattleMons[gBattlerAttacker].type2);
+ SET_BATTLER_TYPE(gBattlerAttacker, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+void atk91_givepaydaymoney(void)
+{
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney != 0)
+ {
+ u32 bonusMoney = gPaydayMoney * gBattleStruct->moneyMultiplier;
+
+ AddMoney(&gSaveBlock1Ptr->money, bonusMoney);
+ PREPARE_HWORD_NUMBER_BUFFER(gBattleTextBuff1, 5, bonusMoney)
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_PrintPayDayMoneyString;
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+void atk92_setlightscreen(void)
+{
+ if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_LIGHTSCREEN)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else
+ {
+ gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_LIGHTSCREEN;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 5;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+void atk93_tryKO(void)
+{
+ u8 holdEffect, param;
+
+ if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ {
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ }
+ gPotentialItemEffectBattler = gBattlerTarget;
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+ {
+ RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_FOCUS_BAND);
+ gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ }
+
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_STURDY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gLastUsedAbility = ABILITY_STURDY;
+ gBattlescriptCurrInstr = BattleScript_SturdyPreventsOHKO;
+ RecordAbilityBattle(gBattlerTarget, ABILITY_STURDY);
+ }
+ else
+ {
+ u16 chance;
+
+ if (!(gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS))
+ {
+ chance = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level);
+ if (Random() % 100 + 1 < chance && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ chance = TRUE;
+ else
+ chance = FALSE;
+ }
+ else if (gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker
+ && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ {
+ chance = TRUE;
+ }
+ else
+ {
+ chance = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level);
+ if (Random() % 100 + 1 < chance && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ chance = TRUE;
+ else
+ chance = FALSE;
+ }
+ if (chance)
+ {
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp;
+ gMoveResultFlags |= MOVE_RESULT_ONE_HIT_KO;
+ }
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ }
+}
+
+void atk94_damagetohalftargethp(void) // super fang
+{
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp / 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ ++gBattlescriptCurrInstr;
+}
+
+void atk95_setsandstorm(void)
+{
+ if (gBattleWeather & WEATHER_SANDSTORM_ANY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = WEATHER_SANDSTORM_TEMPORARY;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+void atk96_weatherdamage(void)
+{
+ if (((gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_GHOST)) == BATTLE_TYPE_GHOST)
+ && (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT))
+ {
+ gBattleMoveDamage = 0;
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ if (WEATHER_HAS_EFFECT)
+ {
+ if (gBattleWeather & WEATHER_SANDSTORM_ANY)
+ {
+ if (gBattleMons[gBattlerAttacker].type1 != TYPE_ROCK
+ && gBattleMons[gBattlerAttacker].type1 != TYPE_STEEL
+ && gBattleMons[gBattlerAttacker].type1 != TYPE_GROUND
+ && gBattleMons[gBattlerAttacker].type2 != TYPE_ROCK
+ && gBattleMons[gBattlerAttacker].type2 != TYPE_STEEL
+ && gBattleMons[gBattlerAttacker].type2 != TYPE_GROUND
+ && gBattleMons[gBattlerAttacker].ability != ABILITY_SAND_VEIL
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER))
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+ else
+ {
+ gBattleMoveDamage = 0;
+ }
+ }
+ if (gBattleWeather & WEATHER_HAIL)
+ {
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER))
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+ else
+ {
+ gBattleMoveDamage = 0;
+ }
+ }
+ }
+ else
+ {
+ gBattleMoveDamage = 0;
+ }
+ if (gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
+ gBattleMoveDamage = 0;
+ ++gBattlescriptCurrInstr;
+}
+
+void atk97_tryinfatuating(void)
+{
+ struct Pokemon *monAttacker, *monTarget;
+ u16 speciesAttacker, speciesTarget;
+ u32 personalityAttacker, personalityTarget;
+
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ monAttacker = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ else
+ monAttacker = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ monTarget = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
+ else
+ monTarget = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
+ speciesAttacker = GetMonData(monAttacker, MON_DATA_SPECIES);
+ personalityAttacker = GetMonData(monAttacker, MON_DATA_PERSONALITY);
+ speciesTarget = GetMonData(monTarget, MON_DATA_SPECIES);
+ personalityTarget = GetMonData(monTarget, MON_DATA_PERSONALITY);
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_OBLIVIOUS)
+ {
+ gBattlescriptCurrInstr = BattleScript_ObliviousPreventsAttraction;
+ gLastUsedAbility = ABILITY_OBLIVIOUS;
+ RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS);
+ }
+ else
+ {
+ if (GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget)
+ || gBattleMons[gBattlerTarget].status2 & STATUS2_INFATUATION
+ || GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == MON_GENDERLESS
+ || GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget) == MON_GENDERLESS)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_INFATUATED_WITH(gBattlerAttacker);
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+}
+
+void atk98_updatestatusicon(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (gBattlescriptCurrInstr[1] == BS_PLAYER2)
+ {
+ for (gActiveBattler = gBattleControllerExecFlags; gActiveBattler < gBattlersCount; ++gActiveBattler)
+ {
+ if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+ else if (gBattlescriptCurrInstr[1] == BS_ATTACKER_WITH_PARTNER)
+ {
+ gActiveBattler = gBattlerAttacker;
+ if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
+ if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+ else
+ {
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+ }
+ }
+}
+
+void atk99_setmist(void)
+{
+ if (gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistTimer)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FAILED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistTimer = 5;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistBattlerId = gBattlerAttacker;
+ gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_MIST;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+void atk9A_setfocusenergy(void)
+{
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FAILED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_FOCUS_ENERGY;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+void atk9B_transformdataexecution(void)
+{
+ gChosenMove = 0xFFFF;
+ ++gBattlescriptCurrInstr;
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED
+ || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FAILED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ s32 i;
+ u8 *battleMonAttacker, *battleMonTarget;
+
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_TRANSFORMED;
+ gDisableStructs[gBattlerAttacker].disabledMove = MOVE_NONE;
+ gDisableStructs[gBattlerAttacker].disableTimer = 0;
+ gDisableStructs[gBattlerAttacker].transformedMonPersonality = gBattleMons[gBattlerTarget].personality;
+ gDisableStructs[gBattlerAttacker].mimickedMoves = 0;
+ PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].species)
+ battleMonAttacker = (u8 *)(&gBattleMons[gBattlerAttacker]);
+ battleMonTarget = (u8 *)(&gBattleMons[gBattlerTarget]);
+ for (i = 0; i < offsetof(struct BattlePokemon, pp); ++i)
+ battleMonAttacker[i] = battleMonTarget[i];
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].pp < 5)
+ gBattleMons[gBattlerAttacker].pp[i] = gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].pp;
+ else
+ gBattleMons[gBattlerAttacker].pp[i] = 5;
+ }
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitResetActionMoveSelection(0, RESET_MOVE_SELECTION);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+}
+
+void atk9C_setsubstitute(void)
+{
+ u32 hp = gBattleMons[gBattlerAttacker].maxHP / 4;
+
+ if (gBattleMons[gBattlerAttacker].maxHP / 4 == 0)
+ hp = 1;
+ if (gBattleMons[gBattlerAttacker].hp <= hp)
+ {
+ gBattleMoveDamage = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; // one bit value will only work for pokemon which max hp can go to 1020(which is more than possible in games)
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_SUBSTITUTE;
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_WRAPPED);
+ gDisableStructs[gBattlerAttacker].substituteHP = gBattleMoveDamage;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+bool8 IsMoveUncopyableByMimic(u16 move)
+{
+ s32 i;
+
+ for (i = 0; sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END && sMovesForbiddenToCopy[i] != move; ++i);
+ return (sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END);
+}
+
+void atk9D_mimicattackcopy(void)
+{
+ gChosenMove = 0xFFFF;
+ if (IsMoveUncopyableByMimic(gLastMoves[gBattlerTarget])
+ || gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED
+ || gLastMoves[gBattlerTarget] == 0
+ || gLastMoves[gBattlerTarget] == 0xFFFF)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[i] == gLastMoves[gBattlerTarget])
+ break;
+ }
+ if (i == MAX_MON_MOVES)
+ {
+ gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastMoves[gBattlerTarget];
+ if (gBattleMoves[gLastMoves[gBattlerTarget]].pp < 5)
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gLastMoves[gBattlerTarget]].pp;
+ else
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 5;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget])
+ gDisableStructs[gBattlerAttacker].mimickedMoves |= gBitTable[gCurrMovePos];
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ }
+}
+
+void atk9E_metronome(void)
+{
+ while (1)
+ {
+ s32 i;
+
+ gCurrentMove = (Random() & 0x1FF) + 1;
+ if (gCurrentMove >= MOVES_COUNT)
+ continue;
+ for (i = 0; i < MAX_MON_MOVES; ++i); // redundant
+ i = -1;
+ while (1)
+ {
+ ++i;
+ if (sMovesForbiddenToCopy[i] == gCurrentMove)
+ break;
+ if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
+ break;
+ }
+ if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
+ gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
+ return;
+ }
+ }
+}
+
+void atk9F_dmgtolevel(void)
+{
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].level;
+ ++gBattlescriptCurrInstr;
+}
+
+void atkA0_psywavedamageeffect(void)
+{
+ s32 randDamage;
+
+ while ((randDamage = (Random() & 0xF)) > 10);
+ randDamage *= 10;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].level * (randDamage + 50) / 100;
+ ++gBattlescriptCurrInstr;
+}
+
+void atkA1_counterdamagecalculator(void)
+{
+ u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
+ u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId);
+
+ if (gProtectStructs[gBattlerAttacker].physicalDmg
+ && sideAttacker != sideTarget
+ && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp)
+ {
+ gBattleMoveDamage = gProtectStructs[gBattlerAttacker].physicalDmg * 2;
+
+ if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp)
+ gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
+ else
+ gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId;
+
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+// a copy of atkA1 with the physical -> special field changes
+void atkA2_mirrorcoatdamagecalculator(void)
+{
+ u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
+ u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId);
+
+ if (gProtectStructs[gBattlerAttacker].specialDmg && sideAttacker != sideTarget && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp)
+ {
+ gBattleMoveDamage = gProtectStructs[gBattlerAttacker].specialDmg * 2;
+ if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp)
+ gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
+ else
+ gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+void atkA3_disablelastusedattack(void)
+{
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget])
+ break;
+ }
+ if (gDisableStructs[gBattlerTarget].disabledMove == MOVE_NONE
+ && i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0)
+ {
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].moves[i])
+ gDisableStructs[gBattlerTarget].disabledMove = gBattleMons[gBattlerTarget].moves[i];
+ gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2;
+ gDisableStructs[gBattlerTarget].disableTimerStartValue = gDisableStructs[gBattlerTarget].disableTimer; // used to save the random amount of turns?
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+void atkA4_trysetencore(void)
+{
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget])
+ break;
+ if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE
+ || gLastMoves[gBattlerTarget] == MOVE_ENCORE
+ || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE)
+ i = 4;
+ if (gDisableStructs[gBattlerTarget].encoredMove == MOVE_NONE
+ && i != 4
+ && gBattleMons[gBattlerTarget].pp[i] != 0)
+ {
+ gDisableStructs[gBattlerTarget].encoredMove = gBattleMons[gBattlerTarget].moves[i];
+ gDisableStructs[gBattlerTarget].encoredMovePos = i;
+ gDisableStructs[gBattlerTarget].encoreTimer = (Random() & 3) + 3;
+ gDisableStructs[gBattlerTarget].encoreTimerStartValue = gDisableStructs[gBattlerTarget].encoreTimer;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+void atkA5_painsplitdmgcalc(void)
+{
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE))
+ {
+ s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + gBattleMons[gBattlerTarget].hp) / 2;
+ s32 painSplitHp = gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - hpDiff;
+ u8 *storeLoc = (void *)(&gBattleScripting.painSplitHp);
+
+ storeLoc[0] = (painSplitHp);
+ storeLoc[1] = (painSplitHp & 0x0000FF00) >> 8;
+ storeLoc[2] = (painSplitHp & 0x00FF0000) >> 16;
+ storeLoc[3] = (painSplitHp & 0xFF000000) >> 24;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].hp - hpDiff;
+ gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+void atkA6_settypetorandomresistance(void) // conversion 2
+{
+ if (gLastLandedMoves[gBattlerAttacker] == MOVE_NONE
+ || gLastLandedMoves[gBattlerAttacker] == 0xFFFF)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else if (IsTwoTurnsMove(gLastLandedMoves[gBattlerAttacker])
+ && gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ s32 i, j, rands;
+
+ for (rands = 0; rands < 1000; ++rands)
+ {
+ while (((i = (Random() & 0x7F)) > sizeof(gTypeEffectiveness) / 3));
+ i *= 3;
+ if (TYPE_EFFECT_ATK_TYPE(i) == gLastHitByType[gBattlerAttacker]
+ && TYPE_EFFECT_MULTIPLIER(i) <= TYPE_MUL_NOT_EFFECTIVE
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
+ {
+ SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i));
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i));
+
+ gBattlescriptCurrInstr += 5;
+ return;
+ }
+ }
+ for (j = 0, rands = 0; rands < sizeof(gTypeEffectiveness); j += 3, rands += 3)
+ {
+ switch (TYPE_EFFECT_ATK_TYPE(j))
+ {
+ case TYPE_ENDTABLE:
+ case TYPE_FORESIGHT:
+ break;
+ default:
+ if (TYPE_EFFECT_ATK_TYPE(j) == gLastHitByType[gBattlerAttacker]
+ && TYPE_EFFECT_MULTIPLIER(j) <= 5
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
+ {
+ SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(rands));
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(rands))
+
+ gBattlescriptCurrInstr += 5;
+ return;
+ }
+ break;
+ }
+ }
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+void atkA7_setalwayshitflag(void)
+{
+ gStatuses3[gBattlerTarget] &= ~(STATUS3_ALWAYS_HITS);
+ gStatuses3[gBattlerTarget] |= 0x10;
+ gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker;
+ ++gBattlescriptCurrInstr;
+}
+
+void atkA8_copymovepermanently(void) // sketch
+{
+ gChosenMove = 0xFFFF;
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)
+ && gLastPrintedMoves[gBattlerTarget] != MOVE_STRUGGLE
+ && gLastPrintedMoves[gBattlerTarget] != 0
+ && gLastPrintedMoves[gBattlerTarget] != 0xFFFF
+ && gLastPrintedMoves[gBattlerTarget] != MOVE_SKETCH)
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[i] == MOVE_SKETCH)
+ continue;
+ if (gBattleMons[gBattlerAttacker].moves[i] == gLastPrintedMoves[gBattlerTarget])
+ break;
+ }
+ if (i != MAX_MON_MOVES)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else // sketch worked
+ {
+ struct MovePpInfo movePpData;
+
+ gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastPrintedMoves[gBattlerTarget];
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gLastPrintedMoves[gBattlerTarget]].pp;
+ gActiveBattler = gBattlerAttacker;
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ movePpData.moves[i] = gBattleMons[gBattlerAttacker].moves[i];
+ movePpData.pp[i] = gBattleMons[gBattlerAttacker].pp[i];
+ }
+ movePpData.ppBonuses = gBattleMons[gBattlerAttacker].ppBonuses;
+ BtlController_EmitSetMonData(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct MovePpInfo), &movePpData);
+ MarkBattlerForControllerExec(gActiveBattler);
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastPrintedMoves[gBattlerTarget])
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+bool8 IsTwoTurnsMove(u16 move)
+{
+ if (gBattleMoves[move].effect == EFFECT_SKULL_BASH
+ || gBattleMoves[move].effect == EFFECT_RAZOR_WIND
+ || gBattleMoves[move].effect == EFFECT_SKY_ATTACK
+ || gBattleMoves[move].effect == EFFECT_SOLARBEAM
+ || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE
+ || gBattleMoves[move].effect == EFFECT_BIDE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 IsInvalidForSleepTalkOrAssist(u16 move)
+{
+ if (move == 0 || move == MOVE_SLEEP_TALK || move == MOVE_ASSIST
+ || move == MOVE_MIRROR_MOVE || move == MOVE_METRONOME)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a charging turn, otherwise 2
+{
+ // first argument is unused
+ if (gBattleMoves[move].effect == EFFECT_SOLARBEAM
+ && (gBattleWeather & WEATHER_SUN_ANY))
+ return 2;
+ if (gBattleMoves[move].effect == EFFECT_SKULL_BASH
+ || gBattleMoves[move].effect == EFFECT_RAZOR_WIND
+ || gBattleMoves[move].effect == EFFECT_SKY_ATTACK
+ || gBattleMoves[move].effect == EFFECT_SOLARBEAM
+ || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE
+ || gBattleMoves[move].effect == EFFECT_BIDE)
+ if ((gHitMarker & HITMARKER_CHARGING))
+ return 1;
+ return 2;
+}
+
+void atkA9_trychoosesleeptalkmove(void)
+{
+ s32 i;
+ u8 unusableMovesBits = 0;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (IsInvalidForSleepTalkOrAssist(gBattleMons[gBattlerAttacker].moves[i])
+ || gBattleMons[gBattlerAttacker].moves[i] == MOVE_FOCUS_PUNCH
+ || gBattleMons[gBattlerAttacker].moves[i] == MOVE_UPROAR
+ || IsTwoTurnsMove(gBattleMons[gBattlerAttacker].moves[i]))
+ {
+ unusableMovesBits |= gBitTable[i];
+ }
+ }
+ unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~(MOVE_LIMITATION_PP));
+ if (unusableMovesBits == 0xF) // all 4 moves cannot be chosen
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+ else // at least one move can be chosen
+ {
+ u32 movePosition;
+
+ do
+ movePosition = Random() & 3;
+ while ((gBitTable[movePosition] & unusableMovesBits));
+ gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition];
+ gCurrMovePos = movePosition;
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gBattlerTarget = GetMoveTarget(gCalledMove, 0);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+void atkAA_setdestinybond(void)
+{
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_DESTINY_BOND;
+ ++gBattlescriptCurrInstr;
+}
+
+void TrySetDestinyBondToHappen(void)
+{
+ u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
+ u8 sideTarget = GetBattlerSide(gBattlerTarget);
+
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_DESTINY_BOND
+ && sideAttacker != sideTarget
+ && !(gHitMarker & HITMARKER_GRUDGE))
+ gHitMarker |= HITMARKER_DESTINYBOND;
+}
+
+void atkAB_trysetdestinybondtohappen(void)
+{
+ TrySetDestinyBondToHappen();
+ ++gBattlescriptCurrInstr;
+}
+
+void atkAC_remaininghptopower(void)
+{
+ s32 i;
+ s32 hpFraction = GetScaledHPFraction(gBattleMons[gBattlerAttacker].hp, gBattleMons[gBattlerAttacker].maxHP, 48);
+
+ for (i = 0; i < (s32)sizeof(sFlailHpScaleToPowerTable); i += 2)
+ {
+ if (hpFraction <= sFlailHpScaleToPowerTable[i])
+ break;
+ }
+ gDynamicBasePower = sFlailHpScaleToPowerTable[i + 1];
+ ++gBattlescriptCurrInstr;
+}
+
+void atkAD_tryspiteppreduce(void)
+{
+ if (gLastMoves[gBattlerTarget] != MOVE_NONE && gLastMoves[gBattlerTarget] != 0xFFFF)
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ if (gLastMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i])
+ break;
+ if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] > 1)
+ {
+ s32 ppToDeduct = (Random() & 3) + 2;
+
+ if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct)
+ ppToDeduct = gBattleMons[gBattlerTarget].pp[i];
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget])
+ ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, 0, 1);
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct)
+ gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct;
+ gActiveBattler = gBattlerTarget;
+ if (!(gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[i])
+ && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
+ {
+ BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBattler].pp[i]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ gBattlescriptCurrInstr += 5;
+ if (gBattleMons[gBattlerTarget].pp[i] == 0)
+ CancelMultiTurnMoves(gBattlerTarget);
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+void atkAE_healpartystatus(void)
+{
+ u32 zero = 0;
+ u8 toHeal = 0;
+
+ if (gCurrentMove == MOVE_HEAL_BELL)
+ {
+ struct Pokemon *party;
+ s32 i;
+
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+ if (gBattleMons[gBattlerAttacker].ability != ABILITY_SOUNDPROOF)
+ {
+ gBattleMons[gBattlerAttacker].status1 = 0;
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ }
+ else
+ {
+ RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability);
+ gBattleCommunication[MULTISTRING_CHOOSER] |= 1;
+ }
+ gActiveBattler = gBattleScripting.battler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ if (gBattleMons[gActiveBattler].ability != ABILITY_SOUNDPROOF)
+ {
+ gBattleMons[gActiveBattler].status1 = 0;
+ gBattleMons[gActiveBattler].status2 &= ~(STATUS2_NIGHTMARE);
+ }
+ else
+ {
+ RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability);
+ gBattleCommunication[MULTISTRING_CHOOSER] |= 2;
+ }
+ }
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ u16 species = GetMonData(&party[i], MON_DATA_SPECIES2);
+ u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM);
+
+ if (species != SPECIES_NONE && species != SPECIES_EGG)
+ {
+ u8 ability;
+
+ if (gBattlerPartyIndexes[gBattlerAttacker] == i)
+ ability = gBattleMons[gBattlerAttacker].ability;
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && gBattlerPartyIndexes[gActiveBattler] == i
+ && !(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ ability = gBattleMons[gActiveBattler].ability;
+ else
+ ability = GetAbilityBySpecies(species, abilityNum);
+ if (ability != ABILITY_SOUNDPROOF)
+ toHeal |= (1 << i);
+ }
+ }
+ }
+ else // Aromatherapy
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ toHeal = 0x3F;
+ gBattleMons[gBattlerAttacker].status1 = 0;
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ gBattleMons[gActiveBattler].status1 = 0;
+ gBattleMons[gActiveBattler].status2 &= ~(STATUS2_NIGHTMARE);
+ }
+
+ }
+ if (toHeal)
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, toHeal, 4, &zero);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+void atkAF_cursetarget(void)
+{
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_CURSED)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_CURSED;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+void atkB0_trysetspikes(void)
+{
+ u8 targetSide = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
+
+ if (gSideTimers[targetSide].spikesAmount == 3)
+ {
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gSideStatuses[targetSide] |= SIDE_STATUS_SPIKES;
+ ++gSideTimers[targetSide].spikesAmount;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+void atkB1_setforesight(void)
+{
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_FORESIGHT;
+ ++gBattlescriptCurrInstr;
+}
+
+void atkB2_trysetperishsong(void)
+{
+ s32 i;
+ s32 notAffectedCount = 0;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gStatuses3[i] & STATUS3_PERISH_SONG
+ || gBattleMons[i].ability == ABILITY_SOUNDPROOF)
+ {
+ ++notAffectedCount;
+ }
+ else
+ {
+ gStatuses3[i] |= STATUS3_PERISH_SONG;
+ gDisableStructs[i].perishSongTimer = 3;
+ gDisableStructs[i].perishSongTimerStartValue = 3;
+ }
+ }
+ PressurePPLoseOnUsingPerishSong(gBattlerAttacker);
+ if (notAffectedCount == gBattlersCount)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+void atkB3_rolloutdamagecalculation(void)
+{
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ {
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveMissedPause;
+ }
+ else
+ {
+ s32 i;
+
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) // first hit
+ {
+ gDisableStructs[gBattlerAttacker].rolloutTimer = 5;
+ gDisableStructs[gBattlerAttacker].rolloutTimerStartValue = 5;
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMoves[gBattlerAttacker] = gCurrentMove;
+ }
+ if (--gDisableStructs[gBattlerAttacker].rolloutTimer == 0) // last hit
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_MULTIPLETURNS);
+ gDynamicBasePower = gBattleMoves[gCurrentMove].power;
+ for (i = 1; i < (5 - gDisableStructs[gBattlerAttacker].rolloutTimer); ++i)
+ gDynamicBasePower *= 2;
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_DEFENSE_CURL)
+ gDynamicBasePower *= 2;
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+void atkB4_jumpifconfusedandstatmaxed(void)
+{
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION
+ && gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == 12)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+void atkB5_furycuttercalc(void)
+{
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ {
+ gDisableStructs[gBattlerAttacker].furyCutterCounter = 0;
+ gBattlescriptCurrInstr = BattleScript_MoveMissedPause;
+ }
+ else
+ {
+ s32 i;
+
+ if (gDisableStructs[gBattlerAttacker].furyCutterCounter != 5)
+ ++gDisableStructs[gBattlerAttacker].furyCutterCounter;
+ gDynamicBasePower = gBattleMoves[gCurrentMove].power;
+
+ for (i = 1; i < gDisableStructs[gBattlerAttacker].furyCutterCounter; ++i)
+ gDynamicBasePower *= 2;
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+void atkB6_happinesstodamagecalculation(void)
+{
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_RETURN)
+ gDynamicBasePower = 10 * (gBattleMons[gBattlerAttacker].friendship) / 25;
+ else // EFFECT_FRUSTRATION
+ gDynamicBasePower = 10 * (255 - gBattleMons[gBattlerAttacker].friendship) / 25;
+ ++gBattlescriptCurrInstr;
+}
+
+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[gBattlerTarget].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ }
+ if (rand < 204)
+ {
+ gBattlescriptCurrInstr = BattleScript_HitFromCritCalc;
+ }
+ else if (gBattleMons[gBattlerTarget].maxHP == gBattleMons[gBattlerTarget].hp)
+ {
+ gBattlescriptCurrInstr = BattleScript_AlreadyAtFullHp;
+ }
+ else
+ {
+ gMoveResultFlags &= ~(MOVE_RESULT_DOESNT_AFFECT_FOE);
+ gBattlescriptCurrInstr = BattleScript_PresentHealTarget;
+ }
+}
+
+void atkB8_setsafeguard(void)
+{
+ if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_SAFEGUARD)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else
+ {
+ gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_SAFEGUARD;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].safeguardTimer = 5;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].safeguardBattlerId = gBattlerAttacker;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 5;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+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;
+ }
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 2, magnitude)
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; ++gBattlerTarget)
+ {
+ if (gBattlerTarget == gBattlerAttacker)
+ continue;
+ if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) // a valid target was found
+ break;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+void atkBA_jumpifnopursuitswitchdmg(void)
+{
+ if (gMultiHitCounter == 1)
+ {
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ else
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ }
+ else
+ {
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ else
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ }
+ if (gChosenActionByBattler[gBattlerTarget] == B_ACTION_USE_MOVE
+ && gBattlerAttacker == *(gBattleStruct->moveTarget + gBattlerTarget)
+ && !(gBattleMons[gBattlerTarget].status1 & (STATUS1_SLEEP | STATUS1_FREEZE))
+ && gBattleMons[gBattlerAttacker].hp
+ && !gDisableStructs[gBattlerTarget].truantCounter
+ && gChosenMoveByBattler[gBattlerTarget] == MOVE_PURSUIT)
+ {
+ s32 i;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ if (gBattlerByTurnOrder[i] == gBattlerTarget)
+ gActionsByTurnOrder[i] = 11;
+ gCurrentMove = MOVE_PURSUIT;
+ gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerTarget);
+ gBattlescriptCurrInstr += 5;
+ gBattleScripting.animTurn = 1;
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+void atkBB_setsunny(void)
+{
+ if (gBattleWeather & WEATHER_SUN_ANY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = WEATHER_SUN_TEMPORARY;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+void atkBC_maxattackhalvehp(void) // belly drum
+{
+ u32 halfHp = gBattleMons[gBattlerAttacker].maxHP / 2;
+
+ if (!(gBattleMons[gBattlerAttacker].maxHP / 2))
+ halfHp = 1;
+ if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < 12
+ && gBattleMons[gBattlerAttacker].hp > halfHp)
+ {
+ gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = 12;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+void atkBD_copyfoestats(void) // psych up
+{
+ s32 i;
+
+ for (i = 0; i < NUM_BATTLE_STATS; ++i)
+ gBattleMons[gBattlerAttacker].statStages[i] = gBattleMons[gBattlerTarget].statStages[i];
+ gBattlescriptCurrInstr += 5; // Has an unused jump ptr(possibly for a failed attempt) parameter.
+}
+
+void atkBE_rapidspinfree(void)
+{
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_WRAPPED)
+ {
+ gBattleScripting.battler = gBattlerTarget;
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_WRAPPED);
+ gBattlerTarget = *(gBattleStruct->wrappedBy + gBattlerAttacker);
+ gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ gBattleTextBuff1[1] = B_BUFF_MOVE;
+ gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gBattlerAttacker * 2 + 0);
+ gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gBattlerAttacker * 2 + 1);
+ gBattleTextBuff1[4] = B_BUFF_EOS;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_WrapFree;
+ }
+ else if (gStatuses3[gBattlerAttacker] & STATUS3_LEECHSEED)
+ {
+ gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED);
+ gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED_BATTLER);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_LeechSeedFree;
+ }
+ else if (gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_SPIKES)
+ {
+ gSideStatuses[GetBattlerSide(gBattlerAttacker)] &= ~(SIDE_STATUS_SPIKES);
+ gSideTimers[GetBattlerSide(gBattlerAttacker)].spikesAmount = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SpikesFree;
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+void atkBF_setdefensecurlbit(void)
+{
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_DEFENSE_CURL;
+ ++gBattlescriptCurrInstr;
+}
+
+void atkC0_recoverbasedonsunlight(void)
+{
+ gBattlerTarget = gBattlerAttacker;
+ if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP)
+ {
+ if (gBattleWeather == 0 || !WEATHER_HAS_EFFECT)
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
+ else if (gBattleWeather & WEATHER_SUN_ANY)
+ gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30;
+ else // not sunny weather
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4;
+
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
diff --git a/src/battle_util.c b/src/battle_util.c
index 83d24f5e1..5e86425a9 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -926,12 +926,12 @@ u8 DoBattlerEndTurnEffects(void)
}
if (i == MAX_MON_MOVES) // pokemon does not have the disabled move anymore
{
- gDisableStructs[gActiveBattler].disabledMove = 0;
+ gDisableStructs[gActiveBattler].disabledMove = MOVE_NONE;
gDisableStructs[gActiveBattler].disableTimer = 0;
}
else if (--gDisableStructs[gActiveBattler].disableTimer == 0) // disable ends
{
- gDisableStructs[gActiveBattler].disabledMove = 0;
+ gDisableStructs[gActiveBattler].disabledMove = MOVE_NONE;
BattleScriptExecute(BattleScript_DisabledNoMore);
++effect;
}
@@ -943,13 +943,13 @@ u8 DoBattlerEndTurnEffects(void)
{
if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // pokemon does not have the encored move anymore
{
- gDisableStructs[gActiveBattler].encoredMove = 0;
+ gDisableStructs[gActiveBattler].encoredMove = MOVE_NONE;
gDisableStructs[gActiveBattler].encoreTimer = 0;
}
else if (--gDisableStructs[gActiveBattler].encoreTimer == 0
|| gBattleMons[gActiveBattler].pp[gDisableStructs[gActiveBattler].encoredMovePos] == 0)
{
- gDisableStructs[gActiveBattler].encoredMove = 0;
+ gDisableStructs[gActiveBattler].encoredMove = MOVE_NONE;
gDisableStructs[gActiveBattler].encoreTimer = 0;
BattleScriptExecute(BattleScript_EncoredNoMore);
++effect;
@@ -1307,7 +1307,7 @@ u8 AtkCanceller_UnableToUseMove(void)
++gBattleStruct->atkCancellerTracker;
break;
case CANCELLER_DISABLED: // disabled move
- if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != 0)
+ if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE)
{
gProtectStructs[gBattlerAttacker].usedDisabledMove = 1;
gBattleScripting.battler = gBattlerAttacker;