summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-01 12:25:38 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-01 12:30:36 +0800
commit3eb1f1bc783308dac445eaacc05c9f14e9b78822 (patch)
tree06d89a04aba616f770da97c73569dbfe1de96141
parentc88c9c6edfb7122524b319e4601c5d2b97bf06ca (diff)
matched AbilityBattleEffects
-rw-r--r--asm/battle_2.s38
-rw-r--r--asm/battle_script_commands.s64
-rw-r--r--asm/battle_util.s4972
-rw-r--r--asm/field_weather.s6
-rw-r--r--data/data.s14
-rw-r--r--include/battle.h52
-rw-r--r--include/battle_scripts.h5
-rw-r--r--include/battle_util.h42
-rw-r--r--include/field_weather.h1
-rw-r--r--src/battle_ai_script_commands.c2
-rw-r--r--src/battle_util.c1230
-rw-r--r--src/pokemon.c2
-rw-r--r--sym_ewram.txt4
13 files changed, 1349 insertions, 5083 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 54e773828..a80099a6a 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -5266,7 +5266,7 @@ _080127B0:
ldrb r7, [r7]
cmp r5, r7
bge _08012824
- ldr r0, _080128E0 @ =gChosenMoveByBattler
+ ldr r0, _080128E0 @ =gUnknown_2023C34
mov r8, r0
ldr r3, _080128C4 @ =gDisableStructs
ldr r4, _080128D4 @ =gStatuses3
@@ -5403,7 +5403,7 @@ _080128D0: .4byte gCurrentMove
_080128D4: .4byte gStatuses3
_080128D8: .4byte gBattleMons
_080128DC: .4byte gBattlersCount
-_080128E0: .4byte gChosenMoveByBattler
+_080128E0: .4byte gUnknown_2023C34
_080128E4: .4byte 0xfbffffff
_080128E8: .4byte 0x15100007
_080128EC: .4byte 0x0003043f
@@ -5431,7 +5431,7 @@ _0801290C:
ldrb r6, [r6]
cmp r5, r6
bge _0801296C
- ldr r0, _08012B8C @ =gChosenMoveByBattler
+ ldr r0, _08012B8C @ =gUnknown_2023C34
mov r8, r0
ldr r6, _08012B90 @ =gBitTable
ldr r4, _08012B94 @ =gActiveBattler
@@ -5749,7 +5749,7 @@ _08012B7C: .4byte gBattleMons
_08012B80: .4byte gBattleStruct
_08012B84: .4byte gActionSelectionCursor
_08012B88: .4byte gBattlersCount
-_08012B8C: .4byte gChosenMoveByBattler
+_08012B8C: .4byte gUnknown_2023C34
_08012B90: .4byte gBitTable
_08012B94: .4byte gActiveBattler
_08012B98: .4byte 0xffff1fff
@@ -7571,7 +7571,7 @@ _08013A22:
mov r8, r1
movs r7, 0x6
ldr r6, _08013AF4 @ =gUnknown_2023D7C
- ldr r2, _08013AF8 @ =gUnknown_2023DC4
+ ldr r2, _08013AF8 @ =gChosenMoveByBattler
movs r4, 0xFF
movs r3, 0
_08013A32:
@@ -7671,7 +7671,7 @@ _08013AE8: .4byte gBattleStruct
_08013AEC: .4byte gBattlersCount
_08013AF0: .4byte gBattlerByTurnOrder
_08013AF4: .4byte gUnknown_2023D7C
-_08013AF8: .4byte gUnknown_2023DC4
+_08013AF8: .4byte gChosenMoveByBattler
_08013AFC: .4byte gAbsentBattlerFlags
_08013B00: .4byte gBattleMainFunc
_08013B04: .4byte sub_8014040
@@ -7894,7 +7894,7 @@ _08013CBC:
ldr r7, _08013D48 @ =gUnknown_2023D7C
movs r6, 0xFF
movs r5, 0
- ldr r3, _08013D4C @ =gUnknown_2023DC4
+ ldr r3, _08013D4C @ =gChosenMoveByBattler
_08013CDE:
adds r1, r2, r7
ldrb r0, [r1]
@@ -7946,7 +7946,7 @@ _08013D3C: .4byte gBattleMainFunc
_08013D40: .4byte gAbsentBattlerFlags
_08013D44: .4byte sub_8014040
_08013D48: .4byte gUnknown_2023D7C
-_08013D4C: .4byte gUnknown_2023DC4
+_08013D4C: .4byte gChosenMoveByBattler
_08013D50: .4byte gUnknown_2023E80
thumb_func_end BattleTurnPassed
@@ -8631,7 +8631,7 @@ _080142D8:
ldrh r2, [r0, 0x6]
cmp r2, 0
beq _0801432C
- ldr r1, _08014320 @ =gUnknown_2023DC4
+ ldr r1, _08014320 @ =gChosenMoveByBattler
lsls r0, r4, 1
adds r0, r1
strh r2, [r0]
@@ -8655,7 +8655,7 @@ _080142D8:
.align 2, 0
_08014318: .4byte gDisableStructs
_0801431C: .4byte gActiveBattler
-_08014320: .4byte gUnknown_2023DC4
+_08014320: .4byte gChosenMoveByBattler
_08014324: .4byte gBattleStruct
_08014328: .4byte gBattleCommunication
_0801432C:
@@ -9300,7 +9300,7 @@ _0801487C:
adds r0, r6
ldrb r0, [r0]
strb r0, [r1]
- ldr r0, _080148CC @ =gUnknown_2023DC4
+ ldr r0, _080148CC @ =gChosenMoveByBattler
ldrb r2, [r2]
lsls r5, r2, 1
adds r5, r0
@@ -9329,7 +9329,7 @@ _0801487C:
b _08014B30
.align 2, 0
_080148C8: .4byte gBattleStruct
-_080148CC: .4byte gUnknown_2023DC4
+_080148CC: .4byte gChosenMoveByBattler
_080148D0: .4byte gBattleMons
_080148D4: .4byte gBattleCommunication
_080148D8:
@@ -10662,7 +10662,7 @@ TurnValuesCleanUp: @ 8015330
beq _08015428
ldr r7, _08015390 @ =gProtectStructs
adds r6, r5, 0
- ldr r0, _08015394 @ =gChosenMoveByBattler
+ ldr r0, _08015394 @ =gUnknown_2023C34
mov r12, r0
ldr r1, _08015398 @ =gDisableStructs
mov r8, r1
@@ -10692,7 +10692,7 @@ _0801535E:
_08015388: .4byte gActiveBattler
_0801538C: .4byte gBattlersCount
_08015390: .4byte gProtectStructs
-_08015394: .4byte gChosenMoveByBattler
+_08015394: .4byte gUnknown_2023C34
_08015398: .4byte gDisableStructs
_0801539C:
ldrb r0, [r6]
@@ -10866,7 +10866,7 @@ _080154CC:
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
- ldr r1, _0801553C @ =gUnknown_2023DC4
+ ldr r1, _0801553C @ =gChosenMoveByBattler
ldrb r3, [r5]
lsls r0, r3, 1
adds r0, r1
@@ -10909,7 +10909,7 @@ _0801552C: .4byte gBattleStruct
_08015530: .4byte gBattlersCount
_08015534: .4byte gActiveBattler
_08015538: .4byte gBattlerAttacker
-_0801553C: .4byte gUnknown_2023DC4
+_0801553C: .4byte gChosenMoveByBattler
_08015540: .4byte gBattleMons
_08015544: .4byte gDisableStructs
_08015548: .4byte gProtectStructs
@@ -12046,7 +12046,7 @@ _08015EBC:
mov r1, r10
adds r1, 0xC
adds r0, r1
- ldr r1, _08015F00 @ =gUnknown_2023DC4
+ ldr r1, _08015F00 @ =gChosenMoveByBattler
lsls r2, 1
adds r2, r1
ldrh r3, [r0]
@@ -12069,7 +12069,7 @@ _08015EF6:
b _08015F18
.align 2, 0
_08015EFC: .4byte gBattlerAttacker
-_08015F00: .4byte gUnknown_2023DC4
+_08015F00: .4byte gChosenMoveByBattler
_08015F04: .4byte gCurrentMove
_08015F08: .4byte gChosenMove
_08015F0C: .4byte gBattleStruct
@@ -12402,7 +12402,7 @@ _080161AA:
adds r1, r2
adds r1, 0x20
ldrb r1, [r1]
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r2, _080161F0 @ =gSpecialStatuses
ldrb r1, [r4]
lsls r0, r1, 2
diff --git a/asm/battle_script_commands.s b/asm/battle_script_commands.s
index b4fd08c29..765eb317a 100644
--- a/asm/battle_script_commands.s
+++ b/asm/battle_script_commands.s
@@ -290,7 +290,7 @@ _0801D98E:
mov r1, r8
ldrb r0, [r1]
ldrb r1, [r4]
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _0801DAFC
.align 2, 0
_0801D9C8: .4byte gBattlersCount
@@ -2198,7 +2198,7 @@ _0801E8C0:
strb r1, [r0, 0x6]
ldrb r0, [r4]
ldrb r1, [r3]
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _0801E9D4
.align 2, 0
_0801E910: .4byte gBattleMoves
@@ -2355,7 +2355,7 @@ _0801EA10:
strb r0, [r1, 0x6]
ldrb r0, [r5]
ldrb r1, [r3]
- bl sub_80C71D0
+ bl RecordAbilityBattle
_0801EA52:
ldr r0, _0801EA98 @ =gMoveResultFlags
ldrb r1, [r0]
@@ -2465,7 +2465,7 @@ _0801EB08:
strb r1, [r0, 0x6]
ldrb r0, [r3]
movs r1, 0x1A
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _0801ED18
.align 2, 0
_0801EB3C: .4byte gBattleMons
@@ -2710,7 +2710,7 @@ _0801ECC2:
mov r1, r8
ldrb r0, [r1]
movs r1, 0x19
- bl sub_80C71D0
+ bl RecordAbilityBattle
_0801ED18:
pop {r3,r4}
mov r8, r3
@@ -5342,7 +5342,7 @@ _080201A6:
mov r3, r9
ldrb r0, [r3]
movs r1, 0x11
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r4, _080201D8 @ =gBattlescriptCurrInstr
ldr r0, [r4]
adds r0, 0x1
@@ -5465,7 +5465,7 @@ _0802028A:
mov r3, r9
ldrb r0, [r3]
movs r1, 0x29
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r4, _080202AC @ =gBattlescriptCurrInstr
ldr r0, [r4]
adds r0, 0x1
@@ -5656,7 +5656,7 @@ _08020402:
mov r3, r9
ldrb r0, [r3]
movs r1, 0x7
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r4, _08020424 @ =gBattlescriptCurrInstr
ldr r0, [r4]
adds r0, 0x1
@@ -5699,7 +5699,7 @@ _0802045A:
mov r1, r9
ldrb r0, [r1]
movs r1, 0x11
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r4, _08020498 @ =gBattlescriptCurrInstr
ldr r0, [r4]
adds r0, 0x1
@@ -6128,7 +6128,7 @@ _0802084C:
mov r1, r9
ldrb r0, [r1]
movs r1, 0x27
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r1, _08020868 @ =gBattlescriptCurrInstr
ldr r0, _0802086C @ =gUnknown_81D9452
str r0, [r1]
@@ -6737,7 +6737,7 @@ _08020D26:
strb r0, [r1]
ldrb r0, [r7]
ldrb r1, [r1]
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _0802110A
.align 2, 0
_08020D64: .4byte gBattleTypeFlags
@@ -7075,7 +7075,7 @@ _08021018:
str r0, [r1]
ldrb r0, [r5]
movs r1, 0x3C
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _0802110A
.align 2, 0
_0802104C: .4byte gLastUsedAbility
@@ -8017,7 +8017,7 @@ _080217C8:
ldrb r1, [r0]
adds r0, r4, 0
_080217EC:
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r0, _08021800 @ =gBattleScripting
strb r4, [r0, 0x15]
b _0802180A
@@ -12164,7 +12164,7 @@ _0802381C:
ldr r2, _08023854 @ =gDisableStructs
ldr r5, _08023858 @ =0xfeffffff
adds r3, r0, 0
- ldr r1, _0802385C @ =gChosenMoveByBattler
+ ldr r1, _0802385C @ =gUnknown_2023C34
_0802382E:
ldrb r0, [r2, 0xA]
cmp r0, 0
@@ -12189,7 +12189,7 @@ _08023846:
_08023850: .4byte gBattlersCount
_08023854: .4byte gDisableStructs
_08023858: .4byte 0xfeffffff
-_0802385C: .4byte gChosenMoveByBattler
+_0802385C: .4byte gUnknown_2023C34
_08023860:
ldr r1, _08023914 @ =gHitMarker
ldr r3, [r1]
@@ -12709,7 +12709,7 @@ atk4A_typecalc2: @ 8023C38
strb r2, [r0, 0x6]
ldrb r0, [r7]
ldrb r1, [r3]
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _08023DAE
.align 2, 0
_08023C9C: .4byte gBattleMoves
@@ -12910,7 +12910,7 @@ _08023DF0:
strb r0, [r1, 0x6]
ldrb r0, [r2]
ldrb r1, [r3]
- bl sub_80C71D0
+ bl RecordAbilityBattle
_08023E2A:
ldr r0, _08023E74 @ =gMoveResultFlags
ldrb r1, [r0]
@@ -18090,7 +18090,7 @@ atk70_recordlastability: @ 8026844
ldrb r0, [r1]
ldr r1, _08026874 @ =gLastUsedAbility
ldrb r1, [r1]
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r0, [r4]
adds r0, 0x1
str r0, [r4]
@@ -19248,7 +19248,7 @@ _0802718C:
adds r1, r6
adds r1, 0x20
ldrb r1, [r1]
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r1, _080271B8 @ =gBattlescriptCurrInstr
ldr r0, _080271BC @ =gUnknown_81D93AF
str r0, [r1]
@@ -20232,7 +20232,7 @@ _08027918:
str r4, [r5]
ldrb r1, [r2]
adds r0, r3, 0
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _08027942
.align 2, 0
_08027930: .4byte gBattleMons
@@ -20820,7 +20820,7 @@ _08027DB4:
strb r0, [r1]
ldrb r0, [r2]
ldrb r1, [r1]
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r6, _08027DFC @ =gActiveBattler
ldrb r1, [r6]
lsls r0, r1, 2
@@ -20873,7 +20873,7 @@ _08027E0C:
strb r0, [r1]
ldrb r0, [r3]
ldrb r1, [r1]
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _08027D48
.align 2, 0
_08027E58: .4byte gActiveBattler
@@ -20918,7 +20918,7 @@ _08027E8E:
strb r0, [r1]
ldrb r0, [r2]
ldrb r1, [r1]
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _08027D48
.align 2, 0
_08027EBC: .4byte gActiveBattler
@@ -22333,7 +22333,7 @@ _08028998:
mov r1, r9
ldrb r0, [r1]
movs r1, 0x5
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _08028C48
.align 2, 0
_080289D4: .4byte gPotentialItemEffectBattler
@@ -23030,7 +23030,7 @@ _08028F1C:
strb r2, [r0]
ldrb r0, [r5]
movs r1, 0xC
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _0802902C
.align 2, 0
_08028F78: .4byte gBattlerPartyIndexes
@@ -26040,7 +26040,7 @@ _0802A738: .4byte 0xf7ffffff
_0802A73C:
ldrb r1, [r1]
adds r0, r3, 0
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldrb r0, [r6, 0x5]
movs r1, 0x1
orrs r0, r1
@@ -26113,7 +26113,7 @@ _0802A7DC: .4byte 0xf7ffffff
_0802A7E0:
ldrb r1, [r1]
adds r0, r3, 0
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r1, _0802A838 @ =gBattleCommunication
ldrb r0, [r1, 0x5]
mov r2, r9
@@ -27382,7 +27382,7 @@ _0802B1A2:
lsls r0, 31
cmp r0, 0
bne _0802B2A8
- ldr r0, _0802B27C @ =gUnknown_2023DC4
+ ldr r0, _0802B27C @ =gChosenMoveByBattler
lsls r1, r3, 1
adds r1, r0
ldrh r0, [r1]
@@ -27454,7 +27454,7 @@ _0802B26C: .4byte gBattlerAttacker
_0802B270: .4byte gBattleStruct
_0802B274: .4byte gBattleMons
_0802B278: .4byte gDisableStructs
-_0802B27C: .4byte gUnknown_2023DC4
+_0802B27C: .4byte gChosenMoveByBattler
_0802B280: .4byte gBattlersCount
_0802B284: .4byte gCurrentMove
_0802B288: .4byte gUnknown_2023D48
@@ -29442,7 +29442,7 @@ _0802C224:
strb r0, [r1]
ldrb r0, [r7]
ldrb r1, [r1]
- bl sub_80C71D0
+ bl RecordAbilityBattle
b _0802C37A
.align 2, 0
_0802C24C: .4byte gBattlescriptCurrInstr
@@ -31575,7 +31575,7 @@ atkEC_pursuitrelated: @ 802D2A0
ldrb r0, [r0]
cmp r0, 0
bne _0802D340
- ldr r1, _0802D32C @ =gUnknown_2023DC4
+ ldr r1, _0802D32C @ =gChosenMoveByBattler
lsls r0, r3, 1
adds r0, r1
ldrh r2, [r0]
@@ -31606,7 +31606,7 @@ _0802D31C: .4byte gBattleTypeFlags
_0802D320: .4byte gAbsentBattlerFlags
_0802D324: .4byte gBitTable
_0802D328: .4byte gUnknown_2023D7C
-_0802D32C: .4byte gUnknown_2023DC4
+_0802D32C: .4byte gChosenMoveByBattler
_0802D330: .4byte gUnknown_2023BDA
_0802D334: .4byte gCurrentMove
_0802D338: .4byte gBattlescriptCurrInstr
diff --git a/asm/battle_util.s b/asm/battle_util.s
index b2ed61f7a..a6b77a6e4 100644
--- a/asm/battle_util.s
+++ b/asm/battle_util.s
@@ -5,4920 +5,6 @@
.text
- thumb_func_start TryClearRageStatuses
-TryClearRageStatuses: @ 8019284
- push {r4-r6,lr}
- movs r3, 0
- ldr r0, _080192C4 @ =gBattlersCount
- adds r5, r0, 0
- ldrb r0, [r5]
- cmp r3, r0
- bge _080192BC
- ldr r4, _080192C8 @ =gUnknown_2023DC4
- movs r6, 0x80
- lsls r6, 16
- ldr r2, _080192CC @ =gChosenMoveByBattler
-_0801929A:
- ldr r1, [r2]
- adds r0, r1, 0
- ands r0, r6
- cmp r0, 0
- beq _080192B0
- ldrh r0, [r4]
- cmp r0, 0x63
- beq _080192B0
- ldr r0, _080192D0 @ =0xff7fffff
- ands r1, r0
- str r1, [r2]
-_080192B0:
- adds r4, 0x2
- adds r2, 0x58
- adds r3, 0x1
- ldrb r0, [r5]
- cmp r3, r0
- blt _0801929A
-_080192BC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080192C4: .4byte gBattlersCount
-_080192C8: .4byte gUnknown_2023DC4
-_080192CC: .4byte gChosenMoveByBattler
-_080192D0: .4byte 0xff7fffff
- thumb_func_end TryClearRageStatuses
-
- thumb_func_start AtkCanceller_UnableToUseMove
-AtkCanceller_UnableToUseMove: @ 80192D4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- movs r0, 0
- mov r9, r0
- ldr r1, _080192F0 @ =gUnknown_2023FC8
- mov r10, r1
- ldr r2, _080192F4 @ =gBattleStruct
- mov r8, r2
- b _08019302
- .align 2, 0
-_080192F0: .4byte gUnknown_2023FC8
-_080192F4: .4byte gBattleStruct
-_080192F8:
- mov r4, r9
- cmp r4, 0
- beq _08019302
- bl _08019BA8
-_08019302:
- mov r7, r8
- ldr r0, [r7]
- adds r0, 0xB7
- ldrb r0, [r0]
- cmp r0, 0xF
- bls _08019312
- bl _08019B98
-_08019312:
- lsls r0, 2
- ldr r1, _0801931C @ =_08019320
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801931C: .4byte _08019320
- .align 2, 0
-_08019320:
- .4byte _08019360
- .4byte _080193A4
- .4byte _080194E0
- .4byte _08019598
- .4byte _0801960C
- .4byte _08019678
- .4byte _080196E0
- .4byte _08019754
- .4byte _080197B8
- .4byte _08019814
- .4byte _080198F8
- .4byte _08019974
- .4byte _080199C8
- .4byte _08019A60
- .4byte _08019B40
- .4byte _08019B98
-_08019360:
- ldr r1, _08019390 @ =gBattleMons
- ldr r3, _08019394 @ =gBattlerAttacker
- ldrb r2, [r3]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- ldr r1, _08019398 @ =0xfdffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801939C @ =gStatuses3
- ldrb r2, [r3]
- lsls r2, 2
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _080193A0 @ =0xffffbfff
- ands r0, r1
- str r0, [r2]
- mov r0, r8
- ldr r1, [r0]
- bl _08019B90
- .align 2, 0
-_08019390: .4byte gBattleMons
-_08019394: .4byte gBattlerAttacker
-_08019398: .4byte 0xfdffffff
-_0801939C: .4byte gStatuses3
-_080193A0: .4byte 0xffffbfff
-_080193A4:
- ldr r7, _0801940C @ =gBattleMons
- ldr r4, _08019410 @ =gBattlerAttacker
- ldrb r1, [r4]
- movs r5, 0x58
- adds r0, r1, 0
- muls r0, r5
- adds r6, r7, 0
- adds r6, 0x4C
- adds r0, r6
- ldr r0, [r0]
- movs r2, 0x7
- mov r8, r2
- ands r0, r2
- cmp r0, 0
- bne _080193C4
- b _08019946
-_080193C4:
- adds r0, r1, 0
- bl UproarWakeUpCheck
- lsls r0, 24
- cmp r0, 0
- beq _08019424
- ldrb r0, [r4]
- adds r2, r0, 0
- muls r2, r5
- adds r2, r6
- ldr r0, [r2]
- movs r1, 0x8
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- ldrb r0, [r4]
- adds r2, r0, 0
- muls r2, r5
- adds r0, r7, 0
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _08019414 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _08019418 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- ldr r1, _0801941C @ =gBattlescriptCurrInstr
- ldr r0, _08019420 @ =BattleScript_MoveUsedWokeUp
- str r0, [r1]
- movs r4, 0x2
- mov r9, r4
- b _08019946
- .align 2, 0
-_0801940C: .4byte gBattleMons
-_08019410: .4byte gBattlerAttacker
-_08019414: .4byte 0xf7ffffff
-_08019418: .4byte gBattleCommunication
-_0801941C: .4byte gBattlescriptCurrInstr
-_08019420: .4byte BattleScript_MoveUsedWokeUp
-_08019424:
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r5
- adds r0, r1, r7
- adds r0, 0x20
- ldrb r0, [r0]
- movs r3, 0x1
- cmp r0, 0x30
- bne _08019438
- movs r3, 0x2
-_08019438:
- adds r2, r1, r6
- ldr r1, [r2]
- adds r0, r1, 0
- mov r7, r8
- ands r0, r7
- cmp r0, r3
- bcs _08019450
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- b _08019454
-_08019450:
- subs r0, r1, r3
- str r0, [r2]
-_08019454:
- ldr r2, _08019498 @ =gBattleMons
- ldr r0, _0801949C @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r4, [r0]
- movs r0, 0x7
- ands r4, r0
- cmp r4, 0
- beq _080194B0
- ldr r0, _080194A0 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xAD
- bne _08019478
- b _08019946
-_08019478:
- cmp r0, 0xD6
- bne _0801947E
- b _08019946
-_0801947E:
- ldr r1, _080194A4 @ =gBattlescriptCurrInstr
- ldr r0, _080194A8 @ =BattleScript_MoveUsedIsAsleep
- str r0, [r1]
- ldr r2, _080194AC @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r0, 0x2
- mov r9, r0
- b _08019946
- .align 2, 0
-_08019498: .4byte gBattleMons
-_0801949C: .4byte gBattlerAttacker
-_080194A0: .4byte gCurrentMove
-_080194A4: .4byte gBattlescriptCurrInstr
-_080194A8: .4byte BattleScript_MoveUsedIsAsleep
-_080194AC: .4byte gHitMarker
-_080194B0:
- adds r2, 0x50
- adds r2, r1, r2
- ldr r0, [r2]
- ldr r1, _080194D0 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r0, _080194D4 @ =gBattleCommunication
- strb r4, [r0, 0x5]
- ldr r1, _080194D8 @ =gBattlescriptCurrInstr
- ldr r0, _080194DC @ =BattleScript_MoveUsedWokeUp
- str r0, [r1]
- movs r1, 0x2
- mov r9, r1
- b _08019946
- .align 2, 0
-_080194D0: .4byte 0xf7ffffff
-_080194D4: .4byte gBattleCommunication
-_080194D8: .4byte gBattlescriptCurrInstr
-_080194DC: .4byte BattleScript_MoveUsedWokeUp
-_080194E0:
- ldr r1, _0801953C @ =gBattleMons
- ldr r7, _08019540 @ =gBattlerAttacker
- ldrb r0, [r7]
- movs r6, 0x58
- muls r0, r6
- adds r5, r1, 0
- adds r5, 0x4C
- adds r0, r5
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08019580
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _08019558
- ldr r2, _08019544 @ =gBattleMoves
- ldr r0, _08019548 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7D
- bne _08019526
- b _08019946
-_08019526:
- ldr r1, _0801954C @ =gBattlescriptCurrInstr
- ldr r0, _08019550 @ =BattleScript_MoveUsedIsFrozen
- str r0, [r1]
- ldr r2, _08019554 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 2
- orrs r0, r1
- str r0, [r2]
- b _08019578
- .align 2, 0
-_0801953C: .4byte gBattleMons
-_08019540: .4byte gBattlerAttacker
-_08019544: .4byte gBattleMoves
-_08019548: .4byte gCurrentMove
-_0801954C: .4byte gBattlescriptCurrInstr
-_08019550: .4byte BattleScript_MoveUsedIsFrozen
-_08019554: .4byte gHitMarker
-_08019558:
- ldrb r0, [r7]
- adds r2, r0, 0
- muls r2, r6
- adds r2, r5
- ldr r0, [r2]
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _08019588 @ =gBattlescriptCurrInstr
- ldr r0, _0801958C @ =BattleScript_MoveUsedUnfroze
- str r0, [r1]
- ldr r0, _08019590 @ =gBattleCommunication
- strb r4, [r0, 0x5]
-_08019578:
- movs r2, 0x2
- mov r9, r2
- ldr r4, _08019594 @ =gBattleStruct
- mov r8, r4
-_08019580:
- mov r7, r8
- ldr r1, [r7]
- b _08019B90
- .align 2, 0
-_08019588: .4byte gBattlescriptCurrInstr
-_0801958C: .4byte BattleScript_MoveUsedUnfroze
-_08019590: .4byte gBattleCommunication
-_08019594: .4byte gBattleStruct
-_08019598:
- ldr r1, _080195EC @ =gBattleMons
- ldr r0, _080195F0 @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x36
- beq _080195AE
- b _08019946
-_080195AE:
- ldr r0, _080195F4 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x18]
- lsls r0, 31
- cmp r0, 0
- bne _080195C2
- b _08019946
-_080195C2:
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- ldr r2, _080195F8 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- ldr r1, _080195FC @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- ldr r1, _08019600 @ =gBattlescriptCurrInstr
- ldr r0, _08019604 @ =BattleScript_MoveUsedLoafingAround
- str r0, [r1]
- ldr r2, _08019608 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- b _080197F4
- .align 2, 0
-_080195EC: .4byte gBattleMons
-_080195F0: .4byte gBattlerAttacker
-_080195F4: .4byte gDisableStructs
-_080195F8: .4byte gHitMarker
-_080195FC: .4byte gBattleCommunication
-_08019600: .4byte gBattlescriptCurrInstr
-_08019604: .4byte BattleScript_MoveUsedLoafingAround
-_08019608: .4byte gMoveResultFlags
-_0801960C:
- ldr r1, _0801965C @ =gBattleMons
- ldr r3, _08019660 @ =gBattlerAttacker
- ldrb r2, [r3]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 15
- ands r0, r1
- cmp r0, 0
- bne _08019628
- b _08019946
-_08019628:
- ldr r0, _08019664 @ =0xffbfffff
- ands r1, r0
- str r1, [r2]
- ldr r2, _08019668 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x19]
- ldrb r0, [r3]
- bl CancelMultiTurnMoves
- ldr r1, _0801966C @ =gBattlescriptCurrInstr
- ldr r0, _08019670 @ =BattleScript_MoveUsedMustRecharge
- str r0, [r1]
- ldr r2, _08019674 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r1, 0x1
- mov r9, r1
- b _08019946
- .align 2, 0
-_0801965C: .4byte gBattleMons
-_08019660: .4byte gBattlerAttacker
-_08019664: .4byte 0xffbfffff
-_08019668: .4byte gDisableStructs
-_0801966C: .4byte gBattlescriptCurrInstr
-_08019670: .4byte BattleScript_MoveUsedMustRecharge
-_08019674: .4byte gHitMarker
-_08019678:
- ldr r1, _080196C8 @ =gBattleMons
- ldr r3, _080196CC @ =gBattlerAttacker
- ldrb r2, [r3]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08019692
- b _08019946
-_08019692:
- movs r0, 0x9
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- ldr r0, _080196D0 @ =gProtectStructs
- ldrb r2, [r3]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x2]
- ldrb r0, [r3]
- bl CancelMultiTurnMoves
- ldr r1, _080196D4 @ =gBattlescriptCurrInstr
- ldr r0, _080196D8 @ =BattleScript_MoveUsedFlinched
- str r0, [r1]
- ldr r2, _080196DC @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r2, 0x1
- mov r9, r2
- b _08019946
- .align 2, 0
-_080196C8: .4byte gBattleMons
-_080196CC: .4byte gBattlerAttacker
-_080196D0: .4byte gProtectStructs
-_080196D4: .4byte gBattlescriptCurrInstr
-_080196D8: .4byte BattleScript_MoveUsedFlinched
-_080196DC: .4byte gHitMarker
-_080196E0:
- ldr r0, _08019734 @ =gDisableStructs
- ldr r3, _08019738 @ =gBattlerAttacker
- ldrb r2, [r3]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldr r0, _0801973C @ =gCurrentMove
- ldrh r1, [r1, 0x4]
- ldrh r0, [r0]
- cmp r1, r0
- beq _080196FA
- b _08019946
-_080196FA:
- cmp r1, 0
- bne _08019700
- b _08019946
-_08019700:
- ldr r0, _08019740 @ =gProtectStructs
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x1]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldr r1, _08019744 @ =gBattleScripting
- ldrb r0, [r3]
- strb r0, [r1, 0x17]
- ldrb r0, [r3]
- bl CancelMultiTurnMoves
- ldr r1, _08019748 @ =gBattlescriptCurrInstr
- ldr r0, _0801974C @ =BattleScript_MoveUsedIsDisabled
- str r0, [r1]
- ldr r2, _08019750 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r4, 0x1
- mov r9, r4
- b _08019946
- .align 2, 0
-_08019734: .4byte gDisableStructs
-_08019738: .4byte gBattlerAttacker
-_0801973C: .4byte gCurrentMove
-_08019740: .4byte gProtectStructs
-_08019744: .4byte gBattleScripting
-_08019748: .4byte gBattlescriptCurrInstr
-_0801974C: .4byte BattleScript_MoveUsedIsDisabled
-_08019750: .4byte gHitMarker
-_08019754:
- ldr r0, _0801979C @ =gDisableStructs
- ldr r4, _080197A0 @ =gBattlerAttacker
- ldrb r3, [r4]
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x13]
- lsls r0, 28
- cmp r0, 0
- bne _0801976C
- b _08019946
-_0801976C:
- ldr r2, _080197A4 @ =gBattleMoves
- ldr r0, _080197A8 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _08019782
- b _08019946
-_08019782:
- ldr r0, _080197AC @ =gProtectStructs
- lsls r2, r3, 4
- adds r2, r0
- ldrb r0, [r2, 0x2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x2]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
- ldr r1, _080197B0 @ =gBattlescriptCurrInstr
- ldr r0, _080197B4 @ =BattleScript_MoveUsedIsTaunted
- b _08019934
- .align 2, 0
-_0801979C: .4byte gDisableStructs
-_080197A0: .4byte gBattlerAttacker
-_080197A4: .4byte gBattleMoves
-_080197A8: .4byte gCurrentMove
-_080197AC: .4byte gProtectStructs
-_080197B0: .4byte gBattlescriptCurrInstr
-_080197B4: .4byte BattleScript_MoveUsedIsTaunted
-_080197B8:
- ldr r4, _080197FC @ =gBattlerAttacker
- ldrb r0, [r4]
- ldr r1, _08019800 @ =gCurrentMove
- ldrh r1, [r1]
- bl GetImprisonedMovesCount
- lsls r0, 24
- cmp r0, 0
- bne _080197CC
- b _08019946
-_080197CC:
- ldr r0, _08019804 @ =gProtectStructs
- ldrb r2, [r4]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
- ldr r1, _08019808 @ =gBattlescriptCurrInstr
- ldr r0, _0801980C @ =BattleScript_MoveUsedIsImprisoned
- str r0, [r1]
- ldr r2, _08019810 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
-_080197F4:
- movs r0, 0x1
- mov r9, r0
- b _08019946
- .align 2, 0
-_080197FC: .4byte gBattlerAttacker
-_08019800: .4byte gCurrentMove
-_08019804: .4byte gProtectStructs
-_08019808: .4byte gBattlescriptCurrInstr
-_0801980C: .4byte BattleScript_MoveUsedIsImprisoned
-_08019810: .4byte gHitMarker
-_08019814:
- ldr r7, _0801985C @ =gBattleMons
- ldr r5, _08019860 @ =gBattlerAttacker
- ldrb r0, [r5]
- movs r6, 0x58
- muls r0, r6
- adds r4, r7, 0
- adds r4, 0x50
- adds r2, r0, r4
- ldr r1, [r2]
- movs r3, 0x7
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _080198E6
- subs r0, r1, 0x1
- str r0, [r2]
- ldrb r0, [r5]
- muls r0, r6
- adds r0, r4
- ldr r0, [r0]
- ands r0, r3
- cmp r0, 0
- beq _080198D4
- bl Random
- movs r1, 0x1
- movs r2, 0x1
- ands r2, r0
- cmp r2, 0
- beq _08019868
- ldr r1, _08019864 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- bl BattleScriptPushCursor
- b _080198B2
- .align 2, 0
-_0801985C: .4byte gBattleMons
-_08019860: .4byte gBattlerAttacker
-_08019864: .4byte gBattleCommunication
-_08019868:
- ldr r0, _080198B8 @ =gBattleCommunication
- movs r4, 0x1
- strb r1, [r0, 0x5]
- ldr r1, _080198BC @ =gBattlerTarget
- ldrb r0, [r5]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r7
- movs r0, 0x28
- str r0, [sp]
- str r2, [sp, 0x4]
- ldrb r0, [r5]
- str r0, [sp, 0x8]
- ldrb r0, [r5]
- str r0, [sp, 0xC]
- adds r0, r1, 0
- movs r2, 0x1
- movs r3, 0
- bl CalculateBaseDamage
- ldr r1, _080198C0 @ =gBattleMoveDamage
- str r0, [r1]
- ldr r0, _080198C4 @ =gProtectStructs
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- orrs r0, r4
- strb r0, [r1, 0x1]
- ldr r2, _080198C8 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
-_080198B2:
- ldr r1, _080198CC @ =gBattlescriptCurrInstr
- ldr r0, _080198D0 @ =BattleScript_MoveUsedIsConfused
- b _080198DC
- .align 2, 0
-_080198B8: .4byte gBattleCommunication
-_080198BC: .4byte gBattlerTarget
-_080198C0: .4byte gBattleMoveDamage
-_080198C4: .4byte gProtectStructs
-_080198C8: .4byte gHitMarker
-_080198CC: .4byte gBattlescriptCurrInstr
-_080198D0: .4byte BattleScript_MoveUsedIsConfused
-_080198D4:
- bl BattleScriptPushCursor
- ldr r1, _080198EC @ =gBattlescriptCurrInstr
- ldr r0, _080198F0 @ =BattleScript_MoveUsedIsConfusedNoMore
-_080198DC:
- str r0, [r1]
- movs r1, 0x1
- mov r9, r1
- ldr r2, _080198F4 @ =gBattleStruct
- mov r8, r2
-_080198E6:
- mov r4, r8
- ldr r1, [r4]
- b _08019B90
- .align 2, 0
-_080198EC: .4byte gBattlescriptCurrInstr
-_080198F0: .4byte BattleScript_MoveUsedIsConfusedNoMore
-_080198F4: .4byte gBattleStruct
-_080198F8:
- ldr r1, _08019958 @ =gBattleMons
- ldr r4, _0801995C @ =gBattlerAttacker
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08019946
- bl Random
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- cmp r1, 0
- bne _08019946
- ldr r0, _08019960 @ =gProtectStructs
- ldrb r2, [r4]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08019964 @ =gBattlescriptCurrInstr
- ldr r0, _08019968 @ =BattleScript_MoveUsedIsParalyzed
-_08019934:
- str r0, [r1]
- ldr r2, _0801996C @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r7, 0x1
- mov r9, r7
-_08019946:
- ldr r2, _08019970 @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0xB7
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r8, r2
- b _08019B98
- .align 2, 0
-_08019958: .4byte gBattleMons
-_0801995C: .4byte gBattlerAttacker
-_08019960: .4byte gProtectStructs
-_08019964: .4byte gBattlescriptCurrInstr
-_08019968: .4byte BattleScript_MoveUsedIsParalyzed
-_0801996C: .4byte gHitMarker
-_08019970: .4byte gBattleStruct
-_08019974:
- ldr r0, _0801999C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0xA0
- lsls r0, 8
- ands r1, r0
- movs r0, 0x80
- lsls r0, 8
- cmp r1, r0
- beq _08019988
- b _08019B8C
-_08019988:
- ldr r0, _080199A0 @ =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080199AC
- ldr r1, _080199A4 @ =gBattlescriptCurrInstr
- ldr r0, _080199A8 @ =gUnknown_81D9180
- b _080199B0
- .align 2, 0
-_0801999C: .4byte gBattleTypeFlags
-_080199A0: .4byte gBattlerAttacker
-_080199A4: .4byte gBattlescriptCurrInstr
-_080199A8: .4byte gUnknown_81D9180
-_080199AC:
- ldr r1, _080199BC @ =gBattlescriptCurrInstr
- ldr r0, _080199C0 @ =gUnknown_81D9192
-_080199B0:
- str r0, [r1]
- ldr r1, _080199C4 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- movs r0, 0x1
- b _08019B86
- .align 2, 0
-_080199BC: .4byte gBattlescriptCurrInstr
-_080199C0: .4byte gUnknown_81D9192
-_080199C4: .4byte gBattleCommunication
-_080199C8:
- ldr r1, _08019A00 @ =gBattleMons
- ldr r4, _08019A04 @ =gBattlerAttacker
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0xF0
- lsls r0, 12
- ands r1, r0
- cmp r1, 0
- beq _08019A42
- lsrs r0, r1, 16
- bl CountTrailingZeroBits
- ldr r1, _08019A08 @ =gBattleScripting
- strb r0, [r1, 0x17]
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08019A0C
- bl BattleScriptPushCursor
- b _08019A34
- .align 2, 0
-_08019A00: .4byte gBattleMons
-_08019A04: .4byte gBattlerAttacker
-_08019A08: .4byte gBattleScripting
-_08019A0C:
- ldr r0, _08019A48 @ =BattleScript_MoveUsedIsInLoveCantAttack
- bl BattleScriptPush
- ldr r2, _08019A4C @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- ldr r0, _08019A50 @ =gProtectStructs
- ldrb r2, [r4]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x1]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
-_08019A34:
- ldr r1, _08019A54 @ =gBattlescriptCurrInstr
- ldr r0, _08019A58 @ =BattleScript_MoveUsedIsInLove
- str r0, [r1]
- movs r4, 0x1
- mov r9, r4
- ldr r7, _08019A5C @ =gBattleStruct
- mov r8, r7
-_08019A42:
- mov r0, r8
- ldr r1, [r0]
- b _08019B90
- .align 2, 0
-_08019A48: .4byte BattleScript_MoveUsedIsInLoveCantAttack
-_08019A4C: .4byte gHitMarker
-_08019A50: .4byte gProtectStructs
-_08019A54: .4byte gBattlescriptCurrInstr
-_08019A58: .4byte BattleScript_MoveUsedIsInLove
-_08019A5C: .4byte gBattleStruct
-_08019A60:
- ldr r1, _08019A98 @ =gBattleMons
- ldr r6, _08019A9C @ =gBattlerAttacker
- ldrb r0, [r6]
- movs r5, 0x58
- muls r0, r5
- adds r1, 0x50
- adds r3, r0, r1
- ldr r2, [r3]
- movs r4, 0xC0
- lsls r4, 2
- adds r0, r2, 0
- ands r0, r4
- cmp r0, 0
- beq _08019B32
- ldr r7, _08019AA0 @ =0xffffff00
- adds r0, r2, r7
- str r0, [r3]
- ldrb r2, [r6]
- adds r0, r2, 0
- muls r0, r5
- adds r0, r1
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _08019AAC
- ldr r1, _08019AA4 @ =gBattlescriptCurrInstr
- ldr r0, _08019AA8 @ =BattleScript_BideStoringEnergy
- b _08019B2C
- .align 2, 0
-_08019A98: .4byte gBattleMons
-_08019A9C: .4byte gBattlerAttacker
-_08019AA0: .4byte 0xffffff00
-_08019AA4: .4byte gBattlescriptCurrInstr
-_08019AA8: .4byte BattleScript_BideStoringEnergy
-_08019AAC:
- ldr r3, _08019B04 @ =gTakenDmg
- lsls r0, r2, 2
- adds r0, r3
- ldr r0, [r0]
- cmp r0, 0
- beq _08019B28
- ldr r1, _08019B08 @ =gCurrentMove
- movs r0, 0x75
- strh r0, [r1]
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- lsls r0, 1
- mov r1, r10
- str r0, [r1]
- ldr r4, _08019B0C @ =gBattlerTarget
- ldr r1, _08019B10 @ =gTakenDmgByBattler
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r0, _08019B14 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08019B18 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08019AF6
- movs r0, 0x75
- movs r1, 0x1
- bl GetMoveTarget
- strb r0, [r4]
-_08019AF6:
- ldr r1, _08019B1C @ =gBattlescriptCurrInstr
- ldr r0, _08019B20 @ =BattleScript_BideAttack
- str r0, [r1]
- ldr r2, _08019B24 @ =gBattleStruct
- mov r8, r2
- b _08019B2E
- .align 2, 0
-_08019B04: .4byte gTakenDmg
-_08019B08: .4byte gCurrentMove
-_08019B0C: .4byte gBattlerTarget
-_08019B10: .4byte gTakenDmgByBattler
-_08019B14: .4byte gAbsentBattlerFlags
-_08019B18: .4byte gBitTable
-_08019B1C: .4byte gBattlescriptCurrInstr
-_08019B20: .4byte BattleScript_BideAttack
-_08019B24: .4byte gBattleStruct
-_08019B28:
- ldr r1, _08019B38 @ =gBattlescriptCurrInstr
- ldr r0, _08019B3C @ =BattleScript_BideNoEnergyToAttack
-_08019B2C:
- str r0, [r1]
-_08019B2E:
- movs r4, 0x1
- mov r9, r4
-_08019B32:
- mov r7, r8
- ldr r1, [r7]
- b _08019B90
- .align 2, 0
-_08019B38: .4byte gBattlescriptCurrInstr
-_08019B3C: .4byte BattleScript_BideNoEnergyToAttack
-_08019B40:
- ldr r1, _08019BE8 @ =gBattleMons
- ldr r0, _08019BEC @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r4, r0, r1
- ldr r3, [r4]
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- beq _08019B8C
- ldr r2, _08019BF0 @ =gBattleMoves
- ldr r0, _08019BF4 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7D
- bne _08019B84
- movs r0, 0x21
- negs r0, r0
- ands r3, r0
- str r3, [r4]
- bl BattleScriptPushCursor
- ldr r1, _08019BF8 @ =gBattlescriptCurrInstr
- ldr r0, _08019BFC @ =BattleScript_MoveUsedUnfroze
- str r0, [r1]
- ldr r1, _08019C00 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_08019B84:
- movs r0, 0x2
-_08019B86:
- mov r9, r0
- ldr r1, _08019C04 @ =gBattleStruct
- mov r8, r1
-_08019B8C:
- mov r2, r8
- ldr r1, [r2]
-_08019B90:
- adds r1, 0xB7
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08019B98:
- mov r4, r8
- ldr r0, [r4]
- adds r0, 0xB7
- ldrb r0, [r0]
- cmp r0, 0xF
- beq _08019BA8
- bl _080192F8
-_08019BA8:
- mov r7, r9
- cmp r7, 0x2
- bne _08019BD4
- ldr r4, _08019C08 @ =gActiveBattler
- ldr r0, _08019BEC @ =gBattlerAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _08019C0C @ =gUnknown_2023C30
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl BtlController_EmitSetMonData
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
-_08019BD4:
- mov r0, r9
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08019BE8: .4byte gBattleMons
-_08019BEC: .4byte gBattlerAttacker
-_08019BF0: .4byte gBattleMoves
-_08019BF4: .4byte gCurrentMove
-_08019BF8: .4byte gBattlescriptCurrInstr
-_08019BFC: .4byte BattleScript_MoveUsedUnfroze
-_08019C00: .4byte gBattleCommunication
-_08019C04: .4byte gBattleStruct
-_08019C08: .4byte gActiveBattler
-_08019C0C: .4byte gUnknown_2023C30
- thumb_func_end AtkCanceller_UnableToUseMove
-
- thumb_func_start HasNoMonsToSwitch
-HasNoMonsToSwitch: @ 8019C10
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r3, r4, 0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- ldr r0, _08019C3C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08019C40
- movs r0, 0
- b _08019D90
- .align 2, 0
-_08019C3C: .4byte gBattleTypeFlags
-_08019C40:
- movs r0, 0x40
- ands r1, r0
- cmp r1, 0
- beq _08019CCC
- adds r0, r4, 0
- bl GetBankMultiplayerId
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _08019CC4 @ =gEnemyParty
- mov r8, r1
- cmp r0, 0
- bne _08019C66
- ldr r0, _08019CC8 @ =gPlayerParty
- mov r8, r0
-_08019C66:
- adds r0, r7, 0
- bl GetLinkTrainerFlankId
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 1
- adds r5, r0, r6
- adds r0, r5, 0x3
- cmp r5, r0
- bge _08019CB2
- adds r7, r0, 0
-_08019C7C:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08019CAC
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08019CAC
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- bne _08019CB2
-_08019CAC:
- adds r5, 0x1
- cmp r5, r7
- blt _08019C7C
-_08019CB2:
- movs r1, 0
- lsls r0, r6, 1
- adds r0, r6
- adds r0, 0x3
- cmp r5, r0
- bne _08019CC0
- movs r1, 0x1
-_08019CC0:
- adds r0, r1, 0
- b _08019D90
- .align 2, 0
-_08019CC4: .4byte gEnemyParty
-_08019CC8: .4byte gPlayerParty
-_08019CCC:
- adds r0, r3, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08019CF8
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x3
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08019CF4 @ =gEnemyParty
- mov r8, r0
- b _08019D10
- .align 2, 0
-_08019CF4: .4byte gEnemyParty
-_08019CF8:
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _08019DA0 @ =gPlayerParty
- mov r8, r1
-_08019D10:
- mov r0, r10
- cmp r0, 0x6
- bne _08019D20
- ldr r1, _08019DA4 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrb r0, [r0]
- mov r10, r0
-_08019D20:
- mov r1, r9
- cmp r1, 0x6
- bne _08019D30
- ldr r1, _08019DA4 @ =gBattlerPartyIndexes
- lsls r0, r6, 1
- adds r0, r1
- ldrb r0, [r0]
- mov r9, r0
-_08019D30:
- movs r5, 0
-_08019D32:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08019D82
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08019D82
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _08019D82
- cmp r5, r10
- beq _08019D82
- cmp r5, r9
- beq _08019D82
- ldr r0, _08019DA8 @ =gBattleStruct
- ldr r1, [r0]
- adds r0, r7, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r5, r0
- beq _08019D82
- adds r0, r6, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r5, r0
- bne _08019D88
-_08019D82:
- adds r5, 0x1
- cmp r5, 0x5
- ble _08019D32
-_08019D88:
- movs r0, 0
- cmp r5, 0x6
- bne _08019D90
- movs r0, 0x1
-_08019D90:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08019DA0: .4byte gPlayerParty
-_08019DA4: .4byte gBattlerPartyIndexes
-_08019DA8: .4byte gBattleStruct
- thumb_func_end HasNoMonsToSwitch
-
- thumb_func_start CastformDataTypeChange
-CastformDataTypeChange: @ 8019DAC
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r1, _08019E1C @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r4, r0, r1
- ldrh r1, [r4]
- ldr r0, _08019E20 @ =0x00000181
- cmp r1, r0
- bne _08019E50
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3B
- bne _08019E50
- ldrh r0, [r4, 0x28]
- cmp r0, 0
- beq _08019E50
- str r5, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _08019DFE
- str r5, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08019E24
-_08019DFE:
- adds r2, r4, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0
- beq _08019E24
- adds r1, r4, 0
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0
- beq _08019E24
- strb r5, [r2]
- strb r5, [r1]
- movs r0, 0x1
- b _08019F08
- .align 2, 0
-_08019E1C: .4byte gBattleMons
-_08019E20: .4byte 0x00000181
-_08019E24:
- 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 _08019E50
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08019E54
-_08019E50:
- movs r0, 0
- b _08019F08
-_08019E54:
- ldr r1, _08019F10 @ =gBattleWeather
- ldrh r0, [r1]
- movs r2, 0xE7
- ands r2, r0
- adds r4, r1, 0
- cmp r2, 0
- bne _08019E82
- ldr r1, _08019F14 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r3, r1, 0
- adds r3, 0x21
- ldrb r0, [r3]
- cmp r0, 0
- beq _08019E82
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0
- beq _08019E82
- strb r2, [r3]
- strb r2, [r1]
- movs r5, 0x1
-_08019E82:
- ldrh r1, [r4]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _08019EAE
- ldr r1, _08019F14 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r2, r1, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0xA
- beq _08019EAE
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0xA
- beq _08019EAE
- movs r0, 0xA
- strb r0, [r2]
- strb r0, [r1]
- movs r5, 0x2
-_08019EAE:
- ldrh r1, [r4]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08019EDA
- ldr r1, _08019F14 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r2, r1, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0xB
- beq _08019EDA
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0xB
- beq _08019EDA
- movs r0, 0xB
- strb r0, [r2]
- strb r0, [r1]
- movs r5, 0x3
-_08019EDA:
- ldrh r1, [r4]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08019F06
- ldr r1, _08019F14 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r2, r1, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0xF
- beq _08019F06
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0xF
- beq _08019F06
- movs r0, 0xF
- strb r0, [r2]
- strb r0, [r1]
- movs r5, 0x4
-_08019F06:
- adds r0, r5, 0
-_08019F08:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08019F10: .4byte gBattleWeather
-_08019F14: .4byte gBattleMons
- thumb_func_end CastformDataTypeChange
-
- thumb_func_start AbilityBattleEffects
-AbilityBattleEffects: @ 8019F18
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- ldr r4, [sp, 0x48]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0
- mov r9, r0
- ldr r5, _08019F74 @ =gBattlerAttacker
- ldr r1, _08019F78 @ =gBattlersCount
- ldrb r0, [r5]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08019F54
- mov r1, r10
- strb r1, [r5]
-_08019F54:
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08019F84
- ldr r1, _08019F7C @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08019F80 @ =gPlayerParty
- b _08019F94
- .align 2, 0
-_08019F74: .4byte gBattlerAttacker
-_08019F78: .4byte gBattlersCount
-_08019F7C: .4byte gBattlerPartyIndexes
-_08019F80: .4byte gPlayerParty
-_08019F84:
- ldr r1, _08019FC4 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08019FC8 @ =gEnemyParty
-_08019F94:
- adds r6, r1, r0
- ldr r5, _08019FCC @ =gBattlerTarget
- ldr r1, _08019FD0 @ =gBattlersCount
- ldrb r0, [r5]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08019FA6
- mov r2, r10
- strb r2, [r5]
-_08019FA6:
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08019FD8
- ldr r1, _08019FC4 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08019FD4 @ =gPlayerParty
- b _08019FE8
- .align 2, 0
-_08019FC4: .4byte gBattlerPartyIndexes
-_08019FC8: .4byte gEnemyParty
-_08019FCC: .4byte gBattlerTarget
-_08019FD0: .4byte gBattlersCount
-_08019FD4: .4byte gPlayerParty
-_08019FD8:
- ldr r1, _0801A038 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0801A03C @ =gEnemyParty
-_08019FE8:
- adds r5, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- adds r0, r5, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x14]
- ldr r0, _0801A040 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0801A02A
- bl _0801BBC6
-_0801A02A:
- mov r3, r8
- cmp r3, 0
- beq _0801A048
- ldr r0, _0801A044 @ =gLastUsedAbility
- strb r3, [r0]
- mov r8, r0
- b _0801A05E
- .align 2, 0
-_0801A038: .4byte gBattlerPartyIndexes
-_0801A03C: .4byte gEnemyParty
-_0801A040: .4byte gBattleTypeFlags
-_0801A044: .4byte gLastUsedAbility
-_0801A048:
- ldr r2, _0801A078 @ =gLastUsedAbility
- ldr r1, _0801A07C @ =gBattleMons
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r2]
- mov r8, r2
-_0801A05E:
- cmp r4, 0
- bne _0801A066
- ldr r0, _0801A080 @ =gCurrentMove
- ldrh r4, [r0]
-_0801A066:
- ldr r1, _0801A084 @ =gBattleStruct
- ldr r0, [r1]
- ldrb r0, [r0, 0x13]
- adds r6, r1, 0
- cmp r0, 0
- beq _0801A088
- movs r5, 0x3F
- ands r5, r0
- b _0801A094
- .align 2, 0
-_0801A078: .4byte gLastUsedAbility
-_0801A07C: .4byte gBattleMons
-_0801A080: .4byte gCurrentMove
-_0801A084: .4byte gBattleStruct
-_0801A088:
- ldr r1, _0801A0D0 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x2]
-_0801A094:
- ldr r0, _0801A0D4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0xA0
- lsls r1, 8
- ands r0, r1
- movs r1, 0x80
- lsls r1, 8
- cmp r0, r1
- bne _0801A0BA
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x16
- bne _0801A0B2
- bl _0801BBC6
-_0801A0B2:
- cmp r0, 0x24
- bne _0801A0BA
- bl _0801BBC6
-_0801A0BA:
- ldr r2, [sp, 0x4]
- cmp r2, 0x13
- bls _0801A0C4
- bl _0801BBAA
-_0801A0C4:
- lsls r0, r2, 2
- ldr r1, _0801A0D8 @ =_0801A0DC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801A0D0: .4byte gBattleMoves
-_0801A0D4: .4byte gBattleTypeFlags
-_0801A0D8: .4byte _0801A0DC
- .align 2, 0
-_0801A0DC:
- .4byte _0801A12C
- .4byte _0801A3E0
- .4byte _0801A600
- .4byte _0801A698
- .4byte _0801A8B8
- .4byte _0801B010
- .4byte _0801B374
- .4byte _0801B3C8
- .4byte _0801B450
- .4byte _0801B4D4
- .4byte _0801B6FC
- .4byte _0801B518
- .4byte _0801B740
- .4byte _0801B79C
- .4byte _0801B7F8
- .4byte _0801B90C
- .4byte _0801B9A8
- .4byte _0801BA04
- .4byte _0801BB78
- .4byte _0801B8B4
-_0801A12C:
- ldr r2, _0801A160 @ =gBattlerAttacker
- ldr r0, _0801A164 @ =gBattlersCount
- ldrb r1, [r2]
- adds r3, r0, 0
- ldrb r4, [r3]
- cmp r1, r4
- bcc _0801A13E
- mov r0, r10
- strb r0, [r2]
-_0801A13E:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x2D
- bne _0801A148
- b _0801A2AC
-_0801A148:
- cmp r0, 0x2D
- bgt _0801A178
- cmp r0, 0xD
- bne _0801A152
- b _0801A3A8
-_0801A152:
- cmp r0, 0xD
- bgt _0801A168
- cmp r0, 0x2
- bne _0801A15C
- b _0801A27C
-_0801A15C:
- bl _0801BBAA
- .align 2, 0
-_0801A160: .4byte gBattlerAttacker
-_0801A164: .4byte gBattlersCount
-_0801A168:
- cmp r0, 0x16
- bne _0801A16E
- b _0801A30C
-_0801A16E:
- cmp r0, 0x24
- bne _0801A174
- b _0801A36C
-_0801A174:
- bl _0801BBAA
-_0801A178:
- cmp r0, 0x46
- bne _0801A17E
- b _0801A2DC
-_0801A17E:
- cmp r0, 0x46
- bgt _0801A18C
- cmp r0, 0x3B
- bne _0801A188
- b _0801A340
-_0801A188:
- bl _0801BBAA
-_0801A18C:
- cmp r0, 0x4D
- bne _0801A192
- b _0801A3A8
-_0801A192:
- cmp r0, 0xFF
- beq _0801A19A
- bl _0801BBAA
-_0801A19A:
- bl weather_get_current
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x3
- cmp r0, 0xA
- bhi _0801A250
- lsls r0, 2
- ldr r1, _0801A1B4 @ =_0801A1B8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801A1B4: .4byte _0801A1B8
- .align 2, 0
-_0801A1B8:
- .4byte _0801A1E4
- .4byte _0801A250
- .4byte _0801A1E4
- .4byte _0801A250
- .4byte _0801A250
- .4byte _0801A208
- .4byte _0801A250
- .4byte _0801A250
- .4byte _0801A250
- .4byte _0801A22C
- .4byte _0801A1E4
-_0801A1E4:
- ldr r2, _0801A200 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801A250
- movs r0, 0x5
- strh r0, [r2]
- ldr r1, _0801A204 @ =gBattleScripting
- movs r0, 0xA
- strb r0, [r1, 0x10]
- mov r2, r10
- strb r2, [r1, 0x17]
- b _0801A246
- .align 2, 0
-_0801A200: .4byte gBattleWeather
-_0801A204: .4byte gBattleScripting
-_0801A208:
- ldr r3, _0801A224 @ =gBattleWeather
- ldrh r1, [r3]
- movs r2, 0x18
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0801A250
- strh r2, [r3]
- ldr r1, _0801A228 @ =gBattleScripting
- movs r0, 0xC
- strb r0, [r1, 0x10]
- mov r3, r10
- strb r3, [r1, 0x17]
- b _0801A246
- .align 2, 0
-_0801A224: .4byte gBattleWeather
-_0801A228: .4byte gBattleScripting
-_0801A22C:
- ldr r3, _0801A26C @ =gBattleWeather
- ldrh r1, [r3]
- movs r2, 0x60
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0801A250
- strh r2, [r3]
- ldr r1, _0801A270 @ =gBattleScripting
- movs r0, 0xB
- strb r0, [r1, 0x10]
- mov r4, r10
- strb r4, [r1, 0x17]
-_0801A246:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801A250:
- mov r0, r9
- cmp r0, 0
- bne _0801A25A
- bl _0801BBC6
-_0801A25A:
- bl weather_get_current
- ldr r1, _0801A274 @ =gBattleCommunication
- strb r0, [r1, 0x5]
- ldr r0, _0801A278 @ =BattleScript_OverworldWeatherStarts
- bl BattleScriptPushCursorAndCallback
- bl _0801BBAA
- .align 2, 0
-_0801A26C: .4byte gBattleWeather
-_0801A270: .4byte gBattleScripting
-_0801A274: .4byte gBattleCommunication
-_0801A278: .4byte BattleScript_OverworldWeatherStarts
-_0801A27C:
- ldr r2, _0801A2A0 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801A28C
- bl _0801BBAA
-_0801A28C:
- movs r0, 0x5
- strh r0, [r2]
- ldr r0, _0801A2A4 @ =BattleScript_DrizzleActivates
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801A2A8 @ =gBattleScripting
- mov r1, r10
- strb r1, [r0, 0x17]
- bl _0801BB5A
- .align 2, 0
-_0801A2A0: .4byte gBattleWeather
-_0801A2A4: .4byte BattleScript_DrizzleActivates
-_0801A2A8: .4byte gBattleScripting
-_0801A2AC:
- ldr r2, _0801A2D0 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801A2BC
- bl _0801BBAA
-_0801A2BC:
- movs r0, 0x18
- strh r0, [r2]
- ldr r0, _0801A2D4 @ =BattleScript_SandstreamActivates
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801A2D8 @ =gBattleScripting
- mov r2, r10
- strb r2, [r0, 0x17]
- bl _0801BB5A
- .align 2, 0
-_0801A2D0: .4byte gBattleWeather
-_0801A2D4: .4byte BattleScript_SandstreamActivates
-_0801A2D8: .4byte gBattleScripting
-_0801A2DC:
- ldr r2, _0801A300 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801A2EC
- bl _0801BBAA
-_0801A2EC:
- movs r0, 0x60
- strh r0, [r2]
- ldr r0, _0801A304 @ =BattleScript_DroughtActivates
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801A308 @ =gBattleScripting
- mov r3, r10
- strb r3, [r0, 0x17]
- bl _0801BB5A
- .align 2, 0
-_0801A300: .4byte gBattleWeather
-_0801A304: .4byte BattleScript_DroughtActivates
-_0801A308: .4byte gBattleScripting
-_0801A30C:
- ldr r0, _0801A338 @ =gSpecialStatuses
- mov r4, r10
- lsls r2, r4, 2
- adds r1, r2, r4
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3]
- lsls r0, 28
- cmp r0, 0
- bge _0801A324
- bl _0801BBAA
-_0801A324:
- ldr r1, _0801A33C @ =gStatuses3
- adds r1, r2, r1
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 12
- orrs r0, r2
- str r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x8
- b _0801A396
- .align 2, 0
-_0801A338: .4byte gSpecialStatuses
-_0801A33C: .4byte gStatuses3
-_0801A340:
- mov r0, r10
- bl CastformDataTypeChange
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0
- bne _0801A354
- bl _0801BBC6
-_0801A354:
- ldr r0, _0801A364 @ =BattleScript_CastformChange
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801A368 @ =gBattleScripting
- mov r1, r10
- strb r1, [r0, 0x17]
- bl _0801BA6A
- .align 2, 0
-_0801A364: .4byte BattleScript_CastformChange
-_0801A368: .4byte gBattleScripting
-_0801A36C:
- ldr r0, _0801A3A0 @ =gSpecialStatuses
- mov r3, r10
- lsls r2, r3, 2
- adds r1, r2, r3
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3]
- lsls r0, 27
- cmp r0, 0
- bge _0801A384
- bl _0801BBAA
-_0801A384:
- ldr r1, _0801A3A4 @ =gStatuses3
- adds r1, r2, r1
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 13
- orrs r0, r2
- str r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x10
-_0801A396:
- orrs r0, r1
- strb r0, [r3]
- bl _0801BBAA
- .align 2, 0
-_0801A3A0: .4byte gSpecialStatuses
-_0801A3A4: .4byte gStatuses3
-_0801A3A8:
- movs r4, 0
- ldrb r3, [r3]
- cmp r4, r3
- bcc _0801A3B4
- bl _0801BBAA
-_0801A3B4:
- adds r0, r4, 0
- bl CastformDataTypeChange
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0
- beq _0801A3C8
- bl _0801BA60
-_0801A3C8:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0801A3DC @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- bcc _0801A3B4
- bl _0801BBAA
- .align 2, 0
-_0801A3DC: .4byte gBattlersCount
-_0801A3E0:
- ldr r7, _0801A410 @ =gBattleMons
- movs r0, 0x58
- mov r6, r10
- muls r6, r0
- adds r4, r6, r7
- ldrh r0, [r4, 0x28]
- cmp r0, 0
- bne _0801A3F4
- bl _0801BBAA
-_0801A3F4:
- ldr r0, _0801A414 @ =gBattlerAttacker
- mov r1, r10
- strb r1, [r0]
- mov r2, r8
- ldrb r5, [r2]
- cmp r5, 0x2C
- beq _0801A426
- cmp r5, 0x2C
- bgt _0801A418
- cmp r5, 0x3
- bne _0801A40C
- b _0801A58C
-_0801A40C:
- bl _0801BBAA
- .align 2, 0
-_0801A410: .4byte gBattleMons
-_0801A414: .4byte gBattlerAttacker
-_0801A418:
- cmp r5, 0x36
- bne _0801A41E
- b _0801A5D8
-_0801A41E:
- cmp r5, 0x3D
- beq _0801A4A8
- bl _0801BBAA
-_0801A426:
- 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 _0801A442
- bl _0801BBAA
-_0801A442:
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0801A45A
- bl _0801BBAA
-_0801A45A:
- ldr r0, _0801A49C @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801A46A
- bl _0801BBAA
-_0801A46A:
- ldrh r0, [r4, 0x2C]
- ldrh r3, [r4, 0x28]
- cmp r0, r3
- bhi _0801A476
- bl _0801BBAA
-_0801A476:
- mov r0, r8
- strb r5, [r0]
- ldr r0, _0801A4A0 @ =BattleScript_RainDishActivates
- bl BattleScriptPushCursorAndCallback
- ldr r1, _0801A4A4 @ =gBattleMoveDamage
- ldrh r0, [r4, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _0801A490
- movs r0, 0x1
- str r0, [r1]
-_0801A490:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- bl _0801BB5A
- .align 2, 0
-_0801A49C: .4byte gBattleWeather
-_0801A4A0: .4byte BattleScript_RainDishActivates
-_0801A4A4: .4byte gBattleMoveDamage
-_0801A4A8:
- adds r0, r7, 0
- adds r0, 0x4C
- adds r5, r6, r0
- ldrb r0, [r5]
- cmp r0, 0
- bne _0801A4B8
- bl _0801BBAA
-_0801A4B8:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _0801A4D2
- bl _0801BBAA
-_0801A4D2:
- ldr r0, [r5]
- movs r1, 0x88
- ands r0, r1
- cmp r0, 0
- beq _0801A4E4
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A568 @ =gUnknown_8250094
- bl StringCopy
-_0801A4E4:
- ldr r0, [r5]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801A4F6
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A56C @ =gUnknown_825009C
- bl StringCopy
-_0801A4F6:
- ldr r0, [r5]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801A508
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A570 @ =gUnknown_82500A4
- bl StringCopy
-_0801A508:
- ldr r0, [r5]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801A51A
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A574 @ =gUnknown_82500AC
- bl StringCopy
-_0801A51A:
- ldr r0, [r5]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801A52C
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A578 @ =gUnknown_82500B4
- bl StringCopy
-_0801A52C:
- str r4, [r5]
- adds r1, r7, 0
- adds r1, 0x50
- adds r1, r6, r1
- ldr r0, [r1]
- ldr r2, _0801A57C @ =0xf7ffffff
- ands r0, r2
- str r0, [r1]
- ldr r0, _0801A580 @ =gBattleScripting
- ldr r4, _0801A584 @ =gActiveBattler
- mov r1, r10
- strb r1, [r4]
- strb r1, [r0, 0x17]
- ldr r0, _0801A588 @ =BattleScript_ShedSkinActivates
- bl BattleScriptPushCursorAndCallback
- str r5, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl BtlController_EmitSetMonData
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- bl _0801BB5A
- .align 2, 0
-_0801A564: .4byte gBattleTextBuff1
-_0801A568: .4byte gUnknown_8250094
-_0801A56C: .4byte gUnknown_825009C
-_0801A570: .4byte gUnknown_82500A4
-_0801A574: .4byte gUnknown_82500AC
-_0801A578: .4byte gUnknown_82500B4
-_0801A57C: .4byte 0xf7ffffff
-_0801A580: .4byte gBattleScripting
-_0801A584: .4byte gActiveBattler
-_0801A588: .4byte BattleScript_ShedSkinActivates
-_0801A58C:
- ldrb r2, [r4, 0x1B]
- movs r0, 0x1B
- ldrsb r0, [r4, r0]
- cmp r0, 0xB
- ble _0801A59A
- bl _0801BBAA
-_0801A59A:
- ldr r0, _0801A5CC @ =gDisableStructs
- mov r3, r10
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x16]
- cmp r0, 0x2
- bne _0801A5B0
- bl _0801BBAA
-_0801A5B0:
- adds r0, r2, 0x1
- movs r1, 0
- strb r0, [r4, 0x1B]
- ldr r4, _0801A5D0 @ =gBattleScripting
- movs r0, 0x11
- strb r0, [r4, 0x10]
- strb r1, [r4, 0x11]
- ldr r0, _0801A5D4 @ =BattleScript_SpeedBoostActivates
- bl BattleScriptPushCursorAndCallback
- mov r0, r10
- strb r0, [r4, 0x17]
- bl _0801BB5A
- .align 2, 0
-_0801A5CC: .4byte gDisableStructs
-_0801A5D0: .4byte gBattleScripting
-_0801A5D4: .4byte BattleScript_SpeedBoostActivates
-_0801A5D8:
- ldr r2, _0801A5FC @ =gDisableStructs
- ldrb r0, [r0]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r3, [r1, 0x18]
- lsls r0, r3, 31
- lsrs r0, 31
- movs r2, 0x1
- eors r2, r0
- movs r0, 0x2
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x18]
- bl _0801BBAA
- .align 2, 0
-_0801A5FC: .4byte gDisableStructs
-_0801A600:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x2B
- beq _0801A60C
- bl _0801BBAA
-_0801A60C:
- movs r5, 0
- ldr r0, _0801A67C @ =sSoundMovesTable
- ldrh r2, [r0]
- ldr r3, _0801A680 @ =0x0000ffff
- adds r1, r0, 0
- cmp r2, r3
- bne _0801A61E
- bl _0801BBAA
-_0801A61E:
- cmp r2, r4
- beq _0801A636
- adds r2, r1, 0
-_0801A624:
- adds r2, 0x2
- adds r5, 0x1
- ldrh r0, [r2]
- cmp r0, r3
- bne _0801A632
- bl _0801BBAA
-_0801A632:
- cmp r0, r4
- bne _0801A624
-_0801A636:
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, _0801A680 @ =0x0000ffff
- cmp r1, r0
- bne _0801A646
- bl _0801BBAA
-_0801A646:
- ldr r1, _0801A684 @ =gBattleMons
- ldr r0, _0801A688 @ =gBattlerAttacker
- 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 _0801A66C
- ldr r0, _0801A68C @ =gHitMarker
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 4
- orrs r1, r2
- str r1, [r0]
-_0801A66C:
- ldr r1, _0801A690 @ =gBattlescriptCurrInstr
- ldr r0, _0801A694 @ =BattleScript_SoundproofProtected
- str r0, [r1]
- movs r2, 0x1
- mov r9, r2
- bl _0801BBB0
- .align 2, 0
-_0801A67C: .4byte sSoundMovesTable
-_0801A680: .4byte 0x0000ffff
-_0801A684: .4byte gBattleMons
-_0801A688: .4byte gBattlerAttacker
-_0801A68C: .4byte gHitMarker
-_0801A690: .4byte gBattlescriptCurrInstr
-_0801A694: .4byte BattleScript_SoundproofProtected
-_0801A698:
- cmp r4, 0
- bne _0801A6A0
- bl _0801BBAA
-_0801A6A0:
- mov r3, r8
- ldrb r0, [r3]
- cmp r0, 0xB
- beq _0801A710
- cmp r0, 0xB
- bgt _0801A6B2
- cmp r0, 0xA
- beq _0801A6B8
- b _0801A832
-_0801A6B2:
- cmp r0, 0x12
- beq _0801A768
- b _0801A832
-_0801A6B8:
- cmp r5, 0xD
- beq _0801A6BE
- b _0801A832
-_0801A6BE:
- ldr r0, _0801A6E8 @ =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801A6D0
- b _0801A832
-_0801A6D0:
- ldr r1, _0801A6EC @ =gProtectStructs
- ldr r0, _0801A6F0 @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A6FC
- ldr r1, _0801A6F4 @ =gBattlescriptCurrInstr
- ldr r0, _0801A6F8 @ =BattleScript_MoveHPDrain
- b _0801A700
- .align 2, 0
-_0801A6E8: .4byte gBattleMoves
-_0801A6EC: .4byte gProtectStructs
-_0801A6F0: .4byte gBattlerAttacker
-_0801A6F4: .4byte gBattlescriptCurrInstr
-_0801A6F8: .4byte BattleScript_MoveHPDrain
-_0801A6FC:
- ldr r1, _0801A708 @ =gBattlescriptCurrInstr
- ldr r0, _0801A70C @ =BattleScript_MoveHPDrain_PPLoss
-_0801A700:
- str r0, [r1]
- movs r4, 0x1
- mov r9, r4
- b _0801A832
- .align 2, 0
-_0801A708: .4byte gBattlescriptCurrInstr
-_0801A70C: .4byte BattleScript_MoveHPDrain_PPLoss
-_0801A710:
- cmp r5, 0xB
- beq _0801A716
- b _0801A832
-_0801A716:
- ldr r0, _0801A740 @ =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801A728
- b _0801A832
-_0801A728:
- ldr r1, _0801A744 @ =gProtectStructs
- ldr r0, _0801A748 @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A754
- ldr r1, _0801A74C @ =gBattlescriptCurrInstr
- ldr r0, _0801A750 @ =BattleScript_MoveHPDrain
- b _0801A758
- .align 2, 0
-_0801A740: .4byte gBattleMoves
-_0801A744: .4byte gProtectStructs
-_0801A748: .4byte gBattlerAttacker
-_0801A74C: .4byte gBattlescriptCurrInstr
-_0801A750: .4byte BattleScript_MoveHPDrain
-_0801A754:
- ldr r1, _0801A760 @ =gBattlescriptCurrInstr
- ldr r0, _0801A764 @ =BattleScript_MoveHPDrain_PPLoss
-_0801A758:
- str r0, [r1]
- movs r0, 0x1
- b _0801A830
- .align 2, 0
-_0801A760: .4byte gBattlescriptCurrInstr
-_0801A764: .4byte BattleScript_MoveHPDrain_PPLoss
-_0801A768:
- cmp r5, 0xA
- bne _0801A832
- ldr r1, _0801A7B8 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0801A832
- ldr r2, _0801A7BC @ =gBattleResources
- ldr r0, [r2]
- ldr r0, [r0, 0x4]
- mov r3, r10
- lsls r1, r3, 2
- adds r0, r1
- ldr r3, [r0]
- movs r4, 0x1
- ands r3, r4
- adds r5, r1, 0
- cmp r3, 0
- bne _0801A7F8
- ldr r0, _0801A7C0 @ =gBattleCommunication
- strb r3, [r0, 0x5]
- ldr r1, _0801A7C4 @ =gProtectStructs
- ldr r0, _0801A7C8 @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A7D4
- ldr r1, _0801A7CC @ =gBattlescriptCurrInstr
- ldr r0, _0801A7D0 @ =BattleScript_FlashFireBoost
- b _0801A7D8
- .align 2, 0
-_0801A7B8: .4byte gBattleMons
-_0801A7BC: .4byte gBattleResources
-_0801A7C0: .4byte gBattleCommunication
-_0801A7C4: .4byte gProtectStructs
-_0801A7C8: .4byte gBattlerAttacker
-_0801A7CC: .4byte gBattlescriptCurrInstr
-_0801A7D0: .4byte BattleScript_FlashFireBoost
-_0801A7D4:
- ldr r1, _0801A7F0 @ =gBattlescriptCurrInstr
- ldr r0, _0801A7F4 @ =BattleScript_FlashFireBoost_PPLoss
-_0801A7D8:
- str r0, [r1]
- ldr r0, [r2]
- ldr r1, [r0, 0x4]
- adds r1, r5
- ldr r0, [r1]
- movs r2, 0x1
- orrs r0, r2
- str r0, [r1]
- movs r4, 0x2
- mov r9, r4
- b _0801A832
- .align 2, 0
-_0801A7F0: .4byte gBattlescriptCurrInstr
-_0801A7F4: .4byte BattleScript_FlashFireBoost_PPLoss
-_0801A7F8:
- ldr r0, _0801A814 @ =gBattleCommunication
- strb r4, [r0, 0x5]
- ldr r1, _0801A818 @ =gProtectStructs
- ldr r0, _0801A81C @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A828
- ldr r1, _0801A820 @ =gBattlescriptCurrInstr
- ldr r0, _0801A824 @ =BattleScript_FlashFireBoost
- b _0801A82C
- .align 2, 0
-_0801A814: .4byte gBattleCommunication
-_0801A818: .4byte gProtectStructs
-_0801A81C: .4byte gBattlerAttacker
-_0801A820: .4byte gBattlescriptCurrInstr
-_0801A824: .4byte BattleScript_FlashFireBoost
-_0801A828:
- ldr r1, _0801A86C @ =gBattlescriptCurrInstr
- ldr r0, _0801A870 @ =BattleScript_FlashFireBoost_PPLoss
-_0801A82C:
- str r0, [r1]
- movs r0, 0x2
-_0801A830:
- mov r9, r0
-_0801A832:
- mov r1, r9
- cmp r1, 0x1
- beq _0801A83C
- bl _0801BBAA
-_0801A83C:
- ldr r1, _0801A874 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r1, r0, r1
- ldrh r0, [r1, 0x2C]
- ldrh r3, [r1, 0x28]
- cmp r0, r3
- bne _0801A898
- ldr r1, _0801A878 @ =gProtectStructs
- ldr r0, _0801A87C @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A884
- ldr r1, _0801A86C @ =gBattlescriptCurrInstr
- ldr r0, _0801A880 @ =BattleScript_MonMadeMoveUseless
- str r0, [r1]
- bl _0801BBAA
- .align 2, 0
-_0801A86C: .4byte gBattlescriptCurrInstr
-_0801A870: .4byte BattleScript_FlashFireBoost_PPLoss
-_0801A874: .4byte gBattleMons
-_0801A878: .4byte gProtectStructs
-_0801A87C: .4byte gBattlerAttacker
-_0801A880: .4byte BattleScript_MonMadeMoveUseless
-_0801A884:
- ldr r1, _0801A890 @ =gBattlescriptCurrInstr
- ldr r0, _0801A894 @ =BattleScript_MonMadeMoveUseless_PPLoss
- str r0, [r1]
- bl _0801BBAA
- .align 2, 0
-_0801A890: .4byte gBattlescriptCurrInstr
-_0801A894: .4byte BattleScript_MonMadeMoveUseless_PPLoss
-_0801A898:
- ldr r2, _0801A8B4 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 2
- str r0, [r2]
- cmp r0, 0
- bne _0801A8A8
- mov r4, r9
- str r4, [r2]
-_0801A8A8:
- ldr r0, [r2]
- negs r0, r0
- str r0, [r2]
- bl _0801BBAA
- .align 2, 0
-_0801A8B4: .4byte gBattleMoveDamage
-_0801A8B8:
- mov r1, r8
- ldrb r0, [r1]
- subs r0, 0x9
- cmp r0, 0x2F
- bls _0801A8C6
- bl _0801BBAA
-_0801A8C6:
- lsls r0, 2
- ldr r1, _0801A8D0 @ =_0801A8D4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801A8D0: .4byte _0801A8D4
- .align 2, 0
-_0801A8D4:
- .4byte _0801ACF0
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801A994
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801AA5C
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801AB1C
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801AC14
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801ADCC
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801AEA8
-_0801A994:
- ldr r0, _0801AA3C @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801A9A4
- bl _0801BBAA
-_0801A9A4:
- cmp r4, 0xA5
- bne _0801A9AC
- bl _0801BBAA
-_0801A9AC:
- ldr r0, _0801AA40 @ =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801A9C0
- bl _0801BBAA
-_0801A9C0:
- ldr r2, _0801AA44 @ =gSpecialStatuses
- ldr r0, _0801AA48 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801A9E8
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801A9E8
- bl _0801BBAA
-_0801A9E8:
- ldr r1, _0801AA4C @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r1, r0, r1
- adds r3, r1, 0
- adds r3, 0x21
- ldrb r0, [r3]
- cmp r0, r5
- bne _0801AA02
- bl _0801BBAA
-_0801AA02:
- adds r2, r1, 0
- adds r2, 0x22
- ldrb r0, [r2]
- cmp r0, r5
- bne _0801AA10
- bl _0801BBAA
-_0801AA10:
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- bne _0801AA1A
- bl _0801BBAA
-_0801AA1A:
- strb r5, [r3]
- strb r5, [r2]
- ldr r1, _0801AA50 @ =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]
- bl BattleScriptPushCursor
- ldr r1, _0801AA54 @ =gBattlescriptCurrInstr
- ldr r0, _0801AA58 @ =BattleScript_ColorChangeActivates
- str r0, [r1]
- bl _0801BB5A
- .align 2, 0
-_0801AA3C: .4byte gMoveResultFlags
-_0801AA40: .4byte gBattleMoves
-_0801AA44: .4byte gSpecialStatuses
-_0801AA48: .4byte gBattlerTarget
-_0801AA4C: .4byte gBattleMons
-_0801AA50: .4byte gBattleTextBuff1
-_0801AA54: .4byte gBattlescriptCurrInstr
-_0801AA58: .4byte BattleScript_ColorChangeActivates
-_0801AA5C:
- ldr r0, _0801AAF4 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AA6C
- bl _0801BBAA
-_0801AA6C:
- ldr r1, _0801AAF8 @ =gBattleMons
- ldr r0, _0801AAFC @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r3, r0, r1
- ldrh r0, [r3, 0x28]
- cmp r0, 0
- bne _0801AA82
- bl _0801BBAA
-_0801AA82:
- ldr r0, _0801AB00 @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AA94
- bl _0801BBAA
-_0801AA94:
- ldr r2, _0801AB04 @ =gSpecialStatuses
- ldr r0, _0801AB08 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AABC
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AABC
- bl _0801BBAA
-_0801AABC:
- ldr r1, _0801AB0C @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0801AAD6
- bl _0801BBAA
-_0801AAD6:
- ldr r1, _0801AB10 @ =gBattleMoveDamage
- ldrh r0, [r3, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _0801AAE4
- str r2, [r1]
-_0801AAE4:
- bl BattleScriptPushCursor
- ldr r1, _0801AB14 @ =gBattlescriptCurrInstr
- ldr r0, _0801AB18 @ =BattleScript_RoughSkinActivates
- str r0, [r1]
- bl _0801BB5A
- .align 2, 0
-_0801AAF4: .4byte gMoveResultFlags
-_0801AAF8: .4byte gBattleMons
-_0801AAFC: .4byte gBattlerAttacker
-_0801AB00: .4byte gProtectStructs
-_0801AB04: .4byte gSpecialStatuses
-_0801AB08: .4byte gBattlerTarget
-_0801AB0C: .4byte gBattleMoves
-_0801AB10: .4byte gBattleMoveDamage
-_0801AB14: .4byte gBattlescriptCurrInstr
-_0801AB18: .4byte BattleScript_RoughSkinActivates
-_0801AB1C:
- ldr r0, _0801ABE8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AB2C
- bl _0801BBAA
-_0801AB2C:
- ldr r1, _0801ABEC @ =gBattleMons
- ldr r0, _0801ABF0 @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AB42
- bl _0801BBAA
-_0801AB42:
- ldr r0, _0801ABF4 @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AB54
- bl _0801BBAA
-_0801AB54:
- ldr r2, _0801ABF8 @ =gSpecialStatuses
- ldr r0, _0801ABFC @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AB7C
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AB7C
- bl _0801BBAA
-_0801AB7C:
- ldr r1, _0801AC00 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AB94
- bl _0801BBAA
-_0801AB94:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801ABAC
- bl _0801BBAA
-_0801ABAC:
- ldr r5, _0801AC04 @ =gBattleCommunication
- movs r4, 0x3
-_0801ABB0:
- bl Random
- ands r0, r4
- strb r0, [r5, 0x3]
- cmp r0, 0
- beq _0801ABB0
- ldr r1, _0801AC04 @ =gBattleCommunication
- ldrb r0, [r1, 0x3]
- cmp r0, 0x3
- bne _0801ABC8
- adds r0, 0x2
- strb r0, [r1, 0x3]
-_0801ABC8:
- ldrb r0, [r1, 0x3]
- adds r0, 0x40
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- ldr r1, _0801AC08 @ =gBattlescriptCurrInstr
- ldr r0, _0801AC0C @ =BattleScript_ApplySecondaryEffect
- str r0, [r1]
- ldr r2, _0801AC10 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _0801BB5A
- .align 2, 0
-_0801ABE8: .4byte gMoveResultFlags
-_0801ABEC: .4byte gBattleMons
-_0801ABF0: .4byte gBattlerAttacker
-_0801ABF4: .4byte gProtectStructs
-_0801ABF8: .4byte gSpecialStatuses
-_0801ABFC: .4byte gBattlerTarget
-_0801AC00: .4byte gBattleMoves
-_0801AC04: .4byte gBattleCommunication
-_0801AC08: .4byte gBattlescriptCurrInstr
-_0801AC0C: .4byte BattleScript_ApplySecondaryEffect
-_0801AC10: .4byte gHitMarker
-_0801AC14:
- ldr r0, _0801ACC4 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AC24
- bl _0801BBAA
-_0801AC24:
- ldr r1, _0801ACC8 @ =gBattleMons
- ldr r0, _0801ACCC @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AC3A
- bl _0801BBAA
-_0801AC3A:
- ldr r0, _0801ACD0 @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AC4C
- bl _0801BBAA
-_0801AC4C:
- ldr r2, _0801ACD4 @ =gSpecialStatuses
- ldr r0, _0801ACD8 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AC74
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AC74
- bl _0801BBAA
-_0801AC74:
- ldr r1, _0801ACDC @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AC8C
- bl _0801BBAA
-_0801AC8C:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801ACA4
- bl _0801BBAA
-_0801ACA4:
- ldr r1, _0801ACE0 @ =gBattleCommunication
- movs r0, 0x42
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- ldr r1, _0801ACE4 @ =gBattlescriptCurrInstr
- ldr r0, _0801ACE8 @ =BattleScript_ApplySecondaryEffect
- str r0, [r1]
- ldr r2, _0801ACEC @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _0801BB5A
- .align 2, 0
-_0801ACC4: .4byte gMoveResultFlags
-_0801ACC8: .4byte gBattleMons
-_0801ACCC: .4byte gBattlerAttacker
-_0801ACD0: .4byte gProtectStructs
-_0801ACD4: .4byte gSpecialStatuses
-_0801ACD8: .4byte gBattlerTarget
-_0801ACDC: .4byte gBattleMoves
-_0801ACE0: .4byte gBattleCommunication
-_0801ACE4: .4byte gBattlescriptCurrInstr
-_0801ACE8: .4byte BattleScript_ApplySecondaryEffect
-_0801ACEC: .4byte gHitMarker
-_0801ACF0:
- ldr r0, _0801ADA0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AD00
- bl _0801BBAA
-_0801AD00:
- ldr r1, _0801ADA4 @ =gBattleMons
- ldr r0, _0801ADA8 @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AD16
- bl _0801BBAA
-_0801AD16:
- ldr r0, _0801ADAC @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AD28
- bl _0801BBAA
-_0801AD28:
- ldr r2, _0801ADB0 @ =gSpecialStatuses
- ldr r0, _0801ADB4 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AD50
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AD50
- bl _0801BBAA
-_0801AD50:
- ldr r1, _0801ADB8 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AD68
- bl _0801BBAA
-_0801AD68:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801AD80
- bl _0801BBAA
-_0801AD80:
- ldr r1, _0801ADBC @ =gBattleCommunication
- movs r0, 0x45
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- ldr r1, _0801ADC0 @ =gBattlescriptCurrInstr
- ldr r0, _0801ADC4 @ =BattleScript_ApplySecondaryEffect
- str r0, [r1]
- ldr r2, _0801ADC8 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _0801BB5A
- .align 2, 0
-_0801ADA0: .4byte gMoveResultFlags
-_0801ADA4: .4byte gBattleMons
-_0801ADA8: .4byte gBattlerAttacker
-_0801ADAC: .4byte gProtectStructs
-_0801ADB0: .4byte gSpecialStatuses
-_0801ADB4: .4byte gBattlerTarget
-_0801ADB8: .4byte gBattleMoves
-_0801ADBC: .4byte gBattleCommunication
-_0801ADC0: .4byte gBattlescriptCurrInstr
-_0801ADC4: .4byte BattleScript_ApplySecondaryEffect
-_0801ADC8: .4byte gHitMarker
-_0801ADCC:
- ldr r0, _0801AE7C @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801ADDC
- bl _0801BBAA
-_0801ADDC:
- ldr r1, _0801AE80 @ =gBattleMons
- ldr r0, _0801AE84 @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801ADF2
- bl _0801BBAA
-_0801ADF2:
- ldr r0, _0801AE88 @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AE04
- bl _0801BBAA
-_0801AE04:
- ldr r1, _0801AE8C @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AE1C
- bl _0801BBAA
-_0801AE1C:
- ldr r2, _0801AE90 @ =gSpecialStatuses
- ldr r0, _0801AE94 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AE44
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AE44
- bl _0801BBAA
-_0801AE44:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801AE5C
- bl _0801BBAA
-_0801AE5C:
- ldr r1, _0801AE98 @ =gBattleCommunication
- movs r0, 0x43
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- ldr r1, _0801AE9C @ =gBattlescriptCurrInstr
- ldr r0, _0801AEA0 @ =BattleScript_ApplySecondaryEffect
- str r0, [r1]
- ldr r2, _0801AEA4 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _0801BB5A
- .align 2, 0
-_0801AE7C: .4byte gMoveResultFlags
-_0801AE80: .4byte gBattleMons
-_0801AE84: .4byte gBattlerAttacker
-_0801AE88: .4byte gProtectStructs
-_0801AE8C: .4byte gBattleMoves
-_0801AE90: .4byte gSpecialStatuses
-_0801AE94: .4byte gBattlerTarget
-_0801AE98: .4byte gBattleCommunication
-_0801AE9C: .4byte gBattlescriptCurrInstr
-_0801AEA0: .4byte BattleScript_ApplySecondaryEffect
-_0801AEA4: .4byte gHitMarker
-_0801AEA8:
- ldr r0, _0801AFE8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AEB8
- bl _0801BBAA
-_0801AEB8:
- ldr r5, _0801AFEC @ =gBattleMons
- ldr r7, _0801AFF0 @ =gBattlerAttacker
- ldrb r1, [r7]
- movs r6, 0x58
- adds r0, r1, 0
- muls r0, r6
- adds r0, r5
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AED0
- bl _0801BBAA
-_0801AED0:
- ldr r0, _0801AFF4 @ =gProtectStructs
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AEE2
- bl _0801BBAA
-_0801AEE2:
- ldr r1, _0801AFF8 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AEFA
- bl _0801BBAA
-_0801AEFA:
- ldr r3, _0801AFFC @ =gSpecialStatuses
- ldr r4, _0801B000 @ =gBattlerTarget
- mov r8, r4
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r2, r0, 2
- adds r0, r3, 0
- adds r0, 0x8
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AF24
- adds r0, r3, 0
- adds r0, 0xC
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AF24
- bl _0801BBAA
-_0801AF24:
- adds r0, r1, 0
- muls r0, r6
- adds r0, r5
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AF34
- bl _0801BBAA
-_0801AF34:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801AF4C
- bl _0801BBAA
-_0801AF4C:
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0xC
- bne _0801AF5E
- bl _0801BBAA
-_0801AF5E:
- ldr r0, [sp, 0x8]
- ldr r1, [sp, 0x10]
- bl GetGenderFromSpeciesAndPersonality
- adds r4, r0, 0
- ldr r0, [sp, 0xC]
- ldr r1, [sp, 0x14]
- bl GetGenderFromSpeciesAndPersonality
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _0801AF7C
- bl _0801BBAA
-_0801AF7C:
- ldrb r0, [r7]
- muls r0, r6
- adds r4, r5, 0
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0xF0
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _0801AF96
- bl _0801BBAA
-_0801AF96:
- ldr r0, [sp, 0x8]
- ldr r1, [sp, 0x10]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0801AFAA
- bl _0801BBAA
-_0801AFAA:
- ldr r0, [sp, 0xC]
- ldr r1, [sp, 0x14]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0801AFBE
- bl _0801BBAA
-_0801AFBE:
- ldrb r0, [r7]
- adds r2, r0, 0
- muls r2, r6
- adds r2, r4
- ldr r1, _0801B004 @ =gBitTable
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 16
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801B008 @ =gBattlescriptCurrInstr
- ldr r0, _0801B00C @ =BattleScript_CuteCharmActivates
- str r0, [r1]
- bl _0801BB5A
- .align 2, 0
-_0801AFE8: .4byte gMoveResultFlags
-_0801AFEC: .4byte gBattleMons
-_0801AFF0: .4byte gBattlerAttacker
-_0801AFF4: .4byte gProtectStructs
-_0801AFF8: .4byte gBattleMoves
-_0801AFFC: .4byte gSpecialStatuses
-_0801B000: .4byte gBattlerTarget
-_0801B004: .4byte gBitTable
-_0801B008: .4byte gBattlescriptCurrInstr
-_0801B00C: .4byte BattleScript_CuteCharmActivates
-_0801B010:
- movs r4, 0
- mov r10, r4
- ldr r0, _0801B044 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r10, r0
- bcc _0801B020
- bl _0801BBAA
-_0801B020:
- ldr r1, _0801B048 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- subs r0, 0x7
- adds r2, r1, 0
- cmp r0, 0x41
- bls _0801B03A
- b _0801B29E
-_0801B03A:
- lsls r0, 2
- ldr r1, _0801B04C @ =_0801B050
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801B044: .4byte gBattlersCount
-_0801B048: .4byte gBattleMons
-_0801B04C: .4byte _0801B050
- .align 2, 0
-_0801B050:
- .4byte _0801B1B4
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B278
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B1DC
- .4byte _0801B29E
- .4byte _0801B158
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B184
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B248
- .4byte _0801B218
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B1DC
-_0801B158:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _0801B178 @ =0x00000f88
- ands r0, r1
- cmp r0, 0
- bne _0801B172
- b _0801B29E
-_0801B172:
- ldr r0, _0801B17C @ =gBattleTextBuff1
- ldr r1, _0801B180 @ =gUnknown_8250094
- b _0801B264
- .align 2, 0
-_0801B178: .4byte 0x00000f88
-_0801B17C: .4byte gBattleTextBuff1
-_0801B180: .4byte gUnknown_8250094
-_0801B184:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801B19E
- b _0801B29E
-_0801B19E:
- ldr r0, _0801B1AC @ =gBattleTextBuff1
- ldr r1, _0801B1B0 @ =gUnknown_82500BC
- bl StringCopy
- movs r2, 0x2
- mov r9, r2
- b _0801B2A4
- .align 2, 0
-_0801B1AC: .4byte gBattleTextBuff1
-_0801B1B0: .4byte gUnknown_82500BC
-_0801B1B4:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- ldr r0, _0801B1D4 @ =gBattleTextBuff1
- ldr r1, _0801B1D8 @ =gUnknown_82500A4
- b _0801B264
- .align 2, 0
-_0801B1D4: .4byte gBattleTextBuff1
-_0801B1D8: .4byte gUnknown_82500A4
-_0801B1DC:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- adds r2, 0x50
- adds r2, r3, r2
- ldr r0, [r2]
- ldr r1, _0801B20C @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801B210 @ =gBattleTextBuff1
- ldr r1, _0801B214 @ =gUnknown_825009C
- bl StringCopy
- movs r0, 0x1
- mov r9, r0
- b _0801B2A4
- .align 2, 0
-_0801B20C: .4byte 0xf7ffffff
-_0801B210: .4byte gBattleTextBuff1
-_0801B214: .4byte gUnknown_825009C
-_0801B218:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- ldr r0, _0801B240 @ =gBattleTextBuff1
- ldr r1, _0801B244 @ =gUnknown_82500AC
- bl StringCopy
- movs r2, 0x1
- mov r9, r2
- b _0801B2A4
- .align 2, 0
-_0801B240: .4byte gBattleTextBuff1
-_0801B244: .4byte gUnknown_82500AC
-_0801B248:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- ldr r0, _0801B270 @ =gBattleTextBuff1
- ldr r1, _0801B274 @ =gUnknown_82500B4
-_0801B264:
- bl StringCopy
- movs r4, 0x1
- mov r9, r4
- b _0801B2A4
- .align 2, 0
-_0801B270: .4byte gBattleTextBuff1
-_0801B274: .4byte gUnknown_82500B4
-_0801B278:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0xF0
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- ldr r0, _0801B2B4 @ =gBattleTextBuff1
- ldr r1, _0801B2B8 @ =gUnknown_82500C4
- bl StringCopy
- movs r2, 0x3
- mov r9, r2
-_0801B29E:
- mov r3, r9
- cmp r3, 0
- beq _0801B358
-_0801B2A4:
- mov r4, r9
- cmp r4, 0x2
- beq _0801B2D8
- cmp r4, 0x2
- bgt _0801B2BC
- cmp r4, 0x1
- beq _0801B2C4
- b _0801B304
- .align 2, 0
-_0801B2B4: .4byte gBattleTextBuff1
-_0801B2B8: .4byte gUnknown_82500C4
-_0801B2BC:
- mov r0, r9
- cmp r0, 0x3
- beq _0801B2F0
- b _0801B304
-_0801B2C4:
- ldr r1, _0801B2D4 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r1, 0x4C
- adds r2, r1
- movs r0, 0
- b _0801B302
- .align 2, 0
-_0801B2D4: .4byte gBattleMons
-_0801B2D8:
- ldr r1, _0801B2EC @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- movs r1, 0x8
- negs r1, r1
- b _0801B300
- .align 2, 0
-_0801B2EC: .4byte gBattleMons
-_0801B2F0:
- ldr r1, _0801B33C @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- ldr r1, _0801B340 @ =0xfff0ffff
-_0801B300:
- ands r0, r1
-_0801B302:
- str r0, [r2]
-_0801B304:
- bl BattleScriptPushCursor
- ldr r1, _0801B344 @ =gBattlescriptCurrInstr
- ldr r0, _0801B348 @ =BattleScript_AbilityCuredStatus
- str r0, [r1]
- ldr r0, _0801B34C @ =gBattleScripting
- mov r1, r10
- strb r1, [r0, 0x17]
- ldr r4, _0801B350 @ =gActiveBattler
- strb r1, [r4]
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _0801B354 @ =gUnknown_2023C30
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl BtlController_EmitSetMonData
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- bl _0801BBC6
- .align 2, 0
-_0801B33C: .4byte gBattleMons
-_0801B340: .4byte 0xfff0ffff
-_0801B344: .4byte gBattlescriptCurrInstr
-_0801B348: .4byte BattleScript_AbilityCuredStatus
-_0801B34C: .4byte gBattleScripting
-_0801B350: .4byte gActiveBattler
-_0801B354: .4byte gUnknown_2023C30
-_0801B358:
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _0801B370 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r10, r0
- bcs _0801B36C
- b _0801B020
-_0801B36C:
- bl _0801BBAA
- .align 2, 0
-_0801B370: .4byte gBattlersCount
-_0801B374:
- movs r2, 0
- mov r10, r2
- ldr r0, _0801B3C0 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r10, r0
- bcc _0801B384
- bl _0801BBAA
-_0801B384:
- ldr r4, _0801B3C4 @ =gBattleMons
-_0801B386:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3B
- bne _0801B3AA
- mov r0, r10
- bl CastformDataTypeChange
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0
- beq _0801B3AA
- b _0801BA84
-_0801B3AA:
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _0801B3C0 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r10, r0
- bcc _0801B386
- bl _0801BBAA
- .align 2, 0
-_0801B3C0: .4byte gBattlersCount
-_0801B3C4: .4byte gBattleMons
-_0801B3C8:
- mov r4, r8
- ldrb r0, [r4]
- cmp r0, 0x1C
- beq _0801B3D4
- bl _0801BBAA
-_0801B3D4:
- ldr r4, _0801B434 @ =gHitMarker
- ldr r1, [r4]
- movs r0, 0x80
- lsls r0, 7
- ands r0, r1
- cmp r0, 0
- bne _0801B3E6
- bl _0801BBAA
-_0801B3E6:
- ldr r0, _0801B438 @ =0xffffbfff
- ands r1, r0
- str r1, [r4]
- ldr r1, [r6]
- adds r1, 0xB4
- ldrb r2, [r1]
- movs r0, 0x3F
- ands r0, r2
- strb r0, [r1]
- ldr r0, [r6]
- adds r1, r0, 0
- adds r1, 0xB4
- ldrb r0, [r1]
- cmp r0, 0x6
- bne _0801B408
- movs r0, 0x2
- strb r0, [r1]
-_0801B408:
- ldr r1, _0801B43C @ =gBattleCommunication
- ldr r0, [r6]
- adds r0, 0xB4
- ldrb r0, [r0]
- adds r0, 0x40
- strb r0, [r1, 0x3]
- ldr r1, _0801B440 @ =gBattleScripting
- ldr r0, _0801B444 @ =gBattlerTarget
- ldrb r0, [r0]
- strb r0, [r1, 0x17]
- bl BattleScriptPushCursor
- ldr r1, _0801B448 @ =gBattlescriptCurrInstr
- ldr r0, _0801B44C @ =BattleScript_SynchronizeActivates
- str r0, [r1]
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r4]
- b _0801BB5A
- .align 2, 0
-_0801B434: .4byte gHitMarker
-_0801B438: .4byte 0xffffbfff
-_0801B43C: .4byte gBattleCommunication
-_0801B440: .4byte gBattleScripting
-_0801B444: .4byte gBattlerTarget
-_0801B448: .4byte gBattlescriptCurrInstr
-_0801B44C: .4byte BattleScript_SynchronizeActivates
-_0801B450:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x1C
- beq _0801B45A
- b _0801BBAA
-_0801B45A:
- ldr r4, _0801B4B8 @ =gHitMarker
- ldr r1, [r4]
- movs r0, 0x80
- lsls r0, 7
- ands r0, r1
- cmp r0, 0
- bne _0801B46A
- b _0801BBAA
-_0801B46A:
- ldr r0, _0801B4BC @ =0xffffbfff
- ands r1, r0
- str r1, [r4]
- adds r3, r6, 0
- ldr r1, [r3]
- adds r1, 0xB4
- ldrb r2, [r1]
- movs r0, 0x3F
- ands r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r1, r0, 0
- adds r1, 0xB4
- ldrb r0, [r1]
- cmp r0, 0x6
- bne _0801B48E
- movs r0, 0x2
- strb r0, [r1]
-_0801B48E:
- ldr r1, _0801B4C0 @ =gBattleCommunication
- ldr r0, [r6]
- adds r0, 0xB4
- ldrb r0, [r0]
- strb r0, [r1, 0x3]
- ldr r1, _0801B4C4 @ =gBattleScripting
- ldr r0, _0801B4C8 @ =gBattlerAttacker
- ldrb r0, [r0]
- strb r0, [r1, 0x17]
- bl BattleScriptPushCursor
- ldr r1, _0801B4CC @ =gBattlescriptCurrInstr
- ldr r0, _0801B4D0 @ =BattleScript_SynchronizeActivates
- str r0, [r1]
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r4]
- b _0801BB5A
- .align 2, 0
-_0801B4B8: .4byte gHitMarker
-_0801B4BC: .4byte 0xffffbfff
-_0801B4C0: .4byte gBattleCommunication
-_0801B4C4: .4byte gBattleScripting
-_0801B4C8: .4byte gBattlerAttacker
-_0801B4CC: .4byte gBattlescriptCurrInstr
-_0801B4D0: .4byte BattleScript_SynchronizeActivates
-_0801B4D4:
- movs r5, 0
- ldr r0, _0801B50C @ =gBattlersCount
- ldrb r1, [r0]
- cmp r5, r1
- blt _0801B4E0
- b _0801BBAA
-_0801B4E0:
- ldr r0, _0801B510 @ =gBattleMons
- adds r4, r1, 0
- ldr r2, _0801B514 @ =gStatuses3
- adds r3, r0, 0
- adds r3, 0x20
- movs r6, 0x80
- lsls r6, 12
-_0801B4EE:
- ldrb r1, [r3]
- cmp r1, 0x16
- bne _0801B4FE
- ldr r0, [r2]
- ands r0, r6
- cmp r0, 0
- beq _0801B4FE
- b _0801BAAC
-_0801B4FE:
- adds r2, 0x4
- adds r3, 0x58
- adds r5, 0x1
- cmp r5, r4
- blt _0801B4EE
- b _0801BBAA
- .align 2, 0
-_0801B50C: .4byte gBattlersCount
-_0801B510: .4byte gBattleMons
-_0801B514: .4byte gStatuses3
-_0801B518:
- movs r5, 0
- ldr r0, _0801B5F4 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B524
- b _0801BBAA
-_0801B524:
- ldr r2, _0801B5F8 @ =gActiveBattler
- mov r8, r2
- ldr r3, _0801B5FC @ =gBattleMons
- adds r3, 0x20
- str r3, [sp, 0x1C]
- movs r4, 0
- str r4, [sp, 0x20]
-_0801B532:
- ldr r1, [sp, 0x1C]
- ldrb r0, [r1]
- cmp r0, 0x24
- beq _0801B53C
- b _0801B6D6
-_0801B53C:
- ldr r0, _0801B600 @ =gStatuses3
- ldr r2, [sp, 0x20]
- adds r0, r2, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 13
- ands r1, r0
- str r2, [sp, 0x18]
- cmp r1, 0
- bne _0801B552
- b _0801B6D6
-_0801B552:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerPosition
- movs r1, 0x1
- adds r6, r0, 0
- eors r6, r1
- ands r6, r1
- adds r0, r6, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r6, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0801B604 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r2, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0801B584
- b _0801B69C
-_0801B584:
- movs r3, 0x58
- adds r0, r4, 0
- muls r0, r3
- ldr r3, _0801B5FC @ =gBattleMons
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801B658
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B60C
- movs r1, 0x58
- adds r0, r7, 0
- muls r0, r1
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801B60C
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B60C
- str r2, [sp, 0x24]
- bl Random
- ldr r2, [sp, 0x24]
- adds r1, r2, 0
- ands r1, r0
- lsls r1, 1
- orrs r6, r1
- adds r0, r6, 0
- bl GetBattlerAtPosition
- mov r2, r8
- strb r0, [r2]
- ldrb r0, [r2]
- movs r3, 0x58
- muls r0, r3
- ldr r4, _0801B5FC @ =gBattleMons
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- ldr r1, [sp, 0x1C]
- strb r0, [r1]
- ldrb r0, [r2]
- muls r0, r3
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- ldr r2, _0801B608 @ =gLastUsedAbility
- strb r0, [r2]
- b _0801B6C4
- .align 2, 0
-_0801B5F4: .4byte gBattlersCount
-_0801B5F8: .4byte gActiveBattler
-_0801B5FC: .4byte gBattleMons
-_0801B600: .4byte gStatuses3
-_0801B604: .4byte gBattleTypeFlags
-_0801B608: .4byte gLastUsedAbility
-_0801B60C:
- ldr r3, _0801B650 @ =gBattleMons
- movs r2, 0x58
- adds r0, r4, 0
- muls r0, r2
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801B658
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B658
- mov r0, r8
- strb r4, [r0]
- adds r1, r5, 0
- muls r1, r2
- adds r1, r3
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- adds r1, 0x20
- strb r0, [r1]
- mov r1, r8
- ldrb r0, [r1]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- ldr r2, _0801B654 @ =gLastUsedAbility
- strb r0, [r2]
- b _0801B6C4
- .align 2, 0
-_0801B650: .4byte gBattleMons
-_0801B654: .4byte gLastUsedAbility
-_0801B658:
- ldr r3, _0801B698 @ =gBattleMons
- movs r2, 0x58
- adds r0, r7, 0
- muls r0, r2
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801B6CE
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B6CE
- mov r4, r8
- strb r7, [r4]
- adds r1, r5, 0
- muls r1, r2
- adds r1, r3
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- adds r1, 0x20
- strb r0, [r1]
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- b _0801B6C0
- .align 2, 0
-_0801B698: .4byte gBattleMons
-_0801B69C:
- mov r2, r8
- strb r4, [r2]
- movs r3, 0x58
- adds r0, r4, 0
- muls r0, r3
- ldr r4, _0801B6F0 @ =gBattleMons
- adds r0, r4
- adds r2, r0, 0
- adds r2, 0x20
- ldrb r1, [r2]
- cmp r1, 0
- beq _0801B6CE
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801B6CE
- ldr r0, [sp, 0x1C]
- strb r1, [r0]
- ldrb r0, [r2]
-_0801B6C0:
- ldr r1, _0801B6F4 @ =gLastUsedAbility
- strb r0, [r1]
-_0801B6C4:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801B6CE:
- mov r2, r9
- cmp r2, 0
- beq _0801B6D6
- b _0801BAC8
-_0801B6D6:
- ldr r3, [sp, 0x1C]
- adds r3, 0x58
- str r3, [sp, 0x1C]
- ldr r4, [sp, 0x20]
- adds r4, 0x4
- str r4, [sp, 0x20]
- adds r5, 0x1
- ldr r0, _0801B6F8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- bge _0801B6EE
- b _0801B532
-_0801B6EE:
- b _0801BBAA
- .align 2, 0
-_0801B6F0: .4byte gBattleMons
-_0801B6F4: .4byte gLastUsedAbility
-_0801B6F8: .4byte gBattlersCount
-_0801B6FC:
- movs r5, 0
- ldr r0, _0801B734 @ =gBattlersCount
- ldrb r1, [r0]
- cmp r5, r1
- blt _0801B708
- b _0801BBAA
-_0801B708:
- ldr r0, _0801B738 @ =gBattleMons
- adds r4, r1, 0
- ldr r2, _0801B73C @ =gStatuses3
- adds r3, r0, 0
- adds r3, 0x20
- movs r6, 0x80
- lsls r6, 12
-_0801B716:
- ldrb r1, [r3]
- cmp r1, 0x16
- bne _0801B726
- ldr r0, [r2]
- ands r0, r6
- cmp r0, 0
- beq _0801B726
- b _0801BB3C
-_0801B726:
- adds r2, 0x4
- adds r3, 0x58
- adds r5, 0x1
- cmp r5, r4
- blt _0801B716
- b _0801BBAA
- .align 2, 0
-_0801B734: .4byte gBattlersCount
-_0801B738: .4byte gBattleMons
-_0801B73C: .4byte gStatuses3
-_0801B740:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801B790 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B756
- b _0801BBAA
-_0801B756:
- ldr r0, _0801B794 @ =gBattleMons
- mov r8, r0
-_0801B75A:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- adds r4, r5, 0x1
- cmp r0, r6
- beq _0801B784
- movs r0, 0x58
- muls r0, r5
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- bne _0801B784
- ldr r0, _0801B798 @ =gLastUsedAbility
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B784:
- adds r5, r4, 0
- ldr r0, _0801B790 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B75A
- b _0801BBAA
- .align 2, 0
-_0801B790: .4byte gBattlersCount
-_0801B794: .4byte gBattleMons
-_0801B798: .4byte gLastUsedAbility
-_0801B79C:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801B7EC @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B7B2
- b _0801BBAA
-_0801B7B2:
- ldr r1, _0801B7F0 @ =gBattleMons
- mov r8, r1
-_0801B7B6:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- adds r4, r5, 0x1
- cmp r0, r6
- bne _0801B7E0
- movs r0, 0x58
- muls r0, r5
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- bne _0801B7E0
- ldr r0, _0801B7F4 @ =gLastUsedAbility
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B7E0:
- adds r5, r4, 0
- ldr r0, _0801B7EC @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B7B6
- b _0801BBAA
- .align 2, 0
-_0801B7EC: .4byte gBattlersCount
-_0801B7F0: .4byte gBattleMons
-_0801B7F4: .4byte gLastUsedAbility
-_0801B7F8:
- mov r2, r8
- ldrb r0, [r2]
- cmp r0, 0xFD
- beq _0801B820
- cmp r0, 0xFE
- beq _0801B858
- movs r5, 0
- ldr r0, _0801B818 @ =gBattlersCount
- adds r3, r0, 0
- ldrb r4, [r3]
- cmp r5, r4
- blt _0801B812
- b _0801BBAA
-_0801B812:
- ldr r2, _0801B81C @ =gBattleMons
- b _0801B890
- .align 2, 0
-_0801B818: .4byte gBattlersCount
-_0801B81C: .4byte gBattleMons
-_0801B820:
- movs r5, 0
- ldr r0, _0801B850 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B82C
- b _0801BBAA
-_0801B82C:
- ldr r3, _0801B854 @ =gStatuses3
- movs r2, 0x80
- lsls r2, 9
- adds r1, r0, 0
-_0801B834:
- lsls r0, r5, 2
- adds r0, r3
- ldr r0, [r0]
- ands r0, r2
- adds r4, r5, 0x1
- cmp r0, 0
- beq _0801B848
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B848:
- adds r5, r4, 0
- cmp r5, r1
- blt _0801B834
- b _0801BBAA
- .align 2, 0
-_0801B850: .4byte gBattlersCount
-_0801B854: .4byte gStatuses3
-_0801B858:
- movs r5, 0
- ldr r0, _0801B888 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B864
- b _0801BBAA
-_0801B864:
- ldr r3, _0801B88C @ =gStatuses3
- movs r2, 0x80
- lsls r2, 10
- adds r1, r0, 0
-_0801B86C:
- lsls r0, r5, 2
- adds r0, r3
- ldr r0, [r0]
- ands r0, r2
- adds r4, r5, 0x1
- cmp r0, 0
- beq _0801B880
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B880:
- adds r5, r4, 0
- cmp r5, r1
- blt _0801B86C
- b _0801BBAA
- .align 2, 0
-_0801B888: .4byte gBattlersCount
-_0801B88C: .4byte gStatuses3
-_0801B890:
- movs r0, 0x58
- muls r0, r5
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r5, 0x1
- cmp r0, r7
- bne _0801B8AA
- mov r0, r8
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B8AA:
- adds r5, r4, 0
- ldrb r1, [r3]
- cmp r5, r1
- blt _0801B890
- b _0801BBAA
-_0801B8B4:
- movs r5, 0
- ldr r0, _0801B8F0 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B8C0
- b _0801BBAA
-_0801B8C0:
- ldr r6, _0801B8F4 @ =gBattleMons
- adds r2, r0, 0
- movs r3, 0x58
-_0801B8C6:
- adds r0, r5, 0
- muls r0, r3
- adds r1, r0, r6
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r5, 0x1
- cmp r0, r7
- bne _0801B8E8
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B8E8
- mov r0, r8
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B8E8:
- adds r5, r4, 0
- cmp r5, r2
- blt _0801B8C6
- b _0801BBAA
- .align 2, 0
-_0801B8F0: .4byte gBattlersCount
-_0801B8F4: .4byte gBattleMons
-_0801B8F8:
- ldr r0, _0801B908 @ =gLastUsedAbility
- strb r7, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- b _0801B94A
- .align 2, 0
-_0801B908: .4byte gLastUsedAbility
-_0801B90C:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801B99C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- bge _0801B94A
- ldr r4, _0801B9A0 @ =gBattleMons
-_0801B922:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r6
- beq _0801B940
- movs r0, 0x58
- muls r0, r5
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- beq _0801B8F8
-_0801B940:
- adds r5, 0x1
- ldr r0, _0801B99C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B922
-_0801B94A:
- mov r1, r9
- cmp r1, 0
- beq _0801B952
- b _0801BBB0
-_0801B952:
- movs r5, 0
- ldr r0, _0801B99C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r9, r0
- blt _0801B95E
- b _0801BBAA
-_0801B95E:
- ldr r2, _0801B9A0 @ =gBattleMons
- mov r8, r2
-_0801B962:
- movs r0, 0x58
- muls r0, r5
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r5, 0x1
- cmp r0, r7
- bne _0801B990
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r6
- bne _0801B990
- cmp r5, r10
- beq _0801B990
- ldr r0, _0801B9A4 @ =gLastUsedAbility
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B990:
- adds r5, r4, 0
- ldr r0, _0801B99C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B962
- b _0801BBAA
- .align 2, 0
-_0801B99C: .4byte gBattlersCount
-_0801B9A0: .4byte gBattleMons
-_0801B9A4: .4byte gLastUsedAbility
-_0801B9A8:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801B9F8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B9BE
- b _0801BBAA
-_0801B9BE:
- ldr r4, _0801B9FC @ =gBattleMons
-_0801B9C0:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r6
- beq _0801B9EC
- movs r0, 0x58
- muls r0, r5
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- bne _0801B9EC
- ldr r0, _0801BA00 @ =gLastUsedAbility
- strb r7, [r0]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801B9EC:
- adds r5, 0x1
- ldr r0, _0801B9F8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B9C0
- b _0801BBAA
- .align 2, 0
-_0801B9F8: .4byte gBattlersCount
-_0801B9FC: .4byte gBattleMons
-_0801BA00: .4byte gLastUsedAbility
-_0801BA04:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801BA54 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801BA1A
- b _0801BBAA
-_0801BA1A:
- ldr r4, _0801BA58 @ =gBattleMons
-_0801BA1C:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r6
- bne _0801BA48
- movs r0, 0x58
- muls r0, r5
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- bne _0801BA48
- ldr r0, _0801BA5C @ =gLastUsedAbility
- strb r7, [r0]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801BA48:
- adds r5, 0x1
- ldr r0, _0801BA54 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801BA1C
- b _0801BBAA
- .align 2, 0
-_0801BA54: .4byte gBattlersCount
-_0801BA58: .4byte gBattleMons
-_0801BA5C: .4byte gLastUsedAbility
-_0801BA60:
- ldr r0, _0801BA78 @ =BattleScript_CastformChange
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801BA7C @ =gBattleScripting
- strb r4, [r0, 0x17]
-_0801BA6A:
- ldr r0, _0801BA80 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x7F
- mov r1, r9
- subs r1, 0x1
- strb r1, [r0]
- b _0801BBAA
- .align 2, 0
-_0801BA78: .4byte BattleScript_CastformChange
-_0801BA7C: .4byte gBattleScripting
-_0801BA80: .4byte gBattleStruct
-_0801BA84:
- ldr r0, _0801BAA0 @ =BattleScript_CastformChange
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801BAA4 @ =gBattleScripting
- mov r3, r10
- strb r3, [r0, 0x17]
- ldr r0, _0801BAA8 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x7F
- mov r1, r9
- subs r1, 0x1
- strb r1, [r0]
- b _0801BBC6
- .align 2, 0
-_0801BAA0: .4byte BattleScript_CastformChange
-_0801BAA4: .4byte gBattleScripting
-_0801BAA8: .4byte gBattleStruct
-_0801BAAC:
- mov r4, r8
- strb r1, [r4]
- ldr r0, [r2]
- ldr r1, _0801BAC0 @ =0xfff7ffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801BAC4 @ =BattleScript_IntimidateActivatesEnd3
- bl BattleScriptPushCursorAndCallback
- b _0801BB52
- .align 2, 0
-_0801BAC0: .4byte 0xfff7ffff
-_0801BAC4: .4byte BattleScript_IntimidateActivatesEnd3
-_0801BAC8:
- ldr r0, _0801BB18 @ =BattleScript_TraceActivates
- bl BattleScriptPushCursorAndCallback
- ldr r1, _0801BB1C @ =gStatuses3
- ldr r0, [sp, 0x18]
- adds r1, r0, r1
- ldr r0, [r1]
- ldr r2, _0801BB20 @ =0xffefffff
- ands r0, r2
- str r0, [r1]
- ldr r0, _0801BB24 @ =gBattleScripting
- strb r5, [r0, 0x17]
- ldr r1, _0801BB28 @ =gBattleTextBuff1
- movs r4, 0xFD
- strb r4, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- ldr r2, _0801BB2C @ =gActiveBattler
- ldrb r0, [r2]
- strb r0, [r1, 0x2]
- ldr r3, _0801BB30 @ =gBattlerPartyIndexes
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _0801BB34 @ =gBattleTextBuff2
- strb r4, [r1]
- movs r0, 0x9
- strb r0, [r1, 0x1]
- ldr r0, _0801BB38 @ =gLastUsedAbility
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r1, 0x3]
- b _0801BBAA
- .align 2, 0
-_0801BB18: .4byte BattleScript_TraceActivates
-_0801BB1C: .4byte gStatuses3
-_0801BB20: .4byte 0xffefffff
-_0801BB24: .4byte gBattleScripting
-_0801BB28: .4byte gBattleTextBuff1
-_0801BB2C: .4byte gActiveBattler
-_0801BB30: .4byte gBattlerPartyIndexes
-_0801BB34: .4byte gBattleTextBuff2
-_0801BB38: .4byte gLastUsedAbility
-_0801BB3C:
- mov r3, r8
- strb r1, [r3]
- ldr r0, [r2]
- ldr r1, _0801BB68 @ =0xfff7ffff
- ands r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801BB6C @ =gBattlescriptCurrInstr
- ldr r0, _0801BB70 @ =BattleScript_IntimidateActivates
- str r0, [r1]
-_0801BB52:
- ldr r0, _0801BB74 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xD8
- strb r5, [r0]
-_0801BB5A:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- b _0801BBAA
- .align 2, 0
-_0801BB68: .4byte 0xfff7ffff
-_0801BB6C: .4byte gBattlescriptCurrInstr
-_0801BB70: .4byte BattleScript_IntimidateActivates
-_0801BB74: .4byte gBattleStruct
-_0801BB78:
- movs r5, 0
- ldr r0, _0801BBD8 @ =gBattlersCount
- ldrb r1, [r0]
- cmp r5, r1
- bge _0801BBAA
- ldr r0, _0801BBDC @ =gBattleMons
- adds r2, r1, 0
- adds r1, r0, 0
- adds r1, 0x20
- ldr r3, _0801BBE0 @ =gLastUsedAbility
-_0801BB8C:
- ldrb r0, [r1]
- cmp r0, r7
- bne _0801BBA2
- cmp r5, r10
- beq _0801BBA2
- strb r7, [r3]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801BBA2:
- adds r1, 0x58
- adds r5, 0x1
- cmp r5, r2
- blt _0801BB8C
-_0801BBAA:
- mov r4, r9
- cmp r4, 0
- beq _0801BBC6
-_0801BBB0:
- ldr r0, [sp, 0x4]
- cmp r0, 0xB
- bhi _0801BBC6
- ldr r1, _0801BBE0 @ =gLastUsedAbility
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _0801BBC6
- adds r1, r0, 0
- mov r0, r10
- bl sub_80C71D0
-_0801BBC6:
- mov r0, r9
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801BBD8: .4byte gBattlersCount
-_0801BBDC: .4byte gBattleMons
-_0801BBE0: .4byte gLastUsedAbility
- thumb_func_end AbilityBattleEffects
-
thumb_func_start BattleScriptExecute
BattleScriptExecute: @ 801BBE4
ldr r1, _0801BC10 @ =gBattlescriptCurrInstr
@@ -6427,7 +1513,7 @@ _0801C816:
cmp r2, 0
beq _0801C82E
ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8C0 @ =gUnknown_8250094
+ ldr r1, _0801C8C0 @ =gStatusConditionString_PoisonJpn
bl StringCopy
movs r0, 0x1
mov r10, r0
@@ -6446,7 +1532,7 @@ _0801C82E:
ands r0, r1
str r0, [r2]
ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8C8 @ =gUnknown_825009C
+ ldr r1, _0801C8C8 @ =gStatusConditionString_SleepJpn
bl StringCopy
movs r2, 0x1
add r10, r2
@@ -6457,7 +1543,7 @@ _0801C854:
cmp r0, 0
beq _0801C86A
ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8CC @ =gUnknown_82500A4
+ ldr r1, _0801C8CC @ =gStatusConditionString_ParalysisJpn
bl StringCopy
movs r3, 0x1
add r10, r3
@@ -6468,7 +1554,7 @@ _0801C86A:
cmp r0, 0
beq _0801C880
ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8D0 @ =gUnknown_82500AC
+ ldr r1, _0801C8D0 @ =gStatusConditionString_BurnJpn
bl StringCopy
movs r0, 0x1
add r10, r0
@@ -6479,7 +1565,7 @@ _0801C880:
cmp r0, 0
beq _0801C896
ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8D4 @ =gUnknown_82500B4
+ ldr r1, _0801C8D4 @ =gStatusConditionString_IceJpn
bl StringCopy
movs r1, 0x1
add r10, r1
@@ -6491,7 +1577,7 @@ _0801C896:
cmp r0, 0
beq _0801C8AE
ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8D8 @ =gUnknown_82500BC
+ ldr r1, _0801C8D8 @ =gStatusConditionString_ConfusionJpn
bl StringCopy
movs r3, 0x1
add r10, r3
@@ -6504,13 +1590,13 @@ _0801C8AE:
b _0801C8E4
.align 2, 0
_0801C8BC: .4byte gBattleTextBuff1
-_0801C8C0: .4byte gUnknown_8250094
+_0801C8C0: .4byte gStatusConditionString_PoisonJpn
_0801C8C4: .4byte 0xf7ffffff
-_0801C8C8: .4byte gUnknown_825009C
-_0801C8CC: .4byte gUnknown_82500A4
-_0801C8D0: .4byte gUnknown_82500AC
-_0801C8D4: .4byte gUnknown_82500B4
-_0801C8D8: .4byte gUnknown_82500BC
+_0801C8C8: .4byte gStatusConditionString_SleepJpn
+_0801C8CC: .4byte gStatusConditionString_ParalysisJpn
+_0801C8D0: .4byte gStatusConditionString_BurnJpn
+_0801C8D4: .4byte gStatusConditionString_IceJpn
+_0801C8D8: .4byte gStatusConditionString_ConfusionJpn
_0801C8DC: .4byte gBattleCommunication
_0801C8E0:
ldr r1, _0801C910 @ =gBattleCommunication
@@ -6559,7 +1645,7 @@ _0801C91C:
ands r2, r0
str r2, [r1]
ldr r0, _0801C97C @ =gBattleTextBuff1
- ldr r1, _0801C980 @ =gUnknown_82500C4
+ ldr r1, _0801C980 @ =gStatusConditionString_LoveJpn
bl StringCopy
ldr r0, _0801C984 @ =BattleScript_BerryCureChosenStatusEnd2
bl BattleScriptExecute
@@ -6591,7 +1677,7 @@ _0801C95A:
.align 2, 0
_0801C978: .4byte 0xfff0ffff
_0801C97C: .4byte gBattleTextBuff1
-_0801C980: .4byte gUnknown_82500C4
+_0801C980: .4byte gStatusConditionString_LoveJpn
_0801C984: .4byte BattleScript_BerryCureChosenStatusEnd2
_0801C988: .4byte gBattleCommunication
_0801C98C: .4byte gBattleScripting
@@ -6919,7 +2005,7 @@ _0801CC5C:
ands r1, r0
str r1, [r2]
ldr r0, _0801CC88 @ =gBattleTextBuff1
- ldr r1, _0801CC8C @ =gUnknown_82500C4
+ ldr r1, _0801CC8C @ =gStatusConditionString_LoveJpn
bl StringCopy
bl BattleScriptPushCursor
ldr r1, _0801CC90 @ =gBattleCommunication
@@ -6935,7 +2021,7 @@ _0801CC5C:
_0801CC80: .4byte gBattleMons
_0801CC84: .4byte 0xfff0ffff
_0801CC88: .4byte gBattleTextBuff1
-_0801CC8C: .4byte gUnknown_82500C4
+_0801CC8C: .4byte gStatusConditionString_LoveJpn
_0801CC90: .4byte gBattleCommunication
_0801CC94: .4byte gBattlescriptCurrInstr
_0801CC98: .4byte BattleScript_BerryCureChosenStatusRet
@@ -6966,7 +2052,7 @@ _0801CCC4:
cmp r2, 0
beq _0801CCD4
ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD68 @ =gUnknown_8250094
+ ldr r1, _0801CD68 @ =gStatusConditionString_PoisonJpn
bl StringCopy
_0801CCD4:
ldr r0, [r6]
@@ -6982,7 +2068,7 @@ _0801CCD4:
ands r0, r1
str r0, [r2]
ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD70 @ =gUnknown_825009C
+ ldr r1, _0801CD70 @ =gStatusConditionString_SleepJpn
bl StringCopy
_0801CCF4:
ldr r0, [r6]
@@ -6991,7 +2077,7 @@ _0801CCF4:
cmp r0, 0
beq _0801CD06
ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD74 @ =gUnknown_82500A4
+ ldr r1, _0801CD74 @ =gStatusConditionString_ParalysisJpn
bl StringCopy
_0801CD06:
ldr r0, [r6]
@@ -7000,7 +2086,7 @@ _0801CD06:
cmp r0, 0
beq _0801CD18
ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD78 @ =gUnknown_82500AC
+ ldr r1, _0801CD78 @ =gStatusConditionString_BurnJpn
bl StringCopy
_0801CD18:
ldr r0, [r6]
@@ -7009,7 +2095,7 @@ _0801CD18:
cmp r0, 0
beq _0801CD2A
ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD7C @ =gUnknown_82500B4
+ ldr r1, _0801CD7C @ =gStatusConditionString_IceJpn
bl StringCopy
_0801CD2A:
adds r5, r4
@@ -7019,7 +2105,7 @@ _0801CD2A:
cmp r0, 0
beq _0801CD3E
ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD80 @ =gUnknown_82500BC
+ ldr r1, _0801CD80 @ =gStatusConditionString_ConfusionJpn
bl StringCopy
_0801CD3E:
movs r4, 0
@@ -7042,13 +2128,13 @@ _0801CD58:
.align 2, 0
_0801CD60: .4byte gBattleMons
_0801CD64: .4byte gBattleTextBuff1
-_0801CD68: .4byte gUnknown_8250094
+_0801CD68: .4byte gStatusConditionString_PoisonJpn
_0801CD6C: .4byte 0xf7ffffff
-_0801CD70: .4byte gUnknown_825009C
-_0801CD74: .4byte gUnknown_82500A4
-_0801CD78: .4byte gUnknown_82500AC
-_0801CD7C: .4byte gUnknown_82500B4
-_0801CD80: .4byte gUnknown_82500BC
+_0801CD70: .4byte gStatusConditionString_SleepJpn
+_0801CD74: .4byte gStatusConditionString_ParalysisJpn
+_0801CD78: .4byte gStatusConditionString_BurnJpn
+_0801CD7C: .4byte gStatusConditionString_IceJpn
+_0801CD80: .4byte gStatusConditionString_ConfusionJpn
_0801CD84: .4byte gBattleCommunication
_0801CD88: .4byte gBattlescriptCurrInstr
_0801CD8C: .4byte BattleScript_BerryCureChosenStatusRet
@@ -7597,7 +2683,7 @@ _0801D25E:
adds r0, 0x20
ldrb r1, [r0]
adds r0, r5, 0
- bl sub_80C71D0
+ bl RecordAbilityBattle
ldr r1, _0801D2A0 @ =gSpecialStatuses
lsls r0, r5, 2
adds r0, r5
diff --git a/asm/field_weather.s b/asm/field_weather.s
index ac24101a7..c165212d4 100644
--- a/asm/field_weather.s
+++ b/asm/field_weather.s
@@ -2561,8 +2561,8 @@ _0807AF92:
bx r0
thumb_func_end sub_807AF00
- thumb_func_start weather_get_current
-weather_get_current: @ 807AF98
+ thumb_func_start GetCurrentWeather
+GetCurrentWeather: @ 807AF98
ldr r0, _0807AFA4 @ =gUnknown_2037F34
movs r1, 0xDA
lsls r1, 3
@@ -2571,7 +2571,7 @@ weather_get_current: @ 807AF98
bx lr
.align 2, 0
_0807AFA4: .4byte gUnknown_2037F34
- thumb_func_end weather_get_current
+ thumb_func_end GetCurrentWeather
thumb_func_start SetRainStrengthFromSoundEffect
SetRainStrengthFromSoundEffect: @ 807AFA8
diff --git a/data/data.s b/data/data.s
index e8ce97d9c..65f48e4f3 100644
--- a/data/data.s
+++ b/data/data.s
@@ -254,25 +254,25 @@ gUnknown_8250038:: @ 8250038
gUnknown_8250070:: @ 8250070
.incbin "baserom.gba", 0x250070, 0x24
-gUnknown_8250094:: @ 8250094
+gStatusConditionString_PoisonJpn:: @ 8250094
.incbin "baserom.gba", 0x250094, 0x8
-gUnknown_825009C:: @ 825009C
+gStatusConditionString_SleepJpn:: @ 825009C
.incbin "baserom.gba", 0x25009C, 0x8
-gUnknown_82500A4:: @ 82500A4
+gStatusConditionString_ParalysisJpn:: @ 82500A4
.incbin "baserom.gba", 0x2500A4, 0x8
-gUnknown_82500AC:: @ 82500AC
+gStatusConditionString_BurnJpn:: @ 82500AC
.incbin "baserom.gba", 0x2500AC, 0x8
-gUnknown_82500B4:: @ 82500B4
+gStatusConditionString_IceJpn:: @ 82500B4
.incbin "baserom.gba", 0x2500B4, 0x8
-gUnknown_82500BC:: @ 82500BC
+gStatusConditionString_ConfusionJpn:: @ 82500BC
.incbin "baserom.gba", 0x2500BC, 0x8
-gUnknown_82500C4:: @ 82500C4
+gStatusConditionString_LoveJpn:: @ 82500C4
.incbin "baserom.gba", 0x2500C4, 0x8
gUnknown_82500CC:: @ 82500CC
diff --git a/include/battle.h b/include/battle.h
index 188e5aae3..7db128430 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -241,7 +241,7 @@ struct ResourceFlags
u32 flags[4];
};
-#define UNKNOWN_FLAG_FLASH_FIRE 1
+#define RESOURCE_FLAG_FLASH_FIRE 1
struct DisableStruct
{
@@ -274,7 +274,7 @@ struct DisableStruct
/*0x18*/ u8 truantSwitchInHack : 1;
/*0x18*/ u8 unk18_a_2 : 2;
/*0x18*/ u8 mimickedMoves : 4;
- /*0x19*/ u8 rechargeCounter;
+ /*0x19*/ u8 rechargeTimer;
/*0x1A*/ u8 unk1A[2];
};
@@ -559,13 +559,16 @@ struct BattleStruct
u16 hpOnSwitchout[2];
u8 abilityPreventingSwitchout;
u8 hpScale;
- u8 synchronizeMoveEffect;
+ u8 field_AE;
u8 field_AF;
- u32 savedBattleTypeFlags; // TODO: Is it correct to place it here? Or simply not used?
- u8 field_B4;
+ u8 field_B0;
+ u8 field_B1;
+ u8 field_B2;
+ u8 field_B3;
+ u8 synchronizeMoveEffect;
u8 field_B5;
u8 field_B6;
- u8 field_B7;
+ u8 atkCancellerTracker;
// void (*savedCallback)(void);
u16 usedHeldItems[MAX_BATTLERS_COUNT];
u8 chosenItem[4]; // why is this an u8?
@@ -581,31 +584,11 @@ struct BattleStruct
u8 givenExpMons;
u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2];
u16 castformPalette[MAX_BATTLERS_COUNT][16];
-/*
- // EM fields
- u8 field_180;
- u8 field_181;
- u8 field_182;
- u8 field_183;
- struct BattleEnigmaBerry battleEnigmaBerry;
- u8 wishPerishSongState;
- u8 wishPerishSongBattlerId;
- bool8 overworldWeatherDone;
- u8 atkCancellerTracker;
- u8 field_1A4[96];
- u8 field_204[104];
- u8 field_26C[40];
- u8 AI_monToSwitchIntoId[BATTLE_BANKS_COUNT];
- u8 field_298[8];
- u8 field_2A0;
- u8 field_2A1;
- u8 field_2A2;
-*/
u8 wishPerishSongState;
u8 wishPerishSongBattlerId;
u8 field_182; // overworldWeatherDone?
- u8 field_183; // atkCancellerTracker?
- u8 field_184[124]; // only for padding
+ u8 field_183;
+ u8 field_184[124]; // currently unknown
}; // size == 0x200 bytes
extern struct BattleStruct *gBattleStruct;
@@ -620,6 +603,13 @@ extern struct BattleStruct *gBattleStruct;
#define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
#define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
+#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0))
+#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type))
+#define SET_BATTLER_TYPE(battlerId, type) \
+{ \
+ gBattleMons[battlerId].type1 = type; \
+ gBattleMons[battlerId].type2 = type; \
+}
#define MOVE_EFFECT_SLEEP 0x1
#define MOVE_EFFECT_POISON 0x2
@@ -734,6 +724,7 @@ extern struct BattleStruct *gBattleStruct;
#define B_ANIM_STATUS_WRAPPED 0x9
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
+#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0))
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
@@ -992,5 +983,10 @@ extern u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT];
extern u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT];
extern u16 gSideStatuses[2];
extern u32 gHitMarker;
+extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
+extern u8 gMoveResultFlags;
+extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
+extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
+
#endif // GUARD_BATTLE_H
diff --git a/include/battle_scripts.h b/include/battle_scripts.h
index b64da190e..185f6228d 100644
--- a/include/battle_scripts.h
+++ b/include/battle_scripts.h
@@ -156,6 +156,7 @@ extern const u8 BattleScript_PrintPayDayMoneyString[];
extern const u8 BattleScript_WrapTurnDmg[];
extern const u8 BattleScript_WrapEnds[];
extern const u8 BattleScript_MoveUsedIsInLove[];
+extern const u8 BattleScript_MoveUsedIsInLoveCantAttack[];
extern const u8 BattleScript_MoveUsedIsParalyzedCantAttack[];
extern const u8 BattleScript_NightmareTurnDmg[];
extern const u8 BattleScript_CurseTurnDmg[];
@@ -288,5 +289,9 @@ extern const u8 BattleScript_ActionWatchesCarefully[];
extern const u8 BattleScript_ActionGetNear[];
extern const u8 BattleScript_ActionThrowPokeblock[];
extern const u8 BattleScript_82DBEE3[];
+extern const u8 gUnknown_81D9192[];
+extern const u8 gUnknown_81D9180[];
+extern const u8 BattleScript_IntimidateActivates[];
+extern const u8 BattleScript_IntimidateActivatesEnd3[];
#endif // GUARD_BATTLE_SCRIPTS_H
diff --git a/include/battle_util.h b/include/battle_util.h
index adfa10798..dfe7be60a 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -10,27 +10,27 @@
#define MOVE_LIMITATION_TAUNT (1 << 4)
#define MOVE_LIMITATION_IMPRISON (1 << 5)
-#define ABILITYEFFECT_ON_SWITCHIN 0x0
-#define ABILITYEFFECT_ENDTURN 0x1
-#define ABILITYEFFECT_MOVES_BLOCK 0x2
-#define ABILITYEFFECT_ABSORBING 0x3
-#define ABILITYEFFECT_CONTACT 0x4
-#define ABILITYEFFECT_IMMUNITY 0x5
-#define ABILITYEFFECT_FORECAST 0x6
-#define ABILITYEFFECT_SYNCHRONIZE 0x7
-#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
-#define ABILITYEFFECT_INTIMIDATE1 0x9
-#define ABILITYEFFECT_INTIMIDATE2 0xA
-#define ABILITYEFFECT_TRACE 0xB
-#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
-#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD
-#define ABILITYEFFECT_FIELD_SPORT 0xE
-#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK 0xF
-#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
-#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11
-#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
-#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
-#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF
+#define ABILITYEFFECT_ON_SWITCHIN 0x0
+#define ABILITYEFFECT_ENDTURN 0x1
+#define ABILITYEFFECT_MOVES_BLOCK 0x2
+#define ABILITYEFFECT_ABSORBING 0x3
+#define ABILITYEFFECT_MOVE_END 0x4
+#define ABILITYEFFECT_IMMUNITY 0x5
+#define ABILITYEFFECT_FORECAST 0x6
+#define ABILITYEFFECT_SYNCHRONIZE 0x7
+#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
+#define ABILITYEFFECT_INTIMIDATE1 0x9
+#define ABILITYEFFECT_INTIMIDATE2 0xA
+#define ABILITYEFFECT_TRACE 0xB
+#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
+#define ABILITYEFFECT_CHECK_BATTLER_SIDE 0xD
+#define ABILITYEFFECT_FIELD_SPORT 0xE
+#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 0xF // TODO: Is it correct?
+#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
+#define ABILITYEFFECT_COUNT_BATTLER_SIDE 0x11
+#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
+#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
+#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF
#define ABILITY_ON_OPPOSING_FIELD(battlerId, abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, battlerId, abilityId, 0, 0))
#define ABILITY_ON_FIELD(abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0))
diff --git a/include/field_weather.h b/include/field_weather.h
index c3ecd4fa6..477ca0e76 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -16,5 +16,6 @@ void PlayRainStoppingSoundEffect(void);
bool8 sub_807AA70(void);
void SetWeatherScreenFadeOut(void);
void sub_807B070(void);
+u8 GetCurrentWeather(void);
#endif // GUARD_WEATHER_H
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 0d389aa7f..913068aed 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -479,7 +479,7 @@ void sub_80C71A8(u8 a)
BATTLE_HISTORY->usedMoves[a / 2][i] = 0;
}
-void sub_80C71D0(u8 a, u8 b)
+void RecordAbilityBattle(u8 a, u8 b)
{
if (GetBattlerSide(a) == 0)
BATTLE_HISTORY->abilities[GetBattlerPosition(a) & 1] = b;
diff --git a/src/battle_util.c b/src/battle_util.c
index 8b0383929..55f674215 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -7,16 +7,20 @@
#include "random.h"
#include "pokemon.h"
#include "string_util.h"
+#include "field_weather.h"
#include "battle.h"
#include "battle_anim.h"
#include "battle_scripts.h"
#include "battle_message.h"
#include "battle_controllers.h"
+#include "battle_ai_script_commands.h"
#include "constants/battle.h"
#include "constants/moves.h"
#include "constants/items.h"
#include "constants/species.h"
+#include "constants/weather.h"
#include "constants/abilities.h"
+#include "constants/pokemon.h"
#include "constants/battle_anim.h"
#include "constants/hold_effects.h"
#include "constants/battle_move_effects.h"
@@ -82,7 +86,7 @@ void PressurePPLose(u8 target, u8 attacker, u16 move)
if (gBattleMons[attacker].pp[i])
--gBattleMons[attacker].pp[i];
if (!(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[attacker].mimickedMoves & gBitTable[i]))
+ && !(gDisableStructs[attacker].mimickedMoves & gBitTable[i]))
{
gActiveBattler = attacker;
BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBattler].pp[i]);
@@ -112,8 +116,8 @@ void PressurePPLoseOnUsingImprison(u8 attacker)
}
}
if (imprisonPos != 4
- && !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[attacker].mimickedMoves & gBitTable[imprisonPos]))
+ && !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[attacker].mimickedMoves & gBitTable[imprisonPos]))
{
gActiveBattler = attacker;
BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + imprisonPos, 0, 1, &gBattleMons[gActiveBattler].pp[imprisonPos]);
@@ -140,8 +144,8 @@ void PressurePPLoseOnUsingPerishSong(u8 attacker)
}
}
if (perishSongPos != MAX_MON_MOVES
- && !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[attacker].mimickedMoves & gBitTable[perishSongPos]))
+ && !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[attacker].mimickedMoves & gBitTable[perishSongPos]))
{
gActiveBattler = attacker;
BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + perishSongPos, 0, 1, &gBattleMons[gActiveBattler].pp[perishSongPos]);
@@ -192,14 +196,14 @@ void CancelMultiTurnMoves(u8 battler)
bool8 WasUnableToUseMove(u8 battler)
{
if (gProtectStructs[battler].prlzImmobility
- || gProtectStructs[battler].targetNotAffected
- || gProtectStructs[battler].usedImprisonedMove
- || gProtectStructs[battler].loveImmobility
- || gProtectStructs[battler].usedDisabledMove
- || gProtectStructs[battler].usedTauntedMove
- || gProtectStructs[battler].flag2Unknown
- || gProtectStructs[battler].flinchImmobility
- || gProtectStructs[battler].confusionSelfDmg)
+ || gProtectStructs[battler].targetNotAffected
+ || gProtectStructs[battler].usedImprisonedMove
+ || gProtectStructs[battler].loveImmobility
+ || gProtectStructs[battler].usedDisabledMove
+ || gProtectStructs[battler].usedTauntedMove
+ || gProtectStructs[battler].flag2Unknown
+ || gProtectStructs[battler].flinchImmobility
+ || gProtectStructs[battler].confusionSelfDmg)
return TRUE;
else
return FALSE;
@@ -545,8 +549,8 @@ u8 DoFieldEndTurnEffects(void)
{
gActiveBattler = gBattlerByTurnOrder[gBattleStruct->turnSideTracker];
if (gWishFutureKnock.wishCounter[gActiveBattler] != 0
- && --gWishFutureKnock.wishCounter[gActiveBattler] == 0
- && gBattleMons[gActiveBattler].hp != 0)
+ && --gWishFutureKnock.wishCounter[gActiveBattler] == 0
+ && gBattleMons[gActiveBattler].hp != 0)
{
gBattlerTarget = gActiveBattler;
BattleScriptExecute(BattleScript_WishComesTrue);
@@ -693,8 +697,8 @@ u8 DoBattlerEndTurnEffects(void)
{
case ENDTURN_INGRAIN: // ingrain
if ((gStatuses3[gActiveBattler] & STATUS3_ROOTED)
- && gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP
- && gBattleMons[gActiveBattler].hp != 0)
+ && gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP
+ && gBattleMons[gActiveBattler].hp != 0)
{
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
if (gBattleMoveDamage == 0)
@@ -722,8 +726,8 @@ u8 DoBattlerEndTurnEffects(void)
break;
case ENDTURN_LEECH_SEED: // leech seed
if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED)
- && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0
- && gBattleMons[gActiveBattler].hp != 0)
+ && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0
+ && gBattleMons[gActiveBattler].hp != 0)
{
gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver.
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
@@ -891,7 +895,7 @@ u8 DoBattlerEndTurnEffects(void)
if (WasUnableToUseMove(gActiveBattler))
CancelMultiTurnMoves(gActiveBattler);
else if (!(gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
- && (gBattleMons[gActiveBattler].status2 & STATUS2_MULTIPLETURNS))
+ && (gBattleMons[gActiveBattler].status2 & STATUS2_MULTIPLETURNS))
{
gBattleMons[gActiveBattler].status2 &= ~(STATUS2_MULTIPLETURNS);
if (!(gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION))
@@ -938,7 +942,7 @@ u8 DoBattlerEndTurnEffects(void)
gDisableStructs[gActiveBattler].encoreTimer = 0;
}
else if (--gDisableStructs[gActiveBattler].encoreTimer == 0
- || gBattleMons[gActiveBattler].pp[gDisableStructs[gActiveBattler].encoredMovePos] == 0)
+ || gBattleMons[gActiveBattler].pp[gDisableStructs[gActiveBattler].encoredMovePos] == 0)
{
gDisableStructs[gActiveBattler].encoredMove = 0;
gDisableStructs[gActiveBattler].encoreTimer = 0;
@@ -1011,8 +1015,8 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
}
++gBattleStruct->wishPerishSongBattlerId;
if (gWishFutureKnock.futureSightCounter[gActiveBattler] != 0
- && --gWishFutureKnock.futureSightCounter[gActiveBattler] == 0
- && gBattleMons[gActiveBattler].hp != 0)
+ && --gWishFutureKnock.futureSightCounter[gActiveBattler] == 0
+ && gBattleMons[gActiveBattler].hp != 0)
{
if (gWishFutureKnock.futureSightMove[gActiveBattler] == MOVE_FUTURE_SIGHT)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@@ -1093,8 +1097,8 @@ bool8 HandleFaintedMonActions(void)
{
gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId;
if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0
- && !(gBattleStruct->givenExpMons & gBitTable[gBattlerPartyIndexes[gBattleStruct->faintedActionsBattlerId]])
- && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId]))
+ && !(gBattleStruct->givenExpMons & gBitTable[gBattlerPartyIndexes[gBattleStruct->faintedActionsBattlerId]])
+ && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId]))
{
BattleScriptExecute(BattleScript_GiveExp);
gBattleStruct->faintedActionsState = 2;
@@ -1119,7 +1123,7 @@ bool8 HandleFaintedMonActions(void)
{
gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId;
if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0
- && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId]))
+ && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId]))
{
BattleScriptExecute(BattleScript_HandleFaintedMon);
gBattleStruct->faintedActionsState = 5;
@@ -1145,3 +1149,1177 @@ bool8 HandleFaintedMonActions(void)
} while (gBattleStruct->faintedActionsState != FAINTED_ACTIONS_MAX_CASE);
return FALSE;
}
+
+void TryClearRageStatuses(void)
+{
+ s32 i;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ if ((gBattleMons[i].status2 & STATUS2_RAGE) && gChosenMoveByBattler[i] != MOVE_RAGE)
+ gBattleMons[i].status2 &= ~(STATUS2_RAGE);
+}
+
+enum
+{
+ CANCELLER_FLAGS,
+ CANCELLER_ASLEEP,
+ CANCELLER_FROZEN,
+ CANCELLER_TRUANT,
+ CANCELLER_RECHARGE,
+ CANCELLER_FLINCH,
+ CANCELLER_DISABLED,
+ CANCELLER_TAUNTED,
+ CANCELLER_IMPRISONED,
+ CANCELLER_CONFUSED,
+ CANCELLER_PARALYSED,
+ CANCELLER_GHOST,
+ CANCELLER_IN_LOVE,
+ CANCELLER_BIDE,
+ CANCELLER_THAW,
+ CANCELLER_END,
+};
+
+u8 AtkCanceller_UnableToUseMove(void)
+{
+ u8 effect = 0;
+ s32 *bideDmg = &gBattleScripting.bideDmg;
+
+ do
+ {
+ switch (gBattleStruct->atkCancellerTracker)
+ {
+ case CANCELLER_FLAGS: // flags clear
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_DESTINY_BOND);
+ gStatuses3[gBattlerAttacker] &= ~(STATUS3_GRUDGE);
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_ASLEEP: // check being asleep
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
+ {
+ if (UproarWakeUpCheck(gBattlerAttacker))
+ {
+ gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_SLEEP);
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ BattleScriptPushCursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
+ effect = 2;
+ }
+ else
+ {
+ u8 toSub;
+
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_EARLY_BIRD)
+ toSub = 2;
+ else
+ toSub = 1;
+ if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) < toSub)
+ gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_SLEEP);
+ else
+ gBattleMons[gBattlerAttacker].status1 -= toSub;
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
+ {
+ if (gCurrentMove != MOVE_SNORE && gCurrentMove != MOVE_SLEEP_TALK)
+ {
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 2;
+ }
+ }
+ else
+ {
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ BattleScriptPushCursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
+ effect = 2;
+ }
+ }
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_FROZEN: // check being frozen
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
+ {
+ if (Random() % 5)
+ {
+ if (gBattleMoves[gCurrentMove].effect != EFFECT_THAW_HIT) // unfreezing via a move effect happens in case 13
+ {
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen;
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ }
+ else
+ {
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ }
+ }
+ else // unfreeze
+ {
+ gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_FREEZE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ effect = 2;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_TRUANT: // truant
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter)
+ {
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_RECHARGE: // recharge
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE)
+ {
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RECHARGE);
+ gDisableStructs[gBattlerAttacker].rechargeTimer = 0;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_FLINCH: // flinch
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FLINCHED)
+ {
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_FLINCHED);
+ gProtectStructs[gBattlerAttacker].flinchImmobility = 1;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedFlinched;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_DISABLED: // disabled move
+ if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != 0)
+ {
+ gProtectStructs[gBattlerAttacker].usedDisabledMove = 1;
+ gBattleScripting.battler = gBattlerAttacker;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_TAUNTED: // taunt
+ if (gDisableStructs[gBattlerAttacker].tauntTimer && gBattleMoves[gCurrentMove].power == 0)
+ {
+ gProtectStructs[gBattlerAttacker].usedTauntedMove = 1;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsTaunted;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_IMPRISONED: // imprisoned
+ if (GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove))
+ {
+ gProtectStructs[gBattlerAttacker].usedImprisonedMove = 1;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsImprisoned;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_CONFUSED: // confusion
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
+ {
+ --gBattleMons[gBattlerAttacker].status2;
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
+ {
+ if (Random() & 1)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ BattleScriptPushCursor();
+ }
+ else // confusion dmg
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattlerTarget = gBattlerAttacker;
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerAttacker], MOVE_POUND, 0, 40, 0, gBattlerAttacker, gBattlerAttacker);
+ gProtectStructs[gBattlerAttacker].confusionSelfDmg = 1;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ }
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfused;
+ }
+ else // snapped out of confusion
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfusedNoMore;
+ }
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_PARALYSED: // paralysis
+ if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0)
+ {
+ gProtectStructs[gBattlerAttacker].prlzImmobility = 1;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsParalyzed;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_GHOST: // GHOST in pokemon tower
+ if ((gBattleTypeFlags & (BATTLE_TYPE_GHOST | BATTLE_TYPE_LEGENDARY)) == BATTLE_TYPE_GHOST)
+ {
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ gBattlescriptCurrInstr = gUnknown_81D9180;
+ else
+ gBattlescriptCurrInstr = gUnknown_81D9192;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_IN_LOVE: // infatuation
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
+ {
+ gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
+ if (Random() & 1)
+ {
+ BattleScriptPushCursor();
+ }
+ else
+ {
+ BattleScriptPush(BattleScript_MoveUsedIsInLoveCantAttack);
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ gProtectStructs[gBattlerAttacker].loveImmobility = 1;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ }
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_BIDE: // bide
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
+ {
+ gBattleMons[gBattlerAttacker].status2 -= 0x100;
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
+ {
+ gBattlescriptCurrInstr = BattleScript_BideStoringEnergy;
+ }
+ else
+ {
+ if (gTakenDmg[gBattlerAttacker])
+ {
+ gCurrentMove = MOVE_BIDE;
+ *bideDmg = gTakenDmg[gBattlerAttacker] * 2;
+ gBattlerTarget = gTakenDmgByBattler[gBattlerAttacker];
+ if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
+ gBattlerTarget = GetMoveTarget(MOVE_BIDE, 1);
+ gBattlescriptCurrInstr = BattleScript_BideAttack;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = BattleScript_BideNoEnergyToAttack;
+ }
+ }
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_THAW: // move thawing
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
+ {
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT)
+ {
+ gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_FREEZE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ effect = 2;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_END:
+ break;
+ }
+
+ } while (gBattleStruct->atkCancellerTracker != CANCELLER_END && !effect);
+ if (effect == 2)
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ return effect;
+}
+
+bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
+{
+ u8 playerId, flankId;
+ struct Pokemon *party;
+ s32 i;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ return FALSE;
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ playerId = GetBankMultiplayerId(battler);
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+ flankId = GetLinkTrainerFlankId(playerId);
+ for (i = flankId * 3; i < flankId * 3 + 3; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
+ break;
+ }
+ return (i == flankId * 3 + 3);
+ }
+ else
+ {
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ {
+ playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ flankId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ party = gEnemyParty;
+ }
+ else
+ {
+ playerId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ flankId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ party = gPlayerParty;
+ }
+ if (partyIdBattlerOn1 == PARTY_SIZE)
+ partyIdBattlerOn1 = gBattlerPartyIndexes[playerId];
+ if (partyIdBattlerOn2 == PARTY_SIZE)
+ partyIdBattlerOn2 = gBattlerPartyIndexes[flankId];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG
+ && i != partyIdBattlerOn1
+ && i != partyIdBattlerOn2
+ && i != *(gBattleStruct->monToSwitchIntoId + playerId)
+ && i != flankId[gBattleStruct->monToSwitchIntoId])
+ break;
+ }
+ return (i == PARTY_SIZE);
+ }
+ }
+}
+
+enum
+{
+ CASTFORM_NO_CHANGE,
+ CASTFORM_TO_NORMAL,
+ CASTFORM_TO_FIRE,
+ CASTFORM_TO_WATER,
+ CASTFORM_TO_ICE,
+};
+
+u8 CastformDataTypeChange(u8 battler)
+{
+ u8 formChange = 0;
+ if (gBattleMons[battler].species != SPECIES_CASTFORM || gBattleMons[battler].ability != ABILITY_FORECAST || gBattleMons[battler].hp == 0)
+ return CASTFORM_NO_CHANGE;
+ if (!WEATHER_HAS_EFFECT && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
+ return CASTFORM_TO_NORMAL;
+ }
+ if (!WEATHER_HAS_EFFECT)
+ return CASTFORM_NO_CHANGE;
+ if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
+ formChange = CASTFORM_TO_NORMAL;
+ }
+ if (gBattleWeather & WEATHER_SUN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_FIRE);
+ formChange = CASTFORM_TO_FIRE;
+ }
+ if (gBattleWeather & WEATHER_RAIN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_WATER);
+ formChange = CASTFORM_TO_WATER;
+ }
+ if (gBattleWeather & WEATHER_HAIL_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_ICE);
+ formChange = CASTFORM_TO_ICE;
+ }
+ return formChange;
+}
+
+u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveArg)
+{
+ u8 effect = 0;
+ struct Pokemon *pokeAtk;
+ struct Pokemon *pokeDef;
+ u16 speciesAtk;
+ u16 speciesDef;
+ u32 pidAtk;
+ u32 pidDef;
+
+ if (gBattlerAttacker >= gBattlersCount)
+ gBattlerAttacker = battler;
+
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ pokeAtk = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ else
+ pokeAtk = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ if (gBattlerTarget >= gBattlersCount)
+ gBattlerTarget = battler;
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ pokeDef = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
+ else
+ pokeDef = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
+ speciesAtk = GetMonData(pokeAtk, MON_DATA_SPECIES);
+ pidAtk = GetMonData(pokeAtk, MON_DATA_PERSONALITY);
+ speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES);
+ pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // Why isn't that check done at the beginning?
+ {
+ u8 moveType;
+ s32 i;
+ u8 side;
+ u8 target1;
+
+ if (special)
+ gLastUsedAbility = special;
+ else
+ gLastUsedAbility = gBattleMons[battler].ability;
+ if (!moveArg)
+ moveArg = gCurrentMove;
+ GET_MOVE_TYPE(moveArg, moveType);
+ if ((gBattleTypeFlags & (BATTLE_TYPE_GHOST | BATTLE_TYPE_LEGENDARY)) == BATTLE_TYPE_GHOST
+ && (gLastUsedAbility == ABILITY_INTIMIDATE || gLastUsedAbility == ABILITY_TRACE))
+ return effect;
+ switch (caseID)
+ {
+ case ABILITYEFFECT_ON_SWITCHIN: // 0
+ if (gBattlerAttacker >= gBattlersCount)
+ gBattlerAttacker = battler;
+ switch (gLastUsedAbility)
+ {
+ case ABILITYEFFECT_SWITCH_IN_WEATHER:
+ switch (GetCurrentWeather())
+ {
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ if (!(gBattleWeather & WEATHER_RAIN_ANY))
+ {
+ gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT);
+ gBattleScripting.animArg1 = B_ANIM_RAIN_CONTINUES;
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case WEATHER_SANDSTORM:
+ if (!(gBattleWeather & WEATHER_SANDSTORM_ANY))
+ {
+ gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
+ gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES;
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case WEATHER_DROUGHT:
+ if (!(gBattleWeather & WEATHER_SUN_ANY))
+ {
+ gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
+ gBattleScripting.animArg1 = B_ANIM_SUN_CONTINUES;
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ }
+ if (effect)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather();
+ BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts);
+ }
+ break;
+ case ABILITY_DRIZZLE:
+ if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
+ {
+ gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY);
+ BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates);
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case ABILITY_SAND_STREAM:
+ if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT))
+ {
+ gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
+ BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates);
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case ABILITY_DROUGHT:
+ if (!(gBattleWeather & WEATHER_SUN_PERMANENT))
+ {
+ gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
+ BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case ABILITY_INTIMIDATE:
+ if (!(gSpecialStatuses[battler].intimidatedMon))
+ {
+ gStatuses3[battler] |= STATUS3_INTIMIDATE_POKES;
+ gSpecialStatuses[battler].intimidatedMon = 1;
+ }
+ break;
+ case ABILITY_FORECAST:
+ effect = CastformDataTypeChange(battler);
+ if (effect != 0)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
+ gBattleScripting.battler = battler;
+ *(&gBattleStruct->formToChangeInto) = effect - 1;
+ }
+ break;
+ case ABILITY_TRACE:
+ if (!(gSpecialStatuses[battler].traced))
+ {
+ gStatuses3[battler] |= STATUS3_TRACE;
+ gSpecialStatuses[battler].traced = 1;
+ }
+ break;
+ case ABILITY_CLOUD_NINE:
+ case ABILITY_AIR_LOCK:
+ {
+ for (target1 = 0; target1 < gBattlersCount; ++target1)
+ {
+ effect = CastformDataTypeChange(target1);
+ if (effect != 0)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
+ gBattleScripting.battler = target1;
+ *(&gBattleStruct->formToChangeInto) = effect - 1;
+ break;
+ }
+ }
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_ENDTURN: // 1
+ if (gBattleMons[battler].hp != 0)
+ {
+ gBattlerAttacker = battler;
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_RAIN_DISH:
+ if (WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY)
+ && gBattleMons[battler].maxHP > gBattleMons[battler].hp)
+ {
+ gLastUsedAbility = ABILITY_RAIN_DISH; // why
+ BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates);
+ gBattleMoveDamage = gBattleMons[battler].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ ++effect;
+ }
+ break;
+ case ABILITY_SHED_SKIN:
+ if ((gBattleMons[battler].status1 & STATUS1_ANY) && (Random() % 3) == 0)
+ {
+ if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON))
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ if (gBattleMons[battler].status1 & STATUS1_SLEEP)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ if (gBattleMons[battler].status1 & STATUS1_PARALYSIS)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ if (gBattleMons[battler].status1 & STATUS1_BURN)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ if (gBattleMons[battler].status1 & STATUS1_FREEZE)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ gBattleMons[battler].status1 = 0;
+ gBattleMons[battler].status2 &= ~(STATUS2_NIGHTMARE); // fix nightmare glitch
+ gBattleScripting.battler = gActiveBattler = battler;
+ BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates);
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ ++effect;
+ }
+ break;
+ case ABILITY_SPEED_BOOST:
+ if (gBattleMons[battler].statStages[STAT_SPEED] < 0xC && gDisableStructs[battler].isFirstTurn != 2)
+ {
+ ++gBattleMons[battler].statStages[STAT_SPEED];
+ gBattleScripting.animArg1 = 0x11;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates);
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case ABILITY_TRUANT:
+ gDisableStructs[gBattlerAttacker].truantCounter ^= 1;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_MOVES_BLOCK: // 2
+ if (gLastUsedAbility == ABILITY_SOUNDPROOF)
+ {
+ for (i = 0; sSoundMovesTable[i] != 0xFFFF; ++i)
+ if (sSoundMovesTable[i] == moveArg)
+ break;
+ if (sSoundMovesTable[i] != 0xFFFF)
+ {
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)
+ gHitMarker |= HITMARKER_NO_PPDEDUCT;
+ gBattlescriptCurrInstr = BattleScript_SoundproofProtected;
+ effect = 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_ABSORBING: // 3
+ if (moveArg)
+ {
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_VOLT_ABSORB:
+ if (moveType == TYPE_ELECTRIC && gBattleMoves[moveArg].power != 0)
+ {
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
+ else
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
+ effect = 1;
+ }
+ break;
+ case ABILITY_WATER_ABSORB:
+ if (moveType == TYPE_WATER && gBattleMoves[moveArg].power != 0)
+ {
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
+ else
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
+ effect = 1;
+ }
+ break;
+ case ABILITY_FLASH_FIRE:
+ if (moveType == TYPE_FIRE && !(gBattleMons[battler].status1 & STATUS1_FREEZE))
+ {
+ if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE))
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
+ gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_FLASH_FIRE;
+ effect = 2;
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
+ effect = 2;
+ }
+ }
+ break;
+ }
+ if (effect == 1)
+ {
+ if (gBattleMons[battler].maxHP == gBattleMons[battler].hp)
+ {
+ if ((gProtectStructs[gBattlerAttacker].notFirstStrike))
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless;
+ else
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless_PPLoss;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[battler].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_MOVE_END: // Think contact abilities.
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_COLOR_CHANGE:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && moveArg != MOVE_STRUGGLE
+ && gBattleMoves[moveArg].power != 0
+ && TARGET_TURN_DAMAGED
+ && !IS_BATTLER_OF_TYPE(battler, moveType)
+ && gBattleMons[battler].hp != 0)
+ {
+ SET_BATTLER_TYPE(battler, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ColorChangeActivates;
+ ++effect;
+ }
+ break;
+ case ABILITY_ROUGH_SKIN:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT))
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_RoughSkinActivates;
+ ++effect;
+ }
+ break;
+ case ABILITY_EFFECT_SPORE:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && (Random() % 10) == 0)
+ {
+ do
+ gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3;
+ while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0);
+
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN)
+ gBattleCommunication[MOVE_EFFECT_BYTE] += 2; // 5 MOVE_EFFECT_PARALYSIS
+ gBattleCommunication[MOVE_EFFECT_BYTE] += MOVE_EFFECT_AFFECTS_USER;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITY_POISON_POINT:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && (Random() % 3) == 0)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITY_STATIC:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && (Random() % 3) == 0)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITY_FLAME_BODY:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && TARGET_TURN_DAMAGED
+ && (Random() % 3) == 0)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITY_CUTE_CHARM:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && TARGET_TURN_DAMAGED
+ && gBattleMons[gBattlerTarget].hp != 0
+ && (Random() % 3) == 0
+ && gBattleMons[gBattlerAttacker].ability != ABILITY_OBLIVIOUS
+ && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef)
+ && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
+ && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != MON_GENDERLESS
+ && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != MON_GENDERLESS)
+ {
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_INFATUATED_WITH(gBattlerTarget);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_CuteCharmActivates;
+ ++effect;
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_IMMUNITY: // 5
+ for (battler = 0; battler < gBattlersCount; battler++)
+ {
+ switch (gBattleMons[battler].ability)
+ {
+ case ABILITY_IMMUNITY:
+ if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER))
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OWN_TEMPO:
+ if (gBattleMons[battler].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ effect = 2;
+ }
+ break;
+ case ABILITY_LIMBER:
+ if (gBattleMons[battler].status1 & STATUS1_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_INSOMNIA:
+ case ABILITY_VITAL_SPIRIT:
+ if (gBattleMons[battler].status1 & STATUS1_SLEEP)
+ {
+ gBattleMons[battler].status2 &= ~(STATUS2_NIGHTMARE);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_WATER_VEIL:
+ if (gBattleMons[battler].status1 & STATUS1_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_MAGMA_ARMOR:
+ if (gBattleMons[battler].status1 & STATUS1_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OBLIVIOUS:
+ if (gBattleMons[battler].status2 & STATUS2_INFATUATION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ effect = 3;
+ }
+ break;
+ }
+ if (effect)
+ {
+ switch (effect)
+ {
+ case 1: // status cleared
+ gBattleMons[battler].status1 = 0;
+ break;
+ case 2: // get rid of confusion
+ gBattleMons[battler].status2 &= ~(STATUS2_CONFUSION);
+ break;
+ case 3: // get rid of infatuation
+ gBattleMons[battler].status2 &= ~(STATUS2_INFATUATION);
+ break;
+ }
+
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
+ gBattleScripting.battler = battler;
+ gActiveBattler = battler;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ return effect;
+ }
+ }
+ break;
+ case ABILITYEFFECT_FORECAST: // 6
+ for (battler = 0; battler < gBattlersCount; ++battler)
+ {
+ if (gBattleMons[battler].ability == ABILITY_FORECAST)
+ {
+ effect = CastformDataTypeChange(battler);
+ if (effect)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
+ gBattleScripting.battler = battler;
+ *(&gBattleStruct->formToChangeInto) = effect - 1;
+ return effect;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_SYNCHRONIZE: // 7
+ if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
+ {
+ gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
+ gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC)
+ gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchronizeMoveEffect + MOVE_EFFECT_AFFECTS_USER;
+ gBattleScripting.battler = gBattlerTarget;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8
+ if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
+ {
+ gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
+ gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC)
+ gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchronizeMoveEffect;
+ gBattleScripting.battler = gBattlerAttacker;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITYEFFECT_INTIMIDATE1: // 9
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ABILITY_INTIMIDATE && gStatuses3[i] & STATUS3_INTIMIDATE_POKES)
+ {
+ gLastUsedAbility = ABILITY_INTIMIDATE;
+ gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
+ BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivatesEnd3);
+ gBattleStruct->intimidateBattler = i;
+ ++effect;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_TRACE: // 11
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE))
+ {
+ u8 target2;
+
+ side = (GetBattlerPosition(i) ^ BIT_SIDE) & BIT_SIDE; // side of the opposing pokemon
+ target1 = GetBattlerAtPosition(side);
+ target2 = GetBattlerAtPosition(side + BIT_FLANK);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0
+ && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0)
+ {
+ gActiveBattler = GetBattlerAtPosition(((Random() & 1) * 2) | side);
+ gBattleMons[i].ability = gBattleMons[gActiveBattler].ability;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ ++effect;
+ }
+ else if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0)
+ {
+ gActiveBattler = target1;
+ gBattleMons[i].ability = gBattleMons[gActiveBattler].ability;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ ++effect;
+ }
+ else if (gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0)
+ {
+ gActiveBattler = target2;
+ gBattleMons[i].ability = gBattleMons[gActiveBattler].ability;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ ++effect;
+ }
+ }
+ else
+ {
+ gActiveBattler = target1;
+ if (gBattleMons[target1].ability && gBattleMons[target1].hp)
+ {
+ gBattleMons[i].ability = gBattleMons[target1].ability;
+ gLastUsedAbility = gBattleMons[target1].ability;
+ ++effect;
+ }
+ }
+ if (effect)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_TraceActivates);
+ gStatuses3[i] &= ~(STATUS3_TRACE);
+ gBattleScripting.battler = i;
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility)
+ break;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_INTIMIDATE2: // 10
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ABILITY_INTIMIDATE && (gStatuses3[i] & STATUS3_INTIMIDATE_POKES))
+ {
+ gLastUsedAbility = ABILITY_INTIMIDATE;
+ gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_IntimidateActivates;
+ gBattleStruct->intimidateBattler = i;
+ ++effect;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_CHECK_OTHER_SIDE: // 12
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_CHECK_BATTLER_SIDE: // 13
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) == side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_FIELD_SPORT: // 14
+ switch (gLastUsedAbility)
+ {
+ case 0xFD:
+ for (i = 0; i < gBattlersCount; ++i)
+ if (gStatuses3[i] & STATUS3_MUDSPORT)
+ effect = i + 1;
+ break;
+ case 0xFE:
+ for (i = 0; i < gBattlersCount; ++i)
+ if (gStatuses3[i] & STATUS3_WATERSPORT)
+ effect = i + 1;
+ break;
+ default:
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_CHECK_ON_FIELD: // 19
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ability && gBattleMons[i].hp != 0)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER: // 15
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ break;
+ }
+ }
+ if (!effect)
+ {
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ability && GetBattlerSide(i) == side && i != battler)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_COUNT_OTHER_SIDE: // 16
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ ++effect;
+ }
+ }
+ break;
+ case ABILITYEFFECT_COUNT_BATTLER_SIDE: // 17
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) == side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ ++effect;
+ }
+ }
+ break;
+ case ABILITYEFFECT_COUNT_ON_FIELD: // 18
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ability && i != battler)
+ {
+ gLastUsedAbility = ability;
+ ++effect;
+ }
+ }
+ break;
+ }
+ if (effect && caseID < ABILITYEFFECT_CHECK_OTHER_SIDE && gLastUsedAbility != 0xFF)
+ RecordAbilityBattle(battler, gLastUsedAbility);
+ }
+ return effect;
+}
diff --git a/src/pokemon.c b/src/pokemon.c
index 615bf55f1..ec90f6cd4 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2567,7 +2567,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
}
// flash fire triggered
- if ((gBattleResources->flags->flags[battlerIdAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
+ if ((gBattleResources->flags->flags[battlerIdAtk] & RESOURCE_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
damage = (15 * damage) / 10;
}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index e3c0c28d6..cc42726a0 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -216,7 +216,7 @@ gUnknown_2023C0C: @ 2023C0C
gUnknown_2023C30: @ 2023C30
.space 0x4
-gChosenMoveByBattler: @ 2023C34
+gUnknown_2023C34: @ 2023C34
.space 0x110
gBattlerSpriteIds: @ 2023D44
@@ -306,7 +306,7 @@ gUnknown_2023DB8: @ 2023DB8
gUnknown_2023DC0: @ 2023DC0
.space 0x4
-gUnknown_2023DC4: @ 2023DC4
+gChosenMoveByBattler: @ 2023DC4
.space 0x8
gMoveResultFlags: @ 2023DCC