diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-08-01 12:25:38 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-08-01 12:30:36 +0800 |
commit | 3eb1f1bc783308dac445eaacc05c9f14e9b78822 (patch) | |
tree | 06d89a04aba616f770da97c73569dbfe1de96141 | |
parent | c88c9c6edfb7122524b319e4601c5d2b97bf06ca (diff) |
matched AbilityBattleEffects
-rw-r--r-- | asm/battle_2.s | 38 | ||||
-rw-r--r-- | asm/battle_script_commands.s | 64 | ||||
-rw-r--r-- | asm/battle_util.s | 4972 | ||||
-rw-r--r-- | asm/field_weather.s | 6 | ||||
-rw-r--r-- | data/data.s | 14 | ||||
-rw-r--r-- | include/battle.h | 52 | ||||
-rw-r--r-- | include/battle_scripts.h | 5 | ||||
-rw-r--r-- | include/battle_util.h | 42 | ||||
-rw-r--r-- | include/field_weather.h | 1 | ||||
-rw-r--r-- | src/battle_ai_script_commands.c | 2 | ||||
-rw-r--r-- | src/battle_util.c | 1230 | ||||
-rw-r--r-- | src/pokemon.c | 2 | ||||
-rw-r--r-- | sym_ewram.txt | 4 |
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 |