diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-07-22 18:44:01 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-22 18:44:01 -0500 |
commit | 5891cedc1bf4c9c95d60e5118c2809895d6191a5 (patch) | |
tree | a37133a5c3be531d63b1e2a171c0264a62cd62cc | |
parent | 5e80a12ec9fcf2201c070712d8e2dcefe2a0e364 (diff) | |
parent | 959f78fe146e75f9ce02b318eb6a8d97652a9996 (diff) |
Merge pull request #372 from DizzyEggg/master
decompile battle_4
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | asm/battle_2.s | 28 | ||||
-rw-r--r-- | asm/battle_3.s | 32 | ||||
-rw-r--r-- | asm/battle_4.s | 32351 | ||||
-rw-r--r-- | asm/battle_9.s | 12 | ||||
-rw-r--r-- | data/battle_scripts_1.s | 200 | ||||
-rw-r--r-- | data/battle_scripts_2.s | 8 | ||||
-rw-r--r-- | data/data2a.s (renamed from data/data2.s) | 775 | ||||
-rw-r--r-- | data/data2b.s | 296 | ||||
-rw-r--r-- | include/battle.h | 354 | ||||
-rw-r--r-- | include/pokemon.h | 7 | ||||
-rw-r--r-- | include/rom3.h | 13 | ||||
-rw-r--r-- | ld_script.txt | 6 | ||||
-rw-r--r-- | src/battle_2.c | 98 | ||||
-rw-r--r-- | src/battle_4.c | 18534 | ||||
-rw-r--r-- | src/battle_6.c | 4 | ||||
-rw-r--r-- | src/battle_7.c | 2 | ||||
-rw-r--r-- | src/battle_ai.c | 36 | ||||
-rw-r--r-- | src/rom3.c | 16 | ||||
-rw-r--r-- | src/tv.c | 24 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
21 files changed, 19279 insertions, 33520 deletions
diff --git a/.gitignore b/.gitignore index ae9ac207b..4e73c4f17 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ Thumbs.db build/ .idea/ *.DS_Store +*.pl diff --git a/asm/battle_2.s b/asm/battle_2.s index ed4140583..4e8d16c7e 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -573,7 +573,7 @@ _080127E0: str r0, [sp] movs r0, 0 movs r2, 0x6 - bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f + bl EmitChoosePokemon b _0801289E .align 2, 0 _08012808: .4byte gActiveBank @@ -624,7 +624,7 @@ _08012854: movs r1, 0 _0801286C: movs r3, 0 - bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f + bl EmitChoosePokemon b _0801289E .align 2, 0 _08012874: .4byte gActionForBanks @@ -643,7 +643,7 @@ _08012884: movs r1, 0 movs r2, 0x6 movs r3, 0 - bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f + bl EmitChoosePokemon _0801289E: ldr r0, _080128A8 @ =gActiveBank ldrb r0, [r0] @@ -2789,7 +2789,7 @@ _08013A04: beq _08013A0E b _08013B42 _08013A0E: - bl sub_80325B8 + bl BattleMusicStop ldr r1, _08013A3C @ =gBattlescriptCurrInstr ldr r0, _08013A40 @ =gUnknown_081D8DBE str r0, [r1] @@ -3936,14 +3936,14 @@ _080143B6: cmp r0, 0x1F bne _08014404 adds r0, r2, 0 - bl sub_801E3B4 + bl BankGetTurnOrder lsls r0, 24 lsrs r0, 24 ldr r1, [sp] cmp r0, r1 bcs _08014404 ldrb r0, [r4] - bl sub_801E3B4 + bl BankGetTurnOrder lsls r0, 24 lsrs r0, 24 str r0, [sp] @@ -4261,7 +4261,7 @@ _0801469A: strb r0, [r5] _080146AC: ldr r4, _080146E0 @ =gBattlescriptCurrInstr - ldr r3, _080146E4 @ =gUnknown_081D6BBC + ldr r3, _080146E4 @ =gBattleScriptsEffectsTable ldr r2, _080146E8 @ =gBattleMoves ldr r0, _080146EC @ =gCurrentMove ldrh r1, [r0] @@ -4288,7 +4288,7 @@ _080146CC: bx r0 .align 2, 0 _080146E0: .4byte gBattlescriptCurrInstr -_080146E4: .4byte gUnknown_081D6BBC +_080146E4: .4byte gBattleScriptsEffectsTable _080146E8: .4byte gBattleMoves _080146EC: .4byte gCurrentMove _080146F0: .4byte gFightStateTracker @@ -5528,8 +5528,8 @@ _08015148: .4byte 0x00016112 _0801514C: .4byte 0x00017130 thumb_func_end bsC_8016D70 - thumb_func_start sub_8015150 -sub_8015150: @ 8015150 + thumb_func_start GetBattleBank +GetBattleBank: @ 8015150 push {lr} lsls r0, 24 lsrs r0, 24 @@ -5592,10 +5592,10 @@ _080151C8: bx r1 .align 2, 0 _080151D0: .4byte gBank1 - thumb_func_end sub_8015150 + thumb_func_end GetBattleBank - thumb_func_start sub_80151D4 -sub_80151D4: @ 80151D4 + thumb_func_start PressurePPLose +PressurePPLose: @ 80151D4 push {r4-r7,lr} sub sp, 0x4 lsls r0, 24 @@ -5695,7 +5695,7 @@ _08015286: _08015290: .4byte gDisableStructs _08015294: .4byte gBitTable _08015298: .4byte gActiveBank - thumb_func_end sub_80151D4 + thumb_func_end PressurePPLose thumb_func_start sub_801529C sub_801529C: @ 801529C diff --git a/asm/battle_3.s b/asm/battle_3.s index 8f3097c3d..7fc14545c 100644 --- a/asm/battle_3.s +++ b/asm/battle_3.s @@ -1819,7 +1819,7 @@ _080166D8: ldrb r1, [r6] movs r0, 0x1 movs r2, 0 - bl sub_801A02C + bl ItemBattleEffects lsls r0, 24 cmp r0, 0 beq _080166F2 @@ -1840,7 +1840,7 @@ _08016704: ldrb r1, [r6] movs r0, 0x1 movs r2, 0x1 - bl sub_801A02C + bl ItemBattleEffects lsls r0, 24 cmp r0, 0 beq _0801671E @@ -2576,7 +2576,7 @@ _08016CE0: strb r0, [r1, 0x3] movs r0, 0x1 movs r1, 0 - bl sub_801E3EC + bl SetMoveEffect ldrb r0, [r6] muls r0, r7 adds r0, r5 @@ -3731,7 +3731,7 @@ _08017668: movs r0, 0x1 movs r1, 0 movs r2, 0x1 - bl sub_801A02C + bl ItemBattleEffects lsls r0, 24 lsrs r0, 24 cmp r0, 0 @@ -3823,8 +3823,8 @@ _08017710: .4byte gUnknown_02024AD0 _08017714: .4byte 0xff7fffff thumb_func_end b_clear_atk_up_if_hit_flag_unless_enraged - thumb_func_start sub_8017718 -sub_8017718: @ 8017718 + thumb_func_start CantUseMove +CantUseMove: @ 8017718 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -4866,7 +4866,7 @@ _08018008: .4byte 0x02000000 _0801800C: .4byte 0x000160e7 _08018010: .4byte gActiveBank _08018014: .4byte gUnknown_02024ACC - thumb_func_end sub_8017718 + thumb_func_end CantUseMove thumb_func_start sub_8018018 sub_8018018: @ 8018018 @@ -8668,8 +8668,8 @@ _0801A024: .4byte gBattleMainFunc _0801A028: .4byte sub_8013FBC thumb_func_end b_push_move_exec - thumb_func_start sub_801A02C -sub_801A02C: @ 801A02C + thumb_func_start ItemBattleEffects +ItemBattleEffects: @ 801A02C push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -10938,7 +10938,7 @@ _0801B2BC: bl b_movescr_stack_push_cursor movs r0, 0 movs r1, 0 - bl sub_801E3EC + bl SetMoveEffect bl b_movescr_stack_pop_cursor b _0801B3CA .align 2, 0 @@ -11049,7 +11049,7 @@ _0801B3FC: .4byte 0x02000000 _0801B400: .4byte 0x00016003 _0801B404: .4byte gBattlescriptCurrInstr _0801B408: .4byte gUnknown_081D9AA7 - thumb_func_end sub_801A02C + thumb_func_end ItemBattleEffects thumb_func_start unref_sub_801B40C unref_sub_801B40C: @ 801B40C @@ -11636,8 +11636,8 @@ _0801B920: .4byte 0x02000000 _0801B924: .4byte 0x00016010 thumb_func_end sub_801B5C0 - thumb_func_start sub_801B928 -sub_801B928: @ 801B928 + thumb_func_start IsPokeDisobedient +IsPokeDisobedient: @ 801B928 push {r4-r7,lr} mov r7, r9 mov r6, r8 @@ -11828,7 +11828,7 @@ _0801BA9E: ands r5, r4 cmp r5, 0 bne _0801BA9E - ldr r4, _0801BB18 @ =gUnknown_02024BEA + ldr r4, _0801BB18 @ =gRandomMove ldr r3, _0801BB04 @ =gBattleMons ldr r0, _0801BB10 @ =gCurrMovePos ldrb r0, [r0] @@ -11870,7 +11870,7 @@ _0801BB08: .4byte gBankAttacker _0801BB0C: .4byte gBitTable _0801BB10: .4byte gCurrMovePos _0801BB14: .4byte gUnknown_02024BE5 -_0801BB18: .4byte gUnknown_02024BEA +_0801BB18: .4byte gRandomMove _0801BB1C: .4byte gBattleCommunication _0801BB20: .4byte gDynamicBasePower _0801BB24: .4byte 0x02000000 @@ -12012,6 +12012,6 @@ _0801BC40: .4byte gBankTarget _0801BC44: .4byte gBattlescriptCurrInstr _0801BC48: .4byte gUnknown_081D99A0 _0801BC4C: .4byte gHitMarker - thumb_func_end sub_801B928 + thumb_func_end IsPokeDisobedient .align 2, 0 @ Don't pad with nop. diff --git a/asm/battle_4.s b/asm/battle_4.s deleted file mode 100644 index 6747abc6c..000000000 --- a/asm/battle_4.s +++ /dev/null @@ -1,32351 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start atk00_attackcanceler -atk00_attackcanceler: @ 801BC50 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - ldr r0, _0801BC6C @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0 - beq _0801BC74 - ldr r1, _0801BC70 @ =gFightStateTracker - movs r0, 0xC - strb r0, [r1] - b _0801BFF4 - .align 2, 0 -_0801BC6C: .4byte gBattleOutcome -_0801BC70: .4byte gFightStateTracker -_0801BC74: - ldr r2, _0801BCA4 @ =gBattleMons - ldr r0, _0801BCA8 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0, 0x28] - cmp r0, 0 - bne _0801BCB8 - ldr r2, _0801BCAC @ =gHitMarker - ldr r1, [r2] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - bne _0801BCB8 - movs r0, 0x80 - lsls r0, 12 - orrs r1, r0 - str r1, [r2] - ldr r1, _0801BCB0 @ =gBattlescriptCurrInstr - ldr r0, _0801BCB4 @ =BattleScript_EndTurn - b _0801BFF2 - .align 2, 0 -_0801BCA4: .4byte gBattleMons -_0801BCA8: .4byte gBankAttacker -_0801BCAC: .4byte gHitMarker -_0801BCB0: .4byte gBattlescriptCurrInstr -_0801BCB4: .4byte BattleScript_EndTurn -_0801BCB8: - bl sub_8017718 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - beq _0801BCC6 - b _0801BFF4 -_0801BCC6: - ldr r0, _0801BD34 @ =gBankTarget - ldrb r1, [r0] - str r2, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _0801BCDE - b _0801BFF4 -_0801BCDE: - ldr r4, _0801BD38 @ =gBattleMons - ldr r0, _0801BD3C @ =gCurrMovePos - ldrb r1, [r0] - ldr r3, _0801BD40 @ =gBankAttacker - ldrb r2, [r3] - movs r0, 0x58 - muls r2, r0 - adds r1, r2 - adds r0, r4, 0 - adds r0, 0x24 - adds r1, r0 - ldrb r0, [r1] - ldr r5, _0801BD44 @ =gHitMarker - cmp r0, 0 - bne _0801BD5C - ldr r0, _0801BD48 @ =gCurrentMove - ldrh r0, [r0] - cmp r0, 0xA5 - beq _0801BD5C - ldr r0, [r5] - ldr r1, _0801BD4C @ =0x00800200 - ands r0, r1 - cmp r0, 0 - bne _0801BD5C - adds r0, r4, 0 - adds r0, 0x50 - adds r0, r2, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 5 - ands r0, r1 - cmp r0, 0 - bne _0801BD5C - ldr r1, _0801BD50 @ =gBattlescriptCurrInstr - ldr r0, _0801BD54 @ =BattleScript_NoPPForMove - str r0, [r1] - ldr r2, _0801BD58 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - b _0801BFF4 - .align 2, 0 -_0801BD34: .4byte gBankTarget -_0801BD38: .4byte gBattleMons -_0801BD3C: .4byte gCurrMovePos -_0801BD40: .4byte gBankAttacker -_0801BD44: .4byte gHitMarker -_0801BD48: .4byte gCurrentMove -_0801BD4C: .4byte 0x00800200 -_0801BD50: .4byte gBattlescriptCurrInstr -_0801BD54: .4byte BattleScript_NoPPForMove -_0801BD58: .4byte gBattleMoveFlags -_0801BD5C: - ldr r0, [r5] - ldr r1, _0801BDA0 @ =0xff7fffff - ands r0, r1 - str r0, [r5] - movs r6, 0x80 - lsls r6, 18 - ands r0, r6 - cmp r0, 0 - bne _0801BDB4 - ldrb r1, [r3] - movs r0, 0x58 - muls r0, r1 - adds r1, r4, 0 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 5 - ands r0, r1 - cmp r0, 0 - bne _0801BDB4 - bl sub_801B928 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - beq _0801BDB4 - cmp r2, 0x2 - bne _0801BDA4 - ldr r0, [r5] - orrs r0, r6 - str r0, [r5] - b _0801BFF4 - .align 2, 0 -_0801BDA0: .4byte 0xff7fffff -_0801BDA4: - ldr r0, _0801BDB0 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - b _0801BFF4 - .align 2, 0 -_0801BDB0: .4byte gBattleMoveFlags -_0801BDB4: - ldr r2, _0801BE18 @ =gHitMarker - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 18 - orrs r0, r1 - str r0, [r2] - ldr r2, _0801BE1C @ =gProtectStructs - ldr r1, _0801BE20 @ =gBankTarget - ldrb r3, [r1] - lsls r0, r3, 4 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 27 - mov r8, r1 - mov r9, r2 - cmp r0, 0 - bge _0801BE3C - ldr r2, _0801BE24 @ =gBattleMoves - ldr r0, _0801BE28 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x8] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0801BE3C - ldr r0, _0801BE2C @ =gBankAttacker - ldrb r0, [r0] - ldr r2, _0801BE30 @ =0x00000115 - adds r1, r3, 0 - bl sub_80151D4 - mov r0, r8 - ldrb r1, [r0] - lsls r1, 4 - add r1, r9 - ldrb r2, [r1] - movs r0, 0x11 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - bl b_movescr_stack_push_cursor - ldr r1, _0801BE34 @ =gBattlescriptCurrInstr - ldr r0, _0801BE38 @ =BattleScript_MagicCoatBounce - b _0801BFF2 - .align 2, 0 -_0801BE18: .4byte gHitMarker -_0801BE1C: .4byte gProtectStructs -_0801BE20: .4byte gBankTarget -_0801BE24: .4byte gBattleMoves -_0801BE28: .4byte gCurrentMove -_0801BE2C: .4byte gBankAttacker -_0801BE30: .4byte 0x00000115 -_0801BE34: .4byte gBattlescriptCurrInstr -_0801BE38: .4byte BattleScript_MagicCoatBounce -_0801BE3C: - movs r2, 0 - ldr r0, _0801BEB8 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r2, r0 - bge _0801BE7E - ldr r6, _0801BEBC @ =gProtectStructs - ldr r1, _0801BEC0 @ =gBattleMoves - mov r12, r1 - adds r5, r0, 0 - ldr r7, _0801BEC4 @ =gTurnOrder -_0801BE50: - adds r4, r2, r7 - ldrb r3, [r4] - lsls r0, r3, 4 - adds r0, r6 - ldrb r0, [r0] - lsls r0, 26 - cmp r0, 0 - bge _0801BE78 - ldr r0, _0801BEC8 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - add r0, r12 - ldrb r1, [r0, 0x8] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0801BE78 - b _0801BFA4 -_0801BE78: - adds r2, 0x1 - cmp r2, r5 - blt _0801BE50 -_0801BE7E: - ldr r0, _0801BECC @ =gSpecialStatuses - mov r1, r8 - ldrb r2, [r1] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r3, [r1] - lsls r0, r3, 30 - cmp r0, 0 - bge _0801BEDC - movs r0, 0x3 - negs r0, r0 - ands r0, r3 - strb r0, [r1] - ldr r4, _0801BED0 @ =gLastUsedAbility - movs r0, 0x1F - strb r0, [r4] - bl b_movescr_stack_push_cursor - ldr r1, _0801BED4 @ =gBattlescriptCurrInstr - ldr r0, _0801BED8 @ =BattleScript_TookAttack - str r0, [r1] - mov r2, r8 - ldrb r0, [r2] - ldrb r1, [r4] - bl RecordAbilityBattle - b _0801BFF4 - .align 2, 0 -_0801BEB8: .4byte gNoOfAllBanks -_0801BEBC: .4byte gProtectStructs -_0801BEC0: .4byte gBattleMoves -_0801BEC4: .4byte gTurnOrder -_0801BEC8: .4byte gCurrentMove -_0801BECC: .4byte gSpecialStatuses -_0801BED0: .4byte gLastUsedAbility -_0801BED4: .4byte gBattlescriptCurrInstr -_0801BED8: .4byte BattleScript_TookAttack -_0801BEDC: - lsls r0, r2, 4 - add r0, r9 - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - bne _0801BEEA - b _0801BFEC -_0801BEEA: - ldr r1, _0801BF80 @ =gBattleMoves - ldr r2, _0801BF84 @ =gCurrentMove - ldrh r3, [r2] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x8] - movs r0, 0x2 - ands r0, r1 - adds r4, r2, 0 - cmp r0, 0 - beq _0801BFEC - cmp r3, 0xAE - bne _0801BF28 - ldr r2, _0801BF88 @ =gBattleMons - ldr r0, _0801BF8C @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x7 - beq _0801BF28 - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x7 - bne _0801BFEC -_0801BF28: - ldrh r0, [r4] - bl sub_8028350 - lsls r0, 24 - cmp r0, 0 - beq _0801BF4E - ldr r1, _0801BF88 @ =gBattleMons - ldr r0, _0801BF8C @ =gBankAttacker - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 5 - ands r0, r1 - cmp r0, 0 - beq _0801BFEC -_0801BF4E: - ldr r0, _0801BF8C @ =gBankAttacker - ldrb r0, [r0] - bl CancelMultiTurnMoves - ldr r2, _0801BF90 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0801BF94 @ =gMoveHitWith - ldr r3, _0801BF98 @ =gBankTarget - ldrb r0, [r3] - lsls r0, 1 - adds r0, r1 - movs r2, 0 - strh r2, [r0] - ldr r1, _0801BF9C @ =gUnknown_02024C44 - ldrb r0, [r3] - lsls r0, 1 - adds r0, r1 - strh r2, [r0] - ldr r1, _0801BFA0 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x6] - b _0801BFEC - .align 2, 0 -_0801BF80: .4byte gBattleMoves -_0801BF84: .4byte gCurrentMove -_0801BF88: .4byte gBattleMons -_0801BF8C: .4byte gBankAttacker -_0801BF90: .4byte gBattleMoveFlags -_0801BF94: .4byte gMoveHitWith -_0801BF98: .4byte gBankTarget -_0801BF9C: .4byte gUnknown_02024C44 -_0801BFA0: .4byte gBattleCommunication -_0801BFA4: - ldr r0, _0801BFD4 @ =gBankAttacker - ldrb r0, [r0] - ldr r2, _0801BFD8 @ =0x00000121 - adds r1, r3, 0 - bl sub_80151D4 - ldrb r1, [r4] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1] - movs r0, 0x21 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r0, _0801BFDC @ =0x02000000 - ldrb r1, [r4] - ldr r2, _0801BFE0 @ =0x00016003 - adds r0, r2 - strb r1, [r0] - bl b_movescr_stack_push_cursor - ldr r1, _0801BFE4 @ =gBattlescriptCurrInstr - ldr r0, _0801BFE8 @ =BattleScript_SnatchedMove - b _0801BFF2 - .align 2, 0 -_0801BFD4: .4byte gBankAttacker -_0801BFD8: .4byte 0x00000121 -_0801BFDC: .4byte 0x02000000 -_0801BFE0: .4byte 0x00016003 -_0801BFE4: .4byte gBattlescriptCurrInstr -_0801BFE8: .4byte BattleScript_SnatchedMove -_0801BFEC: - ldr r1, _0801C004 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 -_0801BFF2: - str r0, [r1] -_0801BFF4: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801C004: .4byte gBattlescriptCurrInstr - thumb_func_end atk00_attackcanceler - - thumb_func_start mcmd_jump_if_move_not_executed -mcmd_jump_if_move_not_executed: @ 801C008 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r1, _0801C054 @ =gBattlescriptCurrInstr - ldr r5, [r1] - adds r4, r5, r0 - ldr r0, _0801C058 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _0801C068 - ldr r1, _0801C05C @ =gMoveHitWith - ldr r3, _0801C060 @ =gBankTarget - ldrb r0, [r3] - lsls r0, 1 - adds r0, r1 - movs r2, 0 - strh r2, [r0] - ldr r1, _0801C064 @ =gUnknown_02024C44 - ldrb r0, [r3] - lsls r0, 1 - adds r0, r1 - strh r2, [r0] - ldrb r4, [r5, 0x1] - ldrb r0, [r5, 0x2] - lsls r0, 8 - orrs r4, r0 - ldrb r0, [r5, 0x3] - lsls r0, 16 - orrs r4, r0 - ldrb r0, [r5, 0x4] - lsls r0, 24 - orrs r4, r0 - b _0801C082 - .align 2, 0 -_0801C054: .4byte gBattlescriptCurrInstr -_0801C058: .4byte gBattleMoveFlags -_0801C05C: .4byte gMoveHitWith -_0801C060: .4byte gBankTarget -_0801C064: .4byte gUnknown_02024C44 -_0801C068: - bl b_feature_update_destiny_bond - ldr r0, _0801C090 @ =gBankTarget - ldrb r1, [r0] - str r6, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _0801C086 -_0801C082: - ldr r0, _0801C094 @ =gBattlescriptCurrInstr - str r4, [r0] -_0801C086: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0801C090: .4byte gBankTarget -_0801C094: .4byte gBattlescriptCurrInstr - thumb_func_end mcmd_jump_if_move_not_executed - - thumb_func_start atk40_jump_if_move_affected_by_protect -atk40_jump_if_move_affected_by_protect: @ 801C098 - push {lr} - ldr r1, _0801C0E0 @ =gProtectStructs - ldr r0, _0801C0E4 @ =gBankTarget - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - beq _0801C0F8 - ldr r2, _0801C0E8 @ =gBattleMoves - ldr r0, _0801C0EC @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x8] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0801C0F8 - ldr r2, _0801C0F0 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - movs r0, 0x5 - movs r1, 0 - bl mcmd_jump_if_move_not_executed - ldr r1, _0801C0F4 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x6] - b _0801C100 - .align 2, 0 -_0801C0E0: .4byte gProtectStructs -_0801C0E4: .4byte gBankTarget -_0801C0E8: .4byte gBattleMoves -_0801C0EC: .4byte gCurrentMove -_0801C0F0: .4byte gBattleMoveFlags -_0801C0F4: .4byte gBattleCommunication -_0801C0F8: - ldr r1, _0801C104 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0801C100: - pop {r0} - bx r0 - .align 2, 0 -_0801C104: .4byte gBattlescriptCurrInstr - thumb_func_end atk40_jump_if_move_affected_by_protect - - thumb_func_start sub_801C108 -sub_801C108: @ 801C108 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r4, 0 - ldr r1, _0801C15C @ =gProtectStructs - ldr r0, _0801C160 @ =gBankTarget - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - beq _0801C154 - ldr r2, _0801C164 @ =gBattleMoves - ldr r0, _0801C168 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x8] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0801C154 - ldr r2, _0801C16C @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - movs r0, 0x7 - adds r1, r3, 0 - bl mcmd_jump_if_move_not_executed - ldr r1, _0801C170 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x6] - movs r4, 0x1 -_0801C154: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0801C15C: .4byte gProtectStructs -_0801C160: .4byte gBankTarget -_0801C164: .4byte gBattleMoves -_0801C168: .4byte gCurrentMove -_0801C16C: .4byte gBattleMoveFlags -_0801C170: .4byte gBattleCommunication - thumb_func_end sub_801C108 - - thumb_func_start sub_801C174 -sub_801C174: @ 801C174 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r2, _0801C1D4 @ =gStatuses3 - ldr r3, _0801C1D8 @ =gBankTarget - ldrb r4, [r3] - lsls r0, r4, 2 - adds r0, r2 - ldr r1, [r0] - movs r0, 0x18 - ands r1, r0 - adds r6, r2, 0 - cmp r1, 0 - beq _0801C1A6 - ldr r1, _0801C1DC @ =gDisableStructs - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - adds r0, r1 - ldr r1, _0801C1E0 @ =gBankAttacker - ldrb r0, [r0, 0x15] - ldrb r1, [r1] - cmp r0, r1 - beq _0801C290 -_0801C1A6: - ldr r0, _0801C1E4 @ =gHitMarker - ldr r1, [r0] - movs r2, 0x80 - lsls r2, 9 - ands r1, r2 - adds r2, r0, 0 - cmp r1, 0 - bne _0801C1EC - ldrb r0, [r3] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0801C1EC -_0801C1C6: - ldr r0, _0801C1E8 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - b _0801C290 - .align 2, 0 -_0801C1D4: .4byte gStatuses3 -_0801C1D8: .4byte gBankTarget -_0801C1DC: .4byte gDisableStructs -_0801C1E0: .4byte gBankAttacker -_0801C1E4: .4byte gHitMarker -_0801C1E8: .4byte gBattleMoveFlags -_0801C1EC: - ldr r0, [r2] - ldr r1, _0801C29C @ =0xfffeffff - ands r0, r1 - str r0, [r2] - movs r1, 0x80 - lsls r1, 10 - ands r0, r1 - cmp r0, 0 - bne _0801C20E - ldrb r0, [r3] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0801C1C6 -_0801C20E: - ldr r0, [r2] - ldr r1, _0801C2A0 @ =0xfffdffff - ands r0, r1 - str r0, [r2] - movs r1, 0x80 - lsls r1, 11 - ands r0, r1 - cmp r0, 0 - bne _0801C22E - ldrb r0, [r3] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ands r0, r1 - cmp r0, 0 - bne _0801C1C6 -_0801C22E: - ldr r0, [r2] - ldr r1, _0801C2A4 @ =0xfffbffff - ands r0, r1 - str r0, [r2] - movs r0, 0 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0xD - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - lsls r4, r5, 1 - cmp r0, 0 - bne _0801C27E - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x4D - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _0801C27E - ldr r0, _0801C2A8 @ =gBattleWeather - ldrh r1, [r0] - movs r0, 0x7 - ands r0, r1 - cmp r0, 0 - beq _0801C27E - ldr r0, _0801C2AC @ =gBattleMoves - adds r1, r4, r5 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x98 - beq _0801C290 -_0801C27E: - ldr r1, _0801C2AC @ =gBattleMoves - adds r0, r4, r5 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x11 - beq _0801C290 - cmp r0, 0x4E - bne _0801C2B0 -_0801C290: - movs r0, 0x7 - adds r1, r5, 0 - bl mcmd_jump_if_move_not_executed - movs r0, 0x1 - b _0801C2B2 - .align 2, 0 -_0801C29C: .4byte 0xfffeffff -_0801C2A0: .4byte 0xfffdffff -_0801C2A4: .4byte 0xfffbffff -_0801C2A8: .4byte gBattleWeather -_0801C2AC: .4byte gBattleMoves -_0801C2B0: - movs r0, 0 -_0801C2B2: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_801C174 - - thumb_func_start atk01_accuracycheck -atk01_accuracycheck: @ 801C2BC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r0, _0801C314 @ =gBattlescriptCurrInstr - ldr r5, [r0] - ldrb r6, [r5, 0x5] - ldrb r1, [r5, 0x6] - lsls r1, 8 - orrs r6, r1 - adds r1, r6, 0x2 - lsls r1, 16 - lsrs r1, 16 - adds r7, r0, 0 - cmp r1, 0x1 - bhi _0801C378 - ldr r2, _0801C318 @ =gStatuses3 - ldr r3, _0801C31C @ =gBankTarget - ldrb r4, [r3] - lsls r0, r4, 2 - adds r0, r2 - ldr r1, [r0] - movs r0, 0x18 - ands r1, r0 - cmp r1, 0 - beq _0801C32C - ldr r0, _0801C320 @ =0x0000ffff - cmp r6, r0 - bne _0801C32C - ldr r1, _0801C324 @ =gDisableStructs - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - adds r0, r1 - ldr r1, _0801C328 @ =gBankAttacker - ldrb r0, [r0, 0x15] - ldrb r1, [r1] - cmp r0, r1 - bne _0801C32C - adds r0, r5, 0x7 - str r0, [r7] - b _0801C632 - .align 2, 0 -_0801C314: .4byte gBattlescriptCurrInstr -_0801C318: .4byte gStatuses3 -_0801C31C: .4byte gBankTarget -_0801C320: .4byte 0x0000ffff -_0801C324: .4byte gDisableStructs -_0801C328: .4byte gBankAttacker -_0801C32C: - ldrb r0, [r3] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ldr r1, _0801C358 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - beq _0801C35C - ldr r2, [r7] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r7] - b _0801C632 - .align 2, 0 -_0801C358: .4byte 0x000400c0 -_0801C35C: - movs r0, 0 - bl sub_801C108 - lsls r0, 24 - cmp r0, 0 - beq _0801C36A - b _0801C632 -_0801C36A: - ldr r1, _0801C374 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x7 - str r0, [r1] - b _0801C632 - .align 2, 0 -_0801C374: .4byte gBattlescriptCurrInstr -_0801C378: - cmp r6, 0 - bne _0801C380 - ldr r0, _0801C398 @ =gCurrentMove - ldrh r6, [r0] -_0801C380: - ldr r0, _0801C39C @ =0x02000000 - ldr r1, _0801C3A0 @ =0x0001601c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0801C3A4 - movs r2, 0x3F - mov r10, r2 - mov r3, r10 - ands r3, r0 - mov r10, r3 - b _0801C3B2 - .align 2, 0 -_0801C398: .4byte gCurrentMove -_0801C39C: .4byte 0x02000000 -_0801C3A0: .4byte 0x0001601c -_0801C3A4: - ldr r1, _0801C3F8 @ =gBattleMoves - lsls r0, r6, 1 - adds r0, r6 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x2] - mov r10, r0 -_0801C3B2: - adds r0, r6, 0 - bl sub_801C108 - lsls r0, 24 - cmp r0, 0 - beq _0801C3C0 - b _0801C632 -_0801C3C0: - adds r0, r6, 0 - bl sub_801C174 - lsls r0, 24 - cmp r0, 0 - beq _0801C3CE - b _0801C632 -_0801C3CE: - ldr r3, _0801C3FC @ =gBattleMons - ldr r0, _0801C400 @ =gBankTarget - ldrb r0, [r0] - movs r2, 0x58 - adds r4, r0, 0 - muls r4, r2 - adds r0, r3, 0 - adds r0, 0x50 - adds r0, r4, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 22 - ands r0, r1 - cmp r0, 0 - beq _0801C408 - ldr r0, _0801C404 @ =gBankAttacker - ldrb r0, [r0] - muls r0, r2 - adds r0, r3 - ldrb r5, [r0, 0x1E] - b _0801C41E - .align 2, 0 -_0801C3F8: .4byte gBattleMoves -_0801C3FC: .4byte gBattleMons -_0801C400: .4byte gBankTarget -_0801C404: .4byte gBankAttacker -_0801C408: - ldr r0, _0801C56C @ =gBankAttacker - ldrb r0, [r0] - muls r0, r2 - adds r0, r3 - ldrb r0, [r0, 0x1E] - adds r0, 0x6 - adds r1, r4, r3 - ldrb r1, [r1, 0x1F] - subs r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 -_0801C41E: - lsls r0, r5, 24 - cmp r0, 0 - bge _0801C426 - movs r5, 0 -_0801C426: - lsls r0, r5, 24 - asrs r0, 24 - cmp r0, 0xC - ble _0801C430 - movs r5, 0xC -_0801C430: - ldr r1, _0801C570 @ =gBattleMoves - lsls r4, r6, 1 - adds r0, r4, r6 - lsls r0, 2 - adds r7, r0, r1 - ldrb r0, [r7, 0x3] - mov r8, r0 - movs r0, 0 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0xD - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - str r4, [sp, 0x4] - cmp r0, 0 - bne _0801C482 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x4D - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _0801C482 - ldr r0, _0801C574 @ =gBattleWeather - ldrh r1, [r0] - movs r0, 0x60 - ands r0, r1 - cmp r0, 0 - beq _0801C482 - ldrb r0, [r7] - cmp r0, 0x98 - bne _0801C482 - movs r1, 0x32 - mov r8, r1 -_0801C482: - ldr r1, _0801C578 @ =gAccuracyStageRatios - lsls r0, r5, 24 - asrs r0, 22 - adds r0, r1 - ldrb r1, [r0] - mov r4, r8 - muls r4, r1 - ldrb r1, [r0, 0x1] - adds r0, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r7, _0801C57C @ =gBattleMons - ldr r0, _0801C56C @ =gBankAttacker - ldrb r0, [r0] - movs r5, 0x58 - muls r0, r5 - adds r0, r7 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0xE - bne _0801C4C0 - lsls r0, r4, 6 - adds r0, r4 - lsls r0, 1 - movs r1, 0x64 - bl __divsi3 - lsls r0, 16 - lsrs r4, r0, 16 -_0801C4C0: - movs r0, 0 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0xD - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0801C518 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x4D - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _0801C518 - ldr r0, _0801C580 @ =gBankTarget - ldrb r0, [r0] - muls r0, r5 - adds r0, r7 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x8 - bne _0801C518 - ldr r0, _0801C574 @ =gBattleWeather - ldrh r1, [r0] - movs r0, 0x18 - ands r0, r1 - cmp r0, 0 - beq _0801C518 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - movs r1, 0x64 - bl __divsi3 - lsls r0, 16 - lsrs r4, r0, 16 -_0801C518: - ldr r2, _0801C57C @ =gBattleMons - ldr r0, _0801C56C @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x20 - ldrb r0, [r0] - mov r9, r2 - cmp r0, 0x37 - bne _0801C544 - mov r2, r10 - cmp r2, 0x8 - bhi _0801C544 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - movs r1, 0x64 - bl __divsi3 - lsls r0, 16 - lsrs r4, r0, 16 -_0801C544: - ldr r3, _0801C580 @ =gBankTarget - mov r8, r3 - ldrb r2, [r3] - movs r7, 0x58 - adds r0, r2, 0 - muls r0, r7 - mov r3, r9 - adds r1, r0, r3 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _0801C588 - ldr r1, _0801C584 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r5, [r0, 0x7] - ldrb r2, [r0, 0x1A] - b _0801C5A4 - .align 2, 0 -_0801C56C: .4byte gBankAttacker -_0801C570: .4byte gBattleMoves -_0801C574: .4byte gBattleWeather -_0801C578: .4byte gAccuracyStageRatios -_0801C57C: .4byte gBattleMons -_0801C580: .4byte gBankTarget -_0801C584: .4byte gEnigmaBerries -_0801C588: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r5, r0, 24 - mov r1, r8 - ldrb r0, [r1] - muls r0, r7 - add r0, r9 - ldrh r0, [r0, 0x2E] - bl ItemId_GetHoldEffectParam - lsls r0, 24 - lsrs r2, r0, 24 -_0801C5A4: - ldr r0, _0801C608 @ =gStringBank - ldr r1, _0801C60C @ =gBankTarget - ldrb r1, [r1] - strb r1, [r0] - cmp r5, 0x16 - bne _0801C5C0 - movs r0, 0x64 - subs r0, r2 - muls r0, r4 - movs r1, 0x64 - bl __divsi3 - lsls r0, 16 - lsrs r4, r0, 16 -_0801C5C0: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - adds r0, 0x1 - cmp r0, r4 - ble _0801C62A - ldr r2, _0801C610 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0801C614 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0801C620 - ldr r1, _0801C618 @ =gBattleMoves - ldr r2, [sp, 0x4] - adds r0, r2, r6 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x6] - cmp r0, 0x8 - beq _0801C602 - cmp r0, 0x20 - bne _0801C620 -_0801C602: - ldr r1, _0801C61C @ =gBattleCommunication - movs r0, 0x2 - b _0801C624 - .align 2, 0 -_0801C608: .4byte gStringBank -_0801C60C: .4byte gBankTarget -_0801C610: .4byte gBattleMoveFlags -_0801C614: .4byte gBattleTypeFlags -_0801C618: .4byte gBattleMoves -_0801C61C: .4byte gBattleCommunication -_0801C620: - ldr r1, _0801C644 @ =gBattleCommunication - movs r0, 0 -_0801C624: - strb r0, [r1, 0x6] - bl b_wonderguard_and_levitate -_0801C62A: - movs r0, 0x7 - adds r1, r6, 0 - bl mcmd_jump_if_move_not_executed -_0801C632: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801C644: .4byte gBattleCommunication - thumb_func_end atk01_accuracycheck - - thumb_func_start atk02_attackstring -atk02_attackstring: @ 801C648 - push {r4,r5,lr} - ldr r0, _0801C688 @ =gBattleExecBuffer - ldr r5, [r0] - cmp r5, 0 - bne _0801C680 - ldr r4, _0801C68C @ =gHitMarker - ldr r0, [r4] - movs r1, 0xC0 - lsls r1, 3 - ands r0, r1 - cmp r0, 0 - bne _0801C674 - ldr r0, _0801C690 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x4 - bl PrepareStringBattle - ldr r0, [r4] - movs r1, 0x80 - lsls r1, 3 - orrs r0, r1 - str r0, [r4] -_0801C674: - ldr r0, _0801C694 @ =gBattlescriptCurrInstr - ldr r1, [r0] - adds r1, 0x1 - str r1, [r0] - ldr r0, _0801C698 @ =gBattleCommunication - strb r5, [r0, 0x7] -_0801C680: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801C688: .4byte gBattleExecBuffer -_0801C68C: .4byte gHitMarker -_0801C690: .4byte gBankAttacker -_0801C694: .4byte gBattlescriptCurrInstr -_0801C698: .4byte gBattleCommunication - thumb_func_end atk02_attackstring - - thumb_func_start atk03_ppreduce -atk03_ppreduce: @ 801C69C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r6, 0x1 - ldr r0, _0801C6EC @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _0801C6B4 - b _0801C84E -_0801C6B4: - ldr r1, _0801C6F0 @ =gSpecialStatuses - ldr r2, _0801C6F4 @ =gBankAttacker - ldrb r3, [r2] - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 26 - lsrs r4, r0, 31 - mov r9, r2 - cmp r4, 0 - bne _0801C756 - ldr r2, _0801C6F8 @ =gBattleMoves - ldr r0, _0801C6FC @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x6] - cmp r0, 0x20 - beq _0801C706 - cmp r0, 0x20 - bgt _0801C700 - cmp r0, 0x8 - beq _0801C71C - b _0801C736 - .align 2, 0 -_0801C6EC: .4byte gBattleExecBuffer -_0801C6F0: .4byte gSpecialStatuses -_0801C6F4: .4byte gBankAttacker -_0801C6F8: .4byte gBattleMoves -_0801C6FC: .4byte gCurrentMove -_0801C700: - cmp r0, 0x40 - beq _0801C71C - b _0801C736 -_0801C706: - str r4, [sp] - movs r0, 0x12 - adds r1, r3, 0 - movs r2, 0x2E - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0x1 - b _0801C756 -_0801C71C: - mov r0, r9 - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x10 - movs r2, 0x2E - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - adds r6, r0 - b _0801C756 -_0801C736: - ldr r1, _0801C7B8 @ =gBankTarget - mov r2, r9 - ldrb r0, [r2] - ldrb r7, [r1] - cmp r0, r7 - beq _0801C756 - ldr r2, _0801C7BC @ =gBattleMons - ldrb r1, [r1] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x2E - bne _0801C756 - adds r6, 0x1 -_0801C756: - ldr r0, _0801C7C0 @ =gHitMarker - ldr r4, [r0] - movs r0, 0xA0 - lsls r0, 4 - ands r4, r0 - cmp r4, 0 - bne _0801C83C - ldr r2, _0801C7BC @ =gBattleMons - ldr r3, _0801C7C4 @ =gCurrMovePos - ldr r1, _0801C7C8 @ =gBankAttacker - ldrb r5, [r1] - movs r0, 0x58 - mov r8, r0 - mov r0, r8 - muls r0, r5 - ldrb r7, [r3] - adds r0, r7 - movs r7, 0x24 - adds r7, r2 - mov r12, r7 - add r0, r12 - ldrb r0, [r0] - mov r9, r1 - mov r10, r2 - adds r7, r3, 0 - cmp r0, 0 - beq _0801C83C - ldr r0, _0801C7CC @ =gProtectStructs - lsls r1, r5, 4 - adds r1, r0 - ldrb r0, [r1, 0x2] - movs r2, 0x8 - orrs r0, r2 - strb r0, [r1, 0x2] - mov r1, r9 - ldrb r0, [r1] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - ldrb r1, [r7] - adds r0, r1 - mov r1, r12 - adds r2, r0, r1 - ldrb r0, [r2] - cmp r0, r6 - ble _0801C7D0 - subs r0, r6 - strb r0, [r2] - b _0801C7D2 - .align 2, 0 -_0801C7B8: .4byte gBankTarget -_0801C7BC: .4byte gBattleMons -_0801C7C0: .4byte gHitMarker -_0801C7C4: .4byte gCurrMovePos -_0801C7C8: .4byte gBankAttacker -_0801C7CC: .4byte gProtectStructs -_0801C7D0: - strb r4, [r2] -_0801C7D2: - mov r2, r9 - ldrb r3, [r2] - movs r4, 0x58 - adds r0, r3, 0 - muls r0, r4 - mov r1, r10 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _0801C83C - ldr r1, _0801C860 @ =gDisableStructs - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x18] - lsrs r1, 4 - ldr r2, _0801C864 @ =gBitTable - ldrb r0, [r7] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _0801C83C - ldr r0, _0801C868 @ =gActiveBank - strb r3, [r0] - ldrb r1, [r7] - adds r1, 0x9 - lsls r1, 24 - lsrs r1, 24 - mov r2, r9 - ldrb r0, [r2] - muls r0, r4 - mov r2, r10 - adds r2, 0x24 - adds r0, r2 - ldrb r7, [r7] - adds r0, r7 - str r0, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0x1 - bl EmitSetAttributes - mov r7, r9 - ldrb r0, [r7] - bl MarkBufferBankForExecution -_0801C83C: - ldr r2, _0801C86C @ =gHitMarker - ldr r0, [r2] - ldr r1, _0801C870 @ =0xfffff7ff - ands r0, r1 - str r0, [r2] - ldr r1, _0801C874 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_0801C84E: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801C860: .4byte gDisableStructs -_0801C864: .4byte gBitTable -_0801C868: .4byte gActiveBank -_0801C86C: .4byte gHitMarker -_0801C870: .4byte 0xfffff7ff -_0801C874: .4byte gBattlescriptCurrInstr - thumb_func_end atk03_ppreduce - - thumb_func_start atk04_critcalc -atk04_critcalc: @ 801C878 - push {r4-r7,lr} - ldr r1, _0801C89C @ =gBattleMons - ldr r0, _0801C8A0 @ =gBankAttacker - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - ldrh r0, [r0, 0x2E] - cmp r0, 0xAF - bne _0801C8A8 - ldr r1, _0801C8A4 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r6, [r0, 0x7] - b _0801C8B0 - .align 2, 0 -_0801C89C: .4byte gBattleMons -_0801C8A0: .4byte gBankAttacker -_0801C8A4: .4byte gEnigmaBerries -_0801C8A8: - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r6, r0, 24 -_0801C8B0: - ldr r1, _0801C93C @ =gStringBank - ldr r3, _0801C940 @ =gBankAttacker - ldrb r0, [r3] - strb r0, [r1] - ldr r4, _0801C944 @ =gBattleMons - ldrb r1, [r3] - movs r0, 0x58 - adds r7, r1, 0 - muls r7, r0 - adds r0, r4, 0 - adds r0, 0x50 - adds r0, r7, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 13 - ands r0, r1 - negs r0, r0 - asrs r5, r0, 31 - movs r0, 0x2 - ands r5, r0 - ldr r2, _0801C948 @ =gBattleMoves - ldr r0, _0801C94C @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - mov r12, r3 - cmp r1, 0x2B - bne _0801C8F0 - adds r5, 0x1 -_0801C8F0: - adds r0, r5, 0 - cmp r1, 0x4B - bne _0801C8F8 - adds r0, 0x1 -_0801C8F8: - cmp r1, 0xC8 - bne _0801C8FE - adds r0, 0x1 -_0801C8FE: - adds r2, r0, 0 - cmp r1, 0xD1 - bne _0801C906 - adds r2, 0x1 -_0801C906: - movs r1, 0 - cmp r6, 0x3F - bne _0801C916 - adds r0, r7, r4 - ldrh r0, [r0] - cmp r0, 0x71 - bne _0801C916 - movs r1, 0x1 -_0801C916: - lsls r5, r1, 1 - movs r3, 0 - cmp r6, 0x42 - bne _0801C930 - mov r0, r12 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r4 - ldrh r0, [r0] - cmp r0, 0x53 - bne _0801C930 - movs r3, 0x1 -_0801C930: - lsls r1, r3, 1 - cmp r6, 0x29 - bne _0801C950 - adds r0, r5, 0x1 - adds r0, r2, r0 - b _0801C952 - .align 2, 0 -_0801C93C: .4byte gStringBank -_0801C940: .4byte gBankAttacker -_0801C944: .4byte gBattleMons -_0801C948: .4byte gBattleMoves -_0801C94C: .4byte gCurrentMove -_0801C950: - adds r0, r2, r5 -_0801C952: - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - adds r5, r0, 0 - cmp r5, 0x4 - bls _0801C960 - movs r5, 0x4 -_0801C960: - ldr r0, _0801C9BC @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r4 - adds r0, 0x20 - ldrb r4, [r0] - cmp r4, 0x4 - beq _0801C9D0 - cmp r4, 0x4B - beq _0801C9D0 - ldr r1, _0801C9C0 @ =gStatuses3 - mov r2, r12 - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - bne _0801C9D0 - ldr r0, _0801C9C4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x84 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - bne _0801C9D0 - bl Random - ldr r2, _0801C9C8 @ =gCriticalHitChance - lsls r1, r5, 1 - adds r1, r2 - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r1] - bl __umodsi3 - lsls r0, 16 - cmp r0, 0 - bne _0801C9D0 - ldr r1, _0801C9CC @ =gCritMultiplier - movs r0, 0x2 - b _0801C9D4 - .align 2, 0 -_0801C9BC: .4byte gBankTarget -_0801C9C0: .4byte gStatuses3 -_0801C9C4: .4byte gBattleTypeFlags -_0801C9C8: .4byte gCriticalHitChance -_0801C9CC: .4byte gCritMultiplier -_0801C9D0: - ldr r1, _0801C9E4 @ =gCritMultiplier - movs r0, 0x1 -_0801C9D4: - strb r0, [r1] - ldr r1, _0801C9E8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801C9E4: .4byte gCritMultiplier -_0801C9E8: .4byte gBattlescriptCurrInstr - thumb_func_end atk04_critcalc - - thumb_func_start atk05_damagecalc1 -atk05_damagecalc1: @ 801C9EC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - ldr r4, _0801CABC @ =gSideAffecting - ldr r6, _0801CAC0 @ =gBankTarget - ldrb r0, [r6] - bl GetBankIdentity - movs r1, 0x1 - ands r1, r0 - lsls r1, 1 - adds r1, r4 - ldrh r3, [r1] - ldr r0, _0801CAC4 @ =gBankAttacker - mov r8, r0 - ldrb r0, [r0] - movs r4, 0x58 - muls r0, r4 - ldr r2, _0801CAC8 @ =gBattleMons - adds r0, r2 - ldrb r1, [r6] - muls r1, r4 - adds r1, r2 - ldr r2, _0801CACC @ =gCurrentMove - mov r9, r2 - ldrh r2, [r2] - ldr r4, _0801CAD0 @ =gDynamicBasePower - ldrh r4, [r4] - str r4, [sp] - ldr r5, _0801CAD4 @ =0x02000000 - ldr r7, _0801CAD8 @ =0x0001601c - adds r4, r5, r7 - ldrb r4, [r4] - str r4, [sp, 0x4] - mov r7, r8 - ldrb r4, [r7] - str r4, [sp, 0x8] - ldrb r4, [r6] - str r4, [sp, 0xC] - bl CalculateBaseDamage - ldr r4, _0801CADC @ =gBattleMoveDamage - ldr r1, _0801CAE0 @ =gCritMultiplier - ldrb r1, [r1] - muls r1, r0 - ldr r0, _0801CAE4 @ =0x0001601f - adds r5, r0 - ldrb r0, [r5] - adds r3, r1, 0 - muls r3, r0 - str r3, [r4] - ldr r1, _0801CAE8 @ =gStatuses3 - ldrb r0, [r7] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 2 - ands r0, r1 - cmp r0, 0 - beq _0801CA82 - ldr r2, _0801CAEC @ =gBattleMoves - mov r7, r9 - ldrh r1, [r7] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x2] - cmp r0, 0xD - bne _0801CA82 - lsls r0, r3, 1 - str r0, [r4] -_0801CA82: - ldr r1, _0801CAF0 @ =gProtectStructs - ldr r0, _0801CAC4 @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 28 - cmp r0, 0 - bge _0801CAA4 - ldr r4, _0801CADC @ =gBattleMoveDamage - ldr r1, [r4] - lsls r0, r1, 4 - subs r0, r1 - movs r1, 0xA - bl __divsi3 - str r0, [r4] -_0801CAA4: - ldr r1, _0801CAF4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801CABC: .4byte gSideAffecting -_0801CAC0: .4byte gBankTarget -_0801CAC4: .4byte gBankAttacker -_0801CAC8: .4byte gBattleMons -_0801CACC: .4byte gCurrentMove -_0801CAD0: .4byte gDynamicBasePower -_0801CAD4: .4byte 0x02000000 -_0801CAD8: .4byte 0x0001601c -_0801CADC: .4byte gBattleMoveDamage -_0801CAE0: .4byte gCritMultiplier -_0801CAE4: .4byte 0x0001601f -_0801CAE8: .4byte gStatuses3 -_0801CAEC: .4byte gBattleMoves -_0801CAF0: .4byte gProtectStructs -_0801CAF4: .4byte gBattlescriptCurrInstr - thumb_func_end atk05_damagecalc1 - - thumb_func_start AI_CalcDmg -AI_CalcDmg: @ 801CAF8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - adds r5, r1, 0 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r4, _0801CBBC @ =gSideAffecting - adds r0, r5, 0 - bl GetBankIdentity - movs r1, 0x1 - ands r1, r0 - lsls r1, 1 - adds r1, r4 - ldrh r3, [r1] - movs r1, 0x58 - adds r0, r7, 0 - muls r0, r1 - ldr r2, _0801CBC0 @ =gBattleMons - adds r0, r2 - muls r1, r5 - adds r1, r2 - ldr r2, _0801CBC4 @ =gCurrentMove - mov r9, r2 - ldrh r2, [r2] - ldr r4, _0801CBC8 @ =gDynamicBasePower - mov r8, r4 - ldrh r4, [r4] - str r4, [sp] - ldr r6, _0801CBCC @ =0x02000000 - ldr r4, _0801CBD0 @ =0x0001601c - ldrb r4, [r4, r6] - str r4, [sp, 0x4] - str r7, [sp, 0x8] - str r5, [sp, 0xC] - bl CalculateBaseDamage - ldr r4, _0801CBD4 @ =gBattleMoveDamage - movs r1, 0 - mov r2, r8 - strh r1, [r2] - ldr r1, _0801CBD8 @ =gCritMultiplier - ldrb r1, [r1] - muls r1, r0 - ldr r0, _0801CBDC @ =0x0001601f - adds r6, r0 - ldrb r0, [r6] - adds r3, r1, 0 - muls r3, r0 - str r3, [r4] - ldr r1, _0801CBE0 @ =gStatuses3 - lsls r0, r7, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 2 - ands r0, r1 - cmp r0, 0 - beq _0801CB8E - ldr r2, _0801CBE4 @ =gBattleMoves - mov r6, r9 - ldrh r1, [r6] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x2] - cmp r0, 0xD - bne _0801CB8E - lsls r0, r3, 1 - str r0, [r4] -_0801CB8E: - ldr r0, _0801CBE8 @ =gProtectStructs - lsls r1, r7, 4 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 28 - cmp r0, 0 - bge _0801CBAC - ldr r4, _0801CBD4 @ =gBattleMoveDamage - ldr r1, [r4] - lsls r0, r1, 4 - subs r0, r1 - movs r1, 0xA - bl __divsi3 - str r0, [r4] -_0801CBAC: - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801CBBC: .4byte gSideAffecting -_0801CBC0: .4byte gBattleMons -_0801CBC4: .4byte gCurrentMove -_0801CBC8: .4byte gDynamicBasePower -_0801CBCC: .4byte 0x02000000 -_0801CBD0: .4byte 0x0001601c -_0801CBD4: .4byte gBattleMoveDamage -_0801CBD8: .4byte gCritMultiplier -_0801CBDC: .4byte 0x0001601f -_0801CBE0: .4byte gStatuses3 -_0801CBE4: .4byte gBattleMoves -_0801CBE8: .4byte gProtectStructs - thumb_func_end AI_CalcDmg - - thumb_func_start battle_attack_damage_modulate_by_effectivity -battle_attack_damage_modulate_by_effectivity: @ 801CBEC - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r5, _0801CC1C @ =gBattleMoveDamage - ldr r0, [r5] - muls r0, r4 - movs r1, 0xA - bl __divsi3 - str r0, [r5] - cmp r0, 0 - bne _0801CC0C - cmp r4, 0 - beq _0801CC0C - movs r0, 0x1 - str r0, [r5] -_0801CC0C: - cmp r4, 0x5 - beq _0801CC3C - cmp r4, 0x5 - bgt _0801CC20 - cmp r4, 0 - beq _0801CC26 - b _0801CCBE - .align 2, 0 -_0801CC1C: .4byte gBattleMoveDamage -_0801CC20: - cmp r4, 0x14 - beq _0801CC7C - b _0801CCBE -_0801CC26: - ldr r2, _0801CC38 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x8 - orrs r0, r1 - movs r1, 0xFB - ands r0, r1 - movs r1, 0xFD - ands r0, r1 - b _0801CCBC - .align 2, 0 -_0801CC38: .4byte gBattleMoveFlags -_0801CC3C: - ldr r2, _0801CC6C @ =gBattleMoves - ldr r0, _0801CC70 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _0801CCBE - ldr r2, _0801CC74 @ =gBattleMoveFlags - ldrb r1, [r2] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0801CCBE - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0801CC78 - movs r0, 0xFD - ands r0, r1 - b _0801CCBC - .align 2, 0 -_0801CC6C: .4byte gBattleMoves -_0801CC70: .4byte gCurrentMove -_0801CC74: .4byte gBattleMoveFlags -_0801CC78: - movs r0, 0x4 - b _0801CCBA -_0801CC7C: - ldr r2, _0801CCAC @ =gBattleMoves - ldr r0, _0801CCB0 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _0801CCBE - ldr r2, _0801CCB4 @ =gBattleMoveFlags - ldrb r1, [r2] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0801CCBE - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0801CCB8 - movs r0, 0xFB - ands r0, r1 - b _0801CCBC - .align 2, 0 -_0801CCAC: .4byte gBattleMoves -_0801CCB0: .4byte gCurrentMove -_0801CCB4: .4byte gBattleMoveFlags -_0801CCB8: - movs r0, 0x2 -_0801CCBA: - orrs r0, r1 -_0801CCBC: - strb r0, [r2] -_0801CCBE: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end battle_attack_damage_modulate_by_effectivity - - thumb_func_start atk06_typecalc -atk06_typecalc: @ 801CCC4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r3, 0 - ldr r1, _0801CCF0 @ =gCurrentMove - ldrh r0, [r1] - cmp r0, 0xA5 - bne _0801CCD8 - b _0801CEF4 -_0801CCD8: - ldr r0, _0801CCF4 @ =0x02000000 - ldr r2, _0801CCF8 @ =0x0001601c - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0801CCFC - movs r1, 0x3F - mov r8, r1 - mov r2, r8 - ands r2, r0 - mov r8, r2 - b _0801CD0C - .align 2, 0 -_0801CCF0: .4byte gCurrentMove -_0801CCF4: .4byte 0x02000000 -_0801CCF8: .4byte 0x0001601c -_0801CCFC: - ldr r2, _0801CD94 @ =gBattleMoves - ldrh r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x2] - mov r8, r0 -_0801CD0C: - ldr r2, _0801CD98 @ =gBattleMons - ldr r0, _0801CD9C @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - adds r5, r2, 0 - cmp r0, r8 - beq _0801CD2E - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, r8 - bne _0801CD44 -_0801CD2E: - ldr r4, _0801CDA0 @ =gBattleMoveDamage - ldr r1, [r4] - lsls r0, r1, 4 - subs r0, r1 - str r0, [r4] - movs r1, 0xA - str r3, [sp, 0x4] - bl __divsi3 - str r0, [r4] - ldr r3, [sp, 0x4] -_0801CD44: - ldr r2, _0801CDA4 @ =gBankTarget - ldrb r1, [r2] - movs r0, 0x58 - muls r0, r1 - adds r0, r5 - adds r0, 0x20 - ldrb r0, [r0] - adds r4, r2, 0 - cmp r0, 0x1A - bne _0801CDBC - mov r1, r8 - cmp r1, 0x4 - bne _0801CDBC - ldr r3, _0801CDA8 @ =gLastUsedAbility - strb r0, [r3] - ldr r2, _0801CDAC @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x9 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0801CDB0 @ =gMoveHitWith - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - movs r2, 0 - strh r2, [r0] - ldr r1, _0801CDB4 @ =gUnknown_02024C44 - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - strh r2, [r0] - ldr r0, _0801CDB8 @ =gBattleCommunication - mov r2, r8 - strb r2, [r0, 0x6] - ldrb r0, [r4] - ldrb r1, [r3] - bl RecordAbilityBattle - b _0801CE58 - .align 2, 0 -_0801CD94: .4byte gBattleMoves -_0801CD98: .4byte gBattleMons -_0801CD9C: .4byte gBankAttacker -_0801CDA0: .4byte gBattleMoveDamage -_0801CDA4: .4byte gBankTarget -_0801CDA8: .4byte gLastUsedAbility -_0801CDAC: .4byte gBattleMoveFlags -_0801CDB0: .4byte gMoveHitWith -_0801CDB4: .4byte gUnknown_02024C44 -_0801CDB8: .4byte gBattleCommunication -_0801CDBC: - ldr r1, _0801CDC8 @ =gTypeEffectiveness - adds r0, r3, r1 - ldrb r0, [r0] - adds r2, r1, 0 - b _0801CE38 - .align 2, 0 -_0801CDC8: .4byte gTypeEffectiveness -_0801CDCC: - adds r3, 0x3 - b _0801CE34 -_0801CDD0: - ldr r5, _0801CF08 @ =gTypeEffectiveness - adds r0, r3, r5 - ldrb r0, [r0] - cmp r0, r8 - bne _0801CE2C - adds r1, r3, 0x1 - adds r1, r5 - ldr r2, _0801CF0C @ =gBattleMons - ldr r7, _0801CF10 @ =gBankTarget - ldrb r0, [r7] - movs r6, 0x58 - muls r0, r6 - adds r0, r2 - adds r0, 0x21 - ldrb r4, [r1] - ldrb r0, [r0] - cmp r4, r0 - bne _0801CE06 - adds r0, r3, 0x2 - adds r0, r5 - ldrb r0, [r0] - str r2, [sp] - str r3, [sp, 0x4] - bl battle_attack_damage_modulate_by_effectivity - ldr r3, [sp, 0x4] - ldr r2, [sp] -_0801CE06: - ldrb r0, [r7] - muls r0, r6 - adds r0, r2 - adds r1, r0, 0 - adds r1, 0x22 - ldrb r1, [r1] - cmp r4, r1 - bne _0801CE2C - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, r4 - beq _0801CE2C - adds r0, r3, 0x2 - adds r0, r5 - ldrb r0, [r0] - str r3, [sp, 0x4] - bl battle_attack_damage_modulate_by_effectivity - ldr r3, [sp, 0x4] -_0801CE2C: - adds r3, 0x3 - ldr r5, _0801CF0C @ =gBattleMons - ldr r4, _0801CF10 @ =gBankTarget - ldr r2, _0801CF08 @ =gTypeEffectiveness -_0801CE34: - adds r0, r3, r2 - ldrb r0, [r0] -_0801CE38: - cmp r0, 0xFF - beq _0801CE58 - cmp r0, 0xFE - bne _0801CDD0 - ldrb r1, [r4] - movs r0, 0x58 - muls r0, r1 - adds r1, r5, 0 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 22 - ands r0, r1 - cmp r0, 0 - beq _0801CDCC -_0801CE58: - ldr r2, _0801CF0C @ =gBattleMons - ldr r5, _0801CF10 @ =gBankTarget - ldrb r1, [r5] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x20 - ldrb r6, [r0] - cmp r6, 0x19 - bne _0801CED6 - ldr r0, _0801CF14 @ =gBankAttacker - ldrb r0, [r0] - ldr r7, _0801CF18 @ =gCurrentMove - ldrh r1, [r7] - bl move_weather_interaction - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0801CED6 - ldr r1, _0801CF1C @ =gBattleMoveFlags - mov r8, r1 - ldrb r4, [r1] - ands r0, r4 - cmp r0, 0 - beq _0801CE94 - movs r0, 0x6 - ands r0, r4 - cmp r0, 0x6 - bne _0801CED6 -_0801CE94: - ldr r2, _0801CF20 @ =gBattleMoves - ldrh r1, [r7] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _0801CED6 - ldr r3, _0801CF24 @ =gLastUsedAbility - strb r6, [r3] - movs r0, 0x1 - orrs r0, r4 - mov r2, r8 - strb r0, [r2] - ldr r1, _0801CF28 @ =gMoveHitWith - ldrb r0, [r5] - lsls r0, 1 - adds r0, r1 - movs r2, 0 - strh r2, [r0] - ldr r1, _0801CF2C @ =gUnknown_02024C44 - ldrb r0, [r5] - lsls r0, 1 - adds r0, r1 - strh r2, [r0] - ldr r1, _0801CF30 @ =gBattleCommunication - movs r0, 0x3 - strb r0, [r1, 0x6] - ldrb r0, [r5] - ldrb r1, [r3] - bl RecordAbilityBattle -_0801CED6: - ldr r0, _0801CF1C @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0801CEF4 - ldr r2, _0801CF34 @ =gProtectStructs - ldr r0, _0801CF14 @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 4 - adds r1, r2 - ldrb r0, [r1, 0x1] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r1, 0x1] -_0801CEF4: - ldr r1, _0801CF38 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801CF08: .4byte gTypeEffectiveness -_0801CF0C: .4byte gBattleMons -_0801CF10: .4byte gBankTarget -_0801CF14: .4byte gBankAttacker -_0801CF18: .4byte gCurrentMove -_0801CF1C: .4byte gBattleMoveFlags -_0801CF20: .4byte gBattleMoves -_0801CF24: .4byte gLastUsedAbility -_0801CF28: .4byte gMoveHitWith -_0801CF2C: .4byte gUnknown_02024C44 -_0801CF30: .4byte gBattleCommunication -_0801CF34: .4byte gProtectStructs -_0801CF38: .4byte gBattlescriptCurrInstr - thumb_func_end atk06_typecalc - - thumb_func_start b_wonderguard_and_levitate -b_wonderguard_and_levitate: @ 801CF3C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r6, 0 - movs r5, 0 - ldr r0, _0801CF80 @ =gCurrentMove - ldrh r1, [r0] - mov r9, r0 - cmp r1, 0xA5 - bne _0801CF54 - b _0801D1A4 -_0801CF54: - ldr r2, _0801CF84 @ =gBattleMoves - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - ldrb r0, [r1, 0x1] - cmp r0, 0 - bne _0801CF66 - b _0801D1A4 -_0801CF66: - ldr r0, _0801CF88 @ =0x02000000 - ldr r2, _0801CF8C @ =0x0001601c - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0801CF90 - movs r1, 0x3F - mov r12, r1 - mov r2, r12 - ands r2, r0 - mov r12, r2 - b _0801CF94 - .align 2, 0 -_0801CF80: .4byte gCurrentMove -_0801CF84: .4byte gBattleMoves -_0801CF88: .4byte 0x02000000 -_0801CF8C: .4byte 0x0001601c -_0801CF90: - ldrb r1, [r1, 0x2] - mov r12, r1 -_0801CF94: - ldr r2, _0801CFC8 @ =gBattleMons - ldr r3, _0801CFCC @ =gBankTarget - ldrb r1, [r3] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x20 - ldrb r1, [r0] - adds r7, r2, 0 - mov r8, r3 - cmp r1, 0x1A - bne _0801CFD8 - mov r0, r12 - cmp r0, 0x4 - bne _0801CFD8 - ldr r0, _0801CFD0 @ =gLastUsedAbility - strb r1, [r0] - ldr r0, _0801CFD4 @ =gBattleCommunication - mov r1, r12 - strb r1, [r0, 0x6] - ldrb r0, [r3] - movs r1, 0x1A - bl RecordAbilityBattle - b _0801D1A4 - .align 2, 0 -_0801CFC8: .4byte gBattleMons -_0801CFCC: .4byte gBankTarget -_0801CFD0: .4byte gLastUsedAbility -_0801CFD4: .4byte gBattleCommunication -_0801CFD8: - ldr r1, _0801CFE4 @ =gTypeEffectiveness - adds r0, r5, r1 - ldrb r0, [r0] - adds r4, r1, 0 - b _0801D12A - .align 2, 0 -_0801CFE4: .4byte gTypeEffectiveness -_0801CFE8: - adds r0, r5, r4 - ldrb r0, [r0] - cmp r0, r12 - beq _0801CFF2 - b _0801D124 -_0801CFF2: - adds r2, r5, 0x1 - adds r3, r2, r4 - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r7 - adds r0, 0x21 - ldrb r1, [r3] - adds r3, r2, 0 - ldrb r0, [r0] - cmp r1, r0 - bne _0801D032 - adds r0, r5, 0x2 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _0801D032 - ldr r2, _0801D1B0 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0801D1B4 @ =gProtectStructs - ldr r0, _0801D1B8 @ =gBankAttacker - ldrb r2, [r0] - lsls r2, 4 - adds r2, r1 - ldrb r0, [r2, 0x1] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2, 0x1] -_0801D032: - adds r2, r3, r4 - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r7 - adds r1, r0, 0 - adds r1, 0x22 - ldrb r2, [r2] - ldrb r1, [r1] - cmp r2, r1 - bne _0801D078 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, r2 - beq _0801D078 - adds r0, r5, 0x2 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _0801D078 - ldr r2, _0801D1B0 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0801D1B4 @ =gProtectStructs - ldr r0, _0801D1B8 @ =gBankAttacker - ldrb r2, [r0] - lsls r2, 4 - adds r2, r1 - ldrb r0, [r2, 0x1] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2, 0x1] -_0801D078: - adds r2, r3, r4 - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r7 - adds r0, 0x21 - ldrb r1, [r2] - ldrb r0, [r0] - cmp r1, r0 - bne _0801D09C - adds r0, r5, 0x2 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x14 - bne _0801D09C - movs r0, 0x1 - orrs r6, r0 -_0801D09C: - adds r2, r3, r4 - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r7 - adds r1, r0, 0 - adds r1, 0x22 - ldrb r2, [r2] - ldrb r1, [r1] - cmp r2, r1 - bne _0801D0CA - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, r2 - beq _0801D0CA - adds r0, r5, 0x2 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x14 - bne _0801D0CA - movs r0, 0x1 - orrs r6, r0 -_0801D0CA: - adds r2, r3, r4 - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r7 - adds r0, 0x21 - ldrb r1, [r2] - ldrb r0, [r0] - cmp r1, r0 - bne _0801D0F2 - adds r0, r5, 0x2 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x5 - bne _0801D0F2 - movs r0, 0x2 - orrs r6, r0 - lsls r0, r6, 24 - lsrs r6, r0, 24 -_0801D0F2: - adds r2, r3, r4 - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r7 - adds r1, r0, 0 - adds r1, 0x22 - ldrb r2, [r2] - ldrb r1, [r1] - cmp r2, r1 - bne _0801D124 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, r2 - beq _0801D124 - adds r0, r5, 0x2 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x5 - bne _0801D124 - movs r0, 0x2 - orrs r6, r0 - lsls r0, r6, 24 - lsrs r6, r0, 24 -_0801D124: - adds r5, 0x3 - adds r0, r5, r4 - ldrb r0, [r0] -_0801D12A: - cmp r0, 0xFF - beq _0801D14E - cmp r0, 0xFE - beq _0801D134 - b _0801CFE8 -_0801D134: - mov r2, r8 - ldrb r1, [r2] - movs r0, 0x58 - muls r0, r1 - adds r1, r7, 0 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 22 - ands r0, r1 - cmp r0, 0 - beq _0801D124 -_0801D14E: - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r7 - adds r0, 0x20 - ldrb r4, [r0] - cmp r4, 0x19 - bne _0801D1A4 - ldr r0, _0801D1B8 @ =gBankAttacker - ldrb r0, [r0] - mov r2, r9 - ldrh r1, [r2] - bl move_weather_interaction - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0801D1A4 - movs r0, 0x3 - ands r6, r0 - cmp r6, 0x1 - beq _0801D1A4 - ldr r2, _0801D1BC @ =gBattleMoves - mov r0, r9 - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _0801D1A4 - ldr r0, _0801D1C0 @ =gLastUsedAbility - strb r4, [r0] - ldr r1, _0801D1C4 @ =gBattleCommunication - movs r0, 0x3 - strb r0, [r1, 0x6] - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x19 - bl RecordAbilityBattle -_0801D1A4: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801D1B0: .4byte gBattleMoveFlags -_0801D1B4: .4byte gProtectStructs -_0801D1B8: .4byte gBankAttacker -_0801D1BC: .4byte gBattleMoves -_0801D1C0: .4byte gLastUsedAbility -_0801D1C4: .4byte gBattleCommunication - thumb_func_end b_wonderguard_and_levitate - - thumb_func_start b_attack_effectivity_adapt -b_attack_effectivity_adapt: @ 801D1C8 - push {r4-r7,lr} - adds r6, r2, 0 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r5, r1, 16 - ldr r7, _0801D1FC @ =gBattleMoveDamage - ldr r0, [r7] - muls r0, r4 - movs r1, 0xA - bl __divsi3 - str r0, [r7] - cmp r0, 0 - bne _0801D1EE - cmp r4, 0 - beq _0801D1EE - movs r0, 0x1 - str r0, [r7] -_0801D1EE: - cmp r4, 0x5 - beq _0801D216 - cmp r4, 0x5 - bgt _0801D200 - cmp r4, 0 - beq _0801D206 - b _0801D27A - .align 2, 0 -_0801D1FC: .4byte gBattleMoveDamage -_0801D200: - cmp r4, 0x14 - beq _0801D248 - b _0801D27A -_0801D206: - ldrb r0, [r6] - movs r1, 0x8 - orrs r0, r1 - movs r1, 0xFB - ands r0, r1 - movs r1, 0xFD - ands r0, r1 - b _0801D278 -_0801D216: - ldr r0, _0801D240 @ =gBattleMoves - lsls r1, r5, 1 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - cmp r0, 0 - beq _0801D27A - ldrb r1, [r6] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0801D27A - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0801D244 - movs r0, 0xFD - ands r0, r1 - b _0801D278 - .align 2, 0 -_0801D240: .4byte gBattleMoves -_0801D244: - movs r0, 0x4 - b _0801D276 -_0801D248: - ldr r0, _0801D270 @ =gBattleMoves - lsls r1, r5, 1 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - cmp r0, 0 - beq _0801D27A - ldrb r1, [r6] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0801D27A - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0801D274 - movs r0, 0xFB - ands r0, r1 - b _0801D278 - .align 2, 0 -_0801D270: .4byte gBattleMoves -_0801D274: - movs r0, 0x2 -_0801D276: - orrs r0, r1 -_0801D278: - strb r0, [r6] -_0801D27A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end b_attack_effectivity_adapt - - thumb_func_start TypeCalc -TypeCalc: @ 801D280 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp, 0x4] - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - movs r7, 0 - mov r0, sp - strb r7, [r0] - mov r0, r10 - cmp r0, 0xA5 - bne _0801D2AE - movs r0, 0 - b _0801D43A -_0801D2AE: - ldr r1, _0801D31C @ =gBattleMoves - mov r3, r10 - lsls r2, r3, 1 - adds r0, r2, r3 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x2] - str r0, [sp, 0x8] - ldr r1, _0801D320 @ =gBattleMons - movs r0, 0x58 - ldr r3, [sp, 0x4] - muls r0, r3 - adds r3, r0, r1 - adds r0, r3, 0 - adds r0, 0x21 - ldrb r0, [r0] - str r2, [sp, 0xC] - adds r5, r1, 0 - ldr r1, [sp, 0x8] - cmp r0, r1 - beq _0801D2E2 - adds r0, r3, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, r1 - bne _0801D2F4 -_0801D2E2: - ldr r4, _0801D324 @ =gBattleMoveDamage - ldr r1, [r4] - lsls r0, r1, 4 - subs r0, r1 - str r0, [r4] - movs r1, 0xA - bl __divsi3 - str r0, [r4] -_0801D2F4: - movs r0, 0x58 - mov r2, r9 - muls r2, r0 - adds r0, r2, 0 - adds r0, r5 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1A - bne _0801D328 - ldr r3, [sp, 0x8] - cmp r3, 0x4 - bne _0801D328 - movs r1, 0x9 - mov r0, sp - ldrb r0, [r0] - orrs r0, r1 - mov r1, sp - strb r0, [r1] - b _0801D3DC - .align 2, 0 -_0801D31C: .4byte gBattleMoves -_0801D320: .4byte gBattleMons -_0801D324: .4byte gBattleMoveDamage -_0801D328: - ldr r1, _0801D344 @ =gTypeEffectiveness - adds r0, r7, r1 - ldrb r0, [r0] - adds r2, r1, 0 - cmp r0, 0xFF - beq _0801D3DC - cmp r0, 0xFE - bne _0801D34C - movs r0, 0x58 - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - b _0801D3CA - .align 2, 0 -_0801D344: .4byte gTypeEffectiveness -_0801D348: - adds r7, 0x3 - b _0801D3B6 -_0801D34C: - ldr r6, _0801D44C @ =gTypeEffectiveness - adds r0, r7, r6 - ldrb r0, [r0] - ldr r2, [sp, 0x8] - cmp r0, r2 - bne _0801D3B0 - adds r1, r7, 0x1 - adds r1, r6 - ldr r3, _0801D450 @ =gBattleMons - mov r8, r3 - movs r3, 0x58 - mov r0, r9 - muls r0, r3 - mov r2, r8 - adds r5, r0, r2 - adds r0, r5, 0 - adds r0, 0x21 - ldrb r4, [r1] - ldrb r0, [r0] - cmp r4, r0 - bne _0801D388 - adds r0, r7, 0x2 - adds r0, r6 - ldrb r0, [r0] - mov r1, r10 - mov r2, sp - str r3, [sp, 0x10] - bl b_attack_effectivity_adapt - ldr r3, [sp, 0x10] -_0801D388: - adds r0, r5, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r4, r0 - bne _0801D3B0 - ldr r0, _0801D454 @ =gBankTarget - ldrb r0, [r0] - muls r0, r3 - add r0, r8 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, r4 - beq _0801D3B0 - adds r0, r7, 0x2 - adds r0, r6 - ldrb r0, [r0] - mov r1, r10 - mov r2, sp - bl b_attack_effectivity_adapt -_0801D3B0: - adds r7, 0x3 - ldr r5, _0801D450 @ =gBattleMons - ldr r2, _0801D44C @ =gTypeEffectiveness -_0801D3B6: - adds r0, r7, r2 - ldrb r0, [r0] - cmp r0, 0xFF - beq _0801D3DC - cmp r0, 0xFE - bne _0801D34C - movs r0, 0x58 - mov r3, r9 - muls r3, r0 - adds r0, r3, 0 -_0801D3CA: - adds r1, r5, 0 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 22 - ands r0, r1 - cmp r0, 0 - beq _0801D348 -_0801D3DC: - movs r0, 0x58 - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - adds r0, r5 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x19 - bne _0801D436 - mov r0, sp - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0801D436 - ldr r0, [sp, 0x4] - mov r1, r10 - bl move_weather_interaction - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x2 - bne _0801D436 - mov r0, sp - ldrb r3, [r0] - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - beq _0801D41E - movs r0, 0x6 - ands r0, r3 - cmp r0, 0x6 - bne _0801D436 -_0801D41E: - ldr r0, _0801D458 @ =gBattleMoves - ldr r1, [sp, 0xC] - add r1, r10 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - cmp r0, 0 - beq _0801D436 - mov r0, sp - movs r1, 0x1 - orrs r1, r3 - strb r1, [r0] -_0801D436: - mov r0, sp - ldrb r0, [r0] -_0801D43A: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0801D44C: .4byte gTypeEffectiveness -_0801D450: .4byte gBattleMons -_0801D454: .4byte gBankTarget -_0801D458: .4byte gBattleMoves - thumb_func_end TypeCalc - - thumb_func_start ai_rate_move -ai_rate_move: @ 801D45C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x4] - movs r7, 0 - mov r0, sp - strb r7, [r0] - ldr r2, _0801D498 @ =gBaseStats - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x6] - str r1, [sp, 0x8] - ldrb r0, [r0, 0x7] - mov r8, r0 - cmp r6, 0xA5 - bne _0801D49C - movs r0, 0 - b _0801D554 - .align 2, 0 -_0801D498: .4byte gBaseStats -_0801D49C: - ldr r2, _0801D4C0 @ =gBattleMoves - lsls r1, r6, 1 - adds r0, r1, r6 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x2] - mov r9, r0 - str r1, [sp, 0xC] - ldr r3, [sp, 0x4] - cmp r3, 0x1A - bne _0801D4C4 - cmp r0, 0x4 - bne _0801D4C4 - movs r1, 0x9 - mov r0, sp - strb r1, [r0] - b _0801D51E - .align 2, 0 -_0801D4C0: .4byte gBattleMoves -_0801D4C4: - ldr r0, _0801D564 @ =gTypeEffectiveness - mov r10, r0 - adds r1, r7, r0 - ldrb r0, [r1] - cmp r0, 0xFF - beq _0801D51E - adds r4, r1, 0 -_0801D4D2: - ldrb r0, [r4] - cmp r0, 0xFE - beq _0801D510 - cmp r0, r9 - bne _0801D510 - ldrb r5, [r4, 0x1] - ldr r1, [sp, 0x8] - cmp r5, r1 - bne _0801D4EE - ldrb r0, [r4, 0x2] - adds r1, r6, 0 - mov r2, sp - bl b_attack_effectivity_adapt -_0801D4EE: - cmp r5, r8 - bne _0801D510 - ldr r0, _0801D568 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - ldr r3, _0801D56C @ =gBattleMons - adds r0, r3 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, r8 - beq _0801D510 - ldrb r0, [r4, 0x2] - adds r1, r6, 0 - mov r2, sp - bl b_attack_effectivity_adapt -_0801D510: - adds r4, 0x3 - adds r7, 0x3 - mov r1, r10 - adds r0, r7, r1 - ldrb r0, [r0] - cmp r0, 0xFF - bne _0801D4D2 -_0801D51E: - ldr r3, [sp, 0x4] - cmp r3, 0x19 - bne _0801D550 - mov r0, sp - ldrb r2, [r0] - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - beq _0801D538 - movs r0, 0x6 - ands r0, r2 - cmp r0, 0x6 - bne _0801D550 -_0801D538: - ldr r0, _0801D570 @ =gBattleMoves - ldr r3, [sp, 0xC] - adds r1, r3, r6 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - cmp r0, 0 - beq _0801D550 - mov r0, sp - movs r1, 0x8 - orrs r1, r2 - strb r1, [r0] -_0801D550: - mov r0, sp - ldrb r0, [r0] -_0801D554: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0801D564: .4byte gTypeEffectiveness -_0801D568: .4byte gBankTarget -_0801D56C: .4byte gBattleMons -_0801D570: .4byte gBattleMoves - thumb_func_end ai_rate_move - - thumb_func_start unref_sub_801D574 -unref_sub_801D574: @ 801D574 - push {r4,lr} - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF - ands r0, r1 - movs r1, 0x64 - subs r1, r0 - lsls r1, 16 - lsrs r1, 16 - ldr r4, _0801D5AC @ =gBattleMoveDamage - ldr r0, [r4] - cmp r0, 0 - beq _0801D5A6 - muls r0, r1 - str r0, [r4] - movs r1, 0x64 - bl __divsi3 - str r0, [r4] - cmp r0, 0 - bne _0801D5A6 - movs r0, 0x1 - str r0, [r4] -_0801D5A6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801D5AC: .4byte gBattleMoveDamage - thumb_func_end unref_sub_801D574 - - thumb_func_start atk07_dmg_adjustment -atk07_dmg_adjustment: @ 801D5B0 - push {r4-r7,lr} - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF - ands r0, r1 - movs r1, 0x64 - subs r1, r0 - lsls r1, 16 - lsrs r1, 16 - ldr r4, _0801D608 @ =gBattleMoveDamage - ldr r0, [r4] - cmp r0, 0 - beq _0801D5E2 - muls r0, r1 - str r0, [r4] - movs r1, 0x64 - bl __divsi3 - str r0, [r4] - cmp r0, 0 - bne _0801D5E2 - movs r0, 0x1 - str r0, [r4] -_0801D5E2: - ldr r7, _0801D60C @ =gBattleMons - ldr r6, _0801D610 @ =gBankTarget - ldrb r2, [r6] - movs r5, 0x58 - adds r0, r2, 0 - muls r0, r5 - adds r1, r0, r7 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _0801D618 - ldr r1, _0801D614 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r4, [r0, 0x7] - ldrb r6, [r0, 0x1A] - b _0801D632 - .align 2, 0 -_0801D608: .4byte gBattleMoveDamage -_0801D60C: .4byte gBattleMons -_0801D610: .4byte gBankTarget -_0801D614: .4byte gEnigmaBerries -_0801D618: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r6] - muls r0, r5 - adds r0, r7 - ldrh r0, [r0, 0x2E] - bl ItemId_GetHoldEffectParam - lsls r0, 24 - lsrs r6, r0, 24 -_0801D632: - ldr r1, _0801D6F4 @ =gStringBank - ldr r5, _0801D6F8 @ =gBankTarget - ldrb r0, [r5] - strb r0, [r1] - cmp r4, 0x27 - bne _0801D670 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r6 - bcs _0801D670 - ldrb r0, [r5] - movs r1, 0x27 - bl RecordItemBattle - ldr r2, _0801D6FC @ =gSpecialStatuses - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] -_0801D670: - ldr r2, _0801D700 @ =gBattleMons - ldr r3, _0801D6F8 @ =gBankTarget - ldrb r4, [r3] - movs r0, 0x58 - muls r0, r4 - adds r1, r2, 0 - adds r1, 0x50 - adds r0, r1 - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 17 - ands r1, r0 - adds r5, r2, 0 - cmp r1, 0 - bne _0801D740 - ldr r2, _0801D704 @ =gBattleMoves - ldr r0, _0801D708 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x65 - beq _0801D6C2 - ldr r0, _0801D70C @ =gProtectStructs - lsls r1, r4, 4 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 30 - cmp r0, 0 - blt _0801D6C2 - ldr r0, _0801D6FC @ =gSpecialStatuses - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsrs r0, 7 - cmp r0, 0 - beq _0801D740 -_0801D6C2: - ldrb r0, [r3] - movs r4, 0x58 - muls r0, r4 - adds r0, r5 - ldrh r1, [r0, 0x28] - ldr r2, _0801D710 @ =gBattleMoveDamage - ldr r0, [r2] - cmp r1, r0 - bgt _0801D740 - subs r0, r1, 0x1 - str r0, [r2] - ldr r1, _0801D70C @ =gProtectStructs - ldrb r3, [r3] - lsls r0, r3, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - cmp r0, 0 - bge _0801D718 - ldr r0, _0801D714 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _0801D740 - .align 2, 0 -_0801D6F4: .4byte gStringBank -_0801D6F8: .4byte gBankTarget -_0801D6FC: .4byte gSpecialStatuses -_0801D700: .4byte gBattleMons -_0801D704: .4byte gBattleMoves -_0801D708: .4byte gCurrentMove -_0801D70C: .4byte gProtectStructs -_0801D710: .4byte gBattleMoveDamage -_0801D714: .4byte gBattleMoveFlags -_0801D718: - ldr r0, _0801D750 @ =gSpecialStatuses - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsrs r0, 7 - cmp r0, 0 - beq _0801D740 - ldr r2, _0801D754 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0801D758 @ =gLastUsedItem - adds r0, r3, 0 - muls r0, r4 - adds r0, r5 - ldrh r0, [r0, 0x2E] - strh r0, [r1] -_0801D740: - ldr r1, _0801D75C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801D750: .4byte gSpecialStatuses -_0801D754: .4byte gBattleMoveFlags -_0801D758: .4byte gLastUsedItem -_0801D75C: .4byte gBattlescriptCurrInstr - thumb_func_end atk07_dmg_adjustment - - thumb_func_start atk08_dmg_adjustment2 -atk08_dmg_adjustment2: @ 801D760 - push {r4-r7,lr} - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF - ands r0, r1 - movs r1, 0x64 - subs r1, r0 - lsls r1, 16 - lsrs r1, 16 - ldr r4, _0801D7B8 @ =gBattleMoveDamage - ldr r0, [r4] - cmp r0, 0 - beq _0801D792 - muls r0, r1 - str r0, [r4] - movs r1, 0x64 - bl __divsi3 - str r0, [r4] - cmp r0, 0 - bne _0801D792 - movs r0, 0x1 - str r0, [r4] -_0801D792: - ldr r7, _0801D7BC @ =gBattleMons - ldr r6, _0801D7C0 @ =gBankTarget - ldrb r2, [r6] - movs r5, 0x58 - adds r0, r2, 0 - muls r0, r5 - adds r1, r0, r7 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _0801D7C8 - ldr r1, _0801D7C4 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r4, [r0, 0x7] - ldrb r6, [r0, 0x1A] - b _0801D7E2 - .align 2, 0 -_0801D7B8: .4byte gBattleMoveDamage -_0801D7BC: .4byte gBattleMons -_0801D7C0: .4byte gBankTarget -_0801D7C4: .4byte gEnigmaBerries -_0801D7C8: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r6] - muls r0, r5 - adds r0, r7 - ldrh r0, [r0, 0x2E] - bl ItemId_GetHoldEffectParam - lsls r0, 24 - lsrs r6, r0, 24 -_0801D7E2: - ldr r1, _0801D888 @ =gStringBank - ldr r5, _0801D88C @ =gBankTarget - ldrb r0, [r5] - strb r0, [r1] - cmp r4, 0x27 - bne _0801D820 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r6 - bcs _0801D820 - ldrb r0, [r5] - movs r1, 0x27 - bl RecordItemBattle - ldr r2, _0801D890 @ =gSpecialStatuses - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] -_0801D820: - ldr r4, _0801D894 @ =gBattleMons - ldr r6, _0801D88C @ =gBankTarget - ldrb r2, [r6] - movs r7, 0x58 - adds r3, r2, 0 - muls r3, r7 - adds r0, r4, 0 - adds r0, 0x50 - adds r0, r3, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 17 - ands r0, r1 - cmp r0, 0 - bne _0801D8CC - ldr r5, _0801D898 @ =gProtectStructs - lsls r0, r2, 4 - adds r0, r5 - ldrb r0, [r0] - lsls r0, 30 - cmp r0, 0 - blt _0801D85E - ldr r0, _0801D890 @ =gSpecialStatuses - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsrs r0, 7 - cmp r0, 0 - beq _0801D8CC -_0801D85E: - adds r0, r3, r4 - ldrh r1, [r0, 0x28] - ldr r2, _0801D89C @ =gBattleMoveDamage - ldr r0, [r2] - cmp r1, r0 - bgt _0801D8CC - subs r0, r1, 0x1 - str r0, [r2] - ldrb r3, [r6] - lsls r0, r3, 4 - adds r0, r5 - ldrb r0, [r0] - lsls r0, 30 - cmp r0, 0 - bge _0801D8A4 - ldr r0, _0801D8A0 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _0801D8CC - .align 2, 0 -_0801D888: .4byte gStringBank -_0801D88C: .4byte gBankTarget -_0801D890: .4byte gSpecialStatuses -_0801D894: .4byte gBattleMons -_0801D898: .4byte gProtectStructs -_0801D89C: .4byte gBattleMoveDamage -_0801D8A0: .4byte gBattleMoveFlags -_0801D8A4: - ldr r0, _0801D8DC @ =gSpecialStatuses - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsrs r0, 7 - cmp r0, 0 - beq _0801D8CC - ldr r2, _0801D8E0 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0801D8E4 @ =gLastUsedItem - adds r0, r3, 0 - muls r0, r7 - adds r0, r4 - ldrh r0, [r0, 0x2E] - strh r0, [r1] -_0801D8CC: - ldr r1, _0801D8E8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801D8DC: .4byte gSpecialStatuses -_0801D8E0: .4byte gBattleMoveFlags -_0801D8E4: .4byte gLastUsedItem -_0801D8E8: .4byte gBattlescriptCurrInstr - thumb_func_end atk08_dmg_adjustment2 - - thumb_func_start atk09_attackanimation -atk09_attackanimation: @ 801D8EC - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0xC - ldr r0, _0801D940 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _0801D900 - b _0801DA4A -_0801D900: - ldr r0, _0801D944 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - ldr r3, _0801D948 @ =gCurrentMove - cmp r0, 0 - beq _0801D960 - ldrh r0, [r3] - cmp r0, 0x90 - beq _0801D960 - cmp r0, 0xA4 - beq _0801D960 - ldr r4, _0801D94C @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801D950 @ =BattleScript_Pausex20 - str r0, [r4] - ldr r1, _0801D954 @ =0x02000000 - ldr r0, _0801D958 @ =0x00016002 - adds r2, r1, r0 - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - ldr r2, _0801D95C @ =0x000160a1 - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0801DA4A - .align 2, 0 -_0801D940: .4byte gBattleExecBuffer -_0801D944: .4byte gHitMarker -_0801D948: .4byte gCurrentMove -_0801D94C: .4byte gBattlescriptCurrInstr -_0801D950: .4byte BattleScript_Pausex20 -_0801D954: .4byte 0x02000000 -_0801D958: .4byte 0x00016002 -_0801D95C: .4byte 0x000160a1 -_0801D960: - ldr r2, _0801DA0C @ =gBattleMoves - ldrh r1, [r3] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x6] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _0801D986 - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _0801D986 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0801D992 -_0801D986: - ldr r0, _0801DA10 @ =0x02000000 - ldr r1, _0801DA14 @ =0x000160a1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0801DA00 -_0801D992: - ldr r0, _0801DA18 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0801DA3C - ldr r1, _0801DA1C @ =gActiveBank - ldr r2, _0801DA20 @ =gBankAttacker - mov r9, r2 - ldrb r0, [r2] - strb r0, [r1] - ldrh r1, [r3] - ldr r6, _0801DA10 @ =0x02000000 - ldr r0, _0801DA24 @ =0x00016002 - adds r0, r6 - mov r8, r0 - ldrb r2, [r0] - ldr r0, _0801DA28 @ =gBattleMovePower - ldrh r3, [r0] - ldr r0, _0801DA2C @ =gBattleMoveDamage - ldr r0, [r0] - str r0, [sp] - ldr r5, _0801DA30 @ =gBattleMons - mov r0, r9 - ldrb r4, [r0] - movs r0, 0x58 - muls r0, r4 - adds r0, r5 - adds r0, 0x2B - ldrb r0, [r0] - str r0, [sp, 0x4] - mov r0, r9 - ldrb r4, [r0] - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - ldr r4, _0801DA34 @ =gDisableStructs - adds r0, r4 - str r0, [sp, 0x8] - movs r0, 0 - bl EmitMoveAnimation - mov r1, r8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r2, _0801DA14 @ =0x000160a1 - adds r6, r2 - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - mov r1, r9 - ldrb r0, [r1] - bl MarkBufferBankForExecution -_0801DA00: - ldr r1, _0801DA38 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - b _0801DA4A - .align 2, 0 -_0801DA0C: .4byte gBattleMoves -_0801DA10: .4byte 0x02000000 -_0801DA14: .4byte 0x000160a1 -_0801DA18: .4byte gBattleMoveFlags -_0801DA1C: .4byte gActiveBank -_0801DA20: .4byte gBankAttacker -_0801DA24: .4byte 0x00016002 -_0801DA28: .4byte gBattleMovePower -_0801DA2C: .4byte gBattleMoveDamage -_0801DA30: .4byte gBattleMons -_0801DA34: .4byte gDisableStructs -_0801DA38: .4byte gBattlescriptCurrInstr -_0801DA3C: - ldr r4, _0801DA58 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801DA5C @ =BattleScript_Pausex20 - str r0, [r4] -_0801DA4A: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0801DA58: .4byte gBattlescriptCurrInstr -_0801DA5C: .4byte BattleScript_Pausex20 - thumb_func_end atk09_attackanimation - - thumb_func_start atk0A_waitanimation -atk0A_waitanimation: @ 801DA60 - push {lr} - ldr r0, _0801DA78 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0801DA72 - ldr r1, _0801DA7C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_0801DA72: - pop {r0} - bx r0 - .align 2, 0 -_0801DA78: .4byte gBattleExecBuffer -_0801DA7C: .4byte gBattlescriptCurrInstr - thumb_func_end atk0A_waitanimation - - thumb_func_start atk0B_healthbarupdate -atk0B_healthbarupdate: @ 801DA80 - push {r4,r5,lr} - ldr r0, _0801DAE4 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0801DB36 - ldr r0, _0801DAE8 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0801DB2E - ldr r0, _0801DAEC @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r2, _0801DAF0 @ =gActiveBank - strb r0, [r2] - ldr r1, _0801DAF4 @ =gBattleMons - ldrb r2, [r2] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 17 - ands r0, r1 - cmp r0, 0 - beq _0801DB00 - ldr r0, _0801DAF8 @ =gDisableStructs - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - cmp r0, 0 - beq _0801DB00 - ldr r0, _0801DAFC @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 1 - ands r0, r1 - cmp r0, 0 - bne _0801DB00 - movs r0, 0x80 - adds r1, r2, 0 - bl PrepareStringBattle - b _0801DB2E - .align 2, 0 -_0801DAE4: .4byte gBattleExecBuffer -_0801DAE8: .4byte gBattleMoveFlags -_0801DAEC: .4byte gBattlescriptCurrInstr -_0801DAF0: .4byte gActiveBank -_0801DAF4: .4byte gBattleMons -_0801DAF8: .4byte gDisableStructs -_0801DAFC: .4byte gHitMarker -_0801DB00: - ldr r5, _0801DB3C @ =gBattleMoveDamage - ldrh r1, [r5] - movs r0, 0 - bl EmitHealthBarUpdate - ldr r4, _0801DB40 @ =gActiveBank - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0801DB2E - ldr r0, [r5] - cmp r0, 0 - ble _0801DB2E - ldr r0, _0801DB44 @ =gBattleResults - ldrb r1, [r0, 0x5] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0, 0x5] -_0801DB2E: - ldr r1, _0801DB48 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_0801DB36: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801DB3C: .4byte gBattleMoveDamage -_0801DB40: .4byte gActiveBank -_0801DB44: .4byte gBattleResults -_0801DB48: .4byte gBattlescriptCurrInstr - thumb_func_end atk0B_healthbarupdate - - thumb_func_start atk0C_datahpupdate -atk0C_datahpupdate: @ 801DB4C - push {r4-r7,lr} - sub sp, 0x4 - ldr r0, _0801DB74 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _0801DB5A - b _0801DF2E -_0801DB5A: - ldr r0, _0801DB78 @ =0x02000000 - ldr r1, _0801DB7C @ =0x0001601c - adds r0, r1 - ldrb r1, [r0] - cmp r1, 0 - beq _0801DB80 - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0801DB80 - movs r6, 0x3F - ands r6, r1 - b _0801DB90 - .align 2, 0 -_0801DB74: .4byte gBattleExecBuffer -_0801DB78: .4byte 0x02000000 -_0801DB7C: .4byte 0x0001601c -_0801DB80: - ldr r2, _0801DC1C @ =gBattleMoves - ldr r0, _0801DC20 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r6, [r0, 0x2] -_0801DB90: - ldr r0, _0801DC24 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _0801DB9E - b _0801DF00 -_0801DB9E: - ldr r0, _0801DC28 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r7, _0801DC2C @ =gActiveBank - strb r0, [r7] - ldr r1, _0801DC30 @ =gBattleMons - ldrb r2, [r7] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 17 - ands r0, r1 - cmp r0, 0 - beq _0801DCB4 - ldr r0, _0801DC34 @ =gDisableStructs - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r4, r1, r0 - ldrb r1, [r4, 0xA] - mov r12, r0 - cmp r1, 0 - beq _0801DCB4 - ldr r0, _0801DC38 @ =gHitMarker - ldr r3, [r0] - movs r0, 0x80 - lsls r0, 1 - ands r3, r0 - cmp r3, 0 - bne _0801DCB4 - adds r5, r1, 0 - ldr r6, _0801DC3C @ =gBattleMoveDamage - ldr r4, [r6] - cmp r5, r4 - blt _0801DC48 - ldr r0, _0801DC40 @ =gSpecialStatuses - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 2 - adds r0, 0x4 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - bne _0801DC02 - str r4, [r1] -_0801DC02: - ldrb r0, [r7] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - add r1, r12 - ldr r2, [r6] - ldrb r0, [r1, 0xA] - subs r0, r2 - strb r0, [r1, 0xA] - ldr r1, _0801DC44 @ =gHP_dealt - ldr r0, [r6] - str r0, [r1] - b _0801DC78 - .align 2, 0 -_0801DC1C: .4byte gBattleMoves -_0801DC20: .4byte gCurrentMove -_0801DC24: .4byte gBattleMoveFlags -_0801DC28: .4byte gBattlescriptCurrInstr -_0801DC2C: .4byte gActiveBank -_0801DC30: .4byte gBattleMons -_0801DC34: .4byte gDisableStructs -_0801DC38: .4byte gHitMarker -_0801DC3C: .4byte gBattleMoveDamage -_0801DC40: .4byte gSpecialStatuses -_0801DC44: .4byte gHP_dealt -_0801DC48: - ldr r0, _0801DCA0 @ =gSpecialStatuses - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 2 - adds r0, 0x4 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - bne _0801DC5C - str r5, [r1] -_0801DC5C: - ldr r2, _0801DCA4 @ =gHP_dealt - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r12 - ldrb r0, [r0, 0xA] - str r0, [r2] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r12 - strb r3, [r0, 0xA] -_0801DC78: - ldr r0, _0801DCA8 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r12 - ldrb r0, [r0, 0xA] - cmp r0, 0 - beq _0801DC8C - b _0801DF26 -_0801DC8C: - ldr r4, _0801DCAC @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] - bl b_movescr_stack_push_cursor - ldr r0, _0801DCB0 @ =BattleScript_SubstituteFade - str r0, [r4] - b _0801DF2E - .align 2, 0 -_0801DCA0: .4byte gSpecialStatuses -_0801DCA4: .4byte gHP_dealt -_0801DCA8: .4byte gActiveBank -_0801DCAC: .4byte gBattlescriptCurrInstr -_0801DCB0: .4byte BattleScript_SubstituteFade -_0801DCB4: - ldr r0, _0801DCF4 @ =gHitMarker - ldr r2, [r0] - ldr r1, _0801DCF8 @ =0xfffffeff - ands r2, r1 - str r2, [r0] - ldr r1, _0801DCFC @ =gBattleMoveDamage - ldr r5, [r1] - mov r12, r0 - adds r7, r1, 0 - cmp r5, 0 - bge _0801DD08 - ldr r4, _0801DD00 @ =gBattleMons - ldr r2, _0801DD04 @ =gActiveBank - ldrb r0, [r2] - movs r3, 0x58 - adds r1, r0, 0 - muls r1, r3 - adds r1, r4 - ldrh r0, [r1, 0x28] - subs r0, r5 - strh r0, [r1, 0x28] - ldrb r0, [r2] - muls r0, r3 - adds r1, r0, r4 - ldrh r3, [r1, 0x2C] - ldrh r0, [r1, 0x28] - adds r5, r2, 0 - cmp r0, r3 - bhi _0801DCF0 - b _0801DEC6 -_0801DCF0: - strh r3, [r1, 0x28] - b _0801DEC6 - .align 2, 0 -_0801DCF4: .4byte gHitMarker -_0801DCF8: .4byte 0xfffffeff -_0801DCFC: .4byte gBattleMoveDamage -_0801DD00: .4byte gBattleMons -_0801DD04: .4byte gActiveBank -_0801DD08: - movs r0, 0x20 - ands r0, r2 - cmp r0, 0 - beq _0801DD24 - movs r0, 0x21 - negs r0, r0 - ands r2, r0 - mov r0, r12 - str r2, [r0] - ldr r5, _0801DD20 @ =gActiveBank - b _0801DD6C - .align 2, 0 -_0801DD20: .4byte gActiveBank -_0801DD24: - ldr r0, _0801DD4C @ =gTakenDmg - ldr r2, _0801DD50 @ =gActiveBank - ldrb r1, [r2] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - adds r0, r5 - str r0, [r1] - ldr r0, _0801DD54 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - adds r5, r2, 0 - cmp r0, 0 - bne _0801DD60 - ldr r1, _0801DD58 @ =gTakenDmgBanks - ldrb r0, [r5] - adds r0, r1 - ldr r1, _0801DD5C @ =gBankAttacker - b _0801DD68 - .align 2, 0 -_0801DD4C: .4byte gTakenDmg -_0801DD50: .4byte gActiveBank -_0801DD54: .4byte gBattlescriptCurrInstr -_0801DD58: .4byte gTakenDmgBanks -_0801DD5C: .4byte gBankAttacker -_0801DD60: - ldr r1, _0801DD8C @ =gTakenDmgBanks - ldrb r0, [r5] - adds r0, r1 - ldr r1, _0801DD90 @ =gBankTarget -_0801DD68: - ldrb r1, [r1] - strb r1, [r0] -_0801DD6C: - ldr r4, _0801DD94 @ =gBattleMons - ldrb r0, [r5] - movs r3, 0x58 - muls r0, r3 - adds r2, r0, r4 - ldrh r0, [r2, 0x28] - ldr r1, [r7] - cmp r0, r1 - ble _0801DD9C - subs r0, r1 - strh r0, [r2, 0x28] - ldr r0, _0801DD98 @ =gHP_dealt - str r1, [r0] - adds r7, r0, 0 - b _0801DDAC - .align 2, 0 -_0801DD8C: .4byte gTakenDmgBanks -_0801DD90: .4byte gBankTarget -_0801DD94: .4byte gBattleMons -_0801DD98: .4byte gHP_dealt -_0801DD9C: - ldr r2, _0801DE20 @ =gHP_dealt - str r0, [r2] - ldrb r0, [r5] - muls r0, r3 - adds r0, r4 - movs r1, 0 - strh r1, [r0, 0x28] - adds r7, r2, 0 -_0801DDAC: - ldr r2, _0801DE24 @ =gSpecialStatuses - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r1, r2, 0x4 - adds r3, r0, r1 - ldr r0, [r3] - adds r4, r2, 0 - cmp r0, 0 - bne _0801DDD4 - mov r1, r12 - ldr r0, [r1] - movs r1, 0x80 - lsls r1, 13 - ands r0, r1 - cmp r0, 0 - bne _0801DDD4 - ldr r0, [r7] - str r0, [r3] -_0801DDD4: - cmp r6, 0x8 - bhi _0801DE5C - mov r1, r12 - ldr r0, [r1] - movs r1, 0x80 - lsls r1, 13 - ands r0, r1 - cmp r0, 0 - bne _0801DE58 - ldr r0, _0801DE28 @ =gCurrentMove - ldrh r0, [r0] - cmp r0, 0xDC - beq _0801DE58 - ldr r3, _0801DE2C @ =gProtectStructs - ldrb r0, [r5] - lsls r0, 4 - adds r1, r3, 0x4 - adds r0, r1 - ldr r2, [r7] - str r2, [r0] - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0x8 - adds r0, r1 - str r2, [r0] - ldr r0, _0801DE30 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r0, 0 - bne _0801DE38 - ldrb r0, [r5] - lsls r0, 4 - adds r0, r3 - ldr r2, _0801DE34 @ =gBankAttacker - b _0801DE40 - .align 2, 0 -_0801DE20: .4byte gHP_dealt -_0801DE24: .4byte gSpecialStatuses -_0801DE28: .4byte gCurrentMove -_0801DE2C: .4byte gProtectStructs -_0801DE30: .4byte gBattlescriptCurrInstr -_0801DE34: .4byte gBankAttacker -_0801DE38: - ldrb r0, [r5] - lsls r0, 4 - adds r0, r3 - ldr r2, _0801DE54 @ =gBankTarget -_0801DE40: - ldrb r1, [r2] - strb r1, [r0, 0xC] - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r2] - strb r1, [r0, 0x10] - b _0801DEC6 - .align 2, 0 -_0801DE54: .4byte gBankTarget -_0801DE58: - cmp r6, 0x8 - bls _0801DEC6 -_0801DE5C: - mov r1, r12 - ldr r0, [r1] - movs r1, 0x80 - lsls r1, 13 - ands r0, r1 - cmp r0, 0 - bne _0801DEC6 - ldr r3, _0801DEA0 @ =gProtectStructs - ldrb r0, [r5] - lsls r0, 4 - adds r1, r3, 0 - adds r1, 0x8 - adds r0, r1 - ldr r2, [r7] - str r2, [r0] - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0xC - adds r0, r1 - str r2, [r0] - ldr r0, _0801DEA4 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r0, 0 - bne _0801DEAC - ldrb r0, [r5] - lsls r0, 4 - adds r0, r3 - ldr r2, _0801DEA8 @ =gBankAttacker - b _0801DEB4 - .align 2, 0 -_0801DEA0: .4byte gProtectStructs -_0801DEA4: .4byte gBattlescriptCurrInstr -_0801DEA8: .4byte gBankAttacker -_0801DEAC: - ldrb r0, [r5] - lsls r0, 4 - adds r0, r3 - ldr r2, _0801DEF4 @ =gBankTarget -_0801DEB4: - ldrb r1, [r2] - strb r1, [r0, 0xD] - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r2] - strb r1, [r0, 0x11] -_0801DEC6: - mov r1, r12 - ldr r0, [r1] - ldr r1, _0801DEF8 @ =0xffefffff - ands r0, r1 - mov r1, r12 - str r0, [r1] - ldrb r1, [r5] - movs r0, 0x58 - muls r0, r1 - ldr r1, _0801DEFC @ =gUnknown_02024AA8 - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x2A - movs r2, 0 - movs r3, 0x2 - bl EmitSetAttributes - ldrb r0, [r5] - bl MarkBufferBankForExecution - b _0801DF26 - .align 2, 0 -_0801DEF4: .4byte gBankTarget -_0801DEF8: .4byte 0xffefffff -_0801DEFC: .4byte gUnknown_02024AA8 -_0801DF00: - ldr r0, _0801DF38 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r1, _0801DF3C @ =gActiveBank - strb r0, [r1] - ldr r2, _0801DF40 @ =gSpecialStatuses - ldrb r1, [r1] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, 0x4 - adds r1, r0, r2 - ldr r0, [r1] - cmp r0, 0 - bne _0801DF26 - ldr r0, _0801DF44 @ =0x0000ffff - str r0, [r1] -_0801DF26: - ldr r1, _0801DF38 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_0801DF2E: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801DF38: .4byte gBattlescriptCurrInstr -_0801DF3C: .4byte gActiveBank -_0801DF40: .4byte gSpecialStatuses -_0801DF44: .4byte 0x0000ffff - thumb_func_end atk0C_datahpupdate - - thumb_func_start atk0D_critmessage -atk0D_critmessage: @ 801DF48 - push {lr} - ldr r0, _0801DF84 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0801DF7E - ldr r0, _0801DF88 @ =gCritMultiplier - ldrb r0, [r0] - cmp r0, 0x2 - bne _0801DF76 - ldr r0, _0801DF8C @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0801DF76 - ldr r0, _0801DF90 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0xD9 - bl PrepareStringBattle - ldr r1, _0801DF94 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x7] -_0801DF76: - ldr r1, _0801DF98 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_0801DF7E: - pop {r0} - bx r0 - .align 2, 0 -_0801DF84: .4byte gBattleExecBuffer -_0801DF88: .4byte gCritMultiplier -_0801DF8C: .4byte gBattleMoveFlags -_0801DF90: .4byte gBankAttacker -_0801DF94: .4byte gBattleCommunication -_0801DF98: .4byte gBattlescriptCurrInstr - thumb_func_end atk0D_critmessage - - thumb_func_start atk0E_effectiveness_sound -atk0E_effectiveness_sound: @ 801DF9C - push {r4,lr} - ldr r0, _0801DFD4 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0801E05C - ldr r4, _0801DFD8 @ =gActiveBank - ldr r0, _0801DFDC @ =gBankTarget - ldrb r0, [r0] - strb r0, [r4] - ldr r1, _0801DFE0 @ =gBattleMoveFlags - ldrb r2, [r1] - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - bne _0801E054 - movs r0, 0xFE - ands r0, r2 - cmp r0, 0x10 - beq _0801E00E - cmp r0, 0x10 - bgt _0801DFEA - cmp r0, 0x4 - beq _0801DFFE - cmp r0, 0x4 - bgt _0801DFE4 - cmp r0, 0x2 - beq _0801DFF8 - b _0801E00E - .align 2, 0 -_0801DFD4: .4byte gBattleExecBuffer -_0801DFD8: .4byte gActiveBank -_0801DFDC: .4byte gBankTarget -_0801DFE0: .4byte gBattleMoveFlags -_0801DFE4: - cmp r0, 0x8 - beq _0801E054 - b _0801E00E -_0801DFEA: - cmp r0, 0x40 - beq _0801E00E - cmp r0, 0x40 - bgt _0801E00E - cmp r0, 0x20 - beq _0801E054 - b _0801E00E -_0801DFF8: - movs r0, 0 - movs r1, 0xE - b _0801E002 -_0801DFFE: - movs r0, 0 - movs r1, 0xC -_0801E002: - bl EmitEffectivenessSound - ldrb r0, [r4] - bl MarkBufferBankForExecution - b _0801E054 -_0801E00E: - ldrb r1, [r1] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0801E01E - movs r0, 0 - movs r1, 0xE - b _0801E02A -_0801E01E: - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0801E03C - movs r0, 0 - movs r1, 0xC -_0801E02A: - bl EmitEffectivenessSound - ldr r0, _0801E038 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - b _0801E054 - .align 2, 0 -_0801E038: .4byte gActiveBank -_0801E03C: - movs r0, 0x28 - ands r0, r1 - cmp r0, 0 - bne _0801E054 - movs r0, 0 - movs r1, 0xD - bl EmitEffectivenessSound - ldr r0, _0801E064 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution -_0801E054: - ldr r1, _0801E068 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_0801E05C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801E064: .4byte gActiveBank -_0801E068: .4byte gBattlescriptCurrInstr - thumb_func_end atk0E_effectiveness_sound - - thumb_func_start atk0F_resultmessage -atk0F_resultmessage: @ 801E06C - push {r4-r7,lr} - movs r3, 0 - ldr r0, _0801E0A8 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _0801E07A - b _0801E20C -_0801E07A: - ldr r1, _0801E0AC @ =gBattleMoveFlags - ldrb r2, [r1] - movs r4, 0x1 - adds r0, r4, 0 - ands r0, r2 - adds r6, r1, 0 - ldr r7, _0801E0B0 @ =gBattleCommunication - cmp r0, 0 - beq _0801E0B8 - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - beq _0801E09A - ldrb r0, [r7, 0x6] - cmp r0, 0x2 - bls _0801E0B8 -_0801E09A: - ldr r1, _0801E0B4 @ =gMissStrings - ldrb r0, [r7, 0x6] - lsls r0, 1 - adds r0, r1 - ldrh r3, [r0] - strb r4, [r7, 0x7] - b _0801E1F6 - .align 2, 0 -_0801E0A8: .4byte gBattleExecBuffer -_0801E0AC: .4byte gBattleMoveFlags -_0801E0B0: .4byte gBattleCommunication -_0801E0B4: .4byte gMissStrings -_0801E0B8: - movs r0, 0x1 - strb r0, [r7, 0x7] - ldrb r5, [r6] - movs r0, 0xFE - ands r0, r5 - cmp r0, 0x10 - beq _0801E0FC - cmp r0, 0x10 - bgt _0801E0DE - cmp r0, 0x4 - beq _0801E0F8 - cmp r0, 0x4 - bgt _0801E0D8 - cmp r0, 0x2 - beq _0801E0F4 - b _0801E144 -_0801E0D8: - cmp r0, 0x8 - beq _0801E150 - b _0801E144 -_0801E0DE: - cmp r0, 0x40 - beq _0801E100 - cmp r0, 0x40 - bgt _0801E0EE - cmp r0, 0x20 - bne _0801E0EC - b _0801E1F0 -_0801E0EC: - b _0801E144 -_0801E0EE: - cmp r0, 0x80 - beq _0801E104 - b _0801E144 -_0801E0F4: - movs r3, 0xDE - b _0801E1FA -_0801E0F8: - movs r3, 0xDD - b _0801E1FA -_0801E0FC: - movs r3, 0xDA - b _0801E1FA -_0801E100: - movs r3, 0x99 - b _0801E1FA -_0801E104: - ldr r4, _0801E12C @ =gLastUsedItem - ldr r2, _0801E130 @ =gBattleMons - ldr r3, _0801E134 @ =gBankTarget - ldrb r1, [r3] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0, 0x2E] - strh r0, [r4] - ldr r1, _0801E138 @ =gStringBank - ldrb r0, [r3] - strb r0, [r1] - movs r0, 0x3F - ands r0, r5 - strb r0, [r6] - bl b_movescr_stack_push_cursor - ldr r1, _0801E13C @ =gBattlescriptCurrInstr - ldr r0, _0801E140 @ =BattleScript_HangedOnMsg - b _0801E20A - .align 2, 0 -_0801E12C: .4byte gLastUsedItem -_0801E130: .4byte gBattleMons -_0801E134: .4byte gBankTarget -_0801E138: .4byte gStringBank -_0801E13C: .4byte gBattlescriptCurrInstr -_0801E140: .4byte BattleScript_HangedOnMsg -_0801E144: - adds r2, r6, 0 - ldrb r5, [r2] - movs r0, 0x8 - ands r0, r5 - cmp r0, 0 - beq _0801E154 -_0801E150: - movs r3, 0x1B - b _0801E1FA -_0801E154: - movs r0, 0x10 - ands r0, r5 - cmp r0, 0 - beq _0801E17C - movs r0, 0xEF - ands r0, r5 - movs r1, 0xFD - ands r0, r1 - movs r1, 0xFB - ands r0, r1 - strb r0, [r2] - bl b_movescr_stack_push_cursor - ldr r1, _0801E174 @ =gBattlescriptCurrInstr - ldr r0, _0801E178 @ =BattleScript_OneHitKOMsg - b _0801E20A - .align 2, 0 -_0801E174: .4byte gBattlescriptCurrInstr -_0801E178: .4byte BattleScript_OneHitKOMsg -_0801E17C: - movs r0, 0x40 - ands r0, r5 - cmp r0, 0 - beq _0801E19C - movs r0, 0x3F - ands r0, r5 - strb r0, [r2] - bl b_movescr_stack_push_cursor - ldr r1, _0801E194 @ =gBattlescriptCurrInstr - ldr r0, _0801E198 @ =BattleScript_EnduredMsg - b _0801E20A - .align 2, 0 -_0801E194: .4byte gBattlescriptCurrInstr -_0801E198: .4byte BattleScript_EnduredMsg -_0801E19C: - movs r0, 0x80 - ands r0, r5 - cmp r0, 0 - beq _0801E1E4 - ldr r4, _0801E1CC @ =gLastUsedItem - ldr r2, _0801E1D0 @ =gBattleMons - ldr r3, _0801E1D4 @ =gBankTarget - ldrb r1, [r3] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0, 0x2E] - strh r0, [r4] - ldr r1, _0801E1D8 @ =gStringBank - ldrb r0, [r3] - strb r0, [r1] - movs r0, 0x3F - ands r0, r5 - strb r0, [r6] - bl b_movescr_stack_push_cursor - ldr r1, _0801E1DC @ =gBattlescriptCurrInstr - ldr r0, _0801E1E0 @ =BattleScript_HangedOnMsg - b _0801E20A - .align 2, 0 -_0801E1CC: .4byte gLastUsedItem -_0801E1D0: .4byte gBattleMons -_0801E1D4: .4byte gBankTarget -_0801E1D8: .4byte gStringBank -_0801E1DC: .4byte gBattlescriptCurrInstr -_0801E1E0: .4byte BattleScript_HangedOnMsg -_0801E1E4: - movs r0, 0x20 - ands r0, r5 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0801E1F4 -_0801E1F0: - movs r3, 0xE5 - b _0801E1FA -_0801E1F4: - strb r0, [r7, 0x7] -_0801E1F6: - cmp r3, 0 - beq _0801E204 -_0801E1FA: - adds r0, r3, 0 - ldr r1, _0801E214 @ =gBankAttacker - ldrb r1, [r1] - bl PrepareStringBattle -_0801E204: - ldr r1, _0801E218 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 -_0801E20A: - str r0, [r1] -_0801E20C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801E214: .4byte gBankAttacker -_0801E218: .4byte gBattlescriptCurrInstr - thumb_func_end atk0F_resultmessage - - thumb_func_start atk10_printstring -atk10_printstring: @ 801E21C - push {r4,lr} - ldr r0, _0801E24C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0801E246 - ldr r4, _0801E250 @ =gBattlescriptCurrInstr - ldr r1, [r4] - ldrb r0, [r1, 0x1] - ldrb r1, [r1, 0x2] - lsls r1, 8 - orrs r0, r1 - ldr r1, _0801E254 @ =gBankAttacker - ldrb r1, [r1] - bl PrepareStringBattle - ldr r0, [r4] - adds r0, 0x3 - str r0, [r4] - ldr r1, _0801E258 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x7] -_0801E246: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801E24C: .4byte gBattleExecBuffer -_0801E250: .4byte gBattlescriptCurrInstr -_0801E254: .4byte gBankAttacker -_0801E258: .4byte gBattleCommunication - thumb_func_end atk10_printstring - - thumb_func_start atk11_printstring_playeronly -atk11_printstring_playeronly: @ 801E25C - push {r4,r5,lr} - ldr r5, _0801E290 @ =gActiveBank - ldr r0, _0801E294 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r5] - ldr r4, _0801E298 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r1, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r1, r0 - movs r0, 0 - bl EmitPrintStringPlayerOnly - ldrb r0, [r5] - bl MarkBufferBankForExecution - ldr r0, [r4] - adds r0, 0x3 - str r0, [r4] - ldr r1, _0801E29C @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x7] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801E290: .4byte gActiveBank -_0801E294: .4byte gBankAttacker -_0801E298: .4byte gBattlescriptCurrInstr -_0801E29C: .4byte gBattleCommunication - thumb_func_end atk11_printstring_playeronly - - thumb_func_start atk12_waitmessage -atk12_waitmessage: @ 801E2A0 - push {r4-r6,lr} - ldr r0, _0801E2BC @ =gBattleExecBuffer - ldr r4, [r0] - cmp r4, 0 - bne _0801E2EE - ldr r6, _0801E2C0 @ =gBattleCommunication - ldrb r0, [r6, 0x7] - cmp r0, 0 - bne _0801E2C8 - ldr r1, _0801E2C4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x3 - str r0, [r1] - b _0801E2EE - .align 2, 0 -_0801E2BC: .4byte gBattleExecBuffer -_0801E2C0: .4byte gBattleCommunication -_0801E2C4: .4byte gBattlescriptCurrInstr -_0801E2C8: - ldr r5, _0801E2F4 @ =gBattlescriptCurrInstr - ldr r2, [r5] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldr r3, _0801E2F8 @ =gPauseCounterBattle - ldrh r0, [r3] - adds r0, 0x1 - strh r0, [r3] - lsls r0, 16 - lsrs r0, 16 - cmp r0, r1 - bcc _0801E2EE - movs r1, 0 - strh r4, [r3] - adds r0, r2, 0x3 - str r0, [r5] - strb r1, [r6, 0x7] -_0801E2EE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0801E2F4: .4byte gBattlescriptCurrInstr -_0801E2F8: .4byte gPauseCounterBattle - thumb_func_end atk12_waitmessage - - thumb_func_start atk13_printfromtable -atk13_printfromtable: @ 801E2FC - push {r4,r5,lr} - ldr r0, _0801E340 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0801E33A - ldr r4, _0801E344 @ =gBattlescriptCurrInstr - ldr r2, [r4] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - ldr r5, _0801E348 @ =gBattleCommunication - ldrb r0, [r5, 0x5] - lsls r0, 1 - adds r1, r0 - ldrh r0, [r1] - ldr r1, _0801E34C @ =gBankAttacker - ldrb r1, [r1] - bl PrepareStringBattle - ldr r0, [r4] - adds r0, 0x5 - str r0, [r4] - movs r0, 0x1 - strb r0, [r5, 0x7] -_0801E33A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801E340: .4byte gBattleExecBuffer -_0801E344: .4byte gBattlescriptCurrInstr -_0801E348: .4byte gBattleCommunication -_0801E34C: .4byte gBankAttacker - thumb_func_end atk13_printfromtable - - thumb_func_start atk14_printfromtable_playeronly -atk14_printfromtable_playeronly: @ 801E350 - push {r4-r6,lr} - ldr r0, _0801E3A0 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0801E39A - ldr r5, _0801E3A4 @ =gBattlescriptCurrInstr - ldr r2, [r5] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - ldr r6, _0801E3A8 @ =gBattleCommunication - ldrb r0, [r6, 0x5] - lsls r0, 1 - adds r1, r0 - ldr r4, _0801E3AC @ =gActiveBank - ldr r0, _0801E3B0 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r4] - ldrh r1, [r1] - movs r0, 0 - bl EmitPrintStringPlayerOnly - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, [r5] - adds r0, 0x5 - str r0, [r5] - movs r0, 0x1 - strb r0, [r6, 0x7] -_0801E39A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0801E3A0: .4byte gBattleExecBuffer -_0801E3A4: .4byte gBattlescriptCurrInstr -_0801E3A8: .4byte gBattleCommunication -_0801E3AC: .4byte gActiveBank -_0801E3B0: .4byte gBankAttacker - thumb_func_end atk14_printfromtable_playeronly - - thumb_func_start sub_801E3B4 -sub_801E3B4: @ 801E3B4 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - movs r1, 0 - ldr r0, _0801E3E4 @ =gNoOfAllBanks - ldrb r3, [r0] - cmp r1, r3 - bge _0801E3DA - ldr r4, _0801E3E8 @ =gTurnOrder - ldrb r0, [r4] - cmp r0, r2 - beq _0801E3DA -_0801E3CC: - adds r1, 0x1 - cmp r1, r3 - bge _0801E3DA - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, r2 - bne _0801E3CC -_0801E3DA: - lsls r0, r1, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0801E3E4: .4byte gNoOfAllBanks -_0801E3E8: .4byte gTurnOrder - thumb_func_end sub_801E3B4 - - thumb_func_start sub_801E3EC -sub_801E3EC: @ 801E3EC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - movs r0, 0 - mov r10, r0 - movs r6, 0 - movs r1, 0x1 - str r1, [sp, 0x4] - ldr r1, _0801E430 @ =gBattleCommunication - ldrb r3, [r1, 0x3] - movs r0, 0x40 - ands r0, r3 - adds r7, r1, 0 - cmp r0, 0 - beq _0801E444 - ldr r2, _0801E434 @ =gEffectBank - ldr r0, _0801E438 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r2] - movs r0, 0xBF - ands r0, r3 - strb r0, [r7, 0x3] - movs r6, 0x40 - ldr r0, _0801E43C @ =0x02000000 - ldr r1, _0801E440 @ =gBankTarget - b _0801E450 - .align 2, 0 -_0801E430: .4byte gBattleCommunication -_0801E434: .4byte gEffectBank -_0801E438: .4byte gBankAttacker -_0801E43C: .4byte 0x02000000 -_0801E440: .4byte gBankTarget -_0801E444: - ldr r2, _0801E538 @ =gEffectBank - ldr r0, _0801E53C @ =gBankTarget - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _0801E540 @ =0x02000000 - ldr r1, _0801E544 @ =gBankAttacker -_0801E450: - ldrb r1, [r1] - ldr r3, _0801E548 @ =0x00016003 - adds r0, r3 - strb r1, [r0] - mov r8, r2 - ldr r2, _0801E54C @ =gBattleMons - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x13 - bne _0801E48A - ldr r0, _0801E550 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 6 - ands r0, r1 - cmp r0, 0 - bne _0801E48A - cmp r4, 0 - bne _0801E48A - ldrb r0, [r7, 0x3] - cmp r0, 0x9 - bhi _0801E48A - bl _0801F5DC -_0801E48A: - mov r1, r8 - ldrb r0, [r1] - bl GetBankIdentity - ldr r2, _0801E554 @ =gSideAffecting - movs r1, 0x1 - ands r1, r0 - lsls r1, 1 - adds r1, r2 - ldrh r1, [r1] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0801E4C4 - ldr r0, _0801E550 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 6 - ands r0, r1 - cmp r0, 0 - bne _0801E4C4 - cmp r4, 0 - bne _0801E4C4 - ldr r0, _0801E558 @ =gBattleCommunication - ldrb r0, [r0, 0x3] - cmp r0, 0x7 - bhi _0801E4C4 - bl _0801F5DC -_0801E4C4: - ldr r3, _0801E54C @ =gBattleMons - ldr r2, _0801E538 @ =gEffectBank - ldrb r1, [r2] - movs r0, 0x58 - muls r0, r1 - adds r0, r3 - ldrh r0, [r0, 0x28] - mov r8, r2 - mov r9, r3 - cmp r0, 0 - bne _0801E4EA - ldr r0, _0801E558 @ =gBattleCommunication - ldrb r0, [r0, 0x3] - cmp r0, 0xB - beq _0801E4EA - cmp r0, 0x1F - beq _0801E4EA - bl _0801F5DC -_0801E4EA: - mov r2, r8 - ldrb r1, [r2] - movs r0, 0x58 - muls r0, r1 - mov r1, r9 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 17 - ands r0, r1 - cmp r0, 0 - beq _0801E50C - cmp r6, 0x40 - beq _0801E50C - bl _0801F5DC -_0801E50C: - ldr r0, _0801E558 @ =gBattleCommunication - ldrb r1, [r0, 0x3] - adds r7, r0, 0 - cmp r1, 0x6 - bls _0801E518 - b _0801EB4A -_0801E518: - ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects - ldrb r0, [r7, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x10 - bne _0801E528 - b _0801E714 -_0801E528: - cmp r0, 0x10 - bhi _0801E560 - cmp r0, 0x7 - beq _0801E57A - cmp r0, 0x8 - bne _0801E536 - b _0801E630 -_0801E536: - b _0801EA14 - .align 2, 0 -_0801E538: .4byte gEffectBank -_0801E53C: .4byte gBankTarget -_0801E540: .4byte 0x02000000 -_0801E544: .4byte gBankAttacker -_0801E548: .4byte 0x00016003 -_0801E54C: .4byte gBattleMons -_0801E550: .4byte gHitMarker -_0801E554: .4byte gSideAffecting -_0801E558: .4byte gBattleCommunication -_0801E55C: .4byte gStatusFlagsForMoveEffects -_0801E560: - cmp r0, 0x40 - bne _0801E566 - b _0801E888 -_0801E566: - cmp r0, 0x40 - bhi _0801E572 - cmp r0, 0x20 - bne _0801E570 - b _0801E7EA -_0801E570: - b _0801EA14 -_0801E572: - cmp r0, 0x80 - bne _0801E578 - b _0801E8E4 -_0801E578: - b _0801EA14 -_0801E57A: - mov r3, r8 - ldrb r1, [r3] - movs r0, 0x58 - muls r0, r1 - add r0, r9 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x2B - beq _0801E5DC - ldr r0, _0801E5D4 @ =gActiveBank - movs r1, 0 - strb r1, [r0] - ldr r1, _0801E5D8 @ =gNoOfAllBanks - ldrb r3, [r1] - adds r7, r0, 0 - mov r12, r1 - cmp r3, 0 - beq _0801E5E8 - mov r4, r9 - ldr r0, [r4, 0x50] - movs r1, 0x70 - ands r0, r1 - cmp r0, 0 - bne _0801E5E8 - adds r1, r7, 0 - mov r6, r9 - adds r6, 0x50 - movs r5, 0x58 - movs r4, 0x70 -_0801E5B4: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, r3 - bcs _0801E5E8 - ldrb r0, [r7] - muls r0, r5 - adds r0, r6 - ldr r0, [r0] - ands r0, r4 - cmp r0, 0 - beq _0801E5B4 - b _0801E5E8 - .align 2, 0 -_0801E5D4: .4byte gActiveBank -_0801E5D8: .4byte gNoOfAllBanks -_0801E5DC: - ldr r0, _0801E628 @ =gActiveBank - ldr r2, _0801E62C @ =gNoOfAllBanks - ldrb r1, [r2] - strb r1, [r0] - adds r7, r0, 0 - mov r12, r2 -_0801E5E8: - mov r0, r8 - ldrb r2, [r0] - movs r0, 0x58 - adds r1, r2, 0 - muls r1, r0 - mov r0, r9 - adds r0, 0x4C - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - beq _0801E600 - b _0801EA14 -_0801E600: - ldrb r0, [r7] - mov r3, r12 - ldrb r3, [r3] - cmp r0, r3 - beq _0801E60C - b _0801EA14 -_0801E60C: - mov r4, r9 - adds r0, r1, r4 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x48 - bne _0801E61A - b _0801EA14 -_0801E61A: - cmp r0, 0xF - bne _0801E620 - b _0801EA14 -_0801E620: - adds r0, r2, 0 - bl CancelMultiTurnMoves - b _0801EA04 - .align 2, 0 -_0801E628: .4byte gActiveBank -_0801E62C: .4byte gNoOfAllBanks -_0801E630: - mov r2, r8 - ldrb r1, [r2] - movs r0, 0x58 - muls r0, r1 - add r0, r9 - adds r0, 0x20 - ldrb r1, [r0] - cmp r1, 0x11 - bne _0801E688 - cmp r4, 0x1 - beq _0801E64A - cmp r5, 0x80 - bne _0801E688 -_0801E64A: - ldr r0, _0801E678 @ =gLastUsedAbility - strb r1, [r0] - mov r3, r8 - ldrb r0, [r3] - movs r1, 0x11 - bl RecordAbilityBattle - ldr r4, _0801E67C @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801E680 @ =BattleScript_PSNPrevention -_0801E664: - str r0, [r4] - ldr r2, _0801E684 @ =gHitMarker - ldr r1, [r2] - movs r0, 0x80 - lsls r0, 6 - ands r0, r1 - cmp r0, 0 - beq _0801E676 - b _0801E928 -_0801E676: - b _0801E94C - .align 2, 0 -_0801E678: .4byte gLastUsedAbility -_0801E67C: .4byte gBattlescriptCurrInstr -_0801E680: .4byte BattleScript_PSNPrevention -_0801E684: .4byte gHitMarker -_0801E688: - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x58 - muls r0, r1 - add r0, r9 - adds r1, r0, 0 - adds r1, 0x21 - ldrb r1, [r1] - cmp r1, 0x3 - beq _0801E6AC - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x3 - beq _0801E6AC - cmp r1, 0x8 - beq _0801E6AC - cmp r0, 0x8 - bne _0801E6C6 -_0801E6AC: - ldr r0, _0801E710 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 6 - ands r0, r1 - cmp r0, 0 - beq _0801E6C6 - cmp r4, 0x1 - bne _0801E6C0 - b _0801E98C -_0801E6C0: - cmp r5, 0x80 - bne _0801E6C6 - b _0801E98C -_0801E6C6: - mov r2, r8 - ldrb r1, [r2] - movs r0, 0x58 - muls r1, r0 - mov r4, r9 - adds r3, r1, r4 - adds r0, r3, 0 - adds r0, 0x21 - ldrb r4, [r0] - cmp r4, 0x3 - bne _0801E6DE - b _0801EA14 -_0801E6DE: - adds r0, 0x1 - ldrb r0, [r0] - cmp r0, 0x3 - bne _0801E6E8 - b _0801EA14 -_0801E6E8: - cmp r4, 0x8 - bne _0801E6EE - b _0801EA14 -_0801E6EE: - cmp r0, 0x8 - bne _0801E6F4 - b _0801EA14 -_0801E6F4: - mov r0, r9 - adds r0, 0x4C - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - beq _0801E702 - b _0801EA14 -_0801E702: - adds r0, r3, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x11 - bne _0801E70E - b _0801EA14 -_0801E70E: - b _0801EA04 - .align 2, 0 -_0801E710: .4byte gHitMarker -_0801E714: - mov r2, r8 - ldrb r1, [r2] - movs r0, 0x58 - muls r0, r1 - add r0, r9 - adds r0, 0x20 - ldrb r1, [r0] - cmp r1, 0x29 - bne _0801E758 - cmp r4, 0x1 - beq _0801E72E - cmp r5, 0x80 - bne _0801E758 -_0801E72E: - ldr r0, _0801E74C @ =gLastUsedAbility - strb r1, [r0] - mov r3, r8 - ldrb r0, [r3] - movs r1, 0x29 - bl RecordAbilityBattle - ldr r4, _0801E750 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801E754 @ =BattleScript_BRNPrevention - b _0801E664 - .align 2, 0 -_0801E74C: .4byte gLastUsedAbility -_0801E750: .4byte gBattlescriptCurrInstr -_0801E754: .4byte BattleScript_BRNPrevention -_0801E758: - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - mov r2, r9 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0xA - beq _0801E778 - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0xA - bne _0801E7A8 -_0801E778: - ldr r0, _0801E79C @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 6 - ands r0, r1 - cmp r0, 0 - beq _0801E7A8 - cmp r4, 0x1 - beq _0801E78E - cmp r5, 0x80 - bne _0801E7A8 -_0801E78E: - ldr r4, _0801E7A0 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801E7A4 @ =BattleScript_BRNPrevention - b _0801E998 - .align 2, 0 -_0801E79C: .4byte gHitMarker -_0801E7A0: .4byte gBattlescriptCurrInstr -_0801E7A4: .4byte BattleScript_BRNPrevention -_0801E7A8: - mov r3, r8 - ldrb r0, [r3] - movs r1, 0x58 - adds r2, r0, 0 - muls r2, r1 - mov r4, r9 - adds r1, r2, r4 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0xA - bne _0801E7C2 - b _0801EA14 -_0801E7C2: - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0xA - bne _0801E7CE - b _0801EA14 -_0801E7CE: - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x29 - bne _0801E7DA - b _0801EA14 -_0801E7DA: - mov r0, r9 - adds r0, 0x4C - adds r0, r2, r0 - ldr r0, [r0] - cmp r0, 0 - beq _0801E7E8 - b _0801EA14 -_0801E7E8: - b _0801EA04 -_0801E7EA: - movs r0, 0 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0xD - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0801E826 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x4D - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _0801E826 - ldr r0, _0801E87C @ =gBattleWeather - ldrh r1, [r0] - movs r0, 0x60 - ands r0, r1 - cmp r0, 0 - beq _0801E826 - movs r1, 0 - str r1, [sp, 0x4] -_0801E826: - ldr r4, _0801E880 @ =gBattleMons - ldr r0, _0801E884 @ =gEffectBank - ldrb r3, [r0] - movs r0, 0x58 - adds r2, r3, 0 - muls r2, r0 - adds r1, r2, r4 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0xF - bne _0801E840 - b _0801EA14 -_0801E840: - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0xF - bne _0801E84C - b _0801EA14 -_0801E84C: - adds r0, r4, 0 - adds r0, 0x4C - adds r0, r2, r0 - ldr r0, [r0] - cmp r0, 0 - beq _0801E85A - b _0801EA14 -_0801E85A: - ldr r2, [sp, 0x4] - cmp r2, 0 - bne _0801E862 - b _0801EA14 -_0801E862: - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x28 - bne _0801E86E - b _0801EA14 -_0801E86E: - adds r0, r3, 0 - bl CancelMultiTurnMoves - movs r3, 0x1 - mov r10, r3 - b _0801EA14 - .align 2, 0 -_0801E87C: .4byte gBattleWeather -_0801E880: .4byte gBattleMons -_0801E884: .4byte gEffectBank -_0801E888: - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r1, r0 - mov r2, r9 - adds r0, r1, r2 - adds r0, 0x20 - ldrb r2, [r0] - cmp r2, 0x7 - bne _0801E8D0 - cmp r4, 0x1 - beq _0801E8A6 - cmp r5, 0x80 - beq _0801E8A6 - b _0801EA14 -_0801E8A6: - ldr r0, _0801E8C4 @ =gLastUsedAbility - strb r2, [r0] - mov r3, r8 - ldrb r0, [r3] - movs r1, 0x7 - bl RecordAbilityBattle - ldr r4, _0801E8C8 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801E8CC @ =BattleScript_PRLZPrevention - b _0801E664 - .align 2, 0 -_0801E8C4: .4byte gLastUsedAbility -_0801E8C8: .4byte gBattlescriptCurrInstr -_0801E8CC: .4byte BattleScript_PRLZPrevention -_0801E8D0: - mov r0, r9 - adds r0, 0x4C - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - beq _0801E8DE - b _0801EA14 -_0801E8DE: - movs r4, 0x1 - mov r10, r4 - b _0801EA14 -_0801E8E4: - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - add r0, r9 - adds r0, 0x20 - ldrb r1, [r0] - cmp r1, 0x11 - bne _0801E952 - cmp r4, 0x1 - beq _0801E8FE - cmp r5, 0x80 - bne _0801E952 -_0801E8FE: - ldr r0, _0801E938 @ =gLastUsedAbility - strb r1, [r0] - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x11 - bl RecordAbilityBattle - ldr r4, _0801E93C @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801E940 @ =BattleScript_PSNPrevention - str r0, [r4] - ldr r2, _0801E944 @ =gHitMarker - ldr r1, [r2] - movs r0, 0x80 - lsls r0, 6 - ands r0, r1 - cmp r0, 0 - beq _0801E94C -_0801E928: - movs r0, 0x1 - strb r0, [r7, 0x5] - ldr r0, _0801E948 @ =0xffffdfff - ands r1, r0 - str r1, [r2] - bl _0801F5FA - .align 2, 0 -_0801E938: .4byte gLastUsedAbility -_0801E93C: .4byte gBattlescriptCurrInstr -_0801E940: .4byte BattleScript_PSNPrevention -_0801E944: .4byte gHitMarker -_0801E948: .4byte 0xffffdfff -_0801E94C: - strb r0, [r7, 0x5] - bl _0801F5FA -_0801E952: - mov r2, r8 - ldrb r0, [r2] - movs r1, 0x58 - muls r0, r1 - add r0, r9 - adds r1, r0, 0 - adds r1, 0x21 - ldrb r1, [r1] - cmp r1, 0x3 - beq _0801E976 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x3 - beq _0801E976 - cmp r1, 0x8 - beq _0801E976 - cmp r0, 0x8 - bne _0801E9B4 -_0801E976: - ldr r0, _0801E9A4 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 6 - ands r0, r1 - cmp r0, 0 - beq _0801E9B4 - cmp r4, 0x1 - beq _0801E98C - cmp r5, 0x80 - bne _0801E9B4 -_0801E98C: - ldr r4, _0801E9A8 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801E9AC @ =BattleScript_PSNPrevention -_0801E998: - str r0, [r4] - ldr r1, _0801E9B0 @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - bl _0801F5FA - .align 2, 0 -_0801E9A4: .4byte gHitMarker -_0801E9A8: .4byte gBattlescriptCurrInstr -_0801E9AC: .4byte BattleScript_PSNPrevention -_0801E9B0: .4byte gBattleCommunication -_0801E9B4: - mov r3, r8 - ldrb r0, [r3] - movs r6, 0x58 - muls r0, r6 - mov r2, r9 - adds r2, 0x4C - adds r5, r0, r2 - ldr r4, [r5] - cmp r4, 0 - bne _0801EA14 - mov r3, r9 - adds r1, r0, r3 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r3, [r0] - cmp r3, 0x3 - beq _0801EA0A - adds r0, 0x1 - ldrb r0, [r0] - cmp r0, 0x3 - beq _0801EA0A - cmp r3, 0x8 - beq _0801EA0A - cmp r0, 0x8 - beq _0801EA0A - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x11 - beq _0801EA14 - mov r4, r8 - ldrb r0, [r4] - adds r1, r0, 0 - muls r1, r6 - adds r1, r2 - ldr r0, [r1] - movs r2, 0x9 - negs r2, r2 - ands r0, r2 - str r0, [r1] -_0801EA04: - movs r0, 0x1 - mov r10, r0 - b _0801EA14 -_0801EA0A: - ldr r0, _0801EA58 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r2, 0x8 - orrs r1, r2 - strb r1, [r0] -_0801EA14: - mov r1, r10 - cmp r1, 0x1 - beq _0801EA1C - b _0801EB3C -_0801EA1C: - ldr r0, _0801EA5C @ =gBattlescriptCurrInstr - ldr r0, [r0] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects - ldr r0, _0801EA64 @ =gBattleCommunication - ldrb r0, [r0, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r3, [r0] - cmp r3, 0x7 - bne _0801EA70 - bl Random - ldr r2, _0801EA68 @ =gBattleMons - ldr r1, _0801EA6C @ =gEffectBank - ldrb r3, [r1] - movs r1, 0x58 - muls r3, r1 - adds r2, 0x4C - adds r3, r2 - movs r1, 0x3 - ands r1, r0 - adds r1, 0x2 - ldr r0, [r3] - orrs r0, r1 - str r0, [r3] - b _0801EA84 - .align 2, 0 -_0801EA58: .4byte gBattleMoveFlags -_0801EA5C: .4byte gBattlescriptCurrInstr -_0801EA60: .4byte gStatusFlagsForMoveEffects -_0801EA64: .4byte gBattleCommunication -_0801EA68: .4byte gBattleMons -_0801EA6C: .4byte gEffectBank -_0801EA70: - ldr r2, _0801EAD4 @ =gBattleMons - ldr r0, _0801EAD8 @ =gEffectBank - ldrb r1, [r0] - movs r0, 0x58 - muls r1, r0 - adds r2, 0x4C - adds r1, r2 - ldr r0, [r1] - orrs r0, r3 - str r0, [r1] -_0801EA84: - ldr r2, _0801EADC @ =gBattlescriptCurrInstr - ldr r1, _0801EAE0 @ =gMoveEffectBS_Ptrs - ldr r5, _0801EAE4 @ =gBattleCommunication - ldrb r0, [r5, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [r2] - ldr r4, _0801EAE8 @ =gActiveBank - ldr r1, _0801EAD8 @ =gEffectBank - ldrb r0, [r1] - strb r0, [r4] - ldrb r1, [r1] - movs r0, 0x58 - muls r0, r1 - ldr r1, _0801EAEC @ =gUnknown_02024ACC - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x28 - movs r2, 0 - movs r3, 0x4 - bl EmitSetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r2, _0801EAF0 @ =gHitMarker - ldr r1, [r2] - movs r0, 0x80 - lsls r0, 6 - ands r0, r1 - cmp r0, 0 - beq _0801EAF8 - movs r0, 0x1 - strb r0, [r5, 0x5] - ldr r0, _0801EAF4 @ =0xffffdfff - ands r1, r0 - str r1, [r2] - b _0801EAFA - .align 2, 0 -_0801EAD4: .4byte gBattleMons -_0801EAD8: .4byte gEffectBank -_0801EADC: .4byte gBattlescriptCurrInstr -_0801EAE0: .4byte gMoveEffectBS_Ptrs -_0801EAE4: .4byte gBattleCommunication -_0801EAE8: .4byte gActiveBank -_0801EAEC: .4byte gUnknown_02024ACC -_0801EAF0: .4byte gHitMarker -_0801EAF4: .4byte 0xffffdfff -_0801EAF8: - strb r0, [r5, 0x5] -_0801EAFA: - ldr r0, _0801EB2C @ =gBattleCommunication - ldrb r2, [r0, 0x3] - adds r7, r0, 0 - cmp r2, 0x2 - beq _0801EB14 - cmp r2, 0x6 - beq _0801EB14 - cmp r2, 0x5 - beq _0801EB14 - cmp r2, 0x3 - beq _0801EB14 - bl _0801F5FA -_0801EB14: - ldr r0, _0801EB30 @ =0x02000000 - ldrb r1, [r7, 0x3] - ldr r2, _0801EB34 @ =0x000160ca - adds r0, r2 - strb r1, [r0] - ldr r2, _0801EB38 @ =gHitMarker - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 7 - bl _0801F4F2 - .align 2, 0 -_0801EB2C: .4byte gBattleCommunication -_0801EB30: .4byte 0x02000000 -_0801EB34: .4byte 0x000160ca -_0801EB38: .4byte gHitMarker -_0801EB3C: - mov r3, r10 - cmp r3, 0 - beq _0801EB46 - bl _0801F5FA -_0801EB46: - bl _0801F5DC -_0801EB4A: - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r1, r0 - mov r0, r9 - adds r0, 0x50 - adds r1, r0 - ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects - ldrb r3, [r7, 0x3] - lsls r0, r3, 2 - adds r0, r2 - ldr r1, [r1] - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0801EB6E - bl _0801F5DC -_0801EB6E: - subs r0, r3, 0x7 - cmp r0, 0x34 - bls _0801EB78 - bl _0801F5FA -_0801EB78: - lsls r0, 2 - ldr r1, _0801EB88 @ =_0801EB8C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801EB84: .4byte gStatusFlagsForMoveEffects -_0801EB88: .4byte _0801EB8C - .align 2, 0 -_0801EB8C: - .4byte _0801EC60 - .4byte _0801ECD4 - .4byte _0801EE4C - .4byte _0801ED60 - .4byte _0801EDDC - .4byte _0801EE84 - .4byte _0801EECC - .4byte _0801EFA8 - .4byte _0801EFEC - .4byte _0801EFEC - .4byte _0801EFEC - .4byte _0801EFEC - .4byte _0801EFEC - .4byte _0801EFEC - .4byte _0801EFEC - .4byte _0801F040 - .4byte _0801F040 - .4byte _0801F040 - .4byte _0801F040 - .4byte _0801F040 - .4byte _0801F040 - .4byte _0801F040 - .4byte _0801F13C - .4byte _0801F184 - .4byte _0801F1A4 - .4byte _0801F364 - .4byte _0801F3A0 - .4byte _0801F3BC - .4byte _0801F3D4 - .4byte _0801F3EC - .4byte _0801F44C - .4byte _0801F464 - .4byte _0801F094 - .4byte _0801F094 - .4byte _0801F094 - .4byte _0801F094 - .4byte _0801F094 - .4byte _0801F094 - .4byte _0801F094 - .4byte _0801F0E8 - .4byte _0801F0E8 - .4byte _0801F0E8 - .4byte _0801F0E8 - .4byte _0801F0E8 - .4byte _0801F0E8 - .4byte _0801F0E8 - .4byte _0801F4A8 - .4byte _0801F500 - .4byte _0801F5FA - .4byte _0801F5FA - .4byte _0801F5FA - .4byte _0801F5FA - .4byte _0801F5EC -_0801EC60: - mov r1, r8 - ldrb r0, [r1] - movs r5, 0x58 - adds r1, r0, 0 - muls r1, r5 - mov r2, r9 - adds r0, r1, r2 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x14 - bne _0801EC7A - bl _0801F5DC -_0801EC7A: - mov r4, r9 - adds r4, 0x50 - adds r0, r1, r4 - ldr r0, [r0] - movs r1, 0x7 - ands r0, r1 - cmp r0, 0 - beq _0801EC8E - bl _0801F5DC -_0801EC8E: - bl Random - mov r3, r8 - ldrb r1, [r3] - adds r2, r1, 0 - muls r2, r5 - adds r2, r4 - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - lsrs r1, 16 - adds r1, 0x2 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - ldr r4, _0801ECC8 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r1, _0801ECCC @ =gMoveEffectBS_Ptrs - ldr r0, _0801ECD0 @ =gBattleCommunication - ldrb r0, [r0, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _0801F5F8 - .align 2, 0 -_0801ECC8: .4byte gBattlescriptCurrInstr -_0801ECCC: .4byte gMoveEffectBS_Ptrs -_0801ECD0: .4byte gBattleCommunication -_0801ECD4: - mov r0, r8 - ldrb r2, [r0] - movs r6, 0x58 - adds r0, r2, 0 - muls r0, r6 - add r0, r9 - adds r0, 0x20 - ldrb r1, [r0] - cmp r1, 0x27 - bne _0801ED18 - cmp r4, 0x1 - beq _0801ECF4 - cmp r5, 0x80 - beq _0801ECF4 - bl _0801F5DC -_0801ECF4: - ldr r0, _0801ED0C @ =gLastUsedAbility - strb r1, [r0] - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x27 - bl RecordAbilityBattle - ldr r1, _0801ED10 @ =gBattlescriptCurrInstr - ldr r0, _0801ED14 @ =BattleScript_FlinchPrevention - str r0, [r1] - bl _0801F5FA - .align 2, 0 -_0801ED0C: .4byte gLastUsedAbility -_0801ED10: .4byte gBattlescriptCurrInstr -_0801ED14: .4byte BattleScript_FlinchPrevention -_0801ED18: - adds r0, r2, 0 - bl sub_801E3B4 - ldr r1, _0801ED54 @ =gCurrentMoveTurn - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bhi _0801ED2E - bl _0801F5DC -_0801ED2E: - mov r2, r8 - ldrb r0, [r2] - adds r2, r0, 0 - muls r2, r6 - mov r0, r9 - adds r0, 0x50 - adds r2, r0 - ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects - ldr r0, _0801ED5C @ =gBattleCommunication - ldrb r0, [r0, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r1, [r2] - ldr r0, [r0] - orrs r1, r0 - str r1, [r2] - bl _0801F5DC - .align 2, 0 -_0801ED54: .4byte gCurrentMoveTurn -_0801ED58: .4byte gStatusFlagsForMoveEffects -_0801ED5C: .4byte gBattleCommunication -_0801ED60: - mov r3, r8 - ldrb r0, [r3] - movs r5, 0x58 - muls r0, r5 - mov r4, r9 - adds r4, 0x50 - adds r2, r0, r4 - ldr r1, [r2] - movs r0, 0x70 - ands r0, r1 - cmp r0, 0 - beq _0801ED7C - bl _0801F5DC -_0801ED7C: - movs r0, 0x80 - lsls r0, 5 - orrs r1, r0 - str r1, [r2] - ldr r1, _0801EDC8 @ =gLockedMove - ldrb r0, [r3] - lsls r0, 1 - adds r0, r1 - ldr r1, _0801EDCC @ =gCurrentMove - ldrh r1, [r1] - strh r1, [r0] - bl Random - mov r2, r8 - ldrb r1, [r2] - adds r2, r1, 0 - muls r2, r5 - adds r2, r4 - movs r1, 0x3 - ands r1, r0 - adds r1, 0x2 - lsls r1, 4 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - ldr r4, _0801EDD0 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r1, _0801EDD4 @ =gMoveEffectBS_Ptrs - ldr r0, _0801EDD8 @ =gBattleCommunication - ldrb r0, [r0, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _0801F5F8 - .align 2, 0 -_0801EDC8: .4byte gLockedMove -_0801EDCC: .4byte gCurrentMove -_0801EDD0: .4byte gBattlescriptCurrInstr -_0801EDD4: .4byte gMoveEffectBS_Ptrs -_0801EDD8: .4byte gBattleCommunication -_0801EDDC: - ldr r5, _0801EE30 @ =gBankAttacker - ldrb r0, [r5] - bl GetBankIdentity - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - bne _0801EE14 - ldr r4, _0801EE34 @ =gPaydayMoney - ldrh r3, [r4] - ldr r2, _0801EE38 @ =gBattleMons - ldrb r1, [r5] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x2A - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - adds r0, r3, r0 - strh r0, [r4] - lsls r0, 16 - lsrs r0, 16 - cmp r3, r0 - bls _0801EE14 - ldr r3, _0801EE3C @ =0x0000ffff - adds r0, r3, 0 - strh r0, [r4] -_0801EE14: - ldr r4, _0801EE40 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r1, _0801EE44 @ =gMoveEffectBS_Ptrs - ldr r0, _0801EE48 @ =gBattleCommunication - ldrb r0, [r0, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _0801F5F8 - .align 2, 0 -_0801EE30: .4byte gBankAttacker -_0801EE34: .4byte gPaydayMoney -_0801EE38: .4byte gBattleMons -_0801EE3C: .4byte 0x0000ffff -_0801EE40: .4byte gBattlescriptCurrInstr -_0801EE44: .4byte gMoveEffectBS_Ptrs -_0801EE48: .4byte gBattleCommunication -_0801EE4C: - mov r4, r8 - ldrb r1, [r4] - movs r0, 0x58 - muls r0, r1 - mov r1, r9 - adds r1, 0x4C - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - beq _0801EE62 - b _0801F5DC -_0801EE62: - bl Random - ldr r4, _0801EE80 @ =gBattleCommunication - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - adds r0, 0x3 - strb r0, [r4, 0x3] - movs r0, 0 - movs r1, 0 - bl sub_801E3EC - b _0801F5FA - .align 2, 0 -_0801EE80: .4byte gBattleCommunication -_0801EE84: - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - adds r2, r1, 0 - muls r2, r0 - mov r0, r9 - adds r0, 0x50 - adds r2, r0 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 5 - orrs r0, r1 - str r0, [r2] - ldr r1, _0801EEC0 @ =gLockedMove - mov r2, r8 - ldrb r0, [r2] - lsls r0, 1 - adds r0, r1 - ldr r1, _0801EEC4 @ =gCurrentMove - ldrh r1, [r1] - strh r1, [r0] - ldr r0, _0801EEC8 @ =gProtectStructs - ldrb r1, [r2] - lsls r1, 4 - adds r1, r0 - ldrb r0, [r1, 0x1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1, 0x1] - b _0801F5DC - .align 2, 0 -_0801EEC0: .4byte gLockedMove -_0801EEC4: .4byte gCurrentMove -_0801EEC8: .4byte gProtectStructs -_0801EECC: - mov r3, r8 - ldrb r0, [r3] - movs r6, 0x58 - muls r0, r6 - mov r4, r9 - adds r4, 0x50 - adds r0, r4 - ldr r5, [r0] - movs r0, 0xE0 - lsls r0, 8 - ands r5, r0 - cmp r5, 0 - beq _0801EEE8 - b _0801F5DC -_0801EEE8: - bl Random - mov r2, r8 - ldrb r1, [r2] - adds r2, r1, 0 - muls r2, r6 - adds r2, r4 - movs r1, 0x3 - ands r1, r0 - adds r1, 0x3 - lsls r1, 13 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - ldr r2, _0801EF80 @ =0x02000000 - mov r3, r8 - ldrb r0, [r3] - lsls r0, 1 - ldr r4, _0801EF84 @ =0x00016004 - adds r0, r4 - adds r0, r2 - ldr r6, _0801EF88 @ =gCurrentMove - ldrh r1, [r6] - strb r1, [r0] - ldrb r0, [r3] - lsls r0, 1 - ldr r1, _0801EF8C @ =0x00016005 - adds r0, r1 - adds r0, r2 - ldrh r1, [r6] - lsrs r1, 8 - strb r1, [r0] - ldrb r0, [r3] - ldr r3, _0801EF90 @ =0x00016020 - adds r0, r3 - adds r0, r2 - ldr r1, _0801EF94 @ =gBankAttacker - ldrb r1, [r1] - strb r1, [r0] - ldr r4, _0801EF98 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r1, _0801EF9C @ =gMoveEffectBS_Ptrs - ldr r2, _0801EFA0 @ =gBattleCommunication - ldrb r0, [r2, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [r4] - strb r5, [r2, 0x5] - ldr r1, _0801EFA4 @ =gTrappingMoves - ldrh r0, [r1] - ldrh r4, [r6] - cmp r0, r4 - bne _0801EF5C - b _0801F5FA -_0801EF5C: - adds r3, r1, 0 - adds r1, r6, 0 -_0801EF60: - ldrb r0, [r2, 0x5] - adds r0, 0x1 - strb r0, [r2, 0x5] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bls _0801EF70 - b _0801F5FA -_0801EF70: - ldrb r0, [r2, 0x5] - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - ldrh r4, [r1] - cmp r0, r4 - bne _0801EF60 - b _0801F5FA - .align 2, 0 -_0801EF80: .4byte 0x02000000 -_0801EF84: .4byte 0x00016004 -_0801EF88: .4byte gCurrentMove -_0801EF8C: .4byte 0x00016005 -_0801EF90: .4byte 0x00016020 -_0801EF94: .4byte gBankAttacker -_0801EF98: .4byte gBattlescriptCurrInstr -_0801EF9C: .4byte gMoveEffectBS_Ptrs -_0801EFA0: .4byte gBattleCommunication -_0801EFA4: .4byte gTrappingMoves -_0801EFA8: - ldr r1, _0801EFD8 @ =gBattleMoveDamage - ldr r0, _0801EFDC @ =gHP_dealt - ldr r0, [r0] - cmp r0, 0 - bge _0801EFB4 - adds r0, 0x3 -_0801EFB4: - asrs r0, 2 - str r0, [r1] - cmp r0, 0 - bne _0801EFC0 - movs r0, 0x1 - str r0, [r1] -_0801EFC0: - ldr r4, _0801EFE0 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r1, _0801EFE4 @ =gMoveEffectBS_Ptrs - ldr r0, _0801EFE8 @ =gBattleCommunication - ldrb r0, [r0, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - b _0801F5F8 - .align 2, 0 -_0801EFD8: .4byte gBattleMoveDamage -_0801EFDC: .4byte gHP_dealt -_0801EFE0: .4byte gBattlescriptCurrInstr -_0801EFE4: .4byte gMoveEffectBS_Ptrs -_0801EFE8: .4byte gBattleCommunication -_0801EFEC: - ldrb r1, [r7, 0x3] - adds r1, 0xF2 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x10 - adds r2, r6, 0 - movs r3, 0 - bl sub_8025E20 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _0801F008 - b _0801F5DC -_0801F008: - ldr r2, _0801F02C @ =0x02000000 - ldrb r1, [r7, 0x3] - movs r0, 0x3F - ands r0, r1 - ldr r4, _0801F030 @ =0x000160a4 - adds r1, r2, r4 - strb r0, [r1] - ldr r0, _0801F034 @ =0x000160a5 - adds r2, r0 - strb r3, [r2] - ldr r4, _0801F038 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F03C @ =BattleScript_StatUp - b _0801F5F8 - .align 2, 0 -_0801F02C: .4byte 0x02000000 -_0801F030: .4byte 0x000160a4 -_0801F034: .4byte 0x000160a5 -_0801F038: .4byte gBattlescriptCurrInstr -_0801F03C: .4byte BattleScript_StatUp -_0801F040: - movs r0, 0x70 - negs r0, r0 - ldrb r1, [r7, 0x3] - adds r1, 0xEB - lsls r1, 24 - lsrs r1, 24 - adds r2, r6, 0 - movs r3, 0 - bl sub_8025E20 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _0801F05E - b _0801F5DC -_0801F05E: - ldr r2, _0801F080 @ =0x02000000 - ldrb r1, [r7, 0x3] - movs r0, 0x3F - ands r0, r1 - ldr r4, _0801F084 @ =0x000160a4 - adds r1, r2, r4 - strb r0, [r1] - ldr r0, _0801F088 @ =0x000160a5 - adds r2, r0 - strb r3, [r2] - ldr r4, _0801F08C @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F090 @ =BattleScript_StatDown - b _0801F5F8 - .align 2, 0 -_0801F080: .4byte 0x02000000 -_0801F084: .4byte 0x000160a4 -_0801F088: .4byte 0x000160a5 -_0801F08C: .4byte gBattlescriptCurrInstr -_0801F090: .4byte BattleScript_StatDown -_0801F094: - ldrb r1, [r7, 0x3] - adds r1, 0xDA - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x20 - adds r2, r6, 0 - movs r3, 0 - bl sub_8025E20 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _0801F0B0 - b _0801F5DC -_0801F0B0: - ldr r2, _0801F0D4 @ =0x02000000 - ldrb r1, [r7, 0x3] - movs r0, 0x3F - ands r0, r1 - ldr r4, _0801F0D8 @ =0x000160a4 - adds r1, r2, r4 - strb r0, [r1] - ldr r0, _0801F0DC @ =0x000160a5 - adds r2, r0 - strb r3, [r2] - ldr r4, _0801F0E0 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F0E4 @ =BattleScript_StatUp - b _0801F5F8 - .align 2, 0 -_0801F0D4: .4byte 0x02000000 -_0801F0D8: .4byte 0x000160a4 -_0801F0DC: .4byte 0x000160a5 -_0801F0E0: .4byte gBattlescriptCurrInstr -_0801F0E4: .4byte BattleScript_StatUp -_0801F0E8: - movs r0, 0x60 - negs r0, r0 - ldrb r1, [r7, 0x3] - adds r1, 0xD3 - lsls r1, 24 - lsrs r1, 24 - adds r2, r6, 0 - movs r3, 0 - bl sub_8025E20 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _0801F106 - b _0801F5DC -_0801F106: - ldr r2, _0801F128 @ =0x02000000 - ldrb r1, [r7, 0x3] - movs r0, 0x3F - ands r0, r1 - ldr r4, _0801F12C @ =0x000160a4 - adds r1, r2, r4 - strb r0, [r1] - ldr r0, _0801F130 @ =0x000160a5 - adds r2, r0 - strb r3, [r2] - ldr r4, _0801F134 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F138 @ =BattleScript_StatDown - b _0801F5F8 - .align 2, 0 -_0801F128: .4byte 0x02000000 -_0801F12C: .4byte 0x000160a4 -_0801F130: .4byte 0x000160a5 -_0801F134: .4byte gBattlescriptCurrInstr -_0801F138: .4byte BattleScript_StatDown -_0801F13C: - mov r2, r8 - ldrb r1, [r2] - movs r0, 0x58 - adds r2, r1, 0 - muls r2, r0 - mov r0, r9 - adds r0, 0x50 - adds r2, r0 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 15 - orrs r0, r1 - str r0, [r2] - ldr r2, _0801F178 @ =gDisableStructs - mov r3, r8 - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2 - strb r1, [r0, 0x19] - ldr r1, _0801F17C @ =gLockedMove - ldrb r0, [r3] - lsls r0, 1 - adds r0, r1 - ldr r1, _0801F180 @ =gCurrentMove - ldrh r1, [r1] - strh r1, [r0] - b _0801F5DC - .align 2, 0 -_0801F178: .4byte gDisableStructs -_0801F17C: .4byte gLockedMove -_0801F180: .4byte gCurrentMove -_0801F184: - ldr r0, _0801F1A0 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - adds r2, r1, 0 - muls r2, r0 - mov r0, r9 - adds r0, 0x50 - adds r2, r0 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 16 -_0801F19A: - orrs r0, r1 - str r0, [r2] - b _0801F5DC - .align 2, 0 -_0801F1A0: .4byte gBankAttacker -_0801F1A4: - ldr r4, _0801F254 @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0801F1D8 - ldr r0, _0801F258 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0801F25C @ =0x00000902 - ands r0, r1 - cmp r0, 0 - bne _0801F214 - ldr r0, _0801F260 @ =gTrainerBattleOpponent - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - beq _0801F1D8 - b _0801F5DC -_0801F1D8: - ldr r0, _0801F258 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0801F25C @ =0x00000902 - ands r0, r1 - cmp r0, 0 - bne _0801F214 - ldr r0, _0801F260 @ =gTrainerBattleOpponent - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - beq _0801F214 - ldr r0, _0801F264 @ =gWishFutureKnock - adds r0, 0x29 - adds r0, r6, r0 - ldrb r1, [r0] - ldr r3, _0801F268 @ =gBitTable - ldr r2, _0801F26C @ =gBattlePartyID - ldr r0, _0801F254 @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0801F214 - b _0801F5DC -_0801F214: - ldr r2, _0801F270 @ =gBattleMons - ldr r1, _0801F274 @ =gBankTarget - ldrb r0, [r1] - movs r3, 0x58 - muls r0, r3 - adds r4, r0, r2 - ldrh r0, [r4, 0x2E] - adds r7, r1, 0 - mov r9, r2 - cmp r0, 0 - beq _0801F284 - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x3C - bne _0801F284 - ldr r1, _0801F278 @ =gBattlescriptCurrInstr - ldr r0, _0801F27C @ =BattleScript_NoItemSteal - str r0, [r1] - ldr r1, _0801F280 @ =gLastUsedAbility - ldrb r0, [r7] - muls r0, r3 - add r0, r9 - adds r0, 0x20 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r7] - ldrb r1, [r1] - bl RecordAbilityBattle - b _0801F5FA - .align 2, 0 -_0801F254: .4byte gBankAttacker -_0801F258: .4byte gBattleTypeFlags -_0801F25C: .4byte 0x00000902 -_0801F260: .4byte gTrainerBattleOpponent -_0801F264: .4byte gWishFutureKnock -_0801F268: .4byte gBitTable -_0801F26C: .4byte gBattlePartyID -_0801F270: .4byte gBattleMons -_0801F274: .4byte gBankTarget -_0801F278: .4byte gBattlescriptCurrInstr -_0801F27C: .4byte BattleScript_NoItemSteal -_0801F280: .4byte gLastUsedAbility -_0801F284: - ldr r4, _0801F340 @ =gBankAttacker - mov r10, r4 - ldrb r1, [r4] - movs r0, 0x58 - mov r8, r0 - mov r0, r8 - muls r0, r1 - add r0, r9 - ldrh r3, [r0, 0x2E] - cmp r3, 0 - beq _0801F29C - b _0801F5DC -_0801F29C: - ldrb r0, [r7] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - add r0, r9 - ldrh r2, [r0, 0x2E] - adds r0, r2, 0 - cmp r0, 0xAF - bne _0801F2B0 - b _0801F5DC -_0801F2B0: - cmp r0, 0 - bne _0801F2B6 - b _0801F5DC -_0801F2B6: - lsls r0, r1, 1 - ldr r5, _0801F344 @ =0x020160f0 - adds r0, r5 - ldr r1, _0801F348 @ =gLastUsedItem - strh r2, [r0] - strh r2, [r1] - ldrb r0, [r7] - mov r4, r8 - muls r4, r0 - adds r0, r4, 0 - add r0, r9 - movs r6, 0 - strh r3, [r0, 0x2E] - ldr r4, _0801F34C @ =gActiveBank - mov r2, r10 - ldrb r0, [r2] - strb r0, [r4] - str r1, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl EmitSetAttributes - mov r3, r10 - ldrb r0, [r3] - bl MarkBufferBankForExecution - ldrb r0, [r7] - strb r0, [r4] - ldrb r0, [r7] - mov r4, r8 - muls r4, r0 - adds r0, r4, 0 - mov r1, r9 - adds r1, 0x2E - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl EmitSetAttributes - ldrb r0, [r7] - bl MarkBufferBankForExecution - ldr r4, _0801F350 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F354 @ =BattleScript_ItemSteal - str r0, [r4] - ldr r0, _0801F358 @ =0xfffe9f10 - adds r5, r0 - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _0801F35C @ =0x000160e8 - adds r0, r1 - adds r0, r5 - strb r6, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r2, _0801F360 @ =0x000160e9 - adds r0, r2 - adds r0, r5 - strb r6, [r0] - b _0801F5FA - .align 2, 0 -_0801F340: .4byte gBankAttacker -_0801F344: .4byte 0x020160f0 -_0801F348: .4byte gLastUsedItem -_0801F34C: .4byte gActiveBank -_0801F350: .4byte gBattlescriptCurrInstr -_0801F354: .4byte BattleScript_ItemSteal -_0801F358: .4byte 0xfffe9f10 -_0801F35C: .4byte 0x000160e8 -_0801F360: .4byte 0x000160e9 -_0801F364: - ldr r3, _0801F394 @ =gBankTarget - ldrb r1, [r3] - movs r0, 0x58 - adds r2, r1, 0 - muls r2, r0 - mov r0, r9 - adds r0, 0x50 - adds r2, r0 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 19 - orrs r0, r1 - str r0, [r2] - ldr r2, _0801F398 @ =gDisableStructs - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _0801F39C @ =gBankAttacker - ldrb r1, [r1] - strb r1, [r0, 0x14] - b _0801F5DC - .align 2, 0 -_0801F394: .4byte gBankTarget -_0801F398: .4byte gDisableStructs -_0801F39C: .4byte gBankAttacker -_0801F3A0: - ldr r0, _0801F3B8 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - adds r2, r1, 0 - muls r2, r0 - mov r0, r9 - adds r0, 0x50 - adds r2, r0 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 20 - b _0801F19A - .align 2, 0 -_0801F3B8: .4byte gBankTarget -_0801F3BC: - ldr r4, _0801F3CC @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F3D0 @ =gUnknown_081D9224 - b _0801F5F8 - .align 2, 0 -_0801F3CC: .4byte gBattlescriptCurrInstr -_0801F3D0: .4byte gUnknown_081D9224 -_0801F3D4: - ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F3E8 @ =BattleScript_RapidSpinAway - b _0801F5F8 - .align 2, 0 -_0801F3E4: .4byte gBattlescriptCurrInstr -_0801F3E8: .4byte BattleScript_RapidSpinAway -_0801F3EC: - ldr r6, _0801F43C @ =gBankTarget - ldrb r0, [r6] - movs r2, 0x58 - muls r0, r2 - mov r1, r9 - adds r1, 0x4C - adds r5, r0, r1 - ldr r4, [r5] - movs r0, 0x40 - ands r0, r4 - cmp r0, 0 - bne _0801F406 - b _0801F5DC -_0801F406: - movs r0, 0x41 - negs r0, r0 - ands r4, r0 - str r4, [r5] - ldr r4, _0801F440 @ =gActiveBank - ldrb r0, [r6] - strb r0, [r4] - ldrb r0, [r4] - muls r0, r2 - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x28 - movs r2, 0 - movs r3, 0x4 - bl EmitSetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r4, _0801F444 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F448 @ =BattleScript_TargetPRLZHeal - b _0801F5F8 - .align 2, 0 -_0801F43C: .4byte gBankTarget -_0801F440: .4byte gActiveBank -_0801F444: .4byte gBattlescriptCurrInstr -_0801F448: .4byte BattleScript_TargetPRLZHeal -_0801F44C: - ldr r4, _0801F45C @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F460 @ =gUnknown_081D93FA - b _0801F5F8 - .align 2, 0 -_0801F45C: .4byte gBattlescriptCurrInstr -_0801F460: .4byte gUnknown_081D93FA -_0801F464: - ldr r4, _0801F494 @ =gBattleMoveDamage - ldr r0, _0801F498 @ =gHP_dealt - ldr r0, [r0] - movs r1, 0x3 - bl __divsi3 - str r0, [r4] - cmp r0, 0 - bne _0801F47A - movs r0, 0x1 - str r0, [r4] -_0801F47A: - ldr r4, _0801F49C @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r1, _0801F4A0 @ =gMoveEffectBS_Ptrs - ldr r0, _0801F4A4 @ =gBattleCommunication - ldrb r0, [r0, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - b _0801F5F8 - .align 2, 0 -_0801F494: .4byte gBattleMoveDamage -_0801F498: .4byte gHP_dealt -_0801F49C: .4byte gBattlescriptCurrInstr -_0801F4A0: .4byte gMoveEffectBS_Ptrs -_0801F4A4: .4byte gBattleCommunication -_0801F4A8: - mov r3, r8 - ldrb r0, [r3] - movs r5, 0x58 - muls r0, r5 - mov r4, r9 - adds r4, 0x50 - adds r2, r0, r4 - ldr r1, [r2] - movs r0, 0xC0 - lsls r0, 4 - ands r0, r1 - cmp r0, 0 - beq _0801F4C4 - b _0801F5DC -_0801F4C4: - movs r0, 0x80 - lsls r0, 5 - orrs r1, r0 - str r1, [r2] - ldr r1, _0801F4F8 @ =gLockedMove - ldrb r0, [r3] - lsls r0, 1 - adds r0, r1 - ldr r1, _0801F4FC @ =gCurrentMove - ldrh r1, [r1] - strh r1, [r0] - bl Random - mov r2, r8 - ldrb r1, [r2] - adds r2, r1, 0 - muls r2, r5 - adds r2, r4 - movs r1, 0x1 - ands r1, r0 - adds r1, 0x2 - lsls r1, 10 - ldr r0, [r2] -_0801F4F2: - orrs r0, r1 - str r0, [r2] - b _0801F5FA - .align 2, 0 -_0801F4F8: .4byte gLockedMove -_0801F4FC: .4byte gCurrentMove -_0801F500: - mov r5, r8 - ldrb r3, [r5] - movs r4, 0x58 - adds r0, r3, 0 - muls r0, r4 - mov r2, r9 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x20 - ldrb r2, [r0] - cmp r2, 0x3C - bne _0801F540 - ldrh r0, [r1, 0x2E] - cmp r0, 0 - beq _0801F5DC - ldr r0, _0801F534 @ =gLastUsedAbility - strb r2, [r0] - ldr r1, _0801F538 @ =gBattlescriptCurrInstr - ldr r0, _0801F53C @ =BattleScript_NoItemSteal - str r0, [r1] - ldrb r0, [r5] - movs r1, 0x3C - bl RecordAbilityBattle - b _0801F5FA - .align 2, 0 -_0801F534: .4byte gLastUsedAbility -_0801F538: .4byte gBattlescriptCurrInstr -_0801F53C: .4byte BattleScript_NoItemSteal -_0801F540: - ldrh r0, [r1, 0x2E] - cmp r0, 0 - beq _0801F5DC - adds r0, r3, 0 - bl GetBankSide - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _0801F5B8 @ =gLastUsedItem - mov r3, r8 - ldrb r0, [r3] - muls r0, r4 - add r0, r9 - ldrh r0, [r0, 0x2E] - strh r0, [r1] - ldrb r0, [r3] - muls r0, r4 - add r0, r9 - movs r5, 0 - movs r1, 0 - strh r1, [r0, 0x2E] - ldr r2, _0801F5BC @ =gWishFutureKnock - adds r2, 0x29 - adds r2, r6, r2 - ldr r3, _0801F5C0 @ =gBitTable - ldr r1, _0801F5C4 @ =gBattlePartyID - mov r4, r8 - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r4, _0801F5C8 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F5CC @ =BattleScript_KnockedOff - str r0, [r4] - ldr r1, _0801F5D0 @ =0x02000000 - mov r2, r8 - ldrb r0, [r2] - lsls r0, 1 - ldr r3, _0801F5D4 @ =0x000160e8 - adds r0, r3 - adds r0, r1 - strb r5, [r0] - ldrb r0, [r2] - lsls r0, 1 - ldr r4, _0801F5D8 @ =0x000160e9 - adds r0, r4 - adds r0, r1 - strb r5, [r0] - b _0801F5FA - .align 2, 0 -_0801F5B8: .4byte gLastUsedItem -_0801F5BC: .4byte gWishFutureKnock -_0801F5C0: .4byte gBitTable -_0801F5C4: .4byte gBattlePartyID -_0801F5C8: .4byte gBattlescriptCurrInstr -_0801F5CC: .4byte BattleScript_KnockedOff -_0801F5D0: .4byte 0x02000000 -_0801F5D4: .4byte 0x000160e8 -_0801F5D8: .4byte 0x000160e9 -_0801F5DC: - ldr r1, _0801F5E8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - b _0801F5FA - .align 2, 0 -_0801F5E8: .4byte gBattlescriptCurrInstr -_0801F5EC: - ldr r4, _0801F60C @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _0801F610 @ =gUnknown_081D94B0 -_0801F5F8: - str r0, [r4] -_0801F5FA: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801F60C: .4byte gBattlescriptCurrInstr -_0801F610: .4byte gUnknown_081D94B0 - thumb_func_end sub_801E3EC - - thumb_func_start atk15_seteffectwithchancetarget -atk15_seteffectwithchancetarget: @ 801F614 - push {r4,lr} - ldr r2, _0801F640 @ =gBattleMons - ldr r0, _0801F644 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x20 - bne _0801F650 - ldr r2, _0801F648 @ =gBattleMoves - ldr r0, _0801F64C @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x5] - lsls r4, r0, 1 - b _0801F660 - .align 2, 0 -_0801F640: .4byte gBattleMons -_0801F644: .4byte gBankAttacker -_0801F648: .4byte gBattleMoves -_0801F64C: .4byte gCurrentMove -_0801F650: - ldr r2, _0801F680 @ =gBattleMoves - ldr r0, _0801F684 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r4, [r0, 0x5] -_0801F660: - ldr r3, _0801F688 @ =gBattleCommunication - ldrb r2, [r3, 0x3] - movs r0, 0x80 - ands r0, r2 - cmp r0, 0 - beq _0801F690 - ldr r0, _0801F68C @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0801F690 - movs r0, 0x7F - ands r0, r2 - strb r0, [r3, 0x3] - b _0801F6BE - .align 2, 0 -_0801F680: .4byte gBattleMoves -_0801F684: .4byte gCurrentMove -_0801F688: .4byte gBattleCommunication -_0801F68C: .4byte gBattleMoveFlags -_0801F690: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r4 - bhi _0801F6DA - ldr r0, _0801F6C8 @ =gBattleCommunication - ldrb r0, [r0, 0x3] - cmp r0, 0 - beq _0801F6DA - ldr r0, _0801F6CC @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0801F6DA - cmp r4, 0x63 - bls _0801F6D0 -_0801F6BE: - movs r0, 0 - movs r1, 0x80 - bl sub_801E3EC - b _0801F6E2 - .align 2, 0 -_0801F6C8: .4byte gBattleCommunication -_0801F6CC: .4byte gBattleMoveFlags -_0801F6D0: - movs r0, 0 - movs r1, 0 - bl sub_801E3EC - b _0801F6E2 -_0801F6DA: - ldr r1, _0801F6F8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_0801F6E2: - ldr r0, _0801F6FC @ =gBattleCommunication - movs r1, 0 - strb r1, [r0, 0x3] - ldr r0, _0801F700 @ =0x02000000 - ldr r2, _0801F704 @ =0x00016112 - adds r0, r2 - strb r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801F6F8: .4byte gBattlescriptCurrInstr -_0801F6FC: .4byte gBattleCommunication -_0801F700: .4byte 0x02000000 -_0801F704: .4byte 0x00016112 - thumb_func_end atk15_seteffectwithchancetarget - - thumb_func_start atk16_seteffectprimary -atk16_seteffectprimary: @ 801F708 - push {lr} - movs r0, 0x1 - movs r1, 0 - bl sub_801E3EC - pop {r0} - bx r0 - thumb_func_end atk16_seteffectprimary - - thumb_func_start atk17_seteffectsecondary -atk17_seteffectsecondary: @ 801F718 - push {lr} - movs r0, 0 - movs r1, 0 - bl sub_801E3EC - pop {r0} - bx r0 - thumb_func_end atk17_seteffectsecondary - - thumb_func_start atk18_status_effect_clear -atk18_status_effect_clear: @ 801F728 - push {lr} - ldr r0, _0801F74C @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r2, _0801F750 @ =gActiveBank - strb r0, [r2] - ldr r3, _0801F754 @ =gBattleCommunication - ldrb r0, [r3, 0x3] - cmp r0, 0x6 - bhi _0801F75C - ldr r1, _0801F758 @ =gBattleMons - ldrb r2, [r2] - movs r0, 0x58 - muls r2, r0 - adds r1, 0x4C - b _0801F766 - .align 2, 0 -_0801F74C: .4byte gBattlescriptCurrInstr -_0801F750: .4byte gActiveBank -_0801F754: .4byte gBattleCommunication -_0801F758: .4byte gBattleMons -_0801F75C: - ldr r1, _0801F794 @ =gBattleMons - ldrb r2, [r2] - movs r0, 0x58 - muls r2, r0 - adds r1, 0x50 -_0801F766: - adds r2, r1 - ldr r1, _0801F798 @ =gStatusFlagsForMoveEffects - ldrb r0, [r3, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - ldr r0, _0801F79C @ =gBattleCommunication - movs r2, 0 - strb r2, [r0, 0x3] - ldr r1, _0801F7A0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - ldr r0, _0801F7A4 @ =0x02000000 - ldr r1, _0801F7A8 @ =0x00016112 - adds r0, r1 - strb r2, [r0] - pop {r0} - bx r0 - .align 2, 0 -_0801F794: .4byte gBattleMons -_0801F798: .4byte gStatusFlagsForMoveEffects -_0801F79C: .4byte gBattleCommunication -_0801F7A0: .4byte gBattlescriptCurrInstr -_0801F7A4: .4byte 0x02000000 -_0801F7A8: .4byte 0x00016112 - thumb_func_end atk18_status_effect_clear - - thumb_func_start atk19_faint_pokemon -atk19_faint_pokemon: @ 801F7AC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _0801F81C @ =gBattlescriptCurrInstr - ldr r2, [r0] - ldrb r1, [r2, 0x2] - adds r6, r0, 0 - cmp r1, 0 - beq _0801F834 - ldrb r0, [r2, 0x1] - bl sub_8015150 - ldr r5, _0801F820 @ =gActiveBank - strb r0, [r5] - ldr r2, _0801F824 @ =gHitMarker - ldr r1, _0801F828 @ =gBitTable - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - ands r0, r1 - cmp r0, 0 - bne _0801F7E6 - b _0801FB1C -_0801F7E6: - ldr r1, [r6] - ldrb r4, [r1, 0x3] - ldrb r0, [r1, 0x4] - lsls r0, 8 - orrs r4, r0 - ldrb r0, [r1, 0x5] - lsls r0, 16 - orrs r4, r0 - ldrb r0, [r1, 0x6] - lsls r0, 24 - orrs r4, r0 - bl b_movescr_stack_pop_cursor - str r4, [r6] - ldrb r0, [r5] - bl GetBankSide - ldr r1, _0801F82C @ =gSideAffecting - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - ldrh r2, [r0] - ldr r1, _0801F830 @ =0x0000fdff - ands r1, r2 - strh r1, [r0] - b _0801FB22 - .align 2, 0 -_0801F81C: .4byte gBattlescriptCurrInstr -_0801F820: .4byte gActiveBank -_0801F824: .4byte gHitMarker -_0801F828: .4byte gBitTable -_0801F82C: .4byte gSideAffecting -_0801F830: .4byte 0x0000fdff -_0801F834: - ldrb r0, [r2, 0x1] - cmp r0, 0x1 - bne _0801F85C - ldr r1, _0801F84C @ =gActiveBank - ldr r0, _0801F850 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _0801F854 @ =gBankTarget - ldrb r7, [r0] - ldr r4, _0801F858 @ =gUnknown_081D8C58 - b _0801F86A - .align 2, 0 -_0801F84C: .4byte gActiveBank -_0801F850: .4byte gBankAttacker -_0801F854: .4byte gBankTarget -_0801F858: .4byte gUnknown_081D8C58 -_0801F85C: - ldr r1, _0801F954 @ =gActiveBank - ldr r0, _0801F958 @ =gBankTarget - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _0801F95C @ =gBankAttacker - ldrb r7, [r0] - ldr r4, _0801F960 @ =gUnknown_081D8C65 -_0801F86A: - ldr r0, _0801F964 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r0, _0801F968 @ =gBitTable - mov r12, r0 - ldr r2, _0801F954 @ =gActiveBank - mov r8, r2 - ldrb r2, [r2] - lsls r0, r2, 2 - add r0, r12 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0801F886 - b _0801FB1C -_0801F886: - ldr r3, _0801F96C @ =gBattleMons - mov r10, r3 - movs r5, 0x58 - mov r9, r5 - mov r0, r9 - muls r0, r2 - add r0, r10 - ldrh r3, [r0, 0x28] - cmp r3, 0 - beq _0801F89C - b _0801FB1C -_0801F89C: - ldr r2, _0801F970 @ =0x02000000 - lsls r1, r7, 1 - ldr r5, _0801F974 @ =0x000160ac - adds r0, r1, r5 - adds r0, r2 - strb r3, [r0] - ldr r0, _0801F978 @ =0x000160ad - adds r1, r0 - adds r1, r2 - strb r3, [r1] - lsls r1, r7, 2 - adds r5, 0x54 - adds r0, r1, r5 - adds r0, r2 - strb r3, [r0] - adds r5, 0x1 - adds r0, r1, r5 - adds r0, r2 - strb r3, [r0] - adds r5, 0x1 - adds r0, r1, r5 - adds r0, r2 - strb r3, [r0] - ldr r0, _0801F97C @ =0x00016103 - adds r1, r0 - adds r1, r2 - strb r3, [r1] - ldr r5, _0801F980 @ =gHitMarker - mov r1, r8 - ldrb r0, [r1] - lsls r0, 2 - add r0, r12 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r5] - orrs r0, r1 - str r0, [r5] - ldr r0, [r6] - adds r0, 0x7 - bl b_movescr_stack_push - str r4, [r6] - mov r2, r8 - ldrb r0, [r2] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0801F9B0 - ldr r0, [r5] - movs r1, 0x80 - lsls r1, 15 - orrs r0, r1 - str r0, [r5] - ldr r1, _0801F984 @ =gBattleResults - ldrb r0, [r1] - cmp r0, 0xFE - bhi _0801F914 - adds r0, 0x1 - strb r0, [r1] -_0801F914: - mov r0, r9 - muls r0, r7 - add r0, r10 - adds r3, r0, 0 - adds r3, 0x2A - mov r4, r8 - ldrb r2, [r4] - mov r0, r9 - muls r0, r2 - add r0, r10 - adds r1, r0, 0 - adds r1, 0x2A - ldrb r0, [r3] - ldrb r5, [r1] - cmp r0, r5 - bls _0801F9CC - ldrb r1, [r1] - subs r0, r1 - cmp r0, 0x1D - ble _0801F990 - ldr r1, _0801F988 @ =gBattlePartyID - lsls r0, r2, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0801F98C @ =gPlayerParty - adds r0, r1 - movs r1, 0x8 - bl AdjustFriendship - b _0801F9CC - .align 2, 0 -_0801F954: .4byte gActiveBank -_0801F958: .4byte gBankTarget -_0801F95C: .4byte gBankAttacker -_0801F960: .4byte gUnknown_081D8C65 -_0801F964: .4byte gAbsentBankFlags -_0801F968: .4byte gBitTable -_0801F96C: .4byte gBattleMons -_0801F970: .4byte 0x02000000 -_0801F974: .4byte 0x000160ac -_0801F978: .4byte 0x000160ad -_0801F97C: .4byte 0x00016103 -_0801F980: .4byte gHitMarker -_0801F984: .4byte gBattleResults -_0801F988: .4byte gBattlePartyID -_0801F98C: .4byte gPlayerParty -_0801F990: - ldr r1, _0801F9A8 @ =gBattlePartyID - lsls r0, r2, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0801F9AC @ =gPlayerParty - adds r0, r1 - movs r1, 0x6 - bl AdjustFriendship - b _0801F9CC - .align 2, 0 -_0801F9A8: .4byte gBattlePartyID -_0801F9AC: .4byte gPlayerParty -_0801F9B0: - ldr r1, _0801FAE0 @ =gBattleResults - ldrb r0, [r1, 0x1] - cmp r0, 0xFE - bhi _0801F9BC - adds r0, 0x1 - strb r0, [r1, 0x1] -_0801F9BC: - ldr r2, _0801FAE4 @ =gActiveBank - ldrb r0, [r2] - mov r3, r9 - muls r3, r0 - adds r0, r3, 0 - add r0, r10 - ldrh r0, [r0] - strh r0, [r1, 0x20] -_0801F9CC: - ldr r0, _0801FAE8 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0801FA02 - ldr r6, _0801FAEC @ =gBattleMons - ldr r0, _0801FAF0 @ =gBankAttacker - ldrb r0, [r0] - movs r5, 0x58 - muls r0, r5 - adds r0, r6 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _0801FA02 - ldr r4, _0801FAF4 @ =gBattlescriptCurrInstr - ldr r0, [r4] - bl b_movescr_stack_push - ldr r1, _0801FAF8 @ =gBattleMoveDamage - adds r0, r7, 0 - muls r0, r5 - adds r0, r6 - ldrh r0, [r0, 0x28] - str r0, [r1] - ldr r0, _0801FAFC @ =gUnknown_081D9156 - str r0, [r4] -_0801FA02: - ldr r1, _0801FB00 @ =gStatuses3 - ldr r6, _0801FB04 @ =gBankTarget - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 7 - ands r0, r1 - cmp r0, 0 - bne _0801FA1A - b _0801FB22 -_0801FA1A: - ldr r0, _0801FAE8 @ =gHitMarker - ldr r5, [r0] - movs r0, 0x80 - lsls r0, 17 - ands r5, r0 - cmp r5, 0 - bne _0801FB22 - ldr r4, _0801FAF0 @ =gBankAttacker - mov r8, r4 - ldrb r0, [r4] - bl GetBankSide - adds r4, r0, 0 - ldrb r0, [r6] - bl GetBankSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _0801FB22 - ldr r0, _0801FAEC @ =gBattleMons - mov r9, r0 - mov r1, r8 - ldrb r2, [r1] - movs r7, 0x58 - adds r3, r2, 0 - muls r3, r7 - adds r0, r3, r0 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _0801FB22 - ldr r0, _0801FB08 @ =gCurrentMove - ldrh r0, [r0] - cmp r0, 0xA5 - beq _0801FB22 - ldr r1, _0801FB0C @ =0x02000000 - ldr r4, _0801FB10 @ =0x0001608c - adds r0, r2, r4 - adds r0, r1 - ldrb r4, [r0] - adds r0, r4, r3 - mov r6, r9 - adds r6, 0x24 - adds r0, r6 - strb r5, [r0] - ldr r5, _0801FAF4 @ =gBattlescriptCurrInstr - ldr r0, [r5] - bl b_movescr_stack_push - ldr r0, _0801FB14 @ =gUnknown_081D9468 - str r0, [r5] - ldr r5, _0801FAE4 @ =gActiveBank - mov r1, r8 - ldrb r0, [r1] - strb r0, [r5] - adds r1, r4, 0 - adds r1, 0x9 - lsls r1, 24 - lsrs r1, 24 - ldrb r0, [r5] - muls r0, r7 - adds r0, r6 - adds r0, r4 - str r0, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0x1 - bl EmitSetAttributes - ldrb r0, [r5] - bl MarkBufferBankForExecution - ldr r1, _0801FB18 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - lsls r4, 1 - mov r2, r8 - ldrb r0, [r2] - muls r0, r7 - adds r0, r4, r0 - mov r2, r9 - adds r2, 0xC - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1, 0x2] - mov r3, r8 - ldrb r0, [r3] - muls r0, r7 - adds r4, r0 - adds r4, r2 - ldrh r0, [r4] - lsrs r0, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - b _0801FB22 - .align 2, 0 -_0801FAE0: .4byte gBattleResults -_0801FAE4: .4byte gActiveBank -_0801FAE8: .4byte gHitMarker -_0801FAEC: .4byte gBattleMons -_0801FAF0: .4byte gBankAttacker -_0801FAF4: .4byte gBattlescriptCurrInstr -_0801FAF8: .4byte gBattleMoveDamage -_0801FAFC: .4byte gUnknown_081D9156 -_0801FB00: .4byte gStatuses3 -_0801FB04: .4byte gBankTarget -_0801FB08: .4byte gCurrentMove -_0801FB0C: .4byte 0x02000000 -_0801FB10: .4byte 0x0001608c -_0801FB14: .4byte gUnknown_081D9468 -_0801FB18: .4byte gBattleTextBuff1 -_0801FB1C: - ldr r0, [r6] - adds r0, 0x7 - str r0, [r6] -_0801FB22: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk19_faint_pokemon - - thumb_func_start atk1A_faint_animation -atk1A_faint_animation: @ 801FB34 - push {r4,r5,lr} - ldr r0, _0801FB64 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0801FB5E - ldr r5, _0801FB68 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _0801FB6C @ =gActiveBank - strb r0, [r4] - movs r0, 0 - bl EmitFaintAnimation - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] -_0801FB5E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801FB64: .4byte gBattleExecBuffer -_0801FB68: .4byte gBattlescriptCurrInstr -_0801FB6C: .4byte gActiveBank - thumb_func_end atk1A_faint_animation - - thumb_func_start atk1B_faint_effects_clear -atk1B_faint_effects_clear: @ 801FB70 - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _0801FBC4 @ =gBattleExecBuffer - ldr r6, [r0] - cmp r6, 0 - bne _0801FBBC - ldr r5, _0801FBC8 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _0801FBCC @ =gActiveBank - strb r0, [r4] - ldr r1, _0801FBD0 @ =gBattleMons - ldrb r0, [r4] - movs r2, 0x58 - muls r0, r2 - adds r1, 0x4C - adds r0, r1 - str r6, [r0] - ldrb r0, [r4] - muls r0, r2 - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x28 - movs r2, 0 - movs r3, 0x4 - bl EmitSetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution - bl UndoEffectsAfterFainting - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] -_0801FBBC: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0801FBC4: .4byte gBattleExecBuffer -_0801FBC8: .4byte gBattlescriptCurrInstr -_0801FBCC: .4byte gActiveBank -_0801FBD0: .4byte gBattleMons - thumb_func_end atk1B_faint_effects_clear - - thumb_func_start atk1C_jumpifstatus -atk1C_jumpifstatus: @ 801FBD4 - push {r4,r5,lr} - ldr r5, _0801FC30 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r5] - ldrb r4, [r2, 0x2] - ldrb r1, [r2, 0x3] - lsls r1, 8 - adds r4, r1 - ldrb r1, [r2, 0x4] - lsls r1, 16 - adds r4, r1 - ldrb r1, [r2, 0x5] - lsls r1, 24 - adds r4, r1 - ldrb r3, [r2, 0x6] - ldrb r1, [r2, 0x7] - lsls r1, 8 - adds r3, r1 - ldrb r1, [r2, 0x8] - lsls r1, 16 - adds r3, r1 - ldrb r1, [r2, 0x9] - lsls r1, 24 - adds r3, r1 - ldr r2, _0801FC34 @ =gBattleMons - movs r1, 0x58 - muls r1, r0 - adds r0, r2, 0 - adds r0, 0x4C - adds r0, r1, r0 - ldr r0, [r0] - ands r0, r4 - cmp r0, 0 - beq _0801FC38 - adds r0, r1, r2 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _0801FC38 - str r3, [r5] - b _0801FC40 - .align 2, 0 -_0801FC30: .4byte gBattlescriptCurrInstr -_0801FC34: .4byte gBattleMons -_0801FC38: - ldr r1, _0801FC48 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0xA - str r0, [r1] -_0801FC40: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801FC48: .4byte gBattlescriptCurrInstr - thumb_func_end atk1C_jumpifstatus - - thumb_func_start atk1D_jumpifstatus2 -atk1D_jumpifstatus2: @ 801FC4C - push {r4,r5,lr} - ldr r5, _0801FCA8 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r5] - ldrb r4, [r2, 0x2] - ldrb r1, [r2, 0x3] - lsls r1, 8 - adds r4, r1 - ldrb r1, [r2, 0x4] - lsls r1, 16 - adds r4, r1 - ldrb r1, [r2, 0x5] - lsls r1, 24 - adds r4, r1 - ldrb r3, [r2, 0x6] - ldrb r1, [r2, 0x7] - lsls r1, 8 - adds r3, r1 - ldrb r1, [r2, 0x8] - lsls r1, 16 - adds r3, r1 - ldrb r1, [r2, 0x9] - lsls r1, 24 - adds r3, r1 - ldr r2, _0801FCAC @ =gBattleMons - movs r1, 0x58 - muls r1, r0 - adds r0, r2, 0 - adds r0, 0x50 - adds r0, r1, r0 - ldr r0, [r0] - ands r0, r4 - cmp r0, 0 - beq _0801FCB0 - adds r0, r1, r2 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _0801FCB0 - str r3, [r5] - b _0801FCB8 - .align 2, 0 -_0801FCA8: .4byte gBattlescriptCurrInstr -_0801FCAC: .4byte gBattleMons -_0801FCB0: - ldr r1, _0801FCC0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0xA - str r0, [r1] -_0801FCB8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801FCC0: .4byte gBattlescriptCurrInstr - thumb_func_end atk1D_jumpifstatus2 - - thumb_func_start atk1E_jumpifability -atk1E_jumpifability: @ 801FCC4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - ldr r6, _0801FD18 @ =gBattlescriptCurrInstr - ldr r2, [r6] - ldrb r5, [r2, 0x2] - mov r8, r5 - ldrb r1, [r2, 0x3] - ldrb r0, [r2, 0x4] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x6] - lsls r0, 24 - adds r7, r1, r0 - ldrb r0, [r2, 0x1] - cmp r0, 0x8 - bne _0801FD24 - ldr r0, _0801FD1C @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0xD - adds r2, r5, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _0801FDA0 - ldr r1, _0801FD20 @ =gLastUsedAbility - strb r5, [r1] - str r7, [r6] - subs r4, 0x1 - lsls r0, r4, 24 - lsrs r0, 24 - ldrb r1, [r1] - b _0801FD80 - .align 2, 0 -_0801FD18: .4byte gBattlescriptCurrInstr -_0801FD1C: .4byte gBankAttacker -_0801FD20: .4byte gLastUsedAbility -_0801FD24: - cmp r0, 0x9 - bne _0801FD5C - ldr r0, _0801FD54 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0xC - adds r2, r5, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _0801FDA0 - ldr r1, _0801FD58 @ =gLastUsedAbility - strb r5, [r1] - str r7, [r6] - subs r4, 0x1 - lsls r0, r4, 24 - lsrs r0, 24 - ldrb r1, [r1] - b _0801FD80 - .align 2, 0 -_0801FD54: .4byte gBankAttacker -_0801FD58: .4byte gLastUsedAbility -_0801FD5C: - ldrb r0, [r2, 0x1] - bl sub_8015150 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _0801FD90 @ =gBattleMons - movs r0, 0x58 - muls r0, r4 - adds r0, r1 - adds r0, 0x20 - ldrb r1, [r0] - cmp r1, r8 - bne _0801FDA0 - ldr r0, _0801FD94 @ =gLastUsedAbility - strb r1, [r0] - str r7, [r6] - ldrb r1, [r0] - adds r0, r4, 0 -_0801FD80: - bl RecordAbilityBattle - ldr r0, _0801FD98 @ =0x02000000 - ldr r1, _0801FD9C @ =0x000160f8 - adds r0, r1 - strb r4, [r0] - b _0801FDA6 - .align 2, 0 -_0801FD90: .4byte gBattleMons -_0801FD94: .4byte gLastUsedAbility -_0801FD98: .4byte 0x02000000 -_0801FD9C: .4byte 0x000160f8 -_0801FDA0: - ldr r0, [r6] - adds r0, 0x7 - str r0, [r6] -_0801FDA6: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk1E_jumpifability - - thumb_func_start atk1F_jumpifsideaffecting -atk1F_jumpifsideaffecting: @ 801FDB4 - push {r4-r6,lr} - ldr r0, _0801FDCC @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r4, [r0, 0x1] - cmp r4, 0x1 - bne _0801FDD4 - ldr r0, _0801FDD0 @ =gBankAttacker - ldrb r0, [r0] - bl GetBankIdentity - b _0801FDDE - .align 2, 0 -_0801FDCC: .4byte gBattlescriptCurrInstr -_0801FDD0: .4byte gBankAttacker -_0801FDD4: - ldr r0, _0801FE14 @ =gBankTarget - ldrb r0, [r0] - bl GetBankIdentity - movs r4, 0x1 -_0801FDDE: - ands r4, r0 - ldr r6, _0801FE18 @ =gBattlescriptCurrInstr - ldr r3, [r6] - ldrb r2, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r2, r0 - ldrb r1, [r3, 0x4] - ldrb r0, [r3, 0x5] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r3, 0x7] - lsls r0, 24 - adds r5, r1, r0 - ldr r1, _0801FE1C @ =gSideAffecting - lsls r0, r4, 1 - adds r0, r1 - ldrh r0, [r0] - ands r2, r0 - cmp r2, 0 - beq _0801FE20 - str r5, [r6] - b _0801FE26 - .align 2, 0 -_0801FE14: .4byte gBankTarget -_0801FE18: .4byte gBattlescriptCurrInstr -_0801FE1C: .4byte gSideAffecting -_0801FE20: - adds r0, r3, 0 - adds r0, 0x8 - str r0, [r6] -_0801FE26: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk1F_jumpifsideaffecting - - thumb_func_start atk20_jumpifstat -atk20_jumpifstat: @ 801FE2C - push {r4,r5,lr} - movs r5, 0 - ldr r4, _0801FE60 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0801FE64 @ =gBattleMons - ldr r3, [r4] - movs r1, 0x58 - muls r0, r1 - ldrb r1, [r3, 0x3] - adds r0, r1 - adds r2, 0x18 - adds r0, r2 - ldrb r2, [r0] - ldrb r0, [r3, 0x2] - cmp r0, 0x5 - bhi _0801FEEA - lsls r0, 2 - ldr r1, _0801FE68 @ =_0801FE6C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801FE60: .4byte gBattlescriptCurrInstr -_0801FE64: .4byte gBattleMons -_0801FE68: .4byte _0801FE6C - .align 2, 0 -_0801FE6C: - .4byte _0801FE84 - .4byte _0801FE94 - .4byte _0801FEA4 - .4byte _0801FEB4 - .4byte _0801FEC4 - .4byte _0801FED8 -_0801FE84: - ldr r0, _0801FE90 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r2, r0 - bne _0801FEEA - b _0801FEE4 - .align 2, 0 -_0801FE90: .4byte gBattlescriptCurrInstr -_0801FE94: - ldr r0, _0801FEA0 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r2, r0 - beq _0801FEEA - b _0801FEE4 - .align 2, 0 -_0801FEA0: .4byte gBattlescriptCurrInstr -_0801FEA4: - ldr r0, _0801FEB0 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r2, r0 - bls _0801FEEA - b _0801FEE4 - .align 2, 0 -_0801FEB0: .4byte gBattlescriptCurrInstr -_0801FEB4: - ldr r0, _0801FEC0 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r2, r0 - bcs _0801FEEA - b _0801FEE4 - .align 2, 0 -_0801FEC0: .4byte gBattlescriptCurrInstr -_0801FEC4: - ldr r0, _0801FED4 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x4] - ands r2, r0 - cmp r2, 0 - beq _0801FEEA - b _0801FEE4 - .align 2, 0 -_0801FED4: .4byte gBattlescriptCurrInstr -_0801FED8: - ldr r0, _0801FF0C @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x4] - ands r2, r0 - cmp r2, 0 - bne _0801FEEA -_0801FEE4: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_0801FEEA: - cmp r5, 0 - beq _0801FF10 - ldr r3, _0801FF0C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x5] - ldrb r0, [r2, 0x6] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x7] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x8] - lsls r0, 24 - adds r1, r0 - str r1, [r3] - b _0801FF18 - .align 2, 0 -_0801FF0C: .4byte gBattlescriptCurrInstr -_0801FF10: - ldr r1, _0801FF20 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x9 - str r0, [r1] -_0801FF18: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801FF20: .4byte gBattlescriptCurrInstr - thumb_func_end atk20_jumpifstat - - thumb_func_start atk21_jumpifstatus3 -atk21_jumpifstatus3: @ 801FF24 - push {r4-r6,lr} - ldr r4, _0801FF78 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r5, _0801FF7C @ =gActiveBank - strb r0, [r5] - ldr r2, [r4] - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 24 - adds r6, r1, r0 - ldrb r1, [r2, 0x7] - ldrb r0, [r2, 0x8] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x9] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0xA] - lsls r0, 24 - adds r3, r1, r0 - ldrb r0, [r2, 0x6] - cmp r0, 0 - beq _0801FF84 - ldr r0, _0801FF80 @ =gStatuses3 - ldrb r1, [r5] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - ands r0, r6 - cmp r0, 0 - bne _0801FF9C - b _0801FF94 - .align 2, 0 -_0801FF78: .4byte gBattlescriptCurrInstr -_0801FF7C: .4byte gActiveBank -_0801FF80: .4byte gStatuses3 -_0801FF84: - ldr r0, _0801FF98 @ =gStatuses3 - ldrb r1, [r5] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - ands r0, r6 - cmp r0, 0 - beq _0801FF9C -_0801FF94: - str r3, [r4] - b _0801FFA2 - .align 2, 0 -_0801FF98: .4byte gStatuses3 -_0801FF9C: - adds r0, r2, 0 - adds r0, 0xB - str r0, [r4] -_0801FFA2: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk21_jumpifstatus3 - - thumb_func_start atk22_jumpiftype -atk22_jumpiftype: @ 801FFA8 - push {r4-r6,lr} - ldr r4, _0801FFF0 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - lsls r0, 24 - lsrs r0, 24 - ldr r3, [r4] - ldrb r5, [r3, 0x2] - ldrb r2, [r3, 0x3] - ldrb r1, [r3, 0x4] - lsls r1, 8 - adds r2, r1 - ldrb r1, [r3, 0x5] - lsls r1, 16 - adds r2, r1 - ldrb r1, [r3, 0x6] - lsls r1, 24 - adds r6, r2, r1 - ldr r2, _0801FFF4 @ =gBattleMons - movs r1, 0x58 - muls r0, r1 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, r5 - beq _0801FFEC - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, r5 - bne _0801FFF8 -_0801FFEC: - str r6, [r4] - b _0801FFFC - .align 2, 0 -_0801FFF0: .4byte gBattlescriptCurrInstr -_0801FFF4: .4byte gBattleMons -_0801FFF8: - adds r0, r3, 0x7 - str r0, [r4] -_0801FFFC: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk22_jumpiftype - - thumb_func_start atk23_getexp -atk23_getexp: @ 8020004 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r6, 0 - ldr r0, _0802004C @ =0x0201605c - mov r10, r0 - ldr r0, _08020050 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r1, _08020054 @ =gBank1 - strb r0, [r1] - ldr r2, _08020058 @ =gSentPokesToOpponent - movs r1, 0x2 - ands r1, r0 - lsls r1, 24 - lsrs r1, 25 - adds r1, r2 - ldrb r1, [r1] - mov r8, r1 - mov r0, r10 - subs r0, 0x4D - ldrb r0, [r0] - cmp r0, 0x6 - bls _08020040 - bl _08020996 -_08020040: - lsls r0, 2 - ldr r1, _0802005C @ =_08020060 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802004C: .4byte 0x0201605c -_08020050: .4byte gBattlescriptCurrInstr -_08020054: .4byte gBank1 -_08020058: .4byte gSentPokesToOpponent -_0802005C: .4byte _08020060 - .align 2, 0 -_08020060: - .4byte _0802007C - .4byte _080200FC - .4byte _08020216 - .4byte _0802055C - .4byte _08020648 - .4byte _08020910 - .4byte _0802096C -_0802007C: - ldr r4, _080200A8 @ =gBank1 - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08020098 - ldr r0, _080200AC @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _080200B0 @ =0x00000982 - ands r0, r1 - cmp r0, 0 - beq _080200BC -_08020098: - ldr r0, _080200B4 @ =0x02000000 - ldr r1, _080200B8 @ =0x0001600f - adds r0, r1 - movs r1, 0x6 - strb r1, [r0] - bl _08020996 - .align 2, 0 -_080200A8: .4byte gBank1 -_080200AC: .4byte gBattleTypeFlags -_080200B0: .4byte 0x00000982 -_080200B4: .4byte 0x02000000 -_080200B8: .4byte 0x0001600f -_080200BC: - ldr r2, _080200E8 @ =0x02000000 - ldr r3, _080200EC @ =0x0001600f - adds r1, r2, r3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, _080200F0 @ =0x00016113 - adds r2, r0 - ldr r3, _080200F4 @ =gBitTable - ldr r1, _080200F8 @ =gBattlePartyID - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - bl _08020996 - .align 2, 0 -_080200E8: .4byte 0x02000000 -_080200EC: .4byte 0x0001600f -_080200F0: .4byte 0x00016113 -_080200F4: .4byte gBitTable -_080200F8: .4byte gBattlePartyID -_080200FC: - movs r5, 0 - movs r7, 0 - ldr r1, _08020150 @ =gSaveBlock1 + 0x3688 - mov r9, r1 -_08020104: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _08020154 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0802016A - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _0802016A - ldr r0, _08020158 @ =gBitTable - lsls r1, r7, 2 - adds r1, r0 - ldr r0, [r1] - mov r2, r8 - ands r0, r2 - cmp r0, 0 - beq _08020138 - adds r5, 0x1 -_08020138: - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xAF - bne _0802015C - mov r3, r9 - ldrb r4, [r3] - b _08020164 - .align 2, 0 -_08020150: .4byte gSaveBlock1 + 0x3688 -_08020154: .4byte gPlayerParty -_08020158: .4byte gBitTable -_0802015C: - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r4, r0, 24 -_08020164: - cmp r4, 0x19 - bne _0802016A - adds r6, 0x1 -_0802016A: - adds r7, 0x1 - cmp r7, 0x5 - ble _08020104 - ldr r3, _080201D0 @ =gBaseStats - ldr r2, _080201D4 @ =gBattleMons - ldr r0, _080201D8 @ =gBank1 - ldrb r1, [r0] - movs r0, 0x58 - muls r1, r0 - adds r1, r2 - ldrh r2, [r1] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r3 - ldrb r2, [r0, 0x9] - adds r1, 0x2A - ldrb r0, [r1] - muls r0, r2 - movs r1, 0x7 - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r6, 0 - beq _080201E0 - lsrs r4, r0, 17 - adds r0, r4, 0 - adds r1, r5, 0 - bl __divsi3 - mov r1, r10 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - bne _080201B6 - movs r0, 0x1 - strh r0, [r1] -_080201B6: - ldr r5, _080201DC @ =gExpShareExp - adds r0, r4, 0 - adds r1, r6, 0 - bl __divsi3 - strh r0, [r5] - lsls r0, 16 - cmp r0, 0 - bne _080201FA - movs r0, 0x1 - strh r0, [r5] - b _080201FA - .align 2, 0 -_080201D0: .4byte gBaseStats -_080201D4: .4byte gBattleMons -_080201D8: .4byte gBank1 -_080201DC: .4byte gExpShareExp -_080201E0: - adds r0, r1, 0 - adds r1, r5, 0 - bl __divsi3 - mov r2, r10 - strh r0, [r2] - lsls r0, 16 - cmp r0, 0 - bne _080201F6 - movs r0, 0x1 - strh r0, [r2] -_080201F6: - ldr r0, _08020248 @ =gExpShareExp - strh r6, [r0] -_080201FA: - ldr r1, _0802024C @ =0x02000000 - ldr r3, _08020250 @ =0x0001600f - adds r2, r1, r3 - ldrb r0, [r2] - adds r0, 0x1 - movs r3, 0 - strb r0, [r2] - ldr r2, _08020254 @ =0x00016018 - adds r0, r1, r2 - strb r3, [r0] - ldr r3, _08020258 @ =0x0001605f - adds r1, r3 - mov r0, r8 - strb r0, [r1] -_08020216: - ldr r0, _0802025C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _08020220 - b _08020996 -_08020220: - ldr r0, _0802024C @ =0x02000000 - ldr r1, _08020254 @ =0x00016018 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08020260 @ =gPlayerParty - adds r0, r1 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xAF - bne _0802026C - ldr r0, _08020264 @ =gSaveBlock1 - ldr r2, _08020268 @ =0x00003688 - adds r0, r2 - ldrb r4, [r0] - b _08020274 - .align 2, 0 -_08020248: .4byte gExpShareExp -_0802024C: .4byte 0x02000000 -_08020250: .4byte 0x0001600f -_08020254: .4byte 0x00016018 -_08020258: .4byte 0x0001605f -_0802025C: .4byte gBattleExecBuffer -_08020260: .4byte gPlayerParty -_08020264: .4byte gSaveBlock1 -_08020268: .4byte 0x00003688 -_0802026C: - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r4, r0, 24 -_08020274: - ldr r5, _08020294 @ =0x02000000 - cmp r4, 0x19 - beq _080202A0 - ldr r3, _08020298 @ =0x0001605f - adds r1, r5, r3 - ldrb r0, [r1] - movs r2, 0x1 - ands r2, r0 - cmp r2, 0 - bne _080202A0 - lsrs r0, 1 - strb r0, [r1] - ldr r0, _0802029C @ =0x0001600f - adds r1, r5, r0 - b _080202C8 - .align 2, 0 -_08020294: .4byte 0x02000000 -_08020298: .4byte 0x0001605f -_0802029C: .4byte 0x0001600f -_080202A0: - ldr r1, _080202D4 @ =0x00016018 - adds r0, r5, r1 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080202D8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x38 - bl GetMonData - cmp r0, 0x64 - bne _080202E8 - ldr r2, _080202DC @ =0x0001605f - adds r1, r5, r2 - ldrb r0, [r1] - lsrs r0, 1 - movs r2, 0 - strb r0, [r1] - ldr r3, _080202E0 @ =0x0001600f - adds r1, r5, r3 -_080202C8: - movs r0, 0x5 - strb r0, [r1] - ldr r0, _080202E4 @ =gBattleMoveDamage - str r2, [r0] - b _08020996 - .align 2, 0 -_080202D4: .4byte 0x00016018 -_080202D8: .4byte gPlayerParty -_080202DC: .4byte 0x0001605f -_080202E0: .4byte 0x0001600f -_080202E4: .4byte gBattleMoveDamage -_080202E8: - ldr r0, _0802034C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08020316 - ldr r0, _08020350 @ =gBattleMons - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _08020316 - ldr r0, _08020354 @ =0x0001601b - adds r5, r0 - ldrb r0, [r5] - cmp r0, 0 - bne _08020316 - bl sub_80325B8 - ldr r0, _08020358 @ =0x00000161 - bl PlayBGM - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] -_08020316: - ldr r5, _0802035C @ =0x02000000 - ldr r1, _08020360 @ =0x00016018 - adds r0, r5, r1 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08020364 @ =gPlayerParty - adds r0, r1 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - bne _08020332 - b _0802051E -_08020332: - ldr r2, _08020368 @ =0x0001605f - adds r0, r5, r2 - ldrb r0, [r0] - movs r3, 0x1 - ands r3, r0 - cmp r3, 0 - beq _08020370 - ldr r1, _0802036C @ =gBattleMoveDamage - mov r3, r10 - ldrh r0, [r3] - str r0, [r1] - mov r8, r1 - b _08020376 - .align 2, 0 -_0802034C: .4byte gBattleTypeFlags -_08020350: .4byte gBattleMons -_08020354: .4byte 0x0001601b -_08020358: .4byte 0x00000161 -_0802035C: .4byte 0x02000000 -_08020360: .4byte 0x00016018 -_08020364: .4byte gPlayerParty -_08020368: .4byte 0x0001605f -_0802036C: .4byte gBattleMoveDamage -_08020370: - ldr r0, _080203EC @ =gBattleMoveDamage - str r3, [r0] - mov r8, r0 -_08020376: - cmp r4, 0x19 - bne _08020386 - ldr r0, _080203F0 @ =gExpShareExp - ldrh r1, [r0] - mov r2, r8 - ldr r0, [r2] - adds r0, r1 - str r0, [r2] -_08020386: - cmp r4, 0x28 - bne _0802039C - mov r3, r8 - ldr r1, [r3] - movs r0, 0x96 - muls r0, r1 - movs r1, 0x64 - bl __divsi3 - mov r1, r8 - str r0, [r1] -_0802039C: - ldr r0, _080203F4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080203B8 - ldr r4, _080203EC @ =gBattleMoveDamage - ldr r1, [r4] - movs r0, 0x96 - muls r0, r1 - movs r1, 0x64 - bl __divsi3 - str r0, [r4] -_080203B8: - ldr r0, _080203F8 @ =0x02000000 - ldr r2, _080203FC @ =0x00016018 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08020400 @ =gPlayerParty - adds r0, r1 - bl IsTradedMon - lsls r0, 24 - cmp r0, 0 - beq _08020404 - ldr r4, _080203EC @ =gBattleMoveDamage - ldr r1, [r4] - movs r0, 0x96 - muls r0, r1 - movs r1, 0x64 - bl __divsi3 - str r0, [r4] - movs r7, 0xA5 - lsls r7, 1 - mov r8, r4 - b _0802040A - .align 2, 0 -_080203EC: .4byte gBattleMoveDamage -_080203F0: .4byte gExpShareExp -_080203F4: .4byte gBattleTypeFlags -_080203F8: .4byte 0x02000000 -_080203FC: .4byte 0x00016018 -_08020400: .4byte gPlayerParty -_08020404: - ldr r7, _0802043C @ =0x00000149 - ldr r3, _08020440 @ =gBattleMoveDamage - mov r8, r3 -_0802040A: - ldr r0, _08020444 @ =gBattleTypeFlags - ldrh r0, [r0] - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08020488 - ldr r1, _08020448 @ =gBattlePartyID - ldr r0, _0802044C @ =0x02000000 - ldr r3, _08020450 @ =0x00016018 - adds r2, r0, r3 - ldrh r1, [r1, 0x4] - adds r5, r0, 0 - ldr r4, _08020454 @ =gBitTable - ldr r3, _08020458 @ =gAbsentBankFlags - ldrb r2, [r2] - cmp r1, r2 - bne _08020460 - ldrb r1, [r3] - ldr r0, [r4, 0x8] - ands r1, r0 - cmp r1, 0 - bne _08020460 - ldr r0, _0802045C @ =0x000160a2 - adds r1, r5, r0 - b _0802047C - .align 2, 0 -_0802043C: .4byte 0x00000149 -_08020440: .4byte gBattleMoveDamage -_08020444: .4byte gBattleTypeFlags -_08020448: .4byte gBattlePartyID -_0802044C: .4byte 0x02000000 -_08020450: .4byte 0x00016018 -_08020454: .4byte gBitTable -_08020458: .4byte gAbsentBankFlags -_0802045C: .4byte 0x000160a2 -_08020460: - ldrb r2, [r3] - ldr r0, [r4] - ands r2, r0 - cmp r2, 0 - bne _08020478 - ldr r1, _08020474 @ =0x000160a2 - adds r0, r5, r1 - strb r2, [r0] - b _08020490 - .align 2, 0 -_08020474: .4byte 0x000160a2 -_08020478: - ldr r2, _08020484 @ =0x000160a2 - adds r1, r5, r2 -_0802047C: - movs r0, 0x2 - strb r0, [r1] - b _08020490 - .align 2, 0 -_08020484: .4byte 0x000160a2 -_08020488: - ldr r0, _08020530 @ =0x02000000 - ldr r3, _08020534 @ =0x000160a2 - adds r0, r3 - strb r1, [r0] -_08020490: - ldr r1, _08020538 @ =gBattleTextBuff1 - movs r3, 0 - movs r2, 0xFD - strb r2, [r1] - movs r5, 0x4 - strb r5, [r1, 0x1] - ldr r4, _08020530 @ =0x02000000 - ldr r0, _08020534 @ =0x000160a2 - adds r6, r4, r0 - ldrb r0, [r6] - strb r0, [r1, 0x2] - ldr r0, _0802053C @ =0x00016018 - adds r4, r0 - ldrb r0, [r4] - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _08020540 @ =gBattleTextBuff2 - strb r2, [r1] - strb r3, [r1, 0x1] - strb r7, [r1, 0x2] - movs r3, 0xFF - lsls r3, 8 - ands r7, r3 - asrs r0, r7, 8 - strb r0, [r1, 0x3] - movs r0, 0x1 - negs r0, r0 - strb r0, [r1, 0x4] - ldr r1, _08020544 @ =gBattleTextBuff3 - strb r2, [r1] - movs r0, 0x1 - strb r0, [r1, 0x1] - strb r5, [r1, 0x2] - movs r0, 0x5 - strb r0, [r1, 0x3] - mov r0, r8 - ldr r2, [r0] - strb r2, [r1, 0x4] - adds r0, r2, 0 - ands r0, r3 - asrs r0, 8 - strb r0, [r1, 0x5] - movs r0, 0xFF - lsls r0, 16 - ands r0, r2 - asrs r0, 16 - strb r0, [r1, 0x6] - lsrs r2, 24 - strb r2, [r1, 0x7] - movs r0, 0x1 - negs r0, r0 - strb r0, [r1, 0x8] - ldrb r1, [r6] - movs r0, 0xD - bl PrepareStringBattle - ldrb r1, [r4] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08020548 @ =gPlayerParty - adds r0, r1 - ldr r3, _0802054C @ =gBattleMons - ldr r1, _08020550 @ =gBank1 - ldrb r2, [r1] - movs r1, 0x58 - muls r1, r2 - adds r1, r3 - ldrh r1, [r1] - bl MonGainEVs -_0802051E: - ldr r1, _08020530 @ =0x02000000 - ldr r3, _08020554 @ =0x0001605f - adds r2, r1, r3 - ldrb r0, [r2] - lsrs r0, 1 - strb r0, [r2] - ldr r0, _08020558 @ =0x0001600f - adds r1, r0 - b _08020618 - .align 2, 0 -_08020530: .4byte 0x02000000 -_08020534: .4byte 0x000160a2 -_08020538: .4byte gBattleTextBuff1 -_0802053C: .4byte 0x00016018 -_08020540: .4byte gBattleTextBuff2 -_08020544: .4byte gBattleTextBuff3 -_08020548: .4byte gPlayerParty -_0802054C: .4byte gBattleMons -_08020550: .4byte gBank1 -_08020554: .4byte 0x0001605f -_08020558: .4byte 0x0001600f -_0802055C: - ldr r0, _08020620 @ =gBattleExecBuffer - ldr r2, [r0] - cmp r2, 0 - beq _08020566 - b _08020996 -_08020566: - ldr r1, _08020624 @ =gBattleBufferB - ldr r4, _08020628 @ =0x02000000 - ldr r3, _0802062C @ =0x000160a2 - adds r3, r4 - mov r8, r3 - ldrb r0, [r3] - lsls r0, 9 - adds r0, r1 - strb r2, [r0] - ldr r0, _08020630 @ =0x00016018 - adds r7, r4, r0 - ldrb r0, [r7] - movs r6, 0x64 - muls r0, r6 - ldr r5, _08020634 @ =gPlayerParty - adds r0, r5 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _08020612 - ldrb r0, [r7] - muls r0, r6 - adds r0, r5 - movs r1, 0x38 - bl GetMonData - cmp r0, 0x64 - beq _08020612 - ldrb r0, [r7] - muls r0, r6 - adds r0, r5 - movs r1, 0x3A - bl GetMonData - ldr r1, _08020638 @ =0x00017180 - adds r4, r1 - strh r0, [r4] - ldrb r0, [r7] - muls r0, r6 - adds r0, r5 - movs r1, 0x3B - bl GetMonData - strh r0, [r4, 0x2] - ldrb r0, [r7] - muls r0, r6 - adds r0, r5 - movs r1, 0x3C - bl GetMonData - strh r0, [r4, 0x4] - ldrb r0, [r7] - muls r0, r6 - adds r0, r5 - movs r1, 0x3D - bl GetMonData - strh r0, [r4, 0x6] - ldrb r0, [r7] - muls r0, r6 - adds r0, r5 - movs r1, 0x3E - bl GetMonData - strh r0, [r4, 0x8] - ldrb r0, [r7] - muls r0, r6 - adds r0, r5 - movs r1, 0x3F - bl GetMonData - strh r0, [r4, 0xA] - ldr r4, _0802063C @ =gActiveBank - mov r2, r8 - ldrb r0, [r2] - strb r0, [r4] - ldrb r1, [r7] - ldr r0, _08020640 @ =gBattleMoveDamage - ldrh r2, [r0] - movs r0, 0 - bl EmitExpBarUpdate - ldrb r0, [r4] - bl MarkBufferBankForExecution -_08020612: - ldr r1, _08020628 @ =0x02000000 - ldr r3, _08020644 @ =0x0001600f - adds r1, r3 -_08020618: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08020996 - .align 2, 0 -_08020620: .4byte gBattleExecBuffer -_08020624: .4byte gBattleBufferB -_08020628: .4byte 0x02000000 -_0802062C: .4byte 0x000160a2 -_08020630: .4byte 0x00016018 -_08020634: .4byte gPlayerParty -_08020638: .4byte 0x00017180 -_0802063C: .4byte gActiveBank -_08020640: .4byte gBattleMoveDamage -_08020644: .4byte 0x0001600f -_08020648: - ldr r0, _080208AC @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _08020652 - b _08020996 -_08020652: - ldr r1, _080208B0 @ =gActiveBank - ldr r4, _080208B4 @ =0x02000000 - ldr r2, _080208B8 @ =0x000160a2 - adds r0, r4, r2 - ldrb r0, [r0] - strb r0, [r1] - ldr r2, _080208BC @ =gBattleBufferB - ldrb r3, [r1] - lsls r1, r3, 9 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x21 - beq _0802066E - b _080208F0 -_0802066E: - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0xB - beq _0802067A - b _080208F0 -_0802067A: - ldr r0, _080208C0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080206A8 - ldr r1, _080208C4 @ =gBattlePartyID - lsls r0, r3, 1 - adds r2, r0, r1 - ldr r0, _080208C8 @ =0x00016018 - adds r1, r4, r0 - ldrh r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _080206A8 - adds r1, r0, 0 - movs r0, 0x64 - muls r0, r1 - ldr r1, _080208CC @ =gPlayerParty - adds r0, r1 - adds r1, r3, 0 - bl sub_80324F8 -_080206A8: - ldr r1, _080208D0 @ =gBattleTextBuff1 - movs r2, 0xFD - strb r2, [r1] - movs r0, 0x4 - strb r0, [r1, 0x1] - ldr r5, _080208B0 @ =gActiveBank - ldrb r0, [r5] - strb r0, [r1, 0x2] - ldr r0, _080208B4 @ =0x02000000 - ldr r3, _080208C8 @ =0x00016018 - adds r6, r0, r3 - ldrb r0, [r6] - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r4, _080208D4 @ =gBattleTextBuff2 - strb r2, [r4] - movs r0, 0x1 - strb r0, [r4, 0x1] - strb r0, [r4, 0x2] - movs r0, 0x3 - strb r0, [r4, 0x3] - ldrb r0, [r6] - movs r1, 0x64 - mov r8, r1 - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - ldr r7, _080208CC @ =gPlayerParty - adds r0, r7 - movs r1, 0x38 - bl GetMonData - strb r0, [r4, 0x4] - movs r0, 0x1 - negs r0, r0 - strb r0, [r4, 0x5] - bl b_movescr_stack_push_cursor - ldr r2, _080208D8 @ =gLeveledUpInBattle - ldr r1, _080208DC @ =gBitTable - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r1, _080208E0 @ =gBattlescriptCurrInstr - ldr r0, _080208E4 @ =BattleScript_LevelUp - str r0, [r1] - ldr r4, _080208E8 @ =gBattleMoveDamage - ldr r2, _080208BC @ =gBattleBufferB - ldrb r1, [r5] - lsls r1, 9 - adds r0, r2, 0x2 - adds r0, r1, r0 - ldrb r3, [r0] - adds r2, 0x3 - adds r1, r2 - ldrb r0, [r1] - lsls r0, 8 - orrs r3, r0 - str r3, [r4] - ldrb r0, [r6] - mov r3, r8 - muls r3, r0 - adds r0, r3, 0 - adds r0, r7 - movs r1, 0 - bl AdjustFriendship - ldr r0, _080208C4 @ =gBattlePartyID - ldrb r1, [r6] - ldrh r0, [r0] - cmp r0, r1 - bne _080207EC - ldr r4, _080208EC @ =gBattleMons - ldrh r0, [r4, 0x28] - cmp r0, 0 - beq _080207EC - mov r0, r8 - muls r0, r1 - adds r0, r7 - movs r1, 0x38 - bl GetMonData - adds r1, r4, 0 - adds r1, 0x2A - strb r0, [r1] - ldrb r0, [r6] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - movs r1, 0x39 - bl GetMonData - strh r0, [r4, 0x28] - ldrb r0, [r6] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - adds r0, r7 - movs r1, 0x3A - bl GetMonData - strh r0, [r4, 0x2C] - ldrb r0, [r6] - mov r3, r8 - muls r3, r0 - adds r0, r3, 0 - adds r0, r7 - movs r1, 0x3B - bl GetMonData - strh r0, [r4, 0x2] - ldrb r0, [r6] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - movs r1, 0x3C - bl GetMonData - strh r0, [r4, 0x4] - ldrb r0, [r6] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - adds r0, r7 - movs r1, 0x3D - bl GetMonData - strh r0, [r4, 0x6] - ldrb r0, [r6] - mov r3, r8 - muls r3, r0 - adds r0, r3, 0 - adds r0, r7 - movs r1, 0x3D - bl GetMonData - strh r0, [r4, 0x6] - ldrb r0, [r6] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - movs r1, 0x3E - bl GetMonData - strh r0, [r4, 0x8] - ldrb r0, [r6] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - adds r0, r7 - movs r1, 0x3F - bl GetMonData - strh r0, [r4, 0xA] -_080207EC: - ldr r0, _080208C4 @ =gBattlePartyID - ldr r1, _080208B4 @ =0x02000000 - ldr r3, _080208C8 @ =0x00016018 - adds r7, r1, r3 - ldrb r2, [r7] - ldrh r0, [r0, 0x4] - cmp r0, r2 - bne _080208F6 - ldr r6, _080208EC @ =gBattleMons - movs r0, 0xD8 - adds r0, r6 - mov r8, r0 - ldrh r0, [r0] - cmp r0, 0 - beq _080208F6 - ldr r0, _080208C0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080208F6 - movs r5, 0x64 - adds r0, r2, 0 - muls r0, r5 - ldr r4, _080208CC @ =gPlayerParty - adds r0, r4 - movs r1, 0x38 - bl GetMonData - adds r1, r6, 0 - adds r1, 0xDA - strb r0, [r1] - ldrb r0, [r7] - muls r0, r5 - adds r0, r4 - movs r1, 0x39 - bl GetMonData - mov r1, r8 - strh r0, [r1] - ldrb r0, [r7] - muls r0, r5 - adds r0, r4 - movs r1, 0x3A - bl GetMonData - adds r1, r6, 0 - adds r1, 0xDC - strh r0, [r1] - ldrb r0, [r7] - muls r0, r5 - adds r0, r4 - movs r1, 0x3B - bl GetMonData - adds r1, r6, 0 - adds r1, 0xB2 - strh r0, [r1] - ldrb r0, [r7] - muls r0, r5 - adds r0, r4 - movs r1, 0x3C - bl GetMonData - adds r1, r6, 0 - adds r1, 0xB4 - strh r0, [r1] - ldrb r0, [r7] - muls r0, r5 - adds r0, r4 - movs r1, 0x3D - bl GetMonData - movs r2, 0xB6 - adds r2, r6 - mov r8, r2 - strh r0, [r2] - ldrb r0, [r7] - muls r0, r5 - adds r0, r4 - movs r1, 0x3D - bl GetMonData - mov r3, r8 - strh r0, [r3] - ldrb r0, [r7] - muls r0, r5 - adds r0, r4 - movs r1, 0x3E - bl GetMonData - adds r1, r6, 0 - adds r1, 0xB8 - strh r0, [r1] - b _080208F6 - .align 2, 0 -_080208AC: .4byte gBattleExecBuffer -_080208B0: .4byte gActiveBank -_080208B4: .4byte 0x02000000 -_080208B8: .4byte 0x000160a2 -_080208BC: .4byte gBattleBufferB -_080208C0: .4byte gBattleTypeFlags -_080208C4: .4byte gBattlePartyID -_080208C8: .4byte 0x00016018 -_080208CC: .4byte gPlayerParty -_080208D0: .4byte gBattleTextBuff1 -_080208D4: .4byte gBattleTextBuff2 -_080208D8: .4byte gLeveledUpInBattle -_080208DC: .4byte gBitTable -_080208E0: .4byte gBattlescriptCurrInstr -_080208E4: .4byte BattleScript_LevelUp -_080208E8: .4byte gBattleMoveDamage -_080208EC: .4byte gBattleMons -_080208F0: - ldr r1, _08020904 @ =gBattleMoveDamage - movs r0, 0 - str r0, [r1] -_080208F6: - ldr r0, _08020908 @ =0x02000000 - ldr r1, _0802090C @ =0x0001600f - adds r0, r1 - movs r1, 0x5 - strb r1, [r0] - b _08020996 - .align 2, 0 -_08020904: .4byte gBattleMoveDamage -_08020908: .4byte 0x02000000 -_0802090C: .4byte 0x0001600f -_08020910: - ldr r0, _08020924 @ =gBattleMoveDamage - ldr r0, [r0] - cmp r0, 0 - beq _08020930 - ldr r0, _08020928 @ =0x02000000 - ldr r2, _0802092C @ =0x0001600f - adds r0, r2 - movs r1, 0x3 - strb r1, [r0] - b _08020996 - .align 2, 0 -_08020924: .4byte gBattleMoveDamage -_08020928: .4byte 0x02000000 -_0802092C: .4byte 0x0001600f -_08020930: - ldr r2, _08020950 @ =0x02000000 - ldr r3, _08020954 @ =0x00016018 - adds r1, r2, r3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bhi _0802095C - ldr r0, _08020958 @ =0x0001600f - adds r1, r2, r0 - movs r0, 0x2 - strb r0, [r1] - b _08020996 - .align 2, 0 -_08020950: .4byte 0x02000000 -_08020954: .4byte 0x00016018 -_08020958: .4byte 0x0001600f -_0802095C: - ldr r3, _08020968 @ =0x0001600f - adds r1, r2, r3 - movs r0, 0x6 - strb r0, [r1] - b _08020996 - .align 2, 0 -_08020968: .4byte 0x0001600f -_0802096C: - ldr r0, _080209A4 @ =gBattleExecBuffer - ldr r5, [r0] - cmp r5, 0 - bne _08020996 - ldr r4, _080209A8 @ =gBattleMons - ldr r2, _080209AC @ =gBank1 - ldrb r0, [r2] - movs r1, 0x58 - muls r0, r1 - adds r0, r4 - movs r3, 0 - strh r5, [r0, 0x2E] - ldrb r0, [r2] - muls r0, r1 - adds r0, r4 - adds r0, 0x20 - strb r3, [r0] - ldr r1, _080209B0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_08020996: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080209A4: .4byte gBattleExecBuffer -_080209A8: .4byte gBattleMons -_080209AC: .4byte gBank1 -_080209B0: .4byte gBattlescriptCurrInstr - thumb_func_end atk23_getexp - - thumb_func_start atk24 -atk24: @ 80209B4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0 - ldr r0, _08020AF0 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _080209C6 - b _08020B46 -_080209C6: - movs r5, 0 -_080209C8: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08020AF4 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _080209F8 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _080209F8 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - adds r0, r6, r0 - lsls r0, 16 - lsrs r6, r0, 16 -_080209F8: - adds r5, 0x1 - cmp r5, 0x5 - ble _080209C8 - cmp r6, 0 - bne _08020A0C - ldr r0, _08020AF8 @ =gBattleOutcome - ldrb r1, [r0] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0] -_08020A0C: - movs r6, 0 - movs r5, 0 -_08020A10: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08020AFC @ =gEnemyParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08020A40 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _08020A40 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - adds r0, r6, r0 - lsls r0, 16 - lsrs r6, r0, 16 -_08020A40: - adds r5, 0x1 - cmp r5, 0x5 - ble _08020A10 - ldr r2, _08020AF8 @ =gBattleOutcome - cmp r6, 0 - bne _08020A54 - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] -_08020A54: - ldrb r0, [r2] - cmp r0, 0 - bne _08020B3E - ldr r2, _08020B00 @ =gBattleTypeFlags - ldrh r1, [r2] - movs r0, 0x2 - ands r0, r1 - mov r8, r2 - cmp r0, 0 - beq _08020B3E - movs r2, 0 - movs r5, 0 - ldr r0, _08020B04 @ =gNoOfAllBanks - ldrb r3, [r0] - mov r12, r0 - ldr r7, _08020B08 @ =gBattlescriptCurrInstr - cmp r2, r3 - bge _08020AA0 - ldr r0, _08020B0C @ =gHitMarker - movs r1, 0x80 - lsls r1, 21 - ldr r6, [r0] - adds r4, r3, 0 - ldr r3, _08020B10 @ =gSpecialStatuses -_08020A84: - adds r0, r1, 0 - lsls r0, r5 - ands r0, r6 - cmp r0, 0 - beq _08020A98 - ldrb r0, [r3] - lsls r0, 25 - cmp r0, 0 - blt _08020A98 - adds r2, 0x1 -_08020A98: - adds r3, 0x28 - adds r5, 0x2 - cmp r5, r4 - blt _08020A84 -_08020AA0: - movs r4, 0 - movs r5, 0x1 - mov r0, r12 - ldrb r3, [r0] - cmp r5, r3 - bge _08020ADA - ldr r0, _08020B0C @ =gHitMarker - movs r1, 0x80 - lsls r1, 21 - mov r12, r1 - ldr r1, [r0] - ldr r0, _08020B10 @ =gSpecialStatuses - adds r6, r3, 0 - adds r3, r0, 0 - adds r3, 0x14 -_08020ABE: - mov r0, r12 - lsls r0, r5 - ands r0, r1 - cmp r0, 0 - beq _08020AD2 - ldrb r0, [r3] - lsls r0, 25 - cmp r0, 0 - blt _08020AD2 - adds r4, 0x1 -_08020AD2: - adds r3, 0x28 - adds r5, 0x2 - cmp r5, r6 - blt _08020ABE -_08020ADA: - mov r0, r8 - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08020B14 - adds r0, r4, r2 - cmp r0, 0x1 - bgt _08020B1C - b _08020B36 - .align 2, 0 -_08020AF0: .4byte gBattleExecBuffer -_08020AF4: .4byte gPlayerParty -_08020AF8: .4byte gBattleOutcome -_08020AFC: .4byte gEnemyParty -_08020B00: .4byte gBattleTypeFlags -_08020B04: .4byte gNoOfAllBanks -_08020B08: .4byte gBattlescriptCurrInstr -_08020B0C: .4byte gHitMarker -_08020B10: .4byte gSpecialStatuses -_08020B14: - cmp r4, 0 - beq _08020B36 - cmp r2, 0 - beq _08020B36 -_08020B1C: - ldr r2, [r7] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r1, r0 - str r1, [r7] - b _08020B46 -_08020B36: - ldr r0, [r7] - adds r0, 0x5 - str r0, [r7] - b _08020B46 -_08020B3E: - ldr r1, _08020B50 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08020B46: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08020B50: .4byte gBattlescriptCurrInstr - thumb_func_end atk24 - - thumb_func_start sub_8020B54 -sub_8020B54: @ 8020B54 - ldr r1, _08020B80 @ =gBattleMoveFlags - movs r0, 0 - strb r0, [r1] - ldr r0, _08020B84 @ =0x02000000 - ldr r1, _08020B88 @ =0x0001601f - adds r0, r1 - movs r2, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _08020B8C @ =gCritMultiplier - strb r1, [r0] - ldr r0, _08020B90 @ =gBattleCommunication - strb r2, [r0, 0x3] - strb r2, [r0, 0x6] - ldr r2, _08020B94 @ =gHitMarker - ldr r0, [r2] - subs r1, 0x42 - ands r0, r1 - ldr r1, _08020B98 @ =0xffffbfff - ands r0, r1 - str r0, [r2] - bx lr - .align 2, 0 -_08020B80: .4byte gBattleMoveFlags -_08020B84: .4byte 0x02000000 -_08020B88: .4byte 0x0001601f -_08020B8C: .4byte gCritMultiplier -_08020B90: .4byte gBattleCommunication -_08020B94: .4byte gHitMarker -_08020B98: .4byte 0xffffbfff - thumb_func_end sub_8020B54 - - thumb_func_start atk25_move_values_cleanup -atk25_move_values_cleanup: @ 8020B9C - push {lr} - bl sub_8020B54 - ldr r1, _08020BB0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08020BB0: .4byte gBattlescriptCurrInstr - thumb_func_end atk25_move_values_cleanup - - thumb_func_start atk26_set_multihit -atk26_set_multihit: @ 8020BB4 - ldr r3, _08020BC4 @ =gMultiHitCounter - ldr r2, _08020BC8 @ =gBattlescriptCurrInstr - ldr r0, [r2] - ldrb r1, [r0, 0x1] - strb r1, [r3] - adds r0, 0x2 - str r0, [r2] - bx lr - .align 2, 0 -_08020BC4: .4byte gMultiHitCounter -_08020BC8: .4byte gBattlescriptCurrInstr - thumb_func_end atk26_set_multihit - - thumb_func_start atk27_decrement_multihit -atk27_decrement_multihit: @ 8020BCC - push {lr} - ldr r1, _08020BE8 @ =gMultiHitCounter - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - lsls r0, 24 - cmp r0, 0 - bne _08020BF0 - ldr r1, _08020BEC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08020C0A - .align 2, 0 -_08020BE8: .4byte gMultiHitCounter -_08020BEC: .4byte gBattlescriptCurrInstr -_08020BF0: - ldr r3, _08020C10 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r1, r0 - str r1, [r3] -_08020C0A: - pop {r0} - bx r0 - .align 2, 0 -_08020C10: .4byte gBattlescriptCurrInstr - thumb_func_end atk27_decrement_multihit - - thumb_func_start atk28_goto -atk28_goto: @ 8020C14 - ldr r3, _08020C30 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r1, r0 - str r1, [r3] - bx lr - .align 2, 0 -_08020C30: .4byte gBattlescriptCurrInstr - thumb_func_end atk28_goto - - thumb_func_start atk29_jumpifbyte -atk29_jumpifbyte: @ 8020C34 - push {r4-r6,lr} - ldr r3, _08020C78 @ =gBattlescriptCurrInstr - ldr r1, [r3] - ldrb r6, [r1, 0x1] - ldrb r2, [r1, 0x2] - ldrb r0, [r1, 0x3] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0x5] - lsls r0, 24 - adds r5, r2, r0 - ldrb r4, [r1, 0x6] - ldrb r2, [r1, 0x7] - ldrb r0, [r1, 0x8] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x9] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0xA] - lsls r0, 24 - adds r2, r0 - adds r1, 0xB - str r1, [r3] - cmp r6, 0x5 - bhi _08020CCC - lsls r0, r6, 2 - ldr r1, _08020C7C @ =_08020C80 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020C78: .4byte gBattlescriptCurrInstr -_08020C7C: .4byte _08020C80 - .align 2, 0 -_08020C80: - .4byte _08020C98 - .4byte _08020CA0 - .4byte _08020CA8 - .4byte _08020CB0 - .4byte _08020CB8 - .4byte _08020CC2 -_08020C98: - ldrb r0, [r5] - cmp r0, r4 - bne _08020CCC - b _08020CCA -_08020CA0: - ldrb r0, [r5] - cmp r0, r4 - beq _08020CCC - b _08020CCA -_08020CA8: - ldrb r0, [r5] - cmp r0, r4 - bls _08020CCC - b _08020CCA -_08020CB0: - ldrb r0, [r5] - cmp r0, r4 - bcs _08020CCC - b _08020CCA -_08020CB8: - ldrb r0, [r5] - ands r4, r0 - cmp r4, 0 - beq _08020CCC - b _08020CCA -_08020CC2: - ldrb r0, [r5] - ands r4, r0 - cmp r4, 0 - bne _08020CCC -_08020CCA: - str r2, [r3] -_08020CCC: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk29_jumpifbyte - - thumb_func_start atk2A_jumpifhalfword -atk2A_jumpifhalfword: @ 8020CD4 - push {r4-r6,lr} - ldr r3, _08020D20 @ =gBattlescriptCurrInstr - ldr r1, [r3] - ldrb r6, [r1, 0x1] - ldrb r2, [r1, 0x2] - ldrb r0, [r1, 0x3] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0x5] - lsls r0, 24 - adds r5, r2, r0 - ldrb r4, [r1, 0x6] - ldrb r0, [r1, 0x7] - lsls r0, 8 - orrs r4, r0 - ldrb r2, [r1, 0x8] - ldrb r0, [r1, 0x9] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0xA] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0xB] - lsls r0, 24 - adds r2, r0 - adds r1, 0xC - str r1, [r3] - cmp r6, 0x5 - bhi _08020D74 - lsls r0, r6, 2 - ldr r1, _08020D24 @ =_08020D28 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020D20: .4byte gBattlescriptCurrInstr -_08020D24: .4byte _08020D28 - .align 2, 0 -_08020D28: - .4byte _08020D40 - .4byte _08020D48 - .4byte _08020D50 - .4byte _08020D58 - .4byte _08020D60 - .4byte _08020D6A -_08020D40: - ldrh r0, [r5] - cmp r0, r4 - bne _08020D74 - b _08020D72 -_08020D48: - ldrh r0, [r5] - cmp r0, r4 - beq _08020D74 - b _08020D72 -_08020D50: - ldrh r0, [r5] - cmp r0, r4 - bls _08020D74 - b _08020D72 -_08020D58: - ldrh r0, [r5] - cmp r0, r4 - bcs _08020D74 - b _08020D72 -_08020D60: - ldrh r0, [r5] - ands r4, r0 - cmp r4, 0 - beq _08020D74 - b _08020D72 -_08020D6A: - ldrh r0, [r5] - ands r4, r0 - cmp r4, 0 - bne _08020D74 -_08020D72: - str r2, [r3] -_08020D74: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk2A_jumpifhalfword - - thumb_func_start atk2B_jumpifword -atk2B_jumpifword: @ 8020D7C - push {r4-r6,lr} - ldr r3, _08020DD4 @ =gBattlescriptCurrInstr - ldr r1, [r3] - ldrb r6, [r1, 0x1] - ldrb r2, [r1, 0x2] - ldrb r0, [r1, 0x3] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0x5] - lsls r0, 24 - adds r5, r2, r0 - ldrb r4, [r1, 0x6] - ldrb r0, [r1, 0x7] - lsls r0, 8 - orrs r4, r0 - ldrb r0, [r1, 0x8] - lsls r0, 16 - orrs r4, r0 - ldrb r0, [r1, 0x9] - lsls r0, 24 - orrs r4, r0 - ldrb r2, [r1, 0xA] - ldrb r0, [r1, 0xB] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0xC] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0xD] - lsls r0, 24 - adds r2, r0 - adds r1, 0xE - str r1, [r3] - cmp r6, 0x5 - bhi _08020E28 - lsls r0, r6, 2 - ldr r1, _08020DD8 @ =_08020DDC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020DD4: .4byte gBattlescriptCurrInstr -_08020DD8: .4byte _08020DDC - .align 2, 0 -_08020DDC: - .4byte _08020DF4 - .4byte _08020DFC - .4byte _08020E04 - .4byte _08020E0C - .4byte _08020E14 - .4byte _08020E1E -_08020DF4: - ldr r0, [r5] - cmp r0, r4 - bne _08020E28 - b _08020E26 -_08020DFC: - ldr r0, [r5] - cmp r0, r4 - beq _08020E28 - b _08020E26 -_08020E04: - ldr r0, [r5] - cmp r0, r4 - bls _08020E28 - b _08020E26 -_08020E0C: - ldr r0, [r5] - cmp r0, r4 - bcs _08020E28 - b _08020E26 -_08020E14: - ldr r0, [r5] - ands r0, r4 - cmp r0, 0 - beq _08020E28 - b _08020E26 -_08020E1E: - ldr r0, [r5] - ands r0, r4 - cmp r0, 0 - bne _08020E28 -_08020E26: - str r2, [r3] -_08020E28: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk2B_jumpifword - - thumb_func_start atk2C_jumpifarrayequal -atk2C_jumpifarrayequal: @ 8020E30 - push {r4-r7,lr} - ldr r2, _08020E88 @ =gBattlescriptCurrInstr - ldr r3, [r2] - ldrb r1, [r3, 0x1] - ldrb r0, [r3, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r3, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 24 - adds r5, r1, r0 - ldrb r1, [r3, 0x5] - ldrb r0, [r3, 0x6] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r3, 0x7] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r3, 0x8] - lsls r0, 24 - adds r4, r1, r0 - ldrb r6, [r3, 0x9] - ldrb r1, [r3, 0xA] - ldrb r0, [r3, 0xB] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r3, 0xC] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r3, 0xD] - lsls r0, 24 - adds r1, r0 - mov r12, r1 - movs r1, 0 - cmp r1, r6 - bcs _08020EA8 - ldrb r0, [r5] - ldrb r7, [r4] - cmp r0, r7 - beq _08020E8C - adds r0, r3, 0 - b _08020EA4 - .align 2, 0 -_08020E88: .4byte gBattlescriptCurrInstr -_08020E8C: - adds r5, 0x1 - adds r4, 0x1 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r6 - bcs _08020EA8 - ldrb r0, [r5] - ldrb r3, [r4] - cmp r0, r3 - beq _08020E8C - ldr r0, [r2] -_08020EA4: - adds r0, 0xE - str r0, [r2] -_08020EA8: - cmp r1, r6 - bne _08020EB0 - mov r7, r12 - str r7, [r2] -_08020EB0: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk2C_jumpifarrayequal - - thumb_func_start atk2D_jumpifarraynotequal -atk2D_jumpifarraynotequal: @ 8020EB8 - push {r4-r7,lr} - movs r7, 0 - ldr r3, _08020F2C @ =gBattlescriptCurrInstr - ldr r1, [r3] - ldrb r2, [r1, 0x1] - ldrb r0, [r1, 0x2] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x3] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 24 - adds r5, r2, r0 - ldrb r2, [r1, 0x5] - ldrb r0, [r1, 0x6] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x7] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0x8] - lsls r0, 24 - adds r4, r2, r0 - ldrb r6, [r1, 0x9] - ldrb r2, [r1, 0xA] - ldrb r0, [r1, 0xB] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0xC] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0xD] - lsls r0, 24 - adds r2, r0 - mov r12, r2 - movs r1, 0 - cmp r7, r6 - bcs _08020F22 -_08020F06: - ldrb r0, [r5] - ldrb r2, [r4] - cmp r0, r2 - bne _08020F14 - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 -_08020F14: - adds r5, 0x1 - adds r4, 0x1 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r6 - bcc _08020F06 -_08020F22: - cmp r7, r6 - beq _08020F30 - mov r0, r12 - b _08020F34 - .align 2, 0 -_08020F2C: .4byte gBattlescriptCurrInstr -_08020F30: - ldr r0, [r3] - adds r0, 0xE -_08020F34: - str r0, [r3] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk2D_jumpifarraynotequal - - thumb_func_start atk2E_setbyte -atk2E_setbyte: @ 8020F3C - ldr r3, _08020F60 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r1, r0 - ldrb r0, [r2, 0x5] - strb r0, [r1] - ldr r0, [r3] - adds r0, 0x6 - str r0, [r3] - bx lr - .align 2, 0 -_08020F60: .4byte gBattlescriptCurrInstr - thumb_func_end atk2E_setbyte - - thumb_func_start atk2F_addbyte -atk2F_addbyte: @ 8020F64 - ldr r3, _08020F8C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r1, r0 - ldrb r0, [r2, 0x5] - ldrb r2, [r1] - adds r0, r2 - strb r0, [r1] - ldr r0, [r3] - adds r0, 0x6 - str r0, [r3] - bx lr - .align 2, 0 -_08020F8C: .4byte gBattlescriptCurrInstr - thumb_func_end atk2F_addbyte - - thumb_func_start atk30_subbyte -atk30_subbyte: @ 8020F90 - ldr r3, _08020FB8 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r1, r0 - ldrb r0, [r1] - ldrb r2, [r2, 0x5] - subs r0, r2 - strb r0, [r1] - ldr r0, [r3] - adds r0, 0x6 - str r0, [r3] - bx lr - .align 2, 0 -_08020FB8: .4byte gBattlescriptCurrInstr - thumb_func_end atk30_subbyte - - thumb_func_start atk31_copyarray -atk31_copyarray: @ 8020FBC - push {r4-r6,lr} - ldr r3, _0802100C @ =gBattlescriptCurrInstr - ldr r1, [r3] - ldrb r2, [r1, 0x1] - ldrb r0, [r1, 0x2] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x3] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 24 - adds r6, r2, r0 - ldrb r2, [r1, 0x5] - ldrb r0, [r1, 0x6] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x7] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0x8] - lsls r0, 24 - adds r5, r2, r0 - ldrb r4, [r1, 0x9] - movs r2, 0 - cmp r2, r4 - bge _08021000 -_08020FF2: - adds r0, r6, r2 - adds r1, r5, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, r4 - blt _08020FF2 -_08021000: - ldr r0, [r3] - adds r0, 0xA - str r0, [r3] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802100C: .4byte gBattlescriptCurrInstr - thumb_func_end atk31_copyarray - - thumb_func_start atk32_copyarray_withindex -atk32_copyarray_withindex: @ 8021010 - push {r4-r7,lr} - ldr r3, _08021078 @ =gBattlescriptCurrInstr - ldr r1, [r3] - ldrb r2, [r1, 0x1] - ldrb r0, [r1, 0x2] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x3] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 24 - adds r7, r2, r0 - ldrb r2, [r1, 0x5] - ldrb r0, [r1, 0x6] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0x7] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0x8] - lsls r0, 24 - adds r6, r2, r0 - ldrb r2, [r1, 0x9] - ldrb r0, [r1, 0xA] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r1, 0xB] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r1, 0xC] - lsls r0, 24 - adds r5, r2, r0 - ldrb r4, [r1, 0xD] - movs r2, 0 - cmp r2, r4 - bge _0802106C -_0802105A: - adds r0, r7, r2 - ldrb r1, [r5] - adds r1, r2, r1 - adds r1, r6, r1 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, r4 - blt _0802105A -_0802106C: - ldr r0, [r3] - adds r0, 0xE - str r0, [r3] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08021078: .4byte gBattlescriptCurrInstr - thumb_func_end atk32_copyarray_withindex - - thumb_func_start atk33_orbyte -atk33_orbyte: @ 802107C - ldr r3, _080210A4 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r1, r0 - ldrb r0, [r1] - ldrb r2, [r2, 0x5] - orrs r0, r2 - strb r0, [r1] - ldr r0, [r3] - adds r0, 0x6 - str r0, [r3] - bx lr - .align 2, 0 -_080210A4: .4byte gBattlescriptCurrInstr - thumb_func_end atk33_orbyte - - thumb_func_start atk34_orhalfword -atk34_orhalfword: @ 80210A8 - push {r4,lr} - ldr r4, _080210DC @ =gBattlescriptCurrInstr - ldr r3, [r4] - ldrb r2, [r3, 0x1] - ldrb r0, [r3, 0x2] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r3, 0x3] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r3, 0x4] - lsls r0, 24 - adds r2, r0 - ldrb r1, [r3, 0x5] - ldrb r0, [r3, 0x6] - lsls r0, 8 - orrs r1, r0 - ldrh r0, [r2] - orrs r1, r0 - strh r1, [r2] - ldr r0, [r4] - adds r0, 0x7 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080210DC: .4byte gBattlescriptCurrInstr - thumb_func_end atk34_orhalfword - - thumb_func_start atk35_orword -atk35_orword: @ 80210E0 - push {r4,lr} - ldr r4, _08021120 @ =gBattlescriptCurrInstr - ldr r2, [r4] - ldrb r3, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r3, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r3, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r3, r0 - ldrb r1, [r2, 0x5] - ldrb r0, [r2, 0x6] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x7] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x8] - lsls r0, 24 - adds r1, r0 - ldr r0, [r3] - orrs r0, r1 - str r0, [r3] - ldr r0, [r4] - adds r0, 0x9 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08021120: .4byte gBattlescriptCurrInstr - thumb_func_end atk35_orword - - thumb_func_start atk36_bicbyte -atk36_bicbyte: @ 8021124 - ldr r3, _0802114C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r1, r0 - ldrb r2, [r2, 0x5] - ldrb r0, [r1] - bics r0, r2 - strb r0, [r1] - ldr r0, [r3] - adds r0, 0x6 - str r0, [r3] - bx lr - .align 2, 0 -_0802114C: .4byte gBattlescriptCurrInstr - thumb_func_end atk36_bicbyte - - thumb_func_start atk37_bichalfword -atk37_bichalfword: @ 8021150 - push {r4,lr} - ldr r4, _08021184 @ =gBattlescriptCurrInstr - ldr r3, [r4] - ldrb r1, [r3, 0x1] - ldrb r0, [r3, 0x2] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r3, 0x3] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 24 - adds r1, r0 - ldrb r2, [r3, 0x5] - ldrb r0, [r3, 0x6] - lsls r0, 8 - orrs r2, r0 - ldrh r0, [r1] - bics r0, r2 - strh r0, [r1] - ldr r0, [r4] - adds r0, 0x7 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08021184: .4byte gBattlescriptCurrInstr - thumb_func_end atk37_bichalfword - - thumb_func_start atk38_bicword -atk38_bicword: @ 8021188 - push {r4,lr} - ldr r4, _080211C8 @ =gBattlescriptCurrInstr - ldr r2, [r4] - ldrb r3, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - adds r3, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - adds r3, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - adds r3, r0 - ldrb r1, [r2, 0x5] - ldrb r0, [r2, 0x6] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x7] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x8] - lsls r0, 24 - adds r1, r0 - ldr r0, [r3] - bics r0, r1 - str r0, [r3] - ldr r0, [r4] - adds r0, 0x9 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080211C8: .4byte gBattlescriptCurrInstr - thumb_func_end atk38_bicword - - thumb_func_start atk39_pause -atk39_pause: @ 80211CC - push {r4,r5,lr} - ldr r0, _08021200 @ =gBattleExecBuffer - ldr r4, [r0] - cmp r4, 0 - bne _080211F8 - ldr r5, _08021204 @ =gBattlescriptCurrInstr - ldr r2, [r5] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldr r3, _08021208 @ =gPauseCounterBattle - ldrh r0, [r3] - adds r0, 0x1 - strh r0, [r3] - lsls r0, 16 - lsrs r0, 16 - cmp r0, r1 - bcc _080211F8 - strh r4, [r3] - adds r0, r2, 0x3 - str r0, [r5] -_080211F8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08021200: .4byte gBattleExecBuffer -_08021204: .4byte gBattlescriptCurrInstr -_08021208: .4byte gPauseCounterBattle - thumb_func_end atk39_pause - - thumb_func_start atk3A_waitstate -atk3A_waitstate: @ 802120C - push {lr} - ldr r0, _08021224 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0802121E - ldr r1, _08021228 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_0802121E: - pop {r0} - bx r0 - .align 2, 0 -_08021224: .4byte gBattleExecBuffer -_08021228: .4byte gBattlescriptCurrInstr - thumb_func_end atk3A_waitstate - - thumb_func_start atk3B_healthbar_update -atk3B_healthbar_update: @ 802122C - push {lr} - ldr r0, _08021240 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r0, 0 - bne _0802124C - ldr r0, _08021244 @ =gActiveBank - ldr r1, _08021248 @ =gBankTarget - b _08021250 - .align 2, 0 -_08021240: .4byte gBattlescriptCurrInstr -_08021244: .4byte gActiveBank -_08021248: .4byte gBankTarget -_0802124C: - ldr r0, _08021274 @ =gActiveBank - ldr r1, _08021278 @ =gBankAttacker -_08021250: - ldrb r1, [r1] - strb r1, [r0] - ldr r0, _0802127C @ =gBattleMoveDamage - ldrh r1, [r0] - movs r0, 0 - bl EmitHealthBarUpdate - ldr r0, _08021274 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - ldr r1, _08021280 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08021274: .4byte gActiveBank -_08021278: .4byte gBankAttacker -_0802127C: .4byte gBattleMoveDamage -_08021280: .4byte gBattlescriptCurrInstr - thumb_func_end atk3B_healthbar_update - - thumb_func_start atk3C_return -atk3C_return: @ 8021284 - push {lr} - bl b_movescr_stack_pop_cursor - pop {r0} - bx r0 - thumb_func_end atk3C_return - - thumb_func_start atk3D_end -atk3D_end: @ 8021290 - ldr r0, _080212A4 @ =gBattleMoveFlags - movs r1, 0 - strb r1, [r0] - ldr r0, _080212A8 @ =gActiveBank - strb r1, [r0] - ldr r1, _080212AC @ =gFightStateTracker - movs r0, 0xB - strb r0, [r1] - bx lr - .align 2, 0 -_080212A4: .4byte gBattleMoveFlags -_080212A8: .4byte gActiveBank -_080212AC: .4byte gFightStateTracker - thumb_func_end atk3D_end - - thumb_func_start atk3E_end2 -atk3E_end2: @ 80212B0 - ldr r1, _080212C0 @ =gActiveBank - movs r0, 0 - strb r0, [r1] - ldr r1, _080212C4 @ =gFightStateTracker - movs r0, 0xB - strb r0, [r1] - bx lr - .align 2, 0 -_080212C0: .4byte gActiveBank -_080212C4: .4byte gFightStateTracker - thumb_func_end atk3E_end2 - - thumb_func_start atk3F_end3 -atk3F_end3: @ 80212C8 - push {lr} - bl b_movescr_stack_pop_cursor - ldr r2, _080212F0 @ =0x02017140 - adds r1, r2, 0 - adds r1, 0x20 - ldrb r0, [r1] - cmp r0, 0 - beq _080212DE - subs r0, 0x1 - strb r0, [r1] -_080212DE: - ldr r0, _080212F4 @ =gBattleMainFunc - ldrb r1, [r1] - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - str r1, [r0] - pop {r0} - bx r0 - .align 2, 0 -_080212F0: .4byte 0x02017140 -_080212F4: .4byte gBattleMainFunc - thumb_func_end atk3F_end3 - - thumb_func_start atk41_call -atk41_call: @ 80212F8 - push {r4,lr} - ldr r4, _08021324 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x5 - bl b_movescr_stack_push - ldr r2, [r4] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08021324: .4byte gBattlescriptCurrInstr - thumb_func_end atk41_call - - thumb_func_start atk42_jumpiftype2 -atk42_jumpiftype2: @ 8021328 - push {r4,lr} - ldr r4, _08021370 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - lsls r0, 24 - lsrs r0, 24 - ldr r3, [r4] - ldr r2, _08021374 @ =gBattleMons - movs r1, 0x58 - muls r0, r1 - adds r0, r2 - adds r1, r0, 0 - adds r1, 0x21 - ldrb r2, [r3, 0x2] - ldrb r1, [r1] - cmp r2, r1 - beq _08021356 - adds r0, 0x22 - ldrb r0, [r0] - cmp r2, r0 - bne _08021378 -_08021356: - ldrb r1, [r3, 0x3] - ldrb r0, [r3, 0x4] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0802137C - .align 2, 0 -_08021370: .4byte gBattlescriptCurrInstr -_08021374: .4byte gBattleMons -_08021378: - adds r0, r3, 0x7 - str r0, [r4] -_0802137C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end atk42_jumpiftype2 - - thumb_func_start atk43_jumpifabilitypresent -atk43_jumpifabilitypresent: @ 8021384 - push {r4,lr} - sub sp, 0x4 - ldr r4, _080213BC @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r2, [r0, 0x1] - movs r0, 0 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _080213C0 - ldr r2, [r4] - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _080213C6 - .align 2, 0 -_080213BC: .4byte gBattlescriptCurrInstr -_080213C0: - ldr r0, [r4] - adds r0, 0x6 - str r0, [r4] -_080213C6: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end atk43_jumpifabilitypresent - - thumb_func_start atk44 -atk44: @ 80213D0 - ldr r1, _080213E4 @ =0x02000000 - ldr r0, _080213E8 @ =gBankAttacker - ldrb r0, [r0] - ldr r2, _080213EC @ =0x00016060 - adds r0, r2 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - bx lr - .align 2, 0 -_080213E4: .4byte 0x02000000 -_080213E8: .4byte gBankAttacker -_080213EC: .4byte 0x00016060 - thumb_func_end atk44 - - thumb_func_start atk45_playanimation -atk45_playanimation: @ 80213F0 - push {r4-r6,lr} - ldr r5, _08021444 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r6, _08021448 @ =gActiveBank - strb r0, [r6] - ldr r2, [r5] - ldrb r1, [r2, 0x3] - ldrb r0, [r2, 0x4] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x6] - lsls r0, 24 - adds r3, r1, r0 - ldrb r4, [r2, 0x2] - adds r0, r4, 0 - cmp r0, 0x1 - beq _08021426 - cmp r0, 0x11 - beq _08021426 - cmp r0, 0x2 - bne _0802144C -_08021426: - ldr r4, _08021444 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r1, [r0, 0x2] - ldrh r2, [r3] - movs r0, 0 - bl EmitBattleAnimation - ldr r0, _08021448 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - ldr r0, [r4] - adds r0, 0x7 - str r0, [r4] - b _080214AE - .align 2, 0 -_08021444: .4byte gBattlescriptCurrInstr -_08021448: .4byte gActiveBank -_0802144C: - ldr r0, _08021464 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0802146C - adds r0, r2, 0x7 - bl b_movescr_stack_push - ldr r0, _08021468 @ =BattleScript_Pausex20 - b _080214AC - .align 2, 0 -_08021464: .4byte gHitMarker -_08021468: .4byte BattleScript_Pausex20 -_0802146C: - adds r0, r4, 0 - subs r0, 0xA - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _08021498 - ldr r1, _08021490 @ =gStatuses3 - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08021494 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - beq _08021498 - adds r0, r2, 0x7 - b _080214AC - .align 2, 0 -_08021490: .4byte gStatuses3 -_08021494: .4byte 0x000400c0 -_08021498: - ldrb r1, [r2, 0x2] - ldrh r2, [r3] - movs r0, 0 - bl EmitBattleAnimation - ldrb r0, [r6] - bl MarkBufferBankForExecution - ldr r0, [r5] - adds r0, 0x7 -_080214AC: - str r0, [r5] -_080214AE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk45_playanimation - - thumb_func_start atk46_playanimation2 -atk46_playanimation2: @ 80214B4 - push {r4-r7,lr} - ldr r6, _0802151C @ =gBattlescriptCurrInstr - ldr r0, [r6] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r7, _08021520 @ =gActiveBank - strb r0, [r7] - ldr r2, [r6] - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 24 - adds r3, r1, r0 - ldrb r1, [r2, 0x6] - ldrb r0, [r2, 0x7] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x8] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x9] - lsls r0, 24 - adds r4, r1, r0 - ldrb r5, [r3] - adds r0, r5, 0 - cmp r0, 0x1 - beq _080214FE - cmp r0, 0x11 - beq _080214FE - cmp r0, 0x2 - bne _08021524 -_080214FE: - ldrb r1, [r3] - ldrh r2, [r4] - movs r0, 0 - bl EmitBattleAnimation - ldr r0, _08021520 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - ldr r1, _0802151C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0xA - str r0, [r1] - b _0802157A - .align 2, 0 -_0802151C: .4byte gBattlescriptCurrInstr -_08021520: .4byte gActiveBank -_08021524: - ldr r0, _08021534 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08021538 - adds r0, r2, 0 - b _08021576 - .align 2, 0 -_08021534: .4byte gHitMarker -_08021538: - adds r0, r5, 0 - subs r0, 0xA - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _08021564 - ldr r1, _0802155C @ =gStatuses3 - ldrb r0, [r7] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08021560 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - beq _08021564 - adds r0, r2, 0 - b _08021576 - .align 2, 0 -_0802155C: .4byte gStatuses3 -_08021560: .4byte 0x000400c0 -_08021564: - ldrb r1, [r3] - ldrh r2, [r4] - movs r0, 0 - bl EmitBattleAnimation - ldrb r0, [r7] - bl MarkBufferBankForExecution - ldr r0, [r6] -_08021576: - adds r0, 0xA - str r0, [r6] -_0802157A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk46_playanimation2 - - thumb_func_start atk47_setgraphicalstatchangevalues_setgraphicalstatchangevalues_setgraphicalstatchangevalues -atk47_setgraphicalstatchangevalues_setgraphicalstatchangevalues_setgraphicalstatchangevalues: @ 8021580 - push {r4,lr} - movs r3, 0 - ldr r0, _080215A0 @ =0x02000000 - ldr r2, _080215A4 @ =0x0001601e - adds r1, r0, r2 - ldrb r1, [r1] - movs r2, 0xF0 - ands r2, r1 - adds r4, r0, 0 - cmp r2, 0x20 - beq _080215B6 - cmp r2, 0x20 - bgt _080215A8 - cmp r2, 0x10 - beq _080215B2 - b _080215C0 - .align 2, 0 -_080215A0: .4byte 0x02000000 -_080215A4: .4byte 0x0001601e -_080215A8: - cmp r2, 0x90 - beq _080215BA - cmp r2, 0xA0 - beq _080215BE - b _080215C0 -_080215B2: - movs r3, 0xF - b _080215C0 -_080215B6: - movs r3, 0x27 - b _080215C0 -_080215BA: - movs r3, 0x16 - b _080215C0 -_080215BE: - movs r3, 0x2E -_080215C0: - ldr r1, _080215EC @ =0x0001601e - adds r0, r4, r1 - ldrb r1, [r0] - movs r0, 0xF - ands r0, r1 - adds r0, r3, r0 - subs r0, 0x1 - ldr r2, _080215F0 @ =0x000160a4 - adds r1, r4, r2 - movs r2, 0 - strb r0, [r1] - ldr r1, _080215F4 @ =0x000160a5 - adds r0, r4, r1 - strb r2, [r0] - ldr r1, _080215F8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080215EC: .4byte 0x0001601e -_080215F0: .4byte 0x000160a4 -_080215F4: .4byte 0x000160a5 -_080215F8: .4byte gBattlescriptCurrInstr - thumb_func_end atk47_setgraphicalstatchangevalues_setgraphicalstatchangevalues_setgraphicalstatchangevalues - - thumb_func_start atk48_playstatchangeanimation -atk48_playstatchangeanimation: @ 80215FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r7, 0 - movs r0, 0 - mov r8, r0 - movs r3, 0 - ldr r5, _08021670 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - str r3, [sp] - bl sub_8015150 - ldr r2, _08021674 @ =gActiveBank - strb r0, [r2] - ldr r0, [r5] - ldrb r4, [r0, 0x2] - ldrb r1, [r0, 0x3] - movs r0, 0x1 - ands r0, r1 - ldr r3, [sp] - cmp r0, 0 - beq _08021710 - movs r0, 0x2 - ands r0, r1 - movs r1, 0x15 - cmp r0, 0 - beq _0802163C - movs r1, 0x2D -_0802163C: - cmp r4, 0 - beq _080216E4 - movs r0, 0x1 - mov r10, r0 - ldr r0, _08021678 @ =gUnknown_02024A98 - mov r9, r0 - lsls r5, r1, 16 -_0802164A: - adds r0, r4, 0 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - beq _080216D6 - ldr r0, _08021670 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r1, [r0, 0x3] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0802167C - ldr r0, _08021674 @ =gActiveBank - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r7, r0 - b _080216C4 - .align 2, 0 -_08021670: .4byte gBattlescriptCurrInstr -_08021674: .4byte gActiveBank -_08021678: .4byte gUnknown_02024A98 -_0802167C: - ldr r6, _08021700 @ =gActiveBank - ldrb r0, [r6] - str r3, [sp] - bl GetBankIdentity - mov r1, r10 - ands r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08021704 @ =gSideTimer - adds r0, r1 - ldrb r0, [r0, 0x2] - ldr r3, [sp] - cmp r0, 0 - bne _080216D6 - ldr r0, _08021708 @ =gBattleMons - ldrb r2, [r6] - movs r1, 0x58 - muls r2, r1 - adds r0, r2, r0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1D - beq _080216D6 - cmp r0, 0x49 - beq _080216D6 - cmp r0, 0x33 - bne _080216BA - cmp r7, 0x6 - beq _080216D6 -_080216BA: - cmp r0, 0x34 - bne _080216C2 - cmp r7, 0x1 - beq _080216D6 -_080216C2: - adds r0, r7, r2 -_080216C4: - add r0, r9 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - ble _080216D6 - lsrs r0, r5, 16 - mov r8, r0 - adds r3, 0x1 -_080216D6: - lsrs r4, 1 - movs r1, 0x80 - lsls r1, 9 - adds r5, r1 - adds r7, 0x1 - cmp r4, 0 - bne _0802164A -_080216E4: - ldr r0, _0802170C @ =gBattlescriptCurrInstr - mov r9, r0 - cmp r3, 0x1 - ble _08021772 - ldr r0, [r0] - ldrb r1, [r0, 0x3] - movs r0, 0x2 - ands r0, r1 - movs r1, 0x39 - mov r8, r1 - cmp r0, 0 - beq _08021772 - movs r0, 0x3A - b _08021770 - .align 2, 0 -_08021700: .4byte gActiveBank -_08021704: .4byte gSideTimer -_08021708: .4byte gBattleMons -_0802170C: .4byte gBattlescriptCurrInstr -_08021710: - movs r0, 0x2 - ands r0, r1 - movs r1, 0xE - cmp r0, 0 - beq _0802171C - movs r1, 0x26 -_0802171C: - mov r9, r5 - cmp r4, 0 - beq _08021758 - ldr r6, _0802178C @ =gUnknown_02024A98 - adds r5, r2, 0 - lsls r2, r1, 16 -_08021728: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0802174A - ldrb r1, [r5] - movs r0, 0x58 - muls r0, r1 - adds r0, r7, r0 - adds r0, r6 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0xB - bgt _0802174A - lsrs r1, r2, 16 - mov r8, r1 - adds r3, 0x1 -_0802174A: - lsrs r4, 1 - movs r0, 0x80 - lsls r0, 9 - adds r2, r0 - adds r7, 0x1 - cmp r4, 0 - bne _08021728 -_08021758: - cmp r3, 0x1 - ble _08021772 - mov r1, r9 - ldr r0, [r1] - ldrb r1, [r0, 0x3] - movs r0, 0x2 - ands r0, r1 - movs r1, 0x37 - mov r8, r1 - cmp r0, 0 - beq _08021772 - movs r0, 0x38 -_08021770: - mov r8, r0 -_08021772: - mov r1, r9 - ldr r2, [r1] - ldrb r1, [r2, 0x3] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08021790 - cmp r3, 0x1 - bgt _08021790 - adds r0, r2, 0x4 - mov r1, r9 - b _080217E6 - .align 2, 0 -_0802178C: .4byte gUnknown_02024A98 -_08021790: - cmp r3, 0 - beq _080217E0 - ldr r0, _080217D0 @ =0x02000000 - ldr r1, _080217D4 @ =0x000160dc - adds r4, r0, r1 - ldrb r0, [r4] - cmp r0, 0 - bne _080217E0 - movs r0, 0 - movs r1, 0x1 - mov r2, r8 - str r3, [sp] - bl EmitBattleAnimation - ldr r0, _080217D8 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - ldr r0, _080217DC @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r1, [r0, 0x3] - movs r0, 0x4 - ands r0, r1 - ldr r3, [sp] - cmp r0, 0 - beq _080217CC - cmp r3, 0x1 - ble _080217CC - movs r0, 0x1 - strb r0, [r4] -_080217CC: - ldr r1, _080217DC @ =gBattlescriptCurrInstr - b _080217E2 - .align 2, 0 -_080217D0: .4byte 0x02000000 -_080217D4: .4byte 0x000160dc -_080217D8: .4byte gActiveBank -_080217DC: .4byte gBattlescriptCurrInstr -_080217E0: - mov r1, r9 -_080217E2: - ldr r0, [r1] - adds r0, 0x4 -_080217E6: - str r0, [r1] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk48_playstatchangeanimation - - thumb_func_start sub_80217F8 -sub_80217F8: @ 80217F8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - movs r0, 0 - mov r10, r0 - ldr r0, _08021834 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r1, [r0, 0x1] - str r1, [sp, 0x10] - ldrb r0, [r0, 0x2] - str r0, [sp, 0x14] - ldr r1, _08021838 @ =gBattleMons - ldr r0, _0802183C @ =gBankAttacker - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _08021844 - ldr r1, _08021840 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x7] - b _0802184E - .align 2, 0 -_08021834: .4byte gBattlescriptCurrInstr -_08021838: .4byte gBattleMons -_0802183C: .4byte gBankAttacker -_08021840: .4byte gEnigmaBerries -_08021844: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r0, 24 -_0802184E: - str r0, [sp, 0x8] - ldr r0, _0802186C @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 1 - ldr r0, _08021870 @ =0x020160e8 - adds r1, r0 - str r1, [sp, 0xC] - subs r0, 0xCC - ldrb r0, [r0] - cmp r0, 0 - beq _080218C0 - movs r2, 0x3F - ands r2, r0 - str r2, [sp, 0x4] - b _080218D2 - .align 2, 0 -_0802186C: .4byte gBankAttacker -_08021870: .4byte 0x020160e8 -_08021874: - strb r2, [r7] - ldr r0, [r5] - orrs r0, r6 - str r0, [r5] - ldr r0, _080218AC @ =0x02000000 - ldr r3, _080218B0 @ =0x0001600c - adds r0, r3 - strb r4, [r0] - bl sub_8020B54 - ldr r2, _080218B4 @ =gUnknown_081D6BBC - mov r4, r8 - ldrh r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - add r0, r9 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - bl b_movescr_stack_push - ldr r1, _080218B8 @ =gBattlescriptCurrInstr - ldr r0, _080218BC @ =gUnknown_081D9B2D - bl _0802229C - .align 2, 0 -_080218AC: .4byte 0x02000000 -_080218B0: .4byte 0x0001600c -_080218B4: .4byte gUnknown_081D6BBC -_080218B8: .4byte gBattlescriptCurrInstr -_080218BC: .4byte gUnknown_081D9B2D -_080218C0: - ldr r2, _080218D8 @ =gBattleMoves - ldr r0, _080218DC @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x2] - str r0, [sp, 0x4] -_080218D2: - ldr r5, _080218E0 @ =0x02000000 - mov r12, r5 - b _080218EE - .align 2, 0 -_080218D8: .4byte gBattleMoves -_080218DC: .4byte gCurrentMove -_080218E0: .4byte 0x02000000 -_080218E4: - mov r0, r10 - cmp r0, 0 - beq _080218EE - bl _08022286 -_080218EE: - ldr r0, _08021908 @ =0x0001600c - add r0, r12 - ldrb r0, [r0] - cmp r0, 0x11 - bls _080218FC - bl _0802224E -_080218FC: - lsls r0, 2 - ldr r1, _0802190C @ =_08021910 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08021908: .4byte 0x0001600c -_0802190C: .4byte _08021910 - .align 2, 0 -_08021910: - .4byte _08021958 - .4byte _08021A34 - .4byte _08021AF0 - .4byte _08021B20 - .4byte _08021B44 - .4byte _08021B78 - .4byte _08021B9C - .4byte _08021C40 - .4byte _08021C78 - .4byte _08021CA8 - .4byte _08021CCC - .4byte _08021D18 - .4byte _08021DAC - .4byte _08021E30 - .4byte _08021E70 - .4byte _08022068 - .4byte _080221C0 - .4byte _0802224E -_08021958: - ldr r5, _08021A08 @ =gBattleMons - ldr r2, _08021A0C @ =gBankTarget - ldrb r4, [r2] - movs r6, 0x58 - adds r3, r4, 0 - muls r3, r6 - adds r0, r5, 0 - adds r0, 0x50 - adds r0, r3, r0 - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 16 - ands r1, r0 - cmp r1, 0 - beq _080219FE - adds r0, r3, r5 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _080219FE - ldr r0, _08021A10 @ =gBankAttacker - ldrb r1, [r0] - cmp r1, r4 - beq _080219FE - adds r0, r1, 0 - bl GetBankSide - adds r4, r0, 0 - ldr r1, _08021A0C @ =gBankTarget - ldrb r0, [r1] - bl GetBankSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _080219FE - ldr r0, _08021A14 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _080219FE - ldr r2, _08021A18 @ =gProtectStructs - ldr r4, _08021A0C @ =gBankTarget - ldrb r3, [r4] - lsls r1, r3, 4 - adds r0, r2, 0x4 - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - bne _080219C8 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - beq _080219FE -_080219C8: - ldr r2, _08021A1C @ =gBattleMoves - ldr r0, _08021A20 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _080219FE - adds r0, r3, 0 - muls r0, r6 - adds r1, r0, r5 - ldrb r2, [r1, 0x19] - movs r0, 0x19 - ldrsb r0, [r1, r0] - cmp r0, 0xB - bgt _080219FE - adds r0, r2, 0x1 - strb r0, [r1, 0x19] - bl b_movescr_stack_push_cursor - ldr r1, _08021A24 @ =gBattlescriptCurrInstr - ldr r0, _08021A28 @ =gUnknown_081D9132 - str r0, [r1] - movs r5, 0x1 - mov r10, r5 -_080219FE: - ldr r2, _08021A2C @ =0x02000000 - ldr r0, _08021A30 @ =0x0001600c - adds r1, r2, r0 - b _08021E00 - .align 2, 0 -_08021A08: .4byte gBattleMons -_08021A0C: .4byte gBankTarget -_08021A10: .4byte gBankAttacker -_08021A14: .4byte gBattleMoveFlags -_08021A18: .4byte gProtectStructs -_08021A1C: .4byte gBattleMoves -_08021A20: .4byte gCurrentMove -_08021A24: .4byte gBattlescriptCurrInstr -_08021A28: .4byte gUnknown_081D9132 -_08021A2C: .4byte 0x02000000 -_08021A30: .4byte 0x0001600c -_08021A34: - ldr r2, _08021AD0 @ =gBattleMons - ldr r1, _08021AD4 @ =gBankTarget - ldrb r4, [r1] - movs r3, 0x58 - mov r12, r3 - mov r3, r12 - muls r3, r4 - adds r7, r2, 0 - adds r7, 0x4C - adds r6, r3, r7 - ldr r5, [r6] - movs r0, 0x20 - ands r0, r5 - cmp r0, 0 - bne _08021A54 - b _08021DFA -_08021A54: - adds r0, r3, r2 - ldrh r0, [r0, 0x28] - cmp r0, 0 - bne _08021A5E - b _08021DFA -_08021A5E: - ldr r0, _08021AD8 @ =gBankAttacker - ldrb r0, [r0] - cmp r0, r4 - bne _08021A68 - b _08021DFA -_08021A68: - ldr r0, _08021ADC @ =gSpecialStatuses - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 2 - adds r0, 0xC - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - bne _08021A7C - b _08021DFA -_08021A7C: - ldr r0, _08021AE0 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _08021A8A - b _08021DFA -_08021A8A: - ldr r4, [sp, 0x4] - cmp r4, 0xA - beq _08021A92 - b _08021DFA -_08021A92: - movs r0, 0x21 - negs r0, r0 - ands r5, r0 - str r5, [r6] - ldr r4, _08021AE4 @ =gActiveBank - ldr r5, _08021AD4 @ =gBankTarget - ldrb r0, [r5] - strb r0, [r4] - ldrb r0, [r5] - mov r1, r12 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - str r0, [sp] - movs r0, 0 - movs r1, 0x28 - movs r2, 0 - movs r3, 0x4 - bl EmitSetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution - bl b_movescr_stack_push_cursor - ldr r1, _08021AE8 @ =gBattlescriptCurrInstr - ldr r0, _08021AEC @ =gUnknown_081D955D - str r0, [r1] - movs r2, 0x1 - mov r10, r2 - b _08021DFA - .align 2, 0 -_08021AD0: .4byte gBattleMons -_08021AD4: .4byte gBankTarget -_08021AD8: .4byte gBankAttacker -_08021ADC: .4byte gSpecialStatuses -_08021AE0: .4byte gBattleMoveFlags -_08021AE4: .4byte gActiveBank -_08021AE8: .4byte gBattlescriptCurrInstr -_08021AEC: .4byte gUnknown_081D955D -_08021AF0: - ldr r0, _08021B14 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x7 - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _08021B0C - movs r4, 0x1 - mov r10, r4 -_08021B0C: - ldr r2, _08021B18 @ =0x02000000 - ldr r5, _08021B1C @ =0x0001600c - adds r1, r2, r5 - b _08021E00 - .align 2, 0 -_08021B14: .4byte gBankTarget -_08021B18: .4byte 0x02000000 -_08021B1C: .4byte 0x0001600c -_08021B20: - ldr r0, _08021B40 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _08021B3A - b _08021DFA -_08021B3A: - movs r0, 0x1 - mov r10, r0 - b _08021DFA - .align 2, 0 -_08021B40: .4byte gBankTarget -_08021B44: - movs r0, 0 - str r0, [sp] - movs r0, 0x5 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _08021B68 - movs r4, 0x1 - mov r10, r4 - ldr r5, _08021B64 @ =0x02000000 - mov r12, r5 - b _0802224E - .align 2, 0 -_08021B64: .4byte 0x02000000 -_08021B68: - ldr r2, _08021B70 @ =0x02000000 - ldr r0, _08021B74 @ =0x0001600c - adds r1, r2, r0 - b _08021E00 - .align 2, 0 -_08021B70: .4byte 0x02000000 -_08021B74: .4byte 0x0001600c -_08021B78: - ldr r0, _08021B98 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _08021B92 - b _08021DFA -_08021B92: - movs r1, 0x1 - mov r10, r1 - b _08021DFA - .align 2, 0 -_08021B98: .4byte gBankAttacker -_08021B9C: - ldr r0, _08021C28 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 18 - ands r0, r1 - cmp r0, 0 - beq _08021BE0 - ldr r4, [sp, 0x8] - cmp r4, 0x1D - bne _08021BE0 - ldr r0, _08021C2C @ =gUnknown_02024BE8 - ldrh r2, [r0] - adds r7, r0, 0 - cmp r2, 0xA5 - beq _08021BE0 - ldr r5, [sp, 0xC] - ldrh r1, [r5] - cmp r1, 0 - beq _08021BC8 - ldr r0, _08021C30 @ =0x0000ffff - cmp r1, r0 - bne _08021BE0 -_08021BC8: - cmp r2, 0xE2 - bne _08021BDA - ldr r0, _08021C34 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08021BDA - b _08022244 -_08021BDA: - ldrh r0, [r7] - ldr r1, [sp, 0xC] - strh r0, [r1] -_08021BE0: - movs r4, 0 - ldr r2, _08021C38 @ =gBattleMons - ldr r3, _08021C3C @ =gBankAttacker - ldrb r1, [r3] - movs r0, 0x58 - muls r0, r1 - adds r2, 0xC - adds r0, r2 - ldrh r0, [r0] - ldr r5, [sp, 0xC] - ldrh r1, [r5] - mov r9, r3 - cmp r0, r1 - beq _08021C18 - mov r6, r9 - movs r3, 0x58 - adds r5, r1, 0 -_08021C02: - adds r4, 0x1 - cmp r4, 0x3 - bgt _08021C18 - lsls r0, r4, 1 - ldrb r1, [r6] - muls r1, r3 - adds r0, r1 - adds r0, r2 - ldrh r0, [r0] - cmp r0, r5 - bne _08021C02 -_08021C18: - cmp r4, 0x4 - beq _08021C1E - b _08022244 -_08021C1E: - movs r0, 0 - ldr r1, [sp, 0xC] -_08021C22: - strh r0, [r1] - b _08022244 - .align 2, 0 -_08021C28: .4byte gHitMarker -_08021C2C: .4byte gUnknown_02024BE8 -_08021C30: .4byte 0x0000ffff -_08021C34: .4byte gBattleMoveFlags -_08021C38: .4byte gBattleMons -_08021C3C: .4byte gBankAttacker -_08021C40: - movs r4, 0 - ldr r0, _08021C6C @ =gNoOfAllBanks - ldrb r2, [r0] - cmp r4, r2 - blt _08021C4C - b _08022244 -_08021C4C: - movs r5, 0 - ldr r2, _08021C70 @ =0x020160f0 - ldr r3, _08021C74 @ =gBattleMons -_08021C52: - ldrh r1, [r2] - cmp r1, 0 - beq _08021C5C - strh r1, [r3, 0x2E] - strh r5, [r2] -_08021C5C: - adds r2, 0x2 - adds r3, 0x58 - adds r4, 0x1 - ldrb r1, [r0] - cmp r4, r1 - blt _08021C52 - b _08022244 - .align 2, 0 -_08021C6C: .4byte gNoOfAllBanks -_08021C70: .4byte 0x020160f0 -_08021C74: .4byte gBattleMons -_08021C78: - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl sub_801A02C - lsls r0, 24 - cmp r0, 0 - beq _08021C98 - movs r2, 0x1 - mov r10, r2 - ldr r3, _08021C94 @ =0x02000000 - mov r12, r3 - b _0802224E - .align 2, 0 -_08021C94: .4byte 0x02000000 -_08021C98: - ldr r2, _08021CA0 @ =0x02000000 - ldr r4, _08021CA4 @ =0x0001600c - adds r1, r2, r4 - b _08021E00 - .align 2, 0 -_08021CA0: .4byte 0x02000000 -_08021CA4: .4byte 0x0001600c -_08021CA8: - movs r0, 0x4 - movs r1, 0 - movs r2, 0 - bl sub_801A02C - lsls r0, 24 - cmp r0, 0 - beq _08021CBC - movs r5, 0x1 - mov r10, r5 -_08021CBC: - ldr r2, _08021CC4 @ =0x02000000 - ldr r0, _08021CC8 @ =0x0001600c - adds r1, r2, r0 - b _08021E00 - .align 2, 0 -_08021CC4: .4byte 0x02000000 -_08021CC8: .4byte 0x0001600c -_08021CCC: - ldr r1, _08021D04 @ =gStatuses3 - ldr r0, _08021D08 @ =gBankAttacker - ldrb r2, [r0] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08021D0C @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _08021CE2 - b _08021DFA -_08021CE2: - ldr r0, _08021D10 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08021CF0 - b _08021DFA -_08021CF0: - ldr r4, _08021D14 @ =gActiveBank - strb r2, [r4] - movs r0, 0 - movs r1, 0x1 - bl EmitSpriteInvisibility - ldrb r0, [r4] - bl MarkBufferBankForExecution - b _08021DFA - .align 2, 0 -_08021D04: .4byte gStatuses3 -_08021D08: .4byte gBankAttacker -_08021D0C: .4byte 0x000400c0 -_08021D10: .4byte gHitMarker -_08021D14: .4byte gActiveBank -_08021D18: - ldr r0, _08021D88 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _08021D44 - ldr r1, _08021D8C @ =gStatuses3 - ldr r0, _08021D90 @ =gBankAttacker - ldrb r2, [r0] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08021D94 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - beq _08021D44 - adds r0, r2, 0 - bl sub_8015660 - lsls r0, 24 - cmp r0, 0 - beq _08021D7E -_08021D44: - ldr r4, _08021D98 @ =gActiveBank - ldr r5, _08021D90 @ =gBankAttacker - ldrb r0, [r5] - strb r0, [r4] - movs r0, 0 - movs r1, 0 - bl EmitSpriteInvisibility - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, _08021D8C @ =gStatuses3 - ldrb r2, [r5] - lsls r2, 2 - adds r2, r0 - ldr r0, [r2] - ldr r1, _08021D9C @ =0xfffbff3f - ands r0, r1 - str r0, [r2] - ldr r2, _08021DA0 @ =gSpecialStatuses - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_08021D7E: - ldr r2, _08021DA4 @ =0x02000000 - ldr r4, _08021DA8 @ =0x0001600c - adds r1, r2, r4 - b _08021E00 - .align 2, 0 -_08021D88: .4byte gBattleMoveFlags -_08021D8C: .4byte gStatuses3 -_08021D90: .4byte gBankAttacker -_08021D94: .4byte 0x000400c0 -_08021D98: .4byte gActiveBank -_08021D9C: .4byte 0xfffbff3f -_08021DA0: .4byte gSpecialStatuses -_08021DA4: .4byte 0x02000000 -_08021DA8: .4byte 0x0001600c -_08021DAC: - ldr r2, _08021E0C @ =gSpecialStatuses - ldr r1, _08021E10 @ =gBankTarget - ldrb r3, [r1] - lsls r4, r3, 2 - adds r0, r4, r3 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 29 - cmp r0, 0 - blt _08021DFA - ldr r0, _08021E14 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r3, r0 - bcs _08021DFA - ldr r5, _08021E18 @ =gStatuses3 - adds r0, r4, r5 - ldr r0, [r0] - ldr r1, _08021E1C @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _08021DFA - ldr r4, _08021E20 @ =gActiveBank - strb r3, [r4] - movs r0, 0 - movs r1, 0 - bl EmitSpriteInvisibility - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, _08021E10 @ =gBankTarget - ldrb r2, [r0] - lsls r2, 2 - adds r2, r5 - ldr r0, [r2] - ldr r1, _08021E24 @ =0xfffbff3f - ands r0, r1 - str r0, [r2] -_08021DFA: - ldr r2, _08021E28 @ =0x02000000 - ldr r3, _08021E2C @ =0x0001600c - adds r1, r2, r3 -_08021E00: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - mov r12, r2 - b _0802224E - .align 2, 0 -_08021E0C: .4byte gSpecialStatuses -_08021E10: .4byte gBankTarget -_08021E14: .4byte gNoOfAllBanks -_08021E18: .4byte gStatuses3 -_08021E1C: .4byte 0x000400c0 -_08021E20: .4byte gActiveBank -_08021E24: .4byte 0xfffbff3f -_08021E28: .4byte 0x02000000 -_08021E2C: .4byte 0x0001600c -_08021E30: - movs r4, 0 - ldr r0, _08021E60 @ =gNoOfAllBanks - ldrb r5, [r0] - cmp r4, r5 - blt _08021E3C - b _08022244 -_08021E3C: - ldr r2, _08021E64 @ =gDisableStructs - ldr r5, _08021E68 @ =0xfeffffff - adds r3, r0, 0 - ldr r1, _08021E6C @ =gUnknown_02024AD0 -_08021E44: - ldrb r0, [r2, 0xA] - cmp r0, 0 - bne _08021E50 - ldr r0, [r1] - ands r0, r5 - str r0, [r1] -_08021E50: - adds r2, 0x1C - adds r1, 0x58 - adds r4, 0x1 - ldrb r0, [r3] - cmp r4, r0 - blt _08021E44 - b _08022244 - .align 2, 0 -_08021E60: .4byte gNoOfAllBanks -_08021E64: .4byte gDisableStructs -_08021E68: .4byte 0xfeffffff -_08021E6C: .4byte gUnknown_02024AD0 -_08021E70: - ldr r1, _08021F2C @ =gHitMarker - ldr r3, [r1] - movs r0, 0x80 - lsls r0, 5 - ands r0, r3 - ldr r2, _08021F30 @ =gBankAttacker - mov r9, r2 - adds r5, r1, 0 - cmp r0, 0 - beq _08021E9A - ldr r0, _08021F34 @ =gActiveBank - ldrb r2, [r2] - strb r2, [r0] - ldr r1, _08021F38 @ =gBankTarget - ldrb r0, [r1] - mov r4, r9 - strb r0, [r4] - strb r2, [r1] - ldr r0, _08021F3C @ =0xffffefff - ands r3, r0 - str r3, [r5] -_08021E9A: - ldr r1, _08021F40 @ =gBattleMoves - ldr r2, _08021F44 @ =gUnknown_02024BE8 - ldrh r3, [r2] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - mov r8, r1 - adds r7, r2, 0 - cmp r0, 0x7F - bne _08021EBE - ldr r0, _08021F48 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _08021ECA -_08021EBE: - ldr r1, _08021F4C @ =gUnknown_02024C2C - mov r2, r9 - ldrb r0, [r2] - lsls r0, 1 - adds r0, r1 - strh r3, [r0] -_08021ECA: - ldr r0, _08021F50 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _08021F54 @ =gBitTable - mov r3, r9 - ldrb r4, [r3] - lsls r0, r4, 2 - adds r0, r2 - ldr r3, [r0] - ands r1, r3 - adds r6, r2, 0 - cmp r1, 0 - beq _08021EE4 - b _08022244 -_08021EE4: - ldr r0, _08021F58 @ =0x000160a6 - add r0, r12 - ldrb r0, [r0] - ands r0, r3 - cmp r0, 0 - beq _08021EF2 - b _08022244 -_08021EF2: - ldrh r2, [r7] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0x7F - bne _08021F04 - b _08022244 -_08021F04: - ldr r0, [r5] - movs r1, 0x80 - lsls r1, 18 - ands r0, r1 - cmp r0, 0 - beq _08021F68 - ldr r1, _08021F5C @ =gLastUsedMove - lsls r0, r4, 1 - adds r0, r1 - strh r2, [r0] - ldr r0, _08021F60 @ =gUnknown_02024C4C - mov r4, r9 - ldrb r1, [r4] - lsls r1, 1 - adds r1, r0 - ldr r0, _08021F64 @ =gCurrentMove - ldrh r0, [r0] - strh r0, [r1] - b _08021F82 - .align 2, 0 -_08021F2C: .4byte gHitMarker -_08021F30: .4byte gBankAttacker -_08021F34: .4byte gActiveBank -_08021F38: .4byte gBankTarget -_08021F3C: .4byte 0xffffefff -_08021F40: .4byte gBattleMoves -_08021F44: .4byte gUnknown_02024BE8 -_08021F48: .4byte gBattleMoveFlags -_08021F4C: .4byte gUnknown_02024C2C -_08021F50: .4byte gAbsentBankFlags -_08021F54: .4byte gBitTable -_08021F58: .4byte 0x000160a6 -_08021F5C: .4byte gLastUsedMove -_08021F60: .4byte gUnknown_02024C4C -_08021F64: .4byte gCurrentMove -_08021F68: - ldr r1, _08021FD0 @ =gLastUsedMove - lsls r0, r4, 1 - adds r0, r1 - ldr r1, _08021FD4 @ =0x0000ffff - strh r1, [r0] - ldr r1, _08021FD8 @ =gUnknown_02024C4C - mov r2, r9 - ldrb r0, [r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0x1 - negs r1, r1 - strh r1, [r0] -_08021F82: - ldr r2, _08021FDC @ =gBankTarget - ldrb r3, [r2] - lsls r0, r3, 2 - adds r0, r6 - ldr r0, [r0] - lsls r0, 28 - ldr r1, [r5] - ands r1, r0 - cmp r1, 0 - bne _08021FA0 - ldr r0, _08021FE0 @ =gUnknown_02024C5C - adds r0, r3, r0 - mov r3, r9 - ldrb r1, [r3] - strb r1, [r0] -_08021FA0: - ldr r0, [r5] - movs r1, 0x80 - lsls r1, 18 - ands r0, r1 - cmp r0, 0 - beq _0802204C - ldr r0, _08021FE4 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0802204C - ldrh r2, [r7] - ldr r0, _08021FD4 @ =0x0000ffff - cmp r2, r0 - bne _08021FEC - ldr r1, _08021FE8 @ =gMoveHitWith - ldr r4, _08021FDC @ =gBankTarget - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - strh r2, [r0] - b _08022244 - .align 2, 0 -_08021FD0: .4byte gLastUsedMove -_08021FD4: .4byte 0x0000ffff -_08021FD8: .4byte gUnknown_02024C4C -_08021FDC: .4byte gBankTarget -_08021FE0: .4byte gUnknown_02024C5C -_08021FE4: .4byte gBattleMoveFlags -_08021FE8: .4byte gMoveHitWith -_08021FEC: - ldr r0, _08022014 @ =gMoveHitWith - ldr r5, _08022018 @ =gBankTarget - ldrb r1, [r5] - lsls r1, 1 - adds r1, r0 - ldr r4, _0802201C @ =gCurrentMove - ldrh r0, [r4] - strh r0, [r1] - ldr r0, _08022020 @ =0x0001601c - add r0, r12 - ldrb r3, [r0] - cmp r3, 0 - beq _08022028 - ldr r0, _08022024 @ =gUnknown_02024C44 - ldrb r1, [r5] - lsls r1, 1 - adds r1, r0 - movs r0, 0x3F - ands r0, r3 - b _08021C22 - .align 2, 0 -_08022014: .4byte gMoveHitWith -_08022018: .4byte gBankTarget -_0802201C: .4byte gCurrentMove -_08022020: .4byte 0x0001601c -_08022024: .4byte gUnknown_02024C44 -_08022028: - ldr r0, _08022044 @ =gUnknown_02024C44 - ldr r1, _08022048 @ =gBankTarget - ldrb r2, [r1] - lsls r2, 1 - adds r2, r0 - ldrh r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldrb r0, [r0, 0x2] - strh r0, [r2] - b _08022244 - .align 2, 0 -_08022044: .4byte gUnknown_02024C44 -_08022048: .4byte gBankTarget -_0802204C: - ldr r0, _0802205C @ =gMoveHitWith - ldr r2, _08022060 @ =gBankTarget - ldrb r1, [r2] - lsls r1, 1 - adds r1, r0 - ldr r0, _08022064 @ =0x0000ffff - b _08021C22 - .align 2, 0 -_0802205C: .4byte gMoveHitWith -_08022060: .4byte gBankTarget -_08022064: .4byte 0x0000ffff -_08022068: - ldr r0, _0802212C @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r6, _08022130 @ =gBitTable - ldr r2, _08022134 @ =gBankAttacker - ldrb r5, [r2] - lsls r0, r5, 2 - adds r0, r6 - ldr r4, [r0] - ands r1, r4 - mov r9, r2 - cmp r1, 0 - beq _08022082 - b _08022244 -_08022082: - ldr r0, _08022138 @ =0x000160a6 - add r0, r12 - ldrb r0, [r0] - ands r0, r4 - cmp r0, 0 - beq _08022090 - b _08022244 -_08022090: - ldr r1, _0802213C @ =gBattleMoves - ldr r4, _08022140 @ =gUnknown_02024BE8 - ldrh r3, [r4] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x8] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0802215C - ldr r0, _08022144 @ =gHitMarker - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 18 - ands r0, r1 - cmp r0, 0 - beq _0802215C - ldr r2, _08022148 @ =gBankTarget - ldrb r0, [r2] - cmp r5, r0 - bne _080220C0 - b _08022244 -_080220C0: - adds r2, r0, 0 - lsls r0, r2, 2 - adds r0, r6 - ldr r0, [r0] - lsls r0, 28 - ands r1, r0 - cmp r1, 0 - bne _0802215C - ldr r0, _0802214C @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _0802215C - lsls r0, r2, 1 - ldr r5, _08022150 @ =0x000160ac - adds r0, r5 - add r0, r12 - strb r3, [r0] - ldr r0, _08022148 @ =gBankTarget - ldrb r1, [r0] - lsls r1, 1 - ldr r2, _08022154 @ =0x000160ad - adds r1, r2 - add r1, r12 - ldrh r0, [r4] - lsrs r0, 8 - strb r0, [r1] - ldr r3, _08022148 @ =gBankTarget - ldrb r2, [r3] - lsls r2, 2 - mov r5, r9 - ldrb r0, [r5] - lsrs r0, 1 - lsls r0, 1 - ldr r1, _08022158 @ =0x00016100 - adds r0, r1 - adds r2, r0 - add r2, r12 - ldrh r0, [r4] - strb r0, [r2] - ldrb r2, [r3] - lsls r2, 2 - ldrb r0, [r5] - lsrs r0, 1 - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - adds r2, r0 - add r2, r12 - ldrh r0, [r4] - lsrs r0, 8 - strb r0, [r2] - b _08022244 - .align 2, 0 -_0802212C: .4byte gAbsentBankFlags -_08022130: .4byte gBitTable -_08022134: .4byte gBankAttacker -_08022138: .4byte 0x000160a6 -_0802213C: .4byte gBattleMoves -_08022140: .4byte gUnknown_02024BE8 -_08022144: .4byte gHitMarker -_08022148: .4byte gBankTarget -_0802214C: .4byte gBattleMoveFlags -_08022150: .4byte 0x000160ac -_08022154: .4byte 0x000160ad -_08022158: .4byte 0x00016100 -_0802215C: - mov r1, r9 - ldrb r0, [r1] - ldr r2, _080221B4 @ =gBankTarget - ldrb r2, [r2] - cmp r0, r2 - beq _08022244 - ldr r3, _080221B4 @ =gBankTarget - ldrb r0, [r3] - lsls r0, 1 - ldr r4, _080221B8 @ =0x000160ac - adds r0, r4 - add r0, r12 - movs r3, 0 - strb r3, [r0] - ldr r5, _080221B4 @ =gBankTarget - ldrb r0, [r5] - lsls r0, 1 - ldr r1, _080221BC @ =0x000160ad - adds r0, r1 - add r0, r12 - strb r3, [r0] - ldrb r2, [r5] - lsls r2, 2 - mov r4, r9 - ldrb r0, [r4] - lsrs r0, 1 - lsls r0, 1 - adds r1, 0x53 - adds r0, r1 - adds r2, r0 - add r2, r12 - strb r3, [r2] - ldrb r2, [r5] - lsls r2, 2 - ldrb r0, [r4] - lsrs r0, 1 - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - adds r2, r0 - add r2, r12 - strb r3, [r2] - b _08022244 - .align 2, 0 -_080221B4: .4byte gBankTarget -_080221B8: .4byte 0x000160ac -_080221BC: .4byte 0x000160ad -_080221C0: - ldr r5, _080222B0 @ =gHitMarker - ldr r2, [r5] - movs r0, 0x80 - lsls r0, 12 - ands r0, r2 - cmp r0, 0 - bne _08022244 - ldr r0, _080222B4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08022244 - ldr r1, _080222B8 @ =gProtectStructs - ldr r0, _080222BC @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0, 0x1] - lsls r0, 29 - cmp r0, 0 - blt _08022244 - ldr r0, _080222C0 @ =gBattleMoves - mov r9, r0 - ldr r1, _080222C4 @ =gCurrentMove - mov r8, r1 - ldrh r0, [r1] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - add r1, r9 - ldrb r0, [r1, 0x6] - cmp r0, 0x8 - bne _08022244 - movs r6, 0x80 - lsls r6, 2 - adds r4, r6, 0 - ands r4, r2 - cmp r4, 0 - bne _08022244 - ldr r7, _080222C8 @ =gBankTarget - ldrb r0, [r7] - bl GetBankIdentity - movs r1, 0x2 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByPlayerAI - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080222CC @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _0802223A - bl _08021874 -_0802223A: - ldr r0, [r5] - orrs r0, r6 - str r0, [r5] - ldr r2, _080222D0 @ =0x02000000 - mov r12, r2 -_08022244: - ldr r1, _080222D4 @ =0x0001600c - add r1, r12 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0802224E: - ldr r3, [sp, 0x10] - cmp r3, 0x1 - bne _08022262 - mov r4, r10 - cmp r4, 0 - bne _08022262 - ldr r1, _080222D4 @ =0x0001600c - add r1, r12 - movs r0, 0x11 - strb r0, [r1] -_08022262: - ldr r5, [sp, 0x10] - cmp r5, 0x2 - bne _08022278 - ldr r1, _080222D4 @ =0x0001600c - add r1, r12 - ldr r0, [sp, 0x14] - ldrb r2, [r1] - cmp r0, r2 - bne _08022278 - movs r0, 0x11 - strb r0, [r1] -_08022278: - ldr r0, _080222D4 @ =0x0001600c - add r0, r12 - ldrb r0, [r0] - cmp r0, 0x11 - beq _08022286 - bl _080218E4 -_08022286: - ldr r0, _080222D4 @ =0x0001600c - add r0, r12 - ldrb r0, [r0] - cmp r0, 0x11 - bne _0802229E - mov r3, r10 - cmp r3, 0 - bne _0802229E - ldr r1, _080222D8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x3 -_0802229C: - str r0, [r1] -_0802229E: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080222B0: .4byte gHitMarker -_080222B4: .4byte gBattleTypeFlags -_080222B8: .4byte gProtectStructs -_080222BC: .4byte gBankAttacker -_080222C0: .4byte gBattleMoves -_080222C4: .4byte gCurrentMove -_080222C8: .4byte gBankTarget -_080222CC: .4byte gBattleMons -_080222D0: .4byte 0x02000000 -_080222D4: .4byte 0x0001600c -_080222D8: .4byte gBattlescriptCurrInstr - thumb_func_end sub_80217F8 - - thumb_func_start atk4A_damageflags -atk4A_damageflags: @ 80222DC - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r4, 0 - movs r5, 0 - ldr r2, _08022340 @ =gBattleMoves - ldr r0, _08022344 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x2] - mov r8, r0 - ldr r2, _08022348 @ =gBattleMons - ldr r3, _0802234C @ =gBankTarget - ldrb r1, [r3] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x20 - ldrb r0, [r0] - mov r12, r2 - adds r7, r3, 0 - cmp r0, 0x1A - bne _08022370 - mov r1, r8 - cmp r1, 0x4 - bne _08022370 - ldr r3, _08022350 @ =gLastUsedAbility - strb r0, [r3] - ldr r2, _08022354 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x9 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08022358 @ =gMoveHitWith - ldrb r0, [r7] - lsls r0, 1 - adds r0, r1 - strh r4, [r0] - ldr r0, _0802235C @ =gBattleCommunication - mov r2, r8 - strb r2, [r0, 0x6] - ldrb r0, [r7] - ldrb r1, [r3] - bl RecordAbilityBattle - b _08022452 - .align 2, 0 -_08022340: .4byte gBattleMoves -_08022344: .4byte gCurrentMove -_08022348: .4byte gBattleMons -_0802234C: .4byte gBankTarget -_08022350: .4byte gLastUsedAbility -_08022354: .4byte gBattleMoveFlags -_08022358: .4byte gMoveHitWith -_0802235C: .4byte gBattleCommunication -_08022360: - ldr r0, _0802236C @ =gBattleMoveFlags - ldrb r1, [r0] - movs r2, 0x8 - orrs r1, r2 - strb r1, [r0] - b _08022452 - .align 2, 0 -_0802236C: .4byte gBattleMoveFlags -_08022370: - ldr r1, _0802237C @ =gTypeEffectiveness - adds r0, r5, r1 - ldrb r0, [r0] - adds r6, r1, 0 - b _08022432 - .align 2, 0 -_0802237C: .4byte gTypeEffectiveness -_08022380: - adds r0, r5, r6 - ldrb r0, [r0] - cmp r0, r8 - bne _0802242C - adds r2, r5, 0x1 - adds r3, r2, r6 - ldrb r1, [r7] - movs r0, 0x58 - muls r0, r1 - add r0, r12 - adds r0, 0x21 - ldrb r1, [r3] - adds r3, r2, 0 - ldrb r0, [r0] - cmp r1, r0 - bne _080223BE - adds r0, r5, 0x2 - adds r0, r6 - ldrb r1, [r0] - cmp r1, 0 - beq _08022360 - cmp r1, 0x5 - bne _080223B2 - movs r0, 0x4 - orrs r4, r0 -_080223B2: - cmp r1, 0x14 - bne _080223BE - movs r0, 0x2 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_080223BE: - adds r2, r3, r6 - ldrb r1, [r7] - movs r0, 0x58 - muls r0, r1 - add r0, r12 - adds r1, r0, 0 - adds r1, 0x22 - ldrb r2, [r2] - ldrb r1, [r1] - cmp r2, r1 - bne _0802242C - adds r0, 0x21 - ldrb r1, [r0] - cmp r1, r2 - beq _080223E6 - adds r0, r5, 0x2 - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0 - beq _08022360 -_080223E6: - cmp r1, r2 - beq _080223FC - adds r0, r5, 0x2 - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0x5 - bne _080223FC - movs r0, 0x4 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_080223FC: - adds r2, r3, r6 - ldrb r1, [r7] - movs r0, 0x58 - muls r0, r1 - add r0, r12 - adds r1, r0, 0 - adds r1, 0x22 - ldrb r2, [r2] - ldrb r1, [r1] - cmp r2, r1 - bne _0802242C - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, r2 - beq _0802242C - adds r0, r5, 0x2 - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0x14 - bne _0802242C - movs r0, 0x2 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_0802242C: - adds r5, 0x3 - adds r0, r5, r6 - ldrb r0, [r0] -_08022432: - cmp r0, 0xFF - beq _08022452 - cmp r0, 0xFE - bne _08022380 - ldrb r1, [r7] - movs r0, 0x58 - muls r0, r1 - mov r1, r12 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 22 - ands r0, r1 - cmp r0, 0 - beq _0802242C -_08022452: - ldr r2, _08022500 @ =gBattleMons - ldr r0, _08022504 @ =gBankTarget - mov r8, r0 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x20 - ldrb r6, [r0] - cmp r6, 0x19 - bne _080224CE - movs r5, 0x29 - ands r5, r4 - cmp r5, 0 - bne _080224CE - ldr r0, _08022508 @ =gBankAttacker - ldrb r0, [r0] - ldr r7, _0802250C @ =gCurrentMove - ldrh r1, [r7] - bl move_weather_interaction - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x2 - bne _080224CE - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08022494 - movs r0, 0x6 - ands r4, r0 - cmp r4, 0x6 - bne _080224CE -_08022494: - ldr r2, _08022510 @ =gBattleMoves - ldrh r1, [r7] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _080224CE - ldr r3, _08022514 @ =gLastUsedAbility - strb r6, [r3] - ldr r2, _08022518 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0802251C @ =gMoveHitWith - mov r2, r8 - ldrb r0, [r2] - lsls r0, 1 - adds r0, r1 - strh r5, [r0] - ldr r1, _08022520 @ =gBattleCommunication - movs r0, 0x3 - strb r0, [r1, 0x6] - ldrb r0, [r2] - ldrb r1, [r3] - bl RecordAbilityBattle -_080224CE: - ldr r0, _08022518 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080224EC - ldr r2, _08022524 @ =gProtectStructs - ldr r0, _08022508 @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 4 - adds r1, r2 - ldrb r0, [r1, 0x1] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r1, 0x1] -_080224EC: - ldr r1, _08022528 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08022500: .4byte gBattleMons -_08022504: .4byte gBankTarget -_08022508: .4byte gBankAttacker -_0802250C: .4byte gCurrentMove -_08022510: .4byte gBattleMoves -_08022514: .4byte gLastUsedAbility -_08022518: .4byte gBattleMoveFlags -_0802251C: .4byte gMoveHitWith -_08022520: .4byte gBattleCommunication -_08022524: .4byte gProtectStructs -_08022528: .4byte gBattlescriptCurrInstr - thumb_func_end atk4A_damageflags - - thumb_func_start atk4B_cmd4b -atk4B_cmd4b: @ 802252C - push {r4,lr} - ldr r4, _08022568 @ =gActiveBank - ldr r0, _0802256C @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r4] - ldr r2, _08022570 @ =gHitMarker - ldr r1, _08022574 @ =gBitTable - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - ands r0, r1 - cmp r0, 0 - bne _0802255A - movs r0, 0 - movs r1, 0 - bl dp01_build_cmdbuf_x06_a - ldrb r0, [r4] - bl MarkBufferBankForExecution -_0802255A: - ldr r1, _08022578 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08022568: .4byte gActiveBank -_0802256C: .4byte gBankAttacker -_08022570: .4byte gHitMarker -_08022574: .4byte gBitTable -_08022578: .4byte gBattlescriptCurrInstr - thumb_func_end atk4B_cmd4b - - thumb_func_start atk4C_switch1 -atk4C_switch1: @ 802257C - push {r4-r6,lr} - ldr r0, _080225D4 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _080225CC - ldr r5, _080225D8 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _080225DC @ =gActiveBank - strb r0, [r4] - ldr r3, _080225E0 @ =gBattlePartyID - ldrb r0, [r4] - lsls r1, r0, 1 - adds r1, r3 - ldr r2, _080225E4 @ =0x02000000 - ldr r6, _080225E8 @ =0x00016068 - adds r0, r6 - adds r0, r2 - ldrb r0, [r0] - strh r0, [r1] - ldr r1, _080225EC @ =gBitTable - ldrb r0, [r4] - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0] - movs r0, 0 - movs r1, 0 - bl EmitGetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] -_080225CC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080225D4: .4byte gBattleExecBuffer -_080225D8: .4byte gBattlescriptCurrInstr -_080225DC: .4byte gActiveBank -_080225E0: .4byte gBattlePartyID -_080225E4: .4byte 0x02000000 -_080225E8: .4byte 0x00016068 -_080225EC: .4byte gBitTable - thumb_func_end atk4C_switch1 - - thumb_func_start sub_80225F0 -sub_80225F0: @ 80225F0 - push {r4-r7,lr} - sub sp, 0x58 - ldr r0, _0802274C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _080225FE - b _08022744 -_080225FE: - ldr r0, _08022750 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _08022754 @ =gActiveBank - strb r0, [r4] - ldr r6, _08022758 @ =gBattleMons - ldrb r0, [r4] - movs r5, 0x58 - adds r1, r0, 0 - muls r1, r5 - adds r1, r6 - mov r0, sp - movs r2, 0x58 - bl memcpy - ldrb r0, [r4] - muls r0, r5 - adds r3, r0, r6 - movs r2, 0 - ldr r5, _0802275C @ =gBattleBufferB - adds r7, r4, 0 -_0802262C: - adds r0, r3, r2 - ldrb r1, [r4] - lsls r1, 9 - adds r1, 0x4 - adds r1, r2, r1 - adds r1, r5 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x57 - bls _0802262C - ldr r4, _08022758 @ =gBattleMons - ldrb r0, [r7] - movs r6, 0x58 - adds r2, r0, 0 - muls r2, r6 - adds r2, r4 - ldr r3, _08022760 @ =gBaseStats - ldrh r1, [r2] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r0, [r0, 0x6] - adds r2, 0x21 - strb r0, [r2] - ldrb r0, [r7] - adds r1, r0, 0 - muls r1, r6 - adds r1, r4 - ldrh r2, [r1] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r3 - ldrb r0, [r0, 0x7] - adds r1, 0x22 - strb r0, [r1] - ldrb r0, [r7] - adds r1, r0, 0 - muls r1, r6 - adds r1, r4 - ldrh r0, [r1] - ldrb r1, [r1, 0x17] - lsrs r1, 7 - bl GetAbilityBySpecies - ldrb r1, [r7] - muls r1, r6 - adds r1, r4 - adds r1, 0x20 - strb r0, [r1] - ldrb r0, [r7] - bl GetBankSide - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08022764 @ =gWishFutureKnock - adds r0, 0x29 - adds r0, r2, r0 - ldrb r1, [r0] - ldr r3, _08022768 @ =gBitTable - ldr r2, _0802276C @ =gBattlePartyID - ldrb r5, [r7] - lsls r0, r5, 1 - adds r0, r2 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - ands r1, r0 - mov r12, r4 - cmp r1, 0 - beq _080226CA - adds r0, r5, 0 - muls r0, r6 - add r0, r12 - movs r1, 0 - strh r1, [r0, 0x2E] -_080226CA: - ldr r2, _08022770 @ =gBattleMoves - ldr r0, _08022774 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x7F - bne _08022710 - movs r2, 0 - adds r4, r7, 0 - movs r6, 0x58 - mov r5, r12 - adds r5, 0x18 - add r3, sp, 0x18 -_080226EA: - ldrb r0, [r4] - adds r1, r0, 0 - muls r1, r6 - adds r1, r2, r1 - adds r1, r5 - adds r0, r3, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r2, 0x1 - cmp r2, 0x7 - ble _080226EA - ldrb r1, [r7] - movs r0, 0x58 - muls r0, r1 - mov r1, r12 - adds r1, 0x50 - adds r0, r1 - ldr r1, [sp, 0x50] - str r1, [r0] -_08022710: - bl SwitchInClearStructs - ldr r0, _08022778 @ =0x02000000 - ldr r3, _08022754 @ =gActiveBank - ldrb r2, [r3] - ldr r1, _0802277C @ =0x00016003 - adds r0, r1 - strb r2, [r0] - ldr r1, _08022780 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x7 - strb r0, [r1, 0x1] - strb r2, [r1, 0x2] - ldr r2, _0802276C @ =gBattlePartyID - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _08022750 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_08022744: - add sp, 0x58 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802274C: .4byte gBattleExecBuffer -_08022750: .4byte gBattlescriptCurrInstr -_08022754: .4byte gActiveBank -_08022758: .4byte gBattleMons -_0802275C: .4byte gBattleBufferB -_08022760: .4byte gBaseStats -_08022764: .4byte gWishFutureKnock -_08022768: .4byte gBitTable -_0802276C: .4byte gBattlePartyID -_08022770: .4byte gBattleMoves -_08022774: .4byte gCurrentMove -_08022778: .4byte 0x02000000 -_0802277C: .4byte 0x00016003 -_08022780: .4byte gBattleTextBuff1 - thumb_func_end sub_80225F0 - - thumb_func_start sub_8022784 -sub_8022784: @ 8022784 - push {r4,r5,lr} - ldr r0, _0802280C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _08022806 - ldr r0, _08022810 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _08022814 @ =gActiveBank - strb r0, [r4] - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080227D0 - ldr r0, _08022818 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0802281C @ =0x00000902 - ands r0, r1 - cmp r0, 0 - bne _080227D0 - ldr r2, _08022820 @ =gBattleMons - ldrb r1, [r4] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x2 - bl GetNationalPokedexFlag -_080227D0: - ldr r2, _08022824 @ =gAbsentBankFlags - ldr r1, _08022828 @ =gBitTable - ldr r5, _08022814 @ =gActiveBank - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] - ldr r1, _0802282C @ =gBattlePartyID - ldrb r0, [r5] - lsls r0, 1 - adds r0, r1 - ldrb r1, [r0] - ldr r4, _08022810 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r2, [r0, 0x2] - movs r0, 0 - bl sub_800C704 - ldrb r0, [r5] - bl MarkBufferBankForExecution - ldr r0, [r4] - adds r0, 0x3 - str r0, [r4] -_08022806: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802280C: .4byte gBattleExecBuffer -_08022810: .4byte gBattlescriptCurrInstr -_08022814: .4byte gActiveBank -_08022818: .4byte gBattleTypeFlags -_0802281C: .4byte 0x00000902 -_08022820: .4byte gBattleMons -_08022824: .4byte gAbsentBankFlags -_08022828: .4byte gBitTable -_0802282C: .4byte gBattlePartyID - thumb_func_end sub_8022784 - - thumb_func_start sub_8022830 -sub_8022830: @ 8022830 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _08022894 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r1, [r0, 0x1] - movs r0, 0x7F - ands r0, r1 - bl sub_8015150 - ldr r3, _08022898 @ =gActiveBank - strb r0, [r3] - ldr r2, [r4] - ldrb r1, [r2, 0x1] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080228A8 - ldr r1, _0802289C @ =gBattleMons - ldrb r3, [r3] - movs r0, 0x58 - muls r0, r3 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080228A0 @ =0x0400e000 - ands r0, r1 - cmp r0, 0 - bne _0802287C - ldr r1, _080228A4 @ =gStatuses3 - lsls r0, r3, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 3 - ands r0, r1 - cmp r0, 0 - beq _080228A8 -_0802287C: - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _08022A2C - .align 2, 0 -_08022894: .4byte gBattlescriptCurrInstr -_08022898: .4byte gActiveBank -_0802289C: .4byte gBattleMons -_080228A0: .4byte 0x0400e000 -_080228A4: .4byte gStatuses3 -_080228A8: - ldr r5, _08022934 @ =gBattleTypeFlags - ldrh r1, [r5] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08022948 - ldr r4, _08022938 @ =gActiveBank - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0802293C @ =gPlayerParty - mov r8, r1 - cmp r0, 0x1 - bne _080228CC - ldr r0, _08022940 @ =gEnemyParty - mov r8, r0 -_080228CC: - movs r5, 0 - ldrb r0, [r4] - bl sub_803FC34 - lsls r0, 24 - lsrs r0, 24 - bl sub_803FBFC - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bne _080228E6 - movs r5, 0x3 -_080228E6: - adds r6, r5, 0x3 - cmp r5, r6 - bge _0802292E - ldr r7, _08022944 @ =gBattlePartyID -_080228EE: - movs r0, 0x64 - muls r0, r5 - mov r1, r8 - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08022928 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _08022928 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _08022928 - ldr r0, _08022938 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 1 - adds r0, r7 - ldrh r0, [r0] - cmp r0, r5 - bne _0802292E -_08022928: - adds r5, 0x1 - cmp r5, r6 - blt _080228EE -_0802292E: - cmp r5, r6 - beq _080229FC - b _08022A24 - .align 2, 0 -_08022934: .4byte gBattleTypeFlags -_08022938: .4byte gActiveBank -_0802293C: .4byte gPlayerParty -_08022940: .4byte gEnemyParty -_08022944: .4byte gBattlePartyID -_08022948: - ldr r0, _08022978 @ =gActiveBank - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bne _08022988 - movs r0, 0x1 - bl GetBankByPlayerAI - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r1, [r5] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _0802297C - movs r0, 0x3 - bl GetBankByPlayerAI - lsls r0, 24 - lsrs r6, r0, 24 - b _0802297E - .align 2, 0 -_08022978: .4byte gActiveBank -_0802297C: - adds r6, r7, 0 -_0802297E: - ldr r0, _08022984 @ =gEnemyParty - mov r8, r0 - b _080229AE - .align 2, 0 -_08022984: .4byte gEnemyParty -_08022988: - movs r0, 0 - bl GetBankByPlayerAI - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r1, [r5] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080229A8 - movs r0, 0x2 - bl GetBankByPlayerAI - lsls r0, 24 - lsrs r6, r0, 24 - b _080229AA -_080229A8: - adds r6, r7, 0 -_080229AA: - ldr r1, _08022A18 @ =gPlayerParty - mov r8, r1 -_080229AE: - movs r5, 0 -_080229B0: - movs r0, 0x64 - muls r0, r5 - mov r1, r8 - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _080229F2 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _080229F2 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _080229F2 - ldr r1, _08022A1C @ =gBattlePartyID - lsls r0, r7, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r5, r0 - beq _080229F2 - lsls r0, r6, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r5, r0 - bne _080229F8 -_080229F2: - adds r5, 0x1 - cmp r5, 0x5 - ble _080229B0 -_080229F8: - cmp r5, 0x6 - bne _08022A24 -_080229FC: - ldr r3, _08022A20 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08022A2C - .align 2, 0 -_08022A18: .4byte gPlayerParty -_08022A1C: .4byte gBattlePartyID -_08022A20: .4byte gBattlescriptCurrInstr -_08022A24: - ldr r1, _08022A38 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] -_08022A2C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08022A38: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8022830 - - thumb_func_start sub_8022A3C -sub_8022A3C: @ 8022A3C - push {r4,r5,lr} - sub sp, 0x4 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r4, _08022A84 @ =0x02000000 - ldr r5, _08022A88 @ =gActiveBank - ldrb r0, [r5] - ldr r3, _08022A8C @ =0x00016064 - adds r1, r0, r3 - adds r1, r4 - ldr r3, _08022A90 @ =gBattlePartyID - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strb r0, [r1] - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - ldr r1, _08022A94 @ =0x0001606c - adds r4, r1 - adds r0, r4 - str r0, [sp] - movs r0, 0 - movs r1, 0x1 - movs r3, 0 - bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f - ldrb r0, [r5] - bl MarkBufferBankForExecution - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08022A84: .4byte 0x02000000 -_08022A88: .4byte gActiveBank -_08022A8C: .4byte 0x00016064 -_08022A90: .4byte gBattlePartyID -_08022A94: .4byte 0x0001606c - thumb_func_end sub_8022A3C - - thumb_func_start atk50_openpartyscreen -atk50_openpartyscreen: @ 8022A98 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - movs r7, 0 - movs r0, 0 - mov r9, r0 - ldr r6, _08022B44 @ =gBattlescriptCurrInstr - ldr r1, [r6] - ldrb r2, [r1, 0x2] - ldrb r0, [r1, 0x3] - lsls r0, 8 - orrs r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 16 - orrs r2, r0 - ldrb r0, [r1, 0x5] - lsls r0, 24 - orrs r2, r0 - mov r8, r2 - ldrb r2, [r1, 0x1] - adds r0, r2, 0 - mov r12, r6 - cmp r0, 0x5 - beq _08022ACE - b _08022F74 -_08022ACE: - ldr r0, _08022B48 @ =gBattleTypeFlags - ldrh r0, [r0] - movs r1, 0x41 - ands r1, r0 - cmp r1, 0x1 - beq _08022BBC - ldr r1, _08022B4C @ =gActiveBank - strb r7, [r1] - ldr r0, _08022B50 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r7, r0 - bcc _08022AE8 - b _08022F62 -_08022AE8: - ldr r7, _08022B54 @ =gHitMarker - ldr r6, _08022B58 @ =gBitTable - adds r4, r1, 0 - ldr r0, _08022B5C @ =gAbsentBankFlags - mov r8, r0 -_08022AF2: - ldrb r2, [r4] - lsls r0, r2, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r7] - ands r0, r1 - cmp r0, 0 - beq _08022B94 - adds r0, r2, 0 - movs r1, 0x6 - movs r2, 0x6 - bl sub_8018018 - lsls r0, 24 - cmp r0, 0 - beq _08022B60 - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - mov r2, r8 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r7] - bics r0, r1 - str r0, [r7] - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBufferBankForExecution - b _08022BA2 - .align 2, 0 -_08022B44: .4byte gBattlescriptCurrInstr -_08022B48: .4byte gBattleTypeFlags -_08022B4C: .4byte gActiveBank -_08022B50: .4byte gNoOfAllBanks -_08022B54: .4byte gHitMarker -_08022B58: .4byte gBitTable -_08022B5C: .4byte gAbsentBankFlags -_08022B60: - ldr r5, _08022B90 @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08022BA2 - movs r0, 0x6 - bl sub_8022A3C - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _08022BA2 - .align 2, 0 -_08022B90: .4byte gSpecialStatuses -_08022B94: - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBufferBankForExecution -_08022BA2: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08022BB8 @ =gNoOfAllBanks - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08022AF2 - b _08022F62 - .align 2, 0 -_08022BB8: .4byte gNoOfAllBanks -_08022BBC: - ands r1, r0 - cmp r1, 0 - bne _08022BC4 - b _08022F62 -_08022BC4: - ldr r0, _08022C1C @ =gHitMarker - mov r8, r0 - ldr r0, [r0] - lsrs r5, r0, 28 - ldr r6, _08022C20 @ =gBitTable - ldr r0, [r6] - ands r0, r5 - cmp r0, 0 - beq _08022C7E - ldr r4, _08022C24 @ =gActiveBank - strb r7, [r4] - movs r0, 0 - movs r1, 0x6 - movs r2, 0x6 - bl sub_8018018 - lsls r0, 24 - cmp r0, 0 - beq _08022C2C - ldr r2, _08022C28 @ =gAbsentBankFlags - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - mov r2, r8 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl dp01_build_cmdbuf_x2A_2A_2A_2A - ldrb r0, [r4] - bl MarkBufferBankForExecution - b _08022C7E - .align 2, 0 -_08022C1C: .4byte gHitMarker -_08022C20: .4byte gBitTable -_08022C24: .4byte gActiveBank -_08022C28: .4byte gAbsentBankFlags -_08022C2C: - ldr r6, _08022C60 @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08022C6C - ldr r0, _08022C64 @ =0x02000000 - ldr r1, _08022C68 @ =0x0001606a - adds r0, r1 - ldrb r0, [r0] - bl sub_8022A3C - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _08022C7E - .align 2, 0 -_08022C60: .4byte gSpecialStatuses -_08022C64: .4byte 0x02000000 -_08022C68: .4byte 0x0001606a -_08022C6C: - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBufferBankForExecution - movs r2, 0x1 - mov r9, r2 -_08022C7E: - ldr r6, _08022CD8 @ =gBitTable - ldr r0, [r6, 0x8] - ands r0, r5 - cmp r0, 0 - beq _08022D40 - ldr r0, [r6] - ands r0, r5 - cmp r0, 0 - bne _08022D40 - ldr r4, _08022CDC @ =gActiveBank - movs r0, 0x2 - strb r0, [r4] - movs r0, 0x2 - movs r1, 0x6 - movs r2, 0x6 - bl sub_8018018 - lsls r0, 24 - cmp r0, 0 - beq _08022CE8 - ldr r2, _08022CE0 @ =gAbsentBankFlags - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r2, _08022CE4 @ =gHitMarker - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl dp01_build_cmdbuf_x2A_2A_2A_2A - ldrb r0, [r4] - bl MarkBufferBankForExecution - b _08022D40 - .align 2, 0 -_08022CD8: .4byte gBitTable -_08022CDC: .4byte gActiveBank -_08022CE0: .4byte gAbsentBankFlags -_08022CE4: .4byte gHitMarker -_08022CE8: - ldr r6, _08022D1C @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08022D28 - ldr r0, _08022D20 @ =0x02000000 - ldr r1, _08022D24 @ =0x00016068 - adds r0, r1 - ldrb r0, [r0] - bl sub_8022A3C - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _08022D40 - .align 2, 0 -_08022D1C: .4byte gSpecialStatuses -_08022D20: .4byte 0x02000000 -_08022D24: .4byte 0x00016068 -_08022D28: - movs r0, 0x1 - mov r2, r9 - ands r0, r2 - cmp r0, 0 - bne _08022D40 - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBufferBankForExecution -_08022D40: - ldr r6, _08022D90 @ =gBitTable - ldr r0, [r6, 0x4] - ands r0, r5 - cmp r0, 0 - beq _08022DF6 - ldr r4, _08022D94 @ =gActiveBank - movs r0, 0x1 - strb r0, [r4] - movs r0, 0x1 - movs r1, 0x6 - movs r2, 0x6 - bl sub_8018018 - lsls r0, 24 - cmp r0, 0 - beq _08022DA0 - ldr r2, _08022D98 @ =gAbsentBankFlags - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r2, _08022D9C @ =gHitMarker - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl dp01_build_cmdbuf_x2A_2A_2A_2A - ldrb r0, [r4] - bl MarkBufferBankForExecution - b _08022DF6 - .align 2, 0 -_08022D90: .4byte gBitTable -_08022D94: .4byte gActiveBank -_08022D98: .4byte gAbsentBankFlags -_08022D9C: .4byte gHitMarker -_08022DA0: - ldr r6, _08022DD4 @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08022DE0 - ldr r0, _08022DD8 @ =0x02000000 - ldr r1, _08022DDC @ =0x0001606b - adds r0, r1 - ldrb r0, [r0] - bl sub_8022A3C - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _08022DF6 - .align 2, 0 -_08022DD4: .4byte gSpecialStatuses -_08022DD8: .4byte 0x02000000 -_08022DDC: .4byte 0x0001606b -_08022DE0: - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBufferBankForExecution - movs r0, 0x2 - mov r2, r9 - orrs r2, r0 - mov r9, r2 -_08022DF6: - ldr r6, _08022E50 @ =gBitTable - ldr r0, [r6, 0xC] - ands r0, r5 - cmp r0, 0 - beq _08022EB8 - ldr r0, [r6, 0x4] - ands r0, r5 - cmp r0, 0 - bne _08022EB8 - ldr r4, _08022E54 @ =gActiveBank - movs r0, 0x3 - strb r0, [r4] - movs r0, 0x3 - movs r1, 0x6 - movs r2, 0x6 - bl sub_8018018 - lsls r0, 24 - cmp r0, 0 - beq _08022E60 - ldr r2, _08022E58 @ =gAbsentBankFlags - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r2, _08022E5C @ =gHitMarker - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl dp01_build_cmdbuf_x2A_2A_2A_2A - ldrb r0, [r4] - bl MarkBufferBankForExecution - b _08022EB8 - .align 2, 0 -_08022E50: .4byte gBitTable -_08022E54: .4byte gActiveBank -_08022E58: .4byte gAbsentBankFlags -_08022E5C: .4byte gHitMarker -_08022E60: - ldr r6, _08022E94 @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08022EA0 - ldr r0, _08022E98 @ =0x02000000 - ldr r1, _08022E9C @ =0x00016069 - adds r0, r1 - ldrb r0, [r0] - bl sub_8022A3C - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _08022EB8 - .align 2, 0 -_08022E94: .4byte gSpecialStatuses -_08022E98: .4byte 0x02000000 -_08022E9C: .4byte 0x00016069 -_08022EA0: - movs r0, 0x2 - mov r2, r9 - ands r2, r0 - cmp r2, 0 - bne _08022EB8 - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBufferBankForExecution -_08022EB8: - ldr r1, _08022EE8 @ =gSpecialStatuses - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08022F0C - adds r0, r1, 0 - adds r0, 0x28 - ldrb r0, [r0] - lsls r0, 25 - cmp r0, 0 - blt _08022F0C - cmp r5, 0 - beq _08022F0C - ldr r0, _08022EEC @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r0, _08022EF0 @ =gBitTable - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _08022EF8 - ldr r1, _08022EF4 @ =gActiveBank - movs r0, 0x2 - strb r0, [r1] - b _08022EFC - .align 2, 0 -_08022EE8: .4byte gSpecialStatuses -_08022EEC: .4byte gAbsentBankFlags -_08022EF0: .4byte gBitTable -_08022EF4: .4byte gActiveBank -_08022EF8: - ldr r0, _08022F3C @ =gActiveBank - strb r1, [r0] -_08022EFC: - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldr r0, _08022F3C @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution -_08022F0C: - ldr r1, _08022F40 @ =gSpecialStatuses - ldrb r0, [r1, 0x14] - lsls r0, 25 - cmp r0, 0 - blt _08022F62 - adds r0, r1, 0 - adds r0, 0x3C - ldrb r0, [r0] - lsls r0, 25 - cmp r0, 0 - blt _08022F62 - cmp r5, 0 - beq _08022F62 - ldr r0, _08022F44 @ =gAbsentBankFlags - ldrb r0, [r0] - ldr r1, _08022F48 @ =gBitTable - ldr r1, [r1, 0x4] - ands r0, r1 - cmp r0, 0 - beq _08022F4C - ldr r1, _08022F3C @ =gActiveBank - movs r0, 0x3 - b _08022F50 - .align 2, 0 -_08022F3C: .4byte gActiveBank -_08022F40: .4byte gSpecialStatuses -_08022F44: .4byte gAbsentBankFlags -_08022F48: .4byte gBitTable -_08022F4C: - ldr r1, _08022F6C @ =gActiveBank - movs r0, 0x1 -_08022F50: - strb r0, [r1] - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldr r0, _08022F6C @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution -_08022F62: - ldr r1, _08022F70 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] - b _08023302 - .align 2, 0 -_08022F6C: .4byte gActiveBank -_08022F70: .4byte gBattlescriptCurrInstr -_08022F74: - cmp r0, 0x6 - beq _08022F7A - b _08023170 -_08022F7A: - ldr r0, _08022FF0 @ =gBattleTypeFlags - ldrh r2, [r0] - movs r0, 0x40 - ands r0, r2 - cmp r0, 0 - beq _08022F88 - b _0802310C -_08022F88: - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - bne _08022F92 - b _0802310C -_08022F92: - ldr r7, _08022FF4 @ =gHitMarker - ldr r0, [r7] - lsrs r5, r0, 28 - ldr r4, _08022FF8 @ =gBitTable - ldr r0, [r4, 0x8] - ands r0, r5 - cmp r0, 0 - beq _0802303A - ldr r0, [r4] - ands r0, r5 - cmp r0, 0 - beq _0802303A - ldr r6, _08022FFC @ =gActiveBank - movs r0, 0x2 - strb r0, [r6] - ldr r0, _08023000 @ =gBattleBufferB - ldrb r1, [r0, 0x1] - movs r0, 0x2 - movs r2, 0x6 - bl sub_8018018 - lsls r0, 24 - cmp r0, 0 - beq _08023008 - ldr r2, _08023004 @ =gAbsentBankFlags - ldrb r0, [r6] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r6] - lsls r0, 2 - adds r0, r4 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r7] - bics r0, r1 - str r0, [r7] - movs r0, 0 - bl dp01_build_cmdbuf_x2A_2A_2A_2A - ldrb r0, [r6] - bl MarkBufferBankForExecution - b _0802303A - .align 2, 0 -_08022FF0: .4byte gBattleTypeFlags -_08022FF4: .4byte gHitMarker -_08022FF8: .4byte gBitTable -_08022FFC: .4byte gActiveBank -_08023000: .4byte gBattleBufferB -_08023004: .4byte gAbsentBankFlags -_08023008: - ldr r4, _08023098 @ =gSpecialStatuses - ldrb r0, [r6] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _0802303A - ldr r0, _0802309C @ =0x02000000 - ldr r1, _080230A0 @ =0x00016068 - adds r0, r1 - ldrb r0, [r0] - bl sub_8022A3C - ldrb r1, [r6] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] -_0802303A: - ldr r4, _080230A4 @ =gBitTable - ldr r0, [r4, 0xC] - ands r0, r5 - cmp r0, 0 - beq _080230EE - ldr r0, [r4, 0x4] - ands r5, r0 - cmp r5, 0 - beq _080230EE - ldr r5, _080230A8 @ =gActiveBank - movs r0, 0x3 - strb r0, [r5] - ldr r0, _080230AC @ =gBattleBufferB - ldr r2, _080230B0 @ =0x00000201 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x3 - movs r2, 0x6 - bl sub_8018018 - lsls r0, 24 - cmp r0, 0 - beq _080230BC - ldr r2, _080230B4 @ =gAbsentBankFlags - ldrb r0, [r5] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r2, _080230B8 @ =gHitMarker - ldrb r0, [r5] - lsls r0, 2 - adds r0, r4 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl dp01_build_cmdbuf_x2A_2A_2A_2A - ldrb r0, [r5] - bl MarkBufferBankForExecution - b _080230EE - .align 2, 0 -_08023098: .4byte gSpecialStatuses -_0802309C: .4byte 0x02000000 -_080230A0: .4byte 0x00016068 -_080230A4: .4byte gBitTable -_080230A8: .4byte gActiveBank -_080230AC: .4byte gBattleBufferB -_080230B0: .4byte 0x00000201 -_080230B4: .4byte gAbsentBankFlags -_080230B8: .4byte gHitMarker -_080230BC: - ldr r4, _080230FC @ =gSpecialStatuses - ldrb r0, [r5] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _080230EE - ldr r0, _08023100 @ =0x02000000 - ldr r1, _08023104 @ =0x00016069 - adds r0, r1 - ldrb r0, [r0] - bl sub_8022A3C - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] -_080230EE: - ldr r1, _08023108 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] - mov r12, r1 - b _08023110 - .align 2, 0 -_080230FC: .4byte gSpecialStatuses -_08023100: .4byte 0x02000000 -_08023104: .4byte 0x00016069 -_08023108: .4byte gBattlescriptCurrInstr -_0802310C: - adds r0, r1, 0x6 - str r0, [r6] -_08023110: - ldr r0, _08023160 @ =gHitMarker - ldr r0, [r0] - lsrs r5, r0, 28 - ldr r1, _08023164 @ =gBank1 - movs r0, 0 - strb r0, [r1] - ldr r4, _08023168 @ =gBitTable - ldr r2, [r4] - ands r2, r5 - ldr r6, _0802316C @ =gNoOfAllBanks - cmp r2, 0 - bne _0802314C - adds r7, r6, 0 - ldrb r0, [r6] - cmp r2, r0 - bcs _0802314C - adds r3, r1, 0 -_08023132: - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] - ldrb r2, [r3] - lsls r0, r2, 2 - adds r0, r4 - ldr r0, [r0] - ands r0, r5 - cmp r0, 0 - bne _0802314C - ldrb r0, [r7] - cmp r2, r0 - bcc _08023132 -_0802314C: - ldrb r0, [r1] - ldrb r6, [r6] - cmp r0, r6 - beq _08023156 - b _08023302 -_08023156: - mov r1, r8 - mov r2, r12 - str r1, [r2] - b _08023302 - .align 2, 0 -_08023160: .4byte gHitMarker -_08023164: .4byte gBank1 -_08023168: .4byte gBitTable -_0802316C: .4byte gNoOfAllBanks -_08023170: - movs r0, 0x80 - ands r0, r2 - movs r5, 0x1 - cmp r0, 0 - beq _0802317C - movs r5, 0 -_0802317C: - movs r0, 0x7F - ands r0, r2 - bl sub_8015150 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r1, _080231A4 @ =gSpecialStatuses - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 25 - cmp r0, 0 - bge _080231A8 - ldr r0, [r6] - adds r0, 0x6 - str r0, [r6] - b _08023302 - .align 2, 0 -_080231A4: .4byte gSpecialStatuses -_080231A8: - adds r0, r7, 0 - movs r1, 0x6 - movs r2, 0x6 - bl sub_8018018 - lsls r0, 24 - cmp r0, 0 - beq _080231F8 - ldr r2, _080231E8 @ =gActiveBank - strb r7, [r2] - ldr r3, _080231EC @ =gAbsentBankFlags - ldr r4, _080231F0 @ =gBitTable - ldrb r0, [r2] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - ldrb r1, [r3] - orrs r0, r1 - strb r0, [r3] - ldr r3, _080231F4 @ =gHitMarker - ldrb r0, [r2] - lsls r0, 2 - adds r0, r4 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r3] - bics r0, r1 - str r0, [r3] - mov r0, r8 - str r0, [r6] - b _08023302 - .align 2, 0 -_080231E8: .4byte gActiveBank -_080231EC: .4byte gAbsentBankFlags -_080231F0: .4byte gBitTable -_080231F4: .4byte gHitMarker -_080231F8: - ldr r4, _080232A0 @ =gActiveBank - strb r7, [r4] - ldr r3, _080232A4 @ =0x02000000 - ldrb r0, [r4] - ldr r2, _080232A8 @ =0x00016064 - adds r1, r0, r2 - adds r1, r3 - ldr r2, _080232AC @ =gBattlePartyID - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1] - ldrb r1, [r4] - movs r0, 0x2 - eors r0, r1 - ldr r1, _080232B0 @ =0x00016068 - adds r0, r1 - adds r0, r3 - ldrb r2, [r0] - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - ldr r1, _080232B4 @ =0x0001606c - adds r3, r1 - adds r0, r3 - str r0, [sp] - movs r0, 0 - adds r1, r5, 0 - movs r3, 0 - bl dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, [r6] - adds r0, 0x6 - str r0, [r6] - ldrb r0, [r4] - bl GetBankIdentity - lsls r0, 24 - cmp r0, 0 - bne _0802325A - ldr r1, _080232B8 @ =gBattleResults - ldrb r0, [r1, 0x2] - cmp r0, 0xFE - bhi _0802325A - adds r0, 0x1 - strb r0, [r1, 0x2] -_0802325A: - ldr r0, _080232BC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080232C4 - ldr r1, _080232A0 @ =gActiveBank - movs r0, 0 - strb r0, [r1] - ldr r0, _080232C0 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r0, 0 - beq _08023302 - adds r4, r1, 0 -_08023276: - ldrb r0, [r4] - cmp r0, r7 - beq _0802328A - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBufferBankForExecution -_0802328A: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _080232C0 @ =gNoOfAllBanks - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08023276 - b _08023302 - .align 2, 0 -_080232A0: .4byte gActiveBank -_080232A4: .4byte 0x02000000 -_080232A8: .4byte 0x00016064 -_080232AC: .4byte gBattlePartyID -_080232B0: .4byte 0x00016068 -_080232B4: .4byte 0x0001606c -_080232B8: .4byte gBattleResults -_080232BC: .4byte gBattleTypeFlags -_080232C0: .4byte gNoOfAllBanks -_080232C4: - adds r0, r7, 0 - bl GetBankIdentity - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByPlayerAI - ldr r4, _08023310 @ =gActiveBank - strb r0, [r4] - ldr r0, _08023314 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _08023318 @ =gBitTable - ldrb r3, [r4] - lsls r0, r3, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _080232F4 - movs r0, 0x2 - eors r3, r0 - strb r3, [r4] -_080232F4: - movs r0, 0 - movs r1, 0x2 - bl EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBufferBankForExecution -_08023302: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08023310: .4byte gActiveBank -_08023314: .4byte gAbsentBankFlags -_08023318: .4byte gBitTable - thumb_func_end atk50_openpartyscreen - - thumb_func_start sub_802331C -sub_802331C: @ 802331C - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _0802334C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _0802332C - b _080234FE -_0802332C: - ldr r4, _08023350 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r7, _08023354 @ =gActiveBank - strb r0, [r7] - ldr r0, [r4] - ldrb r0, [r0, 0x2] - cmp r0, 0x1 - beq _080233A0 - cmp r0, 0x1 - bgt _08023358 - cmp r0, 0 - beq _0802335E - b _080234F6 - .align 2, 0 -_0802334C: .4byte gBattleExecBuffer -_08023350: .4byte gBattlescriptCurrInstr -_08023354: .4byte gActiveBank -_08023358: - cmp r0, 0x2 - beq _080233BC - b _080234F6 -_0802335E: - movs r3, 0 - ldr r2, _08023390 @ =gNoOfAllBanks - ldrb r0, [r2] - cmp r3, r0 - blt _0802336A - b _080234F6 -_0802336A: - ldr r0, _08023394 @ =0x02000000 - ldr r1, _08023398 @ =gBattleBufferB - movs r5, 0x80 - lsls r5, 2 - adds r4, r2, 0 - ldr r6, _0802339C @ =0x00016068 - adds r2, r0, r6 -_08023378: - ldrb r0, [r1] - cmp r0, 0x22 - bne _08023382 - ldrb r0, [r1, 0x1] - strb r0, [r2] -_08023382: - adds r1, r5 - adds r2, 0x1 - adds r3, 0x1 - ldrb r0, [r4] - cmp r3, r0 - blt _08023378 - b _080234F6 - .align 2, 0 -_08023390: .4byte gNoOfAllBanks -_08023394: .4byte 0x02000000 -_08023398: .4byte gBattleBufferB -_0802339C: .4byte 0x00016068 -_080233A0: - ldr r0, _080233B8 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080233AE - b _080234F6 -_080233AE: - ldrb r0, [r7] - bl sub_8012258 - b _080234F6 - .align 2, 0 -_080233B8: .4byte gBattleTypeFlags -_080233BC: - ldr r1, _08023484 @ =gBattleCommunication - ldr r4, _08023488 @ =gBattleBufferB - ldrb r0, [r7] - lsls r0, 9 - adds r2, r4, 0x1 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - ldr r6, _0802348C @ =0x02000000 - ldrb r0, [r7] - ldr r3, _08023490 @ =0x00016068 - adds r1, r0, r3 - adds r1, r6 - lsls r0, 9 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _08023494 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080234A4 - ldrb r0, [r7] - lsls r1, r0, 1 - adds r1, r0 - ldr r5, _08023498 @ =0x0001606c - adds r1, r5 - adds r1, r6 - ldrb r2, [r1] - movs r0, 0xF - ands r0, r2 - strb r0, [r1] - ldrb r0, [r7] - lsls r1, r0, 1 - adds r1, r0 - adds r1, r5 - adds r1, r6 - lsls r0, 9 - adds r2, r4, 0x2 - mov r12, r2 - add r0, r12 - ldrb r2, [r0] - movs r3, 0xF0 - adds r0, r3, 0 - ands r0, r2 - ldrb r2, [r1] - orrs r0, r2 - strb r0, [r1] - ldrb r0, [r7] - lsls r1, r0, 1 - adds r1, r0 - ldr r2, _0802349C @ =0x0001606d - adds r1, r2 - adds r1, r6 - lsls r0, 9 - adds r4, 0x3 - mov r8, r4 - add r0, r8 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r7] - movs r4, 0x2 - eors r0, r4 - lsls r1, r0, 1 - adds r1, r0 - adds r1, r5 - adds r1, r6 - ldrb r2, [r1] - adds r0, r3, 0 - ands r0, r2 - strb r0, [r1] - ldrb r0, [r7] - eors r0, r4 - lsls r1, r0, 1 - adds r1, r0 - adds r1, r5 - adds r1, r6 - ldrb r0, [r7] - lsls r0, 9 - add r0, r12 - ldrb r0, [r0] - ands r3, r0 - lsrs r3, 4 - ldrb r0, [r1] - orrs r3, r0 - strb r3, [r1] - ldrb r0, [r7] - eors r4, r0 - lsls r1, r4, 1 - adds r1, r4 - ldr r3, _080234A0 @ =0x0001606e - adds r1, r3 - adds r1, r6 - ldrb r0, [r7] - lsls r0, 9 - add r0, r8 - ldrb r0, [r0] - strb r0, [r1] - b _080234AA - .align 2, 0 -_08023484: .4byte gBattleCommunication -_08023488: .4byte gBattleBufferB -_0802348C: .4byte 0x02000000 -_08023490: .4byte 0x00016068 -_08023494: .4byte gBattleTypeFlags -_08023498: .4byte 0x0001606c -_0802349C: .4byte 0x0001606d -_080234A0: .4byte 0x0001606e -_080234A4: - ldrb r0, [r7] - bl sub_8012258 -_080234AA: - ldr r1, _08023508 @ =gBattleTextBuff1 - movs r5, 0xFD - strb r5, [r1] - movs r0, 0x6 - strb r0, [r1, 0x1] - ldr r4, _0802350C @ =gBattleMons - ldr r3, _08023510 @ =gBankAttacker - ldrb r0, [r3] - movs r2, 0x58 - muls r0, r2 - adds r0, r4 - ldrh r0, [r0] - strb r0, [r1, 0x2] - ldrb r0, [r3] - muls r0, r2 - adds r0, r4 - ldrh r0, [r0] - lsrs r0, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r2, _08023514 @ =gBattleTextBuff2 - strb r5, [r2] - movs r0, 0x7 - strb r0, [r2, 0x1] - ldr r3, _08023518 @ =gActiveBank - ldrb r0, [r3] - strb r0, [r2, 0x2] - ldr r1, _0802351C @ =gBattleBufferB - ldrb r0, [r3] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2, 0x3] - movs r0, 0x1 - negs r0, r0 - strb r0, [r2, 0x4] -_080234F6: - ldr r1, _08023520 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x3 - str r0, [r1] -_080234FE: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08023508: .4byte gBattleTextBuff1 -_0802350C: .4byte gBattleMons -_08023510: .4byte gBankAttacker -_08023514: .4byte gBattleTextBuff2 -_08023518: .4byte gActiveBank -_0802351C: .4byte gBattleBufferB -_08023520: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802331C - - thumb_func_start sub_8023524 -sub_8023524: @ 8023524 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - ldr r6, _08023630 @ =gBattlescriptCurrInstr - ldr r0, [r6] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _08023634 @ =gActiveBank - strb r0, [r4] - ldrb r0, [r4] - bl sub_80157C4 - ldr r2, _08023638 @ =gHitMarker - ldr r1, _0802363C @ =gBitTable - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - ldr r2, _08023640 @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r2, [r1] - movs r0, 0x41 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldrb r0, [r4] - bl GetBankSide - ldr r5, _08023644 @ =gSideAffecting - lsls r0, 24 - lsrs r0, 23 - adds r0, r5 - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 2 - mov r8, r0 - ands r0, r1 - cmp r0, 0 - bne _0802367C - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 23 - adds r0, r5 - ldrh r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0802367C - ldr r1, _08023648 @ =gBattleMons - mov r9, r1 - ldrb r2, [r4] - movs r7, 0x58 - adds r0, r2, 0 - muls r0, r7 - adds r1, r0, r1 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x2 - beq _0802367C - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x2 - beq _0802367C - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1A - beq _0802367C - adds r0, r2, 0 - bl GetBankSide - lsls r0, 24 - lsrs r0, 23 - adds r0, r5 - ldrh r2, [r0] - mov r1, r8 - orrs r1, r2 - strh r1, [r0] - ldrb r0, [r4] - bl GetBankSide - ldr r2, _0802364C @ =gSideTimer - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x6] - movs r1, 0x5 - subs r1, r0 - lsls r1, 25 - lsrs r1, 24 - ldr r5, _08023650 @ =gBattleMoveDamage - ldrb r0, [r4] - muls r0, r7 - add r0, r9 - ldrh r0, [r0, 0x2C] - bl __divsi3 - str r0, [r5] - cmp r0, 0 - bne _08023614 - movs r0, 0x1 - str r0, [r5] -_08023614: - ldr r0, _08023654 @ =0x02000000 - ldrb r1, [r4] - ldr r2, _08023658 @ =0x00016003 - adds r0, r2 - strb r1, [r0] - bl b_movescr_stack_push_cursor - ldr r0, [r6] - ldrb r0, [r0, 0x1] - cmp r0, 0 - bne _08023660 - ldr r0, _0802365C @ =gUnknown_081D919F - str r0, [r6] - b _080237B6 - .align 2, 0 -_08023630: .4byte gBattlescriptCurrInstr -_08023634: .4byte gActiveBank -_08023638: .4byte gHitMarker -_0802363C: .4byte gBitTable -_08023640: .4byte gSpecialStatuses -_08023644: .4byte gSideAffecting -_08023648: .4byte gBattleMons -_0802364C: .4byte gSideTimer -_08023650: .4byte gBattleMoveDamage -_08023654: .4byte 0x02000000 -_08023658: .4byte 0x00016003 -_0802365C: .4byte gUnknown_081D919F -_08023660: - cmp r0, 0x1 - bne _08023670 - ldr r0, _0802366C @ =gUnknown_081D9171 - str r0, [r6] - b _080237B6 - .align 2, 0 -_0802366C: .4byte gUnknown_081D9171 -_08023670: - ldr r0, _08023678 @ =gUnknown_081D91CD - str r0, [r6] - b _080237B6 - .align 2, 0 -_08023678: .4byte gUnknown_081D91CD -_0802367C: - ldr r1, _08023754 @ =gBattleMons - ldr r5, _08023758 @ =gActiveBank - ldrb r2, [r5] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x36 - bne _080236A2 - ldr r1, _0802375C @ =gDisableStructs - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x18] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0, 0x18] -_080236A2: - ldrb r1, [r5] - movs r0, 0 - str r0, [sp] - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _080236B8 - b _080237B6 -_080236B8: - ldrb r1, [r5] - movs r0, 0 - movs r2, 0 - bl sub_801A02C - lsls r0, 24 - cmp r0, 0 - bne _080237B6 - ldrb r0, [r5] - bl GetBankSide - ldr r1, _08023760 @ =gSideAffecting - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - ldrh r2, [r0] - ldr r1, _08023764 @ =0x0000fdff - ands r1, r2 - strh r1, [r0] - movs r4, 0 - ldr r0, _08023768 @ =gNoOfAllBanks - ldrb r3, [r0] - cmp r4, r3 - bge _08023706 - ldr r6, _0802376C @ =gTurnOrder - ldr r3, _08023770 @ =gUnknown_02024A76 - movs r2, 0xC - adds r1, r0, 0 -_080236F0: - adds r0, r4, r6 - ldrb r0, [r0] - ldrb r7, [r5] - cmp r0, r7 - bne _080236FE - adds r0, r4, r3 - strb r2, [r0] -_080236FE: - adds r4, 0x1 - ldrb r0, [r1] - cmp r4, r0 - blt _080236F0 -_08023706: - movs r4, 0 - ldr r0, _08023768 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r4, r0 - bge _08023736 - ldr r5, _08023754 @ =gBattleMons -_08023712: - lsls r0, r4, 24 - lsrs r0, 24 - bl GetBankSide - lsls r0, 24 - lsrs r0, 23 - ldr r1, _08023774 @ =0x020160bc - adds r0, r1 - movs r1, 0x58 - muls r1, r4 - adds r1, r5 - ldrh r1, [r1, 0x28] - strh r1, [r0] - adds r4, 0x1 - ldr r0, _08023768 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r4, r0 - blt _08023712 -_08023736: - ldr r0, _08023778 @ =gBattlescriptCurrInstr - ldr r1, [r0] - ldrb r1, [r1, 0x1] - adds r5, r0, 0 - cmp r1, 0x5 - bne _080237B0 - ldr r0, _0802377C @ =gHitMarker - ldr r0, [r0] - lsrs r4, r0, 28 - ldr r1, _08023780 @ =gBank1 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r2, _08023784 @ =gBitTable - b _08023796 - .align 2, 0 -_08023754: .4byte gBattleMons -_08023758: .4byte gActiveBank -_0802375C: .4byte gDisableStructs -_08023760: .4byte gSideAffecting -_08023764: .4byte 0x0000fdff -_08023768: .4byte gNoOfAllBanks -_0802376C: .4byte gTurnOrder -_08023770: .4byte gUnknown_02024A76 -_08023774: .4byte 0x020160bc -_08023778: .4byte gBattlescriptCurrInstr -_0802377C: .4byte gHitMarker -_08023780: .4byte gBank1 -_08023784: .4byte gBitTable -_08023788: - ldr r0, _080237C4 @ =gNoOfAllBanks - ldrb r3, [r1] - ldrb r0, [r0] - cmp r3, r0 - bcs _080237B0 - adds r0, r3, 0x1 - strb r0, [r1] -_08023796: - ldrb r0, [r1] - lsls r0, 2 - adds r0, r2 - ldr r3, [r0] - adds r0, r4, 0 - ands r0, r3 - cmp r0, 0 - beq _08023788 - ldr r0, _080237C8 @ =gAbsentBankFlags - ldrb r0, [r0] - ands r0, r3 - cmp r0, 0 - bne _08023788 -_080237B0: - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] -_080237B6: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080237C4: .4byte gNoOfAllBanks -_080237C8: .4byte gAbsentBankFlags - thumb_func_end sub_8023524 - - thumb_func_start sub_80237CC -sub_80237CC: @ 80237CC - push {lr} - ldr r0, _080237DC @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r0, 0 - bne _080237E0 - movs r0, 0 - b _080237E2 - .align 2, 0 -_080237DC: .4byte gBattlescriptCurrInstr -_080237E0: - movs r0, 0x1 -_080237E2: - bl GetBankByPlayerAI - ldr r1, _08023804 @ =gActiveBank - strb r0, [r1] - movs r0, 0 - bl dp01_build_cmdbuf_x08_8_8_8 - ldr r0, _08023804 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - ldr r1, _08023808 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08023804: .4byte gActiveBank -_08023808: .4byte gBattlescriptCurrInstr - thumb_func_end sub_80237CC - - thumb_func_start atk54_802511C -atk54_802511C: @ 802380C - push {r4,r5,lr} - ldr r5, _0802383C @ =gActiveBank - ldr r0, _08023840 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r5] - ldr r4, _08023844 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r1, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r1, r0 - movs r0, 0 - bl EmitEffectivenessSound - ldrb r0, [r5] - bl MarkBufferBankForExecution - ldr r0, [r4] - adds r0, 0x3 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802383C: .4byte gActiveBank -_08023840: .4byte gBankAttacker -_08023844: .4byte gBattlescriptCurrInstr - thumb_func_end atk54_802511C - - thumb_func_start sub_8023848 -sub_8023848: @ 8023848 - push {r4,r5,lr} - ldr r5, _08023878 @ =gActiveBank - ldr r0, _0802387C @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r5] - ldr r4, _08023880 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r1, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r1, r0 - movs r0, 0 - bl sub_800D074 - ldrb r0, [r5] - bl MarkBufferBankForExecution - ldr r0, [r4] - adds r0, 0x3 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08023878: .4byte gActiveBank -_0802387C: .4byte gBankAttacker -_08023880: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8023848 - - thumb_func_start atk56_8025194 -atk56_8025194: @ 8023884 - push {r4,r5,lr} - ldr r5, _080238AC @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _080238B0 @ =gActiveBank - strb r0, [r4] - movs r0, 0 - bl EmitFaintingCry - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080238AC: .4byte gBattlescriptCurrInstr -_080238B0: .4byte gActiveBank - thumb_func_end atk56_8025194 - - thumb_func_start atk57_80251C4_flee -atk57_80251C4_flee: @ 80238B4 - push {r4,lr} - movs r0, 0 - bl GetBankByPlayerAI - ldr r4, _080238E0 @ =gActiveBank - strb r0, [r4] - ldr r0, _080238E4 @ =gBattleOutcome - ldrb r1, [r0] - movs r0, 0 - bl dp01_build_cmdbuf_x37_a - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r1, _080238E8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080238E0: .4byte gActiveBank -_080238E4: .4byte gBattleOutcome -_080238E8: .4byte gBattlescriptCurrInstr - thumb_func_end atk57_80251C4_flee - - thumb_func_start atk58_cmd58 -atk58_cmd58: @ 80238EC - push {r4,r5,lr} - ldr r5, _08023918 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _0802391C @ =gActiveBank - strb r0, [r4] - movs r0, 0 - movs r1, 0x1 - bl dp01_build_cmdbuf_x06_a - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08023918: .4byte gBattlescriptCurrInstr -_0802391C: .4byte gActiveBank - thumb_func_end atk58_cmd58 - - thumb_func_start atk59_8025230 -atk59_8025230: @ 8023920 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r0, _0802399C @ =gBattlescriptCurrInstr - ldr r2, [r0] - ldrb r6, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r6, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r6, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r6, r0 - ldrb r4, [r2, 0x5] - ldrb r0, [r2, 0x6] - lsls r0, 8 - orrs r4, r0 - ldrb r0, [r2, 0x7] - lsls r0, 16 - orrs r4, r0 - ldrb r0, [r2, 0x8] - lsls r0, 24 - orrs r4, r0 - ldr r0, _080239A0 @ =0x02000000 - ldr r1, _080239A4 @ =0x00016018 - adds r7, r0, r1 - ldrb r1, [r7] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080239A8 @ =gPlayerParty - adds r0, r1 - ldrb r1, [r2, 0x9] - bl sub_803B7C8 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, _080239AC @ =0x0000fffe - cmp r5, r0 - bne _08023992 - mov r9, r7 - mov r8, r5 - movs r7, 0x64 -_0802397A: - mov r3, r9 - ldrb r0, [r3] - muls r0, r7 - ldr r1, _080239A8 @ =gPlayerParty - adds r0, r1 - movs r1, 0 - bl sub_803B7C8 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r8 - beq _0802397A -_08023992: - cmp r5, 0 - bne _080239B0 - ldr r0, _0802399C @ =gBattlescriptCurrInstr - str r4, [r0] - b _08023A58 - .align 2, 0 -_0802399C: .4byte gBattlescriptCurrInstr -_080239A0: .4byte 0x02000000 -_080239A4: .4byte 0x00016018 -_080239A8: .4byte gPlayerParty -_080239AC: .4byte 0x0000fffe -_080239B0: - ldr r0, _080239C0 @ =0x0000ffff - cmp r5, r0 - bne _080239C8 - ldr r1, _080239C4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0xA - str r0, [r1] - b _08023A58 - .align 2, 0 -_080239C0: .4byte 0x0000ffff -_080239C4: .4byte gBattlescriptCurrInstr -_080239C8: - movs r0, 0 - bl GetBankByPlayerAI - ldr r1, _08023A64 @ =gActiveBank - strb r0, [r1] - ldr r0, _08023A68 @ =gBattlePartyID - ldrb r2, [r1] - lsls r1, r2, 1 - adds r1, r0 - ldr r0, _08023A6C @ =0x02000000 - ldr r3, _08023A70 @ =0x00016018 - adds r0, r3 - ldrh r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bne _08023A08 - ldr r3, _08023A74 @ =gBattleMons - movs r0, 0x58 - muls r2, r0 - adds r0, r3, 0 - adds r0, 0x50 - adds r0, r2, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _08023A08 - adds r0, r2, r3 - adds r1, r5, 0 - bl GiveMoveToBattleMon -_08023A08: - ldr r0, _08023A78 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08023A54 - movs r0, 0x2 - bl GetBankByPlayerAI - ldr r1, _08023A64 @ =gActiveBank - strb r0, [r1] - ldr r0, _08023A68 @ =gBattlePartyID - ldrb r2, [r1] - lsls r1, r2, 1 - adds r1, r0 - ldr r0, _08023A6C @ =0x02000000 - ldr r3, _08023A70 @ =0x00016018 - adds r0, r3 - ldrh r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bne _08023A54 - ldr r3, _08023A74 @ =gBattleMons - movs r0, 0x58 - muls r2, r0 - adds r0, r3, 0 - adds r0, 0x50 - adds r0, r2, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _08023A54 - adds r0, r2, r3 - adds r1, r5, 0 - bl GiveMoveToBattleMon -_08023A54: - ldr r0, _08023A7C @ =gBattlescriptCurrInstr - str r6, [r0] -_08023A58: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08023A64: .4byte gActiveBank -_08023A68: .4byte gBattlePartyID -_08023A6C: .4byte 0x02000000 -_08023A70: .4byte 0x00016018 -_08023A74: .4byte gBattleMons -_08023A78: .4byte gBattleTypeFlags -_08023A7C: .4byte gBattlescriptCurrInstr - thumb_func_end atk59_8025230 - - thumb_func_start sub_8023A80 -sub_8023A80: @ 8023A80 - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - movs r0, 0x18 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl sub_802BBD4 - ldr r4, _08023AC8 @ =gUnknown_03004210 - ldr r1, _08023ACC @ =gUnknown_08400D7A - movs r2, 0x80 - lsls r2, 1 - movs r0, 0x9 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x19 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _08023AD0 @ =0x0000ffff - ldr r3, _08023AD4 @ =0x00002d9f - movs r0, 0x20 - str r0, [sp] - movs r0, 0 - movs r2, 0xC - bl sub_814A5C0 - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08023AC8: .4byte gUnknown_03004210 -_08023ACC: .4byte gUnknown_08400D7A -_08023AD0: .4byte 0x0000ffff -_08023AD4: .4byte 0x00002d9f - thumb_func_end sub_8023A80 - - thumb_func_start sub_8023AD8 -sub_8023AD8: @ 8023AD8 - push {lr} - sub sp, 0x4 - movs r0, 0x1 - str r0, [sp] - movs r0, 0x18 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl sub_802BBD4 - bl DestroyMenuCursor - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_8023AD8 - - thumb_func_start sub_8023AF8 -sub_8023AF8: @ 8023AF8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - ldr r1, _08023B24 @ =gActiveBank - movs r0, 0 - strb r0, [r1] - ldr r1, _08023B28 @ =0x02000000 - ldr r2, _08023B2C @ =0x0001601a - adds r0, r1, r2 - ldrb r0, [r0] - adds r5, r1, 0 - cmp r0, 0x5 - bls _08023B18 - b _08023E5C -_08023B18: - lsls r0, 2 - ldr r1, _08023B30 @ =_08023B34 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08023B24: .4byte gActiveBank -_08023B28: .4byte 0x02000000 -_08023B2C: .4byte 0x0001601a -_08023B30: .4byte _08023B34 - .align 2, 0 -_08023B34: - .4byte _08023B4C - .4byte _08023B74 - .4byte _08023C30 - .4byte _08023C84 - .4byte _08023E38 - .4byte _08023E4C -_08023B4C: - bl sub_8023A80 - ldr r1, _08023B68 @ =0x02000000 - ldr r0, _08023B6C @ =0x0001601a - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - movs r2, 0 - strb r0, [r1] - ldr r0, _08023B70 @ =gBattleCommunication - strb r2, [r0, 0x1] - bl sub_802BC6C - b _08023E5C - .align 2, 0 -_08023B68: .4byte 0x02000000 -_08023B6C: .4byte 0x0001601a -_08023B70: .4byte gBattleCommunication -_08023B74: - ldr r0, _08023BFC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08023B9A - ldr r4, _08023C00 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08023B9A - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0 - strb r0, [r4, 0x1] - bl sub_802BC6C -_08023B9A: - ldr r0, _08023BFC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08023BC0 - ldr r4, _08023C00 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08023BC0 - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0x1 - strb r0, [r4, 0x1] - bl sub_802BC6C -_08023BC0: - ldr r0, _08023BFC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08023C0C - movs r0, 0x5 - bl PlaySE - ldr r0, _08023C00 @ =gBattleCommunication - ldrb r4, [r0, 0x1] - cmp r4, 0 - bne _08023C1C - bl sub_8023AD8 - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08023C04 @ =0x02000000 - ldr r2, _08023C08 @ =0x0001601a - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - b _08023E5A - .align 2, 0 -_08023BFC: .4byte gMain -_08023C00: .4byte gBattleCommunication -_08023C04: .4byte 0x02000000 -_08023C08: .4byte 0x0001601a -_08023C0C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08023C16 - b _08023E5C -_08023C16: - movs r0, 0x5 - bl PlaySE -_08023C1C: - ldr r0, _08023C28 @ =0x02000000 - ldr r1, _08023C2C @ =0x0001601a - adds r0, r1 - movs r1, 0x4 - strb r1, [r0] - b _08023E5C - .align 2, 0 -_08023C28: .4byte 0x02000000 -_08023C2C: .4byte 0x0001601a -_08023C30: - ldr r0, _08023C68 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08023C3E - b _08023E5C -_08023C3E: - ldr r0, _08023C6C @ =gPlayerParty - ldr r2, _08023C70 @ =0x00016018 - adds r1, r5, r2 - ldrb r1, [r1] - ldr r2, _08023C74 @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _08023C78 @ =ReshowBattleScreenAfterMenu - ldr r4, _08023C7C @ =word_2024E82 - ldrh r4, [r4] - str r4, [sp] - bl sub_809D9F0 - ldr r0, _08023C80 @ =0x0001601a - adds r1, r5, r0 - ldrb r0, [r1] - adds r0, 0x1 - b _08023E5A - .align 2, 0 -_08023C68: .4byte gPaletteFade -_08023C6C: .4byte gPlayerParty -_08023C70: .4byte 0x00016018 -_08023C74: .4byte gPlayerPartyCount -_08023C78: .4byte ReshowBattleScreenAfterMenu -_08023C7C: .4byte word_2024E82 -_08023C80: .4byte 0x0001601a -_08023C84: - ldr r0, _08023CB4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08023C92 - b _08023E5C -_08023C92: - ldr r0, _08023CB8 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _08023CBC @ =sub_800F808 - cmp r1, r0 - beq _08023C9E - b _08023E5C -_08023C9E: - bl sub_809FA30 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x4 - bne _08023CC8 - ldr r0, _08023CC0 @ =0x02000000 - ldr r1, _08023CC4 @ =0x0001601a - adds r0, r1 - strb r5, [r0] - b _08023E5C - .align 2, 0 -_08023CB4: .4byte gPaletteFade -_08023CB8: .4byte gMain -_08023CBC: .4byte sub_800F808 -_08023CC0: .4byte 0x02000000 -_08023CC4: .4byte 0x0001601a -_08023CC8: - ldr r2, _08023D08 @ =0x02000000 - mov r9, r2 - ldr r6, _08023D0C @ =0x00016018 - add r6, r9 - ldrb r0, [r6] - movs r1, 0x64 - mov r8, r1 - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - ldr r7, _08023D10 @ =gPlayerParty - adds r0, r7 - adds r1, r5, 0 - adds r1, 0xD - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl IsHMMove2 - cmp r0, 0 - beq _08023D20 - ldr r0, _08023D14 @ =0x0000013f - ldr r1, _08023D18 @ =gActiveBank - ldrb r1, [r1] - bl PrepareStringBattle - ldr r1, _08023D1C @ =0x0001601a - add r1, r9 - movs r0, 0x5 - b _08023E5A - .align 2, 0 -_08023D08: .4byte 0x02000000 -_08023D0C: .4byte 0x00016018 -_08023D10: .4byte gPlayerParty -_08023D14: .4byte 0x0000013f -_08023D18: .4byte gActiveBank -_08023D1C: .4byte 0x0001601a -_08023D20: - ldr r3, _08023E10 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - ldr r1, _08023E14 @ =gBattleTextBuff2 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - strb r4, [r1, 0x2] - lsrs r0, r4, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldrb r0, [r6] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - adds r1, r5, 0 - bl RemoveMonPPBonus - ldrb r0, [r6] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - adds r0, r7 - ldr r7, _08023E18 @ =word_2024E82 - ldrh r1, [r7] - adds r2, r5, 0 - bl SetMonMoveSlot - ldr r0, _08023E1C @ =gBattlePartyID - ldrh r0, [r0] - ldrb r6, [r6] - cmp r0, r6 - bne _08023DB0 - ldr r4, _08023E20 @ =gBattleMons - ldr r0, [r4, 0x50] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _08023DB0 - ldr r0, _08023E24 @ =gDisableStructs - ldrb r1, [r0, 0x18] - lsrs r1, 4 - ldr r2, _08023E28 @ =gBitTable - lsls r0, r5, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _08023DB0 - adds r0, r4, 0 - adds r1, r5, 0 - bl RemoveBattleMonPPBonus - ldrh r1, [r7] - adds r0, r4, 0 - adds r2, r5, 0 - bl SetBattleMonMoveSlot -_08023DB0: - ldr r0, _08023E2C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08023E5C - ldr r0, _08023E1C @ =gBattlePartyID - ldr r1, _08023E30 @ =0x02000000 - ldr r2, _08023E34 @ =0x00016018 - adds r1, r2 - ldrh r0, [r0, 0x4] - ldrb r1, [r1] - cmp r0, r1 - bne _08023E5C - ldr r4, _08023E20 @ =gBattleMons - movs r1, 0x80 - lsls r1, 1 - adds r0, r4, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _08023E5C - ldr r0, _08023E24 @ =gDisableStructs - adds r0, 0x50 - ldrb r1, [r0] - lsrs r1, 4 - ldr r2, _08023E28 @ =gBitTable - lsls r0, r5, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _08023E5C - adds r4, 0xB0 - adds r0, r4, 0 - adds r1, r5, 0 - bl RemoveBattleMonPPBonus - ldr r0, _08023E18 @ =word_2024E82 - ldrh r1, [r0] - adds r0, r4, 0 - adds r2, r5, 0 - bl SetBattleMonMoveSlot - b _08023E5C - .align 2, 0 -_08023E10: .4byte gBattlescriptCurrInstr -_08023E14: .4byte gBattleTextBuff2 -_08023E18: .4byte word_2024E82 -_08023E1C: .4byte gBattlePartyID -_08023E20: .4byte gBattleMons -_08023E24: .4byte gDisableStructs -_08023E28: .4byte gBitTable -_08023E2C: .4byte gBattleTypeFlags -_08023E30: .4byte 0x02000000 -_08023E34: .4byte 0x00016018 -_08023E38: - bl sub_8023AD8 - ldr r1, _08023E48 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08023E5C - .align 2, 0 -_08023E48: .4byte gBattlescriptCurrInstr -_08023E4C: - ldr r0, _08023E6C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _08023E5C - ldr r2, _08023E70 @ =0x0001601a - adds r1, r5, r2 - movs r0, 0x2 -_08023E5A: - strb r0, [r1] -_08023E5C: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08023E6C: .4byte gBattleExecBuffer -_08023E70: .4byte 0x0001601a - thumb_func_end sub_8023AF8 - - thumb_func_start atk5B_80256E0 -atk5B_80256E0: @ 8023E74 - push {r4,r5,lr} - ldr r0, _08023E88 @ =0x02000000 - ldr r1, _08023E8C @ =0x0001601a - adds r5, r0, r1 - ldrb r4, [r5] - cmp r4, 0 - beq _08023E90 - cmp r4, 0x1 - beq _08023EA8 - b _08023F78 - .align 2, 0 -_08023E88: .4byte 0x02000000 -_08023E8C: .4byte 0x0001601a -_08023E90: - bl sub_8023A80 - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - ldr r0, _08023EA4 @ =gBattleCommunication - strb r4, [r0, 0x1] - bl sub_802BC6C - b _08023F78 - .align 2, 0 -_08023EA4: .4byte gBattleCommunication -_08023EA8: - ldr r0, _08023F2C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08023ECE - ldr r4, _08023F30 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08023ECE - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0 - strb r0, [r4, 0x1] - bl sub_802BC6C -_08023ECE: - ldr r0, _08023F2C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08023EF4 - ldr r4, _08023F30 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08023EF4 - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0x1 - strb r0, [r4, 0x1] - bl sub_802BC6C -_08023EF4: - ldr r0, _08023F2C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08023F4C - movs r0, 0x5 - bl PlaySE - ldr r0, _08023F30 @ =gBattleCommunication - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _08023F38 - ldr r3, _08023F34 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08023F40 - .align 2, 0 -_08023F2C: .4byte gMain -_08023F30: .4byte gBattleCommunication -_08023F34: .4byte gBattlescriptCurrInstr -_08023F38: - ldr r1, _08023F48 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08023F40: - bl sub_8023AD8 - b _08023F78 - .align 2, 0 -_08023F48: .4byte gBattlescriptCurrInstr -_08023F4C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08023F78 - movs r0, 0x5 - bl PlaySE - ldr r3, _08023F80 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - bl sub_8023AD8 -_08023F78: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08023F80: .4byte gBattlescriptCurrInstr - thumb_func_end atk5B_80256E0 - - thumb_func_start atk5C_cmd5c -atk5C_cmd5c: @ 8023F84 - push {r4,lr} - ldr r4, _08023FF0 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r2, _08023FF4 @ =gActiveBank - strb r0, [r2] - ldr r0, _08023FF8 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _08024008 - ldr r0, _08023FFC @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 1 - ands r0, r1 - cmp r0, 0 - beq _08023FD6 - ldr r1, _08024000 @ =gBattleMons - ldrb r2, [r2] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 17 - ands r0, r1 - cmp r0, 0 - beq _08023FD6 - ldr r0, _08024004 @ =gDisableStructs - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - cmp r0, 0 - bne _08024008 -_08023FD6: - movs r0, 0 - bl EmitHitAnimation - ldr r0, _08023FF4 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - ldr r1, _08023FF0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - b _0802400E - .align 2, 0 -_08023FF0: .4byte gBattlescriptCurrInstr -_08023FF4: .4byte gActiveBank -_08023FF8: .4byte gBattleMoveFlags -_08023FFC: .4byte gHitMarker -_08024000: .4byte gBattleMons -_08024004: .4byte gDisableStructs -_08024008: - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] -_0802400E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end atk5C_cmd5c - - thumb_func_start sub_8024014 -sub_8024014: @ 8024014 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0 - movs r5, 0 - ldr r0, _08024048 @ =gTrainerBattleOpponent - ldrh r2, [r0] - movs r1, 0x80 - lsls r1, 3 - cmp r2, r1 - bne _08024058 - ldr r0, _0802404C @ =0x02017000 - adds r1, r0, 0 - adds r1, 0x94 - ldrb r2, [r1] - ldr r1, _08024050 @ =0xfffff056 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r4, r2, 0 - muls r4, r0 - ldr r0, _08024054 @ =gSaveBlock1 + 0x490 - mov r8, r0 - b _08024140 - .align 2, 0 -_08024048: .4byte gTrainerBattleOpponent -_0802404C: .4byte 0x02017000 -_08024050: .4byte 0xfffff056 -_08024054: .4byte gSaveBlock1 + 0x490 -_08024058: - ldr r2, _08024074 @ =gTrainers - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r3, r0, 3 - adds r4, r3, r2 - ldrb r1, [r4] - cmp r1, 0x1 - beq _080240AE - cmp r1, 0x1 - bgt _08024078 - cmp r1, 0 - beq _08024082 - b _080240C4 - .align 2, 0 -_08024074: .4byte gTrainers -_08024078: - cmp r1, 0x2 - beq _08024098 - cmp r1, 0x3 - beq _080240AE - b _080240C4 -_08024082: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r3, r0 - ldr r1, [r0] - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - lsls r0, 3 - adds r0, r1 - subs r0, 0x8 - b _080240C2 -_08024098: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r3, r0 - ldr r1, [r0] - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - lsls r0, 3 - adds r0, r1 - subs r0, 0x8 - b _080240C2 -_080240AE: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r3, r0 - ldr r1, [r0] - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - subs r0, 0x10 -_080240C2: - ldrb r5, [r0, 0x2] -_080240C4: - ldr r0, _08024120 @ =gTrainerMoney - lsls r1, r6, 2 - adds r3, r1, r0 - ldrb r1, [r3] - mov r12, r0 - lsls r4, r5, 2 - ldr r5, _08024124 @ =0x02000000 - ldr r7, _08024128 @ =gBattleTypeFlags - ldr r0, _0802412C @ =gSaveBlock1 + 0x490 - mov r8, r0 - cmp r1, 0xFF - beq _080240FE - ldr r2, _08024130 @ =gTrainers - ldr r0, _08024134 @ =gTrainerBattleOpponent - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r2, [r0, 0x1] - adds r1, r3, 0 -_080240EE: - ldrb r0, [r1] - cmp r0, r2 - beq _080240FE - adds r1, 0x4 - adds r6, 0x1 - ldrb r0, [r1] - cmp r0, 0xFF - bne _080240EE -_080240FE: - ldr r1, _08024138 @ =0x00016056 - adds r0, r5, r1 - ldrb r0, [r0] - adds r3, r4, 0 - muls r3, r0 - lsls r0, r6, 2 - add r0, r12 - ldrb r2, [r0, 0x1] - ldrh r1, [r7] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0802413C - lsls r0, r2, 1 - adds r4, r3, 0 - muls r4, r0 - b _08024140 - .align 2, 0 -_08024120: .4byte gTrainerMoney -_08024124: .4byte 0x02000000 -_08024128: .4byte gBattleTypeFlags -_0802412C: .4byte gSaveBlock1 + 0x490 -_08024130: .4byte gTrainers -_08024134: .4byte gTrainerBattleOpponent -_08024138: .4byte 0x00016056 -_0802413C: - adds r4, r3, 0 - muls r4, r2 -_08024140: - mov r0, r8 - adds r1, r4, 0 - bl sub_80B79B8 - ldr r1, _0802418C @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x1 - strb r0, [r1, 0x1] - movs r0, 0x4 - strb r0, [r1, 0x2] - movs r0, 0x5 - strb r0, [r1, 0x3] - strb r4, [r1, 0x4] - movs r0, 0xFF - lsls r0, 8 - ands r0, r4 - lsrs r0, 8 - strb r0, [r1, 0x5] - movs r0, 0xFF - lsls r0, 16 - ands r0, r4 - lsrs r0, 16 - strb r0, [r1, 0x6] - lsrs r0, r4, 24 - strb r0, [r1, 0x7] - movs r0, 0xFF - strb r0, [r1, 0x8] - ldr r1, _08024190 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802418C: .4byte gBattleTextBuff1 -_08024190: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8024014 - - thumb_func_start atk5E_8025A70 -atk5E_8025A70: @ 8024194 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _080241B8 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r6, _080241BC @ =gActiveBank - strb r0, [r6] - ldr r5, _080241C0 @ =gBattleCommunication - ldrb r0, [r5] - mov r8, r4 - cmp r0, 0 - beq _080241C4 - cmp r0, 0x1 - beq _080241DC - b _08024230 - .align 2, 0 -_080241B8: .4byte gBattlescriptCurrInstr -_080241BC: .4byte gActiveBank -_080241C0: .4byte gBattleCommunication -_080241C4: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl EmitGetAttributes - ldrb r0, [r6] - bl MarkBufferBankForExecution - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _08024230 -_080241DC: - ldr r0, _0802423C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _08024230 - ldrb r0, [r6] - lsls r0, 9 - ldr r1, _08024240 @ =gUnknown_02024264 - adds r0, r1 - mov r12, r0 - movs r2, 0 - adds r4, r6, 0 - movs r5, 0x58 - ldr r6, _08024244 @ =gUnknown_02024AA4 - adds r7, r6, 0 - subs r7, 0x18 - mov r3, r12 - adds r3, 0xC -_080241FE: - lsls r1, r2, 1 - ldrb r0, [r4] - muls r0, r5 - adds r1, r0 - adds r1, r7 - ldrh r0, [r3] - strh r0, [r1] - ldrb r0, [r4] - adds r1, r0, 0 - muls r1, r5 - adds r1, r2, r1 - adds r1, r6 - mov r0, r12 - adds r0, 0x24 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r3, 0x2 - adds r2, 0x1 - cmp r2, 0x3 - ble _080241FE - mov r1, r8 - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_08024230: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802423C: .4byte gBattleExecBuffer -_08024240: .4byte gUnknown_02024264 -_08024244: .4byte gUnknown_02024AA4 - thumb_func_end atk5E_8025A70 - - thumb_func_start atk5F_8025B24 -atk5F_8025B24: @ 8024248 - push {lr} - ldr r0, _08024270 @ =gActiveBank - ldr r2, _08024274 @ =gBankAttacker - ldrb r3, [r2] - strb r3, [r0] - ldr r1, _08024278 @ =gBankTarget - ldrb r0, [r1] - strb r0, [r2] - strb r3, [r1] - ldr r2, _0802427C @ =gHitMarker - ldr r1, [r2] - movs r3, 0x80 - lsls r3, 5 - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - beq _08024284 - ldr r0, _08024280 @ =0xffffefff - ands r1, r0 - b _08024286 - .align 2, 0 -_08024270: .4byte gActiveBank -_08024274: .4byte gBankAttacker -_08024278: .4byte gBankTarget -_0802427C: .4byte gHitMarker -_08024280: .4byte 0xffffefff -_08024284: - orrs r1, r3 -_08024286: - str r1, [r2] - ldr r1, _08024294 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08024294: .4byte gBattlescriptCurrInstr - thumb_func_end atk5F_8025B24 - - thumb_func_start atk60_cmd60 -atk60_cmd60: @ 8024298 - push {lr} - ldr r0, _080242C0 @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080242B2 - ldr r0, _080242C4 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl IncrementGameStat -_080242B2: - ldr r1, _080242C4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080242C0: .4byte gBankAttacker -_080242C4: .4byte gBattlescriptCurrInstr - thumb_func_end atk60_cmd60 - - thumb_func_start atk61_8025BA4 -atk61_8025BA4: @ 80242C8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x30 - ldr r0, _0802432C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0802437C - ldr r0, _08024330 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r1, _08024334 @ =gActiveBank - strb r0, [r1] - ldrb r0, [r1] - bl GetBankSide - lsls r0, 24 - ldr r1, _08024338 @ =gEnemyParty - mov r8, r1 - cmp r0, 0 - bne _080242FA - ldr r0, _0802433C @ =gPlayerParty - mov r8, r0 -_080242FA: - movs r7, 0 - add r6, sp, 0x4 - mov r5, sp -_08024300: - movs r0, 0x64 - muls r0, r7 - mov r1, r8 - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _08024324 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _08024344 -_08024324: - ldr r0, _08024340 @ =0x0000ffff - strh r0, [r5] - movs r0, 0 - b _08024356 - .align 2, 0 -_0802432C: .4byte gBattleExecBuffer -_08024330: .4byte gBattlescriptCurrInstr -_08024334: .4byte gActiveBank -_08024338: .4byte gEnemyParty -_0802433C: .4byte gPlayerParty -_08024340: .4byte 0x0000ffff -_08024344: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData -_08024356: - str r0, [r6] - adds r6, 0x8 - adds r5, 0x8 - adds r7, 0x1 - cmp r7, 0x5 - ble _08024300 - movs r0, 0 - mov r1, sp - movs r2, 0x1 - bl dp01_build_cmdbuf_x30_TODO - ldr r0, _08024388 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - ldr r1, _0802438C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_0802437C: - add sp, 0x30 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08024388: .4byte gActiveBank -_0802438C: .4byte gBattlescriptCurrInstr - thumb_func_end atk61_8025BA4 - - thumb_func_start atk62_08025C6C -atk62_08025C6C: @ 8024390 - push {r4,r5,lr} - ldr r5, _080243B8 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _080243BC @ =gActiveBank - strb r0, [r4] - movs r0, 0 - bl dp01_build_cmdbuf_x31_31_31_31 - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080243B8: .4byte gBattlescriptCurrInstr -_080243BC: .4byte gActiveBank - thumb_func_end atk62_08025C6C - - thumb_func_start atk63_jumptoattack -atk63_jumptoattack: @ 80243C0 - push {r4,lr} - ldr r0, _080243D8 @ =gBattlescriptCurrInstr - ldr r1, [r0] - ldrb r1, [r1, 0x1] - adds r4, r0, 0 - cmp r1, 0 - beq _080243E4 - ldr r0, _080243DC @ =gCurrentMove - ldr r1, _080243E0 @ =gUnknown_02024BEA - ldrh r1, [r1] - strh r1, [r0] - b _080243F2 - .align 2, 0 -_080243D8: .4byte gBattlescriptCurrInstr -_080243DC: .4byte gCurrentMove -_080243E0: .4byte gUnknown_02024BEA -_080243E4: - ldr r2, _08024410 @ =gUnknown_02024BE8 - ldr r1, _08024414 @ =gCurrentMove - ldr r0, _08024418 @ =gUnknown_02024BEA - ldrh r0, [r0] - strh r0, [r1] - strh r0, [r2] - adds r0, r1, 0 -_080243F2: - ldr r3, _0802441C @ =gUnknown_081D6BBC - ldr r2, _08024420 @ =gBattleMoves - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08024410: .4byte gUnknown_02024BE8 -_08024414: .4byte gCurrentMove -_08024418: .4byte gUnknown_02024BEA -_0802441C: .4byte gUnknown_081D6BBC -_08024420: .4byte gBattleMoves - thumb_func_end atk63_jumptoattack - - thumb_func_start atk64_statusanimation -atk64_statusanimation: @ 8024424 - push {r4,lr} - ldr r0, _08024494 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _0802448C - ldr r0, _08024498 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _0802449C @ =gActiveBank - strb r0, [r4] - ldr r1, _080244A0 @ =gStatuses3 - ldrb r2, [r4] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080244A4 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _08024484 - ldr r0, _080244A8 @ =gDisableStructs - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - cmp r0, 0 - bne _08024484 - ldr r0, _080244AC @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08024484 - ldr r1, _080244B0 @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r1, 0x4C - adds r0, r1 - ldr r2, [r0] - movs r0, 0 - movs r1, 0 - bl EmitStatusAnimation - ldrb r0, [r4] - bl MarkBufferBankForExecution -_08024484: - ldr r1, _08024498 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_0802448C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08024494: .4byte gBattleExecBuffer -_08024498: .4byte gBattlescriptCurrInstr -_0802449C: .4byte gActiveBank -_080244A0: .4byte gStatuses3 -_080244A4: .4byte 0x000400c0 -_080244A8: .4byte gDisableStructs -_080244AC: .4byte gHitMarker -_080244B0: .4byte gBattleMons - thumb_func_end atk64_statusanimation - - thumb_func_start atk65_8025D90 -atk65_8025D90: @ 80244B4 - push {r4,r5,lr} - ldr r0, _0802453C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _08024534 - ldr r4, _08024540 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r5, _08024544 @ =gActiveBank - strb r0, [r5] - ldr r1, [r4] - ldrb r3, [r1, 0x2] - ldrb r0, [r1, 0x3] - lsls r0, 8 - orrs r3, r0 - ldrb r0, [r1, 0x4] - lsls r0, 16 - orrs r3, r0 - ldrb r0, [r1, 0x5] - lsls r0, 24 - orrs r3, r0 - ldr r1, _08024548 @ =gStatuses3 - ldrb r2, [r5] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _0802454C @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _0802452C - ldr r0, _08024550 @ =gDisableStructs - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - cmp r0, 0 - bne _0802452C - ldr r0, _08024554 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802452C - ldr r1, _08024558 @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r2, [r0] - ands r2, r3 - movs r0, 0 - movs r1, 0x1 - bl EmitStatusAnimation - ldrb r0, [r5] - bl MarkBufferBankForExecution -_0802452C: - ldr r1, _08024540 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] -_08024534: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802453C: .4byte gBattleExecBuffer -_08024540: .4byte gBattlescriptCurrInstr -_08024544: .4byte gActiveBank -_08024548: .4byte gStatuses3 -_0802454C: .4byte 0x000400c0 -_08024550: .4byte gDisableStructs -_08024554: .4byte gHitMarker -_08024558: .4byte gBattleMons - thumb_func_end atk65_8025D90 - - thumb_func_start atk66_8025E38 -atk66_8025E38: @ 802455C - push {r4,r5,lr} - ldr r0, _080245D4 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _080245CE - ldr r4, _080245D8 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r5, _080245DC @ =gActiveBank - strb r0, [r5] - ldr r4, [r4] - ldrb r2, [r4, 0x3] - ldrb r0, [r4, 0x4] - lsls r0, 8 - orrs r2, r0 - ldrb r0, [r4, 0x5] - lsls r0, 16 - orrs r2, r0 - ldrb r0, [r4, 0x6] - lsls r0, 24 - orrs r2, r0 - ldr r1, _080245E0 @ =gStatuses3 - ldrb r3, [r5] - lsls r0, r3, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080245E4 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _080245C6 - ldr r0, _080245E8 @ =gDisableStructs - lsls r1, r3, 3 - subs r1, r3 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - cmp r0, 0 - bne _080245C6 - ldr r0, _080245EC @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080245C6 - ldrb r1, [r4, 0x2] - movs r0, 0 - bl EmitStatusAnimation - ldrb r0, [r5] - bl MarkBufferBankForExecution -_080245C6: - ldr r1, _080245D8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x7 - str r0, [r1] -_080245CE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080245D4: .4byte gBattleExecBuffer -_080245D8: .4byte gBattlescriptCurrInstr -_080245DC: .4byte gActiveBank -_080245E0: .4byte gStatuses3 -_080245E4: .4byte 0x000400c0 -_080245E8: .4byte gDisableStructs -_080245EC: .4byte gHitMarker - thumb_func_end atk66_8025E38 - - thumb_func_start atk67_8025ECC -atk67_8025ECC: @ 80245F0 - push {r4,r5,lr} - ldr r5, _08024600 @ =gBattleCommunication - ldrb r4, [r5] - cmp r4, 0 - beq _08024604 - cmp r4, 0x1 - beq _08024616 - b _08024696 - .align 2, 0 -_08024600: .4byte gBattleCommunication -_08024604: - bl sub_8023A80 - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - strb r4, [r5, 0x1] - bl sub_802BC6C - b _08024696 -_08024616: - ldr r0, _08024674 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0802463A - ldrb r0, [r5, 0x1] - cmp r0, 0 - beq _0802463A - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0 - strb r0, [r5, 0x1] - bl sub_802BC6C -_0802463A: - ldr r0, _08024674 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08024660 - ldr r4, _08024678 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08024660 - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0x1 - strb r0, [r4, 0x1] - bl sub_802BC6C -_08024660: - ldr r0, _08024674 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802467C - ldr r1, _08024678 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x1] - b _08024684 - .align 2, 0 -_08024674: .4byte gMain -_08024678: .4byte gBattleCommunication -_0802467C: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08024696 -_08024684: - movs r0, 0x5 - bl PlaySE - bl sub_8023AD8 - ldr r1, _0802469C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_08024696: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802469C: .4byte gBattlescriptCurrInstr - thumb_func_end atk67_8025ECC - - thumb_func_start sub_80246A0 -sub_80246A0: @ 80246A0 - push {r4,r5,lr} - movs r1, 0 - ldr r2, _080246CC @ =gNoOfAllBanks - ldr r5, _080246D0 @ =gBattlescriptCurrInstr - ldrb r0, [r2] - cmp r1, r0 - bge _080246BE - ldr r4, _080246D4 @ =gUnknown_02024A76 - movs r3, 0xC -_080246B2: - adds r0, r1, r4 - strb r3, [r0] - adds r1, 0x1 - ldrb r0, [r2] - cmp r1, r0 - blt _080246B2 -_080246BE: - ldr r0, [r5] - adds r0, 0x1 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080246CC: .4byte gNoOfAllBanks -_080246D0: .4byte gBattlescriptCurrInstr -_080246D4: .4byte gUnknown_02024A76 - thumb_func_end sub_80246A0 - - thumb_func_start atk69_8025FE0 -atk69_8025FE0: @ 80246D8 - push {r4-r7,lr} - ldr r7, _08024700 @ =gBattleMons - ldr r6, _08024704 @ =gBankTarget - ldrb r2, [r6] - movs r5, 0x58 - adds r0, r2, 0 - muls r0, r5 - adds r1, r0, r7 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _0802470C - ldr r1, _08024708 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r4, [r0, 0x7] - ldrb r6, [r0, 0x1A] - b _08024726 - .align 2, 0 -_08024700: .4byte gBattleMons -_08024704: .4byte gBankTarget -_08024708: .4byte gEnigmaBerries -_0802470C: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r6] - muls r0, r5 - adds r0, r7 - ldrh r0, [r0, 0x2E] - bl ItemId_GetHoldEffectParam - lsls r0, 24 - lsrs r6, r0, 24 -_08024726: - ldr r1, _080247E8 @ =gStringBank - ldr r5, _080247EC @ =gBankTarget - ldrb r0, [r5] - strb r0, [r1] - cmp r4, 0x27 - bne _08024764 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r6 - bcs _08024764 - ldrb r0, [r5] - movs r1, 0x27 - bl RecordItemBattle - ldr r2, _080247F0 @ =gSpecialStatuses - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] -_08024764: - ldr r2, _080247F4 @ =gBattleMons - ldr r3, _080247EC @ =gBankTarget - ldrb r4, [r3] - movs r0, 0x58 - muls r0, r4 - adds r1, r2, 0 - adds r1, 0x50 - adds r0, r1 - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 17 - ands r1, r0 - adds r5, r2, 0 - cmp r1, 0 - bne _08024834 - ldr r2, _080247F8 @ =gBattleMoves - ldr r0, _080247FC @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x65 - beq _080247B6 - ldr r0, _08024800 @ =gProtectStructs - lsls r1, r4, 4 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 30 - cmp r0, 0 - blt _080247B6 - ldr r0, _080247F0 @ =gSpecialStatuses - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsrs r0, 7 - cmp r0, 0 - beq _08024834 -_080247B6: - ldrb r0, [r3] - movs r4, 0x58 - muls r0, r4 - adds r0, r5 - ldrh r1, [r0, 0x28] - ldr r2, _08024804 @ =gBattleMoveDamage - ldr r0, [r2] - cmp r1, r0 - bgt _08024834 - subs r0, r1, 0x1 - str r0, [r2] - ldr r1, _08024800 @ =gProtectStructs - ldrb r3, [r3] - lsls r0, r3, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - cmp r0, 0 - bge _0802480C - ldr r0, _08024808 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _08024834 - .align 2, 0 -_080247E8: .4byte gStringBank -_080247EC: .4byte gBankTarget -_080247F0: .4byte gSpecialStatuses -_080247F4: .4byte gBattleMons -_080247F8: .4byte gBattleMoves -_080247FC: .4byte gCurrentMove -_08024800: .4byte gProtectStructs -_08024804: .4byte gBattleMoveDamage -_08024808: .4byte gBattleMoveFlags -_0802480C: - ldr r0, _08024844 @ =gSpecialStatuses - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsrs r0, 7 - cmp r0, 0 - beq _08024834 - ldr r2, _08024848 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0802484C @ =gLastUsedItem - adds r0, r3, 0 - muls r0, r4 - adds r0, r5 - ldrh r0, [r0, 0x2E] - strh r0, [r1] -_08024834: - ldr r1, _08024850 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08024844: .4byte gSpecialStatuses -_08024848: .4byte gBattleMoveFlags -_0802484C: .4byte gLastUsedItem -_08024850: .4byte gBattlescriptCurrInstr - thumb_func_end atk69_8025FE0 - - thumb_func_start atk6A_stash_item_for_side -atk6A_stash_item_for_side: @ 8024854 - push {r4-r6,lr} - sub sp, 0x4 - ldr r6, _080248B0 @ =gBattlescriptCurrInstr - ldr r0, [r6] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r5, _080248B4 @ =gActiveBank - strb r0, [r5] - ldrb r4, [r5] - lsls r1, r4, 1 - ldr r0, _080248B8 @ =0x020160cc - adds r1, r0 - ldr r2, _080248BC @ =gBattleMons - movs r3, 0x58 - adds r0, r4, 0 - muls r0, r3 - adds r0, r2 - ldrh r0, [r0, 0x2E] - strh r0, [r1] - ldrb r0, [r5] - muls r0, r3 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x2E] - ldrb r0, [r5] - muls r0, r3 - adds r2, 0x2E - adds r0, r2 - str r0, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl EmitSetAttributes - ldrb r0, [r5] - bl MarkBufferBankForExecution - ldr r0, [r6] - adds r0, 0x2 - str r0, [r6] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080248B0: .4byte gBattlescriptCurrInstr -_080248B4: .4byte gActiveBank -_080248B8: .4byte 0x020160cc -_080248BC: .4byte gBattleMons - thumb_func_end atk6A_stash_item_for_side - - thumb_func_start sub_80248C0 -sub_80248C0: @ 80248C0 - ldr r1, _080248EC @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x7 - strb r0, [r1, 0x1] - ldr r2, _080248F0 @ =gBankAttacker - ldrb r0, [r2] - strb r0, [r1, 0x2] - ldr r3, _080248F4 @ =gBattlePartyID - ldrb r0, [r2] - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _080248F8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_080248EC: .4byte gBattleTextBuff1 -_080248F0: .4byte gBankAttacker -_080248F4: .4byte gBattlePartyID -_080248F8: .4byte gBattlescriptCurrInstr - thumb_func_end sub_80248C0 - - thumb_func_start sub_80248FC -sub_80248FC: @ 80248FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r1, 0 - movs r7, 0 - ldr r0, _08024928 @ =0x02000000 - mov r10, r0 - ldr r4, _0802492C @ =0x0001609c - add r4, r10 - ldrb r0, [r4] - cmp r0, 0x1 - bne _0802491C - b _08024AF4 -_0802491C: - cmp r0, 0x1 - bgt _08024930 - cmp r0, 0 - beq _0802493E - b _08024C38 - .align 2, 0 -_08024928: .4byte 0x02000000 -_0802492C: .4byte 0x0001609c -_08024930: - cmp r0, 0x2 - bne _08024936 - b _08024C04 -_08024936: - cmp r0, 0x3 - bne _0802493C - b _08024C30 -_0802493C: - b _08024C38 -_0802493E: - str r1, [sp] - movs r0, 0xB - movs r1, 0 - movs r2, 0x1D - movs r3, 0x7 - bl sub_802BBD4 - ldr r0, _0802499C @ =gStringVar4 - ldr r1, _080249A0 @ =gUnknown_08400D9F - bl StringCopy - adds r5, r0, 0 - movs r1, 0 - mov r8, r1 -_0802495A: - movs r2, 0 - mov r9, r2 - ldr r0, _080249A4 @ =gUnknown_0840165C - mov r1, r8 - lsls r4, r1, 2 - adds r0, r4, r0 - ldr r1, [r0] - adds r0, r5, 0 - bl StringAppend - adds r5, r0, 0 - ldr r0, _080249A8 @ =0x02000000 - ldr r2, _080249AC @ =0x00016018 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080249B0 @ =gPlayerParty - adds r0, r1 - ldr r1, _080249B4 @ =gLevelUpStatBoxStats - add r1, r8 - ldrb r1, [r1] - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - mov r0, r8 - cmp r0, 0x5 - bhi _08024A1A - ldr r0, _080249B8 @ =_080249BC - adds r0, r4, r0 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802499C: .4byte gStringVar4 -_080249A0: .4byte gUnknown_08400D9F -_080249A4: .4byte gUnknown_0840165C -_080249A8: .4byte 0x02000000 -_080249AC: .4byte 0x00016018 -_080249B0: .4byte gPlayerParty -_080249B4: .4byte gLevelUpStatBoxStats -_080249B8: .4byte _080249BC - .align 2, 0 -_080249BC: - .4byte _080249D4 - .4byte _080249E0 - .4byte _080249EC - .4byte _080249F8 - .4byte _08024A04 - .4byte _08024A10 -_080249D4: - ldr r0, _080249DC @ =0x02017180 - ldrh r0, [r0] - b _08024A14 - .align 2, 0 -_080249DC: .4byte 0x02017180 -_080249E0: - ldr r0, _080249E8 @ =0x02017180 - ldrh r0, [r0, 0x8] - b _08024A14 - .align 2, 0 -_080249E8: .4byte 0x02017180 -_080249EC: - ldr r0, _080249F4 @ =0x02017180 - ldrh r0, [r0, 0x2] - b _08024A14 - .align 2, 0 -_080249F4: .4byte 0x02017180 -_080249F8: - ldr r0, _08024A00 @ =0x02017180 - ldrh r0, [r0, 0xA] - b _08024A14 - .align 2, 0 -_08024A00: .4byte 0x02017180 -_08024A04: - ldr r0, _08024A0C @ =0x02017180 - ldrh r0, [r0, 0x4] - b _08024A14 - .align 2, 0 -_08024A0C: .4byte 0x02017180 -_08024A10: - ldr r0, _08024A54 @ =0x02017180 - ldrh r0, [r0, 0x6] -_08024A14: - subs r0, r1, r0 - lsls r0, 16 - lsrs r7, r0, 16 -_08024A1A: - lsls r0, r7, 16 - asrs r0, 16 - cmp r0, 0 - bge _08024A2C - negs r0, r0 - lsls r0, 16 - lsrs r7, r0, 16 - movs r1, 0x1 - add r9, r1 -_08024A2C: - movs r0, 0xFC - strb r0, [r5] - movs r0, 0x13 - strb r0, [r5, 0x1] - movs r1, 0x1 - mov r2, r8 - ands r1, r2 - lsls r0, r1, 3 - adds r0, r1 - adds r0, 0x5 - lsls r0, 3 - adds r0, 0x6 - strb r0, [r5, 0x2] - adds r5, 0x3 - mov r0, r9 - cmp r0, 0 - beq _08024A5C - ldr r1, _08024A58 @ =gUnknown_08400DAC - b _08024A5E - .align 2, 0 -_08024A54: .4byte 0x02017180 -_08024A58: .4byte gUnknown_08400DAC -_08024A5C: - ldr r1, _08024AA4 @ =gUnknown_08400DAA -_08024A5E: - adds r0, r5, 0 - bl StringCopy - adds r5, r0, 0 - movs r6, 0xFC - strb r6, [r5] - movs r4, 0x14 - strb r4, [r5, 0x1] - movs r0, 0x6 - strb r0, [r5, 0x2] - adds r5, 0x3 - lsls r1, r7, 16 - asrs r1, 16 - adds r0, r5, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - adds r5, r0, 0 - strb r6, [r5] - strb r4, [r5, 0x1] - movs r0, 0 - strb r0, [r5, 0x2] - adds r5, 0x3 - movs r0, 0x1 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _08024AA8 - movs r0, 0xFE - strb r0, [r5] - movs r0, 0xFF - strb r0, [r5, 0x1] - adds r5, 0x1 - b _08024AB8 - .align 2, 0 -_08024AA4: .4byte gUnknown_08400DAA -_08024AA8: - strb r6, [r5] - movs r0, 0x11 - strb r0, [r5, 0x1] - movs r0, 0x8 - strb r0, [r5, 0x2] - adds r5, 0x3 - movs r0, 0xFF - strb r0, [r5] -_08024AB8: - movs r2, 0x1 - add r8, r2 - mov r0, r8 - cmp r0, 0x5 - bgt _08024AC4 - b _0802495A -_08024AC4: - ldr r4, _08024AE4 @ =gUnknown_03004210 - ldr r1, _08024AE8 @ =gStringVar4 - adds r2, 0xFF - movs r0, 0x1 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0xC - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _08024AEC @ =0x02000000 - ldr r2, _08024AF0 @ =0x0001609c - adds r1, r2 - b _08024BEA - .align 2, 0 -_08024AE4: .4byte gUnknown_03004210 -_08024AE8: .4byte gStringVar4 -_08024AEC: .4byte 0x02000000 -_08024AF0: .4byte 0x0001609c -_08024AF4: - ldr r0, _08024B94 @ =gMain - ldrh r0, [r0, 0x2E] - cmp r0, 0 - bne _08024AFE - b _08024C38 -_08024AFE: - movs r0, 0x5 - bl PlaySE - ldr r0, _08024B98 @ =gStringVar4 - ldr r1, _08024B9C @ =gUnknown_08400D9F - bl StringCopy - adds r5, r0, 0 - movs r0, 0 - mov r8, r0 - mov r9, r0 - movs r6, 0xFC - movs r7, 0x14 - ldr r1, _08024BA0 @ =0x00016018 - add r10, r1 -_08024B1C: - ldr r1, _08024BA4 @ =gUnknown_0840165C - mov r2, r8 - lsls r0, r2, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r5, 0 - bl StringAppend - adds r5, r0, 0 - mov r0, r10 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08024BA8 @ =gPlayerParty - adds r0, r1 - ldr r1, _08024BAC @ =gLevelUpStatBoxStats - add r1, r8 - ldrb r1, [r1] - bl GetMonData - adds r1, r0, 0 - strb r6, [r5] - movs r0, 0x13 - strb r0, [r5, 0x1] - movs r4, 0x1 - mov r2, r8 - ands r4, r2 - lsls r0, r4, 3 - adds r0, r4 - adds r0, 0x5 - lsls r0, 3 - adds r0, 0x6 - strb r0, [r5, 0x2] - adds r5, 0x3 - strb r6, [r5] - strb r7, [r5, 0x1] - movs r0, 0x6 - strb r0, [r5, 0x2] - adds r5, 0x3 - lsls r1, 16 - asrs r1, 16 - adds r0, r5, 0 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r5, r0, 0 - strb r6, [r5] - strb r7, [r5, 0x1] - mov r0, r9 - strb r0, [r5, 0x2] - adds r5, 0x3 - cmp r4, 0 - beq _08024BB0 - movs r0, 0xFE - strb r0, [r5] - movs r0, 0xFF - strb r0, [r5, 0x1] - adds r5, 0x1 - b _08024BC0 - .align 2, 0 -_08024B94: .4byte gMain -_08024B98: .4byte gStringVar4 -_08024B9C: .4byte gUnknown_08400D9F -_08024BA0: .4byte 0x00016018 -_08024BA4: .4byte gUnknown_0840165C -_08024BA8: .4byte gPlayerParty -_08024BAC: .4byte gLevelUpStatBoxStats -_08024BB0: - strb r6, [r5] - movs r0, 0x11 - strb r0, [r5, 0x1] - movs r0, 0x8 - strb r0, [r5, 0x2] - adds r5, 0x3 - movs r0, 0xFF - strb r0, [r5] -_08024BC0: - movs r1, 0x1 - add r8, r1 - mov r2, r8 - cmp r2, 0x5 - ble _08024B1C - ldr r4, _08024BF4 @ =gUnknown_03004210 - ldr r1, _08024BF8 @ =gStringVar4 - movs r2, 0x80 - lsls r2, 1 - movs r0, 0x1 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0xC - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _08024BFC @ =0x02000000 - ldr r0, _08024C00 @ =0x0001609c - adds r1, r0 -_08024BEA: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08024C38 - .align 2, 0 -_08024BF4: .4byte gUnknown_03004210 -_08024BF8: .4byte gStringVar4 -_08024BFC: .4byte 0x02000000 -_08024C00: .4byte 0x0001609c -_08024C04: - ldr r0, _08024C2C @ =gMain - ldrh r0, [r0, 0x2E] - cmp r0, 0 - beq _08024C38 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - str r0, [sp] - movs r0, 0xB - movs r1, 0 - movs r2, 0x1D - movs r3, 0x7 - bl sub_802BBD4 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08024C38 - .align 2, 0 -_08024C2C: .4byte gMain -_08024C30: - ldr r1, _08024C48 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_08024C38: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08024C48: .4byte gBattlescriptCurrInstr - thumb_func_end sub_80248FC - - thumb_func_start sub_8024C4C -sub_8024C4C: @ 8024C4C - push {lr} - bl sub_80156DC - ldr r1, _08024C60 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08024C60: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8024C4C - - thumb_func_start atk6E_state0_side_becomes_attacker -atk6E_state0_side_becomes_attacker: @ 8024C64 - push {lr} - movs r0, 0 - bl GetBankByPlayerAI - ldr r1, _08024C7C @ =gBankAttacker - strb r0, [r1] - ldr r1, _08024C80 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08024C7C: .4byte gBankAttacker -_08024C80: .4byte gBattlescriptCurrInstr - thumb_func_end atk6E_state0_side_becomes_attacker - - thumb_func_start atk6F_8026810 -atk6F_8026810: @ 8024C84 - push {r4,r5,lr} - ldr r5, _08024CB0 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r4, _08024CB4 @ =gActiveBank - strb r0, [r4] - movs r0, 0 - movs r1, 0 - bl EmitSpriteInvisibility - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08024CB0: .4byte gBattlescriptCurrInstr -_08024CB4: .4byte gActiveBank - thumb_func_end atk6F_8026810 - - thumb_func_start atk70_record_ability_usage_of_side -atk70_record_ability_usage_of_side: @ 8024CB8 - push {r4,lr} - ldr r4, _08024CE0 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r1, _08024CE4 @ =gActiveBank - strb r0, [r1] - ldrb r0, [r1] - ldr r1, _08024CE8 @ =gLastUsedAbility - ldrb r1, [r1] - bl RecordAbilityBattle - ldr r0, [r4] - adds r0, 0x1 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08024CE0: .4byte gBattlescriptCurrInstr -_08024CE4: .4byte gActiveBank -_08024CE8: .4byte gLastUsedAbility - thumb_func_end atk70_record_ability_usage_of_side - - thumb_func_start sub_8024CEC -sub_8024CEC: @ 8024CEC - ldr r2, _08024D0C @ =gBattleTextBuff2 - movs r0, 0xFD - strb r0, [r2] - movs r0, 0x2 - strb r0, [r2, 0x1] - ldr r0, _08024D10 @ =word_2024E82 - ldrh r1, [r0] - strb r1, [r2, 0x2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r0, 8 - strb r0, [r2, 0x3] - movs r0, 0xFF - strb r0, [r2, 0x4] - bx lr - .align 2, 0 -_08024D0C: .4byte gBattleTextBuff2 -_08024D10: .4byte word_2024E82 - thumb_func_end sub_8024CEC - - thumb_func_start atk71_80268A0 -atk71_80268A0: @ 8024D14 - push {lr} - bl sub_8024CEC - ldr r1, _08024D28 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08024D28: .4byte gBattlescriptCurrInstr - thumb_func_end atk71_80268A0 - - thumb_func_start atk72_flee -atk72_flee: @ 8024D2C - push {lr} - ldr r0, _08024D58 @ =gBank1 - ldrb r0, [r0] - bl sub_8014AB8 - lsls r0, 24 - cmp r0, 0 - beq _08024D60 - ldr r3, _08024D5C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08024D68 - .align 2, 0 -_08024D58: .4byte gBank1 -_08024D5C: .4byte gBattlescriptCurrInstr -_08024D60: - ldr r1, _08024D6C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08024D68: - pop {r0} - bx r0 - .align 2, 0 -_08024D6C: .4byte gBattlescriptCurrInstr - thumb_func_end atk72_flee - - thumb_func_start atk73_cmd73 -atk73_cmd73: @ 8024D70 - push {r4,r5,lr} - ldr r0, _08024DC0 @ =gBattleTypeFlags - ldrh r0, [r0] - movs r5, 0x1 - ands r5, r0 - cmp r5, 0 - bne _08024E12 - ldr r0, _08024DC4 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r1, _08024DC8 @ =gActiveBank - strb r0, [r1] - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08024DCC @ =gBattleMons - movs r1, 0x58 - muls r1, r0 - adds r1, r2 - ldrh r4, [r1, 0x28] - movs r0, 0x64 - muls r0, r4 - ldrh r1, [r1, 0x2C] - bl __divsi3 - cmp r0, 0 - bne _08024DAE - movs r0, 0x1 -_08024DAE: - cmp r0, 0x45 - bgt _08024DB6 - cmp r4, 0 - bne _08024DD8 -_08024DB6: - ldr r0, _08024DD0 @ =0x02000000 - ldr r1, _08024DD4 @ =0x000160c1 - adds r0, r1 - strb r5, [r0] - b _08024E12 - .align 2, 0 -_08024DC0: .4byte gBattleTypeFlags -_08024DC4: .4byte gBattlescriptCurrInstr -_08024DC8: .4byte gActiveBank -_08024DCC: .4byte gBattleMons -_08024DD0: .4byte 0x02000000 -_08024DD4: .4byte 0x000160c1 -_08024DD8: - cmp r0, 0x27 - ble _08024DF0 - ldr r0, _08024DE8 @ =0x02000000 - ldr r1, _08024DEC @ =0x000160c1 - adds r0, r1 - movs r1, 0x1 - b _08024E10 - .align 2, 0 -_08024DE8: .4byte 0x02000000 -_08024DEC: .4byte 0x000160c1 -_08024DF0: - cmp r0, 0x9 - ble _08024E08 - ldr r0, _08024E00 @ =0x02000000 - ldr r1, _08024E04 @ =0x000160c1 - adds r0, r1 - movs r1, 0x2 - b _08024E10 - .align 2, 0 -_08024E00: .4byte 0x02000000 -_08024E04: .4byte 0x000160c1 -_08024E08: - ldr r0, _08024E20 @ =0x02000000 - ldr r1, _08024E24 @ =0x000160c1 - adds r0, r1 - movs r1, 0x3 -_08024E10: - strb r1, [r0] -_08024E12: - ldr r1, _08024E28 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08024E20: .4byte 0x02000000 -_08024E24: .4byte 0x000160c1 -_08024E28: .4byte gBattlescriptCurrInstr - thumb_func_end atk73_cmd73 - - thumb_func_start atk74_hp_tresholds_2 -atk74_hp_tresholds_2: @ 8024E2C - push {r4-r7,lr} - ldr r0, _08024E8C @ =gBattleTypeFlags - ldrh r0, [r0] - movs r7, 0x1 - ands r7, r0 - cmp r7, 0 - bne _08024ED0 - ldr r0, _08024E90 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8015150 - adds r4, r0, 0 - ldr r0, _08024E94 @ =gActiveBank - strb r4, [r0] - movs r0, 0x1 - eors r4, r0 - lsls r4, 24 - lsrs r4, 24 - ldr r6, _08024E98 @ =0x02000000 - adds r0, r4, 0 - bl GetBankSide - lsls r0, 24 - lsrs r0, 23 - ldr r1, _08024E9C @ =0x000160bc - adds r0, r1 - adds r0, r6 - ldrb r5, [r0] - ldr r1, _08024EA0 @ =gBattleMons - movs r0, 0x58 - muls r0, r4 - adds r0, r1 - ldrh r4, [r0, 0x28] - subs r1, r5, r4 - movs r0, 0x64 - muls r0, r1 - adds r1, r5, 0 - bl __divsi3 - adds r1, r0, 0 - cmp r4, r5 - bcc _08024EA8 - ldr r1, _08024EA4 @ =0x000160c1 - adds r0, r6, r1 - strb r7, [r0] - b _08024ED0 - .align 2, 0 -_08024E8C: .4byte gBattleTypeFlags -_08024E90: .4byte gBattlescriptCurrInstr -_08024E94: .4byte gActiveBank -_08024E98: .4byte 0x02000000 -_08024E9C: .4byte 0x000160bc -_08024EA0: .4byte gBattleMons -_08024EA4: .4byte 0x000160c1 -_08024EA8: - cmp r0, 0x1D - bgt _08024EB8 - ldr r0, _08024EB4 @ =0x000160c1 - adds r1, r6, r0 - movs r0, 0x1 - b _08024ECE - .align 2, 0 -_08024EB4: .4byte 0x000160c1 -_08024EB8: - cmp r1, 0x45 - bgt _08024EC8 - ldr r0, _08024EC4 @ =0x000160c1 - adds r1, r6, r0 - movs r0, 0x2 - b _08024ECE - .align 2, 0 -_08024EC4: .4byte 0x000160c1 -_08024EC8: - ldr r0, _08024EE0 @ =0x000160c1 - adds r1, r6, r0 - movs r0, 0x3 -_08024ECE: - strb r0, [r1] -_08024ED0: - ldr r1, _08024EE4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08024EE0: .4byte 0x000160c1 -_08024EE4: .4byte gBattlescriptCurrInstr - thumb_func_end atk74_hp_tresholds_2 - - thumb_func_start atk75_8026A58 -atk75_8026A58: @ 8024EE8 - push {lr} - sub sp, 0x4 - ldr r2, _08024F28 @ =gBankInMenu - ldr r1, _08024F2C @ =gBankAttacker - ldrb r0, [r1] - strb r0, [r2] - ldr r2, _08024F30 @ =gBattlePartyID - ldrb r0, [r1] - lsls r0, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r1, _08024F34 @ =gEnemyParty - adds r0, r1 - ldr r1, _08024F38 @ =gLastUsedItem - ldrh r1, [r1] - lsls r2, 24 - lsrs r2, 24 - movs r3, 0x1 - str r3, [sp] - movs r3, 0 - bl sub_803E1B0 - ldr r1, _08024F3C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08024F28: .4byte gBankInMenu -_08024F2C: .4byte gBankAttacker -_08024F30: .4byte gBattlePartyID -_08024F34: .4byte gEnemyParty -_08024F38: .4byte gLastUsedItem -_08024F3C: .4byte gBattlescriptCurrInstr - thumb_func_end atk75_8026A58 - - thumb_func_start sub_8024F40 -sub_8024F40: @ 8024F40 - push {r4-r6,lr} - ldr r4, _08024F64 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r1, _08024F68 @ =gActiveBank - strb r0, [r1] - ldr r0, [r4] - ldrb r0, [r0, 0x2] - cmp r0, 0x6 - bls _08024F5A - b _08025112 -_08024F5A: - lsls r0, 2 - ldr r1, _08024F6C @ =_08024F70 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08024F64: .4byte gBattlescriptCurrInstr -_08024F68: .4byte gActiveBank -_08024F6C: .4byte _08024F70 - .align 2, 0 -_08024F70: - .4byte _08024F8C - .4byte _08024F9C - .4byte _08024FFC - .4byte _0802500C - .4byte _08025024 - .4byte _08025060 - .4byte _08025098 -_08024F8C: - ldr r0, _08024F98 @ =gActiveBank - ldrb r0, [r0] - bl CancelMultiTurnMoves - b _08025112 - .align 2, 0 -_08024F98: .4byte gActiveBank -_08024F9C: - ldr r1, _08024FD8 @ =gBankAttacker - ldr r4, _08024FDC @ =gBankTarget - ldrb r0, [r4] - strb r0, [r1] - ldrb r0, [r1] - bl GetBankSide - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08024FE0 @ =gSideTimer - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r2, r1, r2 - ldrb r0, [r2, 0x8] - cmp r0, 0 - beq _08024FE8 - ldr r1, _08024FE4 @ =gBattleMons - ldrb r2, [r2, 0x9] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _08024FE8 - strb r2, [r4] - b _08025112 - .align 2, 0 -_08024FD8: .4byte gBankAttacker -_08024FDC: .4byte gBankTarget -_08024FE0: .4byte gSideTimer -_08024FE4: .4byte gBattleMons -_08024FE8: - ldr r0, _08024FF4 @ =gBankTarget - ldr r1, _08024FF8 @ =gActiveBank - ldrb r1, [r1] - strb r1, [r0] - b _08025112 - .align 2, 0 -_08024FF4: .4byte gBankTarget -_08024FF8: .4byte gActiveBank -_08024FFC: - bl CanRunFromBattle - ldr r1, _08025008 @ =gBattleCommunication - strb r0, [r1] - b _08025112 - .align 2, 0 -_08025008: .4byte gBattleCommunication -_0802500C: - ldr r0, _0802501C @ =gCurrentMove - ldrh r0, [r0] - movs r1, 0 - bl sub_801B5C0 - ldr r1, _08025020 @ =gBankTarget - strb r0, [r1] - b _08025112 - .align 2, 0 -_0802501C: .4byte gCurrentMove -_08025020: .4byte gBankTarget -_08025024: - ldr r2, _08025044 @ =gHitMarker - ldr r1, _08025048 @ =gBitTable - ldr r0, _0802504C @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - lsls r0, 28 - ldr r2, [r2] - ands r2, r0 - cmp r2, 0 - beq _08025054 - ldr r1, _08025050 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1] - b _08025112 - .align 2, 0 -_08025044: .4byte gHitMarker -_08025048: .4byte gBitTable -_0802504C: .4byte gActiveBank -_08025050: .4byte gBattleCommunication -_08025054: - ldr r0, _0802505C @ =gBattleCommunication - strb r2, [r0] - b _08025112 - .align 2, 0 -_0802505C: .4byte gBattleCommunication -_08025060: - ldr r4, _08025090 @ =gSpecialStatuses - ldr r3, _08025094 @ =gActiveBank - ldrb r0, [r3] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1] - movs r0, 0x9 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldrb r0, [r3] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1] - movs r0, 0x11 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - b _08025112 - .align 2, 0 -_08025090: .4byte gSpecialStatuses -_08025094: .4byte gActiveBank -_08025098: - ldr r3, _080250B8 @ =gBattlePartyID - ldr r0, _080250BC @ =0x02000000 - ldr r1, _080250C0 @ =0x00016018 - adds r0, r1 - ldrh r2, [r3] - ldrb r1, [r0] - cmp r2, r1 - beq _080250B2 - ldrh r0, [r3, 0x4] - cmp r0, r1 - bne _08025112 - cmp r2, r0 - bne _080250C8 -_080250B2: - ldr r1, _080250C4 @ =gActiveBank - movs r0, 0 - b _080250CC - .align 2, 0 -_080250B8: .4byte gBattlePartyID -_080250BC: .4byte 0x02000000 -_080250C0: .4byte 0x00016018 -_080250C4: .4byte gActiveBank -_080250C8: - ldr r1, _08025120 @ =gActiveBank - movs r0, 0x2 -_080250CC: - strb r0, [r1] - adds r5, r1, 0 - ldrb r2, [r5] - lsls r1, r2, 1 - ldr r0, _08025124 @ =0x020160e8 - adds r4, r1, r0 - movs r3, 0 - ldr r1, _08025128 @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r1, 0xC - adds r0, r1 - ldrh r0, [r0] - ldrh r2, [r4] - cmp r0, r2 - beq _0802510A - adds r6, r5, 0 - movs r5, 0x58 - adds r2, r1, 0 -_080250F2: - adds r3, 0x1 - cmp r3, 0x3 - bgt _0802510A - lsls r1, r3, 1 - ldrb r0, [r6] - muls r0, r5 - adds r1, r0 - adds r1, r2 - ldrh r0, [r1] - ldrh r1, [r4] - cmp r0, r1 - bne _080250F2 -_0802510A: - cmp r3, 0x4 - bne _08025112 - movs r0, 0 - strh r0, [r4] -_08025112: - ldr r1, _0802512C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x3 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08025120: .4byte gActiveBank -_08025124: .4byte 0x020160e8 -_08025128: .4byte gBattleMons -_0802512C: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8024F40 - - thumb_func_start atk77_setprotect -atk77_setprotect: @ 8025130 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0x1 - ldr r2, _080251FC @ =gUnknown_02024C4C - ldr r1, _08025200 @ =gBankAttacker - ldrb r3, [r1] - lsls r0, r3, 1 - adds r0, r2 - ldrh r0, [r0] - mov r8, r1 - ldr r7, _08025204 @ =gDisableStructs - cmp r0, 0xB6 - beq _08025160 - cmp r0, 0xC5 - beq _08025160 - cmp r0, 0xCB - beq _08025160 - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 2 - adds r0, r7 - movs r1, 0 - strb r1, [r0, 0x8] -_08025160: - ldr r0, _08025208 @ =gCurrentMoveTurn - ldrb r1, [r0] - ldr r0, _0802520C @ =gNoOfAllBanks - ldrb r0, [r0] - subs r0, 0x1 - cmp r1, r0 - bne _08025170 - movs r6, 0 -_08025170: - ldr r2, _08025210 @ =gProtectSuccessRates - mov r5, r8 - ldrb r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r7 - ldrb r4, [r0, 0x8] - lsls r4, 1 - adds r4, r2 - bl Random - ldrh r1, [r4] - lsls r0, 16 - lsrs r0, 16 - cmp r1, r0 - bls _08025224 - cmp r6, 0 - beq _08025224 - ldr r4, _08025214 @ =gBattleMoves - ldr r3, _08025218 @ =gCurrentMove - ldrh r0, [r3] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1] - cmp r0, 0x6F - bne _080251C0 - ldr r0, _0802521C @ =gProtectStructs - ldrb r1, [r5] - lsls r1, 4 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x1 - orrs r0, r2 - strb r0, [r1] - ldr r1, _08025220 @ =gBattleCommunication - movs r0, 0 - strb r0, [r1, 0x5] -_080251C0: - ldrh r0, [r3] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1] - cmp r0, 0x74 - bne _080251E6 - ldr r0, _0802521C @ =gProtectStructs - ldrb r1, [r5] - lsls r1, 4 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r1] - ldr r1, _08025220 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] -_080251E6: - mov r1, r8 - ldrb r0, [r1] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r7 - ldrb r0, [r1, 0x8] - adds r0, 0x1 - strb r0, [r1, 0x8] - b _08025246 - .align 2, 0 -_080251FC: .4byte gUnknown_02024C4C -_08025200: .4byte gBankAttacker -_08025204: .4byte gDisableStructs -_08025208: .4byte gCurrentMoveTurn -_0802520C: .4byte gNoOfAllBanks -_08025210: .4byte gProtectSuccessRates -_08025214: .4byte gBattleMoves -_08025218: .4byte gCurrentMove -_0802521C: .4byte gProtectStructs -_08025220: .4byte gBattleCommunication -_08025224: - ldr r2, _08025258 @ =gDisableStructs - ldr r0, _0802525C @ =gBankAttacker - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strb r1, [r0, 0x8] - ldr r1, _08025260 @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - ldr r2, _08025264 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] -_08025246: - ldr r1, _08025268 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08025258: .4byte gDisableStructs -_0802525C: .4byte gBankAttacker -_08025260: .4byte gBattleCommunication -_08025264: .4byte gBattleMoveFlags -_08025268: .4byte gBattlescriptCurrInstr - thumb_func_end atk77_setprotect - - thumb_func_start atk78_faintifabilitynotdamp -atk78_faintifabilitynotdamp: @ 802526C - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _08025328 @ =gBattleExecBuffer - ldr r2, [r0] - cmp r2, 0 - bne _08025370 - ldr r1, _0802532C @ =gBankTarget - strb r2, [r1] - ldr r0, _08025330 @ =gNoOfAllBanks - ldrb r3, [r0] - adds r5, r1, 0 - mov r8, r0 - ldr r6, _08025334 @ =gBattleMons - cmp r2, r3 - bcs _080252B8 - adds r0, r6, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x6 - beq _080252B8 - adds r2, r3, 0 - adds r4, r6, 0 - movs r3, 0x58 -_0802529C: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, r2 - bcs _080252B8 - ldrb r0, [r5] - muls r0, r3 - adds r0, r4 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x6 - bne _0802529C -_080252B8: - ldrb r0, [r5] - mov r1, r8 - ldrb r1, [r1] - cmp r0, r1 - bne _08025354 - ldr r4, _08025338 @ =gActiveBank - ldr r7, _0802533C @ =gBankAttacker - ldrb r0, [r7] - strb r0, [r4] - ldr r2, _08025340 @ =gBattleMoveDamage - ldrb r1, [r4] - movs r0, 0x58 - muls r0, r1 - adds r0, r6 - ldrh r0, [r0, 0x28] - str r0, [r2] - ldr r1, _08025344 @ =0x00007fff - movs r0, 0 - bl EmitHealthBarUpdate - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r1, _08025348 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - movs r0, 0 - strb r0, [r5] - mov r2, r8 - ldrb r0, [r2] - cmp r0, 0 - beq _08025370 - adds r3, r5, 0 - ldrb r5, [r7] - ldr r7, _0802534C @ =gBitTable - adds r4, r0, 0 - ldr r6, _08025350 @ =gAbsentBankFlags -_08025304: - ldrb r2, [r3] - cmp r2, r5 - beq _0802531A - ldrb r0, [r6] - ldrb r1, [r3] - lsls r1, 2 - adds r1, r7 - ldr r1, [r1] - ands r0, r1 - cmp r0, 0 - beq _08025370 -_0802531A: - adds r0, r2, 0x1 - strb r0, [r3] - lsls r0, 24 - lsrs r0, 24 - cmp r0, r4 - bcc _08025304 - b _08025370 - .align 2, 0 -_08025328: .4byte gBattleExecBuffer -_0802532C: .4byte gBankTarget -_08025330: .4byte gNoOfAllBanks -_08025334: .4byte gBattleMons -_08025338: .4byte gActiveBank -_0802533C: .4byte gBankAttacker -_08025340: .4byte gBattleMoveDamage -_08025344: .4byte 0x00007fff -_08025348: .4byte gBattlescriptCurrInstr -_0802534C: .4byte gBitTable -_08025350: .4byte gAbsentBankFlags -_08025354: - ldr r1, _0802537C @ =gLastUsedAbility - movs r0, 0x6 - strb r0, [r1] - ldrb r0, [r5] - movs r1, 0x58 - muls r1, r0 - adds r1, r6 - adds r1, 0x20 - ldrb r1, [r1] - bl RecordAbilityBattle - ldr r1, _08025380 @ =gBattlescriptCurrInstr - ldr r0, _08025384 @ =gUnknown_081D9834 - str r0, [r1] -_08025370: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802537C: .4byte gLastUsedAbility -_08025380: .4byte gBattlescriptCurrInstr -_08025384: .4byte gUnknown_081D9834 - thumb_func_end atk78_faintifabilitynotdamp - - thumb_func_start atk79_setuserhptozero -atk79_setuserhptozero: @ 8025388 - push {r4,lr} - sub sp, 0x4 - ldr r0, _080253D4 @ =gBattleExecBuffer - ldr r3, [r0] - cmp r3, 0 - bne _080253CC - ldr r4, _080253D8 @ =gActiveBank - ldr r0, _080253DC @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r4] - ldr r1, _080253E0 @ =gBattleMons - ldrb r0, [r4] - movs r2, 0x58 - muls r0, r2 - adds r0, r1 - strh r3, [r0, 0x28] - ldrb r0, [r4] - muls r0, r2 - adds r1, 0x28 - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x2A - movs r2, 0 - movs r3, 0x2 - bl EmitSetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r1, _080253E4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_080253CC: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080253D4: .4byte gBattleExecBuffer -_080253D8: .4byte gActiveBank -_080253DC: .4byte gBankAttacker -_080253E0: .4byte gBattleMons -_080253E4: .4byte gBattlescriptCurrInstr - thumb_func_end atk79_setuserhptozero - - thumb_func_start sub_80253E8 -sub_80253E8: @ 80253E8 - push {r4-r7,lr} - ldr r3, _08025460 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r4, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r4, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r4, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r4, r0 - ldr r0, _08025464 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - adds r7, r3, 0 - cmp r0, 0 - beq _08025480 - ldr r0, _08025468 @ =gBankTarget - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - ldr r2, _0802546C @ =gBankAttacker - lsls r1, 24 - lsrs r1, 24 - adds r3, r0, 0 - ldr r6, _08025470 @ =gAbsentBankFlags - ldr r5, _08025474 @ =gBitTable - ldr r0, _08025478 @ =gNoOfAllBanks - mov r12, r0 - ldrb r0, [r2] - cmp r1, r0 - bne _0802543E -_0802542E: - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r2] - cmp r0, r1 - beq _0802542E -_0802543E: - ldrb r0, [r6] - ldrb r1, [r3] - lsls r1, 2 - adds r1, r5 - ldr r1, [r1] - ands r0, r1 - cmp r0, 0 - bne _0802542E - ldrb r0, [r3] - mov r2, r12 - ldrb r2, [r2] - cmp r0, r2 - bcc _0802547C - ldr r0, [r7] - adds r0, 0x5 - str r0, [r7] - b _08025484 - .align 2, 0 -_08025460: .4byte gBattlescriptCurrInstr -_08025464: .4byte gBattleTypeFlags -_08025468: .4byte gBankTarget -_0802546C: .4byte gBankAttacker -_08025470: .4byte gAbsentBankFlags -_08025474: .4byte gBitTable -_08025478: .4byte gNoOfAllBanks -_0802547C: - str r4, [r7] - b _08025484 -_08025480: - adds r0, r2, 0x5 - str r0, [r3] -_08025484: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80253E8 - - thumb_func_start sub_802548C -sub_802548C: @ 802548C - push {r4-r6,lr} - ldr r4, _080254E8 @ =gBattlescriptCurrInstr - ldr r1, [r4] - ldrb r2, [r1, 0x1] - ldrb r0, [r1, 0x2] - lsls r0, 8 - orrs r2, r0 - ldrb r0, [r1, 0x3] - lsls r0, 16 - orrs r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 24 - orrs r2, r0 - ldrb r0, [r1, 0x5] - ldr r3, _080254EC @ =gBankTarget - cmp r0, 0x1 - bne _080254B4 - ldr r0, _080254F0 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r3] -_080254B4: - ldr r1, _080254F4 @ =gBattleMoveDamage - ldr r6, _080254F8 @ =gBattleMons - ldrb r0, [r3] - movs r5, 0x58 - muls r0, r5 - adds r0, r6 - ldrh r0, [r0, 0x2C] - lsrs r0, 1 - str r0, [r1] - cmp r0, 0 - bne _080254CE - movs r0, 0x1 - str r0, [r1] -_080254CE: - ldr r0, [r1] - negs r0, r0 - str r0, [r1] - ldrb r0, [r3] - muls r0, r5 - adds r0, r6 - ldrh r1, [r0, 0x28] - ldrh r0, [r0, 0x2C] - cmp r1, r0 - bne _080254FC - str r2, [r4] - b _08025502 - .align 2, 0 -_080254E8: .4byte gBattlescriptCurrInstr -_080254EC: .4byte gBankTarget -_080254F0: .4byte gBankAttacker -_080254F4: .4byte gBattleMoveDamage -_080254F8: .4byte gBattleMons -_080254FC: - ldr r0, [r4] - adds r0, 0x6 - str r0, [r4] -_08025502: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_802548C - - thumb_func_start sub_8025508 -sub_8025508: @ 8025508 - push {r4-r7,lr} - ldr r3, _0802556C @ =0x02000000 - ldr r4, _08025570 @ =gBankAttacker - ldrb r2, [r4] - lsls r1, r2, 1 - ldr r5, _08025574 @ =0x000160ac - adds r0, r1, r5 - adds r0, r3 - ldrb r7, [r0] - ldr r0, _08025578 @ =0x000160ad - adds r1, r0 - adds r1, r3 - ldrb r0, [r1] - lsls r0, 8 - orrs r7, r0 - lsls r2, 2 - ldr r1, _0802557C @ =0x00016100 - adds r0, r2, r1 - adds r0, r3 - ldrb r6, [r0] - adds r5, 0x55 - adds r0, r2, r5 - adds r0, r3 - ldrb r0, [r0] - lsls r0, 8 - orrs r6, r0 - adds r1, 0x2 - adds r0, r2, r1 - adds r0, r3 - ldrb r5, [r0] - ldr r0, _08025580 @ =0x00016103 - adds r2, r0 - adds r2, r3 - ldrb r0, [r2] - lsls r0, 8 - orrs r5, r0 - cmp r7, 0 - beq _08025594 - ldr r0, _08025584 @ =0x0000ffff - cmp r7, r0 - beq _08025594 - ldr r2, _08025588 @ =gHitMarker - ldr r0, [r2] - ldr r1, _0802558C @ =0xfffffbff - ands r0, r1 - str r0, [r2] - ldr r4, _08025590 @ =gCurrentMove - strh r7, [r4] - b _0802565C - .align 2, 0 -_0802556C: .4byte 0x02000000 -_08025570: .4byte gBankAttacker -_08025574: .4byte 0x000160ac -_08025578: .4byte 0x000160ad -_0802557C: .4byte 0x00016100 -_08025580: .4byte 0x00016103 -_08025584: .4byte 0x0000ffff -_08025588: .4byte gHitMarker -_0802558C: .4byte 0xfffffbff -_08025590: .4byte gCurrentMove -_08025594: - cmp r6, 0 - beq _08025644 - cmp r5, 0 - beq _08025618 - ldr r0, _080255C4 @ =0x0000ffff - cmp r6, r0 - beq _08025618 - cmp r5, r0 - beq _08025618 - ldr r2, _080255C8 @ =gHitMarker - ldr r0, [r2] - ldr r1, _080255CC @ =0xfffffbff - ands r0, r1 - str r0, [r2] - bl Random - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _080255D4 - ldr r0, _080255D0 @ =gCurrentMove - strh r6, [r0] - b _080255D8 - .align 2, 0 -_080255C4: .4byte 0x0000ffff -_080255C8: .4byte gHitMarker -_080255CC: .4byte 0xfffffbff -_080255D0: .4byte gCurrentMove -_080255D4: - ldr r0, _08025604 @ =gCurrentMove - strh r5, [r0] -_080255D8: - adds r5, r0, 0 - ldrh r0, [r5] - movs r1, 0 - bl sub_801B5C0 - ldr r1, _08025608 @ =gBankTarget - strb r0, [r1] - ldr r4, _0802560C @ =gBattlescriptCurrInstr - ldr r3, _08025610 @ =gUnknown_081D6BBC - ldr r2, _08025614 @ =gBattleMoves - ldrh r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - str r0, [r4] - b _080256C0 - .align 2, 0 -_08025604: .4byte gCurrentMove -_08025608: .4byte gBankTarget -_0802560C: .4byte gBattlescriptCurrInstr -_08025610: .4byte gUnknown_081D6BBC -_08025614: .4byte gBattleMoves -_08025618: - cmp r6, 0 - beq _08025644 - ldr r0, _08025634 @ =0x0000ffff - cmp r6, r0 - beq _08025644 - ldr r2, _08025638 @ =gHitMarker - ldr r0, [r2] - ldr r1, _0802563C @ =0xfffffbff - ands r0, r1 - str r0, [r2] - ldr r4, _08025640 @ =gCurrentMove - strh r6, [r4] - b _0802565C - .align 2, 0 -_08025634: .4byte 0x0000ffff -_08025638: .4byte gHitMarker -_0802563C: .4byte 0xfffffbff -_08025640: .4byte gCurrentMove -_08025644: - cmp r5, 0 - beq _080256A4 - ldr r0, _08025684 @ =0x0000ffff - cmp r5, r0 - beq _080256A4 - ldr r2, _08025688 @ =gHitMarker - ldr r0, [r2] - ldr r1, _0802568C @ =0xfffffbff - ands r0, r1 - str r0, [r2] - ldr r4, _08025690 @ =gCurrentMove - strh r5, [r4] -_0802565C: - ldrh r0, [r4] - movs r1, 0 - bl sub_801B5C0 - ldr r1, _08025694 @ =gBankTarget - strb r0, [r1] - ldr r5, _08025698 @ =gBattlescriptCurrInstr - ldr r3, _0802569C @ =gUnknown_081D6BBC - ldr r2, _080256A0 @ =gBattleMoves - ldrh r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - str r0, [r5] - b _080256C0 - .align 2, 0 -_08025684: .4byte 0x0000ffff -_08025688: .4byte gHitMarker -_0802568C: .4byte 0xfffffbff -_08025690: .4byte gCurrentMove -_08025694: .4byte gBankTarget -_08025698: .4byte gBattlescriptCurrInstr -_0802569C: .4byte gUnknown_081D6BBC -_080256A0: .4byte gBattleMoves -_080256A4: - ldr r2, _080256C8 @ =gSpecialStatuses - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0] - ldr r1, _080256CC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_080256C0: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080256C8: .4byte gSpecialStatuses -_080256CC: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8025508 - - thumb_func_start sub_80256D0 -sub_80256D0: @ 80256D0 - push {lr} - ldr r2, _080256F0 @ =gBattleWeather - ldrh r0, [r2] - movs r1, 0x7 - ands r1, r0 - cmp r1, 0 - beq _080256FC - ldr r2, _080256F4 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _080256F8 @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - b _0802570C - .align 2, 0 -_080256F0: .4byte gBattleWeather -_080256F4: .4byte gBattleMoveFlags -_080256F8: .4byte gBattleCommunication -_080256FC: - movs r0, 0x1 - strh r0, [r2] - ldr r0, _08025718 @ =gBattleCommunication - strb r1, [r0, 0x5] - ldr r0, _0802571C @ =gWishFutureKnock - adds r0, 0x28 - movs r1, 0x5 - strb r1, [r0] -_0802570C: - ldr r1, _08025720 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08025718: .4byte gBattleCommunication -_0802571C: .4byte gWishFutureKnock -_08025720: .4byte gBattlescriptCurrInstr - thumb_func_end sub_80256D0 - - thumb_func_start atk7E_setreflect -atk7E_setreflect: @ 8025724 - push {r4-r6,lr} - ldr r5, _08025754 @ =gBankAttacker - ldrb r0, [r5] - bl GetBankIdentity - ldr r6, _08025758 @ =gSideAffecting - movs r4, 0x1 - adds r1, r4, 0 - ands r1, r0 - lsls r1, 1 - adds r1, r6 - ldrh r1, [r1] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08025764 - ldr r2, _0802575C @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08025760 @ =gBattleCommunication - movs r0, 0 - b _080257C4 - .align 2, 0 -_08025754: .4byte gBankAttacker -_08025758: .4byte gSideAffecting -_0802575C: .4byte gBattleMoveFlags -_08025760: .4byte gBattleCommunication -_08025764: - ldrb r0, [r5] - bl GetBankIdentity - adds r1, r4, 0 - ands r1, r0 - lsls r1, 1 - adds r1, r6 - ldrh r0, [r1] - movs r2, 0x1 - orrs r0, r2 - strh r0, [r1] - ldrb r0, [r5] - bl GetBankIdentity - ldr r2, _080257B4 @ =gSideTimer - adds r1, r4, 0 - ands r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x5 - strb r1, [r0] - ldr r0, _080257B8 @ =gBattleTypeFlags - ldrh r1, [r0] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _080257C0 - movs r0, 0x1 - bl CountAliveMons - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x2 - bne _080257C0 - ldr r0, _080257BC @ =gBattleCommunication - strb r1, [r0, 0x5] - b _080257C6 - .align 2, 0 -_080257B4: .4byte gSideTimer -_080257B8: .4byte gBattleTypeFlags -_080257BC: .4byte gBattleCommunication -_080257C0: - ldr r1, _080257D4 @ =gBattleCommunication - movs r0, 0x1 -_080257C4: - strb r0, [r1, 0x5] -_080257C6: - ldr r1, _080257D8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080257D4: .4byte gBattleCommunication -_080257D8: .4byte gBattlescriptCurrInstr - thumb_func_end atk7E_setreflect - - thumb_func_start sub_80257DC -sub_80257DC: @ 80257DC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r7, _0802581C @ =gBattleMoveFlags - ldrb r5, [r7] - movs r0, 0x29 - ands r0, r5 - cmp r0, 0 - bne _0802580E - ldr r0, _08025820 @ =gStatuses3 - mov r9, r0 - ldr r1, _08025824 @ =gBankTarget - mov r8, r1 - ldrb r4, [r1] - lsls r0, r4, 2 - mov r2, r9 - adds r6, r0, r2 - ldr r2, [r6] - movs r0, 0x4 - mov r12, r0 - adds r3, r2, 0 - ands r3, r0 - cmp r3, 0 - beq _0802582C -_0802580E: - movs r0, 0x1 - orrs r0, r5 - strb r0, [r7] - ldr r1, _08025828 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - b _0802587C - .align 2, 0 -_0802581C: .4byte gBattleMoveFlags -_08025820: .4byte gStatuses3 -_08025824: .4byte gBankTarget -_08025828: .4byte gBattleCommunication -_0802582C: - ldr r1, _08025858 @ =gBattleMons - movs r0, 0x58 - muls r0, r4 - adds r1, r0, r1 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0xC - beq _08025848 - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0xC - bne _08025860 -_08025848: - movs r0, 0x1 - orrs r0, r5 - strb r0, [r7] - ldr r1, _0802585C @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - b _0802587C - .align 2, 0 -_08025858: .4byte gBattleMons -_0802585C: .4byte gBattleCommunication -_08025860: - ldr r0, _08025890 @ =gBankAttacker - ldrb r0, [r0] - orrs r2, r0 - str r2, [r6] - mov r2, r8 - ldrb r1, [r2] - lsls r1, 2 - add r1, r9 - ldr r0, [r1] - mov r2, r12 - orrs r0, r2 - str r0, [r1] - ldr r0, _08025894 @ =gBattleCommunication - strb r3, [r0, 0x5] -_0802587C: - ldr r1, _08025898 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08025890: .4byte gBankAttacker -_08025894: .4byte gBattleCommunication -_08025898: .4byte gBattlescriptCurrInstr - thumb_func_end sub_80257DC - - thumb_func_start atk80_manipulatedamage -atk80_manipulatedamage: @ 802589C - push {r4,lr} - ldr r1, _080258B4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - ldrb r2, [r0, 0x1] - adds r4, r1, 0 - cmp r2, 0x1 - beq _080258CC - cmp r2, 0x1 - bgt _080258B8 - cmp r2, 0 - beq _080258BE - b _0802590C - .align 2, 0 -_080258B4: .4byte gBattlescriptCurrInstr -_080258B8: - cmp r2, 0x2 - beq _08025904 - b _0802590C -_080258BE: - ldr r1, _080258C8 @ =gBattleMoveDamage - ldr r0, [r1] - negs r0, r0 - b _0802590A - .align 2, 0 -_080258C8: .4byte gBattleMoveDamage -_080258CC: - ldr r3, _080258F8 @ =gBattleMoveDamage - ldr r0, [r3] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - str r0, [r3] - cmp r0, 0 - bne _080258DE - str r2, [r3] -_080258DE: - ldr r2, _080258FC @ =gBattleMons - ldr r0, _08025900 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0, 0x2C] - lsrs r1, r0, 1 - ldr r0, [r3] - cmp r1, r0 - bge _0802590C - str r1, [r3] - b _0802590C - .align 2, 0 -_080258F8: .4byte gBattleMoveDamage -_080258FC: .4byte gBattleMons -_08025900: .4byte gBankTarget -_08025904: - ldr r1, _08025918 @ =gBattleMoveDamage - ldr r0, [r1] - lsls r0, 1 -_0802590A: - str r0, [r1] -_0802590C: - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08025918: .4byte gBattleMoveDamage - thumb_func_end atk80_manipulatedamage - - thumb_func_start atk81_setrest -atk81_setrest: @ 802591C - push {r4-r7,lr} - sub sp, 0x4 - ldr r0, _08025974 @ =gBattlescriptCurrInstr - mov r12, r0 - ldr r1, [r0] - ldrb r6, [r1, 0x1] - ldrb r0, [r1, 0x2] - lsls r0, 8 - orrs r6, r0 - ldrb r0, [r1, 0x3] - lsls r0, 16 - orrs r6, r0 - ldrb r0, [r1, 0x4] - lsls r0, 24 - orrs r6, r0 - ldr r5, _08025978 @ =gActiveBank - ldr r2, _0802597C @ =gBankTarget - ldr r0, _08025980 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r2] - strb r0, [r5] - ldr r4, _08025984 @ =gBattleMoveDamage - ldr r1, _08025988 @ =gBattleMons - ldrb r0, [r2] - movs r3, 0x58 - muls r0, r3 - adds r0, r1 - ldrh r0, [r0, 0x2C] - negs r0, r0 - str r0, [r4] - ldrb r0, [r2] - adds r4, r0, 0 - muls r4, r3 - adds r0, r4, r1 - ldrh r3, [r0, 0x28] - adds r7, r5, 0 - adds r5, r2, 0 - adds r2, r1, 0 - ldrh r0, [r0, 0x2C] - cmp r3, r0 - bne _0802598C - mov r0, r12 - str r6, [r0] - b _080259DC - .align 2, 0 -_08025974: .4byte gBattlescriptCurrInstr -_08025978: .4byte gActiveBank -_0802597C: .4byte gBankTarget -_08025980: .4byte gBankAttacker -_08025984: .4byte gBattleMoveDamage -_08025988: .4byte gBattleMons -_0802598C: - adds r0, r2, 0 - adds r0, 0x4C - adds r0, r4, r0 - ldr r1, [r0] - movs r0, 0xF8 - ands r1, r0 - cmp r1, 0 - beq _080259A8 - ldr r1, _080259A4 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - b _080259AC - .align 2, 0 -_080259A4: .4byte gBattleCommunication -_080259A8: - ldr r0, _080259E4 @ =gBattleCommunication - strb r1, [r0, 0x5] -_080259AC: - ldrb r0, [r5] - movs r3, 0x58 - muls r0, r3 - adds r2, 0x4C - adds r0, r2 - movs r1, 0x3 - str r1, [r0] - ldrb r0, [r7] - muls r0, r3 - adds r0, r2 - str r0, [sp] - movs r0, 0 - movs r1, 0x28 - movs r2, 0 - movs r3, 0x4 - bl EmitSetAttributes - ldrb r0, [r7] - bl MarkBufferBankForExecution - ldr r1, _080259E8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_080259DC: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080259E4: .4byte gBattleCommunication -_080259E8: .4byte gBattlescriptCurrInstr - thumb_func_end atk81_setrest - - thumb_func_start atk82_jumpifnotfirstturn -atk82_jumpifnotfirstturn: @ 80259EC - push {r4,r5,lr} - ldr r5, _08025A20 @ =gBattlescriptCurrInstr - ldr r4, [r5] - ldrb r3, [r4, 0x1] - ldrb r0, [r4, 0x2] - lsls r0, 8 - orrs r3, r0 - ldrb r0, [r4, 0x3] - lsls r0, 16 - orrs r3, r0 - ldrb r0, [r4, 0x4] - lsls r0, 24 - orrs r3, r0 - ldr r2, _08025A24 @ =gDisableStructs - ldr r0, _08025A28 @ =gBankAttacker - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x16] - cmp r0, 0 - beq _08025A2C - adds r0, r4, 0x5 - str r0, [r5] - b _08025A2E - .align 2, 0 -_08025A20: .4byte gBattlescriptCurrInstr -_08025A24: .4byte gDisableStructs -_08025A28: .4byte gBankAttacker -_08025A2C: - str r3, [r5] -_08025A2E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end atk82_jumpifnotfirstturn - - thumb_func_start sub_8025A34 -sub_8025A34: @ 8025A34 - ldr r1, _08025A40 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08025A40: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8025A34 - - thumb_func_start sub_8025A44 -sub_8025A44: @ 8025A44 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r3, r0, 24 - movs r2, 0 - ldr r0, _08025A9C @ =gNoOfAllBanks - ldrb r1, [r0] - mov r8, r0 - cmp r2, r1 - bge _08025AB8 - ldr r0, _08025AA0 @ =gBattleMons - mov r12, r0 - movs r0, 0x58 - muls r0, r3 - add r0, r12 - adds r5, r0, 0 - adds r5, 0x20 - ldr r6, _08025AA4 @ =0x02016003 - movs r3, 0 - ldr r7, _08025AA8 @ =gBattleCommunication - adds r4, r1, 0 -_08025A70: - mov r0, r12 - adds r0, 0x50 - adds r0, r3, r0 - ldr r0, [r0] - movs r1, 0x70 - ands r0, r1 - cmp r0, 0 - beq _08025AB0 - ldrb r0, [r5] - cmp r0, 0x2B - beq _08025AB0 - movs r3, 0 - strb r2, [r6] - ldr r1, _08025AAC @ =gBankTarget - ldrb r0, [r1] - cmp r0, 0xFF - beq _08025AD0 - cmp r0, r2 - beq _08025AC4 - movs r0, 0x1 - strb r0, [r7, 0x5] - b _08025AB8 - .align 2, 0 -_08025A9C: .4byte gNoOfAllBanks -_08025AA0: .4byte gBattleMons -_08025AA4: .4byte 0x02016003 -_08025AA8: .4byte gBattleCommunication -_08025AAC: .4byte gBankTarget -_08025AB0: - adds r3, 0x58 - adds r2, 0x1 - cmp r2, r4 - blt _08025A70 -_08025AB8: - mov r1, r8 - ldrb r1, [r1] - cmp r2, r1 - beq _08025AD4 - movs r0, 0x1 - b _08025AD6 -_08025AC4: - ldr r0, _08025ACC @ =gBattleCommunication - strb r3, [r0, 0x5] - b _08025AB8 - .align 2, 0 -_08025ACC: .4byte gBattleCommunication -_08025AD0: - strb r2, [r1] - b _08025AB8 -_08025AD4: - movs r0, 0 -_08025AD6: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8025A44 - - thumb_func_start sub_8025AE0 -sub_8025AE0: @ 8025AE0 - push {r4-r6,lr} - ldr r5, _08025B0C @ =gBattlescriptCurrInstr - ldr r1, [r5] - ldrb r4, [r1, 0x1] - ldrb r0, [r1, 0x2] - lsls r0, 8 - orrs r4, r0 - ldrb r0, [r1, 0x3] - lsls r0, 16 - orrs r4, r0 - ldrb r0, [r1, 0x4] - lsls r0, 24 - orrs r4, r0 - ldr r6, _08025B10 @ =gBankTarget - ldrb r0, [r6] - bl sub_8025A44 - lsls r0, 24 - cmp r0, 0 - beq _08025B14 - str r4, [r5] - b _08025B56 - .align 2, 0 -_08025B0C: .4byte gBattlescriptCurrInstr -_08025B10: .4byte gBankTarget -_08025B14: - ldr r1, _08025B44 @ =gBattleMons - ldrb r3, [r6] - movs r0, 0x58 - muls r0, r3 - adds r0, r1 - adds r0, 0x20 - ldrb r0, [r0] - adds r1, r0, 0 - cmp r1, 0xF - beq _08025B2C - cmp r1, 0x48 - bne _08025B50 -_08025B2C: - ldr r2, _08025B48 @ =gLastUsedAbility - strb r0, [r2] - ldr r1, _08025B4C @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - str r4, [r5] - ldrb r1, [r2] - adds r0, r3, 0 - bl RecordAbilityBattle - b _08025B56 - .align 2, 0 -_08025B44: .4byte gBattleMons -_08025B48: .4byte gLastUsedAbility -_08025B4C: .4byte gBattleCommunication -_08025B50: - ldr r0, [r5] - adds r0, 0x5 - str r0, [r5] -_08025B56: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8025AE0 - - thumb_func_start sub_8025B5C -sub_8025B5C: @ 8025B5C - push {r4,r5,lr} - ldr r5, _08025B84 @ =gDisableStructs - ldr r4, _08025B88 @ =gBankAttacker - ldrb r1, [r4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r1, r0, r5 - ldrb r0, [r1, 0x9] - cmp r0, 0x3 - bne _08025B94 - ldr r2, _08025B8C @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08025B90 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - b _08025BBE - .align 2, 0 -_08025B84: .4byte gDisableStructs -_08025B88: .4byte gBankAttacker -_08025B8C: .4byte gBattleMoveFlags -_08025B90: .4byte gBattleCommunication -_08025B94: - adds r0, 0x1 - movs r3, 0 - strb r0, [r1, 0x9] - ldr r2, _08025BCC @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r2] - movs r0, 0x1 - strb r0, [r2, 0x1] - strb r0, [r2, 0x2] - strb r0, [r2, 0x3] - ldrb r1, [r4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r0, [r0, 0x9] - strb r0, [r2, 0x4] - movs r0, 0xFF - strb r0, [r2, 0x5] - ldr r0, _08025BD0 @ =gBattleCommunication - strb r3, [r0, 0x5] -_08025BBE: - ldr r1, _08025BD4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08025BCC: .4byte gBattleTextBuff1 -_08025BD0: .4byte gBattleCommunication -_08025BD4: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8025B5C - - thumb_func_start atk86_stockpiletobasedamage -atk86_stockpiletobasedamage: @ 8025BD8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - ldr r3, _08025C10 @ =gBattlescriptCurrInstr - ldr r1, [r3] - ldrb r2, [r1, 0x1] - ldrb r0, [r1, 0x2] - lsls r0, 8 - orrs r2, r0 - ldrb r0, [r1, 0x3] - lsls r0, 16 - orrs r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 24 - orrs r2, r0 - ldr r7, _08025C14 @ =gDisableStructs - ldr r6, _08025C18 @ =gBankAttacker - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r7 - ldrb r0, [r0, 0x9] - cmp r0, 0 - bne _08025C1C - str r2, [r3] - b _08025CC2 - .align 2, 0 -_08025C10: .4byte gBattlescriptCurrInstr -_08025C14: .4byte gDisableStructs -_08025C18: .4byte gBankAttacker -_08025C1C: - ldr r0, _08025CD0 @ =gBattleCommunication - ldrb r0, [r0, 0x6] - cmp r0, 0x1 - beq _08025CA8 - ldr r0, _08025CD4 @ =gBattleMoveDamage - mov r8, r0 - ldr r4, _08025CD8 @ =gSideAffecting - ldr r5, _08025CDC @ =gBankTarget - ldrb r0, [r5] - bl GetBankIdentity - movs r1, 0x1 - ands r1, r0 - lsls r1, 1 - adds r1, r4 - ldrh r3, [r1] - ldrb r0, [r6] - movs r4, 0x58 - muls r0, r4 - ldr r2, _08025CE0 @ =gBattleMons - adds r0, r2 - ldrb r1, [r5] - muls r1, r4 - adds r1, r2 - ldr r2, _08025CE4 @ =gCurrentMove - ldrh r2, [r2] - movs r4, 0 - str r4, [sp] - str r4, [sp, 0x4] - ldrb r4, [r6] - str r4, [sp, 0x8] - ldrb r4, [r5] - str r4, [sp, 0xC] - bl CalculateBaseDamage - ldrb r2, [r6] - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r7 - ldrb r1, [r1, 0x9] - adds r3, r0, 0 - muls r3, r1 - mov r1, r8 - str r3, [r1] - ldr r2, _08025CE8 @ =0x02000000 - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r7 - ldrb r0, [r0, 0x9] - ldr r1, _08025CEC @ =0x00016002 - adds r2, r1 - strb r0, [r2] - ldr r1, _08025CF0 @ =gProtectStructs - ldrb r0, [r6] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 28 - cmp r0, 0 - bge _08025CA8 - lsls r0, r3, 4 - subs r0, r3 - movs r1, 0xA - bl __divsi3 - mov r1, r8 - str r0, [r1] -_08025CA8: - ldr r2, _08025CF4 @ =gDisableStructs - ldr r0, _08025CF8 @ =gBankAttacker - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strb r1, [r0, 0x9] - ldr r1, _08025CFC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08025CC2: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08025CD0: .4byte gBattleCommunication -_08025CD4: .4byte gBattleMoveDamage -_08025CD8: .4byte gSideAffecting -_08025CDC: .4byte gBankTarget -_08025CE0: .4byte gBattleMons -_08025CE4: .4byte gCurrentMove -_08025CE8: .4byte 0x02000000 -_08025CEC: .4byte 0x00016002 -_08025CF0: .4byte gProtectStructs -_08025CF4: .4byte gDisableStructs -_08025CF8: .4byte gBankAttacker -_08025CFC: .4byte gBattlescriptCurrInstr - thumb_func_end atk86_stockpiletobasedamage - - thumb_func_start sub_8025D00 -sub_8025D00: @ 8025D00 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r7, _08025D40 @ =gBattlescriptCurrInstr - ldr r1, [r7] - ldrb r2, [r1, 0x1] - ldrb r0, [r1, 0x2] - lsls r0, 8 - orrs r2, r0 - ldrb r0, [r1, 0x3] - lsls r0, 16 - orrs r2, r0 - ldrb r0, [r1, 0x4] - lsls r0, 24 - orrs r2, r0 - ldr r0, _08025D44 @ =gDisableStructs - mov r8, r0 - ldr r6, _08025D48 @ =gBankAttacker - ldrb r3, [r6] - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 2 - mov r1, r8 - adds r4, r0, r1 - ldrb r1, [r4, 0x9] - cmp r1, 0 - bne _08025D50 - str r2, [r7] - ldr r0, _08025D4C @ =gBattleCommunication - strb r1, [r0, 0x5] - b _08025DD0 - .align 2, 0 -_08025D40: .4byte gBattlescriptCurrInstr -_08025D44: .4byte gDisableStructs -_08025D48: .4byte gBankAttacker -_08025D4C: .4byte gBattleCommunication -_08025D50: - ldr r1, _08025D74 @ =gBattleMons - movs r0, 0x58 - muls r0, r3 - adds r1, r0, r1 - ldrh r0, [r1, 0x2C] - ldrh r3, [r1, 0x28] - cmp r0, r3 - bne _08025D80 - movs r0, 0 - strb r0, [r4, 0x9] - str r2, [r7] - ldr r1, _08025D78 @ =gBankTarget - ldrb r0, [r6] - strb r0, [r1] - ldr r1, _08025D7C @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - b _08025DD0 - .align 2, 0 -_08025D74: .4byte gBattleMons -_08025D78: .4byte gBankTarget -_08025D7C: .4byte gBattleCommunication -_08025D80: - ldr r5, _08025DDC @ =gBattleMoveDamage - ldrh r0, [r1, 0x2C] - ldrb r1, [r4, 0x9] - movs r2, 0x3 - subs r2, r1 - movs r4, 0x1 - adds r1, r4, 0 - lsls r1, r2 - bl __divsi3 - str r0, [r5] - cmp r0, 0 - bne _08025D9C - str r4, [r5] -_08025D9C: - ldr r0, [r5] - negs r0, r0 - str r0, [r5] - ldr r2, _08025DE0 @ =0x02000000 - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r8 - ldrb r0, [r0, 0x9] - ldr r1, _08025DE4 @ =0x00016002 - adds r2, r1 - movs r3, 0 - strb r0, [r2] - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r8 - strb r3, [r0, 0x9] - ldr r0, [r7] - adds r0, 0x5 - str r0, [r7] - ldr r1, _08025DE8 @ =gBankTarget - ldrb r0, [r6] - strb r0, [r1] -_08025DD0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08025DDC: .4byte gBattleMoveDamage -_08025DE0: .4byte 0x02000000 -_08025DE4: .4byte 0x00016002 -_08025DE8: .4byte gBankTarget - thumb_func_end sub_8025D00 - - thumb_func_start atk88_negativedamage -atk88_negativedamage: @ 8025DEC - push {lr} - ldr r2, _08025E14 @ =gBattleMoveDamage - ldr r0, _08025E18 @ =gHP_dealt - ldr r0, [r0] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - negs r0, r0 - str r0, [r2] - cmp r0, 0 - bne _08025E08 - movs r0, 0x1 - negs r0, r0 - str r0, [r2] -_08025E08: - ldr r1, _08025E1C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08025E14: .4byte gBattleMoveDamage -_08025E18: .4byte gHP_dealt -_08025E1C: .4byte gBattlescriptCurrInstr - thumb_func_end atk88_negativedamage - - thumb_func_start sub_8025E20 -sub_8025E20: @ 8025E20 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r8, r3 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r5, r2, 24 - movs r0, 0 - mov r9, r0 - mov r10, r0 - movs r0, 0x40 - ands r0, r5 - cmp r0, 0 - beq _08025E54 - ldr r0, _08025E4C @ =gActiveBank - ldr r1, _08025E50 @ =gBankAttacker - b _08025E58 - .align 2, 0 -_08025E4C: .4byte gActiveBank -_08025E50: .4byte gBankAttacker -_08025E54: - ldr r0, _08025EF8 @ =gActiveBank - ldr r1, _08025EFC @ =gBankTarget -_08025E58: - ldrb r1, [r1] - strb r1, [r0] - movs r0, 0xBF - ands r5, r0 - movs r0, 0x80 - ands r0, r5 - cmp r0, 0 - beq _08025E72 - mov r0, r9 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 -_08025E72: - movs r0, 0x7F - ands r5, r0 - movs r0, 0x20 - ands r0, r5 - cmp r0, 0 - beq _08025E88 - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 -_08025E88: - movs r0, 0xDF - ands r5, r0 - ldr r1, _08025F00 @ =gBattleTextBuff1 - movs r4, 0 - movs r2, 0xFD - strb r2, [r1] - movs r0, 0x5 - strb r0, [r1, 0x1] - strb r7, [r1, 0x2] - movs r3, 0x1 - negs r3, r3 - mov r12, r3 - movs r0, 0xFF - strb r0, [r1, 0x3] - lsls r0, r6, 24 - cmp r0, 0 - blt _08025EAC - b _080261B0 -_08025EAC: - ldr r4, _08025F04 @ =gSideTimer - ldr r1, _08025EF8 @ =gActiveBank - ldrb r0, [r1] - bl GetBankIdentity - movs r1, 0x1 - ands r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x2] - cmp r0, 0 - beq _08025F54 - mov r2, r9 - cmp r2, 0 - bne _08025F54 - ldr r0, _08025F08 @ =gCurrentMove - ldrh r0, [r0] - cmp r0, 0xAE - beq _08025F84 - cmp r5, 0x1 - bne _08025F74 - ldr r4, _08025F0C @ =gSpecialStatuses - ldr r3, _08025EF8 @ =gActiveBank - ldrb r0, [r3] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1] - lsls r0, 31 - cmp r0, 0 - beq _08025F14 - ldr r0, _08025F10 @ =gBattlescriptCurrInstr - mov r4, r8 - str r4, [r0] - b _08025F74 - .align 2, 0 -_08025EF8: .4byte gActiveBank -_08025EFC: .4byte gBankTarget -_08025F00: .4byte gBattleTextBuff1 -_08025F04: .4byte gSideTimer -_08025F08: .4byte gCurrentMove -_08025F0C: .4byte gSpecialStatuses -_08025F10: .4byte gBattlescriptCurrInstr -_08025F14: - mov r0, r8 - bl b_movescr_stack_push - ldr r0, _08025F40 @ =0x02000000 - ldr r6, _08025F44 @ =gActiveBank - ldrb r1, [r6] - ldr r2, _08025F48 @ =0x00016003 - adds r0, r2 - strb r1, [r0] - ldr r1, _08025F4C @ =gBattlescriptCurrInstr - ldr r0, _08025F50 @ =gUnknown_081D9128 - str r0, [r1] - ldrb r1, [r6] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - b _08025F74 - .align 2, 0 -_08025F40: .4byte 0x02000000 -_08025F44: .4byte gActiveBank -_08025F48: .4byte 0x00016003 -_08025F4C: .4byte gBattlescriptCurrInstr -_08025F50: .4byte gUnknown_081D9128 -_08025F54: - ldr r0, _08025F78 @ =gCurrentMove - ldrh r0, [r0] - cmp r0, 0xAE - beq _08025F84 - mov r3, r10 - cmp r3, 0x1 - beq _08025F84 - movs r0, 0 - bl sub_801C108 - lsls r0, 24 - cmp r0, 0 - beq _08025F84 - ldr r1, _08025F7C @ =gBattlescriptCurrInstr - ldr r0, _08025F80 @ =BattleScript_1D83D6 - str r0, [r1] -_08025F74: - movs r0, 0x1 - b _080262A4 - .align 2, 0 -_08025F78: .4byte gCurrentMove -_08025F7C: .4byte gBattlescriptCurrInstr -_08025F80: .4byte BattleScript_1D83D6 -_08025F84: - ldr r2, _08025FCC @ =gBattleMons - ldr r1, _08025FD0 @ =gActiveBank - ldrb r3, [r1] - movs r4, 0x58 - adds r0, r3, 0 - muls r0, r4 - adds r0, r2 - adds r0, 0x20 - ldrb r0, [r0] - mov r10, r2 - cmp r0, 0x1D - beq _08025FA0 - cmp r0, 0x49 - bne _08026040 -_08025FA0: - mov r0, r9 - cmp r0, 0 - bne _08026040 - ldr r0, _08025FD4 @ =gCurrentMove - ldrh r0, [r0] - cmp r0, 0xAE - beq _08026040 - cmp r5, 0x1 - bne _08025F74 - ldr r4, _08025FD8 @ =gSpecialStatuses - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - beq _08025FE0 - ldr r0, _08025FDC @ =gBattlescriptCurrInstr - mov r1, r8 - str r1, [r0] - b _08025F74 - .align 2, 0 -_08025FCC: .4byte gBattleMons -_08025FD0: .4byte gActiveBank -_08025FD4: .4byte gCurrentMove -_08025FD8: .4byte gSpecialStatuses -_08025FDC: .4byte gBattlescriptCurrInstr -_08025FE0: - mov r0, r8 - bl b_movescr_stack_push - ldr r0, _08026028 @ =0x02000000 - ldr r2, _0802602C @ =gActiveBank - ldrb r1, [r2] - ldr r3, _08026030 @ =0x00016003 - adds r0, r3 - strb r1, [r0] - ldr r1, _08026034 @ =gBattlescriptCurrInstr - ldr r0, _08026038 @ =gUnknown_081D989B - str r0, [r1] - ldr r1, _0802603C @ =gLastUsedAbility - ldrb r0, [r2] - movs r6, 0x58 - muls r0, r6 - add r0, r10 - adds r0, 0x20 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r2] - ldrb r1, [r1] - bl RecordAbilityBattle - ldr r0, _0802602C @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - b _08025F74 - .align 2, 0 -_08026028: .4byte 0x02000000 -_0802602C: .4byte gActiveBank -_08026030: .4byte 0x00016003 -_08026034: .4byte gBattlescriptCurrInstr -_08026038: .4byte gUnknown_081D989B -_0802603C: .4byte gLastUsedAbility -_08026040: - ldr r1, _08026090 @ =gActiveBank - ldrb r0, [r1] - movs r4, 0x58 - muls r0, r4 - add r0, r10 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x33 - bne _080260A8 - mov r2, r9 - cmp r2, 0 - bne _080260A8 - cmp r7, 0x6 - bne _080260A8 - cmp r5, 0x1 - bne _08025F74 - mov r0, r8 - bl b_movescr_stack_push - ldr r0, _08026094 @ =0x02000000 - ldr r3, _08026090 @ =gActiveBank - ldrb r1, [r3] - ldr r6, _08026098 @ =0x00016003 - adds r0, r6 - strb r1, [r0] - ldr r1, _0802609C @ =gBattlescriptCurrInstr - ldr r0, _080260A0 @ =gUnknown_081D9903 - str r0, [r1] - ldr r1, _080260A4 @ =gLastUsedAbility - ldrb r0, [r3] - muls r0, r4 - add r0, r10 - adds r0, 0x20 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r3] - ldrb r1, [r1] - bl RecordAbilityBattle - b _08025F74 - .align 2, 0 -_08026090: .4byte gActiveBank -_08026094: .4byte 0x02000000 -_08026098: .4byte 0x00016003 -_0802609C: .4byte gBattlescriptCurrInstr -_080260A0: .4byte gUnknown_081D9903 -_080260A4: .4byte gLastUsedAbility -_080260A8: - ldr r1, _080260FC @ =gActiveBank - ldrb r0, [r1] - movs r4, 0x58 - muls r0, r4 - add r0, r10 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x34 - bne _08026114 - mov r2, r9 - cmp r2, 0 - bne _08026114 - cmp r7, 0x1 - bne _08026114 - cmp r5, 0x1 - beq _080260CA - b _08025F74 -_080260CA: - mov r0, r8 - bl b_movescr_stack_push - ldr r0, _08026100 @ =0x02000000 - ldr r3, _080260FC @ =gActiveBank - ldrb r1, [r3] - ldr r6, _08026104 @ =0x00016003 - adds r0, r6 - strb r1, [r0] - ldr r1, _08026108 @ =gBattlescriptCurrInstr - ldr r0, _0802610C @ =gUnknown_081D9903 - str r0, [r1] - ldr r1, _08026110 @ =gLastUsedAbility - ldrb r0, [r3] - muls r0, r4 - add r0, r10 - adds r0, 0x20 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r3] - ldrb r1, [r1] - bl RecordAbilityBattle - b _08025F74 - .align 2, 0 -_080260FC: .4byte gActiveBank -_08026100: .4byte 0x02000000 -_08026104: .4byte 0x00016003 -_08026108: .4byte gBattlescriptCurrInstr -_0802610C: .4byte gUnknown_081D9903 -_08026110: .4byte gLastUsedAbility -_08026114: - ldr r0, _080261A0 @ =gActiveBank - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - add r0, r10 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x13 - bne _0802612C - cmp r5, 0 - bne _0802612C - b _08025F74 -_0802612C: - lsls r0, r6, 24 - asrs r0, 28 - movs r1, 0x7 - ands r0, r1 - negs r0, r0 - lsls r0, 24 - ldr r3, _080261A4 @ =gBattleTextBuff2 - movs r4, 0 - movs r1, 0xFD - strb r1, [r3] - movs r2, 0x1 - lsrs r6, r0, 24 - asrs r0, 24 - subs r1, 0xFF - cmp r0, r1 - bne _08026156 - strb r4, [r3, 0x1] - movs r0, 0xD3 - strb r0, [r3, 0x2] - strb r4, [r3, 0x3] - movs r2, 0x4 -_08026156: - adds r0, r2, r3 - strb r4, [r0] - adds r2, 0x1 - adds r1, r2, r3 - movs r0, 0xD4 - strb r0, [r1] - adds r2, 0x1 - adds r0, r2, r3 - strb r4, [r0] - adds r2, 0x1 - adds r1, r2, r3 - movs r0, 0xFF - strb r0, [r1] - ldr r1, _080261A0 @ =gActiveBank - ldrb r2, [r1] - movs r0, 0x58 - muls r0, r2 - adds r0, r7, r0 - mov r1, r10 - adds r1, 0x18 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - beq _08026206 - movs r1, 0 - ldr r0, _080261A8 @ =gBankTarget - ldrb r0, [r0] - ldr r3, _080261AC @ =gBattleCommunication - mov r8, r3 - cmp r0, r2 - bne _0802619A - movs r1, 0x1 -_0802619A: - mov r4, r8 - strb r1, [r4, 0x5] - b _08026234 - .align 2, 0 -_080261A0: .4byte gActiveBank -_080261A4: .4byte gBattleTextBuff2 -_080261A8: .4byte gBankTarget -_080261AC: .4byte gBattleCommunication -_080261B0: - asrs r6, r0, 28 - movs r0, 0x7 - ands r6, r0 - ldr r3, _08026210 @ =gBattleTextBuff2 - strb r2, [r3] - movs r2, 0x1 - cmp r6, 0x2 - bne _080261CA - strb r4, [r3, 0x1] - movs r0, 0xD1 - strb r0, [r3, 0x2] - strb r4, [r3, 0x3] - movs r2, 0x4 -_080261CA: - adds r0, r2, r3 - strb r4, [r0] - adds r2, 0x1 - adds r1, r2, r3 - movs r0, 0xD2 - strb r0, [r1] - adds r2, 0x1 - adds r0, r2, r3 - strb r4, [r0] - adds r2, 0x1 - adds r1, r2, r3 - ldrb r0, [r1] - mov r2, r12 - orrs r0, r2 - strb r0, [r1] - ldr r2, _08026214 @ =gBattleMons - ldr r4, _08026218 @ =gActiveBank - ldrb r3, [r4] - movs r0, 0x58 - muls r0, r3 - adds r0, r7, r0 - adds r1, r2, 0 - adds r1, 0x18 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - mov r10, r2 - cmp r0, 0xC - bne _08026220 -_08026206: - ldr r1, _0802621C @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - mov r8, r1 - b _08026234 - .align 2, 0 -_08026210: .4byte gBattleTextBuff2 -_08026214: .4byte gBattleMons -_08026218: .4byte gActiveBank -_0802621C: .4byte gBattleCommunication -_08026220: - movs r1, 0 - ldr r0, _080262B4 @ =gBankTarget - ldrb r0, [r0] - ldr r2, _080262B8 @ =gBattleCommunication - mov r8, r2 - cmp r0, r3 - bne _08026230 - movs r1, 0x1 -_08026230: - mov r3, r8 - strb r1, [r3, 0x5] -_08026234: - ldr r2, _080262BC @ =gActiveBank - ldrb r0, [r2] - movs r4, 0x58 - adds r1, r0, 0 - muls r1, r4 - adds r1, r7, r1 - mov r3, r10 - adds r3, 0x18 - adds r1, r3 - lsls r0, r6, 24 - asrs r0, 24 - ldrb r6, [r1] - adds r0, r6 - strb r0, [r1] - ldrb r0, [r2] - muls r0, r4 - adds r0, r7, r0 - adds r1, r0, r3 - movs r0, 0 - ldrsb r0, [r1, r0] - cmp r0, 0 - bge _08026264 - movs r0, 0 - strb r0, [r1] -_08026264: - ldr r1, _080262BC @ =gActiveBank - ldrb r0, [r1] - muls r0, r4 - adds r0, r7, r0 - adds r1, r0, r3 - movs r0, 0 - ldrsb r0, [r1, r0] - cmp r0, 0xC - ble _0802627A - movs r0, 0xC - strb r0, [r1] -_0802627A: - mov r2, r8 - ldrb r0, [r2, 0x5] - cmp r0, 0x2 - bne _080262A2 - movs r3, 0x1 - ands r3, r5 - cmp r3, 0 - beq _08026294 - ldr r0, _080262C0 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] -_08026294: - mov r4, r8 - ldrb r0, [r4, 0x5] - cmp r0, 0x2 - bne _080262A2 - cmp r3, 0 - bne _080262A2 - b _08025F74 -_080262A2: - movs r0, 0 -_080262A4: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080262B4: .4byte gBankTarget -_080262B8: .4byte gBattleCommunication -_080262BC: .4byte gActiveBank -_080262C0: .4byte gBattleMoveFlags - thumb_func_end sub_8025E20 - - thumb_func_start atk89_statbuffchange -atk89_statbuffchange: @ 80262C4 - push {r4,r5,lr} - ldr r5, _0802630C @ =gBattlescriptCurrInstr - ldr r2, [r5] - ldrb r3, [r2, 0x2] - ldrb r0, [r2, 0x3] - lsls r0, 8 - orrs r3, r0 - ldrb r0, [r2, 0x4] - lsls r0, 16 - orrs r3, r0 - ldrb r0, [r2, 0x5] - lsls r0, 24 - orrs r3, r0 - ldr r0, _08026310 @ =0x02000000 - ldr r1, _08026314 @ =0x0001601e - adds r0, r1 - ldrb r4, [r0] - movs r0, 0xF0 - ands r0, r4 - lsls r0, 24 - asrs r0, 24 - movs r1, 0xF - ands r1, r4 - ldrb r2, [r2, 0x1] - bl sub_8025E20 - lsls r0, 24 - cmp r0, 0 - bne _08026304 - ldr r0, [r5] - adds r0, 0x6 - str r0, [r5] -_08026304: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802630C: .4byte gBattlescriptCurrInstr -_08026310: .4byte 0x02000000 -_08026314: .4byte 0x0001601e - thumb_func_end atk89_statbuffchange - - thumb_func_start atk8A_normalisebuffs -atk8A_normalisebuffs: @ 8026318 - push {r4-r7,lr} - movs r2, 0 - ldr r0, _08026360 @ =gNoOfAllBanks - ldrb r1, [r0] - ldr r0, _08026364 @ =gBattlescriptCurrInstr - mov r12, r0 - cmp r2, r1 - bge _08026350 - ldr r0, _08026368 @ =gBattleMons - movs r4, 0x6 - adds r5, r1, 0 - movs r7, 0x58 - adds r6, r0, 0 - adds r6, 0x18 -_08026334: - adds r3, r2, 0x1 - movs r1, 0x7 - adds r0, r2, 0 - muls r0, r7 - adds r0, r6 - adds r0, 0x7 -_08026340: - strb r4, [r0] - subs r0, 0x1 - subs r1, 0x1 - cmp r1, 0 - bge _08026340 - adds r2, r3, 0 - cmp r2, r5 - blt _08026334 -_08026350: - mov r1, r12 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08026360: .4byte gNoOfAllBanks -_08026364: .4byte gBattlescriptCurrInstr -_08026368: .4byte gBattleMons - thumb_func_end atk8A_normalisebuffs - - thumb_func_start atk8B_setbide -atk8B_setbide: @ 802636C - push {r4,r5,lr} - ldr r4, _080263C4 @ =gBattleMons - ldr r3, _080263C8 @ =gBankAttacker - ldrb r0, [r3] - movs r5, 0x58 - adds r2, r0, 0 - muls r2, r5 - adds r4, 0x50 - adds r2, r4 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 5 - orrs r0, r1 - str r0, [r2] - ldr r1, _080263CC @ =gLockedMove - ldrb r0, [r3] - lsls r0, 1 - adds r0, r1 - ldr r1, _080263D0 @ =gCurrentMove - ldrh r1, [r1] - movs r2, 0 - strh r1, [r0] - ldr r1, _080263D4 @ =gTakenDmg - ldrb r0, [r3] - lsls r0, 2 - adds r0, r1 - str r2, [r0] - ldrb r0, [r3] - adds r1, r0, 0 - muls r1, r5 - adds r1, r4 - ldr r0, [r1] - movs r2, 0x80 - lsls r2, 2 - orrs r0, r2 - str r0, [r1] - ldr r1, _080263D8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080263C4: .4byte gBattleMons -_080263C8: .4byte gBankAttacker -_080263CC: .4byte gLockedMove -_080263D0: .4byte gCurrentMove -_080263D4: .4byte gTakenDmg -_080263D8: .4byte gBattlescriptCurrInstr - thumb_func_end atk8B_setbide - - thumb_func_start atk8C_confuseifrepeatingattackends -atk8C_confuseifrepeatingattackends: @ 80263DC - push {lr} - ldr r1, _0802640C @ =gBattleMons - ldr r0, _08026410 @ =gBankAttacker - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 4 - ands r0, r1 - cmp r0, 0 - bne _080263FE - ldr r1, _08026414 @ =gBattleCommunication - movs r0, 0x75 - strb r0, [r1, 0x3] -_080263FE: - ldr r1, _08026418 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0802640C: .4byte gBattleMons -_08026410: .4byte gBankAttacker -_08026414: .4byte gBattleCommunication -_08026418: .4byte gBattlescriptCurrInstr - thumb_func_end atk8C_confuseifrepeatingattackends - - thumb_func_start atk8D_setloopcounter -atk8D_setloopcounter: @ 802641C - push {r4,r5,lr} - ldr r0, _08026430 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r1, [r0, 0x1] - cmp r1, 0 - beq _08026438 - ldr r0, _08026434 @ =gMultiHitCounter - strb r1, [r0] - b _08026452 - .align 2, 0 -_08026430: .4byte gBattlescriptCurrInstr -_08026434: .4byte gMultiHitCounter -_08026438: - ldr r4, _08026460 @ =gMultiHitCounter - bl Random - movs r5, 0x3 - ands r0, r5 - strb r0, [r4] - cmp r0, 0x1 - bls _0802644E - bl Random - ands r0, r5 -_0802644E: - adds r0, 0x2 - strb r0, [r4] -_08026452: - ldr r1, _08026464 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08026460: .4byte gMultiHitCounter -_08026464: .4byte gBattlescriptCurrInstr - thumb_func_end atk8D_setloopcounter - - thumb_func_start sub_8026468 -sub_8026468: @ 8026468 - push {r4,lr} - ldr r1, _080264A8 @ =0x02000000 - ldr r0, _080264AC @ =0x000160e0 - adds r2, r1, r0 - movs r3, 0 - movs r0, 0xFD - strb r0, [r2] - ldr r2, _080264B0 @ =0x000160e1 - adds r0, r1, r2 - movs r2, 0x1 - strb r2, [r0] - ldr r4, _080264B4 @ =0x000160e2 - adds r0, r1, r4 - strb r2, [r0] - adds r4, 0x1 - adds r0, r1, r4 - strb r2, [r0] - ldr r2, _080264B8 @ =0x000160e4 - adds r0, r1, r2 - strb r3, [r0] - adds r4, 0x2 - adds r1, r4 - movs r0, 0xFF - strb r0, [r1] - ldr r1, _080264BC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080264A8: .4byte 0x02000000 -_080264AC: .4byte 0x000160e0 -_080264B0: .4byte 0x000160e1 -_080264B4: .4byte 0x000160e2 -_080264B8: .4byte 0x000160e4 -_080264BC: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8026468 - - thumb_func_start sub_80264C0 -sub_80264C0: @ 80264C0 - push {r4-r7,lr} - ldr r6, _080264F4 @ =gBattleMons - ldr r7, _080264F8 @ =gBankAttacker - ldrb r0, [r7] - movs r5, 0x58 - adds r1, r0, 0 - muls r1, r5 - adds r1, r6 - adds r1, 0x2A - ldr r4, _080264FC @ =gBankTarget - ldrb r3, [r4] - adds r0, r3, 0 - muls r0, r5 - adds r0, r6 - adds r0, 0x2A - ldrb r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bcc _0802650C - ldr r0, _08026500 @ =0x02000000 - ldr r2, _08026504 @ =0x00016064 - adds r1, r3, r2 - adds r1, r0 - ldr r2, _08026508 @ =gBattlePartyID - lsls r0, r3, 1 - b _08026568 - .align 2, 0 -_080264F4: .4byte gBattleMons -_080264F8: .4byte gBankAttacker -_080264FC: .4byte gBankTarget -_08026500: .4byte 0x02000000 -_08026504: .4byte 0x00016064 -_08026508: .4byte gBattlePartyID -_0802650C: - bl Random - movs r3, 0xFF - ands r3, r0 - ldrb r0, [r7] - muls r0, r5 - adds r0, r6 - adds r0, 0x2A - ldrb r2, [r0] - ldrb r4, [r4] - adds r0, r4, 0 - muls r0, r5 - adds r0, r6 - adds r0, 0x2A - ldrb r1, [r0] - adds r2, r1 - adds r0, r3, 0 - muls r0, r2 - asrs r0, 8 - adds r0, 0x1 - lsrs r1, 2 - cmp r0, r1 - bhi _0802655C - ldr r3, _08026558 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - movs r0, 0 - b _08026576 - .align 2, 0 -_08026558: .4byte gBattlescriptCurrInstr -_0802655C: - ldr r0, _0802657C @ =0x02000000 - ldr r2, _08026580 @ =0x00016064 - adds r1, r4, r2 - adds r1, r0 - ldr r2, _08026584 @ =gBattlePartyID - lsls r0, r4, 1 -_08026568: - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1] - ldr r1, _08026588 @ =gBattlescriptCurrInstr - ldr r0, _0802658C @ =gUnknown_081D90FC - str r0, [r1] - movs r0, 0x1 -_08026576: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0802657C: .4byte 0x02000000 -_08026580: .4byte 0x00016064 -_08026584: .4byte gBattlePartyID -_08026588: .4byte gBattlescriptCurrInstr -_0802658C: .4byte gUnknown_081D90FC - thumb_func_end sub_80264C0 - - thumb_func_start sub_8026590 -sub_8026590: @ 8026590 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _08026628 @ =gBattleTypeFlags - ldrh r1, [r4] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _080265A4 - b _0802687C -_080265A4: - ldr r5, _0802662C @ =gBankTarget - ldrb r0, [r5] - bl GetBankSide - lsls r0, 24 - ldr r1, _08026630 @ =gEnemyParty - mov r8, r1 - cmp r0, 0 - bne _080265BA - ldr r2, _08026634 @ =gPlayerParty - mov r8, r2 -_080265BA: - ldrh r1, [r4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08026638 - movs r7, 0 - movs r6, 0 - ldrb r0, [r5] - bl sub_803FC34 - lsls r0, 24 - lsrs r0, 24 - bl sub_803FBFC - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bne _080265E0 - movs r6, 0x3 -_080265E0: - adds r5, r6, 0 - adds r0, r5, 0x3 - cmp r5, r0 - bge _08026678 -_080265E8: - movs r0, 0x64 - muls r0, r5 - mov r1, r8 - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0802661A - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _0802661A - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _0802661A - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 -_0802661A: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r6, 0x3 - cmp r5, r0 - blt _080265E8 - b _08026678 - .align 2, 0 -_08026628: .4byte gBattleTypeFlags -_0802662C: .4byte gBankTarget -_08026630: .4byte gEnemyParty -_08026634: .4byte gPlayerParty -_08026638: - movs r7, 0 - movs r5, 0 -_0802663C: - movs r0, 0x64 - muls r0, r5 - mov r2, r8 - adds r4, r2, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0802666E - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _0802666E - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _0802666E - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 -_0802666E: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _0802663C -_08026678: - cmp r7, 0x1 - bhi _08026688 - ldr r0, _080266BC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x41 - ands r0, r1 - cmp r0, 0x1 - bne _080266A0 -_08026688: - cmp r7, 0x2 - bhi _080266C4 - ldr r0, _080266BC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080266C4 - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _080266C4 -_080266A0: - ldr r3, _080266C0 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08026880 - .align 2, 0 -_080266BC: .4byte gBattleTypeFlags -_080266C0: .4byte gBattlescriptCurrInstr -_080266C4: - bl sub_80264C0 - lsls r0, 24 - cmp r0, 0 - bne _080266D0 - b _08026880 -_080266D0: - ldr r0, _08026710 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08026774 -_080266DC: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _08026714 @ =gBankTarget - ldrb r0, [r0] - bl sub_803FC34 - lsls r0, 24 - lsrs r0, 24 - bl sub_803FBFC - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bne _08026718 - adds r0, r6, 0x3 - lsls r0, 24 - lsrs r5, r0, 24 - b _0802671A - .align 2, 0 -_08026710: .4byte gBattleTypeFlags -_08026714: .4byte gBankTarget -_08026718: - adds r5, r6, 0 -_0802671A: - ldr r4, _0802676C @ =gBattlePartyID - ldr r0, _08026770 @ =gBankTarget - ldrb r2, [r0] - lsls r1, r2, 1 - adds r1, r4 - lsls r0, r5, 16 - lsrs r3, r0, 16 - ldrh r1, [r1] - cmp r3, r1 - beq _080266DC - movs r0, 0x2 - eors r2, r0 - lsls r0, r2, 1 - adds r0, r4 - ldrh r0, [r0] - cmp r3, r0 - beq _080266DC - movs r0, 0x64 - muls r0, r5 - mov r1, r8 - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _080266DC - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0x1 - beq _080266DC - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _080266DC - b _08026832 - .align 2, 0 -_0802676C: .4byte gBattlePartyID -_08026770: .4byte gBankTarget -_08026774: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080267E4 - ldr r6, _080267DC @ =gBattlePartyID -_0802677E: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080267E0 @ =gBankTarget - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r6 - adds r2, r5, 0 - ldrh r0, [r0] - cmp r2, r0 - beq _0802677E - movs r0, 0x2 - eors r1, r0 - lsls r0, r1, 1 - adds r0, r6 - ldrh r0, [r0] - cmp r2, r0 - beq _0802677E - movs r0, 0x64 - muls r0, r5 - mov r2, r8 - adds r4, r2, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0802677E - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0x1 - beq _0802677E - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _0802677E - b _08026832 - .align 2, 0 -_080267DC: .4byte gBattlePartyID -_080267E0: .4byte gBankTarget -_080267E4: - ldr r6, _0802686C @ =gBattlePartyID -_080267E6: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _08026870 @ =gBankTarget - ldrb r0, [r0] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - cmp r5, r0 - beq _080267E6 - movs r0, 0x64 - muls r0, r5 - mov r1, r8 - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _080267E6 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0x1 - beq _080267E6 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _080267E6 -_08026832: - ldr r0, _08026874 @ =0x02000000 - ldr r4, _08026870 @ =gBankTarget - ldrb r1, [r4] - ldr r2, _08026878 @ =0x00016068 - adds r1, r2 - adds r1, r0 - strb r5, [r1] - bl IsLinkDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08026850 - ldrb r0, [r4] - bl sub_8012258 -_08026850: - ldrb r0, [r4] - adds r1, r5, 0 - movs r2, 0 - bl sub_8094B6C - ldrb r1, [r4] - movs r0, 0x2 - eors r0, r1 - adds r1, r5, 0 - movs r2, 0x1 - bl sub_8094B6C - b _08026880 - .align 2, 0 -_0802686C: .4byte gBattlePartyID -_08026870: .4byte gBankTarget -_08026874: .4byte 0x02000000 -_08026878: .4byte 0x00016068 -_0802687C: - bl sub_80264C0 -_08026880: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8026590 - - thumb_func_start sub_802688C -sub_802688C: @ 802688C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r6, 0 - ldr r2, _08026920 @ =gBattleMons - ldr r3, _08026924 @ =gBankAttacker - ldrb r1, [r3] - movs r0, 0x58 - muls r0, r1 - adds r1, r2, 0 - adds r1, 0xC - adds r0, r1 - ldrh r0, [r0] - mov r8, r2 - cmp r0, 0 - beq _080268CE - movs r5, 0x58 - adds r2, r1, 0 -_080268B4: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bhi _080268CE - lsls r1, r6, 1 - ldrb r0, [r3] - muls r0, r5 - adds r1, r0 - adds r1, r2 - ldrh r0, [r1] - cmp r0, 0 - bne _080268B4 -_080268CE: - movs r3, 0 - cmp r3, r6 - bcs _08026950 - ldr r0, _08026928 @ =gBattleMoves - mov r10, r0 - ldr r5, _08026920 @ =gBattleMons - mov r12, r5 - ldr r7, _08026924 @ =gBankAttacker - ldrb r0, [r7] - movs r4, 0x58 - adds r5, r0, 0 - muls r5, r4 - movs r0, 0xC - add r0, r12 - mov r9, r0 -_080268EC: - lsls r0, r3, 1 - adds r0, r5 - add r0, r9 - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrb r2, [r0, 0x2] - cmp r2, 0x9 - bne _0802692E - mov r0, r8 - adds r1, r5, r0 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x7 - beq _0802691A - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x7 - bne _0802692C -_0802691A: - movs r2, 0x7 - b _0802692E - .align 2, 0 -_08026920: .4byte gBattleMons -_08026924: .4byte gBankAttacker -_08026928: .4byte gBattleMoves -_0802692C: - movs r2, 0 -_0802692E: - ldrb r0, [r7] - muls r0, r4 - add r0, r12 - adds r1, r0, 0 - adds r1, 0x21 - ldrb r1, [r1] - cmp r2, r1 - beq _08026946 - adds r0, 0x22 - ldrb r0, [r0] - cmp r2, r0 - bne _08026950 -_08026946: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, r6 - bcc _080268EC -_08026950: - cmp r3, r6 - bne _08026974 - ldr r3, _08026970 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08026A18 - .align 2, 0 -_08026970: .4byte gBattlescriptCurrInstr -_08026974: - movs r7, 0x3 - ldr r5, _080269CC @ =gBattleMoves - mov r9, r5 -_0802697A: - bl Random - adds r3, r0, 0 - ands r3, r7 - cmp r3, r6 - bcs _0802697A - ldr r4, _080269D0 @ =gBattleMons - lsls r1, r3, 1 - ldr r3, _080269D4 @ =gBankAttacker - ldrb r2, [r3] - movs r0, 0x58 - adds r5, r2, 0 - muls r5, r0 - adds r1, r5 - adds r0, r4, 0 - adds r0, 0xC - adds r1, r0 - ldrh r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - add r0, r9 - ldrb r2, [r0, 0x2] - mov r8, r4 - adds r4, r3, 0 - cmp r2, 0x9 - bne _080269DA - mov r0, r8 - adds r2, r5, r0 - adds r0, r2, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x7 - beq _080269C8 - adds r0, r2, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x7 - bne _080269D8 -_080269C8: - movs r2, 0x7 - b _080269DA - .align 2, 0 -_080269CC: .4byte gBattleMoves -_080269D0: .4byte gBattleMons -_080269D4: .4byte gBankAttacker -_080269D8: - movs r2, 0 -_080269DA: - ldrb r0, [r4] - movs r3, 0x58 - muls r0, r3 - add r0, r8 - adds r1, r0, 0 - adds r1, 0x21 - ldrb r5, [r1] - cmp r2, r5 - beq _0802697A - adds r0, 0x22 - ldrb r0, [r0] - cmp r2, r0 - beq _0802697A - strb r2, [r1] - ldrb r0, [r4] - muls r0, r3 - add r0, r8 - adds r0, 0x22 - strb r2, [r0] - ldr r1, _08026A28 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x3 - strb r0, [r1, 0x1] - strb r2, [r1, 0x2] - movs r0, 0xFF - strb r0, [r1, 0x3] - ldr r1, _08026A2C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08026A18: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08026A28: .4byte gBattleTextBuff1 -_08026A2C: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802688C - - thumb_func_start atk91_givemoney -atk91_givemoney: @ 8026A30 - push {r4,lr} - ldr r0, _08026A8C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08026AAC - ldr r4, _08026A90 @ =gPaydayMoney - ldrh r0, [r4] - cmp r0, 0 - beq _08026AAC - ldr r0, _08026A94 @ =gSaveBlock1 + 0x490 - ldrh r2, [r4] - ldr r1, _08026A98 @ =0x02000000 - ldr r3, _08026A9C @ =0x00016056 - adds r1, r3 - ldrb r1, [r1] - muls r1, r2 - bl sub_80B79B8 - ldr r1, _08026AA0 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x1 - strb r0, [r1, 0x1] - movs r0, 0x2 - strb r0, [r1, 0x2] - movs r0, 0x5 - strb r0, [r1, 0x3] - ldrh r2, [r4] - strb r2, [r1, 0x4] - movs r0, 0xFF - lsls r0, 8 - ands r0, r2 - lsrs r0, 8 - strb r0, [r1, 0x5] - movs r0, 0xFF - strb r0, [r1, 0x6] - ldr r4, _08026AA4 @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x1 - bl b_movescr_stack_push - ldr r0, _08026AA8 @ =gUnknown_081D95DB - str r0, [r4] - b _08026AB4 - .align 2, 0 -_08026A8C: .4byte gBattleTypeFlags -_08026A90: .4byte gPaydayMoney -_08026A94: .4byte gSaveBlock1 + 0x490 -_08026A98: .4byte 0x02000000 -_08026A9C: .4byte 0x00016056 -_08026AA0: .4byte gBattleTextBuff1 -_08026AA4: .4byte gBattlescriptCurrInstr -_08026AA8: .4byte gUnknown_081D95DB -_08026AAC: - ldr r1, _08026ABC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_08026AB4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08026ABC: .4byte gBattlescriptCurrInstr - thumb_func_end atk91_givemoney - - thumb_func_start atk92_setlightscreen -atk92_setlightscreen: @ 8026AC0 - push {r4-r6,lr} - ldr r4, _08026AF0 @ =gBankAttacker - ldrb r0, [r4] - bl GetBankIdentity - ldr r6, _08026AF4 @ =gSideAffecting - movs r5, 0x1 - adds r1, r5, 0 - ands r1, r0 - lsls r1, 1 - adds r1, r6 - ldrh r1, [r1] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08026B00 - ldr r2, _08026AF8 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08026AFC @ =gBattleCommunication - movs r0, 0 - b _08026B60 - .align 2, 0 -_08026AF0: .4byte gBankAttacker -_08026AF4: .4byte gSideAffecting -_08026AF8: .4byte gBattleMoveFlags -_08026AFC: .4byte gBattleCommunication -_08026B00: - ldrb r0, [r4] - bl GetBankIdentity - adds r1, r5, 0 - ands r1, r0 - lsls r1, 1 - adds r1, r6 - ldrh r0, [r1] - movs r2, 0x2 - orrs r0, r2 - strh r0, [r1] - ldrb r0, [r4] - bl GetBankIdentity - ldr r2, _08026B50 @ =gSideTimer - adds r1, r5, 0 - ands r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x5 - strb r1, [r0, 0x1] - ldr r0, _08026B54 @ =gBattleTypeFlags - ldrh r1, [r0] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _08026B5C - movs r0, 0x1 - bl CountAliveMons - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _08026B5C - ldr r1, _08026B58 @ =gBattleCommunication - movs r0, 0x4 - b _08026B60 - .align 2, 0 -_08026B50: .4byte gSideTimer -_08026B54: .4byte gBattleTypeFlags -_08026B58: .4byte gBattleCommunication -_08026B5C: - ldr r1, _08026B70 @ =gBattleCommunication - movs r0, 0x3 -_08026B60: - strb r0, [r1, 0x5] - ldr r1, _08026B74 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08026B70: .4byte gBattleCommunication -_08026B74: .4byte gBattlescriptCurrInstr - thumb_func_end atk92_setlightscreen - - thumb_func_start sub_8026B78 -sub_8026B78: @ 8026B78 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r7, _08026BA8 @ =gBattleMons - ldr r6, _08026BAC @ =gBankTarget - ldrb r2, [r6] - movs r5, 0x58 - adds r0, r2, 0 - muls r0, r5 - adds r1, r0, r7 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _08026BB4 - ldr r1, _08026BB0 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r4, [r0, 0x7] - ldrb r6, [r0, 0x1A] - b _08026BCE - .align 2, 0 -_08026BA8: .4byte gBattleMons -_08026BAC: .4byte gBankTarget -_08026BB0: .4byte gEnigmaBerries -_08026BB4: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r6] - muls r0, r5 - adds r0, r7 - ldrh r0, [r0, 0x2E] - bl ItemId_GetHoldEffectParam - lsls r0, 24 - lsrs r6, r0, 24 -_08026BCE: - ldr r1, _08026C4C @ =gStringBank - ldr r5, _08026C50 @ =gBankTarget - ldrb r0, [r5] - strb r0, [r1] - cmp r4, 0x27 - bne _08026C0C - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r6 - bcs _08026C0C - ldrb r0, [r5] - movs r1, 0x27 - bl RecordItemBattle - ldr r2, _08026C54 @ =gSpecialStatuses - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] -_08026C0C: - ldr r0, _08026C58 @ =gBattleMons - mov r8, r0 - ldr r1, _08026C50 @ =gBankTarget - ldrb r2, [r1] - movs r6, 0x58 - adds r0, r2, 0 - muls r0, r6 - mov r3, r8 - adds r5, r0, r3 - adds r0, r5, 0 - adds r0, 0x20 - ldrb r3, [r0] - mov r10, r8 - cmp r3, 0x5 - bne _08026C6C - ldr r2, _08026C5C @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r0, _08026C60 @ =gLastUsedAbility - strb r3, [r0] - ldr r1, _08026C64 @ =gBattlescriptCurrInstr - ldr r0, _08026C68 @ =gUnknown_081D9826 - str r0, [r1] - ldr r1, _08026C50 @ =gBankTarget - ldrb r0, [r1] - movs r1, 0x5 - bl RecordAbilityBattle - b _08026E40 - .align 2, 0 -_08026C4C: .4byte gStringBank -_08026C50: .4byte gBankTarget -_08026C54: .4byte gSpecialStatuses -_08026C58: .4byte gBattleMons -_08026C5C: .4byte gBattleMoveFlags -_08026C60: .4byte gLastUsedAbility -_08026C64: .4byte gBattlescriptCurrInstr -_08026C68: .4byte gUnknown_081D9826 -_08026C6C: - ldr r1, _08026CE0 @ =gStatuses3 - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x18 - ands r0, r1 - cmp r0, 0 - bne _08026CF4 - ldr r1, _08026CE4 @ =gBattleMoves - ldr r0, _08026CE8 @ =gCurrentMove - ldrh r0, [r0] - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - ldr r7, _08026CEC @ =gBankAttacker - ldrb r0, [r7] - muls r0, r6 - add r0, r10 - adds r0, 0x2A - ldrb r0, [r0] - adds r1, r5, 0 - adds r1, 0x2A - ldrb r1, [r1] - subs r0, r1 - ldrb r2, [r2, 0x3] - adds r0, r2 - lsls r0, 16 - lsrs r4, r0, 16 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - adds r0, 0x1 - cmp r0, r4 - bge _08026CDC - ldrb r0, [r7] - adds r1, r0, 0 - muls r1, r6 - add r1, r10 - adds r1, 0x2A - ldr r2, _08026CF0 @ =gBankTarget - ldrb r0, [r2] - muls r0, r6 - add r0, r10 - adds r0, 0x2A - ldrb r1, [r1] - movs r4, 0x1 - ldrb r0, [r0] - cmp r1, r0 - bcs _08026D20 -_08026CDC: - mov r10, r8 - b _08026DE0 - .align 2, 0 -_08026CE0: .4byte gStatuses3 -_08026CE4: .4byte gBattleMoves -_08026CE8: .4byte gCurrentMove -_08026CEC: .4byte gBankAttacker -_08026CF0: .4byte gBankTarget -_08026CF4: - ldr r0, _08026D4C @ =gDisableStructs - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldr r2, _08026D50 @ =gBankAttacker - ldrb r0, [r1, 0x15] - movs r4, 0 - ldrb r3, [r2] - cmp r0, r3 - bne _08026D20 - ldrb r0, [r2] - muls r0, r6 - add r0, r10 - adds r0, 0x2A - adds r1, r5, 0 - adds r1, 0x2A - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bcc _08026D20 - movs r4, 0x1 -_08026D20: - cmp r4, 0 - beq _08026DE0 - ldr r0, _08026D54 @ =gProtectStructs - ldr r1, _08026D58 @ =gBankTarget - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 30 - cmp r0, 0 - bge _08026D64 - ldr r1, _08026D5C @ =gBattleMoveDamage - movs r0, 0x58 - muls r0, r2 - add r0, r10 - ldrh r0, [r0, 0x28] - subs r0, 0x1 - str r0, [r1] - ldr r2, _08026D60 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x40 - b _08026DC6 - .align 2, 0 -_08026D4C: .4byte gDisableStructs -_08026D50: .4byte gBankAttacker -_08026D54: .4byte gProtectStructs -_08026D58: .4byte gBankTarget -_08026D5C: .4byte gBattleMoveDamage -_08026D60: .4byte gBattleMoveFlags -_08026D64: - ldr r0, _08026DA0 @ =gSpecialStatuses - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsrs r0, 7 - cmp r0, 0 - beq _08026DB4 - ldr r1, _08026DA4 @ =gBattleMoveDamage - movs r3, 0x58 - adds r0, r2, 0 - muls r0, r3 - add r0, r10 - ldrh r0, [r0, 0x28] - subs r0, 0x1 - str r0, [r1] - ldr r2, _08026DA8 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08026DAC @ =gLastUsedItem - ldr r2, _08026DB0 @ =gBankTarget - ldrb r0, [r2] - muls r0, r3 - add r0, r10 - ldrh r0, [r0, 0x2E] - strh r0, [r1] - b _08026DCA - .align 2, 0 -_08026DA0: .4byte gSpecialStatuses -_08026DA4: .4byte gBattleMoveDamage -_08026DA8: .4byte gBattleMoveFlags -_08026DAC: .4byte gLastUsedItem -_08026DB0: .4byte gBankTarget -_08026DB4: - ldr r1, _08026DD4 @ =gBattleMoveDamage - movs r0, 0x58 - muls r0, r2 - add r0, r10 - ldrh r0, [r0, 0x28] - str r0, [r1] - ldr r2, _08026DD8 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x10 -_08026DC6: - orrs r0, r1 - strb r0, [r2] -_08026DCA: - ldr r1, _08026DDC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08026E40 - .align 2, 0 -_08026DD4: .4byte gBattleMoveDamage -_08026DD8: .4byte gBattleMoveFlags -_08026DDC: .4byte gBattlescriptCurrInstr -_08026DE0: - ldr r2, _08026E10 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r0, _08026E14 @ =gBankAttacker - ldrb r0, [r0] - movs r2, 0x58 - adds r1, r0, 0 - muls r1, r2 - add r1, r10 - adds r1, 0x2A - ldr r3, _08026E18 @ =gBankTarget - ldrb r0, [r3] - muls r0, r2 - add r0, r10 - adds r0, 0x2A - ldrb r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bcc _08026E20 - ldr r1, _08026E1C @ =gBattleCommunication - movs r0, 0 - b _08026E24 - .align 2, 0 -_08026E10: .4byte gBattleMoveFlags -_08026E14: .4byte gBankAttacker -_08026E18: .4byte gBankTarget -_08026E1C: .4byte gBattleCommunication -_08026E20: - ldr r1, _08026E50 @ =gBattleCommunication - movs r0, 0x1 -_08026E24: - strb r0, [r1, 0x5] - ldr r3, _08026E54 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08026E40: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08026E50: .4byte gBattleCommunication -_08026E54: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8026B78 - - thumb_func_start atk94_gethalfcurrentenemyhp -atk94_gethalfcurrentenemyhp: @ 8026E58 - push {lr} - ldr r3, _08026E84 @ =gBattleMoveDamage - ldr r2, _08026E88 @ =gBattleMons - ldr r0, _08026E8C @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0, 0x28] - lsrs r0, 1 - str r0, [r3] - cmp r0, 0 - bne _08026E76 - movs r0, 0x1 - str r0, [r3] -_08026E76: - ldr r1, _08026E90 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08026E84: .4byte gBattleMoveDamage -_08026E88: .4byte gBattleMons -_08026E8C: .4byte gBankTarget -_08026E90: .4byte gBattlescriptCurrInstr - thumb_func_end atk94_gethalfcurrentenemyhp - - thumb_func_start sub_8026E94 -sub_8026E94: @ 8026E94 - push {lr} - ldr r2, _08026EB4 @ =gBattleWeather - ldrh r1, [r2] - movs r0, 0x18 - ands r0, r1 - cmp r0, 0 - beq _08026EC0 - ldr r2, _08026EB8 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08026EBC @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - b _08026ED2 - .align 2, 0 -_08026EB4: .4byte gBattleWeather -_08026EB8: .4byte gBattleMoveFlags -_08026EBC: .4byte gBattleCommunication -_08026EC0: - movs r0, 0x8 - strh r0, [r2] - ldr r1, _08026EE0 @ =gBattleCommunication - movs r0, 0x3 - strb r0, [r1, 0x5] - ldr r0, _08026EE4 @ =gWishFutureKnock - adds r0, 0x28 - movs r1, 0x5 - strb r1, [r0] -_08026ED2: - ldr r1, _08026EE8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08026EE0: .4byte gBattleCommunication -_08026EE4: .4byte gWishFutureKnock -_08026EE8: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8026E94 - - thumb_func_start sub_8026EEC -sub_8026EEC: @ 8026EEC - push {r4,r5,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0xD - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08026F0A - b _0802701C -_08026F0A: - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x4D - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _08026F20 - b _0802701C -_08026F20: - ldr r2, _08026F94 @ =gBattleWeather - ldrh r1, [r2] - movs r0, 0x18 - ands r0, r1 - adds r4, r2, 0 - ldr r5, _08026F98 @ =gBankAttacker - cmp r0, 0 - beq _08026FAE - ldr r0, _08026F9C @ =gBattleMons - ldrb r2, [r5] - movs r1, 0x58 - muls r1, r2 - adds r3, r1, r0 - adds r0, r3, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x5 - beq _08026FA8 - cmp r0, 0x8 - beq _08026FA8 - cmp r0, 0x4 - beq _08026FA8 - adds r0, r3, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x5 - beq _08026FA8 - cmp r0, 0x8 - beq _08026FA8 - cmp r0, 0x4 - beq _08026FA8 - adds r0, r3, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x8 - beq _08026FA8 - ldr r0, _08026FA0 @ =gStatuses3 - lsls r1, r2, 2 - adds r1, r0 - ldr r1, [r1] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08026FA8 - movs r0, 0x80 - lsls r0, 11 - ands r1, r0 - cmp r1, 0 - bne _08026FA8 - ldr r1, _08026FA4 @ =gBattleMoveDamage - ldrh r0, [r3, 0x2C] - lsrs r0, 4 - str r0, [r1] - cmp r0, 0 - bne _08026FAE - movs r0, 0x1 - b _08026FAC - .align 2, 0 -_08026F94: .4byte gBattleWeather -_08026F98: .4byte gBankAttacker -_08026F9C: .4byte gBattleMons -_08026FA0: .4byte gStatuses3 -_08026FA4: .4byte gBattleMoveDamage -_08026FA8: - ldr r1, _08027004 @ =gBattleMoveDamage - movs r0, 0 -_08026FAC: - str r0, [r1] -_08026FAE: - ldrh r1, [r4] - movs r4, 0x80 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08027024 - ldr r1, _08027008 @ =gBattleMons - ldrb r3, [r5] - movs r0, 0x58 - muls r0, r3 - adds r2, r0, r1 - adds r0, r2, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0xF - beq _08027010 - adds r0, r2, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0xF - beq _08027010 - ldr r0, _0802700C @ =gStatuses3 - lsls r1, r3, 2 - adds r1, r0 - ldr r1, [r1] - adds r0, r1, 0 - ands r0, r4 - cmp r0, 0 - bne _08027010 - movs r0, 0x80 - lsls r0, 11 - ands r1, r0 - cmp r1, 0 - bne _08027010 - ldr r1, _08027004 @ =gBattleMoveDamage - ldrh r0, [r2, 0x2C] - lsrs r0, 4 - str r0, [r1] - cmp r0, 0 - bne _08027024 - movs r0, 0x1 - str r0, [r1] - b _08027024 - .align 2, 0 -_08027004: .4byte gBattleMoveDamage -_08027008: .4byte gBattleMons -_0802700C: .4byte gStatuses3 -_08027010: - ldr r1, _08027018 @ =gBattleMoveDamage - movs r0, 0 - str r0, [r1] - b _08027024 - .align 2, 0 -_08027018: .4byte gBattleMoveDamage -_0802701C: - ldr r1, _08027050 @ =gBattleMoveDamage - movs r0, 0 - str r0, [r1] - ldr r5, _08027054 @ =gBankAttacker -_08027024: - ldr r0, _08027058 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _0802705C @ =gBitTable - ldrb r0, [r5] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0802703E - ldr r1, _08027050 @ =gBattleMoveDamage - movs r0, 0 - str r0, [r1] -_0802703E: - ldr r1, _08027060 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08027050: .4byte gBattleMoveDamage -_08027054: .4byte gBankAttacker -_08027058: .4byte gAbsentBankFlags -_0802705C: .4byte gBitTable -_08027060: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8026EEC - - thumb_func_start sub_8027064 -sub_8027064: @ 8027064 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, _08027090 @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0802709C - ldr r1, _08027094 @ =gBattlePartyID - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08027098 @ =gPlayerParty - b _080270AC - .align 2, 0 -_08027090: .4byte gBankAttacker -_08027094: .4byte gBattlePartyID -_08027098: .4byte gPlayerParty -_0802709C: - ldr r1, _080270D0 @ =gBattlePartyID - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _080270D4 @ =gEnemyParty -_080270AC: - adds r5, r1, r0 - ldr r4, _080270D8 @ =gBankTarget - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080270E0 - ldr r1, _080270D0 @ =gBattlePartyID - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _080270DC @ =gPlayerParty - b _080270F0 - .align 2, 0 -_080270D0: .4byte gBattlePartyID -_080270D4: .4byte gEnemyParty -_080270D8: .4byte gBankTarget -_080270DC: .4byte gPlayerParty -_080270E0: - ldr r1, _0802714C @ =gBattlePartyID - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08027150 @ =gEnemyParty -_080270F0: - adds r4, r1, r0 - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - adds r0, r5, 0 - movs r1, 0 - bl GetMonData - mov r9, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r7, r0, 0 - ldr r5, _08027154 @ =gBankTarget - ldrb r0, [r5] - movs r6, 0x58 - muls r0, r6 - ldr r1, _08027158 @ =gBattleMons - adds r0, r1 - adds r0, 0x20 - ldrb r2, [r0] - cmp r2, 0xC - bne _08027168 - ldr r1, _0802715C @ =gBattlescriptCurrInstr - ldr r0, _08027160 @ =gUnknown_081D98C9 - str r0, [r1] - ldr r0, _08027164 @ =gLastUsedAbility - strb r2, [r0] - ldrb r0, [r5] - movs r1, 0xC - bl RecordAbilityBattle - b _0802721C - .align 2, 0 -_0802714C: .4byte gBattlePartyID -_08027150: .4byte gEnemyParty -_08027154: .4byte gBankTarget -_08027158: .4byte gBattleMons -_0802715C: .4byte gBattlescriptCurrInstr -_08027160: .4byte gUnknown_081D98C9 -_08027164: .4byte gLastUsedAbility -_08027168: - mov r0, r10 - mov r1, r9 - bl GetGenderFromSpeciesAndPersonality - adds r4, r0, 0 - mov r0, r8 - adds r1, r7, 0 - bl GetGenderFromSpeciesAndPersonality - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _080271CA - ldr r1, _080271E8 @ =gStatuses3 - ldrb r2, [r5] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080271EC @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _080271CA - adds r0, r2, 0 - muls r0, r6 - ldr r4, _080271F0 @ =gBattleMons - adds r4, 0x50 - adds r0, r4 - ldr r0, [r0] - movs r1, 0xF0 - lsls r1, 12 - ands r0, r1 - cmp r0, 0 - bne _080271CA - mov r0, r10 - mov r1, r9 - bl GetGenderFromSpeciesAndPersonality - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _080271CA - mov r0, r8 - adds r1, r7, 0 - bl GetGenderFromSpeciesAndPersonality - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _080271F8 -_080271CA: - ldr r3, _080271F4 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802721C - .align 2, 0 -_080271E8: .4byte gStatuses3 -_080271EC: .4byte 0x000400c0 -_080271F0: .4byte gBattleMons -_080271F4: .4byte gBattlescriptCurrInstr -_080271F8: - ldrb r0, [r5] - adds r2, r0, 0 - muls r2, r6 - adds r2, r4 - ldr r1, _0802722C @ =gBitTable - ldr r0, _08027230 @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - lsls r1, 16 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - ldr r1, _08027234 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802721C: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802722C: .4byte gBitTable -_08027230: .4byte gBankAttacker -_08027234: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8027064 - - thumb_func_start sub_8027238 -sub_8027238: @ 8027238 - push {r4-r7,lr} - ldr r0, _08027280 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _08027324 - ldr r5, _08027284 @ =gBattlescriptCurrInstr - ldr r1, [r5] - ldrb r0, [r1, 0x1] - cmp r0, 0x4 - beq _08027290 - bl sub_8015150 - ldr r4, _08027288 @ =gActiveBank - strb r0, [r4] - ldr r3, _0802728C @ =gBattleMons - ldrb r1, [r4] - movs r0, 0x58 - adds r2, r1, 0 - muls r2, r0 - adds r0, r3, 0 - adds r0, 0x4C - adds r0, r2, r0 - ldr r1, [r0] - adds r3, 0x50 - adds r2, r3 - ldr r2, [r2] - movs r0, 0 - bl EmitStatusIconUpdate - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - b _08027324 - .align 2, 0 -_08027280: .4byte gBattleExecBuffer -_08027284: .4byte gBattlescriptCurrInstr -_08027288: .4byte gActiveBank -_0802728C: .4byte gBattleMons -_08027290: - ldr r4, _0802732C @ =gActiveBank - ldr r5, _08027330 @ =gBankAttacker - ldrb r0, [r5] - strb r0, [r4] - ldr r6, _08027334 @ =gAbsentBankFlags - ldrb r1, [r6] - ldr r7, _08027338 @ =gBitTable - ldrb r2, [r4] - lsls r0, r2, 2 - adds r0, r7 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _080272CC - ldr r3, _0802733C @ =gBattleMons - movs r0, 0x58 - muls r2, r0 - adds r0, r3, 0 - adds r0, 0x4C - adds r0, r2, r0 - ldr r1, [r0] - adds r3, 0x50 - adds r2, r3 - ldr r2, [r2] - movs r0, 0 - bl EmitStatusIconUpdate - ldrb r0, [r4] - bl MarkBufferBankForExecution -_080272CC: - ldr r0, _08027340 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0802731C - ldrb r0, [r5] - bl GetBankIdentity - movs r1, 0x2 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByPlayerAI - strb r0, [r4] - ldrb r1, [r6] - ldrb r2, [r4] - lsls r0, r2, 2 - adds r0, r7 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _0802731C - ldr r3, _0802733C @ =gBattleMons - movs r0, 0x58 - muls r2, r0 - adds r0, r3, 0 - adds r0, 0x4C - adds r0, r2, r0 - ldr r1, [r0] - adds r3, 0x50 - adds r2, r3 - ldr r2, [r2] - movs r0, 0 - bl EmitStatusIconUpdate - ldrb r0, [r4] - bl MarkBufferBankForExecution -_0802731C: - ldr r1, _08027344 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_08027324: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802732C: .4byte gActiveBank -_08027330: .4byte gBankAttacker -_08027334: .4byte gAbsentBankFlags -_08027338: .4byte gBitTable -_0802733C: .4byte gBattleMons -_08027340: .4byte gBattleTypeFlags -_08027344: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8027238 - - thumb_func_start sub_8027348 -sub_8027348: @ 8027348 - push {r4-r6,lr} - ldr r6, _08027378 @ =gSideTimer - ldr r4, _0802737C @ =gBankAttacker - ldrb r0, [r4] - bl GetBankIdentity - movs r5, 0x1 - adds r1, r5, 0 - ands r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r0, [r0, 0x2] - cmp r0, 0 - beq _08027388 - ldr r2, _08027380 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r2] - ldr r0, _08027384 @ =gBattleCommunication - strb r5, [r0, 0x5] - b _080273C0 - .align 2, 0 -_08027378: .4byte gSideTimer -_0802737C: .4byte gBankAttacker -_08027380: .4byte gBattleMoveFlags -_08027384: .4byte gBattleCommunication -_08027388: - ldrb r0, [r4] - bl GetBankIdentity - adds r1, r5, 0 - ands r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - movs r1, 0x5 - strb r1, [r0, 0x2] - ldrb r0, [r4] - bl GetBankIdentity - ldr r2, _080273D0 @ =gSideAffecting - adds r1, r5, 0 - ands r1, r0 - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r3, 0x80 - lsls r3, 1 - adds r0, r3, 0 - movs r3, 0 - orrs r0, r2 - strh r0, [r1] - ldr r0, _080273D4 @ =gBattleCommunication - strb r3, [r0, 0x5] -_080273C0: - ldr r1, _080273D8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080273D0: .4byte gSideAffecting -_080273D4: .4byte gBattleCommunication -_080273D8: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8027348 - - thumb_func_start atk9A_setincreasedcriticalchance -atk9A_setincreasedcriticalchance: @ 80273DC - push {lr} - ldr r1, _0802740C @ =gBattleMons - ldr r0, _08027410 @ =gBankAttacker - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r1, [r0] - movs r3, 0x80 - lsls r3, 13 - adds r2, r1, 0 - ands r2, r3 - cmp r2, 0 - beq _0802741C - ldr r2, _08027414 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08027418 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - b _08027424 - .align 2, 0 -_0802740C: .4byte gBattleMons -_08027410: .4byte gBankAttacker -_08027414: .4byte gBattleMoveFlags -_08027418: .4byte gBattleCommunication -_0802741C: - orrs r1, r3 - str r1, [r0] - ldr r0, _08027430 @ =gBattleCommunication - strb r2, [r0, 0x5] -_08027424: - ldr r1, _08027434 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08027430: .4byte gBattleCommunication -_08027434: .4byte gBattlescriptCurrInstr - thumb_func_end atk9A_setincreasedcriticalchance - - thumb_func_start atk9B_transformdataexecution -atk9B_transformdataexecution: @ 8027438 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r1, _08027490 @ =gUnknown_02024BE8 - ldr r2, _08027494 @ =0x0000ffff - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08027498 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - ldr r7, _0802749C @ =gBattleMons - ldr r0, _080274A0 @ =gBankTarget - mov r12, r0 - ldrb r1, [r0] - movs r6, 0x58 - adds r0, r1, 0 - muls r0, r6 - adds r5, r7, 0 - adds r5, 0x50 - adds r0, r5 - ldr r0, [r0] - movs r4, 0x80 - lsls r4, 14 - ands r0, r4 - cmp r0, 0 - bne _0802747E - ldr r0, _080274A4 @ =gStatuses3 - lsls r1, 2 - adds r1, r0 - ldr r2, [r1] - ldr r0, _080274A8 @ =0x000400c0 - ands r2, r0 - cmp r2, 0 - beq _080274B4 -_0802747E: - ldr r2, _080274AC @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r2] - ldr r1, _080274B0 @ =gBattleCommunication - movs r0, 0x1 - b _080275C8 - .align 2, 0 -_08027490: .4byte gUnknown_02024BE8 -_08027494: .4byte 0x0000ffff -_08027498: .4byte gBattlescriptCurrInstr -_0802749C: .4byte gBattleMons -_080274A0: .4byte gBankTarget -_080274A4: .4byte gStatuses3 -_080274A8: .4byte 0x000400c0 -_080274AC: .4byte gBattleMoveFlags -_080274B0: .4byte gBattleCommunication -_080274B4: - ldr r3, _08027588 @ =gBankAttacker - ldrb r0, [r3] - adds r1, r0, 0 - muls r1, r6 - adds r1, r5 - ldr r0, [r1] - orrs r0, r4 - str r0, [r1] - ldr r4, _0802758C @ =gDisableStructs - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r4 - strh r2, [r0, 0x4] - ldrb r0, [r3] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1, 0xB] - movs r0, 0x10 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0xB] - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r4 - mov r2, r12 - ldrb r1, [r2] - muls r1, r6 - adds r2, r7, 0 - adds r2, 0x48 - adds r1, r2 - ldr r1, [r1] - str r1, [r0] - ldrb r0, [r3] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1, 0x18] - movs r0, 0xF - ands r0, r2 - strb r0, [r1, 0x18] - ldr r1, _08027590 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x6 - strb r0, [r1, 0x1] - mov r2, r12 - ldrb r0, [r2] - muls r0, r6 - adds r0, r7 - ldrh r0, [r0] - strb r0, [r1, 0x2] - ldrb r0, [r2] - muls r0, r6 - adds r0, r7 - ldrh r0, [r0] - lsrs r0, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldrb r0, [r3] - muls r0, r6 - adds r5, r0, r7 - ldrb r0, [r2] - muls r0, r6 - adds r2, r0, r7 - movs r4, 0 - adds r6, r3, 0 - ldr r0, _08027594 @ =gActiveBank - mov r8, r0 -_0802754C: - adds r0, r5, r4 - adds r1, r2, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r4, 0x1 - cmp r4, 0x23 - bls _0802754C - movs r4, 0 - ldr r7, _08027598 @ =gBattleMoves - ldr r3, _0802759C @ =gUnknown_02024A8C - adds r5, r3, 0 - adds r5, 0x18 -_08027564: - lsls r1, r4, 1 - ldrb r2, [r6] - movs r0, 0x58 - muls r2, r0 - adds r1, r2 - adds r1, r3 - ldrh r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - ldrb r1, [r0, 0x4] - cmp r1, 0x4 - bhi _080275A0 - adds r0, r4, r2 - adds r0, r5 - b _080275A6 - .align 2, 0 -_08027588: .4byte gBankAttacker -_0802758C: .4byte gDisableStructs -_08027590: .4byte gBattleTextBuff1 -_08027594: .4byte gActiveBank -_08027598: .4byte gBattleMoves -_0802759C: .4byte gUnknown_02024A8C -_080275A0: - adds r0, r4, r2 - adds r0, r5 - movs r1, 0x5 -_080275A6: - strb r1, [r0] - adds r4, 0x1 - cmp r4, 0x3 - ble _08027564 - ldrb r0, [r6] - mov r1, r8 - strb r0, [r1] - movs r0, 0 - movs r1, 0x2 - bl EmitResetActionMoveSelection - mov r2, r8 - ldrb r0, [r2] - bl MarkBufferBankForExecution - ldr r1, _080275D4 @ =gBattleCommunication - movs r0, 0 -_080275C8: - strb r0, [r1, 0x5] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080275D4: .4byte gBattleCommunication - thumb_func_end atk9B_transformdataexecution - - thumb_func_start sub_80275D8 -sub_80275D8: @ 80275D8 - push {r4-r7,lr} - ldr r7, _08027608 @ =gBattleMons - ldr r6, _0802760C @ =gBankAttacker - ldrb r0, [r6] - movs r5, 0x58 - muls r0, r5 - adds r3, r0, r7 - ldrh r0, [r3, 0x2C] - lsrs r1, r0, 2 - adds r2, r1, 0 - cmp r1, 0 - bne _080275F2 - movs r2, 0x1 -_080275F2: - ldrh r0, [r3, 0x28] - cmp r0, r2 - bhi _08027618 - ldr r1, _08027610 @ =gBattleMoveDamage - movs r0, 0 - str r0, [r1] - ldr r1, _08027614 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - b _0802766C - .align 2, 0 -_08027608: .4byte gBattleMons -_0802760C: .4byte gBankAttacker -_08027610: .4byte gBattleMoveDamage -_08027614: .4byte gBattleCommunication -_08027618: - ldr r4, _0802767C @ =gBattleMoveDamage - str r1, [r4] - cmp r1, 0 - bne _08027624 - movs r0, 0x1 - str r0, [r4] -_08027624: - ldrb r0, [r6] - adds r2, r0, 0 - muls r2, r5 - adds r3, r7, 0 - adds r3, 0x50 - adds r2, r3 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 17 - orrs r0, r1 - str r0, [r2] - ldrb r0, [r6] - adds r1, r0, 0 - muls r1, r5 - adds r1, r3 - ldr r0, [r1] - ldr r2, _08027680 @ =0xffff1fff - ands r0, r2 - str r0, [r1] - ldr r2, _08027684 @ =gDisableStructs - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, [r4] - movs r2, 0 - strb r1, [r0, 0xA] - ldr r0, _08027688 @ =gBattleCommunication - strb r2, [r0, 0x5] - ldr r2, _0802768C @ =gHitMarker - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 1 - orrs r0, r1 - str r0, [r2] -_0802766C: - ldr r1, _08027690 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802767C: .4byte gBattleMoveDamage -_08027680: .4byte 0xffff1fff -_08027684: .4byte gDisableStructs -_08027688: .4byte gBattleCommunication -_0802768C: .4byte gHitMarker -_08027690: .4byte gBattlescriptCurrInstr - thumb_func_end sub_80275D8 - - thumb_func_start sub_8027694 -sub_8027694: @ 8027694 - push {r4,r5,lr} - lsls r0, 16 - lsrs r2, r0, 16 - movs r3, 0 - ldr r0, _080276D4 @ =gUnknown_081FACFE - ldrh r1, [r0] - ldr r4, _080276D8 @ =0x0000fffe - adds r5, r0, 0 - cmp r1, r4 - beq _080276BC - cmp r1, r2 - beq _080276BC - adds r1, r5, 0 -_080276AE: - adds r1, 0x2 - adds r3, 0x1 - ldrh r0, [r1] - cmp r0, r4 - beq _080276BC - cmp r0, r2 - bne _080276AE -_080276BC: - lsls r0, r3, 1 - adds r0, r5 - ldrh r1, [r0] - ldr r0, _080276D8 @ =0x0000fffe - eors r1, r0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080276D4: .4byte gUnknown_081FACFE -_080276D8: .4byte 0x0000fffe - thumb_func_end sub_8027694 - - thumb_func_start atk9D_copyattack -atk9D_copyattack: @ 80276DC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _08027754 @ =gUnknown_02024BE8 - ldr r1, _08027758 @ =0x0000ffff - adds r7, r1, 0 - strh r7, [r0] - ldr r5, _0802775C @ =gLastUsedMove - ldr r6, _08027760 @ =gBankTarget - ldrb r0, [r6] - lsls r0, 1 - adds r0, r5 - ldrh r0, [r0] - bl sub_8027694 - lsls r0, 24 - cmp r0, 0 - bne _08027736 - ldr r3, _08027764 @ =gBattleMons - ldr r2, _08027768 @ =gBankAttacker - ldrb r1, [r2] - movs r0, 0x58 - adds r4, r1, 0 - muls r4, r0 - adds r0, r3, 0 - adds r0, 0x50 - adds r0, r4, r0 - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 14 - ands r1, r0 - mov r12, r3 - mov r9, r2 - cmp r1, 0 - bne _08027736 - ldrb r0, [r6] - lsls r0, 1 - adds r0, r5 - ldrh r1, [r0] - cmp r1, 0 - beq _08027736 - cmp r1, r7 - bne _08027770 -_08027736: - ldr r3, _0802776C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _080278A8 - .align 2, 0 -_08027754: .4byte gUnknown_02024BE8 -_08027758: .4byte 0x0000ffff -_0802775C: .4byte gLastUsedMove -_08027760: .4byte gBankTarget -_08027764: .4byte gBattleMons -_08027768: .4byte gBankAttacker -_0802776C: .4byte gBattlescriptCurrInstr -_08027770: - movs r2, 0 - mov r3, r12 - adds r3, 0xC - adds r0, r4, r3 - ldrh r0, [r0] - ldr r4, _08027800 @ =gBattlescriptCurrInstr - mov r10, r4 - cmp r0, r1 - beq _080277AA - mov r8, r3 - adds r7, r5, 0 - adds r5, r6, 0 - mov r4, r9 - movs r3, 0x58 -_0802778C: - adds r2, 0x1 - cmp r2, 0x3 - bgt _080277AA - lsls r1, r2, 1 - ldrb r0, [r4] - muls r0, r3 - adds r1, r0 - add r1, r8 - ldrb r0, [r5] - lsls r0, 1 - adds r0, r7 - ldrh r1, [r1] - ldrh r0, [r0] - cmp r1, r0 - bne _0802778C -_080277AA: - cmp r2, 0x4 - bne _0802788C - ldr r5, _08027804 @ =gCurrMovePos - ldrb r1, [r5] - lsls r1, 1 - mov r2, r9 - ldrb r0, [r2] - movs r6, 0x58 - muls r0, r6 - adds r1, r0 - mov r0, r12 - adds r0, 0xC - adds r1, r0 - ldr r2, _08027808 @ =gLastUsedMove - ldr r3, _0802780C @ =gBankTarget - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - ldr r4, _08027810 @ =gBattleMoves - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r4, [r0, 0x4] - cmp r4, 0x4 - bhi _08027814 - mov r1, r9 - ldrb r0, [r1] - muls r0, r6 - ldrb r1, [r5] - adds r0, r1 - mov r1, r12 - adds r1, 0x24 - adds r0, r1 - strb r4, [r0] - b _08027828 - .align 2, 0 -_08027800: .4byte gBattlescriptCurrInstr -_08027804: .4byte gCurrMovePos -_08027808: .4byte gLastUsedMove -_0802780C: .4byte gBankTarget -_08027810: .4byte gBattleMoves -_08027814: - mov r4, r9 - ldrb r0, [r4] - muls r0, r6 - ldrb r1, [r5] - adds r0, r1 - mov r1, r12 - adds r1, 0x24 - adds r0, r1 - movs r1, 0x5 - strb r1, [r0] -_08027828: - ldr r1, _08027880 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1, 0x2] - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - lsrs r0, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _08027884 @ =gDisableStructs - mov r2, r9 - ldrb r0, [r2] - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 2 - adds r2, r1 - ldrb r4, [r2, 0x18] - lsrs r3, r4, 4 - ldr r1, _08027888 @ =gBitTable - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - orrs r1, r3 - lsls r1, 4 - movs r0, 0xF - ands r0, r4 - orrs r0, r1 - strb r0, [r2, 0x18] - mov r4, r10 - ldr r0, [r4] - adds r0, 0x5 - str r0, [r4] - b _080278A8 - .align 2, 0 -_08027880: .4byte gBattleTextBuff1 -_08027884: .4byte gDisableStructs -_08027888: .4byte gBitTable -_0802788C: - mov r0, r10 - ldr r2, [r0] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - mov r2, r10 - str r1, [r2] -_080278A8: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk9D_copyattack - - thumb_func_start sub_80278B8 -sub_80278B8: @ 80278B8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r7, _08027938 @ =gCurrentMove - movs r6, 0xB1 - lsls r6, 1 - ldr r5, _0802793C @ =gUnknown_081FACFE - ldr r0, _08027940 @ =gBattlescriptCurrInstr - mov r8, r0 -_080278CA: - bl Random - ldr r2, _08027944 @ =0x000001ff - adds r1, r2, 0 - ands r0, r1 - adds r0, 0x1 - strh r0, [r7] - cmp r0, r6 - bhi _080278CA - movs r0, 0x3 -_080278DE: - subs r0, 0x1 - cmp r0, 0 - bge _080278DE - ldr r4, _08027938 @ =gCurrentMove - ldrh r2, [r4] - ldr r3, _08027948 @ =0x0000ffff - subs r0, r5, 0x2 -_080278EC: - adds r0, 0x2 - ldrh r1, [r0] - cmp r1, r2 - beq _080278F8 - cmp r1, r3 - bne _080278EC -_080278F8: - ldr r0, _08027948 @ =0x0000ffff - cmp r1, r0 - bne _080278CA - ldr r2, _0802794C @ =gHitMarker - ldr r0, [r2] - ldr r1, _08027950 @ =0xfffffbff - ands r0, r1 - str r0, [r2] - ldr r3, _08027954 @ =gUnknown_081D6BBC - ldr r2, _08027958 @ =gBattleMoves - ldrh r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - mov r1, r8 - str r0, [r1] - ldrh r0, [r4] - movs r1, 0 - bl sub_801B5C0 - ldr r1, _0802795C @ =gBankTarget - strb r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08027938: .4byte gCurrentMove -_0802793C: .4byte gUnknown_081FACFE -_08027940: .4byte gBattlescriptCurrInstr -_08027944: .4byte 0x000001ff -_08027948: .4byte 0x0000ffff -_0802794C: .4byte gHitMarker -_08027950: .4byte 0xfffffbff -_08027954: .4byte gUnknown_081D6BBC -_08027958: .4byte gBattleMoves -_0802795C: .4byte gBankTarget - thumb_func_end sub_80278B8 - - thumb_func_start sub_8027960 -sub_8027960: @ 8027960 - ldr r3, _08027980 @ =gBattleMoveDamage - ldr r2, _08027984 @ =gBattleMons - ldr r0, _08027988 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x2A - ldrb r0, [r0] - str r0, [r3] - ldr r1, _0802798C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08027980: .4byte gBattleMoveDamage -_08027984: .4byte gBattleMons -_08027988: .4byte gBankAttacker -_0802798C: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8027960 - - thumb_func_start atkA0_psywavedamageeffect -atkA0_psywavedamageeffect: @ 8027990 - push {r4,lr} - movs r4, 0xF -_08027994: - bl Random - adds r3, r4, 0 - ands r3, r0 - cmp r3, 0xA - bgt _08027994 - lsls r0, r3, 2 - adds r0, r3 - lsls r3, r0, 1 - ldr r4, _080279D4 @ =gBattleMoveDamage - ldr r2, _080279D8 @ =gBattleMons - ldr r0, _080279DC @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x2A - ldrb r1, [r0] - adds r0, r3, 0 - adds r0, 0x32 - muls r0, r1 - movs r1, 0x64 - bl __divsi3 - str r0, [r4] - ldr r1, _080279E0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080279D4: .4byte gBattleMoveDamage -_080279D8: .4byte gBattleMons -_080279DC: .4byte gBankAttacker -_080279E0: .4byte gBattlescriptCurrInstr - thumb_func_end atkA0_psywavedamageeffect - - thumb_func_start atkA1_counterdamagecalculator -atkA1_counterdamagecalculator: @ 80279E4 - push {r4-r6,lr} - ldr r4, _08027A54 @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r6, r0, 24 - ldr r5, _08027A58 @ =gProtectStructs - ldrb r0, [r4] - lsls r0, 4 - adds r0, r5 - ldrb r0, [r0, 0xC] - bl GetBankSide - lsls r0, 24 - lsrs r2, r0, 24 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r0, r5, 0x4 - adds r0, r1, r0 - ldr r3, [r0] - cmp r3, 0 - beq _08027A98 - cmp r6, r2 - beq _08027A98 - ldr r6, _08027A5C @ =gBattleMons - adds r0, r1, r5 - ldrb r0, [r0, 0xC] - movs r4, 0x58 - muls r0, r4 - adds r0, r6 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _08027A98 - ldr r1, _08027A60 @ =gBattleMoveDamage - lsls r0, r3, 1 - str r0, [r1] - ldr r1, _08027A64 @ =gSideTimer - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, r0, r1 - ldrb r0, [r1, 0x8] - cmp r0, 0 - beq _08027A6C - ldrb r1, [r1, 0x9] - adds r0, r1, 0 - muls r0, r4 - adds r0, r6 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _08027A6C - ldr r0, _08027A68 @ =gBankTarget - strb r1, [r0] - b _08027A7C - .align 2, 0 -_08027A54: .4byte gBankAttacker -_08027A58: .4byte gProtectStructs -_08027A5C: .4byte gBattleMons -_08027A60: .4byte gBattleMoveDamage -_08027A64: .4byte gSideTimer -_08027A68: .4byte gBankTarget -_08027A6C: - ldr r2, _08027A88 @ =gBankTarget - ldr r1, _08027A8C @ =gProtectStructs - ldr r0, _08027A90 @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0, 0xC] - strb r0, [r2] -_08027A7C: - ldr r1, _08027A94 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08027AC8 - .align 2, 0 -_08027A88: .4byte gBankTarget -_08027A8C: .4byte gProtectStructs -_08027A90: .4byte gBankAttacker -_08027A94: .4byte gBattlescriptCurrInstr -_08027A98: - ldr r2, _08027AD0 @ =gSpecialStatuses - ldr r0, _08027AD4 @ =gBankAttacker - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0] - ldr r3, _08027AD8 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08027AC8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08027AD0: .4byte gSpecialStatuses -_08027AD4: .4byte gBankAttacker -_08027AD8: .4byte gBattlescriptCurrInstr - thumb_func_end atkA1_counterdamagecalculator - - thumb_func_start atkA2_mirrorcoatdamagecalculator -atkA2_mirrorcoatdamagecalculator: @ 8027ADC - push {r4-r6,lr} - ldr r4, _08027B4C @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r6, r0, 24 - ldr r5, _08027B50 @ =gProtectStructs - ldrb r0, [r4] - lsls r0, 4 - adds r0, r5 - ldrb r0, [r0, 0xD] - bl GetBankSide - lsls r0, 24 - lsrs r2, r0, 24 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r0, r5, 0 - adds r0, 0x8 - adds r0, r1, r0 - ldr r3, [r0] - cmp r3, 0 - beq _08027B90 - cmp r6, r2 - beq _08027B90 - ldr r6, _08027B54 @ =gBattleMons - adds r0, r1, r5 - ldrb r0, [r0, 0xD] - movs r4, 0x58 - muls r0, r4 - adds r0, r6 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _08027B90 - ldr r1, _08027B58 @ =gBattleMoveDamage - lsls r0, r3, 1 - str r0, [r1] - ldr r1, _08027B5C @ =gSideTimer - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, r0, r1 - ldrb r0, [r1, 0x8] - cmp r0, 0 - beq _08027B64 - ldrb r1, [r1, 0x9] - adds r0, r1, 0 - muls r0, r4 - adds r0, r6 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _08027B64 - ldr r0, _08027B60 @ =gBankTarget - strb r1, [r0] - b _08027B74 - .align 2, 0 -_08027B4C: .4byte gBankAttacker -_08027B50: .4byte gProtectStructs -_08027B54: .4byte gBattleMons -_08027B58: .4byte gBattleMoveDamage -_08027B5C: .4byte gSideTimer -_08027B60: .4byte gBankTarget -_08027B64: - ldr r2, _08027B80 @ =gBankTarget - ldr r1, _08027B84 @ =gProtectStructs - ldr r0, _08027B88 @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0, 0xD] - strb r0, [r2] -_08027B74: - ldr r1, _08027B8C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08027BC0 - .align 2, 0 -_08027B80: .4byte gBankTarget -_08027B84: .4byte gProtectStructs -_08027B88: .4byte gBankAttacker -_08027B8C: .4byte gBattlescriptCurrInstr -_08027B90: - ldr r2, _08027BC8 @ =gSpecialStatuses - ldr r0, _08027BCC @ =gBankAttacker - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0] - ldr r3, _08027BD0 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08027BC0: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08027BC8: .4byte gSpecialStatuses -_08027BCC: .4byte gBankAttacker -_08027BD0: .4byte gBattlescriptCurrInstr - thumb_func_end atkA2_mirrorcoatdamagecalculator - - thumb_func_start atkA3_disablelastusedattack -atkA3_disablelastusedattack: @ 8027BD4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r4, 0 - ldr r2, _08027CD4 @ =gBattleMons - ldr r3, _08027CD8 @ =gBankTarget - ldrb r1, [r3] - movs r0, 0x58 - muls r0, r1 - adds r7, r2, 0 - adds r7, 0xC - adds r0, r7 - ldr r5, _08027CDC @ =gLastUsedMove - lsls r1, 1 - adds r1, r5 - ldrh r0, [r0] - mov r9, r2 - adds r6, r3, 0 - ldr r2, _08027CE0 @ =gDisableStructs - mov r8, r2 - ldrh r1, [r1] - cmp r0, r1 - beq _08027C28 - mov r12, r6 - movs r3, 0x58 -_08027C08: - adds r4, 0x1 - cmp r4, 0x3 - bgt _08027C28 - lsls r2, r4, 1 - mov r0, r12 - ldrb r1, [r0] - adds r0, r1, 0 - muls r0, r3 - adds r2, r0 - adds r2, r7 - lsls r1, 1 - adds r1, r5 - ldrh r0, [r2] - ldrh r1, [r1] - cmp r0, r1 - bne _08027C08 -_08027C28: - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r8 - ldrh r0, [r0, 0x4] - cmp r0, 0 - bne _08027CEC - cmp r4, 0x4 - beq _08027CEC - movs r5, 0x58 - adds r0, r1, 0 - muls r0, r5 - adds r0, r4, r0 - mov r1, r9 - adds r1, 0x24 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08027CEC - ldr r1, _08027CE4 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - lsls r2, r4, 1 - ldrb r0, [r6] - muls r0, r5 - adds r0, r2, r0 - mov r3, r9 - adds r3, 0xC - adds r0, r3 - ldrh r0, [r0] - strb r0, [r1, 0x2] - ldrb r0, [r6] - muls r0, r5 - adds r0, r2, r0 - adds r0, r3 - ldrh r0, [r0] - lsrs r0, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r8 - muls r1, r5 - adds r2, r1 - adds r2, r3 - ldrh r1, [r2] - strh r1, [r0, 0x4] - bl Random - ldrb r2, [r6] - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - add r1, r8 - movs r2, 0x3 - ands r2, r0 - adds r2, 0x2 - ldrb r3, [r1, 0xB] - movs r0, 0x10 - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0xB] - ldrb r0, [r6] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - add r1, r8 - ldrb r3, [r1, 0xB] - lsls r2, r3, 28 - lsrs r2, 24 - movs r0, 0xF - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0xB] - ldr r1, _08027CE8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08027D06 - .align 2, 0 -_08027CD4: .4byte gBattleMons -_08027CD8: .4byte gBankTarget -_08027CDC: .4byte gLastUsedMove -_08027CE0: .4byte gDisableStructs -_08027CE4: .4byte gBattleTextBuff1 -_08027CE8: .4byte gBattlescriptCurrInstr -_08027CEC: - ldr r3, _08027D14 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08027D06: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08027D14: .4byte gBattlescriptCurrInstr - thumb_func_end atkA3_disablelastusedattack - - thumb_func_start atkA4_setencore -atkA4_setencore: @ 8027D18 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r5, 0 - ldr r3, _08027E0C @ =gBattleMons - ldr r4, _08027E10 @ =gBankTarget - ldrb r1, [r4] - movs r0, 0x58 - muls r0, r1 - adds r6, r3, 0 - adds r6, 0xC - adds r0, r6 - ldr r2, _08027E14 @ =gLastUsedMove - lsls r1, 1 - adds r1, r2 - ldrh r0, [r0] - mov r10, r3 - mov r8, r2 - ldr r2, _08027E18 @ =gDisableStructs - mov r9, r2 - ldrh r1, [r1] - cmp r0, r1 - beq _08027D72 - mov r12, r4 - adds r7, r6, 0 - mov r6, r8 - movs r3, 0x58 -_08027D52: - adds r5, 0x1 - cmp r5, 0x3 - bgt _08027D72 - lsls r2, r5, 1 - mov r0, r12 - ldrb r1, [r0] - adds r0, r1, 0 - muls r0, r3 - adds r2, r0 - adds r2, r7 - lsls r1, 1 - adds r1, r6 - ldrh r0, [r2] - ldrh r1, [r1] - cmp r0, r1 - bne _08027D52 -_08027D72: - ldrb r0, [r4] - lsls r0, 1 - add r0, r8 - ldrh r2, [r0] - cmp r2, 0xA5 - beq _08027D86 - cmp r2, 0xE3 - beq _08027D86 - cmp r2, 0x77 - bne _08027D88 -_08027D86: - movs r5, 0x4 -_08027D88: - ldrb r1, [r4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - mov r2, r9 - adds r3, r0, r2 - ldrh r0, [r3, 0x6] - cmp r0, 0 - bne _08027E20 - cmp r5, 0x4 - beq _08027E20 - movs r0, 0x58 - adds r2, r1, 0 - muls r2, r0 - adds r0, r5, r2 - mov r1, r10 - adds r1, 0x24 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08027E20 - lsls r0, r5, 1 - adds r0, r2 - subs r1, 0x18 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r3, 0x6] - ldrb r1, [r4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - strb r5, [r0, 0xC] - bl Random - ldrb r2, [r4] - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - add r1, r9 - movs r2, 0x3 - ands r2, r0 - adds r2, 0x3 - ldrb r3, [r1, 0xE] - movs r0, 0x10 - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0xE] - ldrb r0, [r4] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - add r1, r9 - ldrb r3, [r1, 0xE] - lsls r2, r3, 28 - lsrs r2, 24 - movs r0, 0xF - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0xE] - ldr r1, _08027E1C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08027E3A - .align 2, 0 -_08027E0C: .4byte gBattleMons -_08027E10: .4byte gBankTarget -_08027E14: .4byte gLastUsedMove -_08027E18: .4byte gDisableStructs -_08027E1C: .4byte gBattlescriptCurrInstr -_08027E20: - ldr r3, _08027E48 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08027E3A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08027E48: .4byte gBattlescriptCurrInstr - thumb_func_end atkA4_setencore - - thumb_func_start sub_8027E4C -sub_8027E4C: @ 8027E4C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r7, _08027EEC @ =gBattleMons - ldr r0, _08027EF0 @ =gBankTarget - mov r8, r0 - ldrb r0, [r0] - movs r6, 0x58 - adds r2, r0, 0 - muls r2, r6 - adds r0, r7, 0 - adds r0, 0x50 - adds r0, r2, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 17 - ands r0, r1 - cmp r0, 0 - bne _08027F18 - ldr r1, _08027EF4 @ =gBankAttacker - mov r12, r1 - ldrb r0, [r1] - muls r0, r6 - adds r0, r7 - ldrh r4, [r0, 0x28] - adds r0, r2, r7 - ldrh r2, [r0, 0x28] - adds r4, r2 - asrs r4, 1 - ldr r5, _08027EF8 @ =gBattleMoveDamage - mov r9, r5 - subs r2, r4 - str r2, [r5] - ldr r3, _08027EFC @ =0x02000000 - ldr r1, _08027F00 @ =0x00016014 - adds r0, r3, r1 - strb r2, [r0] - movs r0, 0xFF - lsls r0, 8 - ands r0, r2 - asrs r0, 8 - ldr r5, _08027F04 @ =0x00016015 - adds r1, r3, r5 - strb r0, [r1] - movs r0, 0xFF - lsls r0, 16 - ands r0, r2 - asrs r0, 16 - adds r5, 0x1 - adds r1, r3, r5 - strb r0, [r1] - lsrs r2, 24 - ldr r0, _08027F08 @ =0x00016017 - adds r3, r0 - strb r2, [r3] - mov r1, r12 - ldrb r0, [r1] - muls r0, r6 - adds r0, r7 - ldrh r0, [r0, 0x28] - subs r0, r4 - mov r5, r9 - str r0, [r5] - ldr r2, _08027F0C @ =gSpecialStatuses - mov r0, r8 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, 0x4 - adds r0, r2 - ldr r1, _08027F10 @ =0x0000ffff - str r1, [r0] - ldr r1, _08027F14 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08027F32 - .align 2, 0 -_08027EEC: .4byte gBattleMons -_08027EF0: .4byte gBankTarget -_08027EF4: .4byte gBankAttacker -_08027EF8: .4byte gBattleMoveDamage -_08027EFC: .4byte 0x02000000 -_08027F00: .4byte 0x00016014 -_08027F04: .4byte 0x00016015 -_08027F08: .4byte 0x00016017 -_08027F0C: .4byte gSpecialStatuses -_08027F10: .4byte 0x0000ffff -_08027F14: .4byte gBattlescriptCurrInstr -_08027F18: - ldr r3, _08027F40 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08027F32: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08027F40: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8027E4C - - thumb_func_start sub_8027F44 -sub_8027F44: @ 8027F44 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r1, _08027FA8 @ =gMoveHitWith - ldr r4, _08027FAC @ =gBankAttacker - ldrb r0, [r4] - lsls r0, 1 - adds r2, r0, r1 - ldrh r1, [r2] - cmp r1, 0 - beq _08027F8C - ldr r0, _08027FB0 @ =0x0000ffff - cmp r1, r0 - beq _08027F8C - ldrh r0, [r2] - bl sub_8028350 - lsls r0, 24 - cmp r0, 0 - beq _08028024 - ldr r2, _08027FB4 @ =gProtectStructs - ldrb r0, [r4] - lsls r1, r0, 4 - adds r0, r2, 0x4 - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - bne _08028024 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - bne _08028024 -_08027F8C: - ldr r3, _08027FB8 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08028110 - .align 2, 0 -_08027FA8: .4byte gMoveHitWith -_08027FAC: .4byte gBankAttacker -_08027FB0: .4byte 0x0000ffff -_08027FB4: .4byte gProtectStructs -_08027FB8: .4byte gBattlescriptCurrInstr -_08027FBC: - mov r0, r12 - strb r5, [r0] - mov r1, r10 - ldrb r0, [r1] - muls r0, r2 - adds r0, r7 - adds r0, 0x22 - strb r5, [r0] - ldr r1, _08027FE0 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x3 - strb r0, [r1, 0x1] - strb r5, [r1, 0x2] - movs r0, 0xFF - strb r0, [r1, 0x3] - ldr r1, _08027FE4 @ =gBattlescriptCurrInstr - b _08028012 - .align 2, 0 -_08027FE0: .4byte gBattleTextBuff1 -_08027FE4: .4byte gBattlescriptCurrInstr -_08027FE8: - mov r0, r8 - adds r0, 0x1 - adds r0, r3 - ldrb r2, [r0] - strb r2, [r4] - mov r4, r10 - ldrb r0, [r4] - muls r0, r6 - ldr r7, _0802801C @ =gBattleMons - adds r0, r7 - adds r0, 0x22 - strb r2, [r0] - ldr r1, _08028020 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x3 - strb r0, [r1, 0x1] - strb r2, [r1, 0x2] - movs r0, 0xFF - strb r0, [r1, 0x3] - mov r1, r12 -_08028012: - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08028110 - .align 2, 0 -_0802801C: .4byte gBattleMons -_08028020: .4byte gBattleTextBuff1 -_08028024: - movs r4, 0 - mov r8, r4 - movs r7, 0x7F - mov r9, r7 -_0802802C: - bl Random - mov r4, r9 - ands r4, r0 - cmp r4, 0x70 - bhi _0802802C - lsls r0, r4, 1 - adds r4, r0, r4 - ldr r6, _08028120 @ =gTypeEffectiveness - adds r3, r4, r6 - ldr r1, _08028124 @ =gUnknown_02024C44 - ldr r2, _08028128 @ =gBankAttacker - ldrb r5, [r2] - lsls r0, r5, 1 - adds r0, r1 - ldrb r1, [r3] - mov r10, r2 - ldrh r0, [r0] - cmp r1, r0 - bne _08028088 - adds r0, r4, 0x2 - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0x5 - bhi _08028088 - ldr r7, _0802812C @ =gBattleMons - movs r2, 0x58 - adds r0, r5, 0 - muls r0, r2 - adds r3, r0, r7 - movs r0, 0x21 - adds r0, r3 - mov r12, r0 - adds r0, r4, 0x1 - adds r0, r6 - ldrb r5, [r0] - mov r1, r12 - ldrb r0, [r1] - adds r1, r5, 0 - cmp r0, r1 - beq _08028088 - adds r0, r3, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, r1 - bne _08027FBC -_08028088: - movs r7, 0x1 - add r8, r7 - ldr r0, _08028130 @ =0x000003e7 - cmp r8, r0 - ble _0802802C - movs r0, 0 - mov r8, r0 - ldr r1, _08028134 @ =gBattlescriptCurrInstr - mov r12, r1 - ldr r3, _08028120 @ =gTypeEffectiveness - adds r0, r4, 0x1 - adds r0, r3 - mov r9, r0 - adds r5, r3, 0 -_080280A4: - ldrb r1, [r5] - cmp r1, 0xFF - bgt _080280AE - cmp r1, 0xFE - bge _080280E8 -_080280AE: - mov r4, r10 - ldrb r2, [r4] - lsls r0, r2, 1 - ldr r7, _08028124 @ =gUnknown_02024C44 - adds r0, r7 - ldrh r0, [r0] - cmp r1, r0 - bne _080280E8 - ldrb r0, [r5, 0x2] - cmp r0, 0x5 - bhi _080280E8 - movs r6, 0x58 - adds r0, r2, 0 - muls r0, r6 - ldr r1, _0802812C @ =gBattleMons - adds r2, r0, r1 - adds r4, r2, 0 - adds r4, 0x21 - ldrb r0, [r4] - mov r7, r9 - ldrb r1, [r7] - cmp r0, r1 - beq _080280E8 - adds r0, r2, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, r1 - beq _080280E8 - b _08027FE8 -_080280E8: - adds r5, 0x3 - movs r0, 0x3 - add r8, r0 - ldr r0, _08028138 @ =0x0000014f - cmp r8, r0 - bls _080280A4 - mov r1, r12 - ldr r2, [r1] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - mov r4, r12 - str r1, [r4] -_08028110: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08028120: .4byte gTypeEffectiveness -_08028124: .4byte gUnknown_02024C44 -_08028128: .4byte gBankAttacker -_0802812C: .4byte gBattleMons -_08028130: .4byte 0x000003e7 -_08028134: .4byte gBattlescriptCurrInstr -_08028138: .4byte 0x0000014f - thumb_func_end sub_8027F44 - - thumb_func_start atkA7_setalwayshitflag -atkA7_setalwayshitflag: @ 802813C - push {r4,lr} - ldr r4, _08028180 @ =gStatuses3 - ldr r3, _08028184 @ =gBankTarget - ldrb r1, [r3] - lsls r1, 2 - adds r1, r4 - ldr r0, [r1] - movs r2, 0x19 - negs r2, r2 - ands r0, r2 - str r0, [r1] - ldrb r1, [r3] - lsls r1, 2 - adds r1, r4 - ldr r0, [r1] - movs r2, 0x10 - orrs r0, r2 - str r0, [r1] - ldr r2, _08028188 @ =gDisableStructs - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _0802818C @ =gBankAttacker - ldrb r1, [r1] - strb r1, [r0, 0x15] - ldr r1, _08028190 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08028180: .4byte gStatuses3 -_08028184: .4byte gBankTarget -_08028188: .4byte gDisableStructs -_0802818C: .4byte gBankAttacker -_08028190: .4byte gBattlescriptCurrInstr - thumb_func_end atkA7_setalwayshitflag - - thumb_func_start atkA8_copymovepermanently -atkA8_copymovepermanently: @ 8028194 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - ldr r0, _080282F4 @ =gUnknown_02024BE8 - ldr r1, _080282F8 @ =0x0000ffff - adds r5, r1, 0 - strh r5, [r0] - ldr r3, _080282FC @ =gBattleMons - ldr r2, _08028300 @ =gBankAttacker - ldrb r1, [r2] - movs r0, 0x58 - adds r4, r1, 0 - muls r4, r0 - adds r0, r3, 0 - adds r0, 0x50 - adds r0, r4, r0 - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 14 - ands r1, r0 - mov r12, r3 - mov r10, r2 - cmp r1, 0 - beq _080281CC - b _08028320 -_080281CC: - ldr r0, _08028304 @ =gUnknown_02024C2C - ldr r2, _08028308 @ =gBankTarget - ldrb r1, [r2] - lsls r1, 1 - adds r1, r0 - ldrh r1, [r1] - mov r9, r0 - mov r8, r2 - cmp r1, 0xA5 - bne _080281E2 - b _08028320 -_080281E2: - cmp r1, 0 - bne _080281E8 - b _08028320 -_080281E8: - cmp r1, r5 - bne _080281EE - b _08028320 -_080281EE: - cmp r1, 0xA6 - bne _080281F4 - b _08028320 -_080281F4: - movs r7, 0 - mov r5, r9 - mov r0, r12 - adds r0, 0xC - adds r1, r4, r0 - mov r3, r8 -_08028200: - ldrh r2, [r1] - cmp r2, 0xA6 - beq _08028212 - ldrb r0, [r3] - lsls r0, 1 - adds r0, r5 - ldrh r0, [r0] - cmp r2, r0 - beq _0802821A -_08028212: - adds r1, 0x2 - adds r7, 0x1 - cmp r7, 0x3 - ble _08028200 -_0802821A: - cmp r7, 0x4 - beq _08028220 - b _08028320 -_08028220: - ldr r4, _0802830C @ =gCurrMovePos - ldrb r1, [r4] - lsls r1, 1 - mov r2, r10 - ldrb r0, [r2] - movs r3, 0x58 - muls r0, r3 - adds r1, r0 - mov r6, r12 - adds r6, 0xC - adds r1, r6 - mov r2, r8 - ldrb r0, [r2] - lsls r0, 1 - add r0, r9 - ldrh r0, [r0] - strh r0, [r1] - mov r1, r10 - ldrb r0, [r1] - adds r2, r0, 0 - muls r2, r3 - ldrb r4, [r4] - adds r2, r4 - mov r5, r12 - adds r5, 0x24 - adds r2, r5 - ldr r4, _08028310 @ =gBattleMoves - mov r1, r8 - ldrb r0, [r1] - lsls r0, 1 - add r0, r9 - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x4] - strb r0, [r2] - ldr r1, _08028314 @ =gActiveBank - mov r2, r10 - ldrb r0, [r2] - strb r0, [r1] - movs r7, 0 - ldrb r0, [r2] - muls r0, r3 - adds r4, r0, r5 - adds r3, r0, 0 - add r2, sp, 0x4 - add r5, sp, 0xC -_08028282: - adds r0, r3, r6 - ldrh r0, [r0] - strh r0, [r2] - adds r1, r5, r7 - ldrb r0, [r4] - strb r0, [r1] - adds r4, 0x1 - adds r3, 0x2 - adds r2, 0x2 - adds r7, 0x1 - cmp r7, 0x3 - ble _08028282 - add r2, sp, 0x4 - mov r0, r10 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - add r0, r12 - adds r0, 0x3B - ldrb r0, [r0] - strb r0, [r2, 0xC] - str r2, [sp] - movs r0, 0 - movs r1, 0x3 - movs r2, 0 - movs r3, 0x10 - bl EmitSetAttributes - ldr r0, _08028314 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - ldr r1, _08028318 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - ldr r3, _08028304 @ =gUnknown_02024C2C - ldr r2, _08028308 @ =gBankTarget - ldrb r0, [r2] - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strb r0, [r1, 0x2] - ldrb r0, [r2] - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - lsrs r0, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _0802831C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802833A - .align 2, 0 -_080282F4: .4byte gUnknown_02024BE8 -_080282F8: .4byte 0x0000ffff -_080282FC: .4byte gBattleMons -_08028300: .4byte gBankAttacker -_08028304: .4byte gUnknown_02024C2C -_08028308: .4byte gBankTarget -_0802830C: .4byte gCurrMovePos -_08028310: .4byte gBattleMoves -_08028314: .4byte gActiveBank -_08028318: .4byte gBattleTextBuff1 -_0802831C: .4byte gBattlescriptCurrInstr -_08028320: - ldr r3, _0802834C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802833A: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802834C: .4byte gBattlescriptCurrInstr - thumb_func_end atkA8_copymovepermanently - - thumb_func_start sub_8028350 -sub_8028350: @ 8028350 - push {lr} - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08028380 @ =gBattleMoves - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1] - cmp r0, 0x91 - beq _0802837A - cmp r0, 0x27 - beq _0802837A - cmp r0, 0x4B - beq _0802837A - cmp r0, 0x97 - beq _0802837A - cmp r0, 0x9B - beq _0802837A - cmp r0, 0x1A - bne _08028384 -_0802837A: - movs r0, 0x1 - b _08028386 - .align 2, 0 -_08028380: .4byte gBattleMoves -_08028384: - movs r0, 0 -_08028386: - pop {r1} - bx r1 - thumb_func_end sub_8028350 - - thumb_func_start sub_802838C -sub_802838C: @ 802838C - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - beq _080283AA - cmp r1, 0xD6 - beq _080283AA - movs r0, 0x89 - lsls r0, 1 - cmp r1, r0 - beq _080283AA - cmp r1, 0x77 - beq _080283AA - cmp r1, 0x76 - bne _080283AE -_080283AA: - movs r0, 0x1 - b _080283B0 -_080283AE: - movs r0, 0 -_080283B0: - pop {r1} - bx r1 - thumb_func_end sub_802838C - - thumb_func_start move_weather_interaction -move_weather_interaction: @ 80283B4 - push {lr} - lsls r1, 16 - lsrs r2, r1, 16 - ldr r1, _0802840C @ =gBattleMoves - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - adds r3, r1, 0 - cmp r0, 0x97 - bne _080283D8 - ldr r0, _08028410 @ =gBattleWeather - ldrh r1, [r0] - movs r0, 0x60 - ands r0, r1 - cmp r0, 0 - bne _08028418 -_080283D8: - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r3 - ldrb r0, [r0] - cmp r0, 0x91 - beq _080283FA - cmp r0, 0x27 - beq _080283FA - cmp r0, 0x4B - beq _080283FA - cmp r0, 0x97 - beq _080283FA - cmp r0, 0x9B - beq _080283FA - cmp r0, 0x1A - bne _08028418 -_080283FA: - ldr r0, _08028414 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 20 - ands r0, r1 - cmp r0, 0 - beq _08028418 - movs r0, 0x1 - b _0802841A - .align 2, 0 -_0802840C: .4byte gBattleMoves -_08028410: .4byte gBattleWeather -_08028414: .4byte gHitMarker -_08028418: - movs r0, 0x2 -_0802841A: - pop {r1} - bx r1 - thumb_func_end move_weather_interaction - - thumb_func_start sub_8028420 -sub_8028420: @ 8028420 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r6, 0 - movs r5, 0 - ldr r0, _080284B0 @ =gBankAttacker - mov r9, r0 - movs r1, 0x58 - mov r8, r1 - ldr r7, _080284B4 @ =gUnknown_02024A8C - movs r0, 0x84 - lsls r0, 1 - mov r10, r0 -_0802843E: - lsls r4, r5, 1 - mov r1, r9 - ldrb r0, [r1] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r4, r0 - adds r0, r7 - ldrh r0, [r0] - bl sub_802838C - lsls r0, 24 - cmp r0, 0 - bne _0802847E - mov r1, r9 - ldrb r0, [r1] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r4, r0 - adds r0, r7 - ldrh r1, [r0] - cmp r1, r10 - beq _0802847E - cmp r1, 0xFD - beq _0802847E - adds r0, r1, 0 - bl sub_8028350 - lsls r0, 24 - cmp r0, 0 - beq _0802848C -_0802847E: - ldr r1, _080284B8 @ =gBitTable - lsls r0, r5, 2 - adds r0, r1 - ldr r0, [r0] - orrs r6, r0 - lsls r0, r6, 24 - lsrs r6, r0, 24 -_0802848C: - adds r5, 0x1 - cmp r5, 0x3 - ble _0802843E - ldr r0, _080284B0 @ =gBankAttacker - ldrb r0, [r0] - adds r1, r6, 0 - movs r2, 0xFD - bl sub_8015A98 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0xF - bne _080284C0 - ldr r1, _080284BC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08028524 - .align 2, 0 -_080284B0: .4byte gBankAttacker -_080284B4: .4byte gUnknown_02024A8C -_080284B8: .4byte gBitTable -_080284BC: .4byte gBattlescriptCurrInstr -_080284C0: - movs r7, 0x3 - ldr r4, _08028534 @ =gBitTable -_080284C4: - bl Random - adds r5, r7, 0 - ands r5, r0 - lsls r0, r5, 2 - adds r0, r4 - ldr r0, [r0] - ands r0, r6 - cmp r0, 0 - bne _080284C4 - ldr r4, _08028538 @ =gUnknown_02024BEA - ldr r2, _0802853C @ =gBattleMons - lsls r1, r5, 1 - ldr r0, _08028540 @ =gBankAttacker - ldrb r3, [r0] - movs r0, 0x58 - muls r0, r3 - adds r1, r0 - adds r2, 0xC - adds r1, r2 - ldrh r0, [r1] - strh r0, [r4] - ldr r0, _08028544 @ =gCurrMovePos - strb r5, [r0] - ldr r2, _08028548 @ =gHitMarker - ldr r0, [r2] - ldr r1, _0802854C @ =0xfffffbff - ands r0, r1 - str r0, [r2] - ldrh r0, [r4] - movs r1, 0 - bl sub_801B5C0 - ldr r1, _08028550 @ =gBankTarget - strb r0, [r1] - ldr r3, _08028554 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08028524: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08028534: .4byte gBitTable -_08028538: .4byte gUnknown_02024BEA -_0802853C: .4byte gBattleMons -_08028540: .4byte gBankAttacker -_08028544: .4byte gCurrMovePos -_08028548: .4byte gHitMarker -_0802854C: .4byte 0xfffffbff -_08028550: .4byte gBankTarget -_08028554: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8028420 - - thumb_func_start sub_8028558 -sub_8028558: @ 8028558 - ldr r1, _0802857C @ =gBattleMons - ldr r0, _08028580 @ =gBankAttacker - ldrb r2, [r0] - movs r0, 0x58 - muls r2, r0 - adds r1, 0x50 - adds r2, r1 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 18 - orrs r0, r1 - str r0, [r2] - ldr r1, _08028584 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_0802857C: .4byte gBattleMons -_08028580: .4byte gBankAttacker -_08028584: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8028558 - - thumb_func_start b_feature_update_destiny_bond -b_feature_update_destiny_bond: @ 8028588 - push {r4,r5,lr} - ldr r0, _080285D8 @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _080285DC @ =gBankTarget - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r3, r0, 24 - ldr r1, _080285E0 @ =gBattleMons - ldrb r2, [r4] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 18 - ands r0, r1 - cmp r0, 0 - beq _080285D2 - cmp r5, r3 - beq _080285D2 - ldr r2, _080285E4 @ =gHitMarker - ldr r1, [r2] - movs r0, 0x80 - lsls r0, 17 - ands r0, r1 - cmp r0, 0 - bne _080285D2 - movs r0, 0x40 - orrs r1, r0 - str r1, [r2] -_080285D2: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080285D8: .4byte gBankAttacker -_080285DC: .4byte gBankTarget -_080285E0: .4byte gBattleMons -_080285E4: .4byte gHitMarker - thumb_func_end b_feature_update_destiny_bond - - thumb_func_start atkAB_802A458 -atkAB_802A458: @ 80285E8 - push {lr} - bl b_feature_update_destiny_bond - ldr r1, _080285FC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080285FC: .4byte gBattlescriptCurrInstr - thumb_func_end atkAB_802A458 - - thumb_func_start atkAC_remaininghptopower -atkAC_remaininghptopower: @ 8028600 - push {lr} - ldr r2, _08028654 @ =gBattleMons - ldr r0, _08028658 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r1, r0 - adds r1, r2 - movs r2, 0x28 - ldrsh r0, [r1, r2] - movs r2, 0x2C - ldrsh r1, [r1, r2] - movs r2, 0x30 - bl GetScaledHPFraction - lsls r0, 24 - lsrs r1, r0, 24 - movs r3, 0 - ldr r0, _0802865C @ =gUnknown_081FAD26 - ldrb r2, [r0] - cmp r1, r2 - ble _0802863A - adds r2, r0, 0 -_0802862C: - adds r3, 0x2 - cmp r3, 0xB - bgt _0802863A - adds r0, r3, r2 - ldrb r0, [r0] - cmp r1, r0 - bgt _0802862C -_0802863A: - ldr r2, _08028660 @ =gDynamicBasePower - ldr r1, _0802865C @ =gUnknown_081FAD26 - adds r0, r3, 0x1 - adds r0, r1 - ldrb r0, [r0] - strh r0, [r2] - ldr r1, _08028664 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08028654: .4byte gBattleMons -_08028658: .4byte gBankAttacker -_0802865C: .4byte gUnknown_081FAD26 -_08028660: .4byte gDynamicBasePower -_08028664: .4byte gBattlescriptCurrInstr - thumb_func_end atkAC_remaininghptopower - - thumb_func_start sub_8028668 -sub_8028668: @ 8028668 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r4, _080287F8 @ =gLastUsedMove - ldr r1, _080287FC @ =gBankTarget - ldrb r2, [r1] - lsls r0, r2, 1 - adds r0, r4 - ldrh r3, [r0] - mov r8, r1 - cmp r3, 0 - bne _08028688 - b _08028828 -_08028688: - ldr r0, _08028800 @ =0x0000ffff - cmp r3, r0 - bne _08028690 - b _08028828 -_08028690: - ldr r1, _08028804 @ =gStatuses3 - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08028808 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - beq _080286A2 - b _08028828 -_080286A2: - movs r7, 0 - ldr r0, _0802880C @ =gBattleMons - movs r1, 0x58 - muls r1, r2 - adds r2, r0, 0 - adds r2, 0xC - adds r1, r2 - ldrh r1, [r1] - cmp r3, r1 - beq _080286DA - adds r6, r4, 0 - mov r5, r8 - adds r4, r2, 0 - movs r3, 0x58 -_080286BE: - adds r7, 0x1 - cmp r7, 0x3 - bgt _080286DA - ldrb r0, [r5] - lsls r2, r0, 1 - adds r2, r6 - lsls r1, r7, 1 - muls r0, r3 - adds r1, r0 - adds r1, r4 - ldrh r0, [r2] - ldrh r1, [r1] - cmp r0, r1 - bne _080286BE -_080286DA: - cmp r7, 0x4 - bne _080286E0 - b _08028828 -_080286E0: - mov r4, r8 - ldrb r0, [r4] - movs r1, 0x58 - mov r9, r1 - mov r3, r9 - muls r3, r0 - adds r0, r3, 0 - adds r0, r7, r0 - ldr r1, _0802880C @ =gBattleMons - adds r1, 0x24 - mov r10, r1 - add r0, r10 - ldrb r0, [r0] - cmp r0, 0x1 - bhi _08028700 - b _08028828 -_08028700: - bl Random - movs r1, 0x3 - ands r1, r0 - adds r6, r1, 0x2 - ldrb r0, [r4] - mov r3, r9 - muls r3, r0 - adds r0, r3, 0 - adds r0, r7, r0 - add r0, r10 - ldrb r0, [r0] - cmp r0, r6 - bge _0802871E - adds r6, r0, 0 -_0802871E: - ldr r1, _08028810 @ =gBattleTextBuff1 - movs r5, 0xFD - strb r5, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - ldr r2, _080287F8 @ =gLastUsedMove - mov r3, r8 - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1, 0x2] - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - lsrs r0, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r4, _08028814 @ =gBattleTextBuff2 - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - strb r5, [r4] - movs r0, 0x1 - strb r0, [r4, 0x1] - strb r0, [r4, 0x2] - strb r0, [r4, 0x3] - strb r6, [r4, 0x4] - subs r0, 0x2 - strb r0, [r4, 0x5] - mov r1, r8 - ldrb r0, [r1] - mov r1, r9 - muls r1, r0 - adds r1, r7, r1 - add r1, r10 - ldrb r0, [r1] - subs r0, r6 - strb r0, [r1] - ldr r4, _08028818 @ =gActiveBank - mov r3, r8 - ldrb r0, [r3] - strb r0, [r4] - ldr r1, _0802881C @ =gDisableStructs - ldrb r3, [r4] - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x18] - lsrs r1, 4 - ldr r2, _08028820 @ =gBitTable - lsls r0, r7, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _080287D2 - mov r2, r9 - muls r2, r3 - ldr r0, _0802880C @ =gBattleMons - adds r0, 0x50 - adds r0, r2, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _080287D2 - adds r1, r7, 0 - adds r1, 0x9 - lsls r1, 24 - lsrs r1, 24 - mov r3, r10 - adds r0, r2, r3 - adds r0, r7 - str r0, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0x1 - bl EmitSetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution -_080287D2: - ldr r1, _08028824 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - ldr r1, _0802880C @ =gBattleMons - ldr r0, _080287FC @ =gBankTarget - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r0, r7, r0 - adds r1, 0x24 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _08028842 - adds r0, r2, 0 - bl CancelMultiTurnMoves - b _08028842 - .align 2, 0 -_080287F8: .4byte gLastUsedMove -_080287FC: .4byte gBankTarget -_08028800: .4byte 0x0000ffff -_08028804: .4byte gStatuses3 -_08028808: .4byte 0x000400c0 -_0802880C: .4byte gBattleMons -_08028810: .4byte gBattleTextBuff1 -_08028814: .4byte gBattleTextBuff2 -_08028818: .4byte gActiveBank -_0802881C: .4byte gDisableStructs -_08028820: .4byte gBitTable -_08028824: .4byte gBattlescriptCurrInstr -_08028828: - ldr r3, _08028854 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08028842: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08028854: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8028668 - - thumb_func_start sub_8028858 -sub_8028858: @ 8028858 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - movs r4, 0 - str r4, [sp, 0x4] - movs r7, 0 - ldr r0, _080288AC @ =gCurrentMove - ldrh r0, [r0] - cmp r0, 0xD7 - beq _08028872 - b _08028A26 -_08028872: - ldr r5, _080288B0 @ =gBattleCommunication - strb r7, [r5, 0x5] - ldr r6, _080288B4 @ =gBankAttacker - ldrb r0, [r6] - bl GetBankSide - lsls r0, 24 - ldr r1, _080288B8 @ =gEnemyParty - mov r9, r1 - cmp r0, 0 - bne _0802888C - ldr r2, _080288BC @ =gPlayerParty - mov r9, r2 -_0802888C: - ldr r4, _080288C0 @ =gBattleMons - ldrb r3, [r6] - movs r0, 0x58 - adds r2, r3, 0 - muls r2, r0 - adds r0, r2, r4 - adds r1, r0, 0 - adds r1, 0x20 - ldrb r0, [r1] - cmp r0, 0x2B - beq _080288C4 - adds r0, r4, 0 - adds r0, 0x4C - adds r0, r2, r0 - str r7, [r0] - b _080288D4 - .align 2, 0 -_080288AC: .4byte gCurrentMove -_080288B0: .4byte gBattleCommunication -_080288B4: .4byte gBankAttacker -_080288B8: .4byte gEnemyParty -_080288BC: .4byte gPlayerParty -_080288C0: .4byte gBattleMons -_080288C4: - ldrb r1, [r1] - adds r0, r3, 0 - bl RecordAbilityBattle - ldrb r0, [r5, 0x5] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r5, 0x5] -_080288D4: - ldr r4, _08028934 @ =gActiveBank - ldr r0, _08028938 @ =gBankAttacker - ldrb r0, [r0] - bl GetBankIdentity - movs r6, 0x2 - eors r0, r6 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByPlayerAI - ldr r1, _0802893C @ =0x02000000 - ldr r2, _08028940 @ =0x00016003 - adds r1, r2 - strb r0, [r1] - strb r0, [r4] - ldr r0, _08028944 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08028964 - ldr r0, _08028948 @ =gAbsentBankFlags - ldrb r2, [r0] - ldr r1, _0802894C @ =gBitTable - ldrb r3, [r4] - lsls r0, r3, 2 - adds r0, r1 - ldr r0, [r0] - ands r2, r0 - cmp r2, 0 - bne _08028964 - ldr r5, _08028950 @ =gBattleMons - movs r0, 0x58 - adds r4, r3, 0 - muls r4, r0 - adds r0, r4, r5 - adds r1, r0, 0 - adds r1, 0x20 - ldrb r0, [r1] - cmp r0, 0x2B - beq _08028954 - adds r0, r5, 0 - adds r0, 0x4C - adds r0, r4, r0 - str r2, [r0] - b _08028964 - .align 2, 0 -_08028934: .4byte gActiveBank -_08028938: .4byte gBankAttacker -_0802893C: .4byte 0x02000000 -_08028940: .4byte 0x00016003 -_08028944: .4byte gBattleTypeFlags -_08028948: .4byte gAbsentBankFlags -_0802894C: .4byte gBitTable -_08028950: .4byte gBattleMons -_08028954: - ldrb r1, [r1] - adds r0, r3, 0 - bl RecordAbilityBattle - ldr r1, _080289AC @ =gBattleCommunication - ldrb r0, [r1, 0x5] - orrs r0, r6 - strb r0, [r1, 0x5] -_08028964: - movs r6, 0 - ldr r0, _080289B0 @ =gBattleMons - mov r8, r0 -_0802896A: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - add r4, r9 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x2E - bl GetMonData - lsls r0, 24 - lsrs r4, r0, 24 - cmp r5, 0 - beq _08028A1E - movs r0, 0xCE - lsls r0, 1 - cmp r5, r0 - beq _08028A1E - ldr r2, _080289B4 @ =gBattlePartyID - ldr r0, _080289B8 @ =gBankAttacker - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r2 - ldrh r0, [r0] - cmp r0, r6 - bne _080289BC - movs r0, 0x58 - muls r0, r1 - b _080289EC - .align 2, 0 -_080289AC: .4byte gBattleCommunication -_080289B0: .4byte gBattleMons -_080289B4: .4byte gBattlePartyID -_080289B8: .4byte gBankAttacker -_080289BC: - ldr r0, _080289F4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08028A04 - ldr r0, _080289F8 @ =gActiveBank - ldrb r3, [r0] - lsls r0, r3, 1 - adds r0, r2 - ldrh r0, [r0] - cmp r0, r6 - bne _08028A04 - ldr r0, _080289FC @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _08028A00 @ =gBitTable - lsls r0, r3, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _08028A04 - movs r0, 0x58 - muls r0, r3 -_080289EC: - add r0, r8 - adds r0, 0x20 - ldrb r0, [r0] - b _08028A10 - .align 2, 0 -_080289F4: .4byte gBattleTypeFlags -_080289F8: .4byte gActiveBank -_080289FC: .4byte gAbsentBankFlags -_08028A00: .4byte gBitTable -_08028A04: - adds r0, r5, 0 - adds r1, r4, 0 - bl GetAbilityBySpecies - lsls r0, 24 - lsrs r0, 24 -_08028A10: - cmp r0, 0x2B - beq _08028A1E - movs r0, 0x1 - lsls r0, r6 - orrs r7, r0 - lsls r0, r7, 24 - lsrs r7, r0, 24 -_08028A1E: - adds r6, 0x1 - cmp r6, 0x5 - ble _0802896A - b _08028A7E -_08028A26: - ldr r1, _08028AB4 @ =gBattleCommunication - movs r0, 0x4 - strb r0, [r1, 0x5] - movs r7, 0x3F - ldr r2, _08028AB8 @ =gBattleMons - ldr r1, _08028ABC @ =gBankAttacker - ldrb r0, [r1] - movs r6, 0x58 - muls r0, r6 - adds r5, r2, 0 - adds r5, 0x4C - adds r0, r5 - str r4, [r0] - ldrb r0, [r1] - bl GetBankIdentity - movs r1, 0x2 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByPlayerAI - ldr r3, _08028AC0 @ =gActiveBank - strb r0, [r3] - ldr r0, _08028AC4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08028A7E - ldr r0, _08028AC8 @ =gAbsentBankFlags - ldrb r2, [r0] - ldr r1, _08028ACC @ =gBitTable - ldrb r3, [r3] - lsls r0, r3, 2 - adds r0, r1 - ldr r0, [r0] - ands r2, r0 - cmp r2, 0 - bne _08028A7E - adds r0, r3, 0 - muls r0, r6 - adds r0, r5 - str r2, [r0] -_08028A7E: - ldr r4, _08028AC0 @ =gActiveBank - ldr r0, _08028ABC @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r4] - add r1, sp, 0x4 - str r1, [sp] - movs r0, 0 - movs r1, 0x28 - adds r2, r7, 0 - movs r3, 0x4 - bl EmitSetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r1, _08028AD0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08028AB4: .4byte gBattleCommunication -_08028AB8: .4byte gBattleMons -_08028ABC: .4byte gBankAttacker -_08028AC0: .4byte gActiveBank -_08028AC4: .4byte gBattleTypeFlags -_08028AC8: .4byte gAbsentBankFlags -_08028ACC: .4byte gBitTable -_08028AD0: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8028858 - - thumb_func_start sub_8028AD4 -sub_8028AD4: @ 8028AD4 - push {r4-r7,lr} - ldr r7, _08028B24 @ =gBattleMons - ldr r0, _08028B28 @ =gBankTarget - ldrb r3, [r0] - movs r6, 0x58 - adds r1, r3, 0 - muls r1, r6 - adds r0, r7, 0 - adds r0, 0x50 - adds r4, r1, r0 - ldr r2, [r4] - movs r5, 0x80 - lsls r5, 21 - adds r0, r2, 0 - ands r0, r5 - cmp r0, 0 - bne _08028B06 - ldr r1, _08028B2C @ =gStatuses3 - lsls r0, r3, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08028B30 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - beq _08028B38 -_08028B06: - ldr r3, _08028B34 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08028B5C - .align 2, 0 -_08028B24: .4byte gBattleMons -_08028B28: .4byte gBankTarget -_08028B2C: .4byte gStatuses3 -_08028B30: .4byte 0x000400c0 -_08028B34: .4byte gBattlescriptCurrInstr -_08028B38: - orrs r2, r5 - str r2, [r4] - ldr r1, _08028B64 @ =gBattleMoveDamage - ldr r0, _08028B68 @ =gBankAttacker - ldrb r0, [r0] - muls r0, r6 - adds r0, r7 - ldrh r0, [r0, 0x2C] - lsrs r0, 1 - str r0, [r1] - cmp r0, 0 - bne _08028B54 - movs r0, 0x1 - str r0, [r1] -_08028B54: - ldr r1, _08028B6C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08028B5C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08028B64: .4byte gBattleMoveDamage -_08028B68: .4byte gBankAttacker -_08028B6C: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8028AD4 - - thumb_func_start sub_8028B70 -sub_8028B70: @ 8028B70 - push {r4,lr} - ldr r4, _08028BC4 @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08028BC8 @ =gSideTimer - lsls r2, r0, 1 - adds r0, r2, r0 - lsls r0, 2 - adds r3, r0, r1 - ldrb r0, [r3, 0x6] - cmp r0, 0x3 - bne _08028BD4 - ldr r2, _08028BCC @ =gSpecialStatuses - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0] - ldr r3, _08028BD0 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08028BEE - .align 2, 0 -_08028BC4: .4byte gBankAttacker -_08028BC8: .4byte gSideTimer -_08028BCC: .4byte gSpecialStatuses -_08028BD0: .4byte gBattlescriptCurrInstr -_08028BD4: - ldr r1, _08028BF4 @ =gSideAffecting - adds r1, r2, r1 - ldrh r2, [r1] - movs r0, 0x10 - orrs r0, r2 - strh r0, [r1] - ldrb r0, [r3, 0x6] - adds r0, 0x1 - strb r0, [r3, 0x6] - ldr r1, _08028BF8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08028BEE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08028BF4: .4byte gSideAffecting -_08028BF8: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8028B70 - - thumb_func_start sub_8028BFC -sub_8028BFC: @ 8028BFC - ldr r1, _08028C20 @ =gBattleMons - ldr r0, _08028C24 @ =gBankTarget - ldrb r2, [r0] - movs r0, 0x58 - muls r2, r0 - adds r1, 0x50 - adds r2, r1 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 22 - orrs r0, r1 - str r0, [r2] - ldr r1, _08028C28 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08028C20: .4byte gBattleMons -_08028C24: .4byte gBankTarget -_08028C28: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8028BFC - - thumb_func_start atkB2_setperishsong -atkB2_setperishsong: @ 8028C2C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r6, 0 - movs r3, 0 - ldr r0, _08028C70 @ =gNoOfAllBanks - adds r7, r0, 0 - ldr r0, _08028C74 @ =gBankAttacker - mov r8, r0 - ldrb r1, [r7] - cmp r6, r1 - bge _08028C98 - movs r5, 0x20 - ldr r0, _08028C78 @ =gBattleMons - mov r12, r0 - ldr r0, _08028C7C @ =gDisableStructs - adds r4, r0, 0 - adds r4, 0xF - ldr r2, _08028C80 @ =gStatuses3 -_08028C54: - ldr r1, [r2] - adds r0, r1, 0 - ands r0, r5 - cmp r0, 0 - bne _08028C6C - movs r0, 0x58 - muls r0, r3 - add r0, r12 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x2B - bne _08028C84 -_08028C6C: - adds r6, 0x1 - b _08028C8C - .align 2, 0 -_08028C70: .4byte gNoOfAllBanks -_08028C74: .4byte gBankAttacker -_08028C78: .4byte gBattleMons -_08028C7C: .4byte gDisableStructs -_08028C80: .4byte gStatuses3 -_08028C84: - orrs r1, r5 - str r1, [r2] - movs r0, 0x33 - strb r0, [r4] -_08028C8C: - adds r4, 0x1C - adds r2, 0x4 - adds r3, 0x1 - ldrb r0, [r7] - cmp r3, r0 - blt _08028C54 -_08028C98: - mov r1, r8 - ldrb r0, [r1] - bl sub_80153D0 - ldr r0, _08028CC4 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r6, r0 - bne _08028CCC - ldr r3, _08028CC8 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08028CD4 - .align 2, 0 -_08028CC4: .4byte gNoOfAllBanks -_08028CC8: .4byte gBattlescriptCurrInstr -_08028CCC: - ldr r1, _08028CE0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08028CD4: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08028CE0: .4byte gBattlescriptCurrInstr - thumb_func_end atkB2_setperishsong - - thumb_func_start atkB3_rolloutdamagecalculation -atkB3_rolloutdamagecalculation: @ 8028CE4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r0, _08028D08 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _08028D18 - ldr r0, _08028D0C @ =gBankAttacker - ldrb r0, [r0] - bl CancelMultiTurnMoves - ldr r1, _08028D10 @ =gBattlescriptCurrInstr - ldr r0, _08028D14 @ =BattleScript_1D6F74 - str r0, [r1] - b _08028E30 - .align 2, 0 -_08028D08: .4byte gBattleMoveFlags -_08028D0C: .4byte gBankAttacker -_08028D10: .4byte gBattlescriptCurrInstr -_08028D14: .4byte BattleScript_1D6F74 -_08028D18: - ldr r2, _08028E3C @ =gBattleMons - ldr r1, _08028E40 @ =gBankAttacker - ldrb r3, [r1] - movs r5, 0x58 - adds r0, r3, 0 - muls r0, r5 - adds r4, r2, 0 - adds r4, 0x50 - adds r0, r4 - ldr r0, [r0] - movs r7, 0x80 - lsls r7, 5 - ands r0, r7 - adds r6, r1, 0 - mov r9, r2 - ldr r1, _08028E44 @ =gDisableStructs - mov r12, r1 - ldr r2, _08028E48 @ =gCurrentMove - mov r8, r2 - cmp r0, 0 - bne _08028D8A - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 2 - add r0, r12 - ldrb r2, [r0, 0x11] - movs r1, 0x10 - negs r1, r1 - ands r1, r2 - movs r2, 0x5 - orrs r1, r2 - strb r1, [r0, 0x11] - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r12 - ldrb r2, [r0, 0x11] - movs r1, 0xF - ands r1, r2 - movs r2, 0x50 - orrs r1, r2 - strb r1, [r0, 0x11] - ldrb r0, [r6] - adds r1, r0, 0 - muls r1, r5 - adds r1, r4 - ldr r0, [r1] - orrs r0, r7 - str r0, [r1] - ldr r1, _08028E4C @ =gLockedMove - ldrb r0, [r6] - lsls r0, 1 - adds r0, r1 - mov r2, r8 - ldrh r1, [r2] - strh r1, [r0] -_08028D8A: - ldrb r0, [r6] - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 2 - add r2, r12 - ldrb r3, [r2, 0x11] - lsls r1, r3, 28 - lsrs r1, 28 - subs r1, 0x1 - movs r0, 0xF - ands r1, r0 - movs r0, 0x10 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x11] - cmp r1, 0 - bne _08028DBE - ldrb r0, [r6] - adds r1, r0, 0 - muls r1, r5 - adds r1, r4 - ldr r0, [r1] - ldr r2, _08028E50 @ =0xffffefff - ands r0, r2 - str r0, [r1] -_08028DBE: - ldr r3, _08028E54 @ =gDynamicBasePower - ldr r2, _08028E58 @ =gBattleMoves - mov r0, r8 - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - strh r0, [r3] - movs r2, 0x1 - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - mov r1, r12 - adds r4, r0, r1 - ldrb r0, [r4, 0x11] - lsls r0, 28 - lsrs r0, 28 - movs r1, 0x5 - subs r1, r0 - ldr r7, _08028E5C @ =gBattlescriptCurrInstr - adds r5, r3, 0 - cmp r2, r1 - bge _08028E0C - adds r1, r5, 0 - adds r3, r4, 0 - movs r4, 0x5 -_08028DF8: - ldrh r0, [r1] - lsls r0, 1 - strh r0, [r1] - adds r2, 0x1 - ldrb r0, [r3, 0x11] - lsls r0, 28 - lsrs r0, 28 - subs r0, r4, r0 - cmp r2, r0 - blt _08028DF8 -_08028E0C: - ldrb r1, [r6] - movs r0, 0x58 - muls r0, r1 - mov r1, r9 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 23 - ands r0, r1 - cmp r0, 0 - beq _08028E2A - ldrh r0, [r5] - lsls r0, 1 - strh r0, [r5] -_08028E2A: - ldr r0, [r7] - adds r0, 0x1 - str r0, [r7] -_08028E30: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08028E3C: .4byte gBattleMons -_08028E40: .4byte gBankAttacker -_08028E44: .4byte gDisableStructs -_08028E48: .4byte gCurrentMove -_08028E4C: .4byte gLockedMove -_08028E50: .4byte 0xffffefff -_08028E54: .4byte gDynamicBasePower -_08028E58: .4byte gBattleMoves -_08028E5C: .4byte gBattlescriptCurrInstr - thumb_func_end atkB3_rolloutdamagecalculation - - thumb_func_start atkB4_jumpifconfusedandattackmaxed -atkB4_jumpifconfusedandattackmaxed: @ 8028E60 - push {r4,r5,lr} - ldr r5, _08028EB0 @ =gBattleMons - ldr r0, _08028EB4 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - adds r3, r1, 0 - muls r3, r0 - adds r0, r5, 0 - adds r0, 0x50 - adds r0, r3, r0 - ldr r0, [r0] - movs r1, 0x7 - ands r0, r1 - ldr r4, _08028EB8 @ =gBattlescriptCurrInstr - cmp r0, 0 - beq _08028EBC - ldr r2, [r4] - ldrb r0, [r2, 0x1] - adds r0, r3 - adds r1, r5, 0 - adds r1, 0x18 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0xC - bne _08028EBC - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _08028EC2 - .align 2, 0 -_08028EB0: .4byte gBattleMons -_08028EB4: .4byte gBankTarget -_08028EB8: .4byte gBattlescriptCurrInstr -_08028EBC: - ldr r0, [r4] - adds r0, 0x6 - str r0, [r4] -_08028EC2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end atkB4_jumpifconfusedandattackmaxed - - thumb_func_start sub_8028EC8 -sub_8028EC8: @ 8028EC8 - push {r4,r5,lr} - ldr r0, _08028EF0 @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _08028F04 - ldr r2, _08028EF4 @ =gDisableStructs - ldr r0, _08028EF8 @ =gBankAttacker - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strb r1, [r0, 0x10] - ldr r1, _08028EFC @ =gBattlescriptCurrInstr - ldr r0, _08028F00 @ =BattleScript_1D6F74 - str r0, [r1] - b _08028F5C - .align 2, 0 -_08028EF0: .4byte gBattleMoveFlags -_08028EF4: .4byte gDisableStructs -_08028EF8: .4byte gBankAttacker -_08028EFC: .4byte gBattlescriptCurrInstr -_08028F00: .4byte BattleScript_1D6F74 -_08028F04: - ldr r5, _08028F64 @ =gDisableStructs - ldr r4, _08028F68 @ =gBankAttacker - ldrb r1, [r4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r1, r0, r5 - ldrb r0, [r1, 0x10] - cmp r0, 0x5 - beq _08028F1C - adds r0, 0x1 - strb r0, [r1, 0x10] -_08028F1C: - ldr r3, _08028F6C @ =gDynamicBasePower - ldr r2, _08028F70 @ =gBattleMoves - ldr r0, _08028F74 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - strh r0, [r3] - movs r2, 0x1 - ldrb r1, [r4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r4, _08028F78 @ =gBattlescriptCurrInstr - ldrb r1, [r0, 0x10] - cmp r2, r1 - bge _08028F56 - adds r1, r3, 0 - adds r3, r0, 0 -_08028F48: - ldrh r0, [r1] - lsls r0, 1 - strh r0, [r1] - adds r2, 0x1 - ldrb r0, [r3, 0x10] - cmp r2, r0 - blt _08028F48 -_08028F56: - ldr r0, [r4] - adds r0, 0x1 - str r0, [r4] -_08028F5C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08028F64: .4byte gDisableStructs -_08028F68: .4byte gBankAttacker -_08028F6C: .4byte gDynamicBasePower -_08028F70: .4byte gBattleMoves -_08028F74: .4byte gCurrentMove -_08028F78: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8028EC8 - - thumb_func_start atkB6_happinesstodamagecalculation -atkB6_happinesstodamagecalculation: @ 8028F7C - push {r4,lr} - ldr r2, _08028FA8 @ =gBattleMoves - ldr r0, _08028FAC @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x79 - bne _08028FBC - ldr r4, _08028FB0 @ =gDynamicBasePower - ldr r2, _08028FB4 @ =gBattleMons - ldr r0, _08028FB8 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x2B - ldrb r1, [r0] - b _08028FD2 - .align 2, 0 -_08028FA8: .4byte gBattleMoves -_08028FAC: .4byte gCurrentMove -_08028FB0: .4byte gDynamicBasePower -_08028FB4: .4byte gBattleMons -_08028FB8: .4byte gBankAttacker -_08028FBC: - ldr r4, _08028FF0 @ =gDynamicBasePower - ldr r2, _08028FF4 @ =gBattleMons - ldr r0, _08028FF8 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x2B - ldrb r0, [r0] - movs r1, 0xFF - subs r1, r0 -_08028FD2: - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - movs r1, 0x19 - bl __divsi3 - strh r0, [r4] - ldr r1, _08028FFC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08028FF0: .4byte gDynamicBasePower -_08028FF4: .4byte gBattleMons -_08028FF8: .4byte gBankAttacker -_08028FFC: .4byte gBattlescriptCurrInstr - thumb_func_end atkB6_happinesstodamagecalculation - - thumb_func_start atkB7_presentdamagecalculation -atkB7_presentdamagecalculation: @ 8029000 - push {r4,lr} - bl Random - movs r4, 0xFF - ands r4, r0 - cmp r4, 0x65 - bgt _0802901C - ldr r1, _08029018 @ =gDynamicBasePower - movs r0, 0x28 - strh r0, [r1] - b _0802905E - .align 2, 0 -_08029018: .4byte gDynamicBasePower -_0802901C: - cmp r4, 0xB1 - bgt _0802902C - ldr r1, _08029028 @ =gDynamicBasePower - movs r0, 0x50 - strh r0, [r1] - b _0802905E - .align 2, 0 -_08029028: .4byte gDynamicBasePower -_0802902C: - cmp r4, 0xCB - bgt _0802903C - ldr r1, _08029038 @ =gDynamicBasePower - movs r0, 0x78 - strh r0, [r1] - b _0802905E - .align 2, 0 -_08029038: .4byte gDynamicBasePower -_0802903C: - ldr r3, _08029068 @ =gBattleMoveDamage - ldr r2, _0802906C @ =gBattleMons - ldr r0, _08029070 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0, 0x2C] - lsrs r0, 2 - str r0, [r3] - cmp r0, 0 - bne _08029058 - movs r0, 0x1 - str r0, [r3] -_08029058: - ldr r0, [r3] - negs r0, r0 - str r0, [r3] -_0802905E: - cmp r4, 0xCB - bgt _0802907C - ldr r1, _08029074 @ =gBattlescriptCurrInstr - ldr r0, _08029078 @ =BattleScript_1D6F44 - b _080290AC - .align 2, 0 -_08029068: .4byte gBattleMoveDamage -_0802906C: .4byte gBattleMons -_08029070: .4byte gBankTarget -_08029074: .4byte gBattlescriptCurrInstr -_08029078: .4byte BattleScript_1D6F44 -_0802907C: - ldr r2, _08029098 @ =gBattleMons - ldr r0, _0802909C @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r1, [r0, 0x2C] - ldrh r0, [r0, 0x28] - cmp r1, r0 - bne _080290A8 - ldr r1, _080290A0 @ =gBattlescriptCurrInstr - ldr r0, _080290A4 @ =BattleScript_1D83B5 - b _080290AC - .align 2, 0 -_08029098: .4byte gBattleMons -_0802909C: .4byte gBankTarget -_080290A0: .4byte gBattlescriptCurrInstr -_080290A4: .4byte BattleScript_1D83B5 -_080290A8: - ldr r1, _080290B4 @ =gBattlescriptCurrInstr - ldr r0, _080290B8 @ =BattleScript_1D839B -_080290AC: - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080290B4: .4byte gBattlescriptCurrInstr -_080290B8: .4byte BattleScript_1D839B - thumb_func_end atkB7_presentdamagecalculation - - thumb_func_start sub_80290BC -sub_80290BC: @ 80290BC - push {r4-r6,lr} - ldr r4, _080290F0 @ =gBankAttacker - ldrb r0, [r4] - bl GetBankIdentity - ldr r6, _080290F4 @ =gSideAffecting - movs r5, 0x1 - adds r1, r5, 0 - ands r1, r0 - lsls r1, 1 - adds r1, r6 - ldrh r1, [r1] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08029100 - ldr r2, _080290F8 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _080290FC @ =gBattleCommunication - movs r0, 0 - strb r0, [r1, 0x5] - b _08029132 - .align 2, 0 -_080290F0: .4byte gBankAttacker -_080290F4: .4byte gSideAffecting -_080290F8: .4byte gBattleMoveFlags -_080290FC: .4byte gBattleCommunication -_08029100: - ldrb r0, [r4] - bl GetBankIdentity - adds r1, r5, 0 - ands r1, r0 - lsls r1, 1 - adds r1, r6 - ldrh r0, [r1] - movs r2, 0x20 - orrs r0, r2 - strh r0, [r1] - ldrb r0, [r4] - bl GetBankIdentity - ldr r2, _08029140 @ =gSideTimer - adds r1, r5, 0 - ands r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x5 - strb r1, [r0, 0x7] - ldr r0, _08029144 @ =gBattleCommunication - strb r1, [r0, 0x5] -_08029132: - ldr r1, _08029148 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08029140: .4byte gSideTimer -_08029144: .4byte gBattleCommunication -_08029148: .4byte gBattlescriptCurrInstr - thumb_func_end sub_80290BC - - thumb_func_start atkB9_magnitudedamagecalculation -atkB9_magnitudedamagecalculation: @ 802914C - push {r4-r7,lr} - mov r7, r8 - push {r7} - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x4 - bgt _08029178 - ldr r1, _08029174 @ =gDynamicBasePower - movs r0, 0xA - strh r0, [r1] - movs r3, 0x4 - b _080291E4 - .align 2, 0 -_08029174: .4byte gDynamicBasePower -_08029178: - cmp r3, 0xE - bgt _0802918C - ldr r1, _08029188 @ =gDynamicBasePower - movs r0, 0x1E - strh r0, [r1] - movs r3, 0x5 - b _080291E4 - .align 2, 0 -_08029188: .4byte gDynamicBasePower -_0802918C: - cmp r3, 0x22 - bgt _080291A0 - ldr r1, _0802919C @ =gDynamicBasePower - movs r0, 0x32 - strh r0, [r1] - movs r3, 0x6 - b _080291E4 - .align 2, 0 -_0802919C: .4byte gDynamicBasePower -_080291A0: - cmp r3, 0x40 - bgt _080291B4 - ldr r1, _080291B0 @ =gDynamicBasePower - movs r0, 0x46 - strh r0, [r1] - movs r3, 0x7 - b _080291E4 - .align 2, 0 -_080291B0: .4byte gDynamicBasePower -_080291B4: - cmp r3, 0x54 - bgt _080291C8 - ldr r1, _080291C4 @ =gDynamicBasePower - movs r0, 0x5A - strh r0, [r1] - movs r3, 0x8 - b _080291E4 - .align 2, 0 -_080291C4: .4byte gDynamicBasePower -_080291C8: - cmp r3, 0x5E - bgt _080291DC - ldr r1, _080291D8 @ =gDynamicBasePower - movs r0, 0x6E - strh r0, [r1] - movs r3, 0x9 - b _080291E4 - .align 2, 0 -_080291D8: .4byte gDynamicBasePower -_080291DC: - ldr r1, _08029250 @ =gDynamicBasePower - movs r0, 0x96 - strh r0, [r1] - movs r3, 0xA -_080291E4: - ldr r1, _08029254 @ =gBattleTextBuff1 - movs r2, 0 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x1 - strb r0, [r1, 0x1] - strb r0, [r1, 0x2] - movs r0, 0x2 - strb r0, [r1, 0x3] - strb r3, [r1, 0x4] - movs r0, 0xFF - strb r0, [r1, 0x5] - ldr r1, _08029258 @ =gBankTarget - strb r2, [r1] - ldr r0, _0802925C @ =gNoOfAllBanks - ldrb r3, [r0] - adds r6, r1, 0 - ldr r0, _08029260 @ =gBattlescriptCurrInstr - mov r8, r0 - cmp r2, r3 - bcs _0802923C - adds r4, r6, 0 - ldr r0, _08029264 @ =gBankAttacker - ldrb r5, [r0] - ldr r1, _08029268 @ =gBitTable - mov r12, r1 - ldr r7, _0802926C @ =gAbsentBankFlags -_0802921A: - ldrb r2, [r4] - cmp r2, r5 - beq _08029230 - ldrb r0, [r7] - ldrb r1, [r6] - lsls r1, 2 - add r1, r12 - ldr r1, [r1] - ands r0, r1 - cmp r0, 0 - beq _0802923C -_08029230: - adds r0, r2, 0x1 - strb r0, [r4] - lsls r0, 24 - lsrs r0, 24 - cmp r0, r3 - bcc _0802921A -_0802923C: - mov r1, r8 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08029250: .4byte gDynamicBasePower -_08029254: .4byte gBattleTextBuff1 -_08029258: .4byte gBankTarget -_0802925C: .4byte gNoOfAllBanks -_08029260: .4byte gBattlescriptCurrInstr -_08029264: .4byte gBankAttacker -_08029268: .4byte gBitTable -_0802926C: .4byte gAbsentBankFlags - thumb_func_end atkB9_magnitudedamagecalculation - - thumb_func_start sub_8029270 -sub_8029270: @ 8029270 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _08029294 @ =gMultiHitCounter - ldrb r0, [r0] - cmp r0, 0x1 - bne _080292A0 - ldr r0, _08029298 @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0802929C - movs r0, 0x1 - b _080292BA - .align 2, 0 -_08029294: .4byte gMultiHitCounter -_08029298: .4byte gBankAttacker -_0802929C: - movs r0, 0 - b _080292BA -_080292A0: - ldr r0, _080292B4 @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080292B8 - movs r0, 0x3 - b _080292BA - .align 2, 0 -_080292B4: .4byte gBankAttacker -_080292B8: - movs r0, 0x2 -_080292BA: - bl GetBankByPlayerAI - ldr r1, _0802937C @ =gBankTarget - strb r0, [r1] - ldr r0, _08029380 @ =gActionForBanks - ldr r1, _0802937C @ =gBankTarget - mov r9, r1 - ldrb r3, [r1] - adds r0, r3, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _080293BC - ldr r5, _08029384 @ =gBankAttacker - ldr r0, _08029388 @ =0x02000000 - ldr r2, _0802938C @ =0x00016010 - adds r1, r3, r2 - adds r1, r0 - ldrb r2, [r5] - mov r10, r0 - ldrb r1, [r1] - cmp r2, r1 - bne _080293BC - ldr r4, _08029390 @ =gBattleMons - movs r2, 0x58 - adds r0, r3, 0 - muls r0, r2 - adds r1, r4, 0 - adds r1, 0x4C - adds r0, r1 - ldr r0, [r0] - movs r1, 0x27 - ands r0, r1 - cmp r0, 0 - bne _080293BC - ldrb r0, [r5] - muls r0, r2 - adds r0, r4 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _080293BC - ldr r0, _08029394 @ =gDisableStructs - lsls r1, r3, 3 - subs r1, r3 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x18] - lsls r0, 31 - cmp r0, 0 - bne _080293BC - ldr r0, _08029398 @ =gChosenMovesByBanks - lsls r1, r3, 1 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0xE4 - bne _080293BC - movs r1, 0 - ldr r0, _0802939C @ =gNoOfAllBanks - ldr r7, _080293A0 @ =gCurrentMove - mov r8, r7 - ldr r2, _080293A4 @ =gHitMarker - mov r12, r2 - ldrb r7, [r0] - cmp r1, r7 - bge _0802935A - ldr r6, _080293A8 @ =gTurnOrder - mov r5, r9 - ldr r4, _080293AC @ =gUnknown_02024A76 - movs r3, 0xB - adds r2, r0, 0 -_08029344: - adds r0, r1, r6 - ldrb r0, [r0] - ldrb r7, [r5] - cmp r0, r7 - bne _08029352 - adds r0, r1, r4 - strb r3, [r0] -_08029352: - adds r1, 0x1 - ldrb r0, [r2] - cmp r1, r0 - blt _08029344 -_0802935A: - movs r0, 0xE4 - mov r1, r8 - strh r0, [r1] - ldr r2, _080293B0 @ =gBattlescriptCurrInstr - ldr r0, [r2] - adds r0, 0x5 - str r0, [r2] - ldr r1, _080293B4 @ =0x00016002 - add r1, r10 - movs r0, 0x1 - strb r0, [r1] - mov r7, r12 - ldr r0, [r7] - ldr r1, _080293B8 @ =0xfffffbff - ands r0, r1 - str r0, [r7] - b _080293D6 - .align 2, 0 -_0802937C: .4byte gBankTarget -_08029380: .4byte gActionForBanks -_08029384: .4byte gBankAttacker -_08029388: .4byte 0x02000000 -_0802938C: .4byte 0x00016010 -_08029390: .4byte gBattleMons -_08029394: .4byte gDisableStructs -_08029398: .4byte gChosenMovesByBanks -_0802939C: .4byte gNoOfAllBanks -_080293A0: .4byte gCurrentMove -_080293A4: .4byte gHitMarker -_080293A8: .4byte gTurnOrder -_080293AC: .4byte gUnknown_02024A76 -_080293B0: .4byte gBattlescriptCurrInstr -_080293B4: .4byte 0x00016002 -_080293B8: .4byte 0xfffffbff -_080293BC: - ldr r3, _080293E4 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_080293D6: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080293E4: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8029270 - - thumb_func_start sub_80293E8 -sub_80293E8: @ 80293E8 - push {lr} - ldr r2, _08029408 @ =gBattleWeather - ldrh r1, [r2] - movs r0, 0x60 - ands r0, r1 - cmp r0, 0 - beq _08029414 - ldr r2, _0802940C @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08029410 @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - b _08029426 - .align 2, 0 -_08029408: .4byte gBattleWeather -_0802940C: .4byte gBattleMoveFlags -_08029410: .4byte gBattleCommunication -_08029414: - movs r0, 0x20 - strh r0, [r2] - ldr r1, _08029434 @ =gBattleCommunication - movs r0, 0x4 - strb r0, [r1, 0x5] - ldr r0, _08029438 @ =gWishFutureKnock - adds r0, 0x28 - movs r1, 0x5 - strb r1, [r0] -_08029426: - ldr r1, _0802943C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08029434: .4byte gBattleCommunication -_08029438: .4byte gWishFutureKnock -_0802943C: .4byte gBattlescriptCurrInstr - thumb_func_end sub_80293E8 - - thumb_func_start atkBC_maxattackhalvehp -atkBC_maxattackhalvehp: @ 8029440 - push {r4,r5,lr} - ldr r5, _0802948C @ =gBattleMons - ldr r4, _08029490 @ =gBankAttacker - ldrb r0, [r4] - movs r3, 0x58 - muls r0, r3 - adds r2, r0, r5 - ldrh r0, [r2, 0x2C] - lsrs r1, r0, 1 - cmp r1, 0 - bne _08029458 - movs r1, 0x1 -_08029458: - movs r0, 0x19 - ldrsb r0, [r2, r0] - cmp r0, 0xB - bgt _0802949C - ldrh r0, [r2, 0x28] - cmp r0, r1 - bls _0802949C - movs r0, 0xC - strb r0, [r2, 0x19] - ldr r1, _08029494 @ =gBattleMoveDamage - ldrb r0, [r4] - muls r0, r3 - adds r0, r5 - ldrh r0, [r0, 0x2C] - lsrs r0, 1 - str r0, [r1] - cmp r0, 0 - bne _08029480 - movs r0, 0x1 - str r0, [r1] -_08029480: - ldr r1, _08029498 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _080294B6 - .align 2, 0 -_0802948C: .4byte gBattleMons -_08029490: .4byte gBankAttacker -_08029494: .4byte gBattleMoveDamage -_08029498: .4byte gBattlescriptCurrInstr -_0802949C: - ldr r3, _080294BC @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_080294B6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080294BC: .4byte gBattlescriptCurrInstr - thumb_func_end atkBC_maxattackhalvehp - - thumb_func_start atkBD_copyfoestats -atkBD_copyfoestats: @ 80294C0 - push {r4-r7,lr} - movs r2, 0 - ldr r7, _080294F8 @ =gBattlescriptCurrInstr - ldr r6, _080294FC @ =gBankAttacker - movs r4, 0x58 - ldr r3, _08029500 @ =gUnknown_02024A98 - ldr r5, _08029504 @ =gBankTarget -_080294CE: - ldrb r0, [r6] - adds r1, r0, 0 - muls r1, r4 - adds r1, r2, r1 - adds r1, r3 - ldrb r0, [r5] - muls r0, r4 - adds r0, r2, r0 - adds r0, r3 - ldrb r0, [r0] - strb r0, [r1] - adds r2, 0x1 - cmp r2, 0x7 - ble _080294CE - ldr r0, [r7] - adds r0, 0x5 - str r0, [r7] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080294F8: .4byte gBattlescriptCurrInstr -_080294FC: .4byte gBankAttacker -_08029500: .4byte gUnknown_02024A98 -_08029504: .4byte gBankTarget - thumb_func_end atkBD_copyfoestats - - thumb_func_start atkBE_breakfree -atkBE_breakfree: @ 8029508 - push {r4,r5,lr} - ldr r1, _08029570 @ =gBattleMons - ldr r5, _08029574 @ =gBankAttacker - ldrb r2, [r5] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r3, r0, r1 - ldr r1, [r3] - movs r0, 0xE0 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08029594 - ldr r0, _08029578 @ =0xffff1fff - ands r1, r0 - str r1, [r3] - ldr r1, _0802957C @ =gBankTarget - ldr r2, _08029580 @ =0x02000000 - ldrb r0, [r5] - ldr r3, _08029584 @ =0x00016020 - adds r0, r3 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - ldr r1, _08029588 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - ldrb r0, [r5] - lsls r0, 1 - subs r3, 0x1C - adds r0, r3 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1, 0x2] - ldrb r0, [r5] - lsls r0, 1 - adds r3, 0x1 - adds r0, r3 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - bl b_movescr_stack_push_cursor - ldr r1, _0802958C @ =gBattlescriptCurrInstr - ldr r0, _08029590 @ =gUnknown_081D92C2 - b _0802963E - .align 2, 0 -_08029570: .4byte gBattleMons -_08029574: .4byte gBankAttacker -_08029578: .4byte 0xffff1fff -_0802957C: .4byte gBankTarget -_08029580: .4byte 0x02000000 -_08029584: .4byte 0x00016020 -_08029588: .4byte gBattleTextBuff1 -_0802958C: .4byte gBattlescriptCurrInstr -_08029590: .4byte gUnknown_081D92C2 -_08029594: - ldr r4, _080295C8 @ =gStatuses3 - lsls r0, r2, 2 - adds r3, r0, r4 - ldr r1, [r3] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080295D4 - movs r0, 0x5 - negs r0, r0 - ands r1, r0 - str r1, [r3] - ldrb r1, [r5] - lsls r1, 2 - adds r1, r4 - ldr r0, [r1] - movs r2, 0x4 - negs r2, r2 - ands r0, r2 - str r0, [r1] - bl b_movescr_stack_push_cursor - ldr r1, _080295CC @ =gBattlescriptCurrInstr - ldr r0, _080295D0 @ =gUnknown_081D92C9 - b _0802963E - .align 2, 0 -_080295C8: .4byte gStatuses3 -_080295CC: .4byte gBattlescriptCurrInstr -_080295D0: .4byte gUnknown_081D92C9 -_080295D4: - adds r0, r2, 0 - bl GetBankSide - ldr r4, _08029624 @ =gSideAffecting - lsls r0, 24 - lsrs r0, 23 - adds r0, r4 - ldrh r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08029638 - ldrb r0, [r5] - bl GetBankSide - lsls r0, 24 - lsrs r0, 23 - adds r0, r4 - ldrh r2, [r0] - ldr r1, _08029628 @ =0x0000ffef - ands r1, r2 - movs r4, 0 - strh r1, [r0] - ldrb r0, [r5] - bl GetBankSide - ldr r2, _0802962C @ =gSideTimer - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - strb r4, [r1, 0x6] - bl b_movescr_stack_push_cursor - ldr r1, _08029630 @ =gBattlescriptCurrInstr - ldr r0, _08029634 @ =gUnknown_081D92D0 - b _0802963E - .align 2, 0 -_08029624: .4byte gSideAffecting -_08029628: .4byte 0x0000ffef -_0802962C: .4byte gSideTimer -_08029630: .4byte gBattlescriptCurrInstr -_08029634: .4byte gUnknown_081D92D0 -_08029638: - ldr r1, _08029648 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 -_0802963E: - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08029648: .4byte gBattlescriptCurrInstr - thumb_func_end atkBE_breakfree - - thumb_func_start sub_802964C -sub_802964C: @ 802964C - ldr r1, _08029670 @ =gBattleMons - ldr r0, _08029674 @ =gBankAttacker - ldrb r2, [r0] - movs r0, 0x58 - muls r2, r0 - adds r1, 0x50 - adds r2, r1 - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 23 - orrs r0, r1 - str r0, [r2] - ldr r1, _08029678 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08029670: .4byte gBattleMons -_08029674: .4byte gBankAttacker -_08029678: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802964C - - thumb_func_start atkC0_recoverbasedonsunlight -atkC0_recoverbasedonsunlight: @ 802967C - push {r4-r7,lr} - sub sp, 0x4 - ldr r1, _080296E8 @ =gBankTarget - ldr r5, _080296EC @ =gBankAttacker - ldrb r0, [r5] - strb r0, [r1] - ldr r7, _080296F0 @ =gBattleMons - ldrb r0, [r5] - movs r6, 0x58 - muls r0, r6 - adds r0, r7 - ldrh r1, [r0, 0x28] - ldrh r0, [r0, 0x2C] - cmp r1, r0 - beq _0802975C - ldr r4, _080296F4 @ =gBattleWeather - ldrh r0, [r4] - cmp r0, 0 - beq _080296CE - movs r0, 0 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0xD - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _080296CE - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x4D - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _080296FC -_080296CE: - ldr r3, _080296F8 @ =gBattleMoveDamage - ldr r2, _080296F0 @ =gBattleMons - ldr r0, _080296EC @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0, 0x2C] - lsrs r0, 1 - str r0, [r3] - adds r1, r3, 0 - b _08029736 - .align 2, 0 -_080296E8: .4byte gBankTarget -_080296EC: .4byte gBankAttacker -_080296F0: .4byte gBattleMons -_080296F4: .4byte gBattleWeather -_080296F8: .4byte gBattleMoveDamage -_080296FC: - ldrh r1, [r4] - movs r0, 0x60 - ands r0, r1 - cmp r0, 0 - beq _08029728 - ldr r4, _08029724 @ =gBattleMoveDamage - ldrb r0, [r5] - muls r0, r6 - adds r0, r7 - ldrh r1, [r0, 0x2C] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - movs r1, 0x1E - bl __divsi3 - str r0, [r4] - adds r1, r4, 0 - b _08029736 - .align 2, 0 -_08029724: .4byte gBattleMoveDamage -_08029728: - ldr r1, _08029754 @ =gBattleMoveDamage - ldrb r0, [r5] - muls r0, r6 - adds r0, r7 - ldrh r0, [r0, 0x2C] - lsrs r0, 2 - str r0, [r1] -_08029736: - adds r2, r1, 0 - ldr r0, [r2] - cmp r0, 0 - bne _08029742 - movs r0, 0x1 - str r0, [r2] -_08029742: - ldr r0, [r1] - negs r0, r0 - str r0, [r1] - ldr r1, _08029758 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08029776 - .align 2, 0 -_08029754: .4byte gBattleMoveDamage -_08029758: .4byte gBattlescriptCurrInstr -_0802975C: - ldr r3, _08029780 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08029776: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08029780: .4byte gBattlescriptCurrInstr - thumb_func_end atkC0_recoverbasedonsunlight - - thumb_func_start sub_8029784 -sub_8029784: @ 8029784 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r2, _08029894 @ =gBattleMons - ldr r0, _08029898 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - adds r4, r1, 0 - muls r4, r0 - adds r4, r2 - ldrb r0, [r4, 0x14] - mov r10, r0 - mov r7, r10 - lsls r7, 27 - adds r0, r7, 0 - lsrs r0, 27 - mov r10, r0 - movs r1, 0x2 - mov r2, r10 - ands r2, r1 - asrs r2, 1 - ldrh r7, [r4, 0x14] - mov r9, r7 - mov r0, r9 - lsls r0, 22 - mov r9, r0 - lsrs r3, r0, 27 - adds r0, r1, 0 - ands r0, r3 - orrs r2, r0 - ldrb r7, [r4, 0x15] - mov r8, r7 - mov r0, r8 - lsls r0, 25 - mov r8, r0 - lsrs r3, r0, 27 - adds r0, r1, 0 - ands r0, r3 - lsls r0, 1 - orrs r2, r0 - ldr r6, [r4, 0x14] - lsls r6, 12 - lsrs r3, r6, 27 - adds r0, r1, 0 - ands r0, r3 - lsls r0, 2 - orrs r2, r0 - ldrh r5, [r4, 0x16] - lsls r5, 23 - lsrs r3, r5, 27 - adds r0, r1, 0 - ands r0, r3 - lsls r0, 3 - orrs r2, r0 - ldrb r3, [r4, 0x17] - lsls r3, 26 - lsrs r0, r3, 27 - ands r1, r0 - lsls r1, 4 - orrs r2, r1 - movs r1, 0x1 - adds r4, r1, 0 - mov r7, r10 - ands r4, r7 - mov r0, r9 - lsrs r0, 27 - mov r9, r0 - adds r0, r1, 0 - mov r7, r9 - ands r0, r7 - lsls r0, 1 - orrs r4, r0 - mov r0, r8 - lsrs r0, 27 - mov r8, r0 - adds r0, r1, 0 - mov r7, r8 - ands r0, r7 - lsls r0, 2 - orrs r4, r0 - lsrs r6, 27 - adds r0, r1, 0 - ands r0, r6 - lsls r0, 3 - orrs r4, r0 - lsrs r5, 27 - adds r0, r1, 0 - ands r0, r5 - lsls r0, 4 - orrs r4, r0 - lsrs r3, 27 - ands r1, r3 - lsls r1, 5 - orrs r4, r1 - ldr r5, _0802989C @ =gDynamicBasePower - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - movs r1, 0x3F - bl __divsi3 - adds r0, 0x1E - strh r0, [r5] - ldr r5, _080298A0 @ =0x02000000 - lsls r0, r4, 4 - subs r0, r4 - movs r1, 0x3F - bl __divsi3 - adds r1, r0, 0x1 - ldr r0, _080298A4 @ =0x0001601c - adds r5, r0 - strb r1, [r5] - lsls r0, r1, 24 - lsrs r0, 24 - cmp r0, 0x8 - bls _08029876 - adds r0, r1, 0x1 - strb r0, [r5] -_08029876: - ldrb r0, [r5] - movs r1, 0xC0 - orrs r0, r1 - strb r0, [r5] - ldr r1, _080298A8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08029894: .4byte gBattleMons -_08029898: .4byte gBankAttacker -_0802989C: .4byte gDynamicBasePower -_080298A0: .4byte 0x02000000 -_080298A4: .4byte 0x0001601c -_080298A8: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8029784 - - thumb_func_start atkC2_selectnexttarget -atkC2_selectnexttarget: @ 80298AC - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _08029908 @ =gBankTarget - movs r1, 0 - strb r1, [r0] - ldr r1, _0802990C @ =gNoOfAllBanks - ldrb r1, [r1] - adds r6, r0, 0 - ldr r0, _08029910 @ =gBattlescriptCurrInstr - mov r8, r0 - cmp r1, 0 - beq _080298F6 - adds r3, r6, 0 - ldr r0, _08029914 @ =gBankAttacker - ldrb r5, [r0] - ldr r0, _08029918 @ =gBitTable - mov r12, r0 - adds r4, r1, 0 - ldr r7, _0802991C @ =gAbsentBankFlags -_080298D4: - ldrb r2, [r3] - cmp r2, r5 - beq _080298EA - ldrb r0, [r7] - ldrb r1, [r6] - lsls r1, 2 - add r1, r12 - ldr r1, [r1] - ands r0, r1 - cmp r0, 0 - beq _080298F6 -_080298EA: - adds r0, r2, 0x1 - strb r0, [r3] - lsls r0, 24 - lsrs r0, 24 - cmp r0, r4 - bcc _080298D4 -_080298F6: - mov r1, r8 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08029908: .4byte gBankTarget -_0802990C: .4byte gNoOfAllBanks -_08029910: .4byte gBattlescriptCurrInstr -_08029914: .4byte gBankAttacker -_08029918: .4byte gBitTable -_0802991C: .4byte gAbsentBankFlags - thumb_func_end atkC2_selectnexttarget - - thumb_func_start atkC3_setfutureattack -atkC3_setfutureattack: @ 8029920 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - ldr r0, _08029958 @ =gWishFutureKnock - mov r8, r0 - ldr r7, _0802995C @ =gBankTarget - ldrb r1, [r7] - adds r0, r1, r0 - ldrb r6, [r0] - cmp r6, 0 - beq _08029964 - ldr r3, _08029960 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08029A2E - .align 2, 0 -_08029958: .4byte gWishFutureKnock -_0802995C: .4byte gBankTarget -_08029960: .4byte gBattlescriptCurrInstr -_08029964: - lsls r1, 1 - mov r0, r8 - adds r0, 0x18 - adds r1, r0 - ldr r2, _08029A04 @ =gCurrentMove - mov r9, r2 - ldrh r0, [r2] - strh r0, [r1] - mov r0, r8 - adds r0, 0x4 - ldrb r4, [r7] - adds r0, r4 - ldr r5, _08029A08 @ =gBankAttacker - ldrb r1, [r5] - strb r1, [r0] - ldrb r0, [r7] - add r0, r8 - movs r1, 0x3 - strb r1, [r0] - ldr r4, _08029A0C @ =gSideAffecting - ldrb r0, [r7] - bl GetBankIdentity - movs r1, 0x1 - mov r10, r1 - ands r1, r0 - lsls r1, 1 - adds r1, r4 - ldrh r3, [r1] - ldrb r0, [r5] - movs r4, 0x58 - muls r0, r4 - ldr r2, _08029A10 @ =gBattleMons - adds r0, r2 - ldrb r1, [r7] - muls r1, r4 - adds r1, r2 - mov r4, r9 - ldrh r2, [r4] - str r6, [sp] - str r6, [sp, 0x4] - ldrb r4, [r5] - str r4, [sp, 0x8] - ldrb r4, [r7] - str r4, [sp, 0xC] - bl CalculateBaseDamage - ldrb r1, [r7] - lsls r1, 2 - mov r2, r8 - adds r2, 0x8 - adds r1, r2 - str r0, [r1] - ldr r1, _08029A14 @ =gProtectStructs - ldrb r0, [r5] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 28 - cmp r0, 0 - bge _080299F2 - ldrb r4, [r7] - lsls r4, 2 - adds r4, r2 - ldr r1, [r4] - lsls r0, r1, 4 - subs r0, r1 - movs r1, 0xA - bl __divsi3 - str r0, [r4] -_080299F2: - mov r0, r9 - ldrh r1, [r0] - ldr r0, _08029A18 @ =0x00000161 - cmp r1, r0 - bne _08029A20 - ldr r0, _08029A1C @ =gBattleCommunication - mov r1, r10 - strb r1, [r0, 0x5] - b _08029A26 - .align 2, 0 -_08029A04: .4byte gCurrentMove -_08029A08: .4byte gBankAttacker -_08029A0C: .4byte gSideAffecting -_08029A10: .4byte gBattleMons -_08029A14: .4byte gProtectStructs -_08029A18: .4byte 0x00000161 -_08029A1C: .4byte gBattleCommunication -_08029A20: - ldr r1, _08029A40 @ =gBattleCommunication - movs r0, 0 - strb r0, [r1, 0x5] -_08029A26: - ldr r1, _08029A44 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08029A2E: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08029A40: .4byte gBattleCommunication -_08029A44: .4byte gBattlescriptCurrInstr - thumb_func_end atkC3_setfutureattack - - thumb_func_start atkC4_802B910 -atkC4_802B910: @ 8029A48 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r0, _08029A8C @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - ldr r7, _08029A90 @ =gEnemyParty - cmp r0, 0 - bne _08029A62 - ldr r7, _08029A94 @ =gPlayerParty -_08029A62: - ldr r2, _08029A98 @ =gBattleMons - ldr r0, _08029A9C @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0, 0x28] - cmp r0, 0 - bne _08029AA4 - ldr r3, _08029AA0 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - b _08029C40 - .align 2, 0 -_08029A8C: .4byte gBankAttacker -_08029A90: .4byte gEnemyParty -_08029A94: .4byte gPlayerParty -_08029A98: .4byte gBattleMons -_08029A9C: .4byte gBankTarget -_08029AA0: .4byte gBattlescriptCurrInstr -_08029AA4: - ldr r6, _08029BE0 @ =gBattleCommunication - ldrb r0, [r6] - mov r8, r0 - cmp r0, 0x5 - bls _08029AB0 - b _08029C0C -_08029AB0: - adds r4, r6, 0 - movs r5, 0x64 -_08029AB4: - ldrb r0, [r4] - muls r0, r5 - adds r0, r7, r0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _08029AF8 - ldrb r0, [r6] - muls r0, r5 - adds r0, r7, r0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _08029AF8 - ldrb r0, [r4] - muls r0, r5 - adds r0, r7, r0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - beq _08029AF8 - ldrb r0, [r4] - muls r0, r5 - adds r0, r7, r0 - movs r1, 0x37 - bl GetMonData - cmp r0, 0 - beq _08029B08 -_08029AF8: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - adds r6, r4, 0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bls _08029AB4 -_08029B08: - ldr r1, _08029BE0 @ =gBattleCommunication - mov r9, r1 - ldrb r2, [r1] - cmp r2, 0x5 - bhi _08029C0C - ldr r1, _08029BE4 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x4 - strb r0, [r1, 0x1] - ldr r6, _08029BE8 @ =gBankAttacker - ldrb r0, [r6] - strb r0, [r1, 0x2] - strb r2, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _08029BEC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x9 - str r0, [r1] - ldr r2, _08029BF0 @ =gBattleMoveDamage - mov r8, r2 - ldr r5, _08029BF4 @ =gBaseStats - mov r1, r9 - ldrb r0, [r1] - movs r4, 0x64 - muls r0, r4 - adds r0, r7, r0 - movs r1, 0xB - bl GetMonData - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r3, [r1, 0x1] - mov r2, r8 - str r3, [r2] - ldr r2, _08029BF8 @ =gBattleMoves - ldr r0, _08029BFC @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - muls r0, r3 - mov r1, r8 - str r0, [r1] - mov r2, r9 - ldrb r0, [r2] - muls r0, r4 - adds r0, r7, r0 - movs r1, 0x38 - bl GetMonData - lsls r0, 1 - movs r1, 0x5 - bl __udivsi3 - adds r0, 0x2 - mov r2, r8 - ldr r1, [r2] - muls r0, r1 - str r0, [r2] - ldr r3, _08029C00 @ =gBattleMons - ldr r1, _08029C04 @ =gBankTarget - ldrb r2, [r1] - movs r1, 0x58 - muls r1, r2 - adds r1, r3 - ldrh r2, [r1] - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r5 - ldrb r1, [r1, 0x2] - bl __divsi3 - mov r1, r8 - str r0, [r1] - movs r1, 0x32 - bl __divsi3 - adds r2, r0, 0x2 - mov r0, r8 - str r2, [r0] - ldr r1, _08029C08 @ =gProtectStructs - ldrb r0, [r6] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 28 - cmp r0, 0 - bge _08029BD4 - lsls r0, r2, 4 - subs r0, r2 - movs r1, 0xA - bl __divsi3 - mov r1, r8 - str r0, [r1] -_08029BD4: - mov r2, r9 - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - b _08029C46 - .align 2, 0 -_08029BE0: .4byte gBattleCommunication -_08029BE4: .4byte gBattleTextBuff1 -_08029BE8: .4byte gBankAttacker -_08029BEC: .4byte gBattlescriptCurrInstr -_08029BF0: .4byte gBattleMoveDamage -_08029BF4: .4byte gBaseStats -_08029BF8: .4byte gBattleMoves -_08029BFC: .4byte gCurrentMove -_08029C00: .4byte gBattleMons -_08029C04: .4byte gBankTarget -_08029C08: .4byte gProtectStructs -_08029C0C: - mov r0, r8 - cmp r0, 0 - beq _08029C2C - ldr r3, _08029C28 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - b _08029C40 - .align 2, 0 -_08029C28: .4byte gBattlescriptCurrInstr -_08029C2C: - ldr r3, _08029C54 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x5] - ldrb r0, [r2, 0x6] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x7] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x8] -_08029C40: - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08029C46: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08029C54: .4byte gBattlescriptCurrInstr - thumb_func_end atkC4_802B910 - - thumb_func_start atkC5_hidepreattack -atkC5_hidepreattack: @ 8029C58 - push {lr} - ldr r0, _08029C6C @ =gCurrentMove - ldrh r1, [r0] - cmp r1, 0x5B - beq _08029C98 - cmp r1, 0x5B - bgt _08029C70 - cmp r1, 0x13 - beq _08029C7C - b _08029CC4 - .align 2, 0 -_08029C6C: .4byte gCurrentMove -_08029C70: - ldr r0, _08029C8C @ =0x00000123 - cmp r1, r0 - beq _08029CB0 - adds r0, 0x31 - cmp r1, r0 - bne _08029CC4 -_08029C7C: - ldr r2, _08029C90 @ =gStatuses3 - ldr r0, _08029C94 @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 2 - adds r1, r2 - ldr r0, [r1] - movs r2, 0x40 - b _08029CC0 - .align 2, 0 -_08029C8C: .4byte 0x00000123 -_08029C90: .4byte gStatuses3 -_08029C94: .4byte gBankAttacker -_08029C98: - ldr r2, _08029CA8 @ =gStatuses3 - ldr r0, _08029CAC @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 2 - adds r1, r2 - ldr r0, [r1] - movs r2, 0x80 - b _08029CC0 - .align 2, 0 -_08029CA8: .4byte gStatuses3 -_08029CAC: .4byte gBankAttacker -_08029CB0: - ldr r2, _08029CD0 @ =gStatuses3 - ldr r0, _08029CD4 @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 2 - adds r1, r2 - ldr r0, [r1] - movs r2, 0x80 - lsls r2, 11 -_08029CC0: - orrs r0, r2 - str r0, [r1] -_08029CC4: - ldr r1, _08029CD8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08029CD0: .4byte gStatuses3 -_08029CD4: .4byte gBankAttacker -_08029CD8: .4byte gBattlescriptCurrInstr - thumb_func_end atkC5_hidepreattack - - thumb_func_start atkC6_unhidepostattack -atkC6_unhidepostattack: @ 8029CDC - push {lr} - ldr r0, _08029CF0 @ =gCurrentMove - ldrh r1, [r0] - cmp r1, 0x5B - beq _08029D20 - cmp r1, 0x5B - bgt _08029CF4 - cmp r1, 0x13 - beq _08029D00 - b _08029D4E - .align 2, 0 -_08029CF0: .4byte gCurrentMove -_08029CF4: - ldr r0, _08029D14 @ =0x00000123 - cmp r1, r0 - beq _08029D3C - adds r0, 0x31 - cmp r1, r0 - bne _08029D4E -_08029D00: - ldr r2, _08029D18 @ =gStatuses3 - ldr r0, _08029D1C @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 2 - adds r1, r2 - ldr r0, [r1] - movs r2, 0x41 - negs r2, r2 - b _08029D4A - .align 2, 0 -_08029D14: .4byte 0x00000123 -_08029D18: .4byte gStatuses3 -_08029D1C: .4byte gBankAttacker -_08029D20: - ldr r2, _08029D34 @ =gStatuses3 - ldr r0, _08029D38 @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 2 - adds r1, r2 - ldr r0, [r1] - movs r2, 0x81 - negs r2, r2 - b _08029D4A - .align 2, 0 -_08029D34: .4byte gStatuses3 -_08029D38: .4byte gBankAttacker -_08029D3C: - ldr r2, _08029D5C @ =gStatuses3 - ldr r0, _08029D60 @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 2 - adds r1, r2 - ldr r0, [r1] - ldr r2, _08029D64 @ =0xfffbffff -_08029D4A: - ands r0, r2 - str r0, [r1] -_08029D4E: - ldr r1, _08029D68 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08029D5C: .4byte gStatuses3 -_08029D60: .4byte gBankAttacker -_08029D64: .4byte 0xfffbffff -_08029D68: .4byte gBattlescriptCurrInstr - thumb_func_end atkC6_unhidepostattack - - thumb_func_start atkC7_setminimize -atkC7_setminimize: @ 8029D6C - push {lr} - ldr r0, _08029D9C @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 18 - ands r0, r1 - cmp r0, 0 - beq _08029D90 - ldr r2, _08029DA0 @ =gStatuses3 - ldr r0, _08029DA4 @ =gBankAttacker - ldrb r1, [r0] - lsls r1, 2 - adds r1, r2 - ldr r0, [r1] - movs r2, 0x80 - lsls r2, 1 - orrs r0, r2 - str r0, [r1] -_08029D90: - ldr r1, _08029DA8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08029D9C: .4byte gHitMarker -_08029DA0: .4byte gStatuses3 -_08029DA4: .4byte gBankAttacker -_08029DA8: .4byte gBattlescriptCurrInstr - thumb_func_end atkC7_setminimize - - thumb_func_start sub_8029DAC -sub_8029DAC: @ 8029DAC - push {lr} - ldr r3, _08029DD0 @ =gBattleWeather - ldrh r1, [r3] - movs r2, 0x80 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _08029DDC - ldr r2, _08029DD4 @ =gBattleMoveFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08029DD8 @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - b _08029DEA - .align 2, 0 -_08029DD0: .4byte gBattleWeather -_08029DD4: .4byte gBattleMoveFlags -_08029DD8: .4byte gBattleCommunication -_08029DDC: - strh r2, [r3] - ldr r0, _08029DF8 @ =gBattleCommunication - movs r1, 0x5 - strb r1, [r0, 0x5] - ldr r0, _08029DFC @ =gWishFutureKnock - adds r0, 0x28 - strb r1, [r0] -_08029DEA: - ldr r1, _08029E00 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08029DF8: .4byte gBattleCommunication -_08029DFC: .4byte gWishFutureKnock -_08029E00: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8029DAC - - thumb_func_start atkC9_jumpifattackandspecialattackcannotfall -atkC9_jumpifattackandspecialattackcannotfall: @ 8029E04 - push {r4,lr} - ldr r2, _08029E48 @ =gBattleMons - ldr r0, _08029E4C @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r1, r0, r2 - movs r0, 0x19 - ldrsb r0, [r1, r0] - adds r3, r2, 0 - cmp r0, 0 - bne _08029E58 - movs r0, 0x1C - ldrsb r0, [r1, r0] - cmp r0, 0 - bne _08029E58 - ldr r0, _08029E50 @ =gBattleCommunication - ldrb r0, [r0, 0x6] - cmp r0, 0x1 - beq _08029E58 - ldr r3, _08029E54 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08029E84 - .align 2, 0 -_08029E48: .4byte gBattleMons -_08029E4C: .4byte gBankTarget -_08029E50: .4byte gBattleCommunication -_08029E54: .4byte gBattlescriptCurrInstr -_08029E58: - ldr r4, _08029E8C @ =gActiveBank - ldr r0, _08029E90 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r4] - ldr r2, _08029E94 @ =gBattleMoveDamage - ldrb r1, [r4] - movs r0, 0x58 - muls r0, r1 - adds r0, r3 - ldrh r0, [r0, 0x28] - str r0, [r2] - ldr r1, _08029E98 @ =0x00007fff - movs r0, 0 - bl EmitHealthBarUpdate - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r1, _08029E9C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08029E84: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08029E8C: .4byte gActiveBank -_08029E90: .4byte gBankAttacker -_08029E94: .4byte gBattleMoveDamage -_08029E98: .4byte 0x00007fff -_08029E9C: .4byte gBattlescriptCurrInstr - thumb_func_end atkC9_jumpifattackandspecialattackcannotfall - - thumb_func_start atkCA_setforcedtarget -atkCA_setforcedtarget: @ 8029EA0 - push {r4,r5,lr} - ldr r4, _08029EE0 @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - ldr r5, _08029EE4 @ =gSideTimer - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - movs r0, 0x1 - strb r0, [r1, 0x8] - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r0, [r4] - strb r0, [r1, 0x9] - ldr r1, _08029EE8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08029EE0: .4byte gBankAttacker -_08029EE4: .4byte gSideTimer -_08029EE8: .4byte gBattlescriptCurrInstr - thumb_func_end atkCA_setforcedtarget - - thumb_func_start atkCB_setcharge -atkCB_setcharge: @ 8029EEC - push {r4,lr} - ldr r0, _08029F40 @ =gStatuses3 - ldr r3, _08029F44 @ =gBankAttacker - ldrb r1, [r3] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - movs r2, 0x80 - lsls r2, 2 - orrs r0, r2 - str r0, [r1] - ldr r4, _08029F48 @ =gDisableStructs - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r2, [r0, 0x12] - movs r1, 0x10 - negs r1, r1 - ands r1, r2 - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0, 0x12] - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r2, [r0, 0x12] - movs r1, 0xF - ands r1, r2 - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0, 0x12] - ldr r1, _08029F4C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08029F40: .4byte gStatuses3 -_08029F44: .4byte gBankAttacker -_08029F48: .4byte gDisableStructs -_08029F4C: .4byte gBattlescriptCurrInstr - thumb_func_end atkCB_setcharge - - thumb_func_start atkCC_callterrainattack -atkCC_callterrainattack: @ 8029F50 - push {r4,lr} - ldr r2, _08029FA0 @ =gHitMarker - ldr r0, [r2] - ldr r1, _08029FA4 @ =0xfffffbff - ands r0, r1 - str r0, [r2] - ldr r4, _08029FA8 @ =gCurrentMove - ldr r1, _08029FAC @ =gNaturePowerMoves - ldr r0, _08029FB0 @ =gBattleTerrain - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r4] - ldrh r0, [r4] - movs r1, 0 - bl sub_801B5C0 - ldr r1, _08029FB4 @ =gBankTarget - strb r0, [r1] - ldr r3, _08029FB8 @ =gUnknown_081D6BBC - ldr r2, _08029FBC @ =gBattleMoves - ldrh r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - bl b_movescr_stack_push - ldr r1, _08029FC0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08029FA0: .4byte gHitMarker -_08029FA4: .4byte 0xfffffbff -_08029FA8: .4byte gCurrentMove -_08029FAC: .4byte gNaturePowerMoves -_08029FB0: .4byte gBattleTerrain -_08029FB4: .4byte gBankTarget -_08029FB8: .4byte gUnknown_081D6BBC -_08029FBC: .4byte gBattleMoves -_08029FC0: .4byte gBattlescriptCurrInstr - thumb_func_end atkCC_callterrainattack - - thumb_func_start atkCD_cureifburnedparalysedorpoisoned -atkCD_cureifburnedparalysedorpoisoned: @ 8029FC4 - push {r4-r6,lr} - sub sp, 0x4 - ldr r1, _0802A010 @ =gBattleMons - ldr r3, _0802A014 @ =gBankAttacker - ldrb r0, [r3] - movs r6, 0x58 - muls r0, r6 - adds r5, r1, 0 - adds r5, 0x4C - adds r2, r0, r5 - ldr r0, [r2] - movs r1, 0xD8 - ands r0, r1 - cmp r0, 0 - beq _0802A020 - movs r0, 0 - str r0, [r2] - ldr r1, _0802A018 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - ldr r4, _0802A01C @ =gActiveBank - ldrb r0, [r3] - strb r0, [r4] - ldrb r0, [r4] - muls r0, r6 - adds r0, r5 - str r0, [sp] - movs r0, 0 - movs r1, 0x28 - movs r2, 0 - movs r3, 0x4 - bl EmitSetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution - b _0802A03A - .align 2, 0 -_0802A010: .4byte gBattleMons -_0802A014: .4byte gBankAttacker -_0802A018: .4byte gBattlescriptCurrInstr -_0802A01C: .4byte gActiveBank -_0802A020: - ldr r3, _0802A044 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802A03A: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802A044: .4byte gBattlescriptCurrInstr - thumb_func_end atkCD_cureifburnedparalysedorpoisoned - - thumb_func_start atkCE_settorment -atkCE_settorment: @ 802A048 - push {lr} - ldr r1, _0802A080 @ =gBattleMons - ldr r0, _0802A084 @ =gBankTarget - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r1, [r0] - movs r2, 0x80 - lsls r2, 24 - cmp r1, 0 - bge _0802A08C - ldr r3, _0802A088 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802A098 - .align 2, 0 -_0802A080: .4byte gBattleMons -_0802A084: .4byte gBankTarget -_0802A088: .4byte gBattlescriptCurrInstr -_0802A08C: - orrs r1, r2 - str r1, [r0] - ldr r1, _0802A09C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802A098: - pop {r0} - bx r0 - .align 2, 0 -_0802A09C: .4byte gBattlescriptCurrInstr - thumb_func_end atkCE_settorment - - thumb_func_start atkCF_jumpifnodamage -atkCF_jumpifnodamage: @ 802A0A0 - push {lr} - ldr r2, _0802A0CC @ =gProtectStructs - ldr r0, _0802A0D0 @ =gBankAttacker - ldrb r0, [r0] - lsls r1, r0, 4 - adds r0, r2, 0x4 - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - bne _0802A0C0 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - beq _0802A0D8 -_0802A0C0: - ldr r1, _0802A0D4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802A0F2 - .align 2, 0 -_0802A0CC: .4byte gProtectStructs -_0802A0D0: .4byte gBankAttacker -_0802A0D4: .4byte gBattlescriptCurrInstr -_0802A0D8: - ldr r3, _0802A0F8 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802A0F2: - pop {r0} - bx r0 - .align 2, 0 -_0802A0F8: .4byte gBattlescriptCurrInstr - thumb_func_end atkCF_jumpifnodamage - - thumb_func_start atkD0_settaunt -atkD0_settaunt: @ 802A0FC - push {r4,lr} - ldr r4, _0802A140 @ =gDisableStructs - ldr r3, _0802A144 @ =gBankTarget - ldrb r0, [r3] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r2, r1, r4 - ldrb r1, [r2, 0x13] - lsls r0, r1, 28 - cmp r0, 0 - bne _0802A14C - movs r0, 0x10 - negs r0, r0 - ands r0, r1 - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2, 0x13] - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r2, [r0, 0x13] - movs r1, 0xF - ands r1, r2 - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0, 0x13] - ldr r1, _0802A148 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802A166 - .align 2, 0 -_0802A140: .4byte gDisableStructs -_0802A144: .4byte gBankTarget -_0802A148: .4byte gBattlescriptCurrInstr -_0802A14C: - ldr r3, _0802A16C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802A166: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802A16C: .4byte gBattlescriptCurrInstr - thumb_func_end atkD0_settaunt - - thumb_func_start sub_802A170 -sub_802A170: @ 802A170 - push {r4,lr} - ldr r4, _0802A1D8 @ =gBankAttacker - ldrb r0, [r4] - bl GetBankIdentity - movs r1, 0x2 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByPlayerAI - ldr r3, _0802A1DC @ =gBankTarget - strb r0, [r3] - ldr r0, _0802A1E0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0802A1F4 - ldr r0, _0802A1E4 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _0802A1E8 @ =gBitTable - ldrb r3, [r3] - lsls r0, r3, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _0802A1F4 - ldr r1, _0802A1EC @ =gProtectStructs - ldrb r0, [r4] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 28 - cmp r0, 0 - blt _0802A1F4 - lsls r0, r3, 4 - adds r2, r0, r1 - ldrb r1, [r2] - lsls r0, r1, 28 - cmp r0, 0 - blt _0802A1F4 - movs r0, 0x8 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0802A1F0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802A20E - .align 2, 0 -_0802A1D8: .4byte gBankAttacker -_0802A1DC: .4byte gBankTarget -_0802A1E0: .4byte gBattleTypeFlags -_0802A1E4: .4byte gAbsentBankFlags -_0802A1E8: .4byte gBitTable -_0802A1EC: .4byte gProtectStructs -_0802A1F0: .4byte gBattlescriptCurrInstr -_0802A1F4: - ldr r3, _0802A214 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802A20E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802A214: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802A170 - - thumb_func_start sub_802A218 -sub_802A218: @ 802A218 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _0802A30C @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0802A24C - ldr r0, _0802A310 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0802A314 @ =0x00000902 - ands r0, r1 - cmp r0, 0 - bne _0802A24C - ldr r0, _0802A318 @ =gTrainerBattleOpponent - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _0802A2EE -_0802A24C: - ldr r4, _0802A30C @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _0802A310 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0802A314 @ =0x00000902 - ands r0, r1 - cmp r0, 0 - bne _0802A290 - ldr r0, _0802A318 @ =gTrainerBattleOpponent - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - beq _0802A290 - ldr r0, _0802A31C @ =gWishFutureKnock - adds r0, 0x29 - adds r0, r2, r0 - ldrb r1, [r0] - ldr r3, _0802A320 @ =gBitTable - ldr r2, _0802A324 @ =gBattlePartyID - ldrb r0, [r4] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _0802A2EE -_0802A290: - ldr r0, _0802A328 @ =gBattleMons - mov r9, r0 - ldr r1, _0802A30C @ =gBankAttacker - ldrb r4, [r1] - movs r2, 0x58 - mov r8, r2 - mov r0, r8 - muls r0, r4 - mov r3, r9 - adds r5, r0, r3 - ldrh r3, [r5, 0x2E] - adds r1, r3, 0 - cmp r1, 0 - bne _0802A2BE - ldr r0, _0802A32C @ =gBankTarget - ldrb r0, [r0] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - add r0, r9 - ldrh r0, [r0, 0x2E] - cmp r0, 0 - beq _0802A2EE -_0802A2BE: - cmp r1, 0xAF - beq _0802A2EE - ldr r7, _0802A32C @ =gBankTarget - ldrb r0, [r7] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - mov r1, r9 - adds r2, r0, r1 - ldrh r1, [r2, 0x2E] - cmp r1, 0xAF - beq _0802A2EE - adds r0, r3, 0 - subs r0, 0x79 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xB - bls _0802A2EE - adds r0, r1, 0 - subs r0, 0x79 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xB - bhi _0802A334 -_0802A2EE: - ldr r3, _0802A330 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802A49A - .align 2, 0 -_0802A30C: .4byte gBankAttacker -_0802A310: .4byte gBattleTypeFlags -_0802A314: .4byte 0x00000902 -_0802A318: .4byte gTrainerBattleOpponent -_0802A31C: .4byte gWishFutureKnock -_0802A320: .4byte gBitTable -_0802A324: .4byte gBattlePartyID -_0802A328: .4byte gBattleMons -_0802A32C: .4byte gBankTarget -_0802A330: .4byte gBattlescriptCurrInstr -_0802A334: - adds r0, r2, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x3C - bne _0802A36C - ldr r1, _0802A360 @ =gBattlescriptCurrInstr - ldr r0, _0802A364 @ =BattleScript_NoItemSteal - str r0, [r1] - ldr r1, _0802A368 @ =gLastUsedAbility - ldrb r0, [r7] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - add r0, r9 - adds r0, 0x20 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r7] - ldrb r1, [r1] - bl RecordAbilityBattle - b _0802A49A - .align 2, 0 -_0802A360: .4byte gBattlescriptCurrInstr -_0802A364: .4byte BattleScript_NoItemSteal -_0802A368: .4byte gLastUsedAbility -_0802A36C: - lsls r0, r4, 1 - ldr r4, _0802A458 @ =0x020160f0 - adds r6, r0, r4 - ldrh r5, [r5, 0x2E] - mov r10, r5 - strh r1, [r6] - ldr r3, _0802A45C @ =gBankAttacker - ldrb r0, [r3] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - add r0, r9 - movs r1, 0 - strh r1, [r0, 0x2E] - ldrb r0, [r7] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - add r0, r9 - mov r3, r10 - strh r3, [r0, 0x2E] - ldr r5, _0802A460 @ =gActiveBank - ldr r1, _0802A45C @ =gBankAttacker - ldrb r0, [r1] - strb r0, [r5] - str r6, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl EmitSetAttributes - ldr r2, _0802A45C @ =gBankAttacker - ldrb r0, [r2] - bl MarkBufferBankForExecution - ldrb r0, [r7] - strb r0, [r5] - ldrb r0, [r7] - mov r3, r8 - muls r3, r0 - adds r0, r3, 0 - mov r1, r9 - adds r1, 0x2E - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl EmitSetAttributes - ldrb r0, [r7] - bl MarkBufferBankForExecution - ldr r0, _0802A464 @ =0xfffe9f10 - adds r4, r0 - ldrb r0, [r7] - lsls r0, 1 - ldr r2, _0802A468 @ =0x000160e8 - adds r0, r2 - adds r0, r4 - movs r1, 0 - strb r1, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _0802A46C @ =0x000160e9 - adds r0, r1 - adds r0, r4 - movs r3, 0 - strb r3, [r0] - ldr r3, _0802A45C @ =gBankAttacker - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - adds r0, r4 - movs r2, 0 - strb r2, [r0] - ldrb r0, [r3] - lsls r0, 1 - adds r0, r1 - adds r0, r4 - strb r2, [r0] - ldr r1, _0802A470 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - ldr r1, _0802A474 @ =gBattleTextBuff1 - movs r3, 0xFD - strb r3, [r1] - movs r2, 0xA - strb r2, [r1, 0x1] - ldrh r0, [r6] - strb r0, [r1, 0x2] - ldrh r0, [r6] - lsrs r0, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _0802A478 @ =gBattleTextBuff2 - strb r3, [r1] - strb r2, [r1, 0x1] - mov r3, r10 - strb r3, [r1, 0x2] - mov r2, r10 - lsrs r0, r2, 8 - strb r0, [r1, 0x3] - movs r0, 0x1 - negs r0, r0 - strb r0, [r1, 0x4] - cmp r2, 0 - beq _0802A480 - ldrh r0, [r6] - cmp r0, 0 - beq _0802A494 - ldr r1, _0802A47C @ =gBattleCommunication - movs r0, 0x2 - b _0802A498 - .align 2, 0 -_0802A458: .4byte 0x020160f0 -_0802A45C: .4byte gBankAttacker -_0802A460: .4byte gActiveBank -_0802A464: .4byte 0xfffe9f10 -_0802A468: .4byte 0x000160e8 -_0802A46C: .4byte 0x000160e9 -_0802A470: .4byte gBattlescriptCurrInstr -_0802A474: .4byte gBattleTextBuff1 -_0802A478: .4byte gBattleTextBuff2 -_0802A47C: .4byte gBattleCommunication -_0802A480: - ldrh r0, [r6] - cmp r0, 0 - beq _0802A494 - ldr r0, _0802A490 @ =gBattleCommunication - movs r3, 0 - strb r3, [r0, 0x5] - b _0802A49A - .align 2, 0 -_0802A490: .4byte gBattleCommunication -_0802A494: - ldr r1, _0802A4AC @ =gBattleCommunication - movs r0, 0x1 -_0802A498: - strb r0, [r1, 0x5] -_0802A49A: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802A4AC: .4byte gBattleCommunication - thumb_func_end sub_802A218 - - thumb_func_start sub_802A4B0 -sub_802A4B0: @ 802A4B0 - push {r4,lr} - ldr r3, _0802A4F0 @ =gBattleMons - ldr r4, _0802A4F4 @ =gBankTarget - ldrb r0, [r4] - movs r2, 0x58 - muls r0, r2 - adds r0, r3 - adds r0, 0x20 - ldrb r1, [r0] - adds r0, r1, 0 - cmp r0, 0 - beq _0802A504 - cmp r0, 0x19 - beq _0802A504 - ldr r0, _0802A4F8 @ =gBankAttacker - ldrb r0, [r0] - muls r0, r2 - adds r0, r3 - adds r0, 0x20 - strb r1, [r0] - ldr r1, _0802A4FC @ =gLastUsedAbility - ldrb r0, [r4] - muls r0, r2 - adds r0, r3 - adds r0, 0x20 - ldrb r0, [r0] - strb r0, [r1] - ldr r1, _0802A500 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802A51E - .align 2, 0 -_0802A4F0: .4byte gBattleMons -_0802A4F4: .4byte gBankTarget -_0802A4F8: .4byte gBankAttacker -_0802A4FC: .4byte gLastUsedAbility -_0802A500: .4byte gBattlescriptCurrInstr -_0802A504: - ldr r3, _0802A524 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802A51E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802A524: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802A4B0 - - thumb_func_start atkD4_802C408 -atkD4_802C408: @ 802A528 - push {r4-r7,lr} - ldr r7, _0802A53C @ =gBattlescriptCurrInstr - ldr r2, [r7] - ldrb r3, [r2, 0x1] - cmp r3, 0 - beq _0802A540 - cmp r3, 0x1 - beq _0802A578 - b _0802A5F4 - .align 2, 0 -_0802A53C: .4byte gBattlescriptCurrInstr -_0802A540: - ldr r1, _0802A56C @ =gWishFutureKnock - ldr r4, _0802A570 @ =gBankAttacker - adds r0, r1, 0 - adds r0, 0x20 - ldrb r5, [r4] - adds r3, r0, r5 - ldrb r0, [r3] - cmp r0, 0 - bne _0802A5C4 - movs r0, 0x2 - strb r0, [r3] - ldrb r0, [r4] - adds r1, 0x24 - adds r1, r0, r1 - ldr r2, _0802A574 @ =gBattlePartyID - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1] - ldr r0, [r7] - adds r0, 0x6 - b _0802A5F2 - .align 2, 0 -_0802A56C: .4byte gWishFutureKnock -_0802A570: .4byte gBankAttacker -_0802A574: .4byte gBattlePartyID -_0802A578: - ldr r1, _0802A5DC @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x4 - strb r0, [r1, 0x1] - ldr r4, _0802A5E0 @ =gBankTarget - ldrb r0, [r4] - strb r0, [r1, 0x2] - ldr r0, _0802A5E4 @ =gWishFutureKnock - adds r0, 0x24 - ldrb r5, [r4] - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _0802A5E8 @ =gBattleMoveDamage - ldr r6, _0802A5EC @ =gBattleMons - ldrb r0, [r4] - movs r5, 0x58 - muls r0, r5 - adds r0, r6 - ldrh r0, [r0, 0x2C] - lsrs r0, 1 - str r0, [r1] - cmp r0, 0 - bne _0802A5B0 - str r3, [r1] -_0802A5B0: - ldr r0, [r1] - negs r0, r0 - str r0, [r1] - ldrb r0, [r4] - muls r0, r5 - adds r0, r6 - ldrh r1, [r0, 0x28] - ldrh r0, [r0, 0x2C] - cmp r1, r0 - bne _0802A5F0 -_0802A5C4: - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r7] - b _0802A5F4 - .align 2, 0 -_0802A5DC: .4byte gBattleTextBuff1 -_0802A5E0: .4byte gBankTarget -_0802A5E4: .4byte gWishFutureKnock -_0802A5E8: .4byte gBattleMoveDamage -_0802A5EC: .4byte gBattleMons -_0802A5F0: - adds r0, r2, 0x6 -_0802A5F2: - str r0, [r7] -_0802A5F4: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atkD4_802C408 - - thumb_func_start sub_802A5FC -sub_802A5FC: @ 802A5FC - push {lr} - ldr r1, _0802A634 @ =gStatuses3 - ldr r0, _0802A638 @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 2 - adds r2, r0, r1 - ldr r1, [r2] - movs r3, 0x80 - lsls r3, 3 - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - beq _0802A640 - ldr r3, _0802A63C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802A64C - .align 2, 0 -_0802A634: .4byte gStatuses3 -_0802A638: .4byte gBankAttacker -_0802A63C: .4byte gBattlescriptCurrInstr -_0802A640: - orrs r1, r3 - str r1, [r2] - ldr r1, _0802A650 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802A64C: - pop {r0} - bx r0 - .align 2, 0 -_0802A650: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802A5FC - - thumb_func_start atkD6_doubledamagedealtifdamaged -atkD6_doubledamagedealtifdamaged: @ 802A654 - push {lr} - ldr r3, _0802A6A4 @ =gProtectStructs - ldr r0, _0802A6A8 @ =gBankAttacker - ldrb r0, [r0] - lsls r2, r0, 4 - adds r0, r3, 0x4 - adds r0, r2, r0 - ldr r0, [r0] - cmp r0, 0 - beq _0802A674 - adds r0, r2, r3 - ldr r1, _0802A6AC @ =gBankTarget - ldrb r0, [r0, 0xC] - ldrb r1, [r1] - cmp r0, r1 - beq _0802A68C -_0802A674: - adds r0, r3, 0 - adds r0, 0x8 - adds r0, r2, r0 - ldr r0, [r0] - cmp r0, 0 - beq _0802A696 - adds r0, r2, r3 - ldr r1, _0802A6AC @ =gBankTarget - ldrb r0, [r0, 0xD] - ldrb r1, [r1] - cmp r0, r1 - bne _0802A696 -_0802A68C: - ldr r0, _0802A6B0 @ =0x02000000 - ldr r1, _0802A6B4 @ =0x0001601f - adds r0, r1 - movs r1, 0x2 - strb r1, [r0] -_0802A696: - ldr r1, _0802A6B8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0802A6A4: .4byte gProtectStructs -_0802A6A8: .4byte gBankAttacker -_0802A6AC: .4byte gBankTarget -_0802A6B0: .4byte 0x02000000 -_0802A6B4: .4byte 0x0001601f -_0802A6B8: .4byte gBattlescriptCurrInstr - thumb_func_end atkD6_doubledamagedealtifdamaged - - thumb_func_start sub_802A6BC -sub_802A6BC: @ 802A6BC - push {r4,lr} - ldr r1, _0802A700 @ =gStatuses3 - ldr r0, _0802A704 @ =gBankTarget - ldrb r3, [r0] - lsls r0, r3, 2 - adds r4, r0, r1 - ldr r2, [r4] - movs r0, 0xC0 - lsls r0, 5 - ands r0, r2 - cmp r0, 0 - bne _0802A6E4 - ldr r1, _0802A708 @ =gBattleMons - movs r0, 0x58 - muls r0, r3 - adds r1, 0x4C - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0802A710 -_0802A6E4: - ldr r3, _0802A70C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802A720 - .align 2, 0 -_0802A700: .4byte gStatuses3 -_0802A704: .4byte gBankTarget -_0802A708: .4byte gBattleMons -_0802A70C: .4byte gBattlescriptCurrInstr -_0802A710: - movs r0, 0x80 - lsls r0, 5 - orrs r2, r0 - str r2, [r4] - ldr r1, _0802A728 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802A720: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802A728: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802A6BC - - thumb_func_start atkD8_setdamagetohealthdifference -atkD8_setdamagetohealthdifference: @ 802A72C - push {lr} - ldr r2, _0802A768 @ =gBattleMons - ldr r0, _0802A76C @ =gBankTarget - ldrb r0, [r0] - movs r1, 0x58 - muls r0, r1 - adds r3, r0, r2 - ldr r0, _0802A770 @ =gBankAttacker - ldrb r0, [r0] - muls r0, r1 - adds r1, r0, r2 - ldrh r0, [r3, 0x28] - ldrh r2, [r1, 0x28] - cmp r0, r2 - bhi _0802A778 - ldr r3, _0802A774 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802A78A - .align 2, 0 -_0802A768: .4byte gBattleMons -_0802A76C: .4byte gBankTarget -_0802A770: .4byte gBankAttacker -_0802A774: .4byte gBattlescriptCurrInstr -_0802A778: - ldr r2, _0802A790 @ =gBattleMoveDamage - ldrh r0, [r3, 0x28] - ldrh r1, [r1, 0x28] - subs r0, r1 - str r0, [r2] - ldr r1, _0802A794 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802A78A: - pop {r0} - bx r0 - .align 2, 0 -_0802A790: .4byte gBattleMoveDamage -_0802A794: .4byte gBattlescriptCurrInstr - thumb_func_end atkD8_setdamagetohealthdifference - - thumb_func_start atkD9_scaledamagebyhealthratio -atkD9_scaledamagebyhealthratio: @ 802A798 - push {r4,lr} - ldr r4, _0802A7E4 @ =gDynamicBasePower - ldrh r0, [r4] - cmp r0, 0 - bne _0802A7D4 - ldr r2, _0802A7E8 @ =gBattleMoves - ldr r0, _0802A7EC @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r3, [r0, 0x1] - ldr r2, _0802A7F0 @ =gBattleMons - ldr r0, _0802A7F4 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r1, r0 - adds r1, r2 - ldrh r0, [r1, 0x28] - muls r0, r3 - ldrh r1, [r1, 0x2C] - bl __divsi3 - strh r0, [r4] - lsls r0, 16 - cmp r0, 0 - bne _0802A7D4 - movs r0, 0x1 - strh r0, [r4] -_0802A7D4: - ldr r1, _0802A7F8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802A7E4: .4byte gDynamicBasePower -_0802A7E8: .4byte gBattleMoves -_0802A7EC: .4byte gCurrentMove -_0802A7F0: .4byte gBattleMons -_0802A7F4: .4byte gBankAttacker -_0802A7F8: .4byte gBattlescriptCurrInstr - thumb_func_end atkD9_scaledamagebyhealthratio - - thumb_func_start atkDA_abilityswap -atkDA_abilityswap: @ 802A7FC - push {r4-r6,lr} - ldr r5, _0802A860 @ =gBattleMons - ldr r0, _0802A864 @ =gBankAttacker - ldrb r0, [r0] - movs r4, 0x58 - muls r0, r4 - adds r0, r5 - adds r2, r0, 0 - adds r2, 0x20 - ldrb r1, [r2] - cmp r1, 0 - bne _0802A824 - ldr r0, _0802A868 @ =gBankTarget - ldrb r0, [r0] - muls r0, r4 - adds r0, r5 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - beq _0802A844 -_0802A824: - cmp r1, 0x19 - beq _0802A844 - ldr r6, _0802A868 @ =gBankTarget - ldrb r0, [r6] - muls r0, r4 - adds r0, r5 - adds r0, 0x20 - ldrb r3, [r0] - cmp r3, 0x19 - beq _0802A844 - ldr r0, _0802A86C @ =gBattleMoveFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _0802A874 -_0802A844: - ldr r3, _0802A870 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802A88A - .align 2, 0 -_0802A860: .4byte gBattleMons -_0802A864: .4byte gBankAttacker -_0802A868: .4byte gBankTarget -_0802A86C: .4byte gBattleMoveFlags -_0802A870: .4byte gBattlescriptCurrInstr -_0802A874: - ldrb r1, [r2] - strb r3, [r2] - ldrb r0, [r6] - muls r0, r4 - adds r0, r5 - adds r0, 0x20 - strb r1, [r0] - ldr r1, _0802A890 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802A88A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802A890: .4byte gBattlescriptCurrInstr - thumb_func_end atkDA_abilityswap - - thumb_func_start atkDB_imprisoneffect -atkDB_imprisoneffect: @ 802A894 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r0, 0 - mov r8, r0 - ldr r1, _0802A8B8 @ =gStatuses3 - ldr r0, _0802A8BC @ =gBankAttacker - ldrb r2, [r0] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 6 - ands r0, r1 - cmp r0, 0 - beq _0802A8E8 - b _0802A95E - .align 2, 0 -_0802A8B8: .4byte gStatuses3 -_0802A8BC: .4byte gBankAttacker -_0802A8C0: - ldr r0, _0802A8E0 @ =gStatuses3 - mov r2, r9 - ldrb r1, [r2] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - movs r2, 0x80 - lsls r2, 6 - orrs r0, r2 - str r0, [r1] - ldr r1, _0802A8E4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802A956 - .align 2, 0 -_0802A8E0: .4byte gStatuses3 -_0802A8E4: .4byte gBattlescriptCurrInstr -_0802A8E8: - adds r0, r2, 0 - bl sub_801529C - movs r6, 0 - b _0802A94E -_0802A8F2: - adds r0, r6, 0 - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r8, r0 - beq _0802A948 - movs r4, 0 - ldr r7, _0802A984 @ =gBankAttacker - mov r9, r7 - ldr r0, _0802A988 @ =gBattleMons - mov r12, r0 - mov r1, r9 - ldrb r0, [r1] - mov r2, r12 - adds r2, 0xC - movs r1, 0x58 - muls r0, r1 - adds r3, r0, r2 - adds r5, r6, 0 - muls r5, r1 -_0802A91C: - movs r2, 0 - ldrh r1, [r3] - mov r0, r12 - adds r0, 0xC - adds r0, r5, r0 -_0802A926: - ldrh r7, [r0] - cmp r1, r7 - bne _0802A930 - cmp r1, 0 - bne _0802A938 -_0802A930: - adds r0, 0x2 - adds r2, 0x1 - cmp r2, 0x3 - ble _0802A926 -_0802A938: - cmp r2, 0x4 - bne _0802A944 - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _0802A91C -_0802A944: - cmp r4, 0x4 - bne _0802A8C0 -_0802A948: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_0802A94E: - ldr r0, _0802A98C @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r6, r0 - bcc _0802A8F2 -_0802A956: - ldr r0, _0802A98C @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r6, r0 - bne _0802A978 -_0802A95E: - ldr r3, _0802A990 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802A978: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802A984: .4byte gBankAttacker -_0802A988: .4byte gBattleMons -_0802A98C: .4byte gNoOfAllBanks -_0802A990: .4byte gBattlescriptCurrInstr - thumb_func_end atkDB_imprisoneffect - - thumb_func_start atkDC_setgrudge -atkDC_setgrudge: @ 802A994 - push {lr} - ldr r1, _0802A9CC @ =gStatuses3 - ldr r0, _0802A9D0 @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 2 - adds r2, r0, r1 - ldr r1, [r2] - movs r3, 0x80 - lsls r3, 7 - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - beq _0802A9D8 - ldr r3, _0802A9D4 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802A9E4 - .align 2, 0 -_0802A9CC: .4byte gStatuses3 -_0802A9D0: .4byte gBankAttacker -_0802A9D4: .4byte gBattlescriptCurrInstr -_0802A9D8: - orrs r1, r3 - str r1, [r2] - ldr r1, _0802A9E8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802A9E4: - pop {r0} - bx r0 - .align 2, 0 -_0802A9E8: .4byte gBattlescriptCurrInstr - thumb_func_end atkDC_setgrudge - - thumb_func_start atkDD_weightdamagecalculation -atkDD_weightdamagecalculation: @ 802A9EC - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r5, 0 - ldr r2, _0802AA50 @ =gWeightDamage - ldrh r0, [r2] - ldr r1, _0802AA54 @ =0x0000ffff - cmp r0, r1 - beq _0802AA64 - adds r6, r2, 0 - ldr r0, _0802AA58 @ =gBattleMons - mov r8, r0 - adds r7, r1, 0 - adds r4, r6, 0 -_0802AA08: - ldr r0, _0802AA5C @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - add r0, r8 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetPokedexHeightWeight - ldrh r1, [r4] - lsls r0, 16 - lsrs r0, 16 - cmp r1, r0 - bhi _0802AA36 - adds r4, 0x4 - adds r5, 0x2 - ldrh r0, [r4] - cmp r0, r7 - bne _0802AA08 -_0802AA36: - lsls r0, r5, 1 - adds r0, r6 - ldrh r1, [r0] - ldr r0, _0802AA54 @ =0x0000ffff - cmp r1, r0 - beq _0802AA64 - ldr r0, _0802AA60 @ =gDynamicBasePower - adds r1, r5, 0x1 - lsls r1, 1 - adds r1, r6 - ldrh r1, [r1] - strh r1, [r0] - b _0802AA6A - .align 2, 0 -_0802AA50: .4byte gWeightDamage -_0802AA54: .4byte 0x0000ffff -_0802AA58: .4byte gBattleMons -_0802AA5C: .4byte gBankTarget -_0802AA60: .4byte gDynamicBasePower -_0802AA64: - ldr r1, _0802AA7C @ =gDynamicBasePower - movs r0, 0x78 - strh r0, [r1] -_0802AA6A: - ldr r1, _0802AA80 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802AA7C: .4byte gDynamicBasePower -_0802AA80: .4byte gBattlescriptCurrInstr - thumb_func_end atkDD_weightdamagecalculation - - thumb_func_start atkDE_asistattackselect -atkDE_asistattackselect: @ 802AA84 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r0, 0 - mov r10, r0 - ldr r0, _0802AB9C @ =gBankAttacker - ldrb r0, [r0] - bl GetBankIdentity - movs r1, 0x1 - ands r1, r0 - ldr r0, _0802ABA0 @ =gPlayerParty - str r0, [sp] - cmp r1, 0 - beq _0802AAAC - ldr r1, _0802ABA4 @ =gEnemyParty - str r1, [sp] -_0802AAAC: - movs r2, 0 -_0802AAAE: - ldr r1, _0802ABA8 @ =gBattlePartyID - ldr r0, _0802AB9C @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - adds r1, r2, 0x1 - str r1, [sp, 0x4] - ldrh r0, [r0] - cmp r2, r0 - beq _0802AB54 - movs r0, 0x64 - adds r6, r2, 0 - muls r6, r0 - ldr r0, [sp] - adds r4, r0, r6 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _0802AB54 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - beq _0802AB54 - movs r5, 0 - ldr r1, _0802ABAC @ =0x0000ffff - mov r8, r1 - mov r9, r6 - mov r1, r10 - lsls r0, r1, 1 - ldr r1, _0802ABB0 @ =0x02016024 - adds r6, r0, r1 -_0802AAF8: - movs r7, 0 - adds r1, r5, 0 - adds r1, 0xD - ldr r0, [sp] - add r0, r9 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl sub_802838C - lsls r0, 24 - adds r1, r5, 0x1 - cmp r0, 0 - bne _0802AB4E - ldr r0, _0802ABB4 @ =gUnknown_081FACFE - ldrh r2, [r0] - adds r3, r0, 0 - cmp r2, r8 - beq _0802AB42 - cmp r4, r2 - beq _0802AB38 - ldr r5, _0802ABAC @ =0x0000ffff - adds r2, r3, 0 -_0802AB2A: - adds r2, 0x2 - adds r7, 0x1 - ldrh r0, [r2] - cmp r0, r5 - beq _0802AB42 - cmp r4, r0 - bne _0802AB2A -_0802AB38: - lsls r0, r7, 1 - adds r0, r3 - ldrh r0, [r0] - cmp r0, r8 - bne _0802AB4E -_0802AB42: - cmp r4, 0 - beq _0802AB4E - strh r4, [r6] - adds r6, 0x2 - movs r0, 0x1 - add r10, r0 -_0802AB4E: - adds r5, r1, 0 - cmp r5, 0x3 - ble _0802AAF8 -_0802AB54: - ldr r2, [sp, 0x4] - cmp r2, 0x5 - ble _0802AAAE - mov r1, r10 - cmp r1, 0 - beq _0802ABCC - ldr r2, _0802ABB8 @ =gHitMarker - ldr r0, [r2] - ldr r1, _0802ABBC @ =0xfffffbff - ands r0, r1 - str r0, [r2] - ldr r4, _0802ABC0 @ =gUnknown_02024BEA - bl Random - movs r1, 0xFF - ands r1, r0 - mov r0, r10 - muls r0, r1 - asrs r0, 8 - lsls r0, 1 - ldr r1, _0802ABB0 @ =0x02016024 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r4] - ldrh r0, [r4] - movs r1, 0 - bl sub_801B5C0 - ldr r1, _0802ABC4 @ =gBankTarget - strb r0, [r1] - ldr r1, _0802ABC8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802ABE6 - .align 2, 0 -_0802AB9C: .4byte gBankAttacker -_0802ABA0: .4byte gPlayerParty -_0802ABA4: .4byte gEnemyParty -_0802ABA8: .4byte gBattlePartyID -_0802ABAC: .4byte 0x0000ffff -_0802ABB0: .4byte 0x02016024 -_0802ABB4: .4byte gUnknown_081FACFE -_0802ABB8: .4byte gHitMarker -_0802ABBC: .4byte 0xfffffbff -_0802ABC0: .4byte gUnknown_02024BEA -_0802ABC4: .4byte gBankTarget -_0802ABC8: .4byte gBattlescriptCurrInstr -_0802ABCC: - ldr r3, _0802ABF8 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802ABE6: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802ABF8: .4byte gBattlescriptCurrInstr - thumb_func_end atkDE_asistattackselect - - thumb_func_start atkDF_setmagiccoat -atkDF_setmagiccoat: @ 802ABFC - push {lr} - ldr r1, _0802AC44 @ =gBankTarget - ldr r3, _0802AC48 @ =gBankAttacker - ldrb r0, [r3] - strb r0, [r1] - ldr r2, _0802AC4C @ =gSpecialStatuses - ldrb r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0] - ldr r0, _0802AC50 @ =gCurrentMoveTurn - ldrb r1, [r0] - ldr r0, _0802AC54 @ =gNoOfAllBanks - ldrb r0, [r0] - subs r0, 0x1 - cmp r1, r0 - bne _0802AC5C - ldr r3, _0802AC58 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802AC74 - .align 2, 0 -_0802AC44: .4byte gBankTarget -_0802AC48: .4byte gBankAttacker -_0802AC4C: .4byte gSpecialStatuses -_0802AC50: .4byte gCurrentMoveTurn -_0802AC54: .4byte gNoOfAllBanks -_0802AC58: .4byte gBattlescriptCurrInstr -_0802AC5C: - ldr r0, _0802AC78 @ =gProtectStructs - ldrb r1, [r3] - lsls r1, 4 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x10 - orrs r0, r2 - strb r0, [r1] - ldr r1, _0802AC7C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802AC74: - pop {r0} - bx r0 - .align 2, 0 -_0802AC78: .4byte gProtectStructs -_0802AC7C: .4byte gBattlescriptCurrInstr - thumb_func_end atkDF_setmagiccoat - - thumb_func_start atkE0_setstealstatchange -atkE0_setstealstatchange: @ 802AC80 - push {lr} - ldr r2, _0802ACC4 @ =gSpecialStatuses - ldr r3, _0802ACC8 @ =gBankAttacker - ldrb r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0] - ldr r0, _0802ACCC @ =gCurrentMoveTurn - ldrb r1, [r0] - ldr r0, _0802ACD0 @ =gNoOfAllBanks - ldrb r0, [r0] - subs r0, 0x1 - cmp r1, r0 - bne _0802ACD8 - ldr r3, _0802ACD4 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802ACEE - .align 2, 0 -_0802ACC4: .4byte gSpecialStatuses -_0802ACC8: .4byte gBankAttacker -_0802ACCC: .4byte gCurrentMoveTurn -_0802ACD0: .4byte gNoOfAllBanks -_0802ACD4: .4byte gBattlescriptCurrInstr -_0802ACD8: - ldr r0, _0802ACF4 @ =gProtectStructs - ldrb r1, [r3] - lsls r1, 4 - adds r1, r0 - ldrb r0, [r1] - orrs r0, r2 - strb r0, [r1] - ldr r1, _0802ACF8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802ACEE: - pop {r0} - bx r0 - .align 2, 0 -_0802ACF4: .4byte gProtectStructs -_0802ACF8: .4byte gBattlescriptCurrInstr - thumb_func_end atkE0_setstealstatchange - - thumb_func_start atkE1_802CBE4 -atkE1_802CBE4: @ 802ACFC - push {r4-r6,lr} - ldr r4, _0802ADA0 @ =0x02000000 - ldr r1, _0802ADA4 @ =0x000160dd - adds r0, r4, r1 - ldrb r0, [r0] - subs r1, 0xDA - adds r4, r1 - strb r0, [r4] - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r5, r0, 24 - ldr r2, _0802ADA8 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r2] - movs r0, 0x9 - strb r0, [r2, 0x1] - ldr r3, _0802ADAC @ =gBattleMons - ldrb r1, [r4] - movs r0, 0x58 - muls r0, r1 - adds r0, r3 - adds r0, 0x20 - ldrb r0, [r0] - strb r0, [r2, 0x2] - movs r0, 0xFF - strb r0, [r2, 0x3] - ldr r2, _0802ADB0 @ =gBankTarget - ldr r1, _0802ADB4 @ =gNoOfAllBanks - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bcs _0802AD84 - adds r4, r2, 0 - ldr r6, _0802ADB8 @ =gBitTable -_0802AD44: - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, r5 - beq _0802AD66 - ldr r0, _0802ADBC @ =gAbsentBankFlags - ldrb r1, [r0] - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ands r1, r0 - ldr r2, _0802ADB4 @ =gNoOfAllBanks - cmp r1, 0 - beq _0802AD7A -_0802AD66: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _0802ADB4 @ =gNoOfAllBanks - lsls r0, 24 - lsrs r0, 24 - adds r2, r1, 0 - ldrb r1, [r2] - cmp r0, r1 - bcc _0802AD44 -_0802AD7A: - ldr r0, _0802ADB0 @ =gBankTarget - ldrb r0, [r0] - ldrb r2, [r2] - cmp r0, r2 - bcc _0802ADC4 -_0802AD84: - ldr r3, _0802ADC0 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802ADCC - .align 2, 0 -_0802ADA0: .4byte 0x02000000 -_0802ADA4: .4byte 0x000160dd -_0802ADA8: .4byte gBattleTextBuff1 -_0802ADAC: .4byte gBattleMons -_0802ADB0: .4byte gBankTarget -_0802ADB4: .4byte gNoOfAllBanks -_0802ADB8: .4byte gBitTable -_0802ADBC: .4byte gAbsentBankFlags -_0802ADC0: .4byte gBattlescriptCurrInstr -_0802ADC4: - ldr r1, _0802ADD4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802ADCC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802ADD4: .4byte gBattlescriptCurrInstr - thumb_func_end atkE1_802CBE4 - - thumb_func_start sub_802ADD8 -sub_802ADD8: @ 802ADD8 - push {r4-r7,lr} - sub sp, 0x4 - ldr r6, _0802AE44 @ =gBattlescriptCurrInstr - ldr r0, [r6] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r5, _0802AE48 @ =gActiveBank - strb r0, [r5] - ldr r4, _0802AE4C @ =gBattleMons - ldrb r0, [r5] - movs r1, 0x58 - mov r12, r1 - mov r1, r12 - muls r1, r0 - adds r0, r1, r4 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1E - bne _0802AE34 - adds r4, 0x4C - adds r1, r4 - movs r0, 0 - str r0, [r1] - ldr r2, _0802AE50 @ =gBitTable - ldr r1, _0802AE54 @ =0x02000000 - ldrb r3, [r5] - ldr r7, _0802AE58 @ =0x00016064 - adds r0, r3, r7 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0] - mov r0, r12 - muls r0, r3 - adds r0, r4 - str r0, [sp] - movs r0, 0 - movs r1, 0x28 - movs r3, 0x4 - bl EmitSetAttributes - ldrb r0, [r5] - bl MarkBufferBankForExecution -_0802AE34: - ldr r0, [r6] - adds r0, 0x2 - str r0, [r6] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802AE44: .4byte gBattlescriptCurrInstr -_0802AE48: .4byte gActiveBank -_0802AE4C: .4byte gBattleMons -_0802AE50: .4byte gBitTable -_0802AE54: .4byte 0x02000000 -_0802AE58: .4byte 0x00016064 - thumb_func_end sub_802ADD8 - - thumb_func_start atkE3_jumpiffainted -atkE3_jumpiffainted: @ 802AE5C - push {r4,lr} - ldr r4, _0802AE98 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8015150 - ldr r1, _0802AE9C @ =gActiveBank - strb r0, [r1] - ldr r2, _0802AEA0 @ =gBattleMons - ldrb r1, [r1] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0, 0x28] - cmp r0, 0 - bne _0802AEA4 - ldr r2, [r4] - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0802AEAA - .align 2, 0 -_0802AE98: .4byte gBattlescriptCurrInstr -_0802AE9C: .4byte gActiveBank -_0802AEA0: .4byte gBattleMons -_0802AEA4: - ldr r0, [r4] - adds r0, 0x6 - str r0, [r4] -_0802AEAA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end atkE3_jumpiffainted - - thumb_func_start sub_802AEB0 -sub_802AEB0: @ 802AEB0 - push {lr} - ldr r0, _0802AEC4 @ =gBattleTerrain - ldrb r0, [r0] - cmp r0, 0x7 - bhi _0802AF4C - lsls r0, 2 - ldr r1, _0802AEC8 @ =_0802AECC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802AEC4: .4byte gBattleTerrain -_0802AEC8: .4byte _0802AECC - .align 2, 0 -_0802AECC: - .4byte _0802AEEC - .4byte _0802AEF8 - .4byte _0802AF04 - .4byte _0802AF10 - .4byte _0802AF1C - .4byte _0802AF28 - .4byte _0802AF34 - .4byte _0802AF40 -_0802AEEC: - ldr r1, _0802AEF4 @ =gBattleCommunication - movs r0, 0x2 - b _0802AF50 - .align 2, 0 -_0802AEF4: .4byte gBattleCommunication -_0802AEF8: - ldr r1, _0802AF00 @ =gBattleCommunication - movs r0, 0x1 - b _0802AF50 - .align 2, 0 -_0802AF00: .4byte gBattleCommunication -_0802AF04: - ldr r1, _0802AF0C @ =gBattleCommunication - movs r0, 0x1B - b _0802AF50 - .align 2, 0 -_0802AF0C: .4byte gBattleCommunication -_0802AF10: - ldr r1, _0802AF18 @ =gBattleCommunication - movs r0, 0x17 - b _0802AF50 - .align 2, 0 -_0802AF18: .4byte gBattleCommunication -_0802AF1C: - ldr r1, _0802AF24 @ =gBattleCommunication - movs r0, 0x16 - b _0802AF50 - .align 2, 0 -_0802AF24: .4byte gBattleCommunication -_0802AF28: - ldr r1, _0802AF30 @ =gBattleCommunication - movs r0, 0x18 - b _0802AF50 - .align 2, 0 -_0802AF30: .4byte gBattleCommunication -_0802AF34: - ldr r1, _0802AF3C @ =gBattleCommunication - movs r0, 0x7 - b _0802AF50 - .align 2, 0 -_0802AF3C: .4byte gBattleCommunication -_0802AF40: - ldr r1, _0802AF48 @ =gBattleCommunication - movs r0, 0x8 - b _0802AF50 - .align 2, 0 -_0802AF48: .4byte gBattleCommunication -_0802AF4C: - ldr r1, _0802AF60 @ =gBattleCommunication - movs r0, 0x5 -_0802AF50: - strb r0, [r1, 0x3] - ldr r1, _0802AF64 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0802AF60: .4byte gBattleCommunication -_0802AF64: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802AEB0 - - thumb_func_start sub_802AF68 -sub_802AF68: @ 802AF68 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r7, 0 - ldr r0, _0802AFB4 @ =gBaseStats - mov r9, r0 - ldr r1, _0802AFB8 @ =gPickupItems - mov r8, r1 -_0802AF7A: - movs r0, 0x64 - adds r4, r7, 0 - muls r4, r0 - ldr r0, _0802AFBC @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - movs r1, 0x2E - bl GetMonData - cmp r0, 0 - beq _0802AFC0 - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - add r0, r9 - ldrb r0, [r0, 0x17] - b _0802AFCA - .align 2, 0 -_0802AFB4: .4byte gBaseStats -_0802AFB8: .4byte gPickupItems -_0802AFBC: .4byte gPlayerParty -_0802AFC0: - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - add r0, r9 - ldrb r0, [r0, 0x16] -_0802AFCA: - adds r4, r7, 0x1 - cmp r0, 0x35 - bne _0802B032 - cmp r5, 0 - beq _0802B032 - movs r0, 0xCE - lsls r0, 1 - cmp r5, r0 - beq _0802B032 - cmp r6, 0 - bne _0802B032 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xA - bl __umodsi3 - lsls r0, 16 - cmp r0, 0 - bne _0802B032 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - mov r1, r8 - ldrh r0, [r1, 0x2] - cmp r0, r3 - bgt _0802B020 - adds r1, 0x2 -_0802B012: - adds r1, 0x4 - adds r2, 0x2 - cmp r2, 0x11 - bgt _0802B020 - ldrh r0, [r1] - cmp r0, r3 - ble _0802B012 -_0802B020: - movs r0, 0x64 - muls r0, r7 - ldr r1, _0802B04C @ =gPlayerParty - adds r0, r1 - lsls r2, 1 - add r2, r8 - movs r1, 0xC - bl SetMonData -_0802B032: - adds r7, r4, 0 - cmp r7, 0x5 - ble _0802AF7A - ldr r1, _0802B050 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802B04C: .4byte gPlayerParty -_0802B050: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802AF68 - - thumb_func_start atkE6_castform_transform -atkE6_castform_transform: @ 802B054 - push {r4,lr} - ldr r4, _0802B0A8 @ =gActiveBank - ldr r3, _0802B0AC @ =0x02000000 - ldr r1, _0802B0B0 @ =0x00016003 - adds r0, r3, r1 - ldrb r0, [r0] - strb r0, [r4] - ldr r1, _0802B0B4 @ =gBattleMons - ldrb r2, [r4] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 17 - ands r0, r1 - cmp r0, 0 - beq _0802B086 - ldr r0, _0802B0B8 @ =0x0001609b - adds r2, r3, r0 - ldrb r1, [r2] - movs r0, 0x80 - orrs r0, r1 - strb r0, [r2] -_0802B086: - ldr r1, _0802B0B8 @ =0x0001609b - adds r0, r3, r1 - ldrb r2, [r0] - movs r0, 0 - movs r1, 0 - bl EmitBattleAnimation - ldrb r0, [r4] - bl MarkBufferBankForExecution - ldr r1, _0802B0BC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802B0A8: .4byte gActiveBank -_0802B0AC: .4byte 0x02000000 -_0802B0B0: .4byte 0x00016003 -_0802B0B4: .4byte gBattleMons -_0802B0B8: .4byte 0x0001609b -_0802B0BC: .4byte gBattlescriptCurrInstr - thumb_func_end atkE6_castform_transform - - thumb_func_start atkE7_castform_switch -atkE7_castform_switch: @ 802B0C0 - push {r4,r5,lr} - ldr r1, _0802B0F4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - ldr r5, _0802B0F8 @ =0x02000000 - ldr r1, _0802B0FC @ =0x00016003 - adds r0, r5, r1 - ldrb r0, [r0] - bl castform_switch - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _0802B0EC - ldr r0, _0802B100 @ =gUnknown_081D977D - bl b_push_move_exec - subs r1, r4, 0x1 - ldr r2, _0802B104 @ =0x0001609b - adds r0, r5, r2 - strb r1, [r0] -_0802B0EC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802B0F4: .4byte gBattlescriptCurrInstr -_0802B0F8: .4byte 0x02000000 -_0802B0FC: .4byte 0x00016003 -_0802B100: .4byte gUnknown_081D977D -_0802B104: .4byte 0x0001609b - thumb_func_end atkE7_castform_switch - - thumb_func_start atkE8_settypebasedhalvers -atkE8_settypebasedhalvers: @ 802B108 - push {r4,lr} - movs r4, 0 - ldr r2, _0802B144 @ =gBattleMoves - ldr r0, _0802B148 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0xC9 - bne _0802B158 - ldr r1, _0802B14C @ =gStatuses3 - ldr r0, _0802B150 @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 2 - adds r2, r0, r1 - ldr r1, [r2] - movs r3, 0x80 - lsls r3, 9 - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - bne _0802B17C - orrs r1, r3 - str r1, [r2] - ldr r0, _0802B154 @ =gBattleCommunication - strb r4, [r0, 0x5] - b _0802B180 - .align 2, 0 -_0802B144: .4byte gBattleMoves -_0802B148: .4byte gCurrentMove -_0802B14C: .4byte gStatuses3 -_0802B150: .4byte gBankAttacker -_0802B154: .4byte gBattleCommunication -_0802B158: - ldr r1, _0802B18C @ =gStatuses3 - ldr r0, _0802B190 @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 2 - adds r2, r0, r1 - ldr r1, [r2] - movs r3, 0x80 - lsls r3, 10 - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - bne _0802B17C - orrs r1, r3 - str r1, [r2] - ldr r1, _0802B194 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - movs r4, 0x1 -_0802B17C: - cmp r4, 0 - beq _0802B19C -_0802B180: - ldr r1, _0802B198 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802B1B6 - .align 2, 0 -_0802B18C: .4byte gStatuses3 -_0802B190: .4byte gBankAttacker -_0802B194: .4byte gBattleCommunication -_0802B198: .4byte gBattlescriptCurrInstr -_0802B19C: - ldr r3, _0802B1BC @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802B1B6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802B1BC: .4byte gBattlescriptCurrInstr - thumb_func_end atkE8_settypebasedhalvers - - thumb_func_start sub_802B1C0 -sub_802B1C0: @ 802B1C0 - push {lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0xD - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0802B276 - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x4D - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _0802B276 - ldr r3, _0802B218 @ =gBattleWeather - ldrb r0, [r3] - ldr r2, _0802B21C @ =0x02000000 - cmp r0, 0 - beq _0802B202 - ldr r0, _0802B220 @ =0x0001601f - adds r1, r2, r0 - movs r0, 0x2 - strb r0, [r1] -_0802B202: - ldrh r1, [r3] - movs r0, 0x7 - ands r0, r1 - cmp r0, 0 - beq _0802B228 - ldr r0, _0802B224 @ =0x0001601c - adds r1, r2, r0 - movs r0, 0x8B - strb r0, [r1] - b _0802B276 - .align 2, 0 -_0802B218: .4byte gBattleWeather -_0802B21C: .4byte 0x02000000 -_0802B220: .4byte 0x0001601f -_0802B224: .4byte 0x0001601c -_0802B228: - movs r0, 0x18 - ands r0, r1 - cmp r0, 0 - beq _0802B240 - ldr r0, _0802B23C @ =0x0001601c - adds r1, r2, r0 - movs r0, 0x85 - strb r0, [r1] - b _0802B276 - .align 2, 0 -_0802B23C: .4byte 0x0001601c -_0802B240: - movs r0, 0x60 - ands r0, r1 - cmp r0, 0 - beq _0802B258 - ldr r0, _0802B254 @ =0x0001601c - adds r1, r2, r0 - movs r0, 0x8A - strb r0, [r1] - b _0802B276 - .align 2, 0 -_0802B254: .4byte 0x0001601c -_0802B258: - movs r3, 0x80 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0802B270 - ldr r0, _0802B26C @ =0x0001601c - adds r1, r2, r0 - movs r0, 0x8F - strb r0, [r1] - b _0802B276 - .align 2, 0 -_0802B26C: .4byte 0x0001601c -_0802B270: - ldr r1, _0802B284 @ =0x0001601c - adds r0, r2, r1 - strb r3, [r0] -_0802B276: - ldr r1, _0802B288 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0802B284: .4byte 0x0001601c -_0802B288: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802B1C0 - - thumb_func_start atkEA_recycleitem -atkEA_recycleitem: @ 802B28C - push {r4-r7,lr} - sub sp, 0x4 - ldr r7, _0802B2F0 @ =gActiveBank - ldr r0, _0802B2F4 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r7] - ldrb r2, [r7] - lsls r1, r2, 1 - ldr r0, _0802B2F8 @ =0x020160cc - adds r6, r1, r0 - ldrh r5, [r6] - cmp r5, 0 - beq _0802B308 - ldr r4, _0802B2FC @ =gBattleMons - movs r3, 0x58 - adds r0, r2, 0 - muls r0, r3 - adds r0, r4 - ldrh r0, [r0, 0x2E] - cmp r0, 0 - bne _0802B308 - ldr r1, _0802B300 @ =gLastUsedItem - strh r5, [r1] - strh r0, [r6] - ldrb r0, [r7] - muls r0, r3 - adds r0, r4 - ldrh r1, [r1] - strh r1, [r0, 0x2E] - ldrb r0, [r7] - muls r0, r3 - adds r1, r4, 0 - adds r1, 0x2E - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl EmitSetAttributes - ldrb r0, [r7] - bl MarkBufferBankForExecution - ldr r1, _0802B304 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802B322 - .align 2, 0 -_0802B2F0: .4byte gActiveBank -_0802B2F4: .4byte gBankAttacker -_0802B2F8: .4byte 0x020160cc -_0802B2FC: .4byte gBattleMons -_0802B300: .4byte gLastUsedItem -_0802B304: .4byte gBattlescriptCurrInstr -_0802B308: - ldr r3, _0802B32C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802B322: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802B32C: .4byte gBattlescriptCurrInstr - thumb_func_end atkEA_recycleitem - - thumb_func_start atkEB_settypetoterrain -atkEB_settypetoterrain: @ 802B330 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _0802B3A0 @ =gBattleMons - mov r8, r0 - ldr r7, _0802B3A4 @ =gBankAttacker - ldrb r0, [r7] - movs r6, 0x58 - muls r0, r6 - mov r1, r8 - adds r3, r0, r1 - movs r0, 0x21 - adds r0, r3 - mov r12, r0 - ldr r5, _0802B3A8 @ =gTerrainToType - ldr r4, _0802B3AC @ =gBattleTerrain - ldrb r0, [r4] - adds r0, r5 - ldrb r2, [r0] - mov r1, r12 - ldrb r0, [r1] - adds r1, r2, 0 - cmp r0, r1 - beq _0802B3B8 - adds r0, r3, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, r1 - beq _0802B3B8 - mov r0, r12 - strb r2, [r0] - ldrb r0, [r7] - adds r1, r0, 0 - muls r1, r6 - add r1, r8 - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - adds r1, 0x22 - strb r0, [r1] - ldr r1, _0802B3B0 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x3 - strb r0, [r1, 0x1] - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1, 0x2] - movs r0, 0xFF - strb r0, [r1, 0x3] - ldr r1, _0802B3B4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802B3D2 - .align 2, 0 -_0802B3A0: .4byte gBattleMons -_0802B3A4: .4byte gBankAttacker -_0802B3A8: .4byte gTerrainToType -_0802B3AC: .4byte gBattleTerrain -_0802B3B0: .4byte gBattleTextBuff1 -_0802B3B4: .4byte gBattlescriptCurrInstr -_0802B3B8: - ldr r3, _0802B3DC @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802B3D2: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802B3DC: .4byte gBattlescriptCurrInstr - thumb_func_end atkEB_settypetoterrain - - thumb_func_start sub_802B3E0 -sub_802B3E0: @ 802B3E0 - push {r4,r5,lr} - ldr r5, _0802B45C @ =gBankAttacker - ldrb r0, [r5] - bl GetBankIdentity - movs r1, 0x2 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByPlayerAI - ldr r4, _0802B460 @ =gActiveBank - strb r0, [r4] - ldr r0, _0802B464 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0802B490 - ldr r0, _0802B468 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _0802B46C @ =gBitTable - ldrb r3, [r4] - lsls r0, r3, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _0802B490 - ldr r0, _0802B470 @ =gActionForBanks - adds r0, r3, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _0802B490 - ldr r1, _0802B474 @ =gChosenMovesByBanks - lsls r0, r3, 1 - adds r0, r1 - ldrh r2, [r0] - cmp r2, 0xE4 - bne _0802B490 - ldr r0, _0802B478 @ =gUnknown_02024A76 - adds r0, r3, r0 - movs r1, 0xB - strb r1, [r0] - ldr r0, _0802B47C @ =gCurrentMove - strh r2, [r0] - ldr r1, _0802B480 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - ldr r1, _0802B484 @ =0x02000000 - ldr r0, _0802B488 @ =0x00016002 - adds r2, r1, r0 - movs r0, 0x1 - strb r0, [r2] - ldrb r0, [r5] - ldr r2, _0802B48C @ =0x000160a7 - adds r1, r2 - strb r0, [r1] - ldrb r0, [r4] - strb r0, [r5] - b _0802B4AA - .align 2, 0 -_0802B45C: .4byte gBankAttacker -_0802B460: .4byte gActiveBank -_0802B464: .4byte gBattleTypeFlags -_0802B468: .4byte gAbsentBankFlags -_0802B46C: .4byte gBitTable -_0802B470: .4byte gActionForBanks -_0802B474: .4byte gChosenMovesByBanks -_0802B478: .4byte gUnknown_02024A76 -_0802B47C: .4byte gCurrentMove -_0802B480: .4byte gBattlescriptCurrInstr -_0802B484: .4byte 0x02000000 -_0802B488: .4byte 0x00016002 -_0802B48C: .4byte 0x000160a7 -_0802B490: - ldr r3, _0802B4B0 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802B4AA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802B4B0: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802B3E0 - - thumb_func_start sub_802B4B4 -sub_802B4B4: @ 802B4B4 - push {r4,r5,lr} - ldr r1, _0802B4DC @ =gEffectBank - ldr r3, _0802B4E0 @ =gBankAttacker - ldrb r0, [r3] - strb r0, [r1] - ldr r2, _0802B4E4 @ =gBankTarget - lsls r0, 24 - lsrs r0, 24 - adds r4, r1, 0 - ldrb r1, [r2] - cmp r0, r1 - bne _0802B4F0 - ldr r0, _0802B4E8 @ =0x02000000 - ldr r5, _0802B4EC @ =0x00016003 - adds r1, r0, r5 - ldrb r1, [r1] - strb r1, [r2] - strb r1, [r3] - b _0802B4FA - .align 2, 0 -_0802B4DC: .4byte gEffectBank -_0802B4E0: .4byte gBankAttacker -_0802B4E4: .4byte gBankTarget -_0802B4E8: .4byte 0x02000000 -_0802B4EC: .4byte 0x00016003 -_0802B4F0: - ldr r0, _0802B510 @ =0x02000000 - ldr r3, _0802B514 @ =0x00016003 - adds r1, r0, r3 - ldrb r1, [r1] - strb r1, [r2] -_0802B4FA: - ldrb r1, [r4] - ldr r5, _0802B514 @ =0x00016003 - adds r0, r5 - strb r1, [r0] - ldr r1, _0802B518 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802B510: .4byte 0x02000000 -_0802B514: .4byte 0x00016003 -_0802B518: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802B4B4 - - thumb_func_start sub_802B51C -sub_802B51C: @ 802B51C - push {r4,lr} - ldr r0, _0802B56C @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0802B570 @ =gSideTimer - lsls r3, r0, 1 - adds r0, r3, r0 - lsls r0, 2 - adds r4, r0, r1 - ldrb r0, [r4] - cmp r0, 0 - bne _0802B544 - ldrb r2, [r4, 0x1] - cmp r2, 0 - beq _0802B58C -_0802B544: - ldr r2, _0802B574 @ =gSideAffecting - adds r2, r3, r2 - ldrh r1, [r2] - ldr r0, _0802B578 @ =0x0000fffe - ands r0, r1 - movs r3, 0 - ldr r1, _0802B57C @ =0x0000fffd - ands r0, r1 - strh r0, [r2] - strb r3, [r4] - strb r3, [r4, 0x1] - ldr r0, _0802B580 @ =0x02000000 - ldr r2, _0802B584 @ =0x00016002 - adds r1, r0, r2 - movs r2, 0x1 - strb r2, [r1] - ldr r3, _0802B588 @ =0x000160a1 - adds r0, r3 - b _0802B598 - .align 2, 0 -_0802B56C: .4byte gBankAttacker -_0802B570: .4byte gSideTimer -_0802B574: .4byte gSideAffecting -_0802B578: .4byte 0x0000fffe -_0802B57C: .4byte 0x0000fffd -_0802B580: .4byte 0x02000000 -_0802B584: .4byte 0x00016002 -_0802B588: .4byte 0x000160a1 -_0802B58C: - ldr r0, _0802B5A8 @ =0x02000000 - ldr r3, _0802B5AC @ =0x00016002 - adds r1, r0, r3 - strb r2, [r1] - ldr r1, _0802B5B0 @ =0x000160a1 - adds r0, r1 -_0802B598: - strb r2, [r0] - ldr r1, _0802B5B4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802B5A8: .4byte 0x02000000 -_0802B5AC: .4byte 0x00016002 -_0802B5B0: .4byte 0x000160a1 -_0802B5B4: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802B51C - - thumb_func_start sub_802B5B8 -sub_802B5B8: @ 802B5B8 - push {r4-r7,lr} - movs r4, 0 - ldr r0, _0802B5F8 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - beq _0802B5C6 - b _0802B94E -_0802B5C6: - ldr r5, _0802B5FC @ =gActiveBank - ldr r0, _0802B600 @ =gBankAttacker - ldrb r0, [r0] - strb r0, [r5] - ldr r6, _0802B604 @ =gBankTarget - movs r1, 0x1 - eors r0, r1 - strb r0, [r6] - ldr r0, _0802B608 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0802B614 - movs r0, 0 - movs r1, 0x5 - bl dp01_build_cmdbuf_x0D_a - ldrb r0, [r5] - bl MarkBufferBankForExecution - ldr r1, _0802B60C @ =gBattlescriptCurrInstr - ldr r0, _0802B610 @ =gUnknown_081D9F35 - b _0802B94C - .align 2, 0 -_0802B5F8: .4byte gBattleExecBuffer -_0802B5FC: .4byte gActiveBank -_0802B600: .4byte gBankAttacker -_0802B604: .4byte gBankTarget -_0802B608: .4byte gBattleTypeFlags -_0802B60C: .4byte gBattlescriptCurrInstr -_0802B610: .4byte gUnknown_081D9F35 -_0802B614: - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _0802B63C - movs r0, 0 - movs r1, 0x4 - bl dp01_build_cmdbuf_x0D_a - ldrb r0, [r5] - bl MarkBufferBankForExecution - ldr r1, _0802B634 @ =gBattlescriptCurrInstr - ldr r0, _0802B638 @ =gUnknown_081D9F00 - b _0802B94C - .align 2, 0 -_0802B634: .4byte gBattlescriptCurrInstr -_0802B638: .4byte gUnknown_081D9F00 -_0802B63C: - ldr r0, _0802B660 @ =gLastUsedItem - ldrh r0, [r0] - cmp r0, 0x5 - bne _0802B66C - ldr r0, _0802B664 @ =0x02000000 - ldr r1, _0802B668 @ =0x00016089 - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 8 - subs r0, r1 - movs r1, 0x64 - bl __divsi3 - lsls r0, 24 - lsrs r5, r0, 24 - b _0802B684 - .align 2, 0 -_0802B660: .4byte gLastUsedItem -_0802B664: .4byte 0x02000000 -_0802B668: .4byte 0x00016089 -_0802B66C: - ldr r3, _0802B6A0 @ =gBaseStats - ldr r2, _0802B6A4 @ =gBattleMons - ldrb r1, [r6] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r5, [r0, 0x8] -_0802B684: - ldr r2, _0802B6A8 @ =gLastUsedItem - ldrh r0, [r2] - cmp r0, 0x5 - bhi _0802B68E - b _0802B784 -_0802B68E: - subs r0, 0x6 - cmp r0, 0x6 - bls _0802B696 - b _0802B78E -_0802B696: - lsls r0, 2 - ldr r1, _0802B6AC @ =_0802B6B0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802B6A0: .4byte gBaseStats -_0802B6A4: .4byte gBattleMons -_0802B6A8: .4byte gLastUsedItem -_0802B6AC: .4byte _0802B6B0 - .align 2, 0 -_0802B6B0: - .4byte _0802B6CC - .4byte _0802B6FC - .4byte _0802B70E - .4byte _0802B73C - .4byte _0802B76C - .4byte _0802B72E - .4byte _0802B72E -_0802B6CC: - ldr r2, _0802B6F4 @ =gBattleMons - ldr r0, _0802B6F8 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r1, r0, 0 - adds r1, 0x21 - ldrb r1, [r1] - cmp r1, 0xB - beq _0802B760 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0xB - beq _0802B760 - cmp r1, 0x6 - beq _0802B760 - cmp r0, 0x6 - beq _0802B760 - b _0802B72E - .align 2, 0 -_0802B6F4: .4byte gBattleMons -_0802B6F8: .4byte gBankTarget -_0802B6FC: - bl sav1_map_get_light_level - lsls r0, 24 - lsrs r0, 24 - movs r4, 0xA - cmp r0, 0x5 - bne _0802B78E - movs r4, 0x23 - b _0802B78E -_0802B70E: - ldr r2, _0802B734 @ =gBattleMons - ldr r0, _0802B738 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r0, 0x2A - ldrb r1, [r0] - cmp r1, 0x27 - bhi _0802B72E - movs r0, 0x28 - subs r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x9 - bhi _0802B78E -_0802B72E: - movs r4, 0xA - b _0802B78E - .align 2, 0 -_0802B734: .4byte gBattleMons -_0802B738: .4byte gBankTarget -_0802B73C: - ldr r2, _0802B764 @ =gBattleMons - ldr r0, _0802B768 @ =gBankTarget - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetNationalPokedexFlag - lsls r0, 24 - movs r4, 0xA - cmp r0, 0 - beq _0802B78E -_0802B760: - movs r4, 0x1E - b _0802B78E - .align 2, 0 -_0802B764: .4byte gBattleMons -_0802B768: .4byte gBankTarget -_0802B76C: - ldr r0, _0802B780 @ =gBattleResults - ldrb r0, [r0, 0x13] - adds r0, 0xA - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x28 - bls _0802B78E - movs r4, 0x28 - b _0802B78E - .align 2, 0 -_0802B780: .4byte gBattleResults -_0802B784: - ldr r1, _0802B7F4 @ =gBallCatchBonuses - ldrh r0, [r2] - subs r0, 0x2 - adds r0, r1 - ldrb r4, [r0] -_0802B78E: - adds r0, r5, 0 - muls r0, r4 - movs r1, 0xA - bl __divsi3 - ldr r5, _0802B7F8 @ =gBattleMons - ldr r1, _0802B7FC @ =gBankTarget - ldrb r1, [r1] - movs r7, 0x58 - adds r4, r1, 0 - muls r4, r7 - adds r3, r4, r5 - ldrh r2, [r3, 0x2C] - lsls r1, r2, 1 - adds r1, r2 - ldrh r2, [r3, 0x28] - lsls r2, 1 - subs r2, r1, r2 - muls r0, r2 - bl __divsi3 - adds r6, r0, 0 - adds r5, 0x4C - adds r4, r5 - ldr r4, [r4] - movs r0, 0x27 - ands r0, r4 - cmp r0, 0 - beq _0802B7CA - lsls r6, 1 -_0802B7CA: - ands r4, r7 - cmp r4, 0 - beq _0802B7DC - lsls r0, r6, 4 - subs r0, r6 - movs r1, 0xA - bl __udivsi3 - adds r6, r0, 0 -_0802B7DC: - ldr r1, _0802B800 @ =gLastUsedItem - ldrh r0, [r1] - cmp r0, 0x5 - beq _0802B81C - cmp r0, 0x1 - bne _0802B808 - ldr r0, _0802B804 @ =gBattleResults - ldrb r1, [r0, 0x5] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0, 0x5] - b _0802B81C - .align 2, 0 -_0802B7F4: .4byte gBallCatchBonuses -_0802B7F8: .4byte gBattleMons -_0802B7FC: .4byte gBankTarget -_0802B800: .4byte gLastUsedItem -_0802B804: .4byte gBattleResults -_0802B808: - ldr r0, _0802B860 @ =gBattleResults - ldrh r1, [r1] - adds r0, r1 - adds r1, r0, 0 - adds r1, 0x34 - ldrb r0, [r1] - cmp r0, 0xFE - bhi _0802B81C - adds r0, 0x1 - strb r0, [r1] -_0802B81C: - cmp r6, 0xFE - bls _0802B880 - movs r0, 0 - movs r1, 0x4 - bl dp01_build_cmdbuf_x0D_a - ldr r0, _0802B864 @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - ldr r1, _0802B868 @ =gBattlescriptCurrInstr - ldr r0, _0802B86C @ =gUnknown_081D9EC2 - str r0, [r1] - ldr r1, _0802B870 @ =gBattlePartyID - ldr r0, _0802B874 @ =gBankTarget - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802B878 @ =gEnemyParty - adds r0, r1 - ldr r2, _0802B87C @ =gLastUsedItem - movs r1, 0x26 - bl SetMonData - bl CalculatePlayerPartyCount - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x6 - beq _0802B90E - b _0802B938 - .align 2, 0 -_0802B860: .4byte gBattleResults -_0802B864: .4byte gActiveBank -_0802B868: .4byte gBattlescriptCurrInstr -_0802B86C: .4byte gUnknown_081D9EC2 -_0802B870: .4byte gBattlePartyID -_0802B874: .4byte gBankTarget -_0802B878: .4byte gEnemyParty -_0802B87C: .4byte gLastUsedItem -_0802B880: - movs r0, 0xFF - lsls r0, 16 - adds r1, r6, 0 - bl __udivsi3 - bl Sqrt - lsls r0, 16 - lsrs r0, 16 - bl Sqrt - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, _0802B8A8 @ =0x000ffff0 - adds r1, r6, 0 - bl __udivsi3 - adds r6, r0, 0 - movs r4, 0 - b _0802B8B2 - .align 2, 0 -_0802B8A8: .4byte 0x000ffff0 -_0802B8AC: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_0802B8B2: - cmp r4, 0x3 - bhi _0802B8C2 - bl Random - lsls r0, 16 - lsrs r0, 16 - cmp r0, r6 - bcc _0802B8AC -_0802B8C2: - ldr r5, _0802B918 @ =gLastUsedItem - ldrh r0, [r5] - cmp r0, 0x1 - bne _0802B8CC - movs r4, 0x4 -_0802B8CC: - movs r0, 0 - adds r1, r4, 0 - bl dp01_build_cmdbuf_x0D_a - ldr r0, _0802B91C @ =gActiveBank - ldrb r0, [r0] - bl MarkBufferBankForExecution - cmp r4, 0x4 - bne _0802B944 - ldr r1, _0802B920 @ =gBattlescriptCurrInstr - ldr r0, _0802B924 @ =gUnknown_081D9EC2 - str r0, [r1] - ldr r1, _0802B928 @ =gBattlePartyID - ldr r0, _0802B92C @ =gBankTarget - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802B930 @ =gEnemyParty - adds r0, r1 - movs r1, 0x26 - adds r2, r5, 0 - bl SetMonData - bl CalculatePlayerPartyCount - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x6 - bne _0802B938 -_0802B90E: - ldr r1, _0802B934 @ =gBattleCommunication - movs r0, 0 - strb r0, [r1, 0x5] - b _0802B94E - .align 2, 0 -_0802B918: .4byte gLastUsedItem -_0802B91C: .4byte gActiveBank -_0802B920: .4byte gBattlescriptCurrInstr -_0802B924: .4byte gUnknown_081D9EC2 -_0802B928: .4byte gBattlePartyID -_0802B92C: .4byte gBankTarget -_0802B930: .4byte gEnemyParty -_0802B934: .4byte gBattleCommunication -_0802B938: - ldr r1, _0802B940 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - b _0802B94E - .align 2, 0 -_0802B940: .4byte gBattleCommunication -_0802B944: - ldr r0, _0802B954 @ =gBattleCommunication - strb r4, [r0, 0x5] - ldr r1, _0802B958 @ =gBattlescriptCurrInstr - ldr r0, _0802B95C @ =gUnknown_081D9F0A -_0802B94C: - str r0, [r1] -_0802B94E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802B954: .4byte gBattleCommunication -_0802B958: .4byte gBattlescriptCurrInstr -_0802B95C: .4byte gUnknown_081D9F0A - thumb_func_end sub_802B5B8 - - thumb_func_start sub_802B960 -sub_802B960: @ 802B960 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - ldr r0, _0802B9C8 @ =gBattlePartyID - mov r9, r0 - ldr r5, _0802B9CC @ =gBankAttacker - ldrb r0, [r5] - movs r4, 0x1 - eors r0, r4 - lsls r0, 1 - add r0, r9 - ldrh r0, [r0] - movs r1, 0x64 - mov r8, r1 - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - ldr r6, _0802B9D0 @ =gEnemyParty - adds r0, r6 - bl GiveMonToPlayer - ldr r2, _0802B9D4 @ =gBattleResults - ldr r1, _0802B9D8 @ =gBattleMons - ldrb r0, [r5] - eors r4, r0 - movs r0, 0x58 - muls r0, r4 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2, 0x28] - lsls r4, 1 - add r4, r9 - ldrh r0, [r4] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r6 - adds r2, 0x2A - movs r1, 0x2 - bl GetMonData - ldr r1, _0802B9DC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802B9C8: .4byte gBattlePartyID -_0802B9CC: .4byte gBankAttacker -_0802B9D0: .4byte gEnemyParty -_0802B9D4: .4byte gBattleResults -_0802B9D8: .4byte gBattleMons -_0802B9DC: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802B960 - - thumb_func_start sub_802B9E0 -sub_802B9E0: @ 802B9E0 - push {r4-r6,lr} - ldr r4, _0802BA20 @ =gBattleMons - ldr r6, _0802BA24 @ =gBankTarget - ldrb r0, [r6] - movs r5, 0x58 - muls r0, r5 - adds r0, r4 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetNationalPokedexFlag - lsls r0, 24 - cmp r0, 0 - beq _0802BA2C - ldr r3, _0802BA28 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0802BA82 - .align 2, 0 -_0802BA20: .4byte gBattleMons -_0802BA24: .4byte gBankTarget -_0802BA28: .4byte gBattlescriptCurrInstr -_0802BA2C: - ldrb r0, [r6] - muls r0, r5 - adds r0, r4 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl GetNationalPokedexFlag - ldrb r0, [r6] - adds r2, r0, 0 - muls r2, r5 - adds r0, r2, r4 - ldrh r0, [r0] - cmp r0, 0xC9 - bne _0802BA5C - ldr r0, _0802BA88 @ =gSaveBlock2 - adds r1, r4, 0 - adds r1, 0x48 - adds r1, r2, r1 - ldr r1, [r1] - str r1, [r0, 0x1C] -_0802BA5C: - ldrb r0, [r6] - adds r2, r0, 0 - muls r2, r5 - adds r0, r2, r4 - ldrh r1, [r0] - movs r0, 0x9A - lsls r0, 1 - cmp r1, r0 - bne _0802BA7A - ldr r0, _0802BA88 @ =gSaveBlock2 - adds r1, r4, 0 - adds r1, 0x48 - adds r1, r2, r1 - ldr r1, [r1] - str r1, [r0, 0x20] -_0802BA7A: - ldr r1, _0802BA8C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802BA82: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802BA88: .4byte gSaveBlock2 -_0802BA8C: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802B9E0 - - thumb_func_start sub_802BA90 -sub_802BA90: @ 802BA90 - push {r4-r7,lr} - sub sp, 0x4 - ldr r7, _0802BAA8 @ =gBattleCommunication - ldrb r1, [r7] - cmp r1, 0x1 - beq _0802BAC6 - cmp r1, 0x1 - bgt _0802BAAC - cmp r1, 0 - beq _0802BAB8 - b _0802BBC4 - .align 2, 0 -_0802BAA8: .4byte gBattleCommunication -_0802BAAC: - cmp r1, 0x2 - beq _0802BB10 - cmp r1, 0x3 - bne _0802BAB6 - b _0802BBB0 -_0802BAB6: - b _0802BBC4 -_0802BAB8: - movs r0, 0x1 - negs r0, r0 - str r1, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - b _0802BB6E -_0802BAC6: - ldr r0, _0802BB04 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802BBC4 - ldr r4, _0802BB08 @ =gBattleMons - ldr r6, _0802BB0C @ =gBankTarget - ldrb r0, [r6] - movs r5, 0x58 - muls r0, r5 - adds r0, r4 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r6] - adds r2, r1, 0 - muls r2, r5 - adds r1, r4, 0 - adds r1, 0x54 - adds r1, r2, r1 - ldr r1, [r1] - adds r4, 0x48 - adds r2, r4 - ldr r2, [r2] - bl sub_809070C - strb r0, [r7, 0x1] - b _0802BB72 - .align 2, 0 -_0802BB04: .4byte gPaletteFade -_0802BB08: .4byte gBattleMons -_0802BB0C: .4byte gBankTarget -_0802BB10: - ldr r0, _0802BB7C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802BBC4 - ldr r0, _0802BB80 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _0802BB84 @ =sub_800F808 - cmp r1, r0 - bne _0802BBC4 - ldr r2, _0802BB88 @ =gTasks - ldrb r1, [r7, 0x1] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r4, [r0, 0x4] - cmp r4, 0 - bne _0802BBC4 - ldr r0, _0802BB8C @ =gBattleTerrainTiles_Building - ldr r1, _0802BB90 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0802BB94 @ =gBattleTerrainTilemap_Building - ldr r1, _0802BB98 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0802BB9C @ =gBattleTerrainPalette_BattleTower - movs r1, 0x20 - movs r2, 0x60 - bl LoadCompressedPalette - ldr r1, _0802BBA0 @ =REG_BG3CNT - ldr r2, _0802BBA4 @ =0x00005a0b - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _0802BBA8 @ =gUnknown_030041B0 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0802BBAC @ =0x0000fffc - str r4, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 -_0802BB6E: - bl BeginNormalPaletteFade -_0802BB72: - ldrb r0, [r7] - adds r0, 0x1 - strb r0, [r7] - b _0802BBC4 - .align 2, 0 -_0802BB7C: .4byte gPaletteFade -_0802BB80: .4byte gMain -_0802BB84: .4byte sub_800F808 -_0802BB88: .4byte gTasks -_0802BB8C: .4byte gBattleTerrainTiles_Building -_0802BB90: .4byte 0x06008000 -_0802BB94: .4byte gBattleTerrainTilemap_Building -_0802BB98: .4byte 0x0600d000 -_0802BB9C: .4byte gBattleTerrainPalette_BattleTower -_0802BBA0: .4byte REG_BG3CNT -_0802BBA4: .4byte 0x00005a0b -_0802BBA8: .4byte gUnknown_030041B0 -_0802BBAC: .4byte 0x0000fffc -_0802BBB0: - ldr r0, _0802BBCC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802BBC4 - ldr r1, _0802BBD0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_0802BBC4: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802BBCC: .4byte gPaletteFade -_0802BBD0: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802BA90 - - thumb_func_start sub_802BBD4 -sub_802BBD4: @ 802BBD4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, [sp, 0x20] - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r12, r1 - lsls r2, 24 - lsrs r5, r2, 24 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r4, 24 - lsrs r4, 24 - mov r8, r4 - mov r2, r12 - cmp r2, r7 - bgt _0802BC5A - lsls r1, r6, 1 - ldr r0, _0802BC20 @ =0x0600c000 - adds r1, r0 - mov r9, r1 -_0802BC06: - adds r1, r6, 0 - adds r0, r2, 0x1 - mov r10, r0 - cmp r1, r5 - bgt _0802BC54 - lsls r0, r2, 6 - mov r4, r9 - adds r3, r4, r0 -_0802BC16: - cmp r2, r12 - bne _0802BC28 - ldr r0, _0802BC24 @ =0x00001022 - b _0802BC36 - .align 2, 0 -_0802BC20: .4byte 0x0600c000 -_0802BC24: .4byte 0x00001022 -_0802BC28: - cmp r2, r7 - bne _0802BC34 - ldr r0, _0802BC30 @ =0x00001028 - b _0802BC36 - .align 2, 0 -_0802BC30: .4byte 0x00001028 -_0802BC34: - ldr r0, _0802BC68 @ =0x00001025 -_0802BC36: - cmp r1, r6 - beq _0802BC42 - adds r0, 0x1 - cmp r1, r5 - bne _0802BC42 - adds r0, 0x1 -_0802BC42: - mov r4, r8 - cmp r4, 0 - beq _0802BC4A - movs r0, 0 -_0802BC4A: - strh r0, [r3] - adds r3, 0x2 - adds r1, 0x1 - cmp r1, r5 - ble _0802BC16 -_0802BC54: - mov r2, r10 - cmp r2, r7 - ble _0802BC06 -_0802BC5A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802BC68: .4byte 0x00001025 - thumb_func_end sub_802BBD4 - - thumb_func_start sub_802BC6C -sub_802BC6C: @ 802BC6C - push {lr} - ldr r0, _0802BC88 @ =gBattleCommunication - ldrb r1, [r0, 0x1] - lsls r1, 28 - movs r0, 0x90 - lsls r0, 23 - adds r1, r0 - lsrs r1, 24 - movs r0, 0xC8 - bl sub_814A880 - pop {r0} - bx r0 - .align 2, 0 -_0802BC88: .4byte gBattleCommunication - thumb_func_end sub_802BC6C - - thumb_func_start nullsub_6 -nullsub_6: @ 802BC8C - bx lr - thumb_func_end nullsub_6 - - thumb_func_start atkF3_receive_new_pokemon_maybe -atkF3_receive_new_pokemon_maybe: @ 802BC90 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r0, _0802BCB4 @ =gBattleCommunication - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0x4 - bls _0802BCA8 - b _0802BEDA -_0802BCA8: - lsls r0, r1, 2 - ldr r1, _0802BCB8 @ =_0802BCBC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802BCB4: .4byte gBattleCommunication -_0802BCB8: .4byte _0802BCBC - .align 2, 0 -_0802BCBC: - .4byte _0802BCD0 - .4byte _0802BCEC - .4byte _0802BD84 - .4byte _0802BE50 - .4byte _0802BEA4 -_0802BCD0: - bl sub_8023A80 - ldr r0, _0802BCE8 @ =gBattleCommunication - ldrb r1, [r0] - adds r1, 0x1 - movs r2, 0 - strb r1, [r0] - strb r2, [r0, 0x1] - bl sub_802BC6C - b _0802BEDA - .align 2, 0 -_0802BCE8: .4byte gBattleCommunication -_0802BCEC: - ldr r0, _0802BD60 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0802BD10 - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _0802BD10 - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0 - strb r0, [r4, 0x1] - bl sub_802BC6C -_0802BD10: - ldr r0, _0802BD60 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0802BD36 - ldr r4, _0802BD64 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _0802BD36 - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0x1 - strb r0, [r4, 0x1] - bl sub_802BC6C -_0802BD36: - ldr r0, _0802BD60 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0802BD68 - movs r0, 0x5 - bl PlaySE - ldr r1, _0802BD64 @ =gBattleCommunication - ldrb r0, [r1, 0x1] - cmp r0, 0 - bne _0802BD7A - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0x3 - bl BeginFastPaletteFade - b _0802BEDA - .align 2, 0 -_0802BD60: .4byte gMain -_0802BD64: .4byte gBattleCommunication -_0802BD68: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0802BD72 - b _0802BEDA -_0802BD72: - movs r0, 0x5 - bl PlaySE - ldr r1, _0802BD80 @ =gBattleCommunication -_0802BD7A: - movs r0, 0x4 - strb r0, [r1] - b _0802BEDA - .align 2, 0 -_0802BD80: .4byte gBattleCommunication -_0802BD84: - ldr r0, _0802BE34 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0802BD92 - b _0802BEDA -_0802BD92: - ldr r7, _0802BE38 @ =gBattlePartyID - ldr r0, _0802BE3C @ =gBankAttacker - mov r10, r0 - ldrb r0, [r0] - movs r4, 0x1 - eors r0, r4 - lsls r0, 1 - adds r0, r7 - ldrh r0, [r0] - movs r1, 0x64 - mov r9, r1 - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - ldr r1, _0802BE40 @ =gEnemyParty - mov r8, r1 - add r0, r8 - movs r1, 0x2 - ldr r2, _0802BE44 @ =0x02016079 - bl GetMonData - mov r1, r10 - ldrb r0, [r1] - eors r0, r4 - lsls r0, 1 - adds r0, r7 - ldrh r0, [r0] - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - add r0, r8 - movs r1, 0xB - bl GetMonData - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 16 - mov r1, r10 - ldrb r0, [r1] - eors r0, r4 - lsls r0, 1 - adds r0, r7 - ldrh r0, [r0] - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - add r0, r8 - bl GetMonGender - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - mov r1, r10 - ldrb r0, [r1] - eors r4, r0 - lsls r4, 1 - adds r4, r7 - ldrh r0, [r4] - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - add r0, r8 - movs r1, 0 - movs r2, 0 - bl GetMonData - str r0, [sp] - ldr r0, _0802BE48 @ =sub_800F808 - str r0, [sp, 0x4] - movs r0, 0x2 - ldr r1, _0802BE44 @ =0x02016079 - adds r2, r6, 0 - adds r3, r5, 0 - bl DoNamingScreen - ldr r1, _0802BE4C @ =gBattleCommunication - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0802BEDA - .align 2, 0 -_0802BE34: .4byte gPaletteFade -_0802BE38: .4byte gBattlePartyID -_0802BE3C: .4byte gBankAttacker -_0802BE40: .4byte gEnemyParty -_0802BE44: .4byte 0x02016079 -_0802BE48: .4byte sub_800F808 -_0802BE4C: .4byte gBattleCommunication -_0802BE50: - ldr r0, _0802BE88 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _0802BE8C @ =sub_800F808 - cmp r1, r0 - bne _0802BEDA - ldr r0, _0802BE90 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802BEDA - ldr r2, _0802BE94 @ =gBattlePartyID - ldr r0, _0802BE98 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x1 - eors r0, r1 - lsls r0, 1 - adds r0, r2 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802BE9C @ =gEnemyParty - adds r0, r1 - ldr r2, _0802BEA0 @ =0x02016079 - movs r1, 0x2 - bl SetMonData - b _0802BEC0 - .align 2, 0 -_0802BE88: .4byte gMain -_0802BE8C: .4byte sub_800F808 -_0802BE90: .4byte gPaletteFade -_0802BE94: .4byte gBattlePartyID -_0802BE98: .4byte gBankAttacker -_0802BE9C: .4byte gEnemyParty -_0802BEA0: .4byte 0x02016079 -_0802BEA4: - bl CalculatePlayerPartyCount - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x6 - bne _0802BEC0 - ldr r1, _0802BEBC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _0802BEDA - .align 2, 0 -_0802BEBC: .4byte gBattlescriptCurrInstr -_0802BEC0: - ldr r3, _0802BEEC @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_0802BEDA: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802BEEC: .4byte gBattlescriptCurrInstr - thumb_func_end atkF3_receive_new_pokemon_maybe - - thumb_func_start sub_802BEF0 -sub_802BEF0: @ 802BEF0 - ldr r2, _0802BF10 @ =gBattleMons - ldr r0, _0802BF14 @ =gBankAttacker - ldrb r1, [r0] - movs r0, 0x58 - muls r1, r0 - adds r1, r2 - ldr r0, _0802BF18 @ =gBattleMoveDamage - ldr r2, [r0] - ldrh r0, [r1, 0x28] - subs r0, r2 - strh r0, [r1, 0x28] - ldr r1, _0802BF1C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_0802BF10: .4byte gBattleMons -_0802BF14: .4byte gBankAttacker -_0802BF18: .4byte gBattleMoveDamage -_0802BF1C: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802BEF0 - - thumb_func_start sub_802BF20 -sub_802BF20: @ 802BF20 - ldr r1, _0802BF3C @ =gBattleMons - ldr r0, _0802BF40 @ =gBankAttacker - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x4C - adds r0, r1 - movs r1, 0 - str r1, [r0] - ldr r1, _0802BF44 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_0802BF3C: .4byte gBattleMons -_0802BF40: .4byte gBankAttacker -_0802BF44: .4byte gBattlescriptCurrInstr - thumb_func_end sub_802BF20 - - thumb_func_start sub_802BF48 -sub_802BF48: @ 802BF48 - ldr r1, _0802BF50 @ =gFightStateTracker - movs r0, 0xC - strb r0, [r1] - bx lr - .align 2, 0 -_0802BF50: .4byte gFightStateTracker - thumb_func_end sub_802BF48 - - thumb_func_start sub_802BF54 -sub_802BF54: @ 802BF54 - ldr r1, _0802BF64 @ =gFightStateTracker - movs r0, 0xC - strb r0, [r1] - ldr r1, _0802BF68 @ =gCurrentMoveTurn - ldr r0, _0802BF6C @ =gNoOfAllBanks - ldrb r0, [r0] - strb r0, [r1] - bx lr - .align 2, 0 -_0802BF64: .4byte gFightStateTracker -_0802BF68: .4byte gCurrentMoveTurn -_0802BF6C: .4byte gNoOfAllBanks - thumb_func_end sub_802BF54 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/battle_9.s b/asm/battle_9.s index fffb56dc9..1c5431afc 100644 --- a/asm/battle_9.s +++ b/asm/battle_9.s @@ -136,7 +136,7 @@ _080360D8: ldrh r1, [r4] mov r3, r8 ldrb r2, [r3] - bl ai_rate_move + bl AI_TypeCalc lsls r0, 24 lsrs r1, r0, 24 movs r0, 0x2 @@ -211,7 +211,7 @@ _0803617C: beq _080361BC ldrh r1, [r5] ldrb r2, [r7] - bl ai_rate_move + bl AI_TypeCalc lsls r0, 24 lsrs r1, r0, 24 movs r0, 0x2 @@ -693,7 +693,7 @@ _08036550: ldrh r1, [r5] mov r3, r9 ldrb r2, [r3] - bl ai_rate_move + bl AI_TypeCalc lsls r0, 24 lsrs r1, r0, 24 movs r0, 0x2 @@ -770,7 +770,7 @@ _080365F2: ldrh r1, [r5] mov r3, r9 ldrb r2, [r3] - bl ai_rate_move + bl AI_TypeCalc lsls r0, 24 lsrs r1, r0, 24 movs r0, 0x2 @@ -1061,7 +1061,7 @@ _08036850: adds r0, r1 ldrh r0, [r0] adds r1, r4, 0 - bl ai_rate_move + bl AI_TypeCalc ldr r1, [sp] ands r1, r0 cmp r1, 0 @@ -1096,7 +1096,7 @@ _0803688E: beq _080368CA ldrh r1, [r5] ldrb r2, [r7] - bl ai_rate_move + bl AI_TypeCalc lsls r0, 24 lsrs r1, r0, 24 movs r0, 0x2 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index fbb0826fc..853760b4a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -4,7 +4,7 @@ .section script_data, "aw", %progbits -gUnknown_081D6BBC:: @ 81D6BBC +gBattleScriptsEffectsTable:: @ 81D6BBC .4byte MoveEffect_Hit .4byte MoveEffect_Sleep .4byte MoveEffect_PoisonHit @@ -305,11 +305,11 @@ MoveEffect_Sleep: @ 81D6F81 attackcanceler attackstring ppreduce - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed jumpifstatus TARGET, SLP, BattleScript_1D6FC4 jumpifcannotsleep BattleScript_1D6FE0 - jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6 - accuracycheck BattleScript_1D83D6, 0 + jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed + accuracycheck BattleScript_ButItFailed, 0 jumpifhalverset TARGET, 32, BattleScript_1D9037 attackanimation waitanimation @@ -638,9 +638,9 @@ MoveEffect_Roar: @ 81D72C5 ppreduce jumpifability TARGET, ABILITY_SUCTION_CUPS, BattleScript_1D988D jumpifspecialstatusflag TARGET, 0x400, 0, BattleScript_1D93EC - accuracycheck BattleScript_1D83D6, 65535 + accuracycheck BattleScript_ButItFailed, 65535 accuracycheck BattleScript_1D6F77, 0 - forcerandomswitch BattleScript_1D83D6 + forcerandomswitch BattleScript_ButItFailed MoveEffect_MultiHit: @ 81D72ED attackcanceler @@ -707,7 +707,7 @@ MoveEffect_Conversion: @ 81D73B1 attackcanceler attackstring ppreduce - changetypestoenemyattacktype BattleScript_1D83D6 + changetypestoenemyattacktype BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_TypeTransform @@ -737,13 +737,13 @@ MoveEffect_Toxic: @ 81D73F4 attackstring ppreduce jumpifability TARGET, ABILITY_IMMUNITY, BattleScript_1D7463 - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed jumpifstatus TARGET, PSN, BattleScript_1D7455 jumpifstatus TARGET, TOX, BattleScript_1D7455 - jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6 + jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed jumpiftype TARGET, TYPE_POISON, BattleScript_1D83E8 jumpiftype TARGET, TYPE_STEEL, BattleScript_1D83E8 - accuracycheck BattleScript_1D83D6, 0 + accuracycheck BattleScript_ButItFailed, 0 jumpifhalverset TARGET, 32, BattleScript_1D9037 attackanimation waitanimation @@ -810,7 +810,7 @@ MoveEffect_Ohko: @ 81D74E4 attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 65535 + accuracycheck BattleScript_ButItFailed, 65535 atk6 jumpifbyte 4, 0x2024c68, 41, BattleScript_1D6F48 koplussomethings BattleScript_1D7505 @@ -939,7 +939,7 @@ MoveEffect_FocusEnergy: @ 81D7689 attackcanceler attackstring ppreduce - jumpifsecondarytstatus USER, S_FOCUS_ENERGY, BattleScript_1D83D6 + jumpifsecondarytstatus USER, S_FOCUS_ENERGY, BattleScript_ButItFailed setincreasedcriticalchance attackanimation waitanimation @@ -958,9 +958,9 @@ MoveEffect_Confuse: @ 81D76BF attackstring ppreduce jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_1D98E5 - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed jumpifsecondarytstatus TARGET, S_CONFUSED, BattleScript_1D76FE - accuracycheck BattleScript_1D83D6, 0 + accuracycheck BattleScript_ButItFailed, 0 jumpifhalverset TARGET, 32, BattleScript_1D9037 attackanimation waitanimation @@ -1041,13 +1041,13 @@ MoveEffect_Poison: @ 81D7795 attackstring ppreduce jumpifability TARGET, ABILITY_IMMUNITY, BattleScript_1D7463 - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed jumpifstatus TARGET, PSN, BattleScript_1D7455 jumpifstatus TARGET, TOX, BattleScript_1D7455 jumpiftype TARGET, TYPE_POISON, BattleScript_1D83E8 jumpiftype TARGET, TYPE_STEEL, BattleScript_1D83E8 - jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6 - accuracycheck BattleScript_1D83D6, 0 + jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed + accuracycheck BattleScript_ButItFailed, 0 jumpifhalverset TARGET, 32, BattleScript_1D9037 attackanimation waitanimation @@ -1062,12 +1062,12 @@ MoveEffect_Paralyze: @ 81D77F6 attackstring ppreduce jumpifability TARGET, ABILITY_LIMBER, BattleScript_1D7859 - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed atk6 - jumpifbyte 4, 0x2024c68, 41, BattleScript_1D83D6 + jumpifbyte 4, 0x2024c68, 41, BattleScript_ButItFailed jumpifstatus TARGET, PAR, BattleScript_1D784B - jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6 - accuracycheck BattleScript_1D83D6, 0 + jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed + accuracycheck BattleScript_ButItFailed, 0 jumpifhalverset TARGET, 32, BattleScript_1D9037 attackanimation waitanimation @@ -1190,9 +1190,9 @@ MoveEffect_Mimic: @ 81D7988 attackcanceler attackstring ppreduce - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 - accuracycheck BattleScript_1D83D6, 65535 - copyattack BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed + accuracycheck BattleScript_ButItFailed, 65535 + copyattack BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_LearnedMove2 @@ -1214,7 +1214,7 @@ MoveEffect_LeechSeed: @ 81D79C2 attackstring pause 32 ppreduce - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed accuracycheck BattleScript_1D79D9, 0 BattleScript_1D79D9: @ 81D79D9 @@ -1240,8 +1240,8 @@ MoveEffect_Disable: @ 81D79FB attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 0 - disablelastusedattack BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 0 + disablelastusedattack BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_MoveWasDisabled @@ -1285,7 +1285,7 @@ MoveEffect_Encore: @ 81D7A5D accuracycheck BattleScript_1D6F72, 0 attackstring ppreduce - setencore BattleScript_1D83D6 + setencore BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_EncoreGot @@ -1296,8 +1296,8 @@ MoveEffect_PainSplit: @ 81D7A79 attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 65535 - painsplitdamagecalculator BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 65535 + painsplitdamagecalculator BattleScript_ButItFailed attackanimation waitanimation orword 0x2024c6c, 0x100 @@ -1315,7 +1315,7 @@ MoveEffect_Snore: @ 81D7AB0 jumpifstatus USER, SLP, BattleScript_1D7AC2 attackstring ppreduce - jump BattleScript_1D83D6 + jump BattleScript_ButItFailed BattleScript_1D7AC2: @ 81D7AC2 jumpifhalfword 0, 0x2024be8, 214, BattleScript_1D7AD6 @@ -1334,7 +1334,7 @@ MoveEffect_Conversion2: @ 81D7AEA attackcanceler attackstring ppreduce - settypetorandomresistance BattleScript_1D83D6 + settypetorandomresistance BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_TypeTransform @@ -1345,8 +1345,8 @@ MoveEffect_LockOn: @ 81D7AFF attackcanceler attackstring ppreduce - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 - accuracycheck BattleScript_1D83D6, 0 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed + accuracycheck BattleScript_ButItFailed, 0 setalwayshitflag attackanimation waitanimation @@ -1358,8 +1358,8 @@ MoveEffect_Sketch: @ 81D7B21 attackcanceler attackstring ppreduce - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 - copymovepermanently BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed + copymovepermanently BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_SketchedMove @@ -1371,7 +1371,7 @@ MoveEffect_SleepTalk: @ 81D7B40 jumpifstatus USER, SLP, BattleScript_1D7B52 attackstring ppreduce - jump BattleScript_1D83D6 + jump BattleScript_ButItFailed BattleScript_1D7B52: @ 81D7B52 printstring BATTLE_TEXT_FastAsleep @@ -1382,7 +1382,7 @@ BattleScript_1D7B52: @ 81D7B52 orword 0x2024c6c, 0x800 selectrandommovefromusermoves BattleScript_1D7B72 pause 64 - jump BattleScript_1D83D6 + jump BattleScript_ButItFailed BattleScript_1D7B72: @ 81D7B72 attackanimation @@ -1410,8 +1410,8 @@ MoveEffect_Spite: @ 81D7B99 attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 0 - reducepprandom BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 0 + reducepprandom BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_ReducedBy @@ -1512,8 +1512,8 @@ MoveEffect_MeanLook: @ 81D7CCC attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 65534 - jumpifsecondarytstatus TARGET, S_MEAN_LOOK, BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 65534 + jumpifsecondarytstatus TARGET, S_MEAN_LOOK, BattleScript_ButItFailed attackanimation waitanimation setbyte 0x2024d21, 32 @@ -1526,10 +1526,10 @@ MoveEffect_Nightmare: @ 81D7CF4 attackcanceler attackstring ppreduce - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 - jumpifsecondarytstatus TARGET, S_NIGHTMARE, BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed + jumpifsecondarytstatus TARGET, S_NIGHTMARE, BattleScript_ButItFailed jumpifstatus TARGET, SLP, BattleScript_1D7D1A - jump BattleScript_1D83D6 + jump BattleScript_ButItFailed BattleScript_1D7D1A: @ 81D7D1A attackanimation @@ -1553,7 +1553,7 @@ MoveEffect_Curse: @ 81D7D3B ppreduce jumpifstat USER, 2, 3, 0, BattleScript_1D7D60 jumpifstat USER, 1, 1, 12, BattleScript_1D7D60 - jumpifstat USER, 0, 2, 12, BattleScript_1D83D6 + jumpifstat USER, 0, 2, 12, BattleScript_ButItFailed BattleScript_1D7D60: @ 81D7D60 copyarray 0x2024c08, 0x2024c07, 1 @@ -1588,8 +1588,8 @@ BattleScript_1D7DC4: @ 81D7DC4 attackcanceler attackstring ppreduce - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 - cursetarget BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed + cursetarget BattleScript_ButItFailed orword 0x2024c6c, 0x100 setbyte 0x2016002, 0 attackanimation @@ -1640,7 +1640,7 @@ MoveEffect_PerishSong: @ 81D7E3D attackcanceler attackstring ppreduce - setperishsong BattleScript_1D83D6 + setperishsong BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_PerishSong @@ -1687,7 +1687,7 @@ MoveEffect_Swagger: @ 81D7EA2 accuracycheck BattleScript_1D6F72, 0 attackstring ppreduce - jumpifconfusedandattackmaxed 1, BattleScript_1D83D6 + jumpifconfusedandattackmaxed 1, BattleScript_ButItFailed attackanimation waitanimation setbyte 0x201601e, 33 @@ -1724,8 +1724,8 @@ MoveEffect_Attract: @ 81D7F1F attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 0 - tryinfatuatetarget BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 0 + tryinfatuatetarget BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_FellLove @@ -1773,10 +1773,10 @@ MoveEffect_BatonPass: @ 81D7F7C attackcanceler attackstring ppreduce - jumpifcannotswitch 129, BattleScript_1D83D6 + jumpifcannotswitch 129, BattleScript_ButItFailed attackanimation waitanimation - openpartyscreen USER, BattleScript_1D83D6 + openpartyscreen USER, BattleScript_ButItFailed atke2 USER waitstateatk atk51 USER, 2 @@ -1858,7 +1858,7 @@ MoveEffect_BellyDrum: @ 81D8038 attackcanceler attackstring ppreduce - maxattackhalvehp BattleScript_1D83D6 + maxattackhalvehp BattleScript_ButItFailed orword 0x2024c6c, 0x100 attackanimation waitanimation @@ -1872,7 +1872,7 @@ MoveEffect_PsychUp: @ 81D805A attackcanceler attackstring ppreduce - copyfoestats BattleScript_1D83D6 + copyfoestats BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_CopyStatChanges @@ -1971,7 +1971,7 @@ MoveEffect_FutureSight: @ 81D817D attackcanceler attackstring ppreduce - setfutureattack BattleScript_1D83D6 + setfutureattack BattleScript_ButItFailed attackanimation waitanimation printfromtable BattleTextList_4015E2 @@ -2017,9 +2017,9 @@ MoveEffect_Teleport: @ 81D8233 attackcanceler attackstring ppreduce - jumpifhalfword 4, 0x20239f8, 8, BattleScript_1D83D6 + jumpifhalfword 4, 0x20239f8, 8, BattleScript_ButItFailed atk76 USER, 2 - jumpifbyte 0, 0x2024d1e, 1, BattleScript_1D83D6 + jumpifbyte 0, 0x2024d1e, 1, BattleScript_ButItFailed jumpifbyte 0, 0x2024d1e, 2, BattleScript_1D8839 attackanimation waitanimation @@ -2038,7 +2038,7 @@ MoveEffect_BeatUp: @ 81D826E BattleScript_1D8281: @ 81D8281 atk25 - beatupcalculation BattleScript_1D82C4, BattleScript_1D83D6 + beatupcalculation BattleScript_1D82C4, BattleScript_ButItFailed printstring BATTLE_TEXT_PokeAttack critcalc jumpifbyte 1, 0x2024c0d, 2, BattleScript_1D829C @@ -2156,7 +2156,7 @@ BattleScript_1D83D4: @ 81D83D4 BattleScript_1D83D5: @ 81D83D5 ppreduce -BattleScript_1D83D6:: @ 81D83D6 +BattleScript_ButItFailed:: @ 81D83D6 pause 32 orbyte 0x2024c68, 32 resultmessage @@ -2243,8 +2243,8 @@ MoveEffect_Torment: @ 81D8495 attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 0 - settorment BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 0 + settorment BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_TormentSubject @@ -2257,7 +2257,7 @@ MoveEffect_Flatter: @ 81D84B1 accuracycheck BattleScript_1D6F72, 0 attackstring ppreduce - jumpifconfusedandattackmaxed 4, BattleScript_1D83D6 + jumpifconfusedandattackmaxed 4, BattleScript_ButItFailed attackanimation waitanimation setbyte 0x201601e, 20 @@ -2279,12 +2279,12 @@ MoveEffect_WillOWisp: @ 81D850F attackcanceler attackstring ppreduce - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed jumpifstatus TARGET, BRN, BattleScript_1D8575 jumpiftype TARGET, TYPE_FIRE, BattleScript_1D83E8 jumpifability TARGET, ABILITY_WATER_VEIL, BattleScript_1D855B - jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_1D83D6 - accuracycheck BattleScript_1D83D6, 0 + jumpifstatus TARGET, SLP | PSN | BRN | FRZ | PAR | TOX, BattleScript_ButItFailed + accuracycheck BattleScript_ButItFailed, 0 jumpifhalverset TARGET, 32, BattleScript_1D9037 attackanimation waitanimation @@ -2309,7 +2309,7 @@ MoveEffect_Memento: @ 81D8583 jumpifbyte 0, 0x2024d24, 1, BattleScript_1D860A attackstring ppreduce - jumpifattackandspecialattackcannotfall BattleScript_1D83D6 + jumpifattackandspecialattackcannotfall BattleScript_ButItFailed setuserhptozero attackanimation waitanimation @@ -2415,8 +2415,8 @@ MoveEffect_Taunt: @ 81D86AB attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 0 - settaunt BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 0 + settaunt BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_TauntFell @@ -2427,7 +2427,7 @@ MoveEffect_HelpingHand: @ 81D86C7 attackcanceler attackstring ppreduce - sethelpinghand BattleScript_1D83D6 + sethelpinghand BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_ReadyToHelp @@ -2438,9 +2438,9 @@ MoveEffect_Trick: @ 81D86DC attackcanceler attackstring ppreduce - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 - accuracycheck BattleScript_1D83D6, 0 - itemswap BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed + accuracycheck BattleScript_ButItFailed, 0 + itemswap BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_SwitchedItems @@ -2453,8 +2453,8 @@ MoveEffect_RolePlay: @ 81D870A attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 65535 - copyability BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 65535 + copyability BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_CopiedObject @@ -2465,7 +2465,7 @@ MoveEffect_Wish: @ 81D8726 attackcanceler attackstring ppreduce - atkd4 0, BattleScript_1D83D6 + atkd4 0, BattleScript_ButItFailed attackanimation waitanimation jump BattleScript_EndTurn @@ -2484,7 +2484,7 @@ MoveEffect_Ingrain: @ 81D874D attackcanceler attackstring ppreduce - setroots BattleScript_1D83D6 + setroots BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_PlantedRoots @@ -2510,7 +2510,7 @@ MoveEffect_Recycle: @ 81D8782 attackcanceler attackstring ppreduce - recycleitem BattleScript_1D83D6 + recycleitem BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_FoundOne @@ -2562,11 +2562,11 @@ MoveEffect_Yawn: @ 81D87EE ppreduce jumpifability TARGET, ABILITY_VITAL_SPIRIT, BattleScript_1D882F jumpifability TARGET, ABILITY_INSOMNIA, BattleScript_1D882F - jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_1D83D6 + jumpifsecondarytstatus TARGET, S_SUBSTITUTE, BattleScript_ButItFailed jumpifhalverset TARGET, 32, BattleScript_1D9037 - accuracycheck BattleScript_1D83D6, 65535 - jumpifcannotsleep BattleScript_1D83D6 - setyawn BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 65535 + jumpifcannotsleep BattleScript_ButItFailed + setyawn BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_DrowsyMade @@ -2590,7 +2590,7 @@ MoveEffect_Endeavor: @ 81D8852 attackcanceler attackstring ppreduce - setdamagetohealthdifference BattleScript_1D83D6 + setdamagetohealthdifference BattleScript_ButItFailed copyarray 0x2024bf0, 0x2024bec, 4 accuracycheck BattleScript_1D6F77, 0 atk6 @@ -2608,8 +2608,8 @@ MoveEffect_SkillSwap: @ 81D8893 attackcanceler attackstring ppreduce - accuracycheck BattleScript_1D83D6, 65535 - abilityswap BattleScript_1D83D6 + accuracycheck BattleScript_ButItFailed, 65535 + abilityswap BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_AbilitySwap @@ -2620,7 +2620,7 @@ MoveEffect_Imprison: @ 81D88AF attackcanceler attackstring ppreduce - imprisoneffect BattleScript_1D83D6 + imprisoneffect BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_SealedMove @@ -2631,7 +2631,7 @@ MoveEffect_Refresh: @ 81D88C4 attackcanceler attackstring ppreduce - cureifburnedparalysedorpoisoned BattleScript_1D83D6 + cureifburnedparalysedorpoisoned BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_StatusNormal @@ -2643,7 +2643,7 @@ MoveEffect_Grudge: @ 81D88DB attackcanceler attackstring ppreduce - setgrudge BattleScript_1D83D6 + setgrudge BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_GrudgeBear @@ -2740,7 +2740,7 @@ MoveEffect_WaterSport: @ 81D89D7 attackcanceler attackstring ppreduce - settypebasedhalvers BattleScript_1D83D6 + settypebasedhalvers BattleScript_ButItFailed attackanimation waitanimation printfromtable BattleTextList_4015D4 @@ -2767,7 +2767,7 @@ MoveEffect_Tickle: @ 81D8A0A jumpifstat TARGET, 0, 2, 0, BattleScript_1D8A7D BattleScript_1D8A1F: @ 81D8A1F - accuracycheck BattleScript_1D83D6, 0 + accuracycheck BattleScript_ButItFailed, 0 attackanimation waitanimation setbyte 0x20160dc, 0 @@ -2924,7 +2924,7 @@ MoveEffect_Camouflage: @ 81D8C43 attackcanceler attackstring ppreduce - settypetoterrain BattleScript_1D83D6 + settypetoterrain BattleScript_ButItFailed attackanimation waitanimation printstring BATTLE_TEXT_TypeTransform @@ -3364,7 +3364,7 @@ gUnknown_081D90B2:: @ 81D90B2 gUnknown_081D90F1:: @ 81D90F1 printstring BATTLE_TEXT_UnleashedEnergy waitmessage 64 - jump BattleScript_1D83D6 + jump BattleScript_ButItFailed gUnknown_081D90FC:: @ 81D90FC attackanimation @@ -3385,7 +3385,7 @@ BattleScript_1D9116: @ 81D9116 atk52 TARGET jump BattleScript_EndTurn -gUnknown_081D9128:: @ 81D9128 +BattleScript_MistProtected:: @ 81D9128 pause 32 printstring BATTLE_TEXT_MistProtect waitmessage 64 @@ -3531,17 +3531,17 @@ BattleScript_RapidSpinAway:: @ 81D92C0 breakfree return -gUnknown_081D92C2:: @ 81D92C2 +BattleScript_WrapFree:: @ 81D92C2 printstring BATTLE_TEXT_GotFreeFrom waitmessage 64 return -gUnknown_081D92C9:: @ 81D92C9 +BattleScript_LeechSeedFree:: @ 81D92C9 printstring BATTLE_TEXT_LeechShed waitmessage 64 return -gUnknown_081D92D0:: @ 81D92D0 +BattleScript_SpikesFree:: @ 81D92D0 printstring BATTLE_TEXT_SpikesBlownAway waitmessage 64 return @@ -4164,7 +4164,7 @@ BattleScript_1D988D: @ 81D988D waitmessage 64 jump BattleScript_EndTurn -gUnknown_081D989B:: @ 81D989B +BattleScript_AbilityNoStatLoss:: @ 81D989B pause 32 printstring BATTLE_TEXT_PreventedStatLoss waitmessage 64 @@ -4188,7 +4188,7 @@ BattleScript_PSNPrevention:: @ 81D98BD waitmessage 64 return -gUnknown_081D98C9:: @ 81D98C9 +BattleScript_ObliviousPreventsAttraction:: @ 81D98C9 pause 32 printstring BATTLE_TEXT_PreventedRomance waitmessage 64 @@ -4214,7 +4214,7 @@ gUnknown_081D98F3:: @ 81D98F3 waitmessage 64 jump BattleScript_EndTurn -gUnknown_081D9903:: @ 81D9903 +BattleScript_AbilityNoSpecificStatLoss:: @ 81D9903 pause 32 printstring BATTLE_TEXT_PreventedLoss waitmessage 64 diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 3f0dc8af1..b10b7f96f 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -51,7 +51,7 @@ BattleScript_1D9EBC: @ 81D9EBC atk98 1 pokemoncatchfunction -gUnknown_081D9EC2:: @ 81D9EC2 +BattleScript_SuccessBallThrow:: @ 81D9EC2 jumpifhalfword 0, gLastUsedItem, 5, BattleScript_1D9ED0 atk60 11 @@ -76,12 +76,12 @@ BattleScript_1D9EF8: @ 81D9EF8 setbyte gBattleOutcome, 7 activesidesomething -gUnknown_081D9F00:: @ 81D9F00 +BattleScript_WallyBallThrow:: @ 81D9F00 printstring BATTLE_TEXT_BallCaught2 setbyte gBattleOutcome, 7 activesidesomething -gUnknown_081D9F0A:: @ 81D9F0A +BattleScript_ShakeBallThrow:: @ 81D9F0A printfromtable BattleTextList_4015E6 waitmessage 64 jumpifbyte 5, gBattleTypeFlags, 128, BattleScript_1D9F34 @@ -93,7 +93,7 @@ gUnknown_081D9F0A:: @ 81D9F0A BattleScript_1D9F34: @ 81D9F34 atkf6 -gUnknown_081D9F35:: @ 81D9F35 +BattleScript_TrainerBallBlock:: @ 81D9F35 waitmessage 64 printstring BATTLE_TEXT_BlockBall waitmessage 64 diff --git a/data/data2.s b/data/data2a.s index 00ef5c26e..db2158fc7 100644 --- a/data/data2.s +++ b/data/data2a.s @@ -1027,778 +1027,3 @@ gUnknown_081FA724:: @ 81FA724 .2byte 0x140 .2byte 0x130 .2byte 0xFFFF - - .align 2 -gBattleScriptingCommandsTable:: @ 81FA73C - .4byte atk00_attackcanceler - .4byte atk01_accuracycheck - .4byte atk02_attackstring - .4byte atk03_ppreduce - .4byte atk04_critcalc - .4byte atk05_damagecalc1 - .4byte atk06_typecalc - .4byte atk07_dmg_adjustment - .4byte atk08_dmg_adjustment2 - .4byte atk09_attackanimation - .4byte atk0A_waitanimation - .4byte atk0B_healthbarupdate - .4byte atk0C_datahpupdate - .4byte atk0D_critmessage - .4byte atk0E_effectiveness_sound - .4byte atk0F_resultmessage - .4byte atk10_printstring - .4byte atk11_printstring_playeronly - .4byte atk12_waitmessage - .4byte atk13_printfromtable - .4byte atk14_printfromtable_playeronly - .4byte atk15_seteffectwithchancetarget - .4byte atk16_seteffectprimary - .4byte atk17_seteffectsecondary - .4byte atk18_status_effect_clear - .4byte atk19_faint_pokemon - .4byte atk1A_faint_animation - .4byte atk1B_faint_effects_clear - .4byte atk1C_jumpifstatus - .4byte atk1D_jumpifstatus2 - .4byte atk1E_jumpifability - .4byte atk1F_jumpifsideaffecting - .4byte atk20_jumpifstat - .4byte atk21_jumpifstatus3 - .4byte atk22_jumpiftype - .4byte atk23_getexp - .4byte atk24 - .4byte atk25_move_values_cleanup - .4byte atk26_set_multihit - .4byte atk27_decrement_multihit - .4byte atk28_goto - .4byte atk29_jumpifbyte - .4byte atk2A_jumpifhalfword - .4byte atk2B_jumpifword - .4byte atk2C_jumpifarrayequal - .4byte atk2D_jumpifarraynotequal - .4byte atk2E_setbyte - .4byte atk2F_addbyte - .4byte atk30_subbyte - .4byte atk31_copyarray - .4byte atk32_copyarray_withindex - .4byte atk33_orbyte - .4byte atk34_orhalfword - .4byte atk35_orword - .4byte atk36_bicbyte - .4byte atk37_bichalfword - .4byte atk38_bicword - .4byte atk39_pause - .4byte atk3A_waitstate - .4byte atk3B_healthbar_update - .4byte atk3C_return - .4byte atk3D_end - .4byte atk3E_end2 - .4byte atk3F_end3 - .4byte atk40_jump_if_move_affected_by_protect - .4byte atk41_call - .4byte atk42_jumpiftype2 - .4byte atk43_jumpifabilitypresent - .4byte atk44 - .4byte atk45_playanimation - .4byte atk46_playanimation2 - .4byte atk47_setgraphicalstatchangevalues_setgraphicalstatchangevalues_setgraphicalstatchangevalues - .4byte atk48_playstatchangeanimation - .4byte sub_80217F8 - .4byte atk4A_damageflags - .4byte atk4B_cmd4b - .4byte atk4C_switch1 - .4byte sub_80225F0 - .4byte sub_8022784 - .4byte sub_8022830 - .4byte atk50_openpartyscreen - .4byte sub_802331C - .4byte sub_8023524 - .4byte sub_80237CC - .4byte atk54_802511C - .4byte sub_8023848 - .4byte atk56_8025194 - .4byte atk57_80251C4_flee - .4byte atk58_cmd58 - .4byte atk59_8025230 - .4byte sub_8023AF8 - .4byte atk5B_80256E0 - .4byte atk5C_cmd5c - .4byte sub_8024014 - .4byte atk5E_8025A70 - .4byte atk5F_8025B24 - .4byte atk60_cmd60 - .4byte atk61_8025BA4 - .4byte atk62_08025C6C - .4byte atk63_jumptoattack - .4byte atk64_statusanimation - .4byte atk65_8025D90 - .4byte atk66_8025E38 - .4byte atk67_8025ECC - .4byte sub_80246A0 - .4byte atk69_8025FE0 - .4byte atk6A_stash_item_for_side - .4byte sub_80248C0 - .4byte sub_80248FC - .4byte sub_8024C4C - .4byte atk6E_state0_side_becomes_attacker - .4byte atk6F_8026810 - .4byte atk70_record_ability_usage_of_side - .4byte atk71_80268A0 - .4byte atk72_flee - .4byte atk73_cmd73 - .4byte atk74_hp_tresholds_2 - .4byte atk75_8026A58 - .4byte sub_8024F40 - .4byte atk77_setprotect - .4byte atk78_faintifabilitynotdamp - .4byte atk79_setuserhptozero - .4byte sub_80253E8 - .4byte sub_802548C - .4byte sub_8025508 - .4byte sub_80256D0 - .4byte atk7E_setreflect - .4byte sub_80257DC - .4byte atk80_manipulatedamage - .4byte atk81_setrest - .4byte atk82_jumpifnotfirstturn - .4byte sub_8025A34 - .4byte sub_8025AE0 - .4byte sub_8025B5C - .4byte atk86_stockpiletobasedamage - .4byte sub_8025D00 - .4byte atk88_negativedamage - .4byte atk89_statbuffchange - .4byte atk8A_normalisebuffs - .4byte atk8B_setbide - .4byte atk8C_confuseifrepeatingattackends - .4byte atk8D_setloopcounter - .4byte sub_8026468 - .4byte sub_8026590 - .4byte sub_802688C - .4byte atk91_givemoney - .4byte atk92_setlightscreen - .4byte sub_8026B78 - .4byte atk94_gethalfcurrentenemyhp - .4byte sub_8026E94 - .4byte sub_8026EEC - .4byte sub_8027064 - .4byte sub_8027238 - .4byte sub_8027348 - .4byte atk9A_setincreasedcriticalchance - .4byte atk9B_transformdataexecution - .4byte sub_80275D8 - .4byte atk9D_copyattack - .4byte sub_80278B8 - .4byte sub_8027960 - .4byte atkA0_psywavedamageeffect - .4byte atkA1_counterdamagecalculator - .4byte atkA2_mirrorcoatdamagecalculator - .4byte atkA3_disablelastusedattack - .4byte atkA4_setencore - .4byte sub_8027E4C - .4byte sub_8027F44 - .4byte atkA7_setalwayshitflag - .4byte atkA8_copymovepermanently - .4byte sub_8028420 - .4byte sub_8028558 - .4byte atkAB_802A458 - .4byte atkAC_remaininghptopower - .4byte sub_8028668 - .4byte sub_8028858 - .4byte sub_8028AD4 - .4byte sub_8028B70 - .4byte sub_8028BFC - .4byte atkB2_setperishsong - .4byte atkB3_rolloutdamagecalculation - .4byte atkB4_jumpifconfusedandattackmaxed - .4byte sub_8028EC8 - .4byte atkB6_happinesstodamagecalculation - .4byte atkB7_presentdamagecalculation - .4byte sub_80290BC - .4byte atkB9_magnitudedamagecalculation - .4byte sub_8029270 - .4byte sub_80293E8 - .4byte atkBC_maxattackhalvehp - .4byte atkBD_copyfoestats - .4byte atkBE_breakfree - .4byte sub_802964C - .4byte atkC0_recoverbasedonsunlight - .4byte sub_8029784 - .4byte atkC2_selectnexttarget - .4byte atkC3_setfutureattack - .4byte atkC4_802B910 - .4byte atkC5_hidepreattack - .4byte atkC6_unhidepostattack - .4byte atkC7_setminimize - .4byte sub_8029DAC - .4byte atkC9_jumpifattackandspecialattackcannotfall - .4byte atkCA_setforcedtarget - .4byte atkCB_setcharge - .4byte atkCC_callterrainattack - .4byte atkCD_cureifburnedparalysedorpoisoned - .4byte atkCE_settorment - .4byte atkCF_jumpifnodamage - .4byte atkD0_settaunt - .4byte sub_802A170 - .4byte sub_802A218 - .4byte sub_802A4B0 - .4byte atkD4_802C408 - .4byte sub_802A5FC - .4byte atkD6_doubledamagedealtifdamaged - .4byte sub_802A6BC - .4byte atkD8_setdamagetohealthdifference - .4byte atkD9_scaledamagebyhealthratio - .4byte atkDA_abilityswap - .4byte atkDB_imprisoneffect - .4byte atkDC_setgrudge - .4byte atkDD_weightdamagecalculation - .4byte atkDE_asistattackselect - .4byte atkDF_setmagiccoat - .4byte atkE0_setstealstatchange - .4byte atkE1_802CBE4 - .4byte sub_802ADD8 - .4byte atkE3_jumpiffainted - .4byte sub_802AEB0 - .4byte sub_802AF68 - .4byte atkE6_castform_transform - .4byte atkE7_castform_switch - .4byte atkE8_settypebasedhalvers - .4byte sub_802B1C0 - .4byte atkEA_recycleitem - .4byte atkEB_settypetoterrain - .4byte sub_802B3E0 - .4byte sub_802B4B4 - .4byte sub_802B51C - .4byte sub_802B5B8 - .4byte sub_802B960 - .4byte sub_802B9E0 - .4byte sub_802BA90 - .4byte atkF3_receive_new_pokemon_maybe - .4byte sub_802BEF0 - .4byte sub_802BF20 - .4byte sub_802BF48 - .4byte sub_802BF54 - - .align 2 -gAccuracyStageRatios:: @ 81FAB1C - .byte 33, 100, 0, 0 @ -6 - .byte 36, 100, 0, 0 @ -5 - .byte 43, 100, 0, 0 @ -4 - .byte 50, 100, 0, 0 @ -3 - .byte 60, 100, 0, 0 @ -2 - .byte 75, 100, 0, 0 @ -1 - .byte 1, 1, 0, 0 @ 0 - .byte 133, 100, 0, 0 @ +1 - .byte 166, 100, 0, 0 @ +2 - .byte 2, 1, 0, 0 @ +3 - .byte 233, 100, 0, 0 @ +4 - .byte 133, 50, 0, 0 @ +5 - .byte 3, 1, 0, 0 @ +6 - -@ The chance is 1/N for each stage. - .align 1 -gCriticalHitChance:: @ 81FAB50 - .2byte 16 @ +0 - .2byte 8 @ +1 - .2byte 4 @ +2 - .2byte 3 @ +3 - .2byte 2 @ +4 - - .align 2 -gStatusFlagsForMoveEffects:: @ 81FAB5C - .4byte 0x00000000 - .4byte 0x00000007 - .4byte 0x00000008 - .4byte 0x00000010 - .4byte 0x00000020 - .4byte 0x00000040 - .4byte 0x00000080 - .4byte 0x00000007 - .4byte 0x00000008 - .4byte 0x00000000 - .4byte 0x00000070 - .4byte 0x00000000 - .4byte 0x00001000 - .4byte 0x0000E000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00400000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x04000000 - .4byte 0x08000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000C00 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - - .align 2 -gMoveEffectBS_Ptrs:: @ 81FAC4C - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D965A - .4byte BattleScript_1D9669 - .4byte BattleScript_1D9678 - .4byte BattleScript_1D9687 - .4byte BattleScript_1D969D - .4byte BattleScript_1D96BA - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D9696 - .4byte BattleScript_1D96AA - .4byte BattleScript_1D963E - .4byte BattleScript_1D96B1 - .4byte BattleScript_1D96C8 - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D963E - .4byte BattleScript_1D96C8 - -@ unreferenced bit masks - .byte 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F - -gLevelUpStatBoxStats:: @ 81FACEF - .byte 0x3A @ HP - .byte 0x3E @ Sp. Attack - .byte 0x3B @ Attack - .byte 0x3F @ Sp. Defense - .byte 0x3C @ Defense - .byte 0x3D @ Speed - - .align 1 -gProtectSuccessRates:: @ 81FACF6 - .2byte 0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF - - .align 1 -gUnknown_081FACFE:: @ 81FACFE - .2byte MOVE_METRONOME - .2byte MOVE_STRUGGLE - .2byte MOVE_SKETCH - .2byte MOVE_MIMIC - .2byte 0xFFFE - .2byte MOVE_COUNTER - .2byte MOVE_MIRROR_COAT - .2byte MOVE_PROTECT - .2byte MOVE_DETECT - .2byte MOVE_ENDURE - .2byte MOVE_DESTINY_BOND - .2byte MOVE_SLEEP_TALK - .2byte MOVE_THIEF - .2byte MOVE_FOLLOW_ME - .2byte MOVE_SNATCH - .2byte MOVE_HELPING_HAND - .2byte MOVE_COVET - .2byte MOVE_TRICK - .2byte MOVE_FOCUS_PUNCH - .2byte 0xFFFF - -gUnknown_081FAD26:: @ 81FAD26 - .byte 1, 200 - .byte 4, 150 - .byte 9, 100 - .byte 16, 80 - .byte 32, 40 - .byte 48, 20 - - .align 1 -gNaturePowerMoves:: @ 81FAD32 - .2byte MOVE_STUN_SPORE - .2byte MOVE_RAZOR_LEAF - .2byte MOVE_EARTHQUAKE - .2byte MOVE_HYDRO_PUMP - .2byte MOVE_SURF - .2byte MOVE_BUBBLE_BEAM - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_SHADOW_BALL - .2byte MOVE_SWIFT - .2byte MOVE_SWIFT - -@ weight-based damage table for Low Kick -@ format: min. weight (hectograms), base power - - .align 1 -gWeightDamage:: @ 81FAD46 - .2byte 100, 20 - .2byte 250, 40 - .2byte 500, 60 - .2byte 1000, 80 - .2byte 2000, 100 - .2byte -1, -1 - - .align 1 -gPickupItems:: @ 81FAD5E - .2byte ITEM_SUPER_POTION, 30 - .2byte ITEM_FULL_HEAL, 40 - .2byte ITEM_ULTRA_BALL, 50 - .2byte ITEM_RARE_CANDY, 60 - .2byte ITEM_FULL_RESTORE, 70 - .2byte ITEM_REVIVE, 80 - .2byte ITEM_NUGGET, 90 - .2byte ITEM_PROTEIN, 95 - .2byte ITEM_PP_UP, 99 - .2byte ITEM_KINGS_ROCK, 1 - -gTerrainToType:: @ 81FAD86 - .byte TYPE_GRASS @ tall grass - .byte TYPE_GRASS @ long grass - .byte TYPE_GROUND @ sand - .byte TYPE_WATER @ underwater - .byte TYPE_WATER @ water - .byte TYPE_WATER @ pond water - .byte TYPE_ROCK @ rock - .byte TYPE_ROCK @ cave - .byte TYPE_NORMAL @ building - .byte TYPE_NORMAL @ plain - -gBallCatchBonuses:: @ 81FAD90 - .byte 20 @ Ultra Ball - .byte 15 @ Great Ball - .byte 10 @ Poké Ball - .byte 15 @ Safari Ball - - .string "ターン$" @ "turn" - - .align 2 -gPlayerBufferCommands:: @ 81FAD98 - .4byte PlayerHandleGetAttributes - .4byte sub_802ECF0 - .4byte PlayerHandleSetAttributes - .4byte sub_802F7CC - .4byte PlayerHandleLoadPokeSprite - .4byte PlayerHandleSendOutPoke - .4byte PlayerHandleReturnPokeToBall - .4byte PlayerHandleTrainerThrow - .4byte PlayerHandleTrainerSlide - .4byte PlayerHandleTrainerSlideBack - .4byte sub_802FE7C - .4byte sub_802FF60 - .4byte sub_802FF80 - .4byte PlayerHandleBallThrow - .4byte PlayerHandlePuase - .4byte PlayerHandleMoveAnimation - .4byte PlayerHandlePrintString - .4byte PlayerHandlePrintStringPlayerOnly - .4byte sub_803037C - .4byte nullsub_42 - .4byte sub_8030468 - .4byte PlayerHandleOpenBag - .4byte sub_8030594 - .4byte sub_8030674 - .4byte PlayerHandleHealthBarUpdate - .4byte PlayerHandleExpBarUpdate - .4byte PlayerHandleStatusIconUpdate - .4byte PlayerHandleStatusAnimation - .4byte PlayerHandleStatusXor - .4byte sub_803097C - .4byte PlayerHandleDMATransfer - .4byte sub_8030A3C - .4byte sub_8030A6C - .4byte sub_8030A78 - .4byte sub_8030A8C - .4byte sub_8030AA0 - .4byte sub_8030AB4 - .4byte sub_8030AC8 - .4byte sub_8030AE4 - .4byte sub_8030B1C - .4byte sub_8030B34 - .4byte PlayerHandleHitAnimation - .4byte sub_8030BCC - .4byte PlayerHandleEffectivenessSound - .4byte sub_8030C1C - .4byte PlayerHandleFaintingCry - .4byte PlayerHandleIntroSlide - .4byte PlayerHandleTrainerBallThrow - .4byte sub_8030FAC - .4byte sub_80310A4 - .4byte sub_80310F0 - .4byte PlayerHandleSpriteInvisibility - .4byte PlayerHandleBattleAnimation - .4byte PlayerHandleLinkStandbyMsg - .4byte PlayerHandleResetActionMoveSelection - .4byte sub_80312A0 - .4byte nullsub_43 - -gUnknown_081FAE7C:: @ 81FAE7C - .byte 0, 2, 3, 1 - -gUnknown_081FAE80:: @ 81FAE80 - .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}$" - -gUnknown_081FAE89:: @ 81FAE89 - .byte 8, 120 - .byte 88, 120 - .byte 8, 136 - .byte 88, 136 - -gUnknown_081FAE91:: @ 81FAE91 - .byte 144, 120 - .byte 190, 120 - .byte 144, 136 - .byte 190, 136 - .byte 72, 72 - .byte 32, 90 - .byte 80, 80 - .byte 80, 88 - - .align 2 -gUnknown_081FAEA4:: @ 81FAEA4 - obj_tiles gSmokescreenImpactTiles, 0x180, 55019 - - .align 2 -gUnknown_081FAEAC:: @ 81FAEAC - obj_pal gSmokescreenImpactPalette, 55019 - - .align 2 -gOamData_81FAEB4:: @ 81FAEB4 - .2byte 0x0000 - .2byte 0x4000 - .2byte 0x0400 - - .align 2 -gSpriteAnim_81FAEBC:: @ 81FAEBC - obj_image_anim_frame 0, 4 - obj_image_anim_frame 4, 4 - obj_image_anim_frame 8, 4 - obj_image_anim_end - - .align 2 -gSpriteAnim_81FAECC:: @ 81FAECC - obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnim_81FAEDC:: @ 81FAEDC - obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnim_81FAEEC:: @ 81FAEEC - obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnimTable_81FAEFC:: @ 81FAEFC - .4byte gSpriteAnim_81FAEBC - .4byte gSpriteAnim_81FAECC - .4byte gSpriteAnim_81FAEDC - .4byte gSpriteAnim_81FAEEC - - .align 2 -gSpriteTemplate_81FAF0C:: @ 81FAF0C - spr_template 55019, 55019, gOamData_81FAEB4, gSpriteAnimTable_81FAEFC, NULL, gDummySpriteAffineAnimTable, sub_80463CC - - .align 2 -gUnknown_081FAF24:: @ 81FAF24 - obj_tiles gEnemyMonShadow_Gfx, 128, 0xD759 - - .align 2 -gOamData_81FAF2C:: @ 81FAF2C - .2byte 0x4000 - .2byte 0x4000 - .2byte 0x0C00 - - .align 2 -gSpriteTemplate_81FAF34:: @ 81FAF34 - spr_template 55129, 55039, gOamData_81FAF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8032978 - - .align 2 -gUnknown_081FAF4C:: @ 81FAF4C - .4byte 0x02008000 - .4byte 0x0200a000 - .4byte 0x0200c000 - .4byte 0x0200e000 - - .align 2 -gOpponentBufferCommands:: @ 81FAF5C - .4byte OpponentHandleGetAttributes - .4byte dp01t_01_2_read_pokmon_data_slice - .4byte OpponentHandleSetAttributes - .4byte sub_8034744 - .4byte OpponentHandleLoadPokeSprite - .4byte OpponentHandleSendOutPoke - .4byte OpponentHandleReturnPokeToBall - .4byte OpponentHandleTrainerThrow - .4byte OpponentHandleTrainerSlide - .4byte OpponentHandleTrainerSlideBack - .4byte sub_8035030 - .4byte sub_80350D4 - .4byte sub_80350E0 - .4byte OpponentHandleBallThrow - .4byte OpponentHandlePause - .4byte OpponentHandleMoveAnimation - .4byte OpponentHandlePrintString - .4byte OpponentHandlePrintStringPlayerOnly - .4byte sub_803540C - .4byte sub_803541C - .4byte sub_8035428 - .4byte sub_8035590 - .4byte sub_80355C0 - .4byte sub_80356C0 - .4byte OpponentHandleHealthBarUpdate - .4byte OpponentHandleExpBarUpdate - .4byte OpponentHandleStatusIconUpdate - .4byte OpponentHandleStatusAnimation - .4byte OpponentHandleStatusXor - .4byte sub_80358B0 - .4byte OpponentHandleDMATransfer - .4byte sub_80358C8 - .4byte sub_80358D4 - .4byte sub_80358E0 - .4byte sub_80358EC - .4byte sub_80358F8 - .4byte sub_8035904 - .4byte sub_8035910 - .4byte sub_803592C - .4byte sub_8035964 - .4byte sub_803597C - .4byte OpponentHandleHitAnimation - .4byte sub_8035A14 - .4byte OpponentHandleEffectivenessSound - .4byte sub_8035A64 - .4byte OpponentHandleFaintingCry - .4byte dp01t_2E_7_battle_intro - .4byte sub_8035B04 - .4byte dp01t_30_7_0803D67C - .4byte sub_8035E6C - .4byte sub_8035EB8 - .4byte OpponentHandleSpriteInvisibility - .4byte OpponentHandleBattleAnimation - .4byte OpponentHandleLinkStandbyMsg - .4byte OpponentHandleResetActionMoveSelection - .4byte sub_8035FA4 - .4byte nullsub_46 - -@ unreferenced unknown values - .byte 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20 - - .align 2 -gLinkOpponentBufferCommands:: @ 81FB048 - .4byte LinkOpponentHandleGetAttributes - .4byte sub_803889C - .4byte sub_80388A8 - .4byte sub_8039220 - .4byte sub_8039294 - .4byte sub_80393E4 - .4byte sub_80395B4 - .4byte sub_80396D0 - .4byte sub_80398A4 - .4byte sub_80398B0 - .4byte sub_803995C - .4byte sub_8039A00 - .4byte sub_8039A0C - .4byte sub_8039A18 - .4byte sub_8039A24 - .4byte sub_8039A30 - .4byte sub_8039CC8 - .4byte sub_8039D2C - .4byte sub_8039D38 - .4byte sub_8039D44 - .4byte sub_8039D50 - .4byte sub_8039D5C - .4byte sub_8039D68 - .4byte sub_8039D74 - .4byte sub_8039D80 - .4byte sub_8039E70 - .4byte sub_8039E7C - .4byte sub_8039EF0 - .4byte sub_8039F58 - .4byte sub_8039F64 - .4byte sub_8039F70 - .4byte sub_8039F7C - .4byte sub_8039F88 - .4byte sub_8039F94 - .4byte sub_8039FA0 - .4byte sub_8039FAC - .4byte sub_8039FB8 - .4byte sub_8039FC4 - .4byte sub_8039FE0 - .4byte sub_803A018 - .4byte sub_803A030 - .4byte dp01t_29_4_blink - .4byte sub_803A0C8 - .4byte sub_803A0D4 - .4byte sub_803A118 - .4byte sub_803A148 - .4byte dp01t_2E_4_battle_intro - .4byte sub_803A1B8 - .4byte sub_803A3DC - .4byte sub_803A520 - .4byte sub_803A56C - .4byte sub_803A578 - .4byte bx_exec_buffer_A_ch0_tbl4 - .4byte sub_803A640 - .4byte sub_803A64C - .4byte sub_803A658 - .4byte nullsub_48 - -@ 81FB12C - .include "data/battle_moves.inc" - - .align 2 -gUnknown_081FC1D0:: @ 81FC1D0 - .2byte 0x34, 0x10, 0x101 - .space 2 - - .2byte -1, -1, -1 - .space 2 diff --git a/data/data2b.s b/data/data2b.s new file mode 100644 index 000000000..ef16eaa25 --- /dev/null +++ b/data/data2b.s @@ -0,0 +1,296 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + + .string "ターン$" @ "turn" + + .align 2 +gPlayerBufferCommands:: @ 81FAD98 + .4byte PlayerHandleGetAttributes + .4byte sub_802ECF0 + .4byte PlayerHandleSetAttributes + .4byte sub_802F7CC + .4byte PlayerHandleLoadPokeSprite + .4byte PlayerHandleSendOutPoke + .4byte PlayerHandleReturnPokeToBall + .4byte PlayerHandleTrainerThrow + .4byte PlayerHandleTrainerSlide + .4byte PlayerHandleTrainerSlideBack + .4byte sub_802FE7C + .4byte sub_802FF60 + .4byte sub_802FF80 + .4byte PlayerHandleBallThrow + .4byte PlayerHandlePuase + .4byte PlayerHandleMoveAnimation + .4byte PlayerHandlePrintString + .4byte PlayerHandlePrintStringPlayerOnly + .4byte sub_803037C + .4byte nullsub_42 + .4byte sub_8030468 + .4byte PlayerHandleOpenBag + .4byte sub_8030594 + .4byte sub_8030674 + .4byte PlayerHandleHealthBarUpdate + .4byte PlayerHandleExpBarUpdate + .4byte PlayerHandleStatusIconUpdate + .4byte PlayerHandleStatusAnimation + .4byte PlayerHandleStatusXor + .4byte sub_803097C + .4byte PlayerHandleDMATransfer + .4byte sub_8030A3C + .4byte sub_8030A6C + .4byte sub_8030A78 + .4byte sub_8030A8C + .4byte sub_8030AA0 + .4byte sub_8030AB4 + .4byte sub_8030AC8 + .4byte sub_8030AE4 + .4byte sub_8030B1C + .4byte sub_8030B34 + .4byte PlayerHandleHitAnimation + .4byte sub_8030BCC + .4byte PlayerHandleEffectivenessSound + .4byte sub_8030C1C + .4byte PlayerHandleFaintingCry + .4byte PlayerHandleIntroSlide + .4byte PlayerHandleTrainerBallThrow + .4byte sub_8030FAC + .4byte sub_80310A4 + .4byte sub_80310F0 + .4byte PlayerHandleSpriteInvisibility + .4byte PlayerHandleBattleAnimation + .4byte PlayerHandleLinkStandbyMsg + .4byte PlayerHandleResetActionMoveSelection + .4byte sub_80312A0 + .4byte nullsub_43 + +gUnknown_081FAE7C:: @ 81FAE7C + .byte 0, 2, 3, 1 + +gUnknown_081FAE80:: @ 81FAE80 + .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}$" + +gUnknown_081FAE89:: @ 81FAE89 + .byte 8, 120 + .byte 88, 120 + .byte 8, 136 + .byte 88, 136 + +gUnknown_081FAE91:: @ 81FAE91 + .byte 144, 120 + .byte 190, 120 + .byte 144, 136 + .byte 190, 136 + .byte 72, 72 + .byte 32, 90 + .byte 80, 80 + .byte 80, 88 + + .align 2 +gUnknown_081FAEA4:: @ 81FAEA4 + obj_tiles gSmokescreenImpactTiles, 0x180, 55019 + + .align 2 +gUnknown_081FAEAC:: @ 81FAEAC + obj_pal gSmokescreenImpactPalette, 55019 + + .align 2 +gOamData_81FAEB4:: @ 81FAEB4 + .2byte 0x0000 + .2byte 0x4000 + .2byte 0x0400 + + .align 2 +gSpriteAnim_81FAEBC:: @ 81FAEBC + obj_image_anim_frame 0, 4 + obj_image_anim_frame 4, 4 + obj_image_anim_frame 8, 4 + obj_image_anim_end + + .align 2 +gSpriteAnim_81FAECC:: @ 81FAECC + obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP + obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP + obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP + obj_image_anim_end + + .align 2 +gSpriteAnim_81FAEDC:: @ 81FAEDC + obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP + obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP + obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP + obj_image_anim_end + + .align 2 +gSpriteAnim_81FAEEC:: @ 81FAEEC + obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP + obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP + obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP + obj_image_anim_end + + .align 2 +gSpriteAnimTable_81FAEFC:: @ 81FAEFC + .4byte gSpriteAnim_81FAEBC + .4byte gSpriteAnim_81FAECC + .4byte gSpriteAnim_81FAEDC + .4byte gSpriteAnim_81FAEEC + + .align 2 +gSpriteTemplate_81FAF0C:: @ 81FAF0C + spr_template 55019, 55019, gOamData_81FAEB4, gSpriteAnimTable_81FAEFC, NULL, gDummySpriteAffineAnimTable, sub_80463CC + + .align 2 +gUnknown_081FAF24:: @ 81FAF24 + obj_tiles gEnemyMonShadow_Gfx, 128, 0xD759 + + .align 2 +gOamData_81FAF2C:: @ 81FAF2C + .2byte 0x4000 + .2byte 0x4000 + .2byte 0x0C00 + + .align 2 +gSpriteTemplate_81FAF34:: @ 81FAF34 + spr_template 55129, 55039, gOamData_81FAF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8032978 + + .align 2 +gUnknown_081FAF4C:: @ 81FAF4C + .4byte 0x02008000 + .4byte 0x0200a000 + .4byte 0x0200c000 + .4byte 0x0200e000 + + .align 2 +gOpponentBufferCommands:: @ 81FAF5C + .4byte OpponentHandleGetAttributes + .4byte dp01t_01_2_read_pokmon_data_slice + .4byte OpponentHandleSetAttributes + .4byte sub_8034744 + .4byte OpponentHandleLoadPokeSprite + .4byte OpponentHandleSendOutPoke + .4byte OpponentHandleReturnPokeToBall + .4byte OpponentHandleTrainerThrow + .4byte OpponentHandleTrainerSlide + .4byte OpponentHandleTrainerSlideBack + .4byte sub_8035030 + .4byte sub_80350D4 + .4byte sub_80350E0 + .4byte OpponentHandleBallThrow + .4byte OpponentHandlePause + .4byte OpponentHandleMoveAnimation + .4byte OpponentHandlePrintString + .4byte OpponentHandlePrintStringPlayerOnly + .4byte sub_803540C + .4byte sub_803541C + .4byte sub_8035428 + .4byte sub_8035590 + .4byte sub_80355C0 + .4byte sub_80356C0 + .4byte OpponentHandleHealthBarUpdate + .4byte OpponentHandleExpBarUpdate + .4byte OpponentHandleStatusIconUpdate + .4byte OpponentHandleStatusAnimation + .4byte OpponentHandleStatusXor + .4byte sub_80358B0 + .4byte OpponentHandleDMATransfer + .4byte sub_80358C8 + .4byte sub_80358D4 + .4byte sub_80358E0 + .4byte sub_80358EC + .4byte sub_80358F8 + .4byte sub_8035904 + .4byte sub_8035910 + .4byte sub_803592C + .4byte sub_8035964 + .4byte sub_803597C + .4byte OpponentHandleHitAnimation + .4byte sub_8035A14 + .4byte OpponentHandleEffectivenessSound + .4byte sub_8035A64 + .4byte OpponentHandleFaintingCry + .4byte dp01t_2E_7_battle_intro + .4byte sub_8035B04 + .4byte dp01t_30_7_0803D67C + .4byte sub_8035E6C + .4byte sub_8035EB8 + .4byte OpponentHandleSpriteInvisibility + .4byte OpponentHandleBattleAnimation + .4byte OpponentHandleLinkStandbyMsg + .4byte OpponentHandleResetActionMoveSelection + .4byte sub_8035FA4 + .4byte nullsub_46 + +@ unreferenced unknown values + .byte 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20 + + .align 2 +gLinkOpponentBufferCommands:: @ 81FB048 + .4byte LinkOpponentHandleGetAttributes + .4byte sub_803889C + .4byte sub_80388A8 + .4byte sub_8039220 + .4byte sub_8039294 + .4byte sub_80393E4 + .4byte sub_80395B4 + .4byte sub_80396D0 + .4byte sub_80398A4 + .4byte sub_80398B0 + .4byte sub_803995C + .4byte sub_8039A00 + .4byte sub_8039A0C + .4byte sub_8039A18 + .4byte sub_8039A24 + .4byte sub_8039A30 + .4byte sub_8039CC8 + .4byte sub_8039D2C + .4byte sub_8039D38 + .4byte sub_8039D44 + .4byte sub_8039D50 + .4byte sub_8039D5C + .4byte sub_8039D68 + .4byte sub_8039D74 + .4byte sub_8039D80 + .4byte sub_8039E70 + .4byte sub_8039E7C + .4byte sub_8039EF0 + .4byte sub_8039F58 + .4byte sub_8039F64 + .4byte sub_8039F70 + .4byte sub_8039F7C + .4byte sub_8039F88 + .4byte sub_8039F94 + .4byte sub_8039FA0 + .4byte sub_8039FAC + .4byte sub_8039FB8 + .4byte sub_8039FC4 + .4byte sub_8039FE0 + .4byte sub_803A018 + .4byte sub_803A030 + .4byte dp01t_29_4_blink + .4byte sub_803A0C8 + .4byte sub_803A0D4 + .4byte sub_803A118 + .4byte sub_803A148 + .4byte dp01t_2E_4_battle_intro + .4byte sub_803A1B8 + .4byte sub_803A3DC + .4byte sub_803A520 + .4byte sub_803A56C + .4byte sub_803A578 + .4byte bx_exec_buffer_A_ch0_tbl4 + .4byte sub_803A640 + .4byte sub_803A64C + .4byte sub_803A658 + .4byte nullsub_48 + +@ 81FB12C + .include "data/battle_moves.inc" + + .align 2 +gUnknown_081FC1D0:: @ 81FC1D0 + .2byte 0x34, 0x10, 0x101 + .space 2 + + .2byte -1, -1, -1 + .space 2 diff --git a/include/battle.h b/include/battle.h index d4cb53689..fb5077f6a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -28,64 +28,83 @@ #define AI_ACTION_UNK7 0x0040 #define AI_ACTION_UNK8 0x0080 -#define STATUS_SLEEP 0x7 -#define STATUS_POISON 0x8 -#define STATUS_BURN 0x10 -#define STATUS_FREEZE 0x20 -#define STATUS_PARALYSIS 0x40 -#define STATUS_TOXIC_POISON 0x80 +#define STATUS_SLEEP 0x7 +#define STATUS_POISON 0x8 +#define STATUS_BURN 0x10 +#define STATUS_FREEZE 0x20 +#define STATUS_PARALYSIS 0x40 +#define STATUS_TOXIC_POISON 0x80 #define STATUS2_CONFUSION 0x00000007 #define STATUS2_UPROAR 0x00000070 +#define STATUS2_BIDE 0x00000300 //two bits 0x100 0x200 #define STATUS2_LOCK_CONFUSE 0x00000C00 #define STATUS2_MULTIPLETURNS 0x00001000 #define STATUS2_WRAPPED 0x0000E000 +#define STATUS2_INFATUATION 0x000F0000 #define STATUS2_FOCUS_ENERGY 0x00100000 #define STATUS2_TRANSFORMED 0x00200000 #define STATUS2_RECHARGE 0x00400000 #define STATUS2_RAGE 0x00800000 #define STATUS2_SUBSTITUTE 0x01000000 +#define STATUS2_DESTINY_BOND 0x02000000 #define STATUS2_ESCAPE_PREVENTION 0x04000000 #define STATUS2_NIGHTMARE 0x08000000 #define STATUS2_CURSED 0x10000000 #define STATUS2_FORESIGHT 0x20000000 +#define STATUS2_DEFENSE_CURL 0x40000000 +#define STATUS2_TORMENT 0x80000000 -#define STATUS3_LEECHSEED_RECEIVER 0x3 //two bits for the bank that gets hp +#define STATUS3_LEECHSEED_BANK 0x3 #define STATUS3_LEECHSEED 0x4 #define STATUS3_ALWAYS_HITS 0x18 //two bits #define STATUS3_PERISH_SONG 0x20 #define STATUS3_ON_AIR 0x40 #define STATUS3_UNDERGROUND 0x80 #define STATUS3_MINIMIZED 0x100 +#define STATUS3_ROOTED 0x400 #define STATUS3_CHARGED_UP 0x200 -#define STATUS3_ROOTED 0x400 +#define STATUS3_YAWN 0x1800 //two bits +#define STATUS3_IMPRISIONED 0x2000 #define STATUS3_GRUDGE 0x4000 #define STATUS3_CANT_SCORE_A_CRIT 0x8000 #define STATUS3_MUDSPORT 0x10000 #define STATUS3_WATERSPORT 0x20000 #define STATUS3_UNDERWATER 0x40000 -#define HITMARKER_x20 0x0000020 -#define HITMARKER_DESTINYBOND 0x0000040 -#define HITMARKER_NO_ANIMATIONS 0x0000080 -#define HITMARKER_IGNORE_SUBSTITUTE 0x0000100 -#define HITMARKER_NO_ATTACKSTRING 0x0000200 -#define HITMARKER_ATTACKSTRING_PRINTED 0x0000400 -#define HITMARKER_NO_PPDEDUCT 0x0000800 -#define HITMARKER_IGNORE_SAFEGUARD 0x0002000 -#define HITMARKER_SYNCHRONISE_EFFECT 0x0004000 -#define HITMARKER_IGNORE_ON_AIR 0x0010000 -#define HITMARKER_IGNORE_UNDERGROUND 0x0020000 -#define HITMARKER_IGNORE_UNDERWATER 0x0040000 -#define HITMARKER_x80000 0x0080000 -#define HITMARKER_x100000 0x0100000 -#define HITMARKER_x400000 0x0400000 -#define HITMARKER_x800000 0x0800000 -#define HITMARKER_GRUDGE 0x1000000 -#define HITMARKER_OBEYS 0x2000000 +#define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER)) + +#define HITMARKER_x20 0x00000020 +#define HITMARKER_DESTINYBOND 0x00000040 +#define HITMARKER_NO_ANIMATIONS 0x00000080 +#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100 +#define HITMARKER_NO_ATTACKSTRING 0x00000200 +#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400 +#define HITMARKER_NO_PPDEDUCT 0x00000800 +#define HITMARKER_PURSUIT_TRAP 0x00001000 +#define HITMARKER_IGNORE_SAFEGUARD 0x00002000 +#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000 +#define HITMARKER_IGNORE_ON_AIR 0x00010000 +#define HITMARKER_IGNORE_UNDERGROUND 0x00020000 +#define HITMARKER_IGNORE_UNDERWATER 0x00040000 +#define HITMARKER_x80000 0x00080000 +#define HITMARKER_x100000 0x00100000 +#define HITMARKER_x400000 0x00400000 +#define HITMARKER_x800000 0x00800000 +#define HITMARKER_GRUDGE 0x01000000 +#define HITMARKER_OBEYS 0x02000000 +#define HITMARKER_x8000000 0x08000000 #define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C)) #define HITMARKER_UNK(bank) ((0x10000000 << bank)) +#define SIDE_REFLECT 0x1 +#define SIDE_LIGHTSCREEN 0x2 +#define SIDE_SPIKES 0x10 +#define SIDE_SAFEGUARD 0x20 +#define SIDE_FUTUREATTACK 0x40 +#define SIDE_MIST 0x100 +#define SIDE_SPIKES_DMG_DONE 0x200 + #define MAX_TRAINER_ITEMS 4 #define MAX_MON_MOVES 4 #define MAX_BANKS_BATTLE 4 @@ -165,31 +184,28 @@ struct BattleStruct /* 0x2000000 */ /*0x15DDE*/ u8 unk15DDE; /*0x15DDF*/ u8 unk15DDF; /*0x15DE0*/ u8 filler15DE0[0x222]; - /*0x16002*/ u8 AnimTurn; - /*0x16003*/ u8 ScriptingActive; - /*0x16004*/ u8 WrappedMove1[4]; - /*0x16008*/ u8 WrappedMove2[4]; + /*0x16002*/ u8 animTurn; + /*0x16003*/ u8 scriptingActive; + /*0x16004*/ u8 wrappedMove1[4]; + /*0x16008*/ u8 wrappedMove2[4]; /*0x1600C*/ u8 cmd49StateTracker; /*0x1600D*/ u8 unk1600D; /*0x1600E*/ u8 unk1600E; - /*0x1600F*/ u8 atk23StateTracker; - /*0x16010*/ u8 unk16010; - /*0x16011*/ u8 unk16011; - /*0x16012*/ u8 unk16012; - /*0x16013*/ u8 unk16013; + /*0x1600F*/ u8 cmd23StateTracker; + /*0x16010*/ u8 moveTarget[4]; /*0x16014*/ u8 unk16014; /*0x16015*/ u8 unk16015; /*0x16016*/ u8 unk16016; /*0x16017*/ u8 unk16017; /*0x16018*/ u8 expGetterID; /*0x16019*/ u8 unk16019; - /*0x1601A*/ u8 unk1601A; + /*0x1601A*/ u8 atk5A_StateTracker; //also atk5B, statetracker /*0x1601B*/ u8 wildVictorySong; - /*0x1601C*/ u8 DynamicMoveType; + /*0x1601C*/ u8 dynamicMoveType; /*0x1601D*/ u8 unk1601D; /*0x1601E*/ u8 statChanger; - /*0x1601F*/ u8 DmgMultiplier; - /*0x16020*/ u8 WrappedBy[4]; + /*0x1601F*/ u8 dmgMultiplier; + /*0x16020*/ u8 wrappedBy[4]; /*0x16024*/ u8 unk16024; /*0x16025*/ u8 unk16025; /*0x16026*/ u8 unk16026; @@ -240,7 +256,7 @@ struct BattleStruct /* 0x2000000 */ /*0x16053*/ u8 unk16053; /*0x16054*/ u8 unk16054; /*0x16055*/ u8 unk16055; - /*0x16056*/ u8 unk16056; + /*0x16056*/ u8 moneyMultiplier; /*0x16057*/ u8 unk16057; /*0x16058*/ u8 unk16058; /*0x16059*/ u8 unk16059; @@ -250,38 +266,11 @@ struct BattleStruct /* 0x2000000 */ /*0x1605E*/ u8 unk1605E; /*0x1605F*/ u8 sentInPokes; /*0x16060*/ u8 unk16060[4]; - /*0x16064*/ u8 unk16064; - /*0x16065*/ u8 unk16065; - /*0x16066*/ u8 unk16066; - /*0x16067*/ u8 unk16067; - /*0x16068*/ u8 unk16068; - /*0x16069*/ u8 unk16069; - /*0x1606A*/ u8 unk1606A; - /*0x1606B*/ u8 unk1606B; - /*0x1606C*/ u8 unk1606C; - /*0x1606D*/ u8 unk1606D; - /*0x1606E*/ u8 unk1606E; - /*0x1606F*/ u8 unk1606F; - /*0x16070*/ u8 unk16070; - /*0x16071*/ u8 unk16071; - /*0x16072*/ u8 unk16072; - /*0x16073*/ u8 unk16073; - /*0x16074*/ u8 unk16074; - /*0x16075*/ u8 unk16075; - /*0x16076*/ u8 unk16076; - /*0x16077*/ u8 unk16077; + /*0x16064*/ u8 unk16064[4]; + /*0x16068*/ u8 unk16068[4]; + /*0x1606C*/ u8 unk1606C[4][3]; /*0x16078*/ u8 unk16078; - /*0x16079*/ u8 unk16079; - /*0x1607A*/ u8 unk1607A; - /*0x1607B*/ u8 unk1607B; - /*0x1607C*/ u8 unk1607C; - /*0x1607D*/ u8 unk1607D; - /*0x1607E*/ u8 unk1607E; - /*0x1607F*/ u8 unk1607F; - /*0x16080*/ u8 unk16080; - /*0x16081*/ u8 unk16081; - /*0x16082*/ u8 unk16082; - /*0x16083*/ u8 unk16083; + /*0x16079*/ u8 caughtNick[11]; /*0x16084*/ u8 unk16084; /*0x16085*/ u8 unk16085; /*0x16086*/ u8 unk16086; @@ -302,17 +291,17 @@ struct BattleStruct /* 0x2000000 */ /*0x16098*/ u8 unk16098; /*0x16099*/ u8 unk16099; /*0x1609A*/ u8 unk1609a; - /*0x1609B*/ u8 unk1609b; - /*0x1609C*/ u8 unk1609C; + /*0x1609B*/ u8 castformToChangeInto; + /*0x1609C*/ u8 atk6C_statetracker; /*0x1609D*/ u8 unk1609D; /*0x1609E*/ u8 unk1609E; /*0x1609F*/ u8 unk1609F; /*0x160A0*/ u8 unk160a0; - /*0x160A1*/ u8 AnimTargetsHit; + /*0x160A1*/ u8 animTargetsHit; /*0x160A2*/ u8 expGetterBank; /*0x160A3*/ u8 unk160A3; - /*0x160A4*/ u8 AnimArg1; - /*0x160A5*/ u8 AnimArg2; + /*0x160A4*/ u8 animArg1; + /*0x160A5*/ u8 animArg2; /*0x160A6*/ u8 unk160A6; /*0x160A7*/ u8 unk160A7; /*0x160A8*/ u8 unk160A8; @@ -335,12 +324,9 @@ struct BattleStruct /* 0x2000000 */ /*0x160B9*/ u8 unk160B9; /*0x160BA*/ u8 unk160Ba; /*0x160BB*/ u8 unk160Bb; - /*0x160BC*/ u8 unk160BC; - /*0x160BD*/ u8 unk160BD; - /*0x160BE*/ u8 unk160BE; - /*0x160BF*/ u8 unk160BF; + /*0x160BC*/ u16 HP_OnSwitchout[2]; /*0x160C0*/ u8 unk160C0; - /*0x160C1*/ u8 unk160C1; + /*0x160C1*/ u8 hpScale; /*0x160C2*/ u8 unk160C2; /*0x160C3*/ u8 unk160C3; /*0x160C4*/ u8 unk160C4; @@ -349,57 +335,68 @@ struct BattleStruct /* 0x2000000 */ /*0x160C7*/ u8 unk160C7; /*0x160C8*/ u8 unk160C8; /*0x160C9*/ u8 unk160C9; - /*0x160CA*/ u8 SynchroniseEffect; + /*0x160CA*/ u8 synchroniseEffect; /*0x160CB*/ u8 linkPlayerIndex; - /*0x160CC*/ u16 UsedHeldItems[4]; + /*0x160CC*/ u16 usedHeldItems[4]; u8 filler2[0x72E]; /* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2; }; struct DisableStruct { - /*0x00*/ u8 filler0[0x3]; - /*0x04*/ u16 DisabledMove; - /*0x06*/ u16 EncoredMove; - /*0x08*/ u8 ProtectUses; - /*0x09*/ u8 StockpileCounter; - /*0x0A*/ u8 SubstituteHP; - u8 fillerB[4]; - u8 unkF_0:4; - u8 unkF_4:4; - u8 filler10[3]; - /*0x13*/ u8 taunt:4; - /*0x13*/ u8 unkC:4; - /*0x14*/ u8 BankPreventingEscape; - /*0x15*/ u8 BankWithSureHit; - /*0x16*/ u8 IsFirstTurn; + /*0x00*/ u32 unk0; + /*0x04*/ u16 disabledMove; + /*0x06*/ u16 encoredMove; + /*0x08*/ u8 protectUses; + /*0x09*/ u8 stockpileCounter; + /*0x0A*/ u8 substituteHP; + /*0x0B*/ u8 disableTimer1 : 4; + /*0x0B*/ u8 disableTimer2 : 4; + /*0x0C*/ u8 encoredMovePos; + /*0x0D*/ u8 unkD; + /*0x0E*/ u8 encoreTimer1 : 4; + /*0x0E*/ u8 encoreTimer2 : 4; + /*0x0F*/ u8 perishSong1 : 4; + /*0x0F*/ u8 perishSong2 : 4; + /*0x10*/ u8 furyCutterCounter; + /*0x11*/ u8 rolloutTimer1 : 4; + /*0x11*/ u8 rolloutTimer2 : 4; + /*0x12*/ u8 chargeTimer1 : 4; + /*0x12*/ u8 chargeTimer2 : 4; + /*0x13*/ u8 tauntTimer1:4; + /*0x13*/ u8 tauntTimer2:4; + /*0x14*/ u8 bankPreventingEscape; + /*0x15*/ u8 bankWithSureHit; + /*0x16*/ u8 isFirstTurn; /*0x17*/ u8 unk17; - /*0x18*/ u8 TruantCounter; - /*0x19*/ u8 RechargeCounter; + /*0x18*/ u8 truantCounter : 1; + /*0x18*/ u8 unk18_a : 3; + /*0x18*/ u8 unk18_b : 4; + /*0x19*/ u8 rechargeCounter; /*0x1A*/ u8 unk1A[2]; }; struct BattleResults { - u8 PlayerFaintCounter; // 0x0 - u8 OpponentFaintCounter; // 0x1 + u8 playerFaintCounter; // 0x0 + u8 opponentFaintCounter; // 0x1 u8 unk2; // 0x2 u8 unk3; // 0x3 u8 unk4; // 0x4 u8 unk5_0:1; // 0x5 u8 unk5_1:1; // 0x5 - u16 Poke1Species; // 0x6 - u8 PokeString1[10]; // 0x8 + u16 poke1Species; // 0x6 + u8 pokeString1[10]; // 0x8 u8 unk12; - u8 BattleTurnCounter; // 0x13 - u8 PokeString2[10]; // 0x14 + u8 battleTurnCounter; // 0x13 + u8 pokeString2[10]; // 0x14 u8 filler1E[2]; - u16 LastOpponentSpecies; // 0x20 - u16 LastUsedMove; // 0x22 - u16 OpponentMove; // 0x24 - u16 OpponentSpecies; // 0x26 - u16 CaughtPoke; // 0x28 - u8 CaughtNick[10]; // 0x2A + u16 lastOpponentSpecies; // 0x20 + u16 lastUsedMove; // 0x22 + u16 opponentMove; // 0x24 + u16 opponentSpecies; // 0x26 + u16 caughtPoke; // 0x28 + u8 caughtNick[10]; // 0x2A u8 filler34[2]; u8 unk36[10]; }; @@ -454,34 +451,34 @@ struct Struct20238C8 struct ProtectStruct { /*field0*/ - u32 Protected:1; - u32 Endured:1; - u32 OnlyStruggle:1; - u32 HelpingHand:1; - u32 BounceMove:1; - u32 StealMove:1; - u32 Flag0Unknown:1; - u32 PrlzImmobility:1; + u32 protected:1; + u32 endured:1; + u32 onlyStruggle:1; + u32 helpingHand:1; + u32 bounceMove:1; + u32 stealMove:1; + u32 flag0Unknown:1; + u32 prlzImmobility:1; /*field1*/ - u32 ConfusionSelfDmg:1; - u32 NotEffective:1; - u32 ChargingTurn:1; - u32 FleeFlag:2; //for RunAway and Smoke Ball - u32 UsedImprisionedMove:1; - u32 LoveImmobility:1; - u32 UsedDisabledMove:1; + u32 confusionSelfDmg:1; + u32 notEffective:1; + u32 chargingTurn:1; + u32 fleeFlag:2; //for RunAway and Smoke Ball + u32 usedImprisionedMove:1; + u32 loveImmobility:1; + u32 usedDisabledMove:1; /*field2*/ - u32 UsedTauntedMove:1; - u32 Flag2Unknown:1; - u32 FlinchImmobility:1; - u32 NotFirstStrike:1; - u32 Free : 4; + u32 usedTauntedMove:1; + u32 flag2Unknown:1; + u32 flinchImmobility:1; + u32 notFirstStrike:1; + u32 free : 4; /*field3*/ u32 field3 : 8; - u32 PhysicalDmg; - u32 SpecialDmg; - u8 PhysicalBank; - u8 SpecialBank; + u32 physicalDmg; + u32 specialDmg; + u8 physicalBank; + u8 specialBank; u16 fieldE; }; @@ -497,7 +494,7 @@ struct SpecialStatus u8 focusBanded : 1; u8 field1[3]; u32 moveturnLostHP; - u32 moveturnlostHP_physical; + u32 moveturnLostHP_physical; u32 moveturnLostHP_special; u8 moveturnPhysicalBank; u8 moveturnSpecialBank; @@ -507,18 +504,18 @@ struct SpecialStatus struct sideTimer { - u8 reflectTimer; - u8 reflectBank; - u8 lightscreenTimer; - u8 lightscreenBank; - u8 mistTimer; - u8 mistBank; - u8 safeguardTimer; - u8 safeguardBank; - u8 followmeTimer; - u8 followmeTarget; - u8 spikesAmount; - u8 fieldB; + u8 reflectTimer; //0x0 + u8 lightscreenTimer; //0x1 + u8 mistTimer; //0x2 + u8 field3; //0x3 + u8 field4; //0x4 + u8 field5; //0x5 + u8 spikesAmount; //0x6 + u8 safeguardTimer; //0x7 + u8 followmeTimer; //0x8 + u8 followmeTarget; //0x9 + u8 fieldA; //0xA + u8 fieldB; //0xB }; struct WishFutureKnock @@ -528,7 +525,7 @@ struct WishFutureKnock s32 futureSightDmg[MAX_BANKS_BATTLE]; u16 futureSightMove[MAX_BANKS_BATTLE]; u8 wishCounter[MAX_BANKS_BATTLE]; - u8 wishUserBank[MAX_BANKS_BATTLE]; + u8 wishUserID[MAX_BANKS_BATTLE]; u8 weatherDuration; u8 knockedOffPokes[2]; }; @@ -554,6 +551,58 @@ extern u8 ewram[]; #define ewram17800 ((struct Struct2017800 *) (ewram + 0x17800)) #define ewram17810 ((struct Struct2017810 *) (ewram + 0x17810)) #define ewram17840 (*(struct Struct2017840 *) (ewram + 0x17840)) +#define B_FUNCTION_STACK ((struct funcStack *)(0x02017140)) + +struct funcStack +{ + void* ptr[8]; + u8 size; +}; + +extern u8 gBattleTextBuff1[]; + +//function declarations of buffer emits +void EmitGetAttributes(u8 buffID, u8 request, u8 c); //0x0 +void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); //0x1 +void EmitSetAttributes(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2 +void EmitSwitchInAnim(u8 a, u8 b, u8 c); //0x5 +void EmitReturnPokeToBall(u8 a, u8 b); //0x6 +void EmitTrainerSlide(u8 a); //0x8 +void EmitFaintAnimation(u8 a); //0xA +void EmitBallThrowAnim(u8 a, u8 shakes); //0xD +//void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF +void EmitPrintString(u8 a, u16 stringID); //0x10 +//void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11 +void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); //0x16 +//void EmitHealthBarUpdate(u8 a, u16 b); //0x18; Had to declare the second arg as u16 because s16 wont match in atk0b +//void EmitExpBarUpdate(u8 a, u8 b, u16 c); //0x19 +void EmitStatusIconUpdate(u8 a, u32 b, u32 c); //0x1A +void EmitStatusAnimation(u8 a, u8 b, u32 c); //0x1B +void EmitStatusXor(u8 a, u8 b); //0x1C +void EmitHitAnimation(u8 a); //0x29 +void EmitEffectivenessSound(u8 a, u16 sound); //0x2B +void EmitPlaySound(u8 a, u16 sound); //0x2C +void EmitFaintingCry(u8 a); //0x2D +void EmitBattleIntroSlide(u8 a, u8 b); //0x2E +void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); //0x30 +void dp01_build_cmdbuf_x31_31_31_31(u8 a); //0x31 +void EmitSpriteInvisibility(u8 a, u8 b); //0x33 +void EmitBattleAnimation(u8 a, u8 b, u16 c); //0x34 +void EmitResetActionMoveSelection(u8 a, u8 b); //0x36 +void dp01_build_cmdbuf_x37_a(u8 a, u8 b); //0x37 + +#define REQUEST_ALL_BATTLE 0x0 +#define REQUEST_SPECIES_BATTLE 0x1 +#define REQUEST_HELDITEM_BATTLE 0x2 +#define REQUEST_MOVES_PP_BATTLE 0x3 +#define REQUEST_PPMOVE1_BATTLE 0x9 +#define REQUEST_PPMOVE2_BATTLE 0xA +#define REQUEST_PPMOVE3_BATTLE 0xB +#define REQUEST_PPMOVE4_BATTLE 0xC +#define REQUEST_STATUS_BATTLE 0x28 +#define REQUEST_HP_BATTLE 0x2A + +void MarkBufferBankForExecution(u8 bank); extern u8 gBattleTextBuff1[]; @@ -611,7 +660,6 @@ u8 b_first_side(u8, u8, u8); void TurnValuesCleanUp(u8); void SpecialStatusesClear(void); void sub_80138F0(void); -void MarkBufferBankForExecution(); void sub_80155A4(); void CancelMultiTurnMoves(u8); void PrepareStringBattle(); @@ -625,11 +673,11 @@ u8 TurnBasedEffects(); u8 sub_80170DC(); u8 sub_80173A4(); u8 AbilityBattleEffects(u8, u8, u8, u8, u16); -u8 sub_801A02C(); +u8 ItemBattleEffects(); // asm/battle_4.o void AI_CalcDmg(u8, u8); -void TypeCalc(u16, u8, u8); +u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def); // asm/battle_5.o void nullsub_91(void); diff --git a/include/pokemon.h b/include/pokemon.h index c69fb87e0..9dd7ba06c 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -392,9 +392,14 @@ struct BattleMove u8 secondaryEffectChance; u8 target; u8 priority; - u32 flags; + u8 flags; + u8 pad[3]; }; +#define FLAG_PROTECT_AFFECTED 0x2 +#define FLAG_MAGICCOAT_AFFECTED 0x4 +#define FLAG_SNATCH_AFFECTED 0x8 + struct PokemonStorage { /*0x00*/ u8 currentBox; diff --git a/include/rom3.h b/include/rom3.h index a45ec7dc4..6b1dacd9c 100644 --- a/include/rom3.h +++ b/include/rom3.h @@ -14,23 +14,22 @@ void sub_800C35C(void); void sub_800C47C(u8); void EmitGetAttributes(u8 a, u8 b, u8 c); void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); -void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, u8 *e); void dp01_build_cmdbuf_x04_4_4_4(u8 a); -void sub_800C704(u8, u8, u8); -void dp01_build_cmdbuf_x06_a(u8 a, u8 b); +void EmitSwitchInAnim(u8, u8, u8); +void EmitReturnPokeToBall(u8 a, u8 b); void dp01_build_cmdbuf_x07_7_7_7(u8 a); -void dp01_build_cmdbuf_x08_8_8_8(u8 a); +void EmitTrainerSlide(u8 a); void dp01_build_cmdbuf_x09_9_9_9(u8 a); void EmitFaintAnimation(u8 a); void dp01_build_cmdbuf_x0B_B_B_B(u8 a); void dp01_build_cmdbuf_x0C_C_C_C(u8 a); -void dp01_build_cmdbuf_x0D_a(u8 a, u8 b); +void EmitBallThrowAnim(u8 a, u8 b); void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, u8 *g); void EmitPrintString(u8 a, u16 b); void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c); void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d); void sub_800CBE0(u8 a, u8 *b); -void dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f(u8 a, u8 b, u8 c, u8 d, u8 *e); +void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); void dp01_build_cmdbuf_x17_17_17_17(u8 a); void EmitHealthBarUpdate(u8 a, s16 b); void EmitExpBarUpdate(u8 a, u8 b, s16 c); @@ -49,7 +48,7 @@ void dp01_build_cmdbuf_x28_28_28_28(u8 a); void EmitHitAnimation(u8 a); void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a); void EmitEffectivenessSound(u8 a, u16 b); -void sub_800D074(u8 a, u16 b); +void EmitPlaySound(u8 a, u16 b); void EmitFaintingCry(u8 a); void EmitBattleIntroSlide(u8 a, u8 b); void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a); diff --git a/ld_script.txt b/ld_script.txt index 3e12b279d..8ed41e797 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -54,7 +54,7 @@ SECTIONS { src/battle_2.o(.text); asm/battle_2.o(.text); asm/battle_3.o(.text); - asm/battle_4.o(.text); + src/battle_4.o(.text); asm/battle_5.o(.text); src/battle_6.o(.text); src/battle_7.o(.text); @@ -331,7 +331,9 @@ SECTIONS { src/link.o(.rodata); src/rtc.o(.rodata); data/main_menu.o(.rodata); - data/data2.o(.rodata); + data/data2a.o(.rodata); + src/battle_4.o(.rodata); + data/data2b.o(.rodata); src/pokemon_data.o(.rodata); . = ALIGN(4); src/trig.o(.rodata); diff --git a/src/battle_2.c b/src/battle_2.c index d08f2b8df..7772444d7 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -1584,7 +1584,7 @@ void sub_8010874(void) for (j = 0; j < (u32)0x1C; j++) r4[j] = 0; - gDisableStructs[i].IsFirstTurn = 2; + gDisableStructs[i].isFirstTurn= 2; gUnknown_02024C70[i] = 0; gLastUsedMove[i] = 0; gMoveHitWith[i] = 0; @@ -1655,25 +1655,25 @@ void sub_8010874(void) ewram16113 = 0; for (i = 0; i < 11; i++) gBattleResults.unk36[i] = 0; - gBattleResults.BattleTurnCounter = 0; - gBattleResults.PlayerFaintCounter = 0; - gBattleResults.OpponentFaintCounter = 0; + gBattleResults.battleTurnCounter = 0; + gBattleResults.playerFaintCounter = 0; + gBattleResults.opponentFaintCounter = 0; gBattleResults.unk2 = 0; gBattleResults.unk3 = 0; gBattleResults.unk4 = 0; gBattleResults.unk5_0 = 0; gBattleResults.unk5_1 = 0; - gBattleResults.LastOpponentSpecies = 0; - gBattleResults.LastUsedMove = 0; - gBattleResults.OpponentMove = 0; - gBattleResults.Poke1Species = 0; - gBattleResults.OpponentSpecies = 0; - gBattleResults.CaughtPoke = 0; + gBattleResults.lastOpponentSpecies = 0; + gBattleResults.lastUsedMove = 0; + gBattleResults.opponentMove = 0; + gBattleResults.poke1Species = 0; + gBattleResults.opponentSpecies = 0; + gBattleResults.caughtPoke = 0; for (i = 0; i < 10; i++) { - gBattleResults.PokeString1[i] = 0; - gBattleResults.PokeString2[i] = 0; - gBattleResults.CaughtNick[i] = 0; + gBattleResults.pokeString1[i] = 0; + gBattleResults.pokeString2[i] = 0; + gBattleResults.caughtNick[i] = 0; } } @@ -1692,25 +1692,25 @@ void SwitchInClearStructs(void) { struct UnknownStruct12 *sp20 = &gUnknown_02024AD0[i]; - if ((sp20->unk0 & 0x04000000) && gDisableStructs[i].BankPreventingEscape == gActiveBank) + if ((sp20->unk0 & 0x04000000) && gDisableStructs[i].bankPreventingEscape == gActiveBank) sp20->unk0 &= ~0x04000000; - if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].BankWithSureHit == gActiveBank) + if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].bankWithSureHit == gActiveBank) { gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; - gDisableStructs[i].BankWithSureHit = 0; + gDisableStructs[i].bankWithSureHit = 0; } } } if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) { gBattleMons[gActiveBank].status2 &= (STATUS2_CONFUSION | STATUS2_FOCUS_ENERGY | STATUS2_SUBSTITUTE | STATUS2_ESCAPE_PREVENTION | STATUS2_CURSED); - gStatuses3[gActiveBank] &= (STATUS3_LEECHSEED_RECEIVER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT); + gStatuses3[gActiveBank] &= (STATUS3_LEECHSEED_BANK | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT); for (i = 0; i < gNoOfAllBanks; i++) { if (GetBankSide(gActiveBank) != GetBankSide(i) && (gStatuses3[i] & STATUS3_ALWAYS_HITS) != 0 - && (gDisableStructs[i].BankWithSureHit == gActiveBank)) + && (gDisableStructs[i].bankWithSureHit == gActiveBank)) { gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; gStatuses3[i] |= 0x10; @@ -1740,13 +1740,13 @@ void SwitchInClearStructs(void) if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) { - gDisableStructs[gActiveBank].SubstituteHP = sp0.SubstituteHP; - gDisableStructs[gActiveBank].BankWithSureHit = sp0.BankWithSureHit; - gDisableStructs[gActiveBank].unkF_0 = sp0.unkF_0; - gDisableStructs[gActiveBank].unkF_4 = sp0.unkF_4; + gDisableStructs[gActiveBank].substituteHP = sp0.substituteHP; + gDisableStructs[gActiveBank].bankWithSureHit = sp0.bankWithSureHit; + gDisableStructs[gActiveBank].perishSong1 = sp0.perishSong1; + gDisableStructs[gActiveBank].perishSong2 = sp0.perishSong2; } - gDisableStructs[gActiveBank].IsFirstTurn = 2; + gDisableStructs[gActiveBank].isFirstTurn= 2; gLastUsedMove[gActiveBank] = 0; gMoveHitWith[gActiveBank] = 0; gUnknown_02024C44[gActiveBank] = 0; @@ -1781,7 +1781,7 @@ void UndoEffectsAfterFainting(void) gStatuses3[gActiveBank] = 0; for (i = 0; i < gNoOfAllBanks; i++) { - if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].BankPreventingEscape == gActiveBank) + if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].bankPreventingEscape == gActiveBank) gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION; if (gBattleMons[i].status2 & (gBitTable[gActiveBank] << 16)) gBattleMons[i].status2 &= ~(gBitTable[gActiveBank] << 16); @@ -1794,27 +1794,27 @@ void UndoEffectsAfterFainting(void) ptr = (u8 *)&gDisableStructs[gActiveBank]; for (i = 0; i < (u32)0x1C; i++) ptr[i] = 0; - gProtectStructs[gActiveBank].Protected = 0; - gProtectStructs[gActiveBank].Endured = 0; - gProtectStructs[gActiveBank].OnlyStruggle = 0; - gProtectStructs[gActiveBank].HelpingHand = 0; - gProtectStructs[gActiveBank].BounceMove = 0; - gProtectStructs[gActiveBank].StealMove = 0; - gProtectStructs[gActiveBank].Flag0Unknown = 0; - gProtectStructs[gActiveBank].PrlzImmobility = 0; - gProtectStructs[gActiveBank].ConfusionSelfDmg = 0; - gProtectStructs[gActiveBank].NotEffective = 0; - gProtectStructs[gActiveBank].ChargingTurn = 0; - gProtectStructs[gActiveBank].FleeFlag = 0; - gProtectStructs[gActiveBank].UsedImprisionedMove = 0; - gProtectStructs[gActiveBank].LoveImmobility = 0; - gProtectStructs[gActiveBank].UsedDisabledMove = 0; - gProtectStructs[gActiveBank].UsedTauntedMove = 0; - gProtectStructs[gActiveBank].Flag2Unknown = 0; - gProtectStructs[gActiveBank].FlinchImmobility = 0; - gProtectStructs[gActiveBank].NotFirstStrike = 0; - - gDisableStructs[gActiveBank].IsFirstTurn = 2; + gProtectStructs[gActiveBank].protected = 0; + gProtectStructs[gActiveBank].endured = 0; + gProtectStructs[gActiveBank].onlyStruggle = 0; + gProtectStructs[gActiveBank].helpingHand = 0; + gProtectStructs[gActiveBank].bounceMove = 0; + gProtectStructs[gActiveBank].stealMove = 0; + gProtectStructs[gActiveBank].flag0Unknown = 0; + gProtectStructs[gActiveBank].prlzImmobility = 0; + gProtectStructs[gActiveBank].confusionSelfDmg = 0; + gProtectStructs[gActiveBank].notEffective = 0; + gProtectStructs[gActiveBank].chargingTurn = 0; + gProtectStructs[gActiveBank].fleeFlag = 0; + gProtectStructs[gActiveBank].usedImprisionedMove = 0; + gProtectStructs[gActiveBank].loveImmobility = 0; + gProtectStructs[gActiveBank].usedDisabledMove = 0; + gProtectStructs[gActiveBank].usedTauntedMove = 0; + gProtectStructs[gActiveBank].flag2Unknown = 0; + gProtectStructs[gActiveBank].flinchImmobility = 0; + gProtectStructs[gActiveBank].notFirstStrike = 0; + + gDisableStructs[gActiveBank].isFirstTurn= 2; gLastUsedMove[gActiveBank] = 0; gMoveHitWith[gActiveBank] = 0; gUnknown_02024C44[gActiveBank] = 0; @@ -2140,7 +2140,7 @@ void unref_sub_8011A68(void) { if (GetBankSide(gActiveBank) == 0) { - sub_800C704(0, gBattlePartyID[gActiveBank], 0); + EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], 0); MarkBufferBankForExecution(gActiveBank); } } @@ -2191,7 +2191,7 @@ void BattleBeginFirstTurn(void) return; while (ewram160F9 < gNoOfAllBanks) { - if (sub_801A02C(0, gTurnOrder[ewram160F9], 0) != 0) + if (ItemBattleEffects(0, gTurnOrder[ewram160F9], 0) != 0) r9++; ewram160F9++; if (r9 != 0) @@ -2286,8 +2286,8 @@ void BattleTurnPassed(void) gBattleMainFunc = sub_80138F0; return; } - if (gBattleResults.BattleTurnCounter < 0xFF) - gBattleResults.BattleTurnCounter++; + if (gBattleResults.battleTurnCounter < 0xFF) + gBattleResults.battleTurnCounter++; for (i = 0; i < gNoOfAllBanks; i++) { gActionForBanks[i] = 0xFF; diff --git a/src/battle_4.c b/src/battle_4.c new file mode 100644 index 000000000..9ca75e4b9 --- /dev/null +++ b/src/battle_4.c @@ -0,0 +1,18534 @@ +#include "global.h" +#include "battle.h" +#include "battle_move_effects.h" +#include "moves.h" +#include "abilities.h" +#include "item.h" +#include "items.h" +#include "data2.h" +#include "hold_effects.h" +#include "rng.h" +#include "species.h" +#include "pokemon.h" +#include "text.h" +#include "palette.h" +#include "main.h" +#include "sound.h" +#include "task.h" +#include "decompress.h" +#include "naming_screen.h" + +//for now TODO: move to battle.h +void EmitHealthBarUpdate(u8 a, u16 b); //0x18; Had to declare the second arg as u16 because s16 wont match in atk0b +void EmitExpBarUpdate(u8 a, u8 b, u16 c); //0x19 +void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11 +void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF + +//extern needed variables +extern u8 gCritMultiplier; +extern s32 gBattleMoveDamage; +extern u32 gStatuses3[4]; +extern u16 gBattleTypeFlags; +extern const u32 gBitTable[]; +extern const struct BaseStats gBaseStats[]; +extern struct BattleEnigmaBerry gEnigmaBerries[4]; +extern struct BattlePokemon gBattleMons[4]; +extern u8 gActiveBank; +extern u32 gBattleExecBuffer; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[4]; +extern u8 gTurnOrder[4]; +extern u8 gUnknown_02024A76[4]; +extern u16 gCurrentMove; +extern u8 gLastUsedAbility; +extern u16 gBattleWeather; +extern u8 gStringBank; +extern u8 gEffectBank; +extern u8 gAbsentBankFlags; +extern u8 gMultiHitCounter; +extern u16 gLastUsedMove[4]; +extern u16 gLockedMove[4]; +extern u16 gChosenMovesByBanks[4]; +extern u16 gSideAffecting[2]; +extern u16 gPauseCounterBattle; +extern u16 gPaydayMoney; +extern u16 gRandomTurnNumber; +extern u8 gBattleOutcome; +extern u8 gBattleTerrain; +extern u16 gTrainerBattleOpponent; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8* gBattlescriptCurrInstr; +extern u8 gCurrMovePos; +extern u8 gFightStateTracker; +extern u32 gHitMarker; +extern u8 gBattleMoveFlags; +extern u8 gBattleCommunication[]; +extern u16 gMoveHitWith[4]; +extern u16 gUnknown_02024C44[4]; +extern u8 gStringBank; +extern u16 gDynamicBasePower; +extern const u8 gTypeEffectiveness[]; +extern u16 gLastUsedItem; +extern u16 gBattleMovePower; +extern s32 gHP_dealt; +extern s32 gTakenDmg[4]; +extern u8 gTakenDmgBanks[4]; +extern const u16 gMissStrings[]; +extern u8 gSentPokesToOpponent[2]; +extern u8 gBank1; +extern u16 gExpShareExp; +extern u8 gBattleTextBuff1[]; +extern u8 gBattleTextBuff2[]; +extern u8 gBattleTextBuff3[]; +extern u8 gLeveledUpInBattle; +extern void (*gBattleMainFunc)(void); +extern struct Window gUnknown_03004210; +extern const u8 gUnknown_08400D7A[]; +extern u8 gPlayerPartyCount; +extern u16 word_2024E82; //move to learn +extern const u8 gTrainerMoney[]; +extern u16 gRandomMove; +extern u8* gBattleScriptsEffectsTable[]; +extern u16 gUnknown_02024BE8; //last used move in battle +extern u8 gBankInMenu; +extern u8 gActionForBanks[4]; +extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch +extern u16 gUnknown_030041B0; +extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one +extern u8 gCurrentMoveTurn; + +//extern functions +bool8 CantUseMove(void); +void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move); +void CancelMultiTurnMoves(u8 bank); +void b_movescr_stack_push(u8* BS_ptr); +void b_movescr_stack_push_cursor(void); +void RecordAbilityBattle(u8 bank, u8 ability); +void RecordItemBattle(u8 bank, u8 item); +int IsPokeDisobedient(void); +static bool8 IsTwoTurnsMove(u16 move); +static void DestinyBondFlagUpdate(void); +static void b_wonderguard_and_levitate(void); +u8 GetBankIdentity(u8 bank); +u8 GetBankSide(u8 bank); +u8 GetBattleBank(u8 bankValue); +s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def); +static u8 AttacksThisTurn(u8 bank, u16 move); //Note: returns 1 if it's a charging turn, otherwise 2 +void UndoEffectsAfterFainting(void); +void BattleMusicStop(void); +void PlayBGM(u16 songID); +void MonGainEVs(struct Pokemon*, u16 defeatedSpecies); +extern u8 gBattleBufferB[4][0x200]; +void sub_80324F8(struct Pokemon*, u8 bank); +void AdjustFriendship(struct Pokemon*, u8 value); +bool8 IsTradedMon(struct Pokemon*); +void b_movescr_stack_pop_cursor(void); +void SwitchInClearStructs(void); +u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8); +u8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID); +u16 SpeciesToNationalPokedexNum(u16 species); +u8 sub_803FC34(u8 bank); +u16 sub_803FBFC(u8 a); +u8 GetBankByPlayerAI(u8 ID); +void sub_8012258(u8); +void sub_80157C4(u8 bank); //update sent pokes in battle +//sub_803B7C8 teach poke a move +u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move); +void IncrementGameStat(u8 index); +u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); +u16 GetPokedexHeightWeight(u16 national_num, u8 heightweight); +u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); +void DestroyMenuCursor(void); +void sub_802BC6C(void); +void sub_809D9F0(struct Pokemon *party, u8, u8, void *, u32); +u8 sub_809FA30(void); +bool32 IsHMMove2(u16 move); +void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0); +void nullsub_6(void); +void ReshowBattleScreenAfterMenu(void); +void sub_800F808(void); +void sub_80B79B8(u32* moneySaveblock, u32 to_give); +void sub_80156DC(void); //set sentpokes value +bool8 sub_8014AB8(u8 bank); //can run from battle +u8 CountAliveMons(u8 caseID); +void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); +u8 CanRunFromBattle(void); +u8 sub_801B5C0(u16 move, u8 targetbyte); //get target of move +void sub_80153D0(u8 atk); //pressure perish song pp decrement +u8 castform_switch(u8 bank); +void b_push_move_exec(u8* bs_ptr); +u8 sav1_map_get_light_level(void); +u8 CalculatePlayerPartyCount(void); +u16 Sqrt(u32 num); +u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display +void sub_814A880(u8 a1, u8 a2); +u8 sub_8015A98(u8 bank, u8 unusable_moves, u8 flags); //choose move limitations +void sub_801529C(u8 bank); +bool8 IsLinkDoubleBattle(void); +void sub_8094B6C(u8 bank, u8 partyID, u8 r2); + +//extern BattleScripts +extern u8 BattleScript_EndTurn[]; +extern u8 BattleScript_NoPPForMove[]; +extern u8 BattleScript_MagicCoatBounce[]; +extern u8 BattleScript_TookAttack[]; +extern u8 BattleScript_SnatchedMove[]; +extern u8 BattleScript_Pausex20[]; +extern u8 BattleScript_SubstituteFade[]; +extern u8 BattleScript_HangedOnMsg[]; +extern u8 BattleScript_OneHitKOMsg[]; +extern u8 BattleScript_EnduredMsg[]; +extern u8 BattleScript_PSNPrevention[]; +extern u8 BattleScript_BRNPrevention[]; +extern u8 BattleScript_PRLZPrevention[]; +extern u8 BattleScript_FlinchPrevention[]; +extern u8 BattleScript_StatUp[]; +extern u8 BattleScript_StatDown[]; +extern u8 BattleScript_NoItemSteal[]; +extern u8 BattleScript_ItemSteal[]; +extern u8 BattleScript_RapidSpinAway[]; +extern u8 BattleScript_TargetPRLZHeal[]; +extern u8 BattleScript_KnockedOff[]; +extern u8 BattleScript_LevelUp[]; +extern u8 BattleScript_WrapFree[]; +extern u8 BattleScript_LeechSeedFree[]; +extern u8 BattleScript_SpikesFree[]; +extern u8 BattleScript_ButItFailed[]; +extern u8 BattleScript_ObliviousPreventsAttraction[]; +extern u8 BattleScript_MistProtected[]; +extern u8 BattleScript_AbilityNoStatLoss[]; +extern u8 BattleScript_AbilityNoSpecificStatLoss[]; +extern u8 BattleScript_TrainerBallBlock[]; +extern u8 BattleScript_WallyBallThrow[]; +extern u8 BattleScript_SuccessBallThrow[]; +extern u8 BattleScript_ShakeBallThrow[]; + +extern u8 gUnknown_081D919F[]; //spikes1 +extern u8 gUnknown_081D9171[]; //spikes2 +extern u8 gUnknown_081D91CD[]; //spikes3 +extern u8 BattleScript_1D6F44[]; //present dmg +extern u8 BattleScript_1D83B5[]; //present full hp +extern u8 BattleScript_1D839B[]; //present hp heal +extern u8 BattleScript_1D6F74[]; +extern u8 gUnknown_081D977D[]; //castform change bs +extern u8 gUnknown_081D9834[]; +extern u8 gUnknown_081D90FC[]; //bs random switchout +extern u8 gUnknown_081D95DB[]; //bs payday money give + +//useful macros +//read via orr +#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) +#define BSScriptRead16(ptr) ((ptr)[0] | (ptr)[1] << 8) +#define BSScriptRead8(ptr) (((u8)((ptr)[0]))) +#define BSScriptReadPtr(ptr) ((u8*) BSScriptRead32(ptr)) + +//read via add +#define BS2ScriptRead32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) +#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) +#define BS2ScriptReadPtr(ptr) ((u8*) BS2ScriptRead32(ptr)) + +#define ATLEAST_ONE(value)(value != 0 ? value : 1) +#define ATLEAST_ONE2(value)(value == 0 ? 1 : value) +#define ATLEAST_ONE_NEGATIVE(value)(value != 0 ? value : -1) +#define ATLEAST_ONE_PTR(value)(*value != 0 ? *value : (*value = 1)) +#define ATLEAST_ONE_PTR_NEGATIVE(value)(*value != 0 ? *value : (*value = -1)) + +#define MOVE_MISSED 0x1 +#define MOVE_SUPEREFFECTIVE 0x2 +#define MOVE_NOTVERYEFFECTIVE 0x4 +#define MOVE_NOTAFFECTED 0x8 +#define MOVE_ONEHITKO 0x10 +#define MOVE_FAILED 0x20 +#define MOVE_ENDURED 0x40 +#define MOVE_HANGEDON 0x80 + +#define MOVE_NO_EFFECT ((MOVE_MISSED | MOVE_NOTAFFECTED | MOVE_FAILED)) + +#define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) + +#define ABILITY_CONTACT 0x4 +#define ABILITY_STATUS_IMMUNNITY 0x5 +#define ABILITY_TARGET_SYNCHRONIZE 0x7 +#define ABILITY_ATK_SYNCHRONIZE 0x8 +#define ABILITY_CHECK_OTHER_SIDE 0xC +#define ABILITY_CHECK_BANK_SIDE 0xD +#define ABILITY_COUNT_OTHER_SIDE 0x10 +#define ABILITY_COUNT_BANK_SIDE 0x11 +#define ABILITT_COUNT_ON_FIELD 0x12 +#define ABILITY_CHECK_ON_FIELD 0x13 + +#define HP_BUFF 0x0 +#define ATK_BUFF 0x1 +#define DEF_BUFF 0x2 +#define SPD_BUFF 0x3 +#define SPATK_BUFF 0x4 +#define SPDEF_BUFF 0x5 +#define ACC_BUFF 0x6 +#define EVASION_BUFF 0x7 + +//array entries for battle communication +#define MOVE_EFFECT_BYTE 0x3 +#define MULTISTRING_CHOOSER 0x5 +#define MSG_DISPLAY 0x7 + +#define TARGET_SELECTED 0x0 +#define TARGET_DEPENDS 0x1 +#define TARGET_BOTH 0x8 +#define TARGET_FOES_AND_ALLY 0x20 +#define TARGET_OPPONENTS_FIELD 0x40 + +#define TYPE_FORESIGHT 0xFE +#define TYPE_ENDTABLE 0xFF + +#define CMP_EQUAL 0x0 +#define CMP_NOT_EQUAL 0x1 +#define CMP_GREATER_THAN 0x2 +#define CMP_LESS_THAN 0x3 +#define CMP_COMMON_BITS 0x4 +#define CMP_NO_COMMON_BITS 0x5 + +#define BATTLE_WON 0x1 +#define BATTLE_LOST 0x2 +#define BATTLE_DREW 0x3 +#define BATTLE_RAN 0x4 +#define BATTLE_PLAYER_TELEPORTED 0x5 +#define BATTLE_POKE_FLED 0x6 +#define BATTLE_CAUGHT 0x7 +#define BATTLE_OPPONENT_TELEPORTED 0xA + +#define uBYTE0_16(value)(( (u8) (((u16)(value) & (0x000000FF)) >> 0x00))) +#define uBYTE1_16(value)(( (u8) (((u16)(value) & (0x0000FF00)) >> 0x08))) + +#define uBYTE0_32(value)(( (u8) (((u32)(value) & (0x000000FF)) >> 0x00))) +#define uBYTE1_32(value)(( (u8) (((u32)(value) & (0x0000FF00)) >> 0x08))) +#define uBYTE2_32(value)(( (u8) (((u32)(value) & (0x00FF0000)) >> 0x10))) +#define uBYTE3_32(value)(( (u8) (((u32)(value) & (0xFF000000)) >> 0x18))) + +#define sBYTE0_16(value)(( (u8) (((s16)(value) & (0x000000FF)) >> 0x00))) +#define sBYTE1_16(value)(( (u8) (((s16)(value) & (0x0000FF00)) >> 0x08))) + +#define sBYTE0_32(value)(( (u8) (((s32)(value) & (0x000000FF)) >> 0x00))) +#define sBYTE1_32(value)(( (u8) (((s32)(value) & (0x0000FF00)) >> 0x08))) +#define sBYTE2_32(value)(( (u8) (((s32)(value) & (0x00FF0000)) >> 0x10))) +#define sBYTE3_32(value)(( (u8) (((s32)(value) & (0xFF000000)) >> 0x18))) + +#define UsedHeldItem(bank)((((u16*)(&unk_2000000[bank * 2 + 0x160cc])))) + +#define RecordAbilitySetField6(ability, fieldValue) \ +(gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability)) \ + +#define ValidPoke(poke)(((GetMonData(poke, MON_DATA_SPECIES) && !GetMonData(poke, MON_DATA_IS_EGG) && GetMonData(poke, MON_DATA_HP)))) +#define ValidPoke2(poke)((GetMonData(poke, MON_DATA_HP) && GetMonData(poke, MON_DATA_SPECIES) && !GetMonData(poke, MON_DATA_IS_EGG))) +#define ValidPoke3(poke)(((GetMonData(poke, MON_DATA_SPECIES) && GetMonData(poke, MON_DATA_IS_EGG) != 1 && GetMonData(poke, MON_DATA_HP)))) + +#define WeatherHasEffect ((!AbilityBattleEffects(ABILITY_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITY_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0))) +#define TargetTurnDamaged (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special))) + +#define HP_ON_SWITCHOUT (((u16*)(0x020160bc))) + +static void atk00_attackcanceler(void); +static void atk01_accuracycheck(void); +static void atk02_attackstring(void); +static void atk03_ppreduce(void); +static void atk04_critcalc(void); +static void atk05_damagecalc1(void); +static void atk06_typecalc(void); +static void atk07_dmg_adjustment(void); +static void atk08_dmg_adjustment2(void); +static void atk09_attackanimation(void); +static void atk0A_waitanimation(void); +static void atk0B_healthbarupdate(void); +static void atk0C_datahpupdate(void); +static void atk0D_critmessage(void); +static void atk0E_effectiveness_sound(void); +static void atk0F_resultmessage(void); +static void atk10_printstring(void); +static void atk11_printstring_playeronly(void); +static void atk12_waitmessage(void); +static void atk13_printfromtable(void); +static void atk14_printfromtable_playeronly(void); +static void atk15_seteffectwithchancetarget(void); +static void atk16_seteffectprimary(void); +static void atk17_seteffectsecondary(void); +static void atk18_status_effect_clear(void); +static void atk19_faint_pokemon(void); +static void atk1A_faint_animation(void); +static void atk1B_faint_effects_clear(void); +static void atk1C_jumpifstatus(void); +static void atk1D_jumpifstatus2(void); +static void atk1E_jumpifability(void); +static void atk1F_jumpifsideaffecting(void); +static void atk20_jumpifstat(void); +static void atk21_jumpifstatus3(void); +static void atk22_jumpiftype(void); +static void atk23_getexp(void); +static void atk24(void); +static void atk25_move_values_cleanup(void); +static void atk26_set_multihit(void); +static void atk27_decrement_multihit(void); +static void atk28_goto(void); +static void atk29_jumpifbyte(void); +static void atk2A_jumpifhalfword(void); +static void atk2B_jumpifword(void); +static void atk2C_jumpifarrayequal(void); +static void atk2D_jumpifarraynotequal(void); +static void atk2E_setbyte(void); +static void atk2F_addbyte(void); +static void atk30_subbyte(void); +static void atk31_copyarray(void); +static void atk32_copyarray_withindex(void); +static void atk33_orbyte(void); +static void atk34_orhalfword(void); +static void atk35_orword(void); +static void atk36_bicbyte(void); +static void atk37_bichalfword(void); +static void atk38_bicword(void); +static void atk39_pause(void); +static void atk3A_waitstate(void); +static void atk3B_healthbar_update(void); +static void atk3C_return(void); +static void atk3D_end(void); +static void atk3E_end2(void); +static void atk3F_end3(void); +static void atk40_jump_if_move_affected_by_protect(void); +static void atk41_call(void); +static void atk42_jumpiftype2(void); +static void atk43_jumpifabilitypresent(void); +static void atk44(void); +static void atk45_playanimation(void); +static void atk46_playanimation2(void); +static void atk47_setgraphicalstatchangevalues(void); +static void atk48_playstatchangeanimation(void); +static void atk49_moveendturn(void); +static void atk4A_typecalc2(void); +static void atk4B_return_atk_to_ball(void); +static void atk4C_copy_poke_data(void); +static void atk4D_switch_data_update(void); +static void atk4E_switchin_anim(void); +static void atk4F_jump_if_cannot_switch(void); +static void atk50_openpartyscreen(void); +static void atk51_switch_handle_order(void); +static void atk52_switch_in_effects(void); +static void atk53_trainer_slide(void); +static void atk54_effectiveness_sound(void); +static void atk55_play_sound(void); +static void atk56_fainting_cry(void); +static void atk57(void); +static void atk58_return_to_ball(void); +static void atk59_learnmove_inbattle(void); +static void atk5A(void); +static void atk5B_80256E0(void); +static void atk5C_hitanimation(void); +static void atk5D_getmoneyreward(void); +static void atk5E_8025A70(void); +static void atk5F_8025B24(void); +static void atk60_increment_gamestat(void); +static void atk61_8025BA4(void); +static void atk62_08025C6C(void); +static void atk63_jumptorandomattack(void); +static void atk64_statusanimation(void); +static void atk65_status2animation(void); +static void atk66_chosenstatusanimation(void); +static void atk67_8025ECC(void); +static void atk68_80246A0(void); +static void atk69_dmg_adjustment2(void); +static void atk6A_removeitem(void); +static void atk6B_atknameinbuff1(void); +static void atk6C_lvlbox_display(void); +static void atk6D_set_sentpokes_values(void); +static void atk6E_set_atk_to_player0(void); +static void atk6F_set_visible(void); +static void atk70_record_ability(void); +static void atk71_buffer_move_to_learn(void); +static void atk72_jump_if_can_run_frombattle(void); +static void atk73_hp_thresholds(void); +static void atk74_hp_thresholds2(void); +static void atk75_8026A58(void); +static void atk76_various(void); +static void atk77_setprotect(void); +static void atk78_faintifabilitynotdamp(void); +static void atk79_setatkhptozero(void); +static void atk7A_jumpwhiletargetvalid(void); +static void atk7B_healhalfHP_if_possible(void); +static void atk7C_8025508(void); +static void atk7D_set_rain(void); +static void atk7E_setreflect(void); +static void atk7F_setseeded(void); +static void atk80_manipulatedamage(void); +static void atk81_setrest(void); +static void atk82_jumpifnotfirstturn(void); +static void atk83_nop(void); +static void atk84_jump_if_cant_sleep(void); +static void atk85_stockpile(void); +static void atk86_stockpiletobasedamage(void); +static void atk87_stockpiletohpheal(void); +static void atk88_negativedamage(void); +static void atk89_statbuffchange(void); +static void atk8A_normalisebuffs(void); +static void atk8B_setbide(void); +static void atk8C_confuseifrepeatingattackends(void); +static void atk8D_setmultihit_counter(void); +static void atk8E_prepare_multihit(void); +static void atk8F_forcerandomswitch(void); +static void atk90_conversion_type_change(void); +static void atk91_givepaydaymoney(void); +static void atk92_setlightscreen(void); +static void atk93_ko_move(void); +static void atk94_gethalfcurrentenemyhp(void); +static void atk95_setsandstorm(void); +static void atk96_weatherdamage(void); +static void atk97_try_infatuation(void); +static void atk98_status_icon_update(void); +static void atk99_setmist(void); +static void atk9A_set_focusenergy(void); +static void atk9B_transformdataexecution(void); +static void atk9C_set_substitute(void); +static void atk9D_copyattack(void); +static void atk9E_metronome(void); +static void atk9F_dmgtolevel(void); +static void atkA0_psywavedamageeffect(void); +static void atkA1_counterdamagecalculator(void); +static void atkA2_mirrorcoatdamagecalculator(void); +static void atkA3_disablelastusedattack(void); +static void atkA4_setencore(void); +static void atkA5_painsplitdmgcalc(void); +static void atkA6_settypetorandomresistance(void); +static void atkA7_setalwayshitflag(void); +static void atkA8_copymovepermanently(void); +static void atkA9_sleeptalk_choose_move(void); +static void atkAA_set_destinybond(void); +static void atkAB_DestinyBondFlagUpdate(void); +static void atkAC_remaininghptopower(void); +static void atkAD_spite_ppreduce(void); +static void atkAE_heal_party_status(void); +static void atkAF_cursetarget(void); +static void atkB0_set_spikes(void); +static void atkB1_set_foresight(void); +static void atkB2_setperishsong(void); +static void atkB3_rolloutdamagecalculation(void); +static void atkB4_jumpifconfusedandstatmaxed(void); +static void atkB5_furycuttercalc(void); +static void atkB6_happinesstodamagecalculation(void); +static void atkB7_presentdamagecalculation(void); +static void atkB8_set_safeguard(void); +static void atkB9_magnitudedamagecalculation(void); +static void atkBA_jumpifnopursuitswitchdmg(void); +static void atkBB_setsunny(void); +static void atkBC_maxattackhalvehp(void); +static void atkBD_copyfoestats(void); +static void atkBE_breakfree(void); +static void atkBF_set_defense_curl(void); +static void atkC0_recoverbasedonsunlight(void); +static void atkC1_hidden_power(void); +static void atkC2_selectnexttarget(void); +static void atkC3_setfutureattack(void); +static void atkC4_beat_up(void); +static void atkC5_hidepreattack(void); +static void atkC6_unhidepostattack(void); +static void atkC7_setminimize(void); +static void atkC8_sethail(void); +static void atkC9_jumpifattackandspecialattackcannotfall(void); +static void atkCA_setforcedtarget(void); +static void atkCB_setcharge(void); +static void atkCC_callterrainattack(void); +static void atkCD_cureifburnedparalysedorpoisoned(void); +static void atkCE_settorment(void); +static void atkCF_jumpifnodamage(void); +static void atkD0_settaunt(void); +static void atkD1_set_helpinghand(void); +static void atkD2_swap_items(void); +static void atkD3_copy_ability(void); +static void atkD4_wish_effect(void); +static void atkD5_setroots(void); +static void atkD6_doubledamagedealtifdamaged(void); +static void atkD7_setyawn(void); +static void atkD8_setdamagetohealthdifference(void); +static void atkD9_scaledamagebyhealthratio(void); +static void atkDA_abilityswap(void); +static void atkDB_imprisoneffect(void); +static void atkDC_setgrudge(void); +static void atkDD_weightdamagecalculation(void); +static void atkDE_asistattackselect(void); +static void atkDF_setmagiccoat(void); +static void atkE0_setstealstatchange(void); +static void atkE1_intimidate_string_loader(void); +static void atkE2_switchout_abilities(void); +static void atkE3_jumpiffainted(void); +static void atkE4_getsecretpowereffect(void); +static void atkE5_pickup(void); +static void atkE6_castform_change_animation(void); +static void atkE7_castform_data_change(void); +static void atkE8_settypebasedhalvers(void); +static void atkE9_setweatherballtype(void); +static void atkEA_recycleitem(void); +static void atkEB_settypetoterrain(void); +static void atkEC_pursuit_sth(void); +static void atkED_802B4B4(void); +static void atkEE_removelightscreenreflect(void); +static void atkEF_pokeball_catch_calculation(void); +static void atkF0_copy_caught_poke(void); +static void atkF1_setpoke_as_caught(void); +static void atkF2_display_dex_info(void); +static void atkF3_nickname_caught_poke(void); +static void atkF4_802BEF0(void); +static void atkF5_removeattackerstatus1(void); +static void atkF6_802BF48(void); +static void atkF7_802BF54(void); + +typedef void (*BattleCmdFunc)(void); + +const BattleCmdFunc gBattleScriptingCommandsTable[] = +{ + atk00_attackcanceler, + atk01_accuracycheck, + atk02_attackstring, + atk03_ppreduce, + atk04_critcalc, + atk05_damagecalc1, + atk06_typecalc, + atk07_dmg_adjustment, + atk08_dmg_adjustment2, + atk09_attackanimation, + atk0A_waitanimation, + atk0B_healthbarupdate, + atk0C_datahpupdate, + atk0D_critmessage, + atk0E_effectiveness_sound, + atk0F_resultmessage, + atk10_printstring, + atk11_printstring_playeronly, + atk12_waitmessage, + atk13_printfromtable, + atk14_printfromtable_playeronly, + atk15_seteffectwithchancetarget, + atk16_seteffectprimary, + atk17_seteffectsecondary, + atk18_status_effect_clear, + atk19_faint_pokemon, + atk1A_faint_animation, + atk1B_faint_effects_clear, + atk1C_jumpifstatus, + atk1D_jumpifstatus2, + atk1E_jumpifability, + atk1F_jumpifsideaffecting, + atk20_jumpifstat, + atk21_jumpifstatus3, + atk22_jumpiftype, + atk23_getexp, + atk24, + atk25_move_values_cleanup, + atk26_set_multihit, + atk27_decrement_multihit, + atk28_goto, + atk29_jumpifbyte, + atk2A_jumpifhalfword, + atk2B_jumpifword, + atk2C_jumpifarrayequal, + atk2D_jumpifarraynotequal, + atk2E_setbyte, + atk2F_addbyte, + atk30_subbyte, + atk31_copyarray, + atk32_copyarray_withindex, + atk33_orbyte, + atk34_orhalfword, + atk35_orword, + atk36_bicbyte, + atk37_bichalfword, + atk38_bicword, + atk39_pause, + atk3A_waitstate, + atk3B_healthbar_update, + atk3C_return, + atk3D_end, + atk3E_end2, + atk3F_end3, + atk40_jump_if_move_affected_by_protect, + atk41_call, + atk42_jumpiftype2, + atk43_jumpifabilitypresent, + atk44, + atk45_playanimation, + atk46_playanimation2, + atk47_setgraphicalstatchangevalues, + atk48_playstatchangeanimation, + atk49_moveendturn, + atk4A_typecalc2, + atk4B_return_atk_to_ball, + atk4C_copy_poke_data, + atk4D_switch_data_update, + atk4E_switchin_anim, + atk4F_jump_if_cannot_switch, + atk50_openpartyscreen, + atk51_switch_handle_order, + atk52_switch_in_effects, + atk53_trainer_slide, + atk54_effectiveness_sound, + atk55_play_sound, + atk56_fainting_cry, + atk57, + atk58_return_to_ball, + atk59_learnmove_inbattle, + atk5A, + atk5B_80256E0, + atk5C_hitanimation, + atk5D_getmoneyreward, + atk5E_8025A70, + atk5F_8025B24, + atk60_increment_gamestat, + atk61_8025BA4, + atk62_08025C6C, + atk63_jumptorandomattack, + atk64_statusanimation, + atk65_status2animation, + atk66_chosenstatusanimation, + atk67_8025ECC, + atk68_80246A0, + atk69_dmg_adjustment2, + atk6A_removeitem, + atk6B_atknameinbuff1, + atk6C_lvlbox_display, + atk6D_set_sentpokes_values, + atk6E_set_atk_to_player0, + atk6F_set_visible, + atk70_record_ability, + atk71_buffer_move_to_learn, + atk72_jump_if_can_run_frombattle, + atk73_hp_thresholds, + atk74_hp_thresholds2, + atk75_8026A58, + atk76_various, + atk77_setprotect, + atk78_faintifabilitynotdamp, + atk79_setatkhptozero, + atk7A_jumpwhiletargetvalid, + atk7B_healhalfHP_if_possible, + atk7C_8025508, + atk7D_set_rain, + atk7E_setreflect, + atk7F_setseeded, + atk80_manipulatedamage, + atk81_setrest, + atk82_jumpifnotfirstturn, + atk83_nop, + atk84_jump_if_cant_sleep, + atk85_stockpile, + atk86_stockpiletobasedamage, + atk87_stockpiletohpheal, + atk88_negativedamage, + atk89_statbuffchange, + atk8A_normalisebuffs, + atk8B_setbide, + atk8C_confuseifrepeatingattackends, + atk8D_setmultihit_counter, + atk8E_prepare_multihit, + atk8F_forcerandomswitch, + atk90_conversion_type_change, + atk91_givepaydaymoney, + atk92_setlightscreen, + atk93_ko_move, + atk94_gethalfcurrentenemyhp, + atk95_setsandstorm, + atk96_weatherdamage, + atk97_try_infatuation, + atk98_status_icon_update, + atk99_setmist, + atk9A_set_focusenergy, + atk9B_transformdataexecution, + atk9C_set_substitute, + atk9D_copyattack, + atk9E_metronome, + atk9F_dmgtolevel, + atkA0_psywavedamageeffect, + atkA1_counterdamagecalculator, + atkA2_mirrorcoatdamagecalculator, + atkA3_disablelastusedattack, + atkA4_setencore, + atkA5_painsplitdmgcalc, + atkA6_settypetorandomresistance, + atkA7_setalwayshitflag, + atkA8_copymovepermanently, + atkA9_sleeptalk_choose_move, + atkAA_set_destinybond, + atkAB_DestinyBondFlagUpdate, + atkAC_remaininghptopower, + atkAD_spite_ppreduce, + atkAE_heal_party_status, + atkAF_cursetarget, + atkB0_set_spikes, + atkB1_set_foresight, + atkB2_setperishsong, + atkB3_rolloutdamagecalculation, + atkB4_jumpifconfusedandstatmaxed, + atkB5_furycuttercalc, + atkB6_happinesstodamagecalculation, + atkB7_presentdamagecalculation, + atkB8_set_safeguard, + atkB9_magnitudedamagecalculation, + atkBA_jumpifnopursuitswitchdmg, + atkBB_setsunny, + atkBC_maxattackhalvehp, + atkBD_copyfoestats, + atkBE_breakfree, + atkBF_set_defense_curl, + atkC0_recoverbasedonsunlight, + atkC1_hidden_power, + atkC2_selectnexttarget, + atkC3_setfutureattack, + atkC4_beat_up, + atkC5_hidepreattack, + atkC6_unhidepostattack, + atkC7_setminimize, + atkC8_sethail, + atkC9_jumpifattackandspecialattackcannotfall, + atkCA_setforcedtarget, + atkCB_setcharge, + atkCC_callterrainattack, + atkCD_cureifburnedparalysedorpoisoned, + atkCE_settorment, + atkCF_jumpifnodamage, + atkD0_settaunt, + atkD1_set_helpinghand, + atkD2_swap_items, + atkD3_copy_ability, + atkD4_wish_effect, + atkD5_setroots, + atkD6_doubledamagedealtifdamaged, + atkD7_setyawn, + atkD8_setdamagetohealthdifference, + atkD9_scaledamagebyhealthratio, + atkDA_abilityswap, + atkDB_imprisoneffect, + atkDC_setgrudge, + atkDD_weightdamagecalculation, + atkDE_asistattackselect, + atkDF_setmagiccoat, + atkE0_setstealstatchange, + atkE1_intimidate_string_loader, + atkE2_switchout_abilities, + atkE3_jumpiffainted, + atkE4_getsecretpowereffect, + atkE5_pickup, + atkE6_castform_change_animation, + atkE7_castform_data_change, + atkE8_settypebasedhalvers, + atkE9_setweatherballtype, + atkEA_recycleitem, + atkEB_settypetoterrain, + atkEC_pursuit_sth, + atkED_802B4B4, + atkEE_removelightscreenreflect, + atkEF_pokeball_catch_calculation, + atkF0_copy_caught_poke, + atkF1_setpoke_as_caught, + atkF2_display_dex_info, + atkF3_nickname_caught_poke, + atkF4_802BEF0, + atkF5_removeattackerstatus1, + atkF6_802BF48, + atkF7_802BF54, +}; + +struct statFractions{ + u8 dividend; + u8 divisor; + u16 pad; +}; + +static const struct statFractions gAccuracyStageRatios[] = +{ + {33, 100, 0}, // -6 + {36, 100, 0}, // -5 + {43, 100, 0}, // -4 + {50, 100, 0}, // -3 + {60, 100, 0}, // -2 + {75, 100, 0}, // -1 + {1, 1, 0}, // 0 + {133, 100, 0}, // +1 + {166, 100, 0}, // +2 + {2, 1, 0}, // +3 + {233, 100, 0}, // +4 + {133, 50, 0}, // +5 + {3, 1, 0}, // +6 +}; +//The chance is 1/N for each stage. + +static const u16 gCriticalHitChance[] = {16, 8, 4, 3, 2}; + +static const u32 gStatusFlagsForMoveEffects[] = +{ + 0x00000000, + 0x00000007, + 0x00000008, + 0x00000010, + 0x00000020, + 0x00000040, + 0x00000080, + 0x00000007, + 0x00000008, + 0x00000000, + 0x00000070, + 0x00000000, + 0x00001000, + 0x0000E000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00400000, + 0x00000000, + 0x00000000, + 0x04000000, + 0x08000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000C00, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000 +}; + +extern const u8 BattleScript_1D963E[]; +extern const u8 BattleScript_1D965A[]; +extern const u8 BattleScript_1D9669[]; +extern const u8 BattleScript_1D9678[]; +extern const u8 BattleScript_1D9687[]; +extern const u8 BattleScript_1D969D[]; +extern const u8 BattleScript_1D96BA[]; +extern const u8 BattleScript_1D9696[]; +extern const u8 BattleScript_1D96B1[]; +extern const u8 BattleScript_1D96AA[]; +extern const u8 BattleScript_1D96C8[]; + +const u8* const gMoveEffectBS_Ptrs[] = +{ + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D965A, + BattleScript_1D9669, + BattleScript_1D9678, + BattleScript_1D9687, + BattleScript_1D969D, + BattleScript_1D96BA, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D9696, + BattleScript_1D96AA, + BattleScript_1D963E, + BattleScript_1D96B1, + BattleScript_1D96C8, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D96C8 +}; + +const u8 sUnreferencedBitMask1[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F}; + +const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPD}; + +static const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF}; + +static const u16 sUnknown_081FACFE[] = //banned moves to copy +{ + MOVE_METRONOME, + MOVE_STRUGGLE, + MOVE_SKETCH, + MOVE_MIMIC, + 0xFFFE, + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_PROTECT, + MOVE_DETECT, + MOVE_ENDURE, + MOVE_DESTINY_BOND, + MOVE_SLEEP_TALK, + MOVE_THIEF, + MOVE_FOLLOW_ME, + MOVE_SNATCH, + MOVE_HELPING_HAND, + MOVE_COVET, + MOVE_TRICK, + MOVE_FOCUS_PUNCH, + 0xFFFF +}; + +static const u8 sUnknown_081FAD26[] = +{ + 1, 200, + 4, 150, + 9, 100, + 16, 80, + 32, 40, + 48, 20 +}; + +static const u16 sNaturePowerMoves[] = +{ + MOVE_STUN_SPORE, + MOVE_RAZOR_LEAF, + MOVE_EARTHQUAKE, + MOVE_HYDRO_PUMP, + MOVE_SURF, + MOVE_BUBBLE_BEAM, + MOVE_ROCK_SLIDE, + MOVE_SHADOW_BALL, + MOVE_SWIFT, + MOVE_SWIFT +}; + +//weight-based damage table for Low Kick +//format: min. weight (hectograms), base power +static const u16 sWeightDamage[] = +{ + 100, 20, + 250, 40, + 500, 60, + 1000, 80, + 2000, 100, + -1, -1 +}; + +static const u16 sPickupItems[] = +{ + ITEM_SUPER_POTION, 30, + ITEM_FULL_HEAL, 40, + ITEM_ULTRA_BALL, 50, + ITEM_RARE_CANDY, 60, + ITEM_FULL_RESTORE, 70, + ITEM_REVIVE, 80, + ITEM_NUGGET, 90, + ITEM_PROTEIN, 95, + ITEM_PP_UP, 99, + ITEM_KINGS_ROCK, 1 +}; + +static const u8 sTerrainToType[] = +{ + TYPE_GRASS, // tall grass + TYPE_GRASS, // long grass + TYPE_GROUND, // sand + TYPE_WATER, // underwater + TYPE_WATER, // water + TYPE_WATER, // pond water + TYPE_ROCK , // rock + TYPE_ROCK , // cave + TYPE_NORMAL, // building + TYPE_NORMAL, // plain +}; + +static const u8 sBallCatchBonuses[] = +{ + 20, 15, 10, 15 //Ultra, Great, Poke, Safari +}; + +static void atk00_attackcanceler(void) +{ + int i; + if (gBattleOutcome) + { + gFightStateTracker = 0xC; + return; + } + if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) + { + gHitMarker |= HITMARKER_x80000; + gBattlescriptCurrInstr = BattleScript_EndTurn; + return; + } + if (CantUseMove()) + return; + if (AbilityBattleEffects(2, gBankTarget, 0, 0, 0)) + return; + if (!gBattleMons[gBankAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & 0x800200) + && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) + { + gBattlescriptCurrInstr = BattleScript_NoPPForMove; + gBattleMoveFlags |= MOVE_MISSED; + return; + } + gHitMarker &= ~(HITMARKER_x800000); + if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) + { + u8 disobedient = IsPokeDisobedient(); + asm("":::"r0"); //It's impossible to match + asm("":::"r1"); + if ((disobedient)) + { + if (disobedient == 2) {gHitMarker |= HITMARKER_OBEYS;} + else {gBattleMoveFlags |= MOVE_MISSED;} + return; + } + } + gHitMarker |= HITMARKER_OBEYS; + if (gProtectStructs[gBankTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED) + { + PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT); + gProtectStructs[gBankTarget].bounceMove = 0; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; + return; + } + for (i = 0; i < gNoOfAllBanks; i++) + { + if ((gProtectStructs[gTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) + { + PressurePPLose(gBankAttacker, gTurnOrder[i], MOVE_SNATCH); + gProtectStructs[gTurnOrder[i]].stealMove = 0; + BATTLE_STRUCT->scriptingActive = gTurnOrder[i]; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_SnatchedMove; + return; + } + } + if (gSpecialStatuses[gBankTarget].lightningRodRedirected) + { + gSpecialStatuses[gBankTarget].lightningRodRedirected = 0; + gLastUsedAbility = ABILITY_LIGHTNING_ROD; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_TookAttack; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + else if (TargetProtectAffected && + (gCurrentMove != MOVE_CURSE || (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST)) && + ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)))) + { + CancelMultiTurnMoves(gBankAttacker); + gBattleMoveFlags |= MOVE_MISSED; + gMoveHitWith[gBankTarget] = 0; + gUnknown_02024C44[gBankTarget] = 0; + gBattleCommunication[6] = 1; + gBattlescriptCurrInstr++; + } + else + gBattlescriptCurrInstr++; +} + +static void JumpIfMoveFailed(u8 adder, u16 move) +{ + void* to_store = gBattlescriptCurrInstr + adder; + if (gBattleMoveFlags & MOVE_NO_EFFECT) + { + gMoveHitWith[gBankTarget] = 0; + gUnknown_02024C44[gBankTarget] = 0; + to_store = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + DestinyBondFlagUpdate(); + if (AbilityBattleEffects(3, gBankTarget, 0, 0, move)) + return; + } + gBattlescriptCurrInstr = to_store; +} + +static void atk40_jump_if_move_affected_by_protect(void) +{ + if (TargetProtectAffected) + { + gBattleMoveFlags |= MOVE_MISSED; + JumpIfMoveFailed(5, 0); + gBattleCommunication[6] = 1; + } + else + gBattlescriptCurrInstr += 5; +} + +static bool8 JumpIfMoveAffectedByProtect(u16 move) +{ + bool8 affected = 0; + if (TargetProtectAffected) + { + gBattleMoveFlags |= MOVE_MISSED; + JumpIfMoveFailed(7, move); + gBattleCommunication[6] = 1; + affected = 1; + } + return affected; +} + +static bool8 AccuracyCalcHelper(u16 move) +{ + if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker) + { + JumpIfMoveFailed(7, move); + return 1; + } + + if (!(gHitMarker & HITMARKER_IGNORE_ON_AIR) && gStatuses3[gBankTarget] & STATUS3_ON_AIR) + { + gBattleMoveFlags |= MOVE_MISSED; + JumpIfMoveFailed(7, move); + return 1; + } + gHitMarker &= ~HITMARKER_IGNORE_ON_AIR; + + if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBankTarget] & STATUS3_UNDERGROUND) + { + gBattleMoveFlags |= MOVE_MISSED; + JumpIfMoveFailed(7, move); + return 1; + } + gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND; + + if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBankTarget] & STATUS3_UNDERWATER) + { + gBattleMoveFlags |= MOVE_MISSED; + JumpIfMoveFailed(7, move); + return 1; + } + gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER; + + if ((WeatherHasEffect && (gBattleWeather & WEATHER_RAINY) && gBattleMoves[move].effect == EFFECT_THUNDER) + || (gBattleMoves[move].effect == EFFECT_ALWAYS_HIT || gBattleMoves[move].effect == EFFECT_VITAL_THROW)) + { + JumpIfMoveFailed(7, move); + return 1; + } + return 0; +} + +static void atk01_accuracycheck(void) +{ + u16 move = BSScriptRead16(gBattlescriptCurrInstr + 5); + if (move == 0xFFFE || move == 0xFFFF) + { + if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker) + gBattlescriptCurrInstr += 7; + else if (gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else if (!JumpIfMoveAffectedByProtect(0)) + gBattlescriptCurrInstr += 7; + } + else + { + u8 type; s8 buff; u8 MoveAcc; u16 calc; u8 hold_effect; u8 quality; + if (move == 0) {move = gCurrentMove;} + + if (BATTLE_STRUCT->dynamicMoveType) + type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + else + type = gBattleMoves[move].type; + + if (JumpIfMoveAffectedByProtect(move)) + return; + if (AccuracyCalcHelper(move)) + return; + + if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) + { + u8 acc = gBattleMons[gBankAttacker].statStages[ACC_BUFF]; + buff = acc; + } + else + { + u8 acc = gBattleMons[gBankAttacker].statStages[ACC_BUFF]; + buff = acc + 6 - gBattleMons[gBankTarget].statStages[EVASION_BUFF]; + } + + if (buff < 0) {buff = 0;} + if (buff > 0xC) {buff = 0xC;} + + MoveAcc = gBattleMoves[move].accuracy; + //check Thunder on sunny weather + if (WeatherHasEffect && gBattleWeather & WEATHER_SUNNY && gBattleMoves[move].effect == EFFECT_THUNDER) + MoveAcc = 50; + + calc = gAccuracyStageRatios[buff].dividend * MoveAcc; + calc /= gAccuracyStageRatios[buff].divisor; + + if (gBattleMons[gBankAttacker].ability == ABILITY_COMPOUND_EYES) + calc = (calc * 130) / 100; //1.3 compound eyes boost + if (WeatherHasEffect && gBattleMons[gBankTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORMY) + calc = (calc * 80) / 100; //1.2 sand veil loss; + if (gBattleMons[gBankAttacker].ability == ABILITY_HUSTLE && type < 9) + calc = (calc * 80) / 100; //1.2 hustle loss; + + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_EVASION_UP) + calc = (calc * (100 - quality)) / 100; + + //final calculation + if ((Random() % 100 + 1) > calc) + { + gBattleMoveFlags |= MOVE_MISSED; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20)) + gBattleCommunication[6] = 2; + else + gBattleCommunication[6] = 0; + b_wonderguard_and_levitate(); + + } + JumpIfMoveFailed(7, move); + } +} + +static void atk02_attackstring(void) +{ + if (gBattleExecBuffer) + return; + if (!(gHitMarker & (HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED))) + { + PrepareStringBattle(4, gBankAttacker); + gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; + } + gBattlescriptCurrInstr++; + gBattleCommunication[MSG_DISPLAY] = 0; +} + +static void atk03_ppreduce(void) +{ + int to_deduct = 1; + if (gBattleExecBuffer) + return; + if (!gSpecialStatuses[gBankAttacker].flag20) + { + switch (gBattleMoves[gCurrentMove].target) + { + case TARGET_FOES_AND_ALLY: + to_deduct += AbilityBattleEffects(ABILITT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0); + break; + case TARGET_BOTH: + case TARGET_OPPONENTS_FIELD: + to_deduct += AbilityBattleEffects(ABILITY_COUNT_OTHER_SIDE, gBankAttacker, ABILITY_PRESSURE, 0, 0); + break; + default: + if (gBankAttacker != gBankTarget && gBattleMons[gBankTarget].ability == ABILITY_PRESSURE) + to_deduct++; + break; + } + } + if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBankAttacker].pp[gCurrMovePos]) + { + gProtectStructs[gBankAttacker].notFirstStrike = 1; + if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > to_deduct) + gBattleMons[gBankAttacker].pp[gCurrMovePos] -= to_deduct; + else + gBattleMons[gBankAttacker].pp[gCurrMovePos] = 0; + + if (!(gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED) + && !((gDisableStructs[gBankAttacker].unk18_b) & gBitTable[gCurrMovePos])) + { + gActiveBank = gBankAttacker; + EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBankAttacker].pp[gCurrMovePos]); + MarkBufferBankForExecution(gBankAttacker); + } + } + gHitMarker &= ~(HITMARKER_NO_PPDEDUCT); + gBattlescriptCurrInstr++; +} + +static void atk04_critcalc(void) +{ + u8 hold_effect; u16 item; u16 crit_chance; int adderv3, adderv5, adderv6, adderv7, adderv8, adderv9, adderv10, adderv11; u16 adderv12; + item = gBattleMons[gBankAttacker].item; + if (item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankAttacker].holdEffect; + else + hold_effect = ItemId_GetHoldEffect(item); + + gStringBank = gBankAttacker; + + if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) + adderv3 = 2; + else + adderv3 = 0; + + if (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) {adderv3++;} + adderv5 = adderv3; + if (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) {adderv5 = adderv3 + 1;} + + if (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) {adderv5++;} + adderv6 = adderv5; + if (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) {adderv6 = adderv5 + 1;} + + adderv7 = 0; + if (hold_effect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) {adderv7 = 1;} + adderv8 = 2 * adderv7; + adderv9 = 0; + if (hold_effect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD) {adderv9 = 1;} + adderv11 = 2 * adderv9; + if (hold_effect == HOLD_EFFECT_SCOPE_LENS) + {adderv10 = 1 + adderv6 + adderv8; adderv12 = adderv10 + adderv11;} + else + {adderv10 = adderv6 + adderv8; adderv12 = adderv10 + adderv11;} + + crit_chance = adderv12; + + if (crit_chance > 4) {crit_chance = 4;} + + if ((gBattleMons[gBankTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBankTarget].ability != ABILITY_SHELL_ARMOR) + && !(gStatuses3[gBankAttacker] & STATUS3_CANT_SCORE_A_CRIT) + && !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) + && !(Random() % gCriticalHitChance[crit_chance])) + gCritMultiplier = 2; + + else + gCritMultiplier = 1; + gBattlescriptCurrInstr++; +} + +static void atk05_damagecalc1(void) +{ + u16 side_hword = gSideAffecting[GetBankIdentity(gBankTarget) & 1]; + gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, + side_hword, gDynamicBasePower, + BATTLE_STRUCT->dynamicMoveType, gBankAttacker, gBankTarget); + gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; + + if (gStatuses3[gBankAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + gBattleMoveDamage *= 2; + if (gProtectStructs[gBankAttacker].helpingHand) + gBattleMoveDamage = gBattleMoveDamage * 15 / 10; + + gBattlescriptCurrInstr++; +} + +void AI_CalcDmg(u8 BankAtk, u8 BankDef) +{ + u16 side_hword = gSideAffecting[GetBankIdentity(BankDef) & 1]; + gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[BankAtk], &gBattleMons[BankDef], gCurrentMove, + side_hword, gDynamicBasePower, + BATTLE_STRUCT->dynamicMoveType, BankAtk, BankDef); + gDynamicBasePower = 0; + gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; + + if (gStatuses3[BankAtk] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + gBattleMoveDamage *= 2; + if (gProtectStructs[BankAtk].helpingHand) + gBattleMoveDamage = gBattleMoveDamage * 15 / 10; +} + +static void ModulateDmgByType(u8 multiplier) +{ + gBattleMoveDamage = gBattleMoveDamage * multiplier / 10; + if (gBattleMoveDamage == 0 && multiplier != 0) {gBattleMoveDamage = 1;} + + switch (multiplier) + { + case 0: //no effect + gBattleMoveFlags |= MOVE_NOTAFFECTED; + gBattleMoveFlags &= ~MOVE_NOTVERYEFFECTIVE; + gBattleMoveFlags &= ~MOVE_SUPEREFFECTIVE; + break; + case 5: //not very effecting + if (gBattleMoves[gCurrentMove].power && !(gBattleMoveFlags & MOVE_NO_EFFECT)) + { + if (gBattleMoveFlags & MOVE_SUPEREFFECTIVE) + gBattleMoveFlags &= ~MOVE_SUPEREFFECTIVE; + else + gBattleMoveFlags |= MOVE_NOTVERYEFFECTIVE; + } + break; + case 20: //super effective + if (gBattleMoves[gCurrentMove].power && !(gBattleMoveFlags & MOVE_NO_EFFECT)) + { + if (gBattleMoveFlags & MOVE_NOTVERYEFFECTIVE) + gBattleMoveFlags &= ~MOVE_NOTVERYEFFECTIVE; + else + gBattleMoveFlags |= MOVE_SUPEREFFECTIVE; + } + break; + } +} + +static void atk06_typecalc(void) +{ + int i = 0; + u8 move_type; + if (gCurrentMove == MOVE_STRUGGLE) {goto END;} + + if (BATTLE_STRUCT->dynamicMoveType) + move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + else + move_type = gBattleMoves[gCurrentMove].type; + + //check stab + if (gBattleMons[gBankAttacker].type1 == move_type || gBattleMons[gBankAttacker].type2 == move_type) + { + gBattleMoveDamage = gBattleMoveDamage * 15; + gBattleMoveDamage = gBattleMoveDamage / 10; + } + + if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) + { + gLastUsedAbility = gBattleMons[gBankTarget].ability; + gBattleMoveFlags |= (MOVE_MISSED | MOVE_NOTAFFECTED); + gMoveHitWith[gBankTarget] = 0; + gUnknown_02024C44[gBankTarget] = 0; + gBattleCommunication[6] = move_type; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + else + { + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) + { + if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) {break;} + else {i += 3; continue;} + } + + if (gTypeEffectiveness[i] == move_type) + { + //check type1 + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1) + ModulateDmgByType(gTypeEffectiveness[i + 2]); + //check type2 + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && + gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2) + ModulateDmgByType(gTypeEffectiveness[i + 2]); + } + i += 3; + } + } + + if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2 && + (!(gBattleMoveFlags & MOVE_SUPEREFFECTIVE) || ((gBattleMoveFlags & (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE)) == (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE))) && + gBattleMoves[gCurrentMove].power) + { + gLastUsedAbility = ABILITY_WONDER_GUARD; + gBattleMoveFlags |= MOVE_MISSED; + gMoveHitWith[gBankTarget] = 0; + gUnknown_02024C44[gBankTarget] = 0; + gBattleCommunication[6] = 3; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + if (gBattleMoveFlags & MOVE_NOTAFFECTED) + gProtectStructs[gBankAttacker].notEffective = 1; + + END: + gBattlescriptCurrInstr++; +} + +static void b_wonderguard_and_levitate(void) +{ + u8 flags = 0; + int i = 0; + u8 move_type; + if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power) {return;} + + if (BATTLE_STRUCT->dynamicMoveType) + move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + else + move_type = gBattleMoves[gCurrentMove].type; + + if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) + { + RecordAbilitySetField6(ABILITY_LEVITATE, move_type); + return; + } + + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) + { + if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) {break;} + else {i += 3; continue;} + } + + if (gTypeEffectiveness[i] == move_type) + { + //check no effect + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 0) + { + gBattleMoveFlags |= MOVE_NOTAFFECTED; + gProtectStructs[gBankAttacker].notEffective = 1; + } + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && + gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && + gTypeEffectiveness[i + 2] == 0) + { + gBattleMoveFlags |= MOVE_NOTAFFECTED; + gProtectStructs[gBankAttacker].notEffective = 1; + } + + //check super effective + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 20) + { flags |= 1;} + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && + gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && + gTypeEffectiveness[i + 2] == 20) + { flags |= 1;} + + //check not very effective + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 5) + { flags |= 2;} + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && + gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && + gTypeEffectiveness[i + 2] == 5) + { flags |= 2;} + } + i += 3; + } + + if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2) + { + register u8 three asm("r0") = (1 | 2); + if (!((flags & three) == 1) && gBattleMoves[gCurrentMove].power) + { + RecordAbilitySetField6(ABILITY_WONDER_GUARD, 3); + } + } +} + +static void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags) //a literal copy of the ModulateDmgbyType1 with different args... +{ + gBattleMoveDamage = gBattleMoveDamage * multiplier / 10; + if (gBattleMoveDamage == 0 && multiplier != 0) {gBattleMoveDamage = 1;} + + switch (multiplier) + { + case 0: //no effect + *flags |= MOVE_NOTAFFECTED; + *flags &= ~MOVE_NOTVERYEFFECTIVE; + *flags &= ~MOVE_SUPEREFFECTIVE; + break; + case 5: //not very effecting + if (gBattleMoves[move].power && !(*flags & MOVE_NO_EFFECT)) + { + if (*flags & MOVE_SUPEREFFECTIVE) + *flags &= ~MOVE_SUPEREFFECTIVE; + else + *flags |= MOVE_NOTVERYEFFECTIVE; + } + break; + case 20: //super effective + if (gBattleMoves[move].power && !(*flags & MOVE_NO_EFFECT)) + { + if (*flags & MOVE_NOTVERYEFFECTIVE) + *flags &= ~MOVE_NOTVERYEFFECTIVE; + else + *flags |= MOVE_SUPEREFFECTIVE; + } + break; + } +} + +#ifdef NONMATCHING +u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def) +{ + int i = 0; + u8 flags = 0; + u8 move_type; + if (move == MOVE_STRUGGLE) {return 0;} + + move_type = gBattleMoves[move].type; + + //check stab + if (gBattleMons[bank_atk].type1 == move_type || gBattleMons[bank_atk].type2 == move_type) + { + gBattleMoveDamage = gBattleMoveDamage * 15; + gBattleMoveDamage = gBattleMoveDamage / 10; + } + + if (gBattleMons[bank_def].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) + { + flags |= (MOVE_MISSED | MOVE_NOTAFFECTED); + } + else + { + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) + { + if (gBattleMons[bank_def].status2 & STATUS2_FORESIGHT) {break;} + else {i += 3; continue;} + } + + else if (gTypeEffectiveness[i] == move_type) + { + //check type1 + if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type1) + ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); + //check type2 + if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type2 && + gBattleMons[bank_def].type1 != gBattleMons[bank_def].type2) + ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); + } + i += 3; + } + } + + if (gBattleMons[bank_def].ability == ABILITY_WONDER_GUARD && !(flags & MOVE_MISSED) && + AttacksThisTurn(bank_atk, move) == 2 && + (!(flags & MOVE_SUPEREFFECTIVE) || ((flags & (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE)) == (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE))) && + gBattleMoves[move].power) + { + flags |= MOVE_MISSED; + } + return flags; +} +#else +__attribute__((naked)) +u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x14\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r10, r0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + str r1, [sp, 0x4]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r9, r2\n\ + movs r7, 0\n\ + mov r0, sp\n\ + strb r7, [r0]\n\ + mov r0, r10\n\ + cmp r0, 0xA5\n\ + bne _0801D2AE\n\ + movs r0, 0\n\ + b _0801D43A\n\ + _0801D2AE:\n\ + ldr r1, _0801D31C @ =gBattleMoves\n\ + mov r3, r10\n\ + lsls r2, r3, 1\n\ + adds r0, r2, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x2]\n\ + str r0, [sp, 0x8]\n\ + ldr r1, _0801D320 @ =gBattleMons\n\ + movs r0, 0x58\n\ + ldr r3, [sp, 0x4]\n\ + muls r0, r3\n\ + adds r3, r0, r1\n\ + adds r0, r3, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + str r2, [sp, 0xC]\n\ + adds r5, r1, 0\n\ + ldr r1, [sp, 0x8]\n\ + cmp r0, r1\n\ + beq _0801D2E2\n\ + adds r0, r3, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, r1\n\ + bne _0801D2F4\n\ + _0801D2E2:\n\ + ldr r4, _0801D324 @ =gBattleMoveDamage\n\ + ldr r1, [r4]\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + str r0, [r4]\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + str r0, [r4]\n\ + _0801D2F4:\n\ + movs r0, 0x58\n\ + mov r2, r9\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r0, r5\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1A\n\ + bne _0801D328\n\ + ldr r3, [sp, 0x8]\n\ + cmp r3, 0x4\n\ + bne _0801D328\n\ + movs r1, 0x9\n\ + mov r0, sp\n\ + ldrb r0, [r0]\n\ + orrs r0, r1\n\ + mov r1, sp\n\ + strb r0, [r1]\n\ + b _0801D3DC\n\ + .align 2, 0\n\ + _0801D31C: .4byte gBattleMoves\n\ + _0801D320: .4byte gBattleMons\n\ + _0801D324: .4byte gBattleMoveDamage\n\ + _0801D328:\n\ + ldr r1, _0801D344 @ =gTypeEffectiveness\n\ + adds r0, r7, r1\n\ + ldrb r0, [r0]\n\ + adds r2, r1, 0\n\ + cmp r0, 0xFF\n\ + beq _0801D3DC\n\ + cmp r0, 0xFE\n\ + bne _0801D34C\n\ + movs r0, 0x58\n\ + mov r1, r9\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + b _0801D3CA\n\ + .align 2, 0\n\ + _0801D344: .4byte gTypeEffectiveness\n\ + _0801D348:\n\ + adds r7, 0x3\n\ + b _0801D3B6\n\ + _0801D34C:\n\ + ldr r6, _0801D44C @ =gTypeEffectiveness\n\ + adds r0, r7, r6\n\ + ldrb r0, [r0]\n\ + ldr r2, [sp, 0x8]\n\ + cmp r0, r2\n\ + bne _0801D3B0\n\ + adds r1, r7, 0x1\n\ + adds r1, r6\n\ + ldr r3, _0801D450 @ =gBattleMons\n\ + mov r8, r3\n\ + movs r3, 0x58\n\ + mov r0, r9\n\ + muls r0, r3\n\ + mov r2, r8\n\ + adds r5, r0, r2\n\ + adds r0, r5, 0\n\ + adds r0, 0x21\n\ + ldrb r4, [r1]\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + bne _0801D388\n\ + adds r0, r7, 0x2\n\ + adds r0, r6\n\ + ldrb r0, [r0]\n\ + mov r1, r10\n\ + mov r2, sp\n\ + str r3, [sp, 0x10]\n\ + bl ModulateDmgByType2\n\ + ldr r3, [sp, 0x10]\n\ + _0801D388:\n\ + adds r0, r5, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + bne _0801D3B0\n\ + ldr r0, _0801D454 @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + muls r0, r3\n\ + add r0, r8\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, r4\n\ + beq _0801D3B0\n\ + adds r0, r7, 0x2\n\ + adds r0, r6\n\ + ldrb r0, [r0]\n\ + mov r1, r10\n\ + mov r2, sp\n\ + bl ModulateDmgByType2\n\ + _0801D3B0:\n\ + adds r7, 0x3\n\ + ldr r5, _0801D450 @ =gBattleMons\n\ + ldr r2, _0801D44C @ =gTypeEffectiveness\n\ + _0801D3B6:\n\ + adds r0, r7, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xFF\n\ + beq _0801D3DC\n\ + cmp r0, 0xFE\n\ + bne _0801D34C\n\ + movs r0, 0x58\n\ + mov r3, r9\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + _0801D3CA:\n\ + adds r1, r5, 0\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 22\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801D348\n\ + _0801D3DC:\n\ + movs r0, 0x58\n\ + mov r1, r9\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r5\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x19\n\ + bne _0801D436\n\ + mov r0, sp\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801D436\n\ + ldr r0, [sp, 0x4]\n\ + mov r1, r10\n\ + bl AttacksThisTurn\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x2\n\ + bne _0801D436\n\ + mov r0, sp\n\ + ldrb r3, [r0]\n\ + adds r0, r1, 0\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _0801D41E\n\ + movs r0, 0x6\n\ + ands r0, r3\n\ + cmp r0, 0x6\n\ + bne _0801D436\n\ + _0801D41E:\n\ + ldr r0, _0801D458 @ =gBattleMoves\n\ + ldr r1, [sp, 0xC]\n\ + add r1, r10\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0\n\ + beq _0801D436\n\ + mov r0, sp\n\ + movs r1, 0x1\n\ + orrs r1, r3\n\ + strb r1, [r0]\n\ + _0801D436:\n\ + mov r0, sp\n\ + ldrb r0, [r0]\n\ + _0801D43A:\n\ + add sp, 0x14\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ + _0801D44C: .4byte gTypeEffectiveness\n\ + _0801D450: .4byte gBattleMons\n\ + _0801D454: .4byte gBankTarget\n\ + _0801D458: .4byte gBattleMoves\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +u8 AI_TypeCalc(u16 move, u16 species, u8 ability) +{ + int i = 0; + u8 flags = 0; + u8 type1 = gBaseStats[species].type1, type2 = gBaseStats[species].type2, move_type; + if (move == MOVE_STRUGGLE) {return 0;} + + move_type = gBattleMoves[move].type; + + if (ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) + flags = MOVE_MISSED | MOVE_NOTAFFECTED; + else + { + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) {i += 3; continue;} + + if (gTypeEffectiveness[i] == move_type) + { + //check type1 + if (gTypeEffectiveness[i + 1] == type1) + ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); + //check type2 + if (gTypeEffectiveness[i + 1] == type2 && gBattleMons[gBankTarget].type1 != type2) //gf you morons, you should check if (type1 != type2)... + ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); + } + i += 3; + } + } + if (ability == ABILITY_WONDER_GUARD && + (!(flags & MOVE_SUPEREFFECTIVE) || ((flags & (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE)) == (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE))) && + gBattleMoves[move].power) + flags |= MOVE_NOTAFFECTED; + return flags; +} + +static inline void RandDmgMultiplier(void) +{ + u16 rand = Random(); + u16 multiplier = 100 - (rand & 0xF); + if (gBattleMoveDamage) + { + gBattleMoveDamage *= multiplier; + gBattleMoveDamage /= 100; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + } +} + +void Unused_RandDmgMultiplier(void) +{ + RandDmgMultiplier(); +} + +static void atk07_dmg_adjustment(void) +{ + u8 hold_effect, quality; + RandDmgMultiplier(); + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) + { + RecordItemBattle(gBankTarget, hold_effect); + gSpecialStatuses[gBankTarget].focusBanded = 1; + } + if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) + goto END; + if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBankTarget].endured + && !gSpecialStatuses[gBankTarget].focusBanded) + goto END; + + if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) + goto END; + + gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1; + + if (gProtectStructs[gBankTarget].endured) + { + gBattleMoveFlags |= MOVE_ENDURED; + goto END; + } + if (gSpecialStatuses[gBankTarget].focusBanded) + { + gBattleMoveFlags |= MOVE_HANGEDON; + gLastUsedItem = gBattleMons[gBankTarget].item; + } + + END: + gBattlescriptCurrInstr++; +} + +static void atk08_dmg_adjustment2(void) //literally the same as 0x7 except it doesn't check for false swipe move effect... +{ + u8 hold_effect, quality; + RandDmgMultiplier(); + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) + { + RecordItemBattle(gBankTarget, hold_effect); + gSpecialStatuses[gBankTarget].focusBanded = 1; + } + if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) + goto END; + if (!gProtectStructs[gBankTarget].endured + && !gSpecialStatuses[gBankTarget].focusBanded) + goto END; + + if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) + goto END; + + gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1; + + if (gProtectStructs[gBankTarget].endured) + { + gBattleMoveFlags |= MOVE_ENDURED; + goto END; + } + if (gSpecialStatuses[gBankTarget].focusBanded) + { + gBattleMoveFlags |= MOVE_HANGEDON; + gLastUsedItem = gBattleMons[gBankTarget].item; + } + + END: + gBattlescriptCurrInstr++; +} + +static void atk09_attackanimation(void) +{ + if (gBattleExecBuffer) {return;} + + if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE)) + { + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_Pausex20; + BATTLE_STRUCT->animTurn += 1; + BATTLE_STRUCT->animTargetsHit += 1; + } + else + { + if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && BATTLE_STRUCT->animTargetsHit) + {gBattlescriptCurrInstr++; return;} + + if (!(gBattleMoveFlags & MOVE_NO_EFFECT)) + { + gActiveBank = gBankAttacker; + + EmitMoveAnimation(0, gCurrentMove, BATTLE_STRUCT->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]); + BATTLE_STRUCT->animTurn += 1; + BATTLE_STRUCT->animTargetsHit += 1; + MarkBufferBankForExecution(gBankAttacker); + gBattlescriptCurrInstr++; + } + else + { + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_Pausex20; + } + } +} + +static void atk0A_waitanimation(void) +{ + if (gBattleExecBuffer) {return;} + gBattlescriptCurrInstr++; +} + +static void atk0B_healthbarupdate(void) +{ + if (gBattleExecBuffer) {return;} + if (gBattleMoveFlags & MOVE_NO_EFFECT) {goto END;} + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + + if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + {PrepareStringBattle(0x80, gActiveBank); goto END;} + + EmitHealthBarUpdate(0, gBattleMoveDamage); + MarkBufferBankForExecution(gActiveBank); + + if (!GetBankSide(gActiveBank) && gBattleMoveDamage > 0) + {gBattleResults.unk5_0 = 1;} + + END: + gBattlescriptCurrInstr += 2; +} + +static void atk0C_datahpupdate(void) +{ + register u32 move_type asm("r6"); //no idea how to match it otherwise + u8 dynamic_move_type; + if (gBattleExecBuffer) {return;} + + dynamic_move_type = BATTLE_STRUCT->dynamicMoveType; + if (dynamic_move_type && !(dynamic_move_type & 0x40)) + {move_type = 0x3F; move_type &= dynamic_move_type;} + else + {move_type = gBattleMoves[gCurrentMove].type;} + + if (!(gBattleMoveFlags & MOVE_NO_EFFECT)) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + { + if (gDisableStructs[gActiveBank].substituteHP >= gBattleMoveDamage) + { + if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0 ) {gSpecialStatuses[gActiveBank].moveturnLostHP = gBattleMoveDamage;} + gDisableStructs[gActiveBank].substituteHP -= gBattleMoveDamage; + gHP_dealt = gBattleMoveDamage; + } + else + { + if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0 ) {gSpecialStatuses[gActiveBank].moveturnLostHP = gDisableStructs[gActiveBank].substituteHP;} + gHP_dealt = gDisableStructs[gActiveBank].substituteHP; + gDisableStructs[gActiveBank].substituteHP = 0; + } + //check substitute fading + if (gDisableStructs[gActiveBank].substituteHP == 0) + { + gBattlescriptCurrInstr += 2; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_SubstituteFade; + return; + } + } + else + { + gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE); + if (gBattleMoveDamage < 0) //hp goes up + { + gBattleMons[gActiveBank].hp -= gBattleMoveDamage; + if (gBattleMons[gActiveBank].hp > gBattleMons[gActiveBank].maxHP) + gBattleMons[gActiveBank].hp = gBattleMons[gActiveBank].maxHP; + + } + else //hp goes down + { + if (gHitMarker & HITMARKER_x20) + { gHitMarker &= ~(HITMARKER_x20);} + else + { + gTakenDmg[gActiveBank] += gBattleMoveDamage; + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + gTakenDmgBanks[gActiveBank] = gBankAttacker; + else + gTakenDmgBanks[gActiveBank] = gBankTarget; + } + + if (gBattleMons[gActiveBank].hp > gBattleMoveDamage) + { + gBattleMons[gActiveBank].hp -= gBattleMoveDamage; + gHP_dealt = gBattleMoveDamage; + } + else + { + gHP_dealt = gBattleMons[gActiveBank].hp; + gBattleMons[gActiveBank].hp = 0; + } + + if (!gSpecialStatuses[gActiveBank].moveturnLostHP && !(gHitMarker & HITMARKER_x100000)) + gSpecialStatuses[gActiveBank].moveturnLostHP = gHP_dealt; + + if (move_type <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT) + { + gProtectStructs[gActiveBank].physicalDmg = gHP_dealt; + gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHP_dealt; + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + { + gProtectStructs[gActiveBank].physicalBank = gBankAttacker; + gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankAttacker; + } + else + { + gProtectStructs[gActiveBank].physicalBank = gBankTarget; + gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankTarget; + } + } + else if (move_type > 8 && !(gHitMarker & HITMARKER_x100000)) + { + gProtectStructs[gActiveBank].specialDmg = gHP_dealt; + gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHP_dealt; + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + { + gProtectStructs[gActiveBank].specialBank = gBankAttacker; + gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankAttacker; + } + else + { + gProtectStructs[gActiveBank].specialBank = gBankTarget; + gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankTarget; + } + } + } + gHitMarker &= ~(HITMARKER_x100000); + EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); + MarkBufferBankForExecution(gActiveBank); + } + } + else + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) + gSpecialStatuses[gActiveBank].moveturnLostHP = 0xFFFF; + } + gBattlescriptCurrInstr += 2; +} + +static void atk0D_critmessage(void) +{ + if (gBattleExecBuffer) {return;} + if (gCritMultiplier == 2 && !(gBattleMoveFlags & MOVE_NO_EFFECT)) + {PrepareStringBattle(0xD9, gBankAttacker); gBattleCommunication[MSG_DISPLAY] = 1;} + gBattlescriptCurrInstr++; +} + +static void atk0E_effectiveness_sound(void) +{ + if (gBattleExecBuffer) {return;} + gActiveBank = gBankTarget; + if (!(gBattleMoveFlags & MOVE_MISSED)) + { + u8 flag = ~MOVE_MISSED; + switch (gBattleMoveFlags & flag) + { + case MOVE_SUPEREFFECTIVE: + EmitEffectivenessSound(0, 14); + MarkBufferBankForExecution(gActiveBank); + break; + case MOVE_NOTVERYEFFECTIVE: + EmitEffectivenessSound(0, 12); + MarkBufferBankForExecution(gActiveBank); + break; + case MOVE_NOTAFFECTED: + case MOVE_FAILED: + break; + case MOVE_ENDURED: + case MOVE_ONEHITKO: + case MOVE_HANGEDON: + default: + if (gBattleMoveFlags & MOVE_SUPEREFFECTIVE) + {EmitEffectivenessSound(0, 14); MarkBufferBankForExecution(gActiveBank);} + else if (gBattleMoveFlags & MOVE_NOTVERYEFFECTIVE) + {EmitEffectivenessSound(0, 12); MarkBufferBankForExecution(gActiveBank);} + else if (!(gBattleMoveFlags & (MOVE_NOTAFFECTED | MOVE_FAILED))) + {EmitEffectivenessSound(0, 13); MarkBufferBankForExecution(gActiveBank);} + break; + } + } + gBattlescriptCurrInstr++; +} + +static void atk0F_resultmessage(void) +{ + u16 stringID = 0; + if (gBattleExecBuffer) {return;} + + if (gBattleMoveFlags & MOVE_MISSED && (!(gBattleMoveFlags & MOVE_NOTAFFECTED) || gBattleCommunication[6] > 2)) + { + stringID = gMissStrings[gBattleCommunication[6]]; + gBattleCommunication[MSG_DISPLAY] = 1; + } + else + { + gBattleCommunication[MSG_DISPLAY] = 1; + switch (gBattleMoveFlags & 0xFE) + { + case MOVE_SUPEREFFECTIVE: + stringID = 0xDE; break; + case MOVE_NOTVERYEFFECTIVE: + stringID = 0xDD; break; + case MOVE_ONEHITKO: + stringID = 0xDA; break; + case MOVE_ENDURED: + stringID = 0x99; break; + case MOVE_FAILED: + goto FAILED; + case MOVE_NOTAFFECTED: + goto NOTAFFECTED; + case MOVE_HANGEDON: + gLastUsedItem = gBattleMons[gBankTarget].item; + gStringBank = gBankTarget; + gBattleMoveFlags &= ~(MOVE_ENDURED | MOVE_HANGEDON); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return; + default: + if (gBattleMoveFlags & MOVE_NOTAFFECTED) + NOTAFFECTED: + stringID = 0x1B; + else if (gBattleMoveFlags & MOVE_ONEHITKO) + { + gBattleMoveFlags &= ~(MOVE_ONEHITKO); + gBattleMoveFlags &= ~(MOVE_SUPEREFFECTIVE); + gBattleMoveFlags &= ~(MOVE_NOTVERYEFFECTIVE); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_OneHitKOMsg; return; + } + else if (gBattleMoveFlags & MOVE_ENDURED) + { + gBattleMoveFlags &= ~(MOVE_ENDURED | MOVE_HANGEDON); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_EnduredMsg; return; + } + else if (gBattleMoveFlags & MOVE_HANGEDON) + { + gLastUsedItem = gBattleMons[gBankTarget].item; + gStringBank = gBankTarget; + gBattleMoveFlags &= ~(MOVE_ENDURED | MOVE_HANGEDON); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return; + } + else if (gBattleMoveFlags & MOVE_FAILED) + FAILED: + stringID = 0xE5; + else + gBattleCommunication[MSG_DISPLAY] = 0; + } + } + + if (stringID) + { + register u16 dummy asm("r0") = stringID; //Can't match it otherwise + PrepareStringBattle(dummy, gBankAttacker); + } + gBattlescriptCurrInstr++; +} + +static void atk10_printstring(void) +{ + if (gBattleExecBuffer) {return;} + + PrepareStringBattle(BSScriptRead16(gBattlescriptCurrInstr + 1), gBankAttacker); + gBattlescriptCurrInstr += 3; + gBattleCommunication[MSG_DISPLAY] = 1; +} + +static void atk11_printstring_playeronly(void) +{ + gActiveBank = gBankAttacker; + EmitPrintStringPlayerOnly(0, BSScriptRead16(gBattlescriptCurrInstr + 1)); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 3; + gBattleCommunication[MSG_DISPLAY] = 1; +} + +static void atk12_waitmessage(void) +{ + if (gBattleExecBuffer) {return;} + + if (!gBattleCommunication[MSG_DISPLAY]) + gBattlescriptCurrInstr += 3; + else + { + u16 to_wait = BSScriptRead16(gBattlescriptCurrInstr + 1); + if (++gPauseCounterBattle >= to_wait) + { + gPauseCounterBattle = 0; + gBattlescriptCurrInstr += 3; + gBattleCommunication[MSG_DISPLAY] = 0; + } + } +} + +static void atk13_printfromtable(void) +{ + void* Ptr; + if (gBattleExecBuffer) {return;} + + Ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1) + 2 * gBattleCommunication[MULTISTRING_CHOOSER]; + PrepareStringBattle(*(u16*)Ptr, gBankAttacker); + gBattlescriptCurrInstr += 5; + gBattleCommunication[MSG_DISPLAY] = 1; +} + +static void atk14_printfromtable_playeronly(void) +{ + void* Ptr; + if (gBattleExecBuffer) {return;} + + Ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1) + 2 * gBattleCommunication[MULTISTRING_CHOOSER]; + gActiveBank = gBankAttacker; + EmitPrintStringPlayerOnly(0, *(u16*)Ptr); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 5; + gBattleCommunication[MSG_DISPLAY] = 1; +} + +u8 BankGetTurnOrder(u8 bank) +{ + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gTurnOrder[i] == bank) {break;} + } + return i; +} + +//Someone please decompile this monstrosity below... +#ifdef NONMATCHING +void SetMoveEffect(bool8 primary, u8 certainArg) +{ + #define EffectAffectsUser 0x40 + register u8 certain asm("r5") = certainArg; + register bool32 StatusChanged asm("r10") = 0; + register int AffectsUser asm("r6") = 0; //0x40 otherwise + bool32 NoSunCanFreeze = 1; + + if (gBattleCommunication[MOVE_EFFECT_BYTE] & EffectAffectsUser) + { + gEffectBank = gBankAttacker; //bank that effects get applied on + gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(EffectAffectsUser); + AffectsUser = EffectAffectsUser; + BATTLE_STRUCT->scriptingActive = gBankTarget; //theoretically the attacker + } + else + { + gEffectBank = gBankTarget; + BATTLE_STRUCT->scriptingActive = gBankAttacker; + } + + if (gBattleMons[gEffectBank].ability_id == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && + !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9) + {gBattlescriptCurrInstr++; return;} + + if (gSideAffecting[get_bank_identity(gEffectBank) & 1] & SIDE_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && + !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7) + {gBattlescriptCurrInstr++; return;} + + //make sure at least ONE HP except payday and thief + if (gBattleMons[gEffectBank].current_hp == 0 && gBattleCommunication[MOVE_EFFECT_BYTE] != 0xB && gBattleCommunication[MOVE_EFFECT_BYTE] != 0x1F) + {gBattlescriptCurrInstr++; return;} + + if (gBattleMons[gEffectBank].status2 & STATUS2_SUBSTITUTE && AffectsUser != EffectAffectsUser) + {gBattlescriptCurrInstr++; return;} + + if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) //status change + { + switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + { + case STATUS_SLEEP: + //check active uproar + if (gBattleMons[gEffectBank].ability_id != ABILITY_SOUNDPROOF) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks && !(gBattleMons[gActiveBank].status2 & STATUS2_UPROAR); gActiveBank++) {} + } + else + gActiveBank = gNoOfAllBanks; + if (gBattleMons[gEffectBank].status) {break;} + if (gActiveBank != gNoOfAllBanks) {break;} //nice way of checking uproar... + if (gBattleMons[gEffectBank].ability_id == ABILITY_VITAL_SPIRIT) {break;} + if (gBattleMons[gEffectBank].ability_id == ABILITY_INSOMNIA) {break;} + + b_cancel_multi_turn_move_maybe(gEffectBank); + StatusChanged = 1; + break; + case STATUS_POISON: + if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) + { + gLastUsedAbility = ABILITY_IMMUNITY; + RecordAbility(gEffectBank, ABILITY_IMMUNITY); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + //_0801E664: + gBattlescriptCurrInstr = BS_PSN_PREVENTION; + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + return; + } + else + {gBattleCommunication.multistring_chooser = 0; return;} + } + if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL) + && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) + { + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_PSN_PREVENTION; + gBattleCommunication.multistring_chooser = 2; + return; + } + if (gBattleMons[gEffectBank].type1 == TYPE_POISON) {break;} + if (gBattleMons[gEffectBank].type2 == TYPE_POISON) {break;} + if (gBattleMons[gEffectBank].type1 == TYPE_STEEL) {break;} + if (gBattleMons[gEffectBank].type2 == TYPE_STEEL) {break;} + if (gBattleMons[gEffectBank].status) {break;} + if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;} + StatusChanged = 1; + break; + case STATUS_BURN: + if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80)) + { + gLastUsedAbility = ABILITY_WATER_VEIL; + RecordAbility(gEffectBank, ABILITY_WATER_VEIL); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + //_0801E664: + gBattlescriptCurrInstr = BS_BRN_PREVENTION; + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + return; + } + else + {gBattleCommunication.multistring_chooser = 0; return;} + } + if ((gBattleMons[gEffectBank].type1 == TYPE_FIRE || gBattleMons[gEffectBank].type2 == TYPE_FIRE) + && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) + { + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_BRN_PREVENTION; + gBattleCommunication.multistring_chooser = 2; + return; + } + if (gBattleMons[gEffectBank].type1 == TYPE_FIRE) {break;} + if (gBattleMons[gEffectBank].type2 == TYPE_FIRE) {break;} + if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL) {break;} + if (gBattleMons[gEffectBank].status1 == 0) {break;} + StatusChanged = 1; + break; + case STATUS_FREEZE: + if (WeatherHasEffect && gBattleWeather & WEATHER_SUNNY) {NoSunCanFreeze = 0;} + if (gBattleMons[gEffectBank].type1 == TYPE_ICE) {break;} + if (gBattleMons[gEffectBank].type2 == TYPE_ICE) {break;} + if (gBattleMons[gEffectBank].status) {break;} + if (NoSunCanFreeze == 0) {break;} + if (gBattleMons[gEffectBank].ability_id == ABILITY_MAGMA_ARMOR) {break;} + + b_cancel_multi_turn_move_maybe(gEffectBank); + StatusChanged = 1; + break; + case STATUS_PARALYSIS: + if (gBattleMons[gEffectBank].ability_id == ABILITY_LIMBER) + { + if ((primary == 1 || certain == 0x80)) + { + gLastUsedAbility = ABILITY_LIMBER; + RecordAbility(gEffectBank, ABILITY_LIMBER); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + //_0801E664: + gBattlescriptCurrInstr = BS_PRLZ_PREVENTION; + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + return; + } + else + {gBattleCommunication.multistring_chooser = 0; return;} + } + else {break;} + } + if (gBattleMons[gEffectBank].status) {break;} + StatusChanged = 1; + break; + case STATUS_TOXIC_POISON: + if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) + { + gLastUsedAbility = ABILITY_IMMUNITY; + RecordAbility(gEffectBank, ABILITY_IMMUNITY); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + //_0801E664: + gBattlescriptCurrInstr = BS_PSN_PREVENTION; + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + return; + } + else + {gBattleCommunication.multistring_chooser = 0; return;} + } + if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL) + && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) + { + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_PSN_PREVENTION; + gBattleCommunication.multistring_chooser = 2; + return; + } + if (gBattleMons[gEffectBank].status) {break;} + if (gBattleMons[gEffectBank].type1 != TYPE_POISON && + gBattleMons[gEffectBank].type2 != TYPE_POISON && + gBattleMons[gEffectBank].type1 != TYPE_STEEL && + gBattleMons[gEffectBank].type2 != TYPE_STEEL) + { + if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;} + gBattleMons[gEffectBank].status1 |= ~(STATUS_POISON); //TODO: fix OR to AND + StatusChanged = 1; + break; + } + else + gBattleMoveFlags |= MOVE_NOTAFFECTED; + break; + } + if (StatusChanged == 1) + { + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP) + gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2); + else + gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gActiveBank = gEffectBank; + bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status); + mark_buffer_bank_for_execution(gActiveBank); + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + } + else + gBattleCommunication.multistring_chooser = 0; + if (gBattleCommunication[MOVE_EFFECT_BYTE] == 2 || gBattleCommunication[MOVE_EFFECT_BYTE] == 6 || gBattleCommunication[MOVE_EFFECT_BYTE] == 5 || gBattleCommunication[MOVE_EFFECT_BYTE] == 3) + { + BATTLE_STRUCT->SynchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE]; + gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT; + } + return; + } + else if (StatusChanged == 0) + {gBattlescriptCurrInstr++; return;} + } + else + { + if (gBattleMons[gEffectBank].status2 & gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + {gBattlescriptCurrInstr++; return;} + switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + { + case 7: //confusion + if (gBattleMons[gEffectBank].ability_id == ABILITY_OWN_TEMPO) + {gBattlescriptCurrInstr++; return;} + if (gBattleMons[gEffectBank].status2 & STATUS2_CONFUSION) + {gBattlescriptCurrInstr++; return;} + gBattleMons[gEffectBank].status2 |= (((Random()) % 0x4)) + 2; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + break; + case 8: //flinch + if (gBattleMons[gEffectBank].ability_id == ABILITY_INNER_FOCUS) + { + if (primary == 1 || certain == 0x80) + { + gLastUsedAbility = ABILITY_INNER_FOCUS; + RecordAbility(gEffectBank, ABILITY_INNER_FOCUS); + gBattlescriptCurrInstr = BS_FLINCH_PREVENTION; + return; + } + else + {gBattlescriptCurrInstr++; return;} + } + else + { + if (BankGetTurnOrder(gEffectBank) > gCurrentMoveTurn) + gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr++; return; + } + break; + case 10: //uproar + if (gBattleMons[gEffectBank].status2 & STATUS2_UPROAR) + {gBattlescriptCurrInstr++; return;} + gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gEffectBank] = gCurrentMove; + gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + break; + case 11: //pay day + if (!(get_bank_identity(gEffectBank) & 1)) + { + u16 PayDay = gPaydayMoney; + gPaydayMoney += (gBattleMons[gEffectBank].level * 5); + if (PayDay > gPaydayMoney) + gPaydayMoney = 0xFFFF; + } + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + break; + case 9: //tri attack + if (gBattleMons[gEffectBank].status) + {gBattlescriptCurrInstr++; return;} + gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3; + SetMoveEffect(0, 0); + break; + case 12: //charging move + gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gEffectBank] = gCurrentMove; + gProtectStructs[gEffectBank].flag1_chargingturn = 1; + gBattlescriptCurrInstr++; + break; + case 13: //wrap + if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED) + {gBattlescriptCurrInstr++; return;} + gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 0xD; + BATTLE_STRUCT->WrappedMove1[gEffectBank] = gCurrentMove; + BATTLE_STRUCT->WrappedMove2[gEffectBank] = gCurrentMove >> 8; + BATTLE_STRUCT->WrappedBy[gEffectBank] = gBankAttacker; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + + for (gBattleCommunication.multistring_chooser = 0; + gBattleCommunication.multistring_chooser <= 4 && gCurrentMove != gTrappingMoves[gBattleCommunication.multistring_chooser]; + gBattleCommunication.multistring_chooser++) {} + break; + case 14: //recoil + gBattleMoveDamage = (gHP_dealt) / 4; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + break; + case 15 ... 21: //stat + 1 + if (ChangeStats(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;} + else + { + BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one + BATTLE_STRUCT->animArg2 = 0; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_STAT_UP; + } + break; + case 22 ... 28: //stat - 1 + if (ChangeStats(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly + else + { + BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; + BATTLE_STRUCT->animArg2 = 0; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_STAT_DOWN; + } + break; + case 39 ... 45: //stat + 2 + if (ChangeStats(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;} + else + { + BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; + BATTLE_STRUCT->animArg2 = 0; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_STAT_UP; + } + break; + case 46 ... 52: //stat - 2 + if (ChangeStats(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;} + else + { + BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; + BATTLE_STRUCT->animArg2 = 0; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_STAT_DOWN; + } + break; + case 29: //recharge + gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE; + gDisableStructs[gEffectBank].recharge_counter = 2; + gLockedMove[gEffectBank] = gCurrentMove; + gBattlescriptCurrInstr++; + break; + case 30: //rage + gBattleMons[gBankAttacker].status2 |= STATUS2_RAGE; + gBattlescriptCurrInstr++; + break; + case 31: //item steal + { + u8 side = battle_side_get_owner(gBankAttacker); + if (battle_side_get_owner(gBankAttacker) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400) + {gBattlescriptCurrInstr++; return;} + if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.KnockedOff[side] & gBitTable[gBattlePartyID[gBankAttacker]])) + {gBattlescriptCurrInstr++; return;} + if (gBattleMons[gBankTarget].held_item && gBattleMons[gBankTarget].ability_id == ABILITY_STICKY_HOLD) + { + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BS_NO_ITEMSTEAL; + gLastUsedAbility = gBattleMons[gBankTarget].ability_id; + RecordAbility(gBankTarget, gLastUsedAbility); + return; + } + if (gBattleMons[gBankAttacker].held_item) + {gBattlescriptCurrInstr++; return;} + if (gBattleMons[gBankTarget].held_item == ITEM_ENIGMA_BERRY) + {gBattlescriptCurrInstr++; return;} + if (gBattleMons[gBankTarget].held_item == 0) + {gBattlescriptCurrInstr++; return;} + + CHANGED_HELDITEMS[gBankAttacker] = gLastUsedItem = gBattleMons[gBankTarget].held_item; + gBattleMons[gBankTarget].held_item = 0; + + gActiveBank = gBankAttacker; + bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); + mark_buffer_bank_for_execution(gBankAttacker); + + gActiveBank = gBankTarget; + bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].held_item); + mark_buffer_bank_for_execution(gBankTarget); + + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_ITEMSTEAL; + + STORE_CHOICEMOVE(gBankTarget, 0); + } + break; + case 32: //escape prevention + gBattleMons[gBankTarget].status2 |= STATUS2_RECHARGE; + gDisableStructs[gBankTarget].BankPreventingEscape = gBankAttacker; + gBattlescriptCurrInstr++; + break; + case 33: //nightmare + gBattleMons[gBankTarget].status2 |= STATUS2_NIGHTMARE; + gBattlescriptCurrInstr++; + break; + case 34: + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = gUnknown_081D9224; + return; + case 35: //break free rapidspin + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_RAPIDSPINAWAY; + return; + case 36: //paralysis removal + if (gBattleMons[gBankTarget].status1 & STATUS_PARALYSIS) + { + gBattleMons[gBankTarget].status1 &= ~(STATUS_PARALYSIS); + gActiveBank = gBankTarget; + bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status); + mark_buffer_bank_for_execution(gActiveBank); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_PARALYSISHEALED; + } + else + {gBattlescriptCurrInstr++; return;} + break; + case 37: // + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = gUnknown_081D93FA; + return; + case 38: //recoil plus paralysis + gBattleMoveDamage = gHP_dealt / 3; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + break; + case 53: //thrash + if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE)) + { + gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gEffectBank] = gCurrentMove; + gBattleMons[gEffectBank].status2 |= (((Random() & 1) + 2) << 0xA); + } + else + {gBattlescriptCurrInstr++; return;} + break; + case 54: //knock off + if (gBattleMons[gEffectBank].ability_id == ABILITY_STICKY_HOLD) + { + if (gBattleMons[gEffectBank].held_item == 0) + {gBattlescriptCurrInstr++; return;} + gLastUsedAbility = ABILITY_STICKY_HOLD; + gBattlescriptCurrInstr = BS_STICKYHOLD_ACTIVATES; + RecordAbility(gEffectBank, ABILITY_STICKY_HOLD); + return; + } + if (gBattleMons[gEffectBank].held_item == 0) + {gBattlescriptCurrInstr++; return;} + else + { + u8 side = battle_side_get_owner(gEffectBank); + gLastUsedItem = gBattleMons[gEffectBank].held_item; + gBattleMons[gEffectBank].held_item = 0; + gWishFutureKnock.KnockedOff[side] |= gBitTable[gBattlePartyID[gEffectBank]]; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_KNOCKEDOFF; + + STORE_CHOICEMOVE(gEffectBank, 0); + } + break; + case 59: //overheat I guess, dont remember + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = gUnknown_081D94B0; + return; + } + } +} +#else +__attribute__((naked)) +void SetMoveEffect(bool8 primary, u8 certainArg) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r1, 24\n\ + lsrs r5, r1, 24\n\ + movs r0, 0\n\ + mov r10, r0\n\ + movs r6, 0\n\ + movs r1, 0x1\n\ + str r1, [sp, 0x4]\n\ + ldr r1, _0801E430 @ =gBattleCommunication\n\ + ldrb r3, [r1, 0x3]\n\ + movs r0, 0x40\n\ + ands r0, r3\n\ + adds r7, r1, 0\n\ + cmp r0, 0\n\ + beq _0801E444\n\ + ldr r2, _0801E434 @ =gEffectBank\n\ + ldr r0, _0801E438 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + movs r0, 0xBF\n\ + ands r0, r3\n\ + strb r0, [r7, 0x3]\n\ + movs r6, 0x40\n\ + ldr r0, _0801E43C @ =0x02000000\n\ + ldr r1, _0801E440 @ =gBankTarget\n\ + b _0801E450\n\ + .align 2, 0\n\ +_0801E430: .4byte gBattleCommunication\n\ +_0801E434: .4byte gEffectBank\n\ +_0801E438: .4byte gBankAttacker\n\ +_0801E43C: .4byte 0x02000000\n\ +_0801E440: .4byte gBankTarget\n\ +_0801E444:\n\ + ldr r2, _0801E538 @ =gEffectBank\n\ + ldr r0, _0801E53C @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + ldr r0, _0801E540 @ =0x02000000\n\ + ldr r1, _0801E544 @ =gBankAttacker\n\ +_0801E450:\n\ + ldrb r1, [r1]\n\ + ldr r3, _0801E548 @ =0x00016003\n\ + adds r0, r3\n\ + strb r1, [r0]\n\ + mov r8, r2\n\ + ldr r2, _0801E54C @ =gBattleMons\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x13\n\ + bne _0801E48A\n\ + ldr r0, _0801E550 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801E48A\n\ + cmp r4, 0\n\ + bne _0801E48A\n\ + ldrb r0, [r7, 0x3]\n\ + cmp r0, 0x9\n\ + bhi _0801E48A\n\ + bl _0801F5DC\n\ +_0801E48A:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + bl GetBankIdentity\n\ + ldr r2, _0801E554 @ =gSideAffecting\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + lsls r1, 1\n\ + adds r1, r2\n\ + ldrh r1, [r1]\n\ + movs r0, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E4C4\n\ + ldr r0, _0801E550 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801E4C4\n\ + cmp r4, 0\n\ + bne _0801E4C4\n\ + ldr r0, _0801E558 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + cmp r0, 0x7\n\ + bhi _0801E4C4\n\ + bl _0801F5DC\n\ +_0801E4C4:\n\ + ldr r3, _0801E54C @ =gBattleMons\n\ + ldr r2, _0801E538 @ =gEffectBank\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r3\n\ + ldrh r0, [r0, 0x28]\n\ + mov r8, r2\n\ + mov r9, r3\n\ + cmp r0, 0\n\ + bne _0801E4EA\n\ + ldr r0, _0801E558 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + cmp r0, 0xB\n\ + beq _0801E4EA\n\ + cmp r0, 0x1F\n\ + beq _0801E4EA\n\ + bl _0801F5DC\n\ +_0801E4EA:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + mov r1, r9\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E50C\n\ + cmp r6, 0x40\n\ + beq _0801E50C\n\ + bl _0801F5DC\n\ +_0801E50C:\n\ + ldr r0, _0801E558 @ =gBattleCommunication\n\ + ldrb r1, [r0, 0x3]\n\ + adds r7, r0, 0\n\ + cmp r1, 0x6\n\ + bls _0801E518\n\ + b _0801EB4A\n\ +_0801E518:\n\ + ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects\n\ + ldrb r0, [r7, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + cmp r0, 0x10\n\ + bne _0801E528\n\ + b _0801E714\n\ +_0801E528:\n\ + cmp r0, 0x10\n\ + bhi _0801E560\n\ + cmp r0, 0x7\n\ + beq _0801E57A\n\ + cmp r0, 0x8\n\ + bne _0801E536\n\ + b _0801E630\n\ +_0801E536:\n\ + b _0801EA14\n\ + .align 2, 0\n\ +_0801E538: .4byte gEffectBank\n\ +_0801E53C: .4byte gBankTarget\n\ +_0801E540: .4byte 0x02000000\n\ +_0801E544: .4byte gBankAttacker\n\ +_0801E548: .4byte 0x00016003\n\ +_0801E54C: .4byte gBattleMons\n\ +_0801E550: .4byte gHitMarker\n\ +_0801E554: .4byte gSideAffecting\n\ +_0801E558: .4byte gBattleCommunication\n\ +_0801E55C: .4byte gStatusFlagsForMoveEffects\n\ +_0801E560:\n\ + cmp r0, 0x40\n\ + bne _0801E566\n\ + b _0801E888\n\ +_0801E566:\n\ + cmp r0, 0x40\n\ + bhi _0801E572\n\ + cmp r0, 0x20\n\ + bne _0801E570\n\ + b _0801E7EA\n\ +_0801E570:\n\ + b _0801EA14\n\ +_0801E572:\n\ + cmp r0, 0x80\n\ + bne _0801E578\n\ + b _0801E8E4\n\ +_0801E578:\n\ + b _0801EA14\n\ +_0801E57A:\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2B\n\ + beq _0801E5DC\n\ + ldr r0, _0801E5D4 @ =gActiveBank\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + ldr r1, _0801E5D8 @ =gNoOfAllBanks\n\ + ldrb r3, [r1]\n\ + adds r7, r0, 0\n\ + mov r12, r1\n\ + cmp r3, 0\n\ + beq _0801E5E8\n\ + mov r4, r9\n\ + ldr r0, [r4, 0x50]\n\ + movs r1, 0x70\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801E5E8\n\ + adds r1, r7, 0\n\ + mov r6, r9\n\ + adds r6, 0x50\n\ + movs r5, 0x58\n\ + movs r4, 0x70\n\ +_0801E5B4:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, r3\n\ + bcs _0801E5E8\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + beq _0801E5B4\n\ + b _0801E5E8\n\ + .align 2, 0\n\ +_0801E5D4: .4byte gActiveBank\n\ +_0801E5D8: .4byte gNoOfAllBanks\n\ +_0801E5DC:\n\ + ldr r0, _0801E628 @ =gActiveBank\n\ + ldr r2, _0801E62C @ =gNoOfAllBanks\n\ + ldrb r1, [r2]\n\ + strb r1, [r0]\n\ + adds r7, r0, 0\n\ + mov r12, r2\n\ +_0801E5E8:\n\ + mov r0, r8\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + adds r1, r2, 0\n\ + muls r1, r0\n\ + mov r0, r9\n\ + adds r0, 0x4C\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E600\n\ + b _0801EA14\n\ +_0801E600:\n\ + ldrb r0, [r7]\n\ + mov r3, r12\n\ + ldrb r3, [r3]\n\ + cmp r0, r3\n\ + beq _0801E60C\n\ + b _0801EA14\n\ +_0801E60C:\n\ + mov r4, r9\n\ + adds r0, r1, r4\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x48\n\ + bne _0801E61A\n\ + b _0801EA14\n\ +_0801E61A:\n\ + cmp r0, 0xF\n\ + bne _0801E620\n\ + b _0801EA14\n\ +_0801E620:\n\ + adds r0, r2, 0\n\ + bl CancelMultiTurnMoves\n\ + b _0801EA04\n\ + .align 2, 0\n\ +_0801E628: .4byte gActiveBank\n\ +_0801E62C: .4byte gNoOfAllBanks\n\ +_0801E630:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x11\n\ + bne _0801E688\n\ + cmp r4, 0x1\n\ + beq _0801E64A\n\ + cmp r5, 0x80\n\ + bne _0801E688\n\ +_0801E64A:\n\ + ldr r0, _0801E678 @ =gLastUsedAbility\n\ + strb r1, [r0]\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r1, 0x11\n\ + bl RecordAbilityBattle\n\ + ldr r4, _0801E67C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E680 @ =BattleScript_PSNPrevention\n\ +_0801E664:\n\ + str r0, [r4]\n\ + ldr r2, _0801E684 @ =gHitMarker\n\ + ldr r1, [r2]\n\ + movs r0, 0x80\n\ + lsls r0, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E676\n\ + b _0801E928\n\ +_0801E676:\n\ + b _0801E94C\n\ + .align 2, 0\n\ +_0801E678: .4byte gLastUsedAbility\n\ +_0801E67C: .4byte gBattlescriptCurrInstr\n\ +_0801E680: .4byte BattleScript_PSNPrevention\n\ +_0801E684: .4byte gHitMarker\n\ +_0801E688:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + movs r1, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r1, r0, 0\n\ + adds r1, 0x21\n\ + ldrb r1, [r1]\n\ + cmp r1, 0x3\n\ + beq _0801E6AC\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + beq _0801E6AC\n\ + cmp r1, 0x8\n\ + beq _0801E6AC\n\ + cmp r0, 0x8\n\ + bne _0801E6C6\n\ +_0801E6AC:\n\ + ldr r0, _0801E710 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E6C6\n\ + cmp r4, 0x1\n\ + bne _0801E6C0\n\ + b _0801E98C\n\ +_0801E6C0:\n\ + cmp r5, 0x80\n\ + bne _0801E6C6\n\ + b _0801E98C\n\ +_0801E6C6:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + mov r4, r9\n\ + adds r3, r1, r4\n\ + adds r0, r3, 0\n\ + adds r0, 0x21\n\ + ldrb r4, [r0]\n\ + cmp r4, 0x3\n\ + bne _0801E6DE\n\ + b _0801EA14\n\ +_0801E6DE:\n\ + adds r0, 0x1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + bne _0801E6E8\n\ + b _0801EA14\n\ +_0801E6E8:\n\ + cmp r4, 0x8\n\ + bne _0801E6EE\n\ + b _0801EA14\n\ +_0801E6EE:\n\ + cmp r0, 0x8\n\ + bne _0801E6F4\n\ + b _0801EA14\n\ +_0801E6F4:\n\ + mov r0, r9\n\ + adds r0, 0x4C\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E702\n\ + b _0801EA14\n\ +_0801E702:\n\ + adds r0, r3, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + bne _0801E70E\n\ + b _0801EA14\n\ +_0801E70E:\n\ + b _0801EA04\n\ + .align 2, 0\n\ +_0801E710: .4byte gHitMarker\n\ +_0801E714:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x29\n\ + bne _0801E758\n\ + cmp r4, 0x1\n\ + beq _0801E72E\n\ + cmp r5, 0x80\n\ + bne _0801E758\n\ +_0801E72E:\n\ + ldr r0, _0801E74C @ =gLastUsedAbility\n\ + strb r1, [r0]\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r1, 0x29\n\ + bl RecordAbilityBattle\n\ + ldr r4, _0801E750 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E754 @ =BattleScript_BRNPrevention\n\ + b _0801E664\n\ + .align 2, 0\n\ +_0801E74C: .4byte gLastUsedAbility\n\ +_0801E750: .4byte gBattlescriptCurrInstr\n\ +_0801E754: .4byte BattleScript_BRNPrevention\n\ +_0801E758:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + mov r2, r9\n\ + adds r1, r0, r2\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xA\n\ + beq _0801E778\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xA\n\ + bne _0801E7A8\n\ +_0801E778:\n\ + ldr r0, _0801E79C @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E7A8\n\ + cmp r4, 0x1\n\ + beq _0801E78E\n\ + cmp r5, 0x80\n\ + bne _0801E7A8\n\ +_0801E78E:\n\ + ldr r4, _0801E7A0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E7A4 @ =BattleScript_BRNPrevention\n\ + b _0801E998\n\ + .align 2, 0\n\ +_0801E79C: .4byte gHitMarker\n\ +_0801E7A0: .4byte gBattlescriptCurrInstr\n\ +_0801E7A4: .4byte BattleScript_BRNPrevention\n\ +_0801E7A8:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r1, 0x58\n\ + adds r2, r0, 0\n\ + muls r2, r1\n\ + mov r4, r9\n\ + adds r1, r2, r4\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xA\n\ + bne _0801E7C2\n\ + b _0801EA14\n\ +_0801E7C2:\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xA\n\ + bne _0801E7CE\n\ + b _0801EA14\n\ +_0801E7CE:\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x29\n\ + bne _0801E7DA\n\ + b _0801EA14\n\ +_0801E7DA:\n\ + mov r0, r9\n\ + adds r0, 0x4C\n\ + adds r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E7E8\n\ + b _0801EA14\n\ +_0801E7E8:\n\ + b _0801EA04\n\ +_0801E7EA:\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x13\n\ + movs r1, 0\n\ + movs r2, 0xD\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0\n\ + bne _0801E826\n\ + str r0, [sp]\n\ + movs r0, 0x13\n\ + movs r1, 0\n\ + movs r2, 0x4D\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0801E826\n\ + ldr r0, _0801E87C @ =gBattleWeather\n\ + ldrh r1, [r0]\n\ + movs r0, 0x60\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E826\n\ + movs r1, 0\n\ + str r1, [sp, 0x4]\n\ +_0801E826:\n\ + ldr r4, _0801E880 @ =gBattleMons\n\ + ldr r0, _0801E884 @ =gEffectBank\n\ + ldrb r3, [r0]\n\ + movs r0, 0x58\n\ + adds r2, r3, 0\n\ + muls r2, r0\n\ + adds r1, r2, r4\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xF\n\ + bne _0801E840\n\ + b _0801EA14\n\ +_0801E840:\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xF\n\ + bne _0801E84C\n\ + b _0801EA14\n\ +_0801E84C:\n\ + adds r0, r4, 0\n\ + adds r0, 0x4C\n\ + adds r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E85A\n\ + b _0801EA14\n\ +_0801E85A:\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, 0\n\ + bne _0801E862\n\ + b _0801EA14\n\ +_0801E862:\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x28\n\ + bne _0801E86E\n\ + b _0801EA14\n\ +_0801E86E:\n\ + adds r0, r3, 0\n\ + bl CancelMultiTurnMoves\n\ + movs r3, 0x1\n\ + mov r10, r3\n\ + b _0801EA14\n\ + .align 2, 0\n\ +_0801E87C: .4byte gBattleWeather\n\ +_0801E880: .4byte gBattleMons\n\ +_0801E884: .4byte gEffectBank\n\ +_0801E888:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + mov r2, r9\n\ + adds r0, r1, r2\n\ + adds r0, 0x20\n\ + ldrb r2, [r0]\n\ + cmp r2, 0x7\n\ + bne _0801E8D0\n\ + cmp r4, 0x1\n\ + beq _0801E8A6\n\ + cmp r5, 0x80\n\ + beq _0801E8A6\n\ + b _0801EA14\n\ +_0801E8A6:\n\ + ldr r0, _0801E8C4 @ =gLastUsedAbility\n\ + strb r2, [r0]\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r1, 0x7\n\ + bl RecordAbilityBattle\n\ + ldr r4, _0801E8C8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E8CC @ =BattleScript_PRLZPrevention\n\ + b _0801E664\n\ + .align 2, 0\n\ +_0801E8C4: .4byte gLastUsedAbility\n\ +_0801E8C8: .4byte gBattlescriptCurrInstr\n\ +_0801E8CC: .4byte BattleScript_PRLZPrevention\n\ +_0801E8D0:\n\ + mov r0, r9\n\ + adds r0, 0x4C\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E8DE\n\ + b _0801EA14\n\ +_0801E8DE:\n\ + movs r4, 0x1\n\ + mov r10, r4\n\ + b _0801EA14\n\ +_0801E8E4:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x11\n\ + bne _0801E952\n\ + cmp r4, 0x1\n\ + beq _0801E8FE\n\ + cmp r5, 0x80\n\ + bne _0801E952\n\ +_0801E8FE:\n\ + ldr r0, _0801E938 @ =gLastUsedAbility\n\ + strb r1, [r0]\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + movs r1, 0x11\n\ + bl RecordAbilityBattle\n\ + ldr r4, _0801E93C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E940 @ =BattleScript_PSNPrevention\n\ + str r0, [r4]\n\ + ldr r2, _0801E944 @ =gHitMarker\n\ + ldr r1, [r2]\n\ + movs r0, 0x80\n\ + lsls r0, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E94C\n\ +_0801E928:\n\ + movs r0, 0x1\n\ + strb r0, [r7, 0x5]\n\ + ldr r0, _0801E948 @ =0xffffdfff\n\ + ands r1, r0\n\ + str r1, [r2]\n\ + bl _0801F5FA\n\ + .align 2, 0\n\ +_0801E938: .4byte gLastUsedAbility\n\ +_0801E93C: .4byte gBattlescriptCurrInstr\n\ +_0801E940: .4byte BattleScript_PSNPrevention\n\ +_0801E944: .4byte gHitMarker\n\ +_0801E948: .4byte 0xffffdfff\n\ +_0801E94C:\n\ + strb r0, [r7, 0x5]\n\ + bl _0801F5FA\n\ +_0801E952:\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + movs r1, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r1, r0, 0\n\ + adds r1, 0x21\n\ + ldrb r1, [r1]\n\ + cmp r1, 0x3\n\ + beq _0801E976\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + beq _0801E976\n\ + cmp r1, 0x8\n\ + beq _0801E976\n\ + cmp r0, 0x8\n\ + bne _0801E9B4\n\ +_0801E976:\n\ + ldr r0, _0801E9A4 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E9B4\n\ + cmp r4, 0x1\n\ + beq _0801E98C\n\ + cmp r5, 0x80\n\ + bne _0801E9B4\n\ +_0801E98C:\n\ + ldr r4, _0801E9A8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E9AC @ =BattleScript_PSNPrevention\n\ +_0801E998:\n\ + str r0, [r4]\n\ + ldr r1, _0801E9B0 @ =gBattleCommunication\n\ + movs r0, 0x2\n\ + strb r0, [r1, 0x5]\n\ + bl _0801F5FA\n\ + .align 2, 0\n\ +_0801E9A4: .4byte gHitMarker\n\ +_0801E9A8: .4byte gBattlescriptCurrInstr\n\ +_0801E9AC: .4byte BattleScript_PSNPrevention\n\ +_0801E9B0: .4byte gBattleCommunication\n\ +_0801E9B4:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r6, 0x58\n\ + muls r0, r6\n\ + mov r2, r9\n\ + adds r2, 0x4C\n\ + adds r5, r0, r2\n\ + ldr r4, [r5]\n\ + cmp r4, 0\n\ + bne _0801EA14\n\ + mov r3, r9\n\ + adds r1, r0, r3\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r3, [r0]\n\ + cmp r3, 0x3\n\ + beq _0801EA0A\n\ + adds r0, 0x1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + beq _0801EA0A\n\ + cmp r3, 0x8\n\ + beq _0801EA0A\n\ + cmp r0, 0x8\n\ + beq _0801EA0A\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + beq _0801EA14\n\ + mov r4, r8\n\ + ldrb r0, [r4]\n\ + adds r1, r0, 0\n\ + muls r1, r6\n\ + adds r1, r2\n\ + ldr r0, [r1]\n\ + movs r2, 0x9\n\ + negs r2, r2\n\ + ands r0, r2\n\ + str r0, [r1]\n\ +_0801EA04:\n\ + movs r0, 0x1\n\ + mov r10, r0\n\ + b _0801EA14\n\ +_0801EA0A:\n\ + ldr r0, _0801EA58 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r2, 0x8\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_0801EA14:\n\ + mov r1, r10\n\ + cmp r1, 0x1\n\ + beq _0801EA1C\n\ + b _0801EB3C\n\ +_0801EA1C:\n\ + ldr r0, _0801EA5C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\ + ldr r0, _0801EA64 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r3, [r0]\n\ + cmp r3, 0x7\n\ + bne _0801EA70\n\ + bl Random\n\ + ldr r2, _0801EA68 @ =gBattleMons\n\ + ldr r1, _0801EA6C @ =gEffectBank\n\ + ldrb r3, [r1]\n\ + movs r1, 0x58\n\ + muls r3, r1\n\ + adds r2, 0x4C\n\ + adds r3, r2\n\ + movs r1, 0x3\n\ + ands r1, r0\n\ + adds r1, 0x2\n\ + ldr r0, [r3]\n\ + orrs r0, r1\n\ + str r0, [r3]\n\ + b _0801EA84\n\ + .align 2, 0\n\ +_0801EA58: .4byte gBattleMoveFlags\n\ +_0801EA5C: .4byte gBattlescriptCurrInstr\n\ +_0801EA60: .4byte gStatusFlagsForMoveEffects\n\ +_0801EA64: .4byte gBattleCommunication\n\ +_0801EA68: .4byte gBattleMons\n\ +_0801EA6C: .4byte gEffectBank\n\ +_0801EA70:\n\ + ldr r2, _0801EAD4 @ =gBattleMons\n\ + ldr r0, _0801EAD8 @ =gEffectBank\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + adds r2, 0x4C\n\ + adds r1, r2\n\ + ldr r0, [r1]\n\ + orrs r0, r3\n\ + str r0, [r1]\n\ +_0801EA84:\n\ + ldr r2, _0801EADC @ =gBattlescriptCurrInstr\n\ + ldr r1, _0801EAE0 @ =gMoveEffectBS_Ptrs\n\ + ldr r5, _0801EAE4 @ =gBattleCommunication\n\ + ldrb r0, [r5, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + str r0, [r2]\n\ + ldr r4, _0801EAE8 @ =gActiveBank\n\ + ldr r1, _0801EAD8 @ =gEffectBank\n\ + ldrb r0, [r1]\n\ + strb r0, [r4]\n\ + ldrb r1, [r1]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + ldr r1, _0801EAEC @ =gUnknown_02024ACC\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x28\n\ + movs r2, 0\n\ + movs r3, 0x4\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r2, _0801EAF0 @ =gHitMarker\n\ + ldr r1, [r2]\n\ + movs r0, 0x80\n\ + lsls r0, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801EAF8\n\ + movs r0, 0x1\n\ + strb r0, [r5, 0x5]\n\ + ldr r0, _0801EAF4 @ =0xffffdfff\n\ + ands r1, r0\n\ + str r1, [r2]\n\ + b _0801EAFA\n\ + .align 2, 0\n\ +_0801EAD4: .4byte gBattleMons\n\ +_0801EAD8: .4byte gEffectBank\n\ +_0801EADC: .4byte gBattlescriptCurrInstr\n\ +_0801EAE0: .4byte gMoveEffectBS_Ptrs\n\ +_0801EAE4: .4byte gBattleCommunication\n\ +_0801EAE8: .4byte gActiveBank\n\ +_0801EAEC: .4byte gUnknown_02024ACC\n\ +_0801EAF0: .4byte gHitMarker\n\ +_0801EAF4: .4byte 0xffffdfff\n\ +_0801EAF8:\n\ + strb r0, [r5, 0x5]\n\ +_0801EAFA:\n\ + ldr r0, _0801EB2C @ =gBattleCommunication\n\ + ldrb r2, [r0, 0x3]\n\ + adds r7, r0, 0\n\ + cmp r2, 0x2\n\ + beq _0801EB14\n\ + cmp r2, 0x6\n\ + beq _0801EB14\n\ + cmp r2, 0x5\n\ + beq _0801EB14\n\ + cmp r2, 0x3\n\ + beq _0801EB14\n\ + bl _0801F5FA\n\ +_0801EB14:\n\ + ldr r0, _0801EB30 @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + ldr r2, _0801EB34 @ =0x000160ca\n\ + adds r0, r2\n\ + strb r1, [r0]\n\ + ldr r2, _0801EB38 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 7\n\ + bl _0801F4F2\n\ + .align 2, 0\n\ +_0801EB2C: .4byte gBattleCommunication\n\ +_0801EB30: .4byte 0x02000000\n\ +_0801EB34: .4byte 0x000160ca\n\ +_0801EB38: .4byte gHitMarker\n\ +_0801EB3C:\n\ + mov r3, r10\n\ + cmp r3, 0\n\ + beq _0801EB46\n\ + bl _0801F5FA\n\ +_0801EB46:\n\ + bl _0801F5DC\n\ +_0801EB4A:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r1, r0\n\ + ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects\n\ + ldrb r3, [r7, 0x3]\n\ + lsls r0, r3, 2\n\ + adds r0, r2\n\ + ldr r1, [r1]\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _0801EB6E\n\ + bl _0801F5DC\n\ +_0801EB6E:\n\ + subs r0, r3, 0x7\n\ + cmp r0, 0x34\n\ + bls _0801EB78\n\ + bl _0801F5FA\n\ +_0801EB78:\n\ + lsls r0, 2\n\ + ldr r1, _0801EB88 @ =_0801EB8C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0801EB84: .4byte gStatusFlagsForMoveEffects\n\ +_0801EB88: .4byte _0801EB8C\n\ + .align 2, 0\n\ +_0801EB8C:\n\ + .4byte _0801EC60\n\ + .4byte _0801ECD4\n\ + .4byte _0801EE4C\n\ + .4byte _0801ED60\n\ + .4byte _0801EDDC\n\ + .4byte _0801EE84\n\ + .4byte _0801EECC\n\ + .4byte _0801EFA8\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F13C\n\ + .4byte _0801F184\n\ + .4byte _0801F1A4\n\ + .4byte _0801F364\n\ + .4byte _0801F3A0\n\ + .4byte _0801F3BC\n\ + .4byte _0801F3D4\n\ + .4byte _0801F3EC\n\ + .4byte _0801F44C\n\ + .4byte _0801F464\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F4A8\n\ + .4byte _0801F500\n\ + .4byte _0801F5FA\n\ + .4byte _0801F5FA\n\ + .4byte _0801F5FA\n\ + .4byte _0801F5FA\n\ + .4byte _0801F5EC\n\ +_0801EC60:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + movs r5, 0x58\n\ + adds r1, r0, 0\n\ + muls r1, r5\n\ + mov r2, r9\n\ + adds r0, r1, r2\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x14\n\ + bne _0801EC7A\n\ + bl _0801F5DC\n\ +_0801EC7A:\n\ + mov r4, r9\n\ + adds r4, 0x50\n\ + adds r0, r1, r4\n\ + ldr r0, [r0]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801EC8E\n\ + bl _0801F5DC\n\ +_0801EC8E:\n\ + bl Random\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + adds r2, r1, 0\n\ + muls r2, r5\n\ + adds r2, r4\n\ + lsls r0, 16\n\ + movs r1, 0xC0\n\ + lsls r1, 10\n\ + ands r1, r0\n\ + lsrs r1, 16\n\ + adds r1, 0x2\n\ + ldr r0, [r2]\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r4, _0801ECC8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801ECCC @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801ECD0 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + bl _0801F5F8\n\ + .align 2, 0\n\ +_0801ECC8: .4byte gBattlescriptCurrInstr\n\ +_0801ECCC: .4byte gMoveEffectBS_Ptrs\n\ +_0801ECD0: .4byte gBattleCommunication\n\ +_0801ECD4:\n\ + mov r0, r8\n\ + ldrb r2, [r0]\n\ + movs r6, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r6\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x27\n\ + bne _0801ED18\n\ + cmp r4, 0x1\n\ + beq _0801ECF4\n\ + cmp r5, 0x80\n\ + beq _0801ECF4\n\ + bl _0801F5DC\n\ +_0801ECF4:\n\ + ldr r0, _0801ED0C @ =gLastUsedAbility\n\ + strb r1, [r0]\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + movs r1, 0x27\n\ + bl RecordAbilityBattle\n\ + ldr r1, _0801ED10 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0801ED14 @ =BattleScript_FlinchPrevention\n\ + str r0, [r1]\n\ + bl _0801F5FA\n\ + .align 2, 0\n\ +_0801ED0C: .4byte gLastUsedAbility\n\ +_0801ED10: .4byte gBattlescriptCurrInstr\n\ +_0801ED14: .4byte BattleScript_FlinchPrevention\n\ +_0801ED18:\n\ + adds r0, r2, 0\n\ + bl BankGetTurnOrder\n\ + ldr r1, _0801ED54 @ =gCurrentMoveTurn\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bhi _0801ED2E\n\ + bl _0801F5DC\n\ +_0801ED2E:\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + adds r2, r0, 0\n\ + muls r2, r6\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects\n\ + ldr r0, _0801ED5C @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r1, [r2]\n\ + ldr r0, [r0]\n\ + orrs r1, r0\n\ + str r1, [r2]\n\ + bl _0801F5DC\n\ + .align 2, 0\n\ +_0801ED54: .4byte gCurrentMoveTurn\n\ +_0801ED58: .4byte gStatusFlagsForMoveEffects\n\ +_0801ED5C: .4byte gBattleCommunication\n\ +_0801ED60:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r5, 0x58\n\ + muls r0, r5\n\ + mov r4, r9\n\ + adds r4, 0x50\n\ + adds r2, r0, r4\n\ + ldr r1, [r2]\n\ + movs r0, 0x70\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801ED7C\n\ + bl _0801F5DC\n\ +_0801ED7C:\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + orrs r1, r0\n\ + str r1, [r2]\n\ + ldr r1, _0801EDC8 @ =gLockedMove\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldr r1, _0801EDCC @ =gCurrentMove\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ + bl Random\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + adds r2, r1, 0\n\ + muls r2, r5\n\ + adds r2, r4\n\ + movs r1, 0x3\n\ + ands r1, r0\n\ + adds r1, 0x2\n\ + lsls r1, 4\n\ + ldr r0, [r2]\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r4, _0801EDD0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EDD4 @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801EDD8 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + bl _0801F5F8\n\ + .align 2, 0\n\ +_0801EDC8: .4byte gLockedMove\n\ +_0801EDCC: .4byte gCurrentMove\n\ +_0801EDD0: .4byte gBattlescriptCurrInstr\n\ +_0801EDD4: .4byte gMoveEffectBS_Ptrs\n\ +_0801EDD8: .4byte gBattleCommunication\n\ +_0801EDDC:\n\ + ldr r5, _0801EE30 @ =gBankAttacker\n\ + ldrb r0, [r5]\n\ + bl GetBankIdentity\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _0801EE14\n\ + ldr r4, _0801EE34 @ =gPaydayMoney\n\ + ldrh r3, [r4]\n\ + ldr r2, _0801EE38 @ =gBattleMons\n\ + ldrb r1, [r5]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + adds r0, 0x2A\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + adds r0, r3, r0\n\ + strh r0, [r4]\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r3, r0\n\ + bls _0801EE14\n\ + ldr r3, _0801EE3C @ =0x0000ffff\n\ + adds r0, r3, 0\n\ + strh r0, [r4]\n\ +_0801EE14:\n\ + ldr r4, _0801EE40 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EE44 @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801EE48 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + bl _0801F5F8\n\ + .align 2, 0\n\ +_0801EE30: .4byte gBankAttacker\n\ +_0801EE34: .4byte gPaydayMoney\n\ +_0801EE38: .4byte gBattleMons\n\ +_0801EE3C: .4byte 0x0000ffff\n\ +_0801EE40: .4byte gBattlescriptCurrInstr\n\ +_0801EE44: .4byte gMoveEffectBS_Ptrs\n\ +_0801EE48: .4byte gBattleCommunication\n\ +_0801EE4C:\n\ + mov r4, r8\n\ + ldrb r1, [r4]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + mov r1, r9\n\ + adds r1, 0x4C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801EE62\n\ + b _0801F5DC\n\ +_0801EE62:\n\ + bl Random\n\ + ldr r4, _0801EE80 @ =gBattleCommunication\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x3\n\ + bl __umodsi3\n\ + adds r0, 0x3\n\ + strb r0, [r4, 0x3]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl SetMoveEffect\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801EE80: .4byte gBattleCommunication\n\ +_0801EE84:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 5\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r1, _0801EEC0 @ =gLockedMove\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldr r1, _0801EEC4 @ =gCurrentMove\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ + ldr r0, _0801EEC8 @ =gProtectStructs\n\ + ldrb r1, [r2]\n\ + lsls r1, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + movs r2, 0x4\n\ + orrs r0, r2\n\ + strb r0, [r1, 0x1]\n\ + b _0801F5DC\n\ + .align 2, 0\n\ +_0801EEC0: .4byte gLockedMove\n\ +_0801EEC4: .4byte gCurrentMove\n\ +_0801EEC8: .4byte gProtectStructs\n\ +_0801EECC:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r6, 0x58\n\ + muls r0, r6\n\ + mov r4, r9\n\ + adds r4, 0x50\n\ + adds r0, r4\n\ + ldr r5, [r0]\n\ + movs r0, 0xE0\n\ + lsls r0, 8\n\ + ands r5, r0\n\ + cmp r5, 0\n\ + beq _0801EEE8\n\ + b _0801F5DC\n\ +_0801EEE8:\n\ + bl Random\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + adds r2, r1, 0\n\ + muls r2, r6\n\ + adds r2, r4\n\ + movs r1, 0x3\n\ + ands r1, r0\n\ + adds r1, 0x3\n\ + lsls r1, 13\n\ + ldr r0, [r2]\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _0801EF80 @ =0x02000000\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + ldr r4, _0801EF84 @ =0x00016004\n\ + adds r0, r4\n\ + adds r0, r2\n\ + ldr r6, _0801EF88 @ =gCurrentMove\n\ + ldrh r1, [r6]\n\ + strb r1, [r0]\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + ldr r1, _0801EF8C @ =0x00016005\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrh r1, [r6]\n\ + lsrs r1, 8\n\ + strb r1, [r0]\n\ + ldrb r0, [r3]\n\ + ldr r3, _0801EF90 @ =0x00016020\n\ + adds r0, r3\n\ + adds r0, r2\n\ + ldr r1, _0801EF94 @ =gBankAttacker\n\ + ldrb r1, [r1]\n\ + strb r1, [r0]\n\ + ldr r4, _0801EF98 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EF9C @ =gMoveEffectBS_Ptrs\n\ + ldr r2, _0801EFA0 @ =gBattleCommunication\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + str r0, [r4]\n\ + strb r5, [r2, 0x5]\n\ + ldr r1, _0801EFA4 @ =gTrappingMoves\n\ + ldrh r0, [r1]\n\ + ldrh r4, [r6]\n\ + cmp r0, r4\n\ + bne _0801EF5C\n\ + b _0801F5FA\n\ +_0801EF5C:\n\ + adds r3, r1, 0\n\ + adds r1, r6, 0\n\ +_0801EF60:\n\ + ldrb r0, [r2, 0x5]\n\ + adds r0, 0x1\n\ + strb r0, [r2, 0x5]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x4\n\ + bls _0801EF70\n\ + b _0801F5FA\n\ +_0801EF70:\n\ + ldrb r0, [r2, 0x5]\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + ldrh r4, [r1]\n\ + cmp r0, r4\n\ + bne _0801EF60\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801EF80: .4byte 0x02000000\n\ +_0801EF84: .4byte 0x00016004\n\ +_0801EF88: .4byte gCurrentMove\n\ +_0801EF8C: .4byte 0x00016005\n\ +_0801EF90: .4byte 0x00016020\n\ +_0801EF94: .4byte gBankAttacker\n\ +_0801EF98: .4byte gBattlescriptCurrInstr\n\ +_0801EF9C: .4byte gMoveEffectBS_Ptrs\n\ +_0801EFA0: .4byte gBattleCommunication\n\ +_0801EFA4: .4byte gTrappingMoves\n\ +_0801EFA8:\n\ + ldr r1, _0801EFD8 @ =gBattleMoveDamage\n\ + ldr r0, _0801EFDC @ =gHP_dealt\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bge _0801EFB4\n\ + adds r0, 0x3\n\ +_0801EFB4:\n\ + asrs r0, 2\n\ + str r0, [r1]\n\ + cmp r0, 0\n\ + bne _0801EFC0\n\ + movs r0, 0x1\n\ + str r0, [r1]\n\ +_0801EFC0:\n\ + ldr r4, _0801EFE0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EFE4 @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801EFE8 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801EFD8: .4byte gBattleMoveDamage\n\ +_0801EFDC: .4byte gHP_dealt\n\ +_0801EFE0: .4byte gBattlescriptCurrInstr\n\ +_0801EFE4: .4byte gMoveEffectBS_Ptrs\n\ +_0801EFE8: .4byte gBattleCommunication\n\ +_0801EFEC:\n\ + ldrb r1, [r7, 0x3]\n\ + adds r1, 0xF2\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + movs r0, 0x10\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl ChangeStatBuffs\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0\n\ + beq _0801F008\n\ + b _0801F5DC\n\ +_0801F008:\n\ + ldr r2, _0801F02C @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + ldr r4, _0801F030 @ =0x000160a4\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + ldr r0, _0801F034 @ =0x000160a5\n\ + adds r2, r0\n\ + strb r3, [r2]\n\ + ldr r4, _0801F038 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F03C @ =BattleScript_StatUp\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F02C: .4byte 0x02000000\n\ +_0801F030: .4byte 0x000160a4\n\ +_0801F034: .4byte 0x000160a5\n\ +_0801F038: .4byte gBattlescriptCurrInstr\n\ +_0801F03C: .4byte BattleScript_StatUp\n\ +_0801F040:\n\ + movs r0, 0x70\n\ + negs r0, r0\n\ + ldrb r1, [r7, 0x3]\n\ + adds r1, 0xEB\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl ChangeStatBuffs\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0\n\ + beq _0801F05E\n\ + b _0801F5DC\n\ +_0801F05E:\n\ + ldr r2, _0801F080 @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + ldr r4, _0801F084 @ =0x000160a4\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + ldr r0, _0801F088 @ =0x000160a5\n\ + adds r2, r0\n\ + strb r3, [r2]\n\ + ldr r4, _0801F08C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F090 @ =BattleScript_StatDown\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F080: .4byte 0x02000000\n\ +_0801F084: .4byte 0x000160a4\n\ +_0801F088: .4byte 0x000160a5\n\ +_0801F08C: .4byte gBattlescriptCurrInstr\n\ +_0801F090: .4byte BattleScript_StatDown\n\ +_0801F094:\n\ + ldrb r1, [r7, 0x3]\n\ + adds r1, 0xDA\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + movs r0, 0x20\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl ChangeStatBuffs\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0\n\ + beq _0801F0B0\n\ + b _0801F5DC\n\ +_0801F0B0:\n\ + ldr r2, _0801F0D4 @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + ldr r4, _0801F0D8 @ =0x000160a4\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + ldr r0, _0801F0DC @ =0x000160a5\n\ + adds r2, r0\n\ + strb r3, [r2]\n\ + ldr r4, _0801F0E0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F0E4 @ =BattleScript_StatUp\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F0D4: .4byte 0x02000000\n\ +_0801F0D8: .4byte 0x000160a4\n\ +_0801F0DC: .4byte 0x000160a5\n\ +_0801F0E0: .4byte gBattlescriptCurrInstr\n\ +_0801F0E4: .4byte BattleScript_StatUp\n\ +_0801F0E8:\n\ + movs r0, 0x60\n\ + negs r0, r0\n\ + ldrb r1, [r7, 0x3]\n\ + adds r1, 0xD3\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl ChangeStatBuffs\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0\n\ + beq _0801F106\n\ + b _0801F5DC\n\ +_0801F106:\n\ + ldr r2, _0801F128 @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + ldr r4, _0801F12C @ =0x000160a4\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + ldr r0, _0801F130 @ =0x000160a5\n\ + adds r2, r0\n\ + strb r3, [r2]\n\ + ldr r4, _0801F134 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F138 @ =BattleScript_StatDown\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F128: .4byte 0x02000000\n\ +_0801F12C: .4byte 0x000160a4\n\ +_0801F130: .4byte 0x000160a5\n\ +_0801F134: .4byte gBattlescriptCurrInstr\n\ +_0801F138: .4byte BattleScript_StatDown\n\ +_0801F13C:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 15\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _0801F178 @ =gDisableStructs\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + lsls r0, r1, 3\n\ + subs r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + movs r1, 0x2\n\ + strb r1, [r0, 0x19]\n\ + ldr r1, _0801F17C @ =gLockedMove\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldr r1, _0801F180 @ =gCurrentMove\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ + b _0801F5DC\n\ + .align 2, 0\n\ +_0801F178: .4byte gDisableStructs\n\ +_0801F17C: .4byte gLockedMove\n\ +_0801F180: .4byte gCurrentMove\n\ +_0801F184:\n\ + ldr r0, _0801F1A0 @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 16\n\ +_0801F19A:\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + b _0801F5DC\n\ + .align 2, 0\n\ +_0801F1A0: .4byte gBankAttacker\n\ +_0801F1A4:\n\ + ldr r4, _0801F254 @ =gBankAttacker\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0801F1D8\n\ + ldr r0, _0801F258 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _0801F25C @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801F214\n\ + ldr r0, _0801F260 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + cmp r1, r0\n\ + beq _0801F1D8\n\ + b _0801F5DC\n\ +_0801F1D8:\n\ + ldr r0, _0801F258 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _0801F25C @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801F214\n\ + ldr r0, _0801F260 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + cmp r1, r0\n\ + beq _0801F214\n\ + ldr r0, _0801F264 @ =gWishFutureKnock\n\ + adds r0, 0x29\n\ + adds r0, r6, r0\n\ + ldrb r1, [r0]\n\ + ldr r3, _0801F268 @ =gBitTable\n\ + ldr r2, _0801F26C @ =gBattlePartyID\n\ + ldr r0, _0801F254 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _0801F214\n\ + b _0801F5DC\n\ +_0801F214:\n\ + ldr r2, _0801F270 @ =gBattleMons\n\ + ldr r1, _0801F274 @ =gBankTarget\n\ + ldrb r0, [r1]\n\ + movs r3, 0x58\n\ + muls r0, r3\n\ + adds r4, r0, r2\n\ + ldrh r0, [r4, 0x2E]\n\ + adds r7, r1, 0\n\ + mov r9, r2\n\ + cmp r0, 0\n\ + beq _0801F284\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3C\n\ + bne _0801F284\n\ + ldr r1, _0801F278 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0801F27C @ =BattleScript_NoItemSteal\n\ + str r0, [r1]\n\ + ldr r1, _0801F280 @ =gLastUsedAbility\n\ + ldrb r0, [r7]\n\ + muls r0, r3\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F254: .4byte gBankAttacker\n\ +_0801F258: .4byte gBattleTypeFlags\n\ +_0801F25C: .4byte 0x00000902\n\ +_0801F260: .4byte gTrainerBattleOpponent\n\ +_0801F264: .4byte gWishFutureKnock\n\ +_0801F268: .4byte gBitTable\n\ +_0801F26C: .4byte gBattlePartyID\n\ +_0801F270: .4byte gBattleMons\n\ +_0801F274: .4byte gBankTarget\n\ +_0801F278: .4byte gBattlescriptCurrInstr\n\ +_0801F27C: .4byte BattleScript_NoItemSteal\n\ +_0801F280: .4byte gLastUsedAbility\n\ +_0801F284:\n\ + ldr r4, _0801F340 @ =gBankAttacker\n\ + mov r10, r4\n\ + ldrb r1, [r4]\n\ + movs r0, 0x58\n\ + mov r8, r0\n\ + mov r0, r8\n\ + muls r0, r1\n\ + add r0, r9\n\ + ldrh r3, [r0, 0x2E]\n\ + cmp r3, 0\n\ + beq _0801F29C\n\ + b _0801F5DC\n\ +_0801F29C:\n\ + ldrb r0, [r7]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + add r0, r9\n\ + ldrh r2, [r0, 0x2E]\n\ + adds r0, r2, 0\n\ + cmp r0, 0xAF\n\ + bne _0801F2B0\n\ + b _0801F5DC\n\ +_0801F2B0:\n\ + cmp r0, 0\n\ + bne _0801F2B6\n\ + b _0801F5DC\n\ +_0801F2B6:\n\ + lsls r0, r1, 1\n\ + ldr r5, _0801F344 @ =0x020160f0\n\ + adds r0, r5\n\ + ldr r1, _0801F348 @ =gLastUsedItem\n\ + strh r2, [r0]\n\ + strh r2, [r1]\n\ + ldrb r0, [r7]\n\ + mov r4, r8\n\ + muls r4, r0\n\ + adds r0, r4, 0\n\ + add r0, r9\n\ + movs r6, 0\n\ + strh r3, [r0, 0x2E]\n\ + ldr r4, _0801F34C @ =gActiveBank\n\ + mov r2, r10\n\ + ldrb r0, [r2]\n\ + strb r0, [r4]\n\ + str r1, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl EmitSetAttributes\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + bl MarkBufferBankForExecution\n\ + ldrb r0, [r7]\n\ + strb r0, [r4]\n\ + ldrb r0, [r7]\n\ + mov r4, r8\n\ + muls r4, r0\n\ + adds r0, r4, 0\n\ + mov r1, r9\n\ + adds r1, 0x2E\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r7]\n\ + bl MarkBufferBankForExecution\n\ + ldr r4, _0801F350 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F354 @ =BattleScript_ItemSteal\n\ + str r0, [r4]\n\ + ldr r0, _0801F358 @ =0xfffe9f10\n\ + adds r5, r0\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + ldr r1, _0801F35C @ =0x000160e8\n\ + adds r0, r1\n\ + adds r0, r5\n\ + strb r6, [r0]\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + ldr r2, _0801F360 @ =0x000160e9\n\ + adds r0, r2\n\ + adds r0, r5\n\ + strb r6, [r0]\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F340: .4byte gBankAttacker\n\ +_0801F344: .4byte 0x020160f0\n\ +_0801F348: .4byte gLastUsedItem\n\ +_0801F34C: .4byte gActiveBank\n\ +_0801F350: .4byte gBattlescriptCurrInstr\n\ +_0801F354: .4byte BattleScript_ItemSteal\n\ +_0801F358: .4byte 0xfffe9f10\n\ +_0801F35C: .4byte 0x000160e8\n\ +_0801F360: .4byte 0x000160e9\n\ +_0801F364:\n\ + ldr r3, _0801F394 @ =gBankTarget\n\ + ldrb r1, [r3]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 19\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _0801F398 @ =gDisableStructs\n\ + ldrb r1, [r3]\n\ + lsls r0, r1, 3\n\ + subs r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldr r1, _0801F39C @ =gBankAttacker\n\ + ldrb r1, [r1]\n\ + strb r1, [r0, 0x14]\n\ + b _0801F5DC\n\ + .align 2, 0\n\ +_0801F394: .4byte gBankTarget\n\ +_0801F398: .4byte gDisableStructs\n\ +_0801F39C: .4byte gBankAttacker\n\ +_0801F3A0:\n\ + ldr r0, _0801F3B8 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 20\n\ + b _0801F19A\n\ + .align 2, 0\n\ +_0801F3B8: .4byte gBankTarget\n\ +_0801F3BC:\n\ + ldr r4, _0801F3CC @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F3D0 @ =gUnknown_081D9224\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F3CC: .4byte gBattlescriptCurrInstr\n\ +_0801F3D0: .4byte gUnknown_081D9224\n\ +_0801F3D4:\n\ + ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F3E8 @ =BattleScript_RapidSpinAway\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F3E4: .4byte gBattlescriptCurrInstr\n\ +_0801F3E8: .4byte BattleScript_RapidSpinAway\n\ +_0801F3EC:\n\ + ldr r6, _0801F43C @ =gBankTarget\n\ + ldrb r0, [r6]\n\ + movs r2, 0x58\n\ + muls r0, r2\n\ + mov r1, r9\n\ + adds r1, 0x4C\n\ + adds r5, r0, r1\n\ + ldr r4, [r5]\n\ + movs r0, 0x40\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + bne _0801F406\n\ + b _0801F5DC\n\ +_0801F406:\n\ + movs r0, 0x41\n\ + negs r0, r0\n\ + ands r4, r0\n\ + str r4, [r5]\n\ + ldr r4, _0801F440 @ =gActiveBank\n\ + ldrb r0, [r6]\n\ + strb r0, [r4]\n\ + ldrb r0, [r4]\n\ + muls r0, r2\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x28\n\ + movs r2, 0\n\ + movs r3, 0x4\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r4, _0801F444 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F448 @ =BattleScript_TargetPRLZHeal\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F43C: .4byte gBankTarget\n\ +_0801F440: .4byte gActiveBank\n\ +_0801F444: .4byte gBattlescriptCurrInstr\n\ +_0801F448: .4byte BattleScript_TargetPRLZHeal\n\ +_0801F44C:\n\ + ldr r4, _0801F45C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F460 @ =gUnknown_081D93FA\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F45C: .4byte gBattlescriptCurrInstr\n\ +_0801F460: .4byte gUnknown_081D93FA\n\ +_0801F464:\n\ + ldr r4, _0801F494 @ =gBattleMoveDamage\n\ + ldr r0, _0801F498 @ =gHP_dealt\n\ + ldr r0, [r0]\n\ + movs r1, 0x3\n\ + bl __divsi3\n\ + str r0, [r4]\n\ + cmp r0, 0\n\ + bne _0801F47A\n\ + movs r0, 0x1\n\ + str r0, [r4]\n\ +_0801F47A:\n\ + ldr r4, _0801F49C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801F4A0 @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801F4A4 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F494: .4byte gBattleMoveDamage\n\ +_0801F498: .4byte gHP_dealt\n\ +_0801F49C: .4byte gBattlescriptCurrInstr\n\ +_0801F4A0: .4byte gMoveEffectBS_Ptrs\n\ +_0801F4A4: .4byte gBattleCommunication\n\ +_0801F4A8:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r5, 0x58\n\ + muls r0, r5\n\ + mov r4, r9\n\ + adds r4, 0x50\n\ + adds r2, r0, r4\n\ + ldr r1, [r2]\n\ + movs r0, 0xC0\n\ + lsls r0, 4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801F4C4\n\ + b _0801F5DC\n\ +_0801F4C4:\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + orrs r1, r0\n\ + str r1, [r2]\n\ + ldr r1, _0801F4F8 @ =gLockedMove\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldr r1, _0801F4FC @ =gCurrentMove\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ + bl Random\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + adds r2, r1, 0\n\ + muls r2, r5\n\ + adds r2, r4\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + adds r1, 0x2\n\ + lsls r1, 10\n\ + ldr r0, [r2]\n\ +_0801F4F2:\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F4F8: .4byte gLockedMove\n\ +_0801F4FC: .4byte gCurrentMove\n\ +_0801F500:\n\ + mov r5, r8\n\ + ldrb r3, [r5]\n\ + movs r4, 0x58\n\ + adds r0, r3, 0\n\ + muls r0, r4\n\ + mov r2, r9\n\ + adds r1, r0, r2\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r2, [r0]\n\ + cmp r2, 0x3C\n\ + bne _0801F540\n\ + ldrh r0, [r1, 0x2E]\n\ + cmp r0, 0\n\ + beq _0801F5DC\n\ + ldr r0, _0801F534 @ =gLastUsedAbility\n\ + strb r2, [r0]\n\ + ldr r1, _0801F538 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0801F53C @ =BattleScript_NoItemSteal\n\ + str r0, [r1]\n\ + ldrb r0, [r5]\n\ + movs r1, 0x3C\n\ + bl RecordAbilityBattle\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F534: .4byte gLastUsedAbility\n\ +_0801F538: .4byte gBattlescriptCurrInstr\n\ +_0801F53C: .4byte BattleScript_NoItemSteal\n\ +_0801F540:\n\ + ldrh r0, [r1, 0x2E]\n\ + cmp r0, 0\n\ + beq _0801F5DC\n\ + adds r0, r3, 0\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldr r1, _0801F5B8 @ =gLastUsedItem\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + muls r0, r4\n\ + add r0, r9\n\ + ldrh r0, [r0, 0x2E]\n\ + strh r0, [r1]\n\ + ldrb r0, [r3]\n\ + muls r0, r4\n\ + add r0, r9\n\ + movs r5, 0\n\ + movs r1, 0\n\ + strh r1, [r0, 0x2E]\n\ + ldr r2, _0801F5BC @ =gWishFutureKnock\n\ + adds r2, 0x29\n\ + adds r2, r6, r2\n\ + ldr r3, _0801F5C0 @ =gBitTable\n\ + ldr r1, _0801F5C4 @ =gBattlePartyID\n\ + mov r4, r8\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r4, _0801F5C8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F5CC @ =BattleScript_KnockedOff\n\ + str r0, [r4]\n\ + ldr r1, _0801F5D0 @ =0x02000000\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + ldr r3, _0801F5D4 @ =0x000160e8\n\ + adds r0, r3\n\ + adds r0, r1\n\ + strb r5, [r0]\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + ldr r4, _0801F5D8 @ =0x000160e9\n\ + adds r0, r4\n\ + adds r0, r1\n\ + strb r5, [r0]\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F5B8: .4byte gLastUsedItem\n\ +_0801F5BC: .4byte gWishFutureKnock\n\ +_0801F5C0: .4byte gBitTable\n\ +_0801F5C4: .4byte gBattlePartyID\n\ +_0801F5C8: .4byte gBattlescriptCurrInstr\n\ +_0801F5CC: .4byte BattleScript_KnockedOff\n\ +_0801F5D0: .4byte 0x02000000\n\ +_0801F5D4: .4byte 0x000160e8\n\ +_0801F5D8: .4byte 0x000160e9\n\ +_0801F5DC:\n\ + ldr r1, _0801F5E8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x1\n\ + str r0, [r1]\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F5E8: .4byte gBattlescriptCurrInstr\n\ +_0801F5EC:\n\ + ldr r4, _0801F60C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F610 @ =gUnknown_081D94B0\n\ +_0801F5F8:\n\ + str r0, [r4]\n\ +_0801F5FA:\n\ + add sp, 0x8\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0801F60C: .4byte gBattlescriptCurrInstr\n\ +_0801F610: .4byte gUnknown_081D94B0\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +static void atk15_seteffectwithchancetarget(void) +{ + u32 PercentChance; + if (gBattleMons[gBankAttacker].ability == ABILITY_SERENE_GRACE) + PercentChance = gBattleMoves[gCurrentMove].secondaryEffectChance * 2; + else + PercentChance = gBattleMoves[gCurrentMove].secondaryEffectChance; + if (gBattleCommunication[MOVE_EFFECT_BYTE] & 0x80 && !(gBattleMoveFlags & MOVE_NO_EFFECT)) + { + gBattleCommunication[MOVE_EFFECT_BYTE] &= 0x7F; + SetMoveEffect(0, 0x80); + } + else if (Random() % 100 <= PercentChance && gBattleCommunication[MOVE_EFFECT_BYTE] && !(gBattleMoveFlags & MOVE_NO_EFFECT)) + { + if (PercentChance >= 100) + SetMoveEffect(0, 0x80); + else + SetMoveEffect(0, 0); + } + else + gBattlescriptCurrInstr++; + gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later +} + +static void atk16_seteffectprimary(void) +{ + SetMoveEffect(1, 0); +} + +static void atk17_seteffectsecondary(void) +{ + SetMoveEffect(0, 0); +} + +static void atk18_status_effect_clear(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) + gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + else + gBattleMons[gActiveBank].status2 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + + gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattlescriptCurrInstr += 2; + BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later +} + +//Fuck this, Maybe later +__attribute__((naked)) +static void atk19_faint_pokemon(void) +{ + asm(".syntax unified\n\ +push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + ldr r0, _0801F81C @ =gBattlescriptCurrInstr\n\ + ldr r2, [r0]\n\ + ldrb r1, [r2, 0x2]\n\ + adds r6, r0, 0\n\ + cmp r1, 0\n\ + beq _0801F834\n\ + ldrb r0, [r2, 0x1]\n\ + bl GetBattleBank\n\ + ldr r5, _0801F820 @ =gActiveBank\n\ + strb r0, [r5]\n\ + ldr r2, _0801F824 @ =gHitMarker\n\ + ldr r1, _0801F828 @ =gBitTable\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r2]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801F7E6\n\ + b _0801FB1C\n\ +_0801F7E6:\n\ + ldr r1, [r6]\n\ + ldrb r4, [r1, 0x3]\n\ + ldrb r0, [r1, 0x4]\n\ + lsls r0, 8\n\ + orrs r4, r0\n\ + ldrb r0, [r1, 0x5]\n\ + lsls r0, 16\n\ + orrs r4, r0\n\ + ldrb r0, [r1, 0x6]\n\ + lsls r0, 24\n\ + orrs r4, r0\n\ + bl b_movescr_stack_pop_cursor\n\ + str r4, [r6]\n\ + ldrb r0, [r5]\n\ + bl GetBankSide\n\ + ldr r1, _0801F82C @ =gSideAffecting\n\ + lsls r0, 24\n\ + lsrs r0, 23\n\ + adds r0, r1\n\ + ldrh r2, [r0]\n\ + ldr r1, _0801F830 @ =0x0000fdff\n\ + ands r1, r2\n\ + strh r1, [r0]\n\ + b _0801FB22\n\ + .align 2, 0\n\ +_0801F81C: .4byte gBattlescriptCurrInstr\n\ +_0801F820: .4byte gActiveBank\n\ +_0801F824: .4byte gHitMarker\n\ +_0801F828: .4byte gBitTable\n\ +_0801F82C: .4byte gSideAffecting\n\ +_0801F830: .4byte 0x0000fdff\n\ +_0801F834:\n\ + ldrb r0, [r2, 0x1]\n\ + cmp r0, 0x1\n\ + bne _0801F85C\n\ + ldr r1, _0801F84C @ =gActiveBank\n\ + ldr r0, _0801F850 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r0, _0801F854 @ =gBankTarget\n\ + ldrb r7, [r0]\n\ + ldr r4, _0801F858 @ =gUnknown_081D8C58\n\ + b _0801F86A\n\ + .align 2, 0\n\ +_0801F84C: .4byte gActiveBank\n\ +_0801F850: .4byte gBankAttacker\n\ +_0801F854: .4byte gBankTarget\n\ +_0801F858: .4byte gUnknown_081D8C58\n\ +_0801F85C:\n\ + ldr r1, _0801F954 @ =gActiveBank\n\ + ldr r0, _0801F958 @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r0, _0801F95C @ =gBankAttacker\n\ + ldrb r7, [r0]\n\ + ldr r4, _0801F960 @ =gUnknown_081D8C65\n\ +_0801F86A:\n\ + ldr r0, _0801F964 @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r0, _0801F968 @ =gBitTable\n\ + mov r12, r0\n\ + ldr r2, _0801F954 @ =gActiveBank\n\ + mov r8, r2\n\ + ldrb r2, [r2]\n\ + lsls r0, r2, 2\n\ + add r0, r12\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _0801F886\n\ + b _0801FB1C\n\ +_0801F886:\n\ + ldr r3, _0801F96C @ =gBattleMons\n\ + mov r10, r3\n\ + movs r5, 0x58\n\ + mov r9, r5\n\ + mov r0, r9\n\ + muls r0, r2\n\ + add r0, r10\n\ + ldrh r3, [r0, 0x28]\n\ + cmp r3, 0\n\ + beq _0801F89C\n\ + b _0801FB1C\n\ +_0801F89C:\n\ + ldr r2, _0801F970 @ =0x02000000\n\ + lsls r1, r7, 1\n\ + ldr r5, _0801F974 @ =0x000160ac\n\ + adds r0, r1, r5\n\ + adds r0, r2\n\ + strb r3, [r0]\n\ + ldr r0, _0801F978 @ =0x000160ad\n\ + adds r1, r0\n\ + adds r1, r2\n\ + strb r3, [r1]\n\ + lsls r1, r7, 2\n\ + adds r5, 0x54\n\ + adds r0, r1, r5\n\ + adds r0, r2\n\ + strb r3, [r0]\n\ + adds r5, 0x1\n\ + adds r0, r1, r5\n\ + adds r0, r2\n\ + strb r3, [r0]\n\ + adds r5, 0x1\n\ + adds r0, r1, r5\n\ + adds r0, r2\n\ + strb r3, [r0]\n\ + ldr r0, _0801F97C @ =0x00016103\n\ + adds r1, r0\n\ + adds r1, r2\n\ + strb r3, [r1]\n\ + ldr r5, _0801F980 @ =gHitMarker\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + lsls r0, 2\n\ + add r0, r12\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r5]\n\ + orrs r0, r1\n\ + str r0, [r5]\n\ + ldr r0, [r6]\n\ + adds r0, 0x7\n\ + bl b_movescr_stack_push\n\ + str r4, [r6]\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0801F9B0\n\ + ldr r0, [r5]\n\ + movs r1, 0x80\n\ + lsls r1, 15\n\ + orrs r0, r1\n\ + str r0, [r5]\n\ + ldr r1, _0801F984 @ =gBattleResults\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xFE\n\ + bhi _0801F914\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ +_0801F914:\n\ + mov r0, r9\n\ + muls r0, r7\n\ + add r0, r10\n\ + adds r3, r0, 0\n\ + adds r3, 0x2A\n\ + mov r4, r8\n\ + ldrb r2, [r4]\n\ + mov r0, r9\n\ + muls r0, r2\n\ + add r0, r10\n\ + adds r1, r0, 0\n\ + adds r1, 0x2A\n\ + ldrb r0, [r3]\n\ + ldrb r5, [r1]\n\ + cmp r0, r5\n\ + bls _0801F9CC\n\ + ldrb r1, [r1]\n\ + subs r0, r1\n\ + cmp r0, 0x1D\n\ + ble _0801F990\n\ + ldr r1, _0801F988 @ =gBattlePartyID\n\ + lsls r0, r2, 1\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _0801F98C @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x8\n\ + bl AdjustFriendship\n\ + b _0801F9CC\n\ + .align 2, 0\n\ +_0801F954: .4byte gActiveBank\n\ +_0801F958: .4byte gBankTarget\n\ +_0801F95C: .4byte gBankAttacker\n\ +_0801F960: .4byte gUnknown_081D8C65\n\ +_0801F964: .4byte gAbsentBankFlags\n\ +_0801F968: .4byte gBitTable\n\ +_0801F96C: .4byte gBattleMons\n\ +_0801F970: .4byte 0x02000000\n\ +_0801F974: .4byte 0x000160ac\n\ +_0801F978: .4byte 0x000160ad\n\ +_0801F97C: .4byte 0x00016103\n\ +_0801F980: .4byte gHitMarker\n\ +_0801F984: .4byte gBattleResults\n\ +_0801F988: .4byte gBattlePartyID\n\ +_0801F98C: .4byte gPlayerParty\n\ +_0801F990:\n\ + ldr r1, _0801F9A8 @ =gBattlePartyID\n\ + lsls r0, r2, 1\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _0801F9AC @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x6\n\ + bl AdjustFriendship\n\ + b _0801F9CC\n\ + .align 2, 0\n\ +_0801F9A8: .4byte gBattlePartyID\n\ +_0801F9AC: .4byte gPlayerParty\n\ +_0801F9B0:\n\ + ldr r1, _0801FAE0 @ =gBattleResults\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0xFE\n\ + bhi _0801F9BC\n\ + adds r0, 0x1\n\ + strb r0, [r1, 0x1]\n\ +_0801F9BC:\n\ + ldr r2, _0801FAE4 @ =gActiveBank\n\ + ldrb r0, [r2]\n\ + mov r3, r9\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + add r0, r10\n\ + ldrh r0, [r0]\n\ + strh r0, [r1, 0x20]\n\ +_0801F9CC:\n\ + ldr r0, _0801FAE8 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801FA02\n\ + ldr r6, _0801FAEC @ =gBattleMons\n\ + ldr r0, _0801FAF0 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + movs r5, 0x58\n\ + muls r0, r5\n\ + adds r0, r6\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + beq _0801FA02\n\ + ldr r4, _0801FAF4 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801FAF8 @ =gBattleMoveDamage\n\ + adds r0, r7, 0\n\ + muls r0, r5\n\ + adds r0, r6\n\ + ldrh r0, [r0, 0x28]\n\ + str r0, [r1]\n\ + ldr r0, _0801FAFC @ =gUnknown_081D9156\n\ + str r0, [r4]\n\ +_0801FA02:\n\ + ldr r1, _0801FB00 @ =gStatuses3\n\ + ldr r6, _0801FB04 @ =gBankTarget\n\ + ldrb r0, [r6]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801FA1A\n\ + b _0801FB22\n\ +_0801FA1A:\n\ + ldr r0, _0801FAE8 @ =gHitMarker\n\ + ldr r5, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 17\n\ + ands r5, r0\n\ + cmp r5, 0\n\ + bne _0801FB22\n\ + ldr r4, _0801FAF0 @ =gBankAttacker\n\ + mov r8, r4\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + adds r4, r0, 0\n\ + ldrb r0, [r6]\n\ + bl GetBankSide\n\ + lsls r4, 24\n\ + lsls r0, 24\n\ + cmp r4, r0\n\ + beq _0801FB22\n\ + ldr r0, _0801FAEC @ =gBattleMons\n\ + mov r9, r0\n\ + mov r1, r8\n\ + ldrb r2, [r1]\n\ + movs r7, 0x58\n\ + adds r3, r2, 0\n\ + muls r3, r7\n\ + adds r0, r3, r0\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + beq _0801FB22\n\ + ldr r0, _0801FB08 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + cmp r0, 0xA5\n\ + beq _0801FB22\n\ + ldr r1, _0801FB0C @ =0x02000000\n\ + ldr r4, _0801FB10 @ =0x0001608c\n\ + adds r0, r2, r4\n\ + adds r0, r1\n\ + ldrb r4, [r0]\n\ + adds r0, r4, r3\n\ + mov r6, r9\n\ + adds r6, 0x24\n\ + adds r0, r6\n\ + strb r5, [r0]\n\ + ldr r5, _0801FAF4 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r5]\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801FB14 @ =gUnknown_081D9468\n\ + str r0, [r5]\n\ + ldr r5, _0801FAE4 @ =gActiveBank\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + strb r0, [r5]\n\ + adds r1, r4, 0\n\ + adds r1, 0x9\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + ldrb r0, [r5]\n\ + muls r0, r7\n\ + adds r0, r6\n\ + adds r0, r4\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r2, 0\n\ + movs r3, 0x1\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r5]\n\ + bl MarkBufferBankForExecution\n\ + ldr r1, _0801FB18 @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x2\n\ + strb r0, [r1, 0x1]\n\ + lsls r4, 1\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + muls r0, r7\n\ + adds r0, r4, r0\n\ + mov r2, r9\n\ + adds r2, 0xC\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + strb r0, [r1, 0x2]\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + muls r0, r7\n\ + adds r4, r0\n\ + adds r4, r2\n\ + ldrh r0, [r4]\n\ + lsrs r0, 8\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + b _0801FB22\n\ + .align 2, 0\n\ +_0801FAE0: .4byte gBattleResults\n\ +_0801FAE4: .4byte gActiveBank\n\ +_0801FAE8: .4byte gHitMarker\n\ +_0801FAEC: .4byte gBattleMons\n\ +_0801FAF0: .4byte gBankAttacker\n\ +_0801FAF4: .4byte gBattlescriptCurrInstr\n\ +_0801FAF8: .4byte gBattleMoveDamage\n\ +_0801FAFC: .4byte gUnknown_081D9156\n\ +_0801FB00: .4byte gStatuses3\n\ +_0801FB04: .4byte gBankTarget\n\ +_0801FB08: .4byte gCurrentMove\n\ +_0801FB0C: .4byte 0x02000000\n\ +_0801FB10: .4byte 0x0001608c\n\ +_0801FB14: .4byte gUnknown_081D9468\n\ +_0801FB18: .4byte gBattleTextBuff1\n\ +_0801FB1C:\n\ + ldr r0, [r6]\n\ + adds r0, 0x7\n\ + str r0, [r6]\n\ +_0801FB22:\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +static void atk1A_faint_animation(void) +{ + if (gBattleExecBuffer) {return;} + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitFaintAnimation(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk1B_faint_effects_clear(void) +{ + //Clears things like attraction or trapping to other banks + if (gBattleExecBuffer) {return;} + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gBattleMons[gActiveBank].status1 = 0; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + UndoEffectsAfterFainting(); + gBattlescriptCurrInstr += 2; +} + +static void atk1C_jumpifstatus(void) +{ + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); + void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + if (gBattleMons[bank].status1 & flags && gBattleMons[bank].hp) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 10; +} + +static void atk1D_jumpifstatus2(void) +{ + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); + void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + if (gBattleMons[bank].status2 & flags && gBattleMons[bank].hp) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 10; +} + +static void atk1E_jumpifability(void) +{ + u8 bank; + u8 ability = BSScriptRead8(gBattlescriptCurrInstr + 2); + void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 8) + { + bank = AbilityBattleEffects(ABILITY_CHECK_BANK_SIDE, gBankAttacker, ability, 0, 0); + if (bank) + { + gLastUsedAbility = ability; + gBattlescriptCurrInstr = jump_loc; + RecordAbilityBattle(bank -1, gLastUsedAbility); + unk_2000000[0x160f8] = bank - 1; + } + else + gBattlescriptCurrInstr += 7; + } + else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 9) + { + bank = AbilityBattleEffects(ABILITY_CHECK_OTHER_SIDE, gBankAttacker, ability, 0, 0); + if (bank) + { + gLastUsedAbility = ability; + gBattlescriptCurrInstr = jump_loc; + RecordAbilityBattle(bank - 1, gLastUsedAbility); + unk_2000000[0x160f8] = bank - 1; + } + else + gBattlescriptCurrInstr += 7; + } + else + { + bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleMons[bank].ability == ability) + { + gLastUsedAbility = ability; + gBattlescriptCurrInstr = jump_loc; + RecordAbilityBattle(bank, gLastUsedAbility); + unk_2000000[0x160f8] = bank; + } + else + gBattlescriptCurrInstr += 7; + } +} + +static void atk1F_jumpifsideaffecting(void) +{ + u8 side; + u16 flags; + void* jump_loc; + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1) + side = GetBankIdentity(gBankAttacker) & 1; + else + side = GetBankIdentity(gBankTarget) & 1; + + flags = BS2ScriptRead16(gBattlescriptCurrInstr + 2); + jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 4); + + if (gSideAffecting[side] & flags) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 8; +} + +static void atk20_jumpifstat(void) +{ + u8 ret = 0; + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + u8 value = gBattleMons[bank].statStages[BSScriptRead8(gBattlescriptCurrInstr + 3)]; + switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) + { + case CMP_EQUAL: + if (value == BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_NOT_EQUAL: + if (value != BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_GREATER_THAN: + if (value > BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_LESS_THAN: + if (value < BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_COMMON_BITS: + if (value & BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_NO_COMMON_BITS: + if (!(value & BSScriptRead8(gBattlescriptCurrInstr + 4))) + ret++; + break; + } + if (ret) + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + else + gBattlescriptCurrInstr += 9; +} + +static void atk21_jumpifstatus3(void) +{ + u32 flags; + void* jump_loc; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); + jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); + if (BSScriptRead8(gBattlescriptCurrInstr + 6)) + { + if ((gStatuses3[gActiveBank] & flags) != 0) + gBattlescriptCurrInstr += 11; + else + gBattlescriptCurrInstr = jump_loc; + } + else + { + if ((gStatuses3[gActiveBank] & flags) != 0) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 11; + } +} + +static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr +{ + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + u8 type = BSScriptRead8(gBattlescriptCurrInstr + 2); + void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); + + if (gBattleMons[bank].type1 == type || gBattleMons[bank].type2 == type) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 7; +} + +//here we go again... +#ifdef NONMATCHING +static void atk23_getexp(void) +{ + u8 hold_effect; + int via_expshare = 0, sent_in; + u16* exp = &BATTLE_STRUCT->exp; + gBank1 = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + sent_in = gSentPokesToOpponent[(gBank1 & 2) >> 1]; + switch (BATTLE_STRUCT->atk23StateTracker) + { + case 0: //check if should receive exp at all + if (GetBankSide(gBank1) != 1 || (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) + BATTLE_STRUCT->atk23StateTracker = 6; //goto last case + else + { + BATTLE_STRUCT->atk23StateTracker++; + unk_2000000[0x16113] |= gBitTable[gBattlePartyID[gBank1]]; + } + break; + case 1: //calculate experience points to redistribute + { + int via_sent_in = 0, i; + u16 calculatedExp; + for (i = 0; i < 6; i++) + { + u16 item; + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + continue; + if (gBitTable[i] & sent_in) + via_sent_in++; + + item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + if (item == ITEM_ENIGMA_BERRY) + hold_effect = gSaveBlock1.enigmaBerry.holdEffect; + else + hold_effect = ItemId_GetHoldEffect(item); + + if (hold_effect == HOLD_EFFECT_EXP_SHARE) + via_expshare++; + } + calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7; + if (via_expshare) //at least one poke is getting exp via exp share + { + calculatedExp /= 2; + *exp = calculatedExp / via_sent_in; + ATLEAST_ONE_PTR(exp); + + gExpShareExp = calculatedExp / via_expshare; + ATLEAST_ONE_PTR(&gExpShareExp); + } + else + { + *exp = calculatedExp / via_sent_in; + ATLEAST_ONE_PTR(exp); + gExpShareExp = 0; + } + BATTLE_STRUCT->atk23StateTracker++; + BATTLE_STRUCT->expGetterID = 0; + BATTLE_STRUCT->sentInPokes = sent_in; + } //no break statement + case 2: //loop; set exp value to the poke in expgetter_id and print message + if (gBattleExecBuffer == 0) + { + u16 item = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HELD_ITEM); + u8* tracker; u32 zero; + if (item == ITEM_ENIGMA_BERRY) + hold_effect = gSaveBlock1.enigmaBerry.holdEffect; + else + hold_effect = ItemId_GetHoldEffect(item); + + if ((hold_effect != HOLD_EFFECT_EXP_SHARE && !(BATTLE_STRUCT->sentInPokes & 1))) + { + BATTLE_STRUCT->sentInPokes >>= 1; + tracker = &BATTLE_STRUCT->atk23StateTracker; + zero = 0; + goto LABEL; + } + else if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) == 100) + { + + BATTLE_STRUCT->sentInPokes >>= 1; + tracker = &BATTLE_STRUCT->atk23StateTracker; + zero = 0; + LABEL: + *tracker = 5; //increment looper + gBattleMoveDamage = zero; //used for exp + } + else + { + //music change in wild battle after fainting a poke + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !BATTLE_STRUCT->wildVictorySong) + { + BattleMusicStop(); + PlayBGM(0x161); + BATTLE_STRUCT->wildVictorySong++; + } + + if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP)) + { + s16 stringID; + if (BATTLE_STRUCT->sentInPokes & 1) + gBattleMoveDamage = *exp; + else + gBattleMoveDamage = 0; + + if (hold_effect == HOLD_EFFECT_EXP_SHARE) + gBattleMoveDamage += gExpShareExp; + if (hold_effect == HOLD_EFFECT_LUCKY_EGG) + gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; + + if (IsTradedMon(&gPlayerParty[BATTLE_STRUCT->expGetterID])) + { + gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; + stringID = 0x14A; + } + else + stringID = 0x149; + + //get exp getter bank + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (!(gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) && !(gAbsentBankFlags & gBitTable[2])) + BATTLE_STRUCT->expGetterBank = 2; + else + { + if (!(gAbsentBankFlags & gBitTable[0])) + BATTLE_STRUCT->expGetterBank = 0; + else + BATTLE_STRUCT->expGetterBank = 2; + } + } + else + BATTLE_STRUCT->expGetterBank = 0; + + //buffer poke name + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = BATTLE_STRUCT->expGetterBank; + gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; + gBattleTextBuff1[4] = 0xFF; + + //buffer 'gained' or 'gained a boosted' + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 0; + gBattleTextBuff2[2] = sBYTE0_32(stringID); + gBattleTextBuff2[3] = sBYTE1_32(stringID); + gBattleTextBuff2[4] = 0xFF; + + //buffer exp number + gBattleTextBuff3[0] = 0xFD; + gBattleTextBuff3[1] = 1; + gBattleTextBuff3[2] = 4; //word + gBattleTextBuff3[3] = 5; //max digits + gBattleTextBuff3[4] = gBattleMoveDamage; + gBattleTextBuff3[5] = sBYTE1_32(gBattleMoveDamage); + gBattleTextBuff3[6] = sBYTE2_32(gBattleMoveDamage); + gBattleTextBuff3[7] = sBYTE3_32(gBattleMoveDamage); + gBattleTextBuff3[8] = 0xFF; + + PrepareStringBattle(0xD, BATTLE_STRUCT->expGetterBank); + MonGainEVs(&gPlayerParty[BATTLE_STRUCT->expGetterID], gBattleMons[gBank1].species); + } + BATTLE_STRUCT->sentInPokes >>= 1; + BATTLE_STRUCT->atk23StateTracker++; + } + } + break; + case 3: //Set Stats and give exp + if (gBattleExecBuffer == 0) + { + gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0; + if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100) + { + BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); //doesnt match + BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); + BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); + BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); + BATTLE_STRUCT->beforeLvlUp[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); + BATTLE_STRUCT->beforeLvlUp[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); + + gActiveBank = BATTLE_STRUCT->expGetterBank; + EmitExpBarUpdate(0, BATTLE_STRUCT->expGetterID, gBattleMoveDamage); + MarkBufferBankForExecution(gActiveBank); + } + BATTLE_STRUCT->atk23StateTracker++; + } + break; + case 4: //lvl up if necessary + if (gBattleExecBuffer == 0) + { + gActiveBank = BATTLE_STRUCT->expGetterBank; + if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID) + sub_80324F8(&gPlayerParty[gActiveBank], gActiveBank); + + //buff poke name + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = gActiveBank; + gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; + gBattleTextBuff1[4] = 0xFF; + + //buff level + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 1; + gBattleTextBuff2[2] = 1; + gBattleTextBuff2[3] = 3; + gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); + gBattleTextBuff2[5] = 0xFF; + + b_movescr_stack_push_cursor(); + gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID]; + gBattlescriptCurrInstr = BattleScript_LevelUp; + gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8)); + AdjustFriendship(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); + + //update battle mon structure after level up + if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && gBattleMons[0].hp) + { + gBattleMons[0].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); + gBattleMons[0].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); + gBattleMons[0].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); + gBattleMons[0].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); + gBattleMons[0].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); + gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); + gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); + gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); + } + //What is else if? Guess it's too advanced for GameFreak + if (gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gBattleMons[2].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); + gBattleMons[2].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); + gBattleMons[2].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); + gBattleMons[2].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); + gBattleMons[2].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); + //There are no words...GF can't even copy&paste code properly + gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); + gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD /*RIP*/); + gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); + } + BATTLE_STRUCT->atk23StateTracker = 5; + } + else + { + gBattleMoveDamage = 0; + BATTLE_STRUCT->atk23StateTracker = 5; + } + } + break; + case 5: //looper increment + if (gBattleMoveDamage) //there is exp to give, goto case 3 that gives exp + BATTLE_STRUCT->atk23StateTracker = 3; + else + { + if (++BATTLE_STRUCT->expGetterID <= 5) + BATTLE_STRUCT->atk23StateTracker = 2; //loop again + else + BATTLE_STRUCT->atk23StateTracker = 6; //we're done + } + break; + case 6: //increment instruction + if (gBattleExecBuffer == 0) + { + //not even sure why gamefreak clears that data in this place + gBattleMons[gBank1].item = 0; + gBattleMons[gBank1].ability = 0; + gBattlescriptCurrInstr += 2; + } + break; + } +} +#else +__attribute__((naked)) +static void atk23_getexp(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + movs r6, 0\n\ + ldr r0, _0802004C @ =0x0201605c\n\ + mov r10, r0\n\ + ldr r0, _08020050 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x1]\n\ + bl GetBattleBank\n\ + ldr r1, _08020054 @ =gBank1\n\ + strb r0, [r1]\n\ + ldr r2, _08020058 @ =gSentPokesToOpponent\n\ + movs r1, 0x2\n\ + ands r1, r0\n\ + lsls r1, 24\n\ + lsrs r1, 25\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + mov r8, r1\n\ + mov r0, r10\n\ + subs r0, 0x4D\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x6\n\ + bls _08020040\n\ + bl _08020996\n\ +_08020040:\n\ + lsls r0, 2\n\ + ldr r1, _0802005C @ =_08020060\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0802004C: .4byte 0x0201605c\n\ +_08020050: .4byte gBattlescriptCurrInstr\n\ +_08020054: .4byte gBank1\n\ +_08020058: .4byte gSentPokesToOpponent\n\ +_0802005C: .4byte _08020060\n\ + .align 2, 0\n\ +_08020060:\n\ + .4byte _0802007C\n\ + .4byte _080200FC\n\ + .4byte _08020216\n\ + .4byte _0802055C\n\ + .4byte _08020648\n\ + .4byte _08020910\n\ + .4byte _0802096C\n\ +_0802007C:\n\ + ldr r4, _080200A8 @ =gBank1\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _08020098\n\ + ldr r0, _080200AC @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _080200B0 @ =0x00000982\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080200BC\n\ +_08020098:\n\ + ldr r0, _080200B4 @ =0x02000000\n\ + ldr r1, _080200B8 @ =0x0001600f\n\ + adds r0, r1\n\ + movs r1, 0x6\n\ + strb r1, [r0]\n\ + bl _08020996\n\ + .align 2, 0\n\ +_080200A8: .4byte gBank1\n\ +_080200AC: .4byte gBattleTypeFlags\n\ +_080200B0: .4byte 0x00000982\n\ +_080200B4: .4byte 0x02000000\n\ +_080200B8: .4byte 0x0001600f\n\ +_080200BC:\n\ + ldr r2, _080200E8 @ =0x02000000\n\ + ldr r3, _080200EC @ =0x0001600f\n\ + adds r1, r2, r3\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + ldr r0, _080200F0 @ =0x00016113\n\ + adds r2, r0\n\ + ldr r3, _080200F4 @ =gBitTable\n\ + ldr r1, _080200F8 @ =gBattlePartyID\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + bl _08020996\n\ + .align 2, 0\n\ +_080200E8: .4byte 0x02000000\n\ +_080200EC: .4byte 0x0001600f\n\ +_080200F0: .4byte 0x00016113\n\ +_080200F4: .4byte gBitTable\n\ +_080200F8: .4byte gBattlePartyID\n\ +_080200FC:\n\ + movs r5, 0\n\ + movs r7, 0\n\ + ldr r1, _08020150 @ =gSaveBlock1 + 0x3688\n\ + mov r9, r1\n\ +_08020104:\n\ + movs r0, 0x64\n\ + adds r1, r7, 0\n\ + muls r1, r0\n\ + ldr r0, _08020154 @ =gPlayerParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0802016A\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0802016A\n\ + ldr r0, _08020158 @ =gBitTable\n\ + lsls r1, r7, 2\n\ + adds r1, r0\n\ + ldr r0, [r1]\n\ + mov r2, r8\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08020138\n\ + adds r5, 0x1\n\ +_08020138:\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xAF\n\ + bne _0802015C\n\ + mov r3, r9\n\ + ldrb r4, [r3]\n\ + b _08020164\n\ + .align 2, 0\n\ +_08020150: .4byte gSaveBlock1 + 0x3688\n\ +_08020154: .4byte gPlayerParty\n\ +_08020158: .4byte gBitTable\n\ +_0802015C:\n\ + bl ItemId_GetHoldEffect\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_08020164:\n\ + cmp r4, 0x19\n\ + bne _0802016A\n\ + adds r6, 0x1\n\ +_0802016A:\n\ + adds r7, 0x1\n\ + cmp r7, 0x5\n\ + ble _08020104\n\ + ldr r3, _080201D0 @ =gBaseStats\n\ + ldr r2, _080201D4 @ =gBattleMons\n\ + ldr r0, _080201D8 @ =gBank1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + adds r1, r2\n\ + ldrh r2, [r1]\n\ + lsls r0, r2, 3\n\ + subs r0, r2\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldrb r2, [r0, 0x9]\n\ + adds r1, 0x2A\n\ + ldrb r0, [r1]\n\ + muls r0, r2\n\ + movs r1, 0x7\n\ + bl __divsi3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r6, 0\n\ + beq _080201E0\n\ + lsrs r4, r0, 17\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl __divsi3\n\ + mov r1, r10\n\ + strh r0, [r1]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bne _080201B6\n\ + movs r0, 0x1\n\ + strh r0, [r1]\n\ +_080201B6:\n\ + ldr r5, _080201DC @ =gExpShareExp\n\ + adds r0, r4, 0\n\ + adds r1, r6, 0\n\ + bl __divsi3\n\ + strh r0, [r5]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bne _080201FA\n\ + movs r0, 0x1\n\ + strh r0, [r5]\n\ + b _080201FA\n\ + .align 2, 0\n\ +_080201D0: .4byte gBaseStats\n\ +_080201D4: .4byte gBattleMons\n\ +_080201D8: .4byte gBank1\n\ +_080201DC: .4byte gExpShareExp\n\ +_080201E0:\n\ + adds r0, r1, 0\n\ + adds r1, r5, 0\n\ + bl __divsi3\n\ + mov r2, r10\n\ + strh r0, [r2]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bne _080201F6\n\ + movs r0, 0x1\n\ + strh r0, [r2]\n\ +_080201F6:\n\ + ldr r0, _08020248 @ =gExpShareExp\n\ + strh r6, [r0]\n\ +_080201FA:\n\ + ldr r1, _0802024C @ =0x02000000\n\ + ldr r3, _08020250 @ =0x0001600f\n\ + adds r2, r1, r3\n\ + ldrb r0, [r2]\n\ + adds r0, 0x1\n\ + movs r3, 0\n\ + strb r0, [r2]\n\ + ldr r2, _08020254 @ =0x00016018\n\ + adds r0, r1, r2\n\ + strb r3, [r0]\n\ + ldr r3, _08020258 @ =0x0001605f\n\ + adds r1, r3\n\ + mov r0, r8\n\ + strb r0, [r1]\n\ +_08020216:\n\ + ldr r0, _0802025C @ =gBattleExecBuffer\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _08020220\n\ + b _08020996\n\ +_08020220:\n\ + ldr r0, _0802024C @ =0x02000000\n\ + ldr r1, _08020254 @ =0x00016018\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08020260 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xAF\n\ + bne _0802026C\n\ + ldr r0, _08020264 @ =gSaveBlock1\n\ + ldr r2, _08020268 @ =0x00003688\n\ + adds r0, r2\n\ + ldrb r4, [r0]\n\ + b _08020274\n\ + .align 2, 0\n\ +_08020248: .4byte gExpShareExp\n\ +_0802024C: .4byte 0x02000000\n\ +_08020250: .4byte 0x0001600f\n\ +_08020254: .4byte 0x00016018\n\ +_08020258: .4byte 0x0001605f\n\ +_0802025C: .4byte gBattleExecBuffer\n\ +_08020260: .4byte gPlayerParty\n\ +_08020264: .4byte gSaveBlock1\n\ +_08020268: .4byte 0x00003688\n\ +_0802026C:\n\ + bl ItemId_GetHoldEffect\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_08020274:\n\ + ldr r5, _08020294 @ =0x02000000\n\ + cmp r4, 0x19\n\ + beq _080202A0\n\ + ldr r3, _08020298 @ =0x0001605f\n\ + adds r1, r5, r3\n\ + ldrb r0, [r1]\n\ + movs r2, 0x1\n\ + ands r2, r0\n\ + cmp r2, 0\n\ + bne _080202A0\n\ + lsrs r0, 1\n\ + strb r0, [r1]\n\ + ldr r0, _0802029C @ =0x0001600f\n\ + adds r1, r5, r0\n\ + b _080202C8\n\ + .align 2, 0\n\ +_08020294: .4byte 0x02000000\n\ +_08020298: .4byte 0x0001605f\n\ +_0802029C: .4byte 0x0001600f\n\ +_080202A0:\n\ + ldr r1, _080202D4 @ =0x00016018\n\ + adds r0, r5, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _080202D8 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + cmp r0, 0x64\n\ + bne _080202E8\n\ + ldr r2, _080202DC @ =0x0001605f\n\ + adds r1, r5, r2\n\ + ldrb r0, [r1]\n\ + lsrs r0, 1\n\ + movs r2, 0\n\ + strb r0, [r1]\n\ + ldr r3, _080202E0 @ =0x0001600f\n\ + adds r1, r5, r3\n\ +_080202C8:\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r0, _080202E4 @ =gBattleMoveDamage\n\ + str r2, [r0]\n\ + b _08020996\n\ + .align 2, 0\n\ +_080202D4: .4byte 0x00016018\n\ +_080202D8: .4byte gPlayerParty\n\ +_080202DC: .4byte 0x0001605f\n\ +_080202E0: .4byte 0x0001600f\n\ +_080202E4: .4byte gBattleMoveDamage\n\ +_080202E8:\n\ + ldr r0, _0802034C @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08020316\n\ + ldr r0, _08020350 @ =gBattleMons\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + beq _08020316\n\ + ldr r0, _08020354 @ =0x0001601b\n\ + adds r5, r0\n\ + ldrb r0, [r5]\n\ + cmp r0, 0\n\ + bne _08020316\n\ + bl BattleMusicStop\n\ + ldr r0, _08020358 @ =0x00000161\n\ + bl PlayBGM\n\ + ldrb r0, [r5]\n\ + adds r0, 0x1\n\ + strb r0, [r5]\n\ +_08020316:\n\ + ldr r5, _0802035C @ =0x02000000\n\ + ldr r1, _08020360 @ =0x00016018\n\ + adds r0, r5, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08020364 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _08020332\n\ + b _0802051E\n\ +_08020332:\n\ + ldr r2, _08020368 @ =0x0001605f\n\ + adds r0, r5, r2\n\ + ldrb r0, [r0]\n\ + movs r3, 0x1\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _08020370\n\ + ldr r1, _0802036C @ =gBattleMoveDamage\n\ + mov r3, r10\n\ + ldrh r0, [r3]\n\ + str r0, [r1]\n\ + mov r8, r1\n\ + b _08020376\n\ + .align 2, 0\n\ +_0802034C: .4byte gBattleTypeFlags\n\ +_08020350: .4byte gBattleMons\n\ +_08020354: .4byte 0x0001601b\n\ +_08020358: .4byte 0x00000161\n\ +_0802035C: .4byte 0x02000000\n\ +_08020360: .4byte 0x00016018\n\ +_08020364: .4byte gPlayerParty\n\ +_08020368: .4byte 0x0001605f\n\ +_0802036C: .4byte gBattleMoveDamage\n\ +_08020370:\n\ + ldr r0, _080203EC @ =gBattleMoveDamage\n\ + str r3, [r0]\n\ + mov r8, r0\n\ +_08020376:\n\ + cmp r4, 0x19\n\ + bne _08020386\n\ + ldr r0, _080203F0 @ =gExpShareExp\n\ + ldrh r1, [r0]\n\ + mov r2, r8\n\ + ldr r0, [r2]\n\ + adds r0, r1\n\ + str r0, [r2]\n\ +_08020386:\n\ + cmp r4, 0x28\n\ + bne _0802039C\n\ + mov r3, r8\n\ + ldr r1, [r3]\n\ + movs r0, 0x96\n\ + muls r0, r1\n\ + movs r1, 0x64\n\ + bl __divsi3\n\ + mov r1, r8\n\ + str r0, [r1]\n\ +_0802039C:\n\ + ldr r0, _080203F4 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080203B8\n\ + ldr r4, _080203EC @ =gBattleMoveDamage\n\ + ldr r1, [r4]\n\ + movs r0, 0x96\n\ + muls r0, r1\n\ + movs r1, 0x64\n\ + bl __divsi3\n\ + str r0, [r4]\n\ +_080203B8:\n\ + ldr r0, _080203F8 @ =0x02000000\n\ + ldr r2, _080203FC @ =0x00016018\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08020400 @ =gPlayerParty\n\ + adds r0, r1\n\ + bl IsTradedMon\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08020404\n\ + ldr r4, _080203EC @ =gBattleMoveDamage\n\ + ldr r1, [r4]\n\ + movs r0, 0x96\n\ + muls r0, r1\n\ + movs r1, 0x64\n\ + bl __divsi3\n\ + str r0, [r4]\n\ + movs r7, 0xA5\n\ + lsls r7, 1\n\ + mov r8, r4\n\ + b _0802040A\n\ + .align 2, 0\n\ +_080203EC: .4byte gBattleMoveDamage\n\ +_080203F0: .4byte gExpShareExp\n\ +_080203F4: .4byte gBattleTypeFlags\n\ +_080203F8: .4byte 0x02000000\n\ +_080203FC: .4byte 0x00016018\n\ +_08020400: .4byte gPlayerParty\n\ +_08020404:\n\ + ldr r7, _0802043C @ =0x00000149\n\ + ldr r3, _08020440 @ =gBattleMoveDamage\n\ + mov r8, r3\n\ +_0802040A:\n\ + ldr r0, _08020444 @ =gBattleTypeFlags\n\ + ldrh r0, [r0]\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08020488\n\ + ldr r1, _08020448 @ =gBattlePartyID\n\ + ldr r0, _0802044C @ =0x02000000\n\ + ldr r3, _08020450 @ =0x00016018\n\ + adds r2, r0, r3\n\ + ldrh r1, [r1, 0x4]\n\ + adds r5, r0, 0\n\ + ldr r4, _08020454 @ =gBitTable\n\ + ldr r3, _08020458 @ =gAbsentBankFlags\n\ + ldrb r2, [r2]\n\ + cmp r1, r2\n\ + bne _08020460\n\ + ldrb r1, [r3]\n\ + ldr r0, [r4, 0x8]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08020460\n\ + ldr r0, _0802045C @ =0x000160a2\n\ + adds r1, r5, r0\n\ + b _0802047C\n\ + .align 2, 0\n\ +_0802043C: .4byte 0x00000149\n\ +_08020440: .4byte gBattleMoveDamage\n\ +_08020444: .4byte gBattleTypeFlags\n\ +_08020448: .4byte gBattlePartyID\n\ +_0802044C: .4byte 0x02000000\n\ +_08020450: .4byte 0x00016018\n\ +_08020454: .4byte gBitTable\n\ +_08020458: .4byte gAbsentBankFlags\n\ +_0802045C: .4byte 0x000160a2\n\ +_08020460:\n\ + ldrb r2, [r3]\n\ + ldr r0, [r4]\n\ + ands r2, r0\n\ + cmp r2, 0\n\ + bne _08020478\n\ + ldr r1, _08020474 @ =0x000160a2\n\ + adds r0, r5, r1\n\ + strb r2, [r0]\n\ + b _08020490\n\ + .align 2, 0\n\ +_08020474: .4byte 0x000160a2\n\ +_08020478:\n\ + ldr r2, _08020484 @ =0x000160a2\n\ + adds r1, r5, r2\n\ +_0802047C:\n\ + movs r0, 0x2\n\ + strb r0, [r1]\n\ + b _08020490\n\ + .align 2, 0\n\ +_08020484: .4byte 0x000160a2\n\ +_08020488:\n\ + ldr r0, _08020530 @ =0x02000000\n\ + ldr r3, _08020534 @ =0x000160a2\n\ + adds r0, r3\n\ + strb r1, [r0]\n\ +_08020490:\n\ + ldr r1, _08020538 @ =gBattleTextBuff1\n\ + movs r3, 0\n\ + movs r2, 0xFD\n\ + strb r2, [r1]\n\ + movs r5, 0x4\n\ + strb r5, [r1, 0x1]\n\ + ldr r4, _08020530 @ =0x02000000\n\ + ldr r0, _08020534 @ =0x000160a2\n\ + adds r6, r4, r0\n\ + ldrb r0, [r6]\n\ + strb r0, [r1, 0x2]\n\ + ldr r0, _0802053C @ =0x00016018\n\ + adds r4, r0\n\ + ldrb r0, [r4]\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldr r1, _08020540 @ =gBattleTextBuff2\n\ + strb r2, [r1]\n\ + strb r3, [r1, 0x1]\n\ + strb r7, [r1, 0x2]\n\ + movs r3, 0xFF\n\ + lsls r3, 8\n\ + ands r7, r3\n\ + asrs r0, r7, 8\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + strb r0, [r1, 0x4]\n\ + ldr r1, _08020544 @ =gBattleTextBuff3\n\ + strb r2, [r1]\n\ + movs r0, 0x1\n\ + strb r0, [r1, 0x1]\n\ + strb r5, [r1, 0x2]\n\ + movs r0, 0x5\n\ + strb r0, [r1, 0x3]\n\ + mov r0, r8\n\ + ldr r2, [r0]\n\ + strb r2, [r1, 0x4]\n\ + adds r0, r2, 0\n\ + ands r0, r3\n\ + asrs r0, 8\n\ + strb r0, [r1, 0x5]\n\ + movs r0, 0xFF\n\ + lsls r0, 16\n\ + ands r0, r2\n\ + asrs r0, 16\n\ + strb r0, [r1, 0x6]\n\ + lsrs r2, 24\n\ + strb r2, [r1, 0x7]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + strb r0, [r1, 0x8]\n\ + ldrb r1, [r6]\n\ + movs r0, 0xD\n\ + bl PrepareStringBattle\n\ + ldrb r1, [r4]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08020548 @ =gPlayerParty\n\ + adds r0, r1\n\ + ldr r3, _0802054C @ =gBattleMons\n\ + ldr r1, _08020550 @ =gBank1\n\ + ldrb r2, [r1]\n\ + movs r1, 0x58\n\ + muls r1, r2\n\ + adds r1, r3\n\ + ldrh r1, [r1]\n\ + bl MonGainEVs\n\ +_0802051E:\n\ + ldr r1, _08020530 @ =0x02000000\n\ + ldr r3, _08020554 @ =0x0001605f\n\ + adds r2, r1, r3\n\ + ldrb r0, [r2]\n\ + lsrs r0, 1\n\ + strb r0, [r2]\n\ + ldr r0, _08020558 @ =0x0001600f\n\ + adds r1, r0\n\ + b _08020618\n\ + .align 2, 0\n\ +_08020530: .4byte 0x02000000\n\ +_08020534: .4byte 0x000160a2\n\ +_08020538: .4byte gBattleTextBuff1\n\ +_0802053C: .4byte 0x00016018\n\ +_08020540: .4byte gBattleTextBuff2\n\ +_08020544: .4byte gBattleTextBuff3\n\ +_08020548: .4byte gPlayerParty\n\ +_0802054C: .4byte gBattleMons\n\ +_08020550: .4byte gBank1\n\ +_08020554: .4byte 0x0001605f\n\ +_08020558: .4byte 0x0001600f\n\ +_0802055C:\n\ + ldr r0, _08020620 @ =gBattleExecBuffer\n\ + ldr r2, [r0]\n\ + cmp r2, 0\n\ + beq _08020566\n\ + b _08020996\n\ +_08020566:\n\ + ldr r1, _08020624 @ =gBattleBufferB\n\ + ldr r4, _08020628 @ =0x02000000\n\ + ldr r3, _0802062C @ =0x000160a2\n\ + adds r3, r4\n\ + mov r8, r3\n\ + ldrb r0, [r3]\n\ + lsls r0, 9\n\ + adds r0, r1\n\ + strb r2, [r0]\n\ + ldr r0, _08020630 @ =0x00016018\n\ + adds r7, r4, r0\n\ + ldrb r0, [r7]\n\ + movs r6, 0x64\n\ + muls r0, r6\n\ + ldr r5, _08020634 @ =gPlayerParty\n\ + adds r0, r5\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08020612\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + cmp r0, 0x64\n\ + beq _08020612\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3A\n\ + bl GetMonData\n\ + ldr r1, _08020638 @ =0x00017180\n\ + adds r4, r1\n\ + strh r0, [r4]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3B\n\ + bl GetMonData\n\ + strh r0, [r4, 0x2]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3C\n\ + bl GetMonData\n\ + strh r0, [r4, 0x4]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + strh r0, [r4, 0x6]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3E\n\ + bl GetMonData\n\ + strh r0, [r4, 0x8]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3F\n\ + bl GetMonData\n\ + strh r0, [r4, 0xA]\n\ + ldr r4, _0802063C @ =gActiveBank\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + strb r0, [r4]\n\ + ldrb r1, [r7]\n\ + ldr r0, _08020640 @ =gBattleMoveDamage\n\ + ldrh r2, [r0]\n\ + movs r0, 0\n\ + bl EmitExpBarUpdate\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08020612:\n\ + ldr r1, _08020628 @ =0x02000000\n\ + ldr r3, _08020644 @ =0x0001600f\n\ + adds r1, r3\n\ +_08020618:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020620: .4byte gBattleExecBuffer\n\ +_08020624: .4byte gBattleBufferB\n\ +_08020628: .4byte 0x02000000\n\ +_0802062C: .4byte 0x000160a2\n\ +_08020630: .4byte 0x00016018\n\ +_08020634: .4byte gPlayerParty\n\ +_08020638: .4byte 0x00017180\n\ +_0802063C: .4byte gActiveBank\n\ +_08020640: .4byte gBattleMoveDamage\n\ +_08020644: .4byte 0x0001600f\n\ +_08020648:\n\ + ldr r0, _080208AC @ =gBattleExecBuffer\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _08020652\n\ + b _08020996\n\ +_08020652:\n\ + ldr r1, _080208B0 @ =gActiveBank\n\ + ldr r4, _080208B4 @ =0x02000000\n\ + ldr r2, _080208B8 @ =0x000160a2\n\ + adds r0, r4, r2\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r2, _080208BC @ =gBattleBufferB\n\ + ldrb r3, [r1]\n\ + lsls r1, r3, 9\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x21\n\ + beq _0802066E\n\ + b _080208F0\n\ +_0802066E:\n\ + adds r0, r2, 0x1\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xB\n\ + beq _0802067A\n\ + b _080208F0\n\ +_0802067A:\n\ + ldr r0, _080208C0 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080206A8\n\ + ldr r1, _080208C4 @ =gBattlePartyID\n\ + lsls r0, r3, 1\n\ + adds r2, r0, r1\n\ + ldr r0, _080208C8 @ =0x00016018\n\ + adds r1, r4, r0\n\ + ldrh r0, [r2]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bne _080206A8\n\ + adds r1, r0, 0\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _080208CC @ =gPlayerParty\n\ + adds r0, r1\n\ + adds r1, r3, 0\n\ + bl sub_80324F8\n\ +_080206A8:\n\ + ldr r1, _080208D0 @ =gBattleTextBuff1\n\ + movs r2, 0xFD\n\ + strb r2, [r1]\n\ + movs r0, 0x4\n\ + strb r0, [r1, 0x1]\n\ + ldr r5, _080208B0 @ =gActiveBank\n\ + ldrb r0, [r5]\n\ + strb r0, [r1, 0x2]\n\ + ldr r0, _080208B4 @ =0x02000000\n\ + ldr r3, _080208C8 @ =0x00016018\n\ + adds r6, r0, r3\n\ + ldrb r0, [r6]\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldr r4, _080208D4 @ =gBattleTextBuff2\n\ + strb r2, [r4]\n\ + movs r0, 0x1\n\ + strb r0, [r4, 0x1]\n\ + strb r0, [r4, 0x2]\n\ + movs r0, 0x3\n\ + strb r0, [r4, 0x3]\n\ + ldrb r0, [r6]\n\ + movs r1, 0x64\n\ + mov r8, r1\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + ldr r7, _080208CC @ =gPlayerParty\n\ + adds r0, r7\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + strb r0, [r4, 0x4]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + strb r0, [r4, 0x5]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r2, _080208D8 @ =gLeveledUpInBattle\n\ + ldr r1, _080208DC @ =gBitTable\n\ + ldrb r0, [r6]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r1, _080208E0 @ =gBattlescriptCurrInstr\n\ + ldr r0, _080208E4 @ =BattleScript_LevelUp\n\ + str r0, [r1]\n\ + ldr r4, _080208E8 @ =gBattleMoveDamage\n\ + ldr r2, _080208BC @ =gBattleBufferB\n\ + ldrb r1, [r5]\n\ + lsls r1, 9\n\ + adds r0, r2, 0x2\n\ + adds r0, r1, r0\n\ + ldrb r3, [r0]\n\ + adds r2, 0x3\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r3, r0\n\ + str r3, [r4]\n\ + ldrb r0, [r6]\n\ + mov r3, r8\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + adds r0, r7\n\ + movs r1, 0\n\ + bl AdjustFriendship\n\ + ldr r0, _080208C4 @ =gBattlePartyID\n\ + ldrb r1, [r6]\n\ + ldrh r0, [r0]\n\ + cmp r0, r1\n\ + bne _080207EC\n\ + ldr r4, _080208EC @ =gBattleMons\n\ + ldrh r0, [r4, 0x28]\n\ + cmp r0, 0\n\ + beq _080207EC\n\ + mov r0, r8\n\ + muls r0, r1\n\ + adds r0, r7\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + adds r1, r4, 0\n\ + adds r1, 0x2A\n\ + strb r0, [r1]\n\ + ldrb r0, [r6]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r7\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + strh r0, [r4, 0x28]\n\ + ldrb r0, [r6]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r0, r7\n\ + movs r1, 0x3A\n\ + bl GetMonData\n\ + strh r0, [r4, 0x2C]\n\ + ldrb r0, [r6]\n\ + mov r3, r8\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + adds r0, r7\n\ + movs r1, 0x3B\n\ + bl GetMonData\n\ + strh r0, [r4, 0x2]\n\ + ldrb r0, [r6]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r7\n\ + movs r1, 0x3C\n\ + bl GetMonData\n\ + strh r0, [r4, 0x4]\n\ + ldrb r0, [r6]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r0, r7\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + strh r0, [r4, 0x6]\n\ + ldrb r0, [r6]\n\ + mov r3, r8\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + adds r0, r7\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + strh r0, [r4, 0x6]\n\ + ldrb r0, [r6]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r7\n\ + movs r1, 0x3E\n\ + bl GetMonData\n\ + strh r0, [r4, 0x8]\n\ + ldrb r0, [r6]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r0, r7\n\ + movs r1, 0x3F\n\ + bl GetMonData\n\ + strh r0, [r4, 0xA]\n\ +_080207EC:\n\ + ldr r0, _080208C4 @ =gBattlePartyID\n\ + ldr r1, _080208B4 @ =0x02000000\n\ + ldr r3, _080208C8 @ =0x00016018\n\ + adds r7, r1, r3\n\ + ldrb r2, [r7]\n\ + ldrh r0, [r0, 0x4]\n\ + cmp r0, r2\n\ + bne _080208F6\n\ + ldr r6, _080208EC @ =gBattleMons\n\ + movs r0, 0xD8\n\ + adds r0, r6\n\ + mov r8, r0\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _080208F6\n\ + ldr r0, _080208C0 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080208F6\n\ + movs r5, 0x64\n\ + adds r0, r2, 0\n\ + muls r0, r5\n\ + ldr r4, _080208CC @ =gPlayerParty\n\ + adds r0, r4\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xDA\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + mov r1, r8\n\ + strh r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3A\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xDC\n\ + strh r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3B\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xB2\n\ + strh r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3C\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xB4\n\ + strh r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + movs r2, 0xB6\n\ + adds r2, r6\n\ + mov r8, r2\n\ + strh r0, [r2]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + mov r3, r8\n\ + strh r0, [r3]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3E\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xB8\n\ + strh r0, [r1]\n\ + b _080208F6\n\ + .align 2, 0\n\ +_080208AC: .4byte gBattleExecBuffer\n\ +_080208B0: .4byte gActiveBank\n\ +_080208B4: .4byte 0x02000000\n\ +_080208B8: .4byte 0x000160a2\n\ +_080208BC: .4byte gBattleBufferB\n\ +_080208C0: .4byte gBattleTypeFlags\n\ +_080208C4: .4byte gBattlePartyID\n\ +_080208C8: .4byte 0x00016018\n\ +_080208CC: .4byte gPlayerParty\n\ +_080208D0: .4byte gBattleTextBuff1\n\ +_080208D4: .4byte gBattleTextBuff2\n\ +_080208D8: .4byte gLeveledUpInBattle\n\ +_080208DC: .4byte gBitTable\n\ +_080208E0: .4byte gBattlescriptCurrInstr\n\ +_080208E4: .4byte BattleScript_LevelUp\n\ +_080208E8: .4byte gBattleMoveDamage\n\ +_080208EC: .4byte gBattleMons\n\ +_080208F0:\n\ + ldr r1, _08020904 @ =gBattleMoveDamage\n\ + movs r0, 0\n\ + str r0, [r1]\n\ +_080208F6:\n\ + ldr r0, _08020908 @ =0x02000000\n\ + ldr r1, _0802090C @ =0x0001600f\n\ + adds r0, r1\n\ + movs r1, 0x5\n\ + strb r1, [r0]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020904: .4byte gBattleMoveDamage\n\ +_08020908: .4byte 0x02000000\n\ +_0802090C: .4byte 0x0001600f\n\ +_08020910:\n\ + ldr r0, _08020924 @ =gBattleMoveDamage\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _08020930\n\ + ldr r0, _08020928 @ =0x02000000\n\ + ldr r2, _0802092C @ =0x0001600f\n\ + adds r0, r2\n\ + movs r1, 0x3\n\ + strb r1, [r0]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020924: .4byte gBattleMoveDamage\n\ +_08020928: .4byte 0x02000000\n\ +_0802092C: .4byte 0x0001600f\n\ +_08020930:\n\ + ldr r2, _08020950 @ =0x02000000\n\ + ldr r3, _08020954 @ =0x00016018\n\ + adds r1, r2, r3\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x5\n\ + bhi _0802095C\n\ + ldr r0, _08020958 @ =0x0001600f\n\ + adds r1, r2, r0\n\ + movs r0, 0x2\n\ + strb r0, [r1]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020950: .4byte 0x02000000\n\ +_08020954: .4byte 0x00016018\n\ +_08020958: .4byte 0x0001600f\n\ +_0802095C:\n\ + ldr r3, _08020968 @ =0x0001600f\n\ + adds r1, r2, r3\n\ + movs r0, 0x6\n\ + strb r0, [r1]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020968: .4byte 0x0001600f\n\ +_0802096C:\n\ + ldr r0, _080209A4 @ =gBattleExecBuffer\n\ + ldr r5, [r0]\n\ + cmp r5, 0\n\ + bne _08020996\n\ + ldr r4, _080209A8 @ =gBattleMons\n\ + ldr r2, _080209AC @ =gBank1\n\ + ldrb r0, [r2]\n\ + movs r1, 0x58\n\ + muls r0, r1\n\ + adds r0, r4\n\ + movs r3, 0\n\ + strh r5, [r0, 0x2E]\n\ + ldrb r0, [r2]\n\ + muls r0, r1\n\ + adds r0, r4\n\ + adds r0, 0x20\n\ + strb r3, [r0]\n\ + ldr r1, _080209B0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x2\n\ + str r0, [r1]\n\ +_08020996:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080209A4: .4byte gBattleExecBuffer\n\ +_080209A8: .4byte gBattleMons\n\ +_080209AC: .4byte gBank1\n\ +_080209B0: .4byte gBattlescriptCurrInstr\n\ + .syntax divided\n"); +} + +#endif // NONMATCHING + +#ifdef NONMATCHING +static void atk24(void) +{ + u16 HP_count = 0; + int i; + if (gBattleExecBuffer) {return;} + + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP); + } + + if (HP_count == 0) + gBattleOutcome |= BATTLE_LOST; + + for (HP_count = 0, i = 0; i < 6; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG)) + HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP); + } + + if (!HP_count) + gBattleOutcome |= BATTLE_WON; + + if (!gBattleOutcome && (gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + register int found1 asm("r2"); + register int found2 asm("r4"); + + //I can't for the love of god decompile that part + + for (found1 = 0, i = 0; i < gNoOfAllBanks; i += 2) + { + if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40) + found1++; + } + + for (found2 = 0, i = 1; i < gNoOfAllBanks; i += 2) + { + if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40) + found2++; + } + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (found2 + found1 > 1) + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; + } + else + { + if (found2 != 0 && found1 != 0) + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; + } + } + else + gBattlescriptCurrInstr += 5; + +} +#else +__attribute__((naked)) +static void atk24(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + movs r6, 0\n\ + ldr r0, _08020AF0 @ =gBattleExecBuffer\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _080209C6\n\ + b _08020B46\n\ +_080209C6:\n\ + movs r5, 0\n\ +_080209C8:\n\ + movs r0, 0x64\n\ + adds r1, r5, 0\n\ + muls r1, r0\n\ + ldr r0, _08020AF4 @ =gPlayerParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _080209F8\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _080209F8\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r0, r6, r0\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ +_080209F8:\n\ + adds r5, 0x1\n\ + cmp r5, 0x5\n\ + ble _080209C8\n\ + cmp r6, 0\n\ + bne _08020A0C\n\ + ldr r0, _08020AF8 @ =gBattleOutcome\n\ + ldrb r1, [r0]\n\ + movs r2, 0x2\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_08020A0C:\n\ + movs r6, 0\n\ + movs r5, 0\n\ +_08020A10:\n\ + movs r0, 0x64\n\ + adds r1, r5, 0\n\ + muls r1, r0\n\ + ldr r0, _08020AFC @ =gEnemyParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08020A40\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _08020A40\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r0, r6, r0\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ +_08020A40:\n\ + adds r5, 0x1\n\ + cmp r5, 0x5\n\ + ble _08020A10\n\ + ldr r2, _08020AF8 @ =gBattleOutcome\n\ + cmp r6, 0\n\ + bne _08020A54\n\ + ldrb r0, [r2]\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ +_08020A54:\n\ + ldrb r0, [r2]\n\ + cmp r0, 0\n\ + bne _08020B3E\n\ + ldr r2, _08020B00 @ =gBattleTypeFlags\n\ + ldrh r1, [r2]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + mov r8, r2\n\ + cmp r0, 0\n\ + beq _08020B3E\n\ + movs r2, 0\n\ + movs r5, 0\n\ + ldr r0, _08020B04 @ =gNoOfAllBanks\n\ + ldrb r3, [r0]\n\ + mov r12, r0\n\ + ldr r7, _08020B08 @ =gBattlescriptCurrInstr\n\ + cmp r2, r3\n\ + bge _08020AA0\n\ + ldr r0, _08020B0C @ =gHitMarker\n\ + movs r1, 0x80\n\ + lsls r1, 21\n\ + ldr r6, [r0]\n\ + adds r4, r3, 0\n\ + ldr r3, _08020B10 @ =gSpecialStatuses\n\ +_08020A84:\n\ + adds r0, r1, 0\n\ + lsls r0, r5\n\ + ands r0, r6\n\ + cmp r0, 0\n\ + beq _08020A98\n\ + ldrb r0, [r3]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08020A98\n\ + adds r2, 0x1\n\ +_08020A98:\n\ + adds r3, 0x28\n\ + adds r5, 0x2\n\ + cmp r5, r4\n\ + blt _08020A84\n\ +_08020AA0:\n\ + movs r4, 0\n\ + movs r5, 0x1\n\ + mov r0, r12\n\ + ldrb r3, [r0]\n\ + cmp r5, r3\n\ + bge _08020ADA\n\ + ldr r0, _08020B0C @ =gHitMarker\n\ + movs r1, 0x80\n\ + lsls r1, 21\n\ + mov r12, r1\n\ + ldr r1, [r0]\n\ + ldr r0, _08020B10 @ =gSpecialStatuses\n\ + adds r6, r3, 0\n\ + adds r3, r0, 0\n\ + adds r3, 0x14\n\ +_08020ABE:\n\ + mov r0, r12\n\ + lsls r0, r5\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08020AD2\n\ + ldrb r0, [r3]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08020AD2\n\ + adds r4, 0x1\n\ +_08020AD2:\n\ + adds r3, 0x28\n\ + adds r5, 0x2\n\ + cmp r5, r6\n\ + blt _08020ABE\n\ +_08020ADA:\n\ + mov r0, r8\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08020B14\n\ + adds r0, r4, r2\n\ + cmp r0, 0x1\n\ + bgt _08020B1C\n\ + b _08020B36\n\ + .align 2, 0\n\ +_08020AF0: .4byte gBattleExecBuffer\n\ +_08020AF4: .4byte gPlayerParty\n\ +_08020AF8: .4byte gBattleOutcome\n\ +_08020AFC: .4byte gEnemyParty\n\ +_08020B00: .4byte gBattleTypeFlags\n\ +_08020B04: .4byte gNoOfAllBanks\n\ +_08020B08: .4byte gBattlescriptCurrInstr\n\ +_08020B0C: .4byte gHitMarker\n\ +_08020B10: .4byte gSpecialStatuses\n\ +_08020B14:\n\ + cmp r4, 0\n\ + beq _08020B36\n\ + cmp r2, 0\n\ + beq _08020B36\n\ +_08020B1C:\n\ + ldr r2, [r7]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + adds r1, r0\n\ + str r1, [r7]\n\ + b _08020B46\n\ +_08020B36:\n\ + ldr r0, [r7]\n\ + adds r0, 0x5\n\ + str r0, [r7]\n\ + b _08020B46\n\ +_08020B3E:\n\ + ldr r1, _08020B50 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ +_08020B46:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08020B50: .4byte gBattlescriptCurrInstr\n\ + .syntax divided\n"); +} +#endif + +static void MoveValuesCleanUp(void) +{ + gBattleMoveFlags = 0; + BATTLE_STRUCT->dmgMultiplier = 1; + gCritMultiplier = 1; + gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattleCommunication[6] = 0; + gHitMarker &= ~(HITMARKER_DESTINYBOND); + gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); +} + +static void atk25_move_values_cleanup(void) +{ + MoveValuesCleanUp(); + gBattlescriptCurrInstr += 1; +} + +static void atk26_set_multihit(void) +{ + gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr += 2; +} + +static void atk27_decrement_multihit(void) +{ + if (--gMultiHitCounter == 0) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atk28_goto(void) +{ + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atk29_jumpifbyte(void) +{ + u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); + u8* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); + u8 value = BSScriptRead8(gBattlescriptCurrInstr + 6); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); + gBattlescriptCurrInstr += 11; + switch (caseID) + { + case CMP_EQUAL: + if (*ptr == value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NOT_EQUAL: + if (*ptr != value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_GREATER_THAN: + if (*ptr > value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_LESS_THAN: + if (*ptr < value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_COMMON_BITS: + if (*ptr & value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NO_COMMON_BITS: + if (!(*ptr & value)) + gBattlescriptCurrInstr = jump_loc; + break; + } +} + +static void atk2A_jumpifhalfword(void) +{ + u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); + u16* ptr = (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); + u16 value = BSScriptRead16(gBattlescriptCurrInstr + 6); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 8); + gBattlescriptCurrInstr += 12; + switch (caseID) + { + case CMP_EQUAL: + if (*ptr == value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NOT_EQUAL: + if (*ptr != value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_GREATER_THAN: + if (*ptr > value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_LESS_THAN: + if (*ptr < value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_COMMON_BITS: + if (*ptr & value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NO_COMMON_BITS: + if (!(*ptr & value)) + gBattlescriptCurrInstr = jump_loc; + break; + } +} + +static void atk2B_jumpifword(void) +{ + u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); + u32* ptr = (u32*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); + u32 value = BSScriptRead32(gBattlescriptCurrInstr + 6); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + gBattlescriptCurrInstr += 14; + switch (caseID) + { + case CMP_EQUAL: + if (*ptr == value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NOT_EQUAL: + if (*ptr != value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_GREATER_THAN: + if (*ptr > value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_LESS_THAN: + if (*ptr < value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_COMMON_BITS: + if (*ptr & value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NO_COMMON_BITS: + if (!(*ptr & value)) + gBattlescriptCurrInstr = jump_loc; + break; + } +} + +static void atk2C_jumpifarrayequal(void) +{ + //Mem1, Mem2, Size, Jump Loc + u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + + u8 i; + for (i = 0; i < size; i++) + { + if (*mem1 != *mem2) + { + gBattlescriptCurrInstr += 14; + break; + } + mem1++, mem2++; + } + + if (i == size) + gBattlescriptCurrInstr = jump_loc; +} + +static void atk2D_jumpifarraynotequal(void) +{ + //Mem1, Mem2, Size, Jump Loc + u8 equal_bytes = 0; + u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + + u8 i; + for (i = 0; i < size; i++) + { + if (*mem1 == *mem2) + { + equal_bytes++; + } + mem1++, mem2++; + } + + if (equal_bytes != size) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 14; +} + +static void atk2E_setbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem = BSScriptRead8(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr += 6; +} + +static void atk2F_addbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem += BSScriptRead8(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr += 6; +} + +static void atk30_subbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem -= BSScriptRead8(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr += 6; +} + +static void atk31_copyarray(void) +{ + u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + s32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); + + s32 i; + for (i = 0; i < size; i++) + { + mem1[i] = mem2[i]; + } + + gBattlescriptCurrInstr += 10; +} + +static void atk32_copyarray_withindex(void) +{ + u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + u8* index = BS2ScriptReadPtr(gBattlescriptCurrInstr + 9); + s32 size = BSScriptRead8(gBattlescriptCurrInstr + 13); + + s32 i; + for (i = 0; i < size; i++) + { + mem1[i] = mem2[i + *index]; + } + + gBattlescriptCurrInstr += 14; +} + +static void atk33_orbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem |= BSScriptRead8(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr += 6; +} + +static void atk34_orhalfword(void) +{ + u16* mem = (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem |= BSScriptRead16(gBattlescriptCurrInstr + 5); //lmao gamefreak, decide on your macros... + gBattlescriptCurrInstr += 7; +} + +static void atk35_orword(void) +{ + u32* mem = (u32*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem |= BS2ScriptRead32(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr += 9; +} + +static void atk36_bicbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem &= ~(BSScriptRead8(gBattlescriptCurrInstr + 5)); + gBattlescriptCurrInstr += 6; +} + +static void atk37_bichalfword(void) +{ + u16* mem = (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem &= ~(BSScriptRead16(gBattlescriptCurrInstr + 5)); + gBattlescriptCurrInstr += 7; +} + +static void atk38_bicword(void) +{ + u32* mem = (u32*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem &= ~(BS2ScriptRead32(gBattlescriptCurrInstr + 5)); + gBattlescriptCurrInstr += 9; +} + +static void atk39_pause(void) +{ + if (gBattleExecBuffer == 0) + { + u16 value = BSScriptRead16(gBattlescriptCurrInstr + 1); + if (++gPauseCounterBattle >= value) + { + gPauseCounterBattle = 0; + gBattlescriptCurrInstr += 3; + } + } +} + +static void atk3A_waitstate(void) +{ + if (gBattleExecBuffer == 0) + gBattlescriptCurrInstr++; +} + +static void atk3B_healthbar_update(void) +{ + if (!BSScriptRead8(gBattlescriptCurrInstr + 1)) + gActiveBank = gBankTarget; + else + gActiveBank = gBankAttacker; + + EmitHealthBarUpdate(0, gBattleMoveDamage); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk3C_return(void) +{ + b_movescr_stack_pop_cursor(); +} + +static void atk3D_end(void) +{ + gBattleMoveFlags = 0; + gActiveBank = 0; + gFightStateTracker = 0xB; +} + +static void atk3E_end2(void) +{ + //not much difference between this and 3D. It's more apparent in Emerald + gActiveBank = 0; + gFightStateTracker = 0xB; +} + +static void atk3F_end3(void) //pops the main function stack +{ + b_movescr_stack_pop_cursor(); + if (B_FUNCTION_STACK->size) + B_FUNCTION_STACK->size--; + gBattleMainFunc = B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size]; +} + +static void atk41_call(void) +{ + b_movescr_stack_push(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atk42_jumpiftype2(void) //u8 bank, u8 type, *ptr +{ + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + + if (BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type1 || BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type2) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; +} + +static void atk43_jumpifabilitypresent(void) +{ + if (AbilityBattleEffects(ABILITY_CHECK_ON_FIELD, 0, BSScriptRead8(gBattlescriptCurrInstr + 1), 0, 0)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; +} + +static void atk44(void) +{ + unk_2000000[gBankAttacker + 0x16060] = 1; +} + +#ifdef NONMATCHING + +static void atk45_playanimation(void) +{ + #define ANIMATION_ID BSScriptRead8(gBattlescriptCurrInstr + 2) + #define ARGUMENT (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 3) + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + + if ( ANIMATION_ID == 1 || ANIMATION_ID == 0x11 || ANIMATION_ID == 2) { + EmitBattleAnimation(0, ANIMATION_ID, *argument); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 7; + } else if (gHitMarker & HITMARKER_NO_ANIMATIONS) { + b_movescr_stack_push(gBattlescriptCurrInstr + 7); + gBattlescriptCurrInstr = BattleScript_Pausex20; + } else { + if (((ANIMATION_ID - 10) > 3 && gStatuses3[gActiveBank] & (STATUS3_SEMI_INVULNERABLE))) { + gBattlescriptCurrInstr += 7; + } else { + EmitBattleAnimation(0, ANIMATION_ID, *argument); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 7; + } + } +} + +#else +__attribute__((naked)) +static void atk45_playanimation(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + ldr r5, _08021444 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r5]\n\ + ldrb r0, [r0, 0x1]\n\ + bl GetBattleBank\n\ + ldr r6, _08021448 @ =gActiveBank\n\ + strb r0, [r6]\n\ + ldr r2, [r5]\n\ + ldrb r1, [r2, 0x3]\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x5]\n\ + lsls r0, 16\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x6]\n\ + lsls r0, 24\n\ + adds r3, r1, r0\n\ + ldrb r4, [r2, 0x2]\n\ + adds r0, r4, 0\n\ + cmp r0, 0x1\n\ + beq _08021426\n\ + cmp r0, 0x11\n\ + beq _08021426\n\ + cmp r0, 0x2\n\ + bne _0802144C\n\ +_08021426:\n\ + ldr r4, _08021444 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + ldrb r1, [r0, 0x2]\n\ + ldrh r2, [r3]\n\ + movs r0, 0\n\ + bl EmitBattleAnimation\n\ + ldr r0, _08021448 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, [r4]\n\ + adds r0, 0x7\n\ + str r0, [r4]\n\ + b _080214AE\n\ + .align 2, 0\n\ +_08021444: .4byte gBattlescriptCurrInstr\n\ +_08021448: .4byte gActiveBank\n\ +_0802144C:\n\ + ldr r0, _08021464 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802146C\n\ + adds r0, r2, 0x7\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08021468 @ =BattleScript_Pausex20\n\ + b _080214AC\n\ + .align 2, 0\n\ +_08021464: .4byte gHitMarker\n\ +_08021468: .4byte BattleScript_Pausex20\n\ +_0802146C:\n\ + adds r0, r4, 0\n\ + subs r0, 0xA\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x3\n\ + bls _08021498\n\ + ldr r1, _08021490 @ =gStatuses3\n\ + ldrb r0, [r6]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _08021494 @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021498\n\ + adds r0, r2, 0x7\n\ + b _080214AC\n\ + .align 2, 0\n\ +_08021490: .4byte gStatuses3\n\ +_08021494: .4byte 0x000400c0\n\ +_08021498:\n\ + ldrb r1, [r2, 0x2]\n\ + ldrh r2, [r3]\n\ + movs r0, 0\n\ + bl EmitBattleAnimation\n\ + ldrb r0, [r6]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, [r5]\n\ + adds r0, 0x7\n\ +_080214AC:\n\ + str r0, [r5]\n\ +_080214AE:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} +#endif // NONMATCHING + +#ifdef NONMATCHING +static void atk46_playanimation2(void) +{ + +} + +#else +__attribute__((naked)) +static void atk46_playanimation2(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + ldr r6, _0802151C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r6]\n\ + ldrb r0, [r0, 0x1]\n\ + bl GetBattleBank\n\ + ldr r7, _08021520 @ =gActiveBank\n\ + strb r0, [r7]\n\ + ldr r2, [r6]\n\ + ldrb r1, [r2, 0x2]\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 16\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x5]\n\ + lsls r0, 24\n\ + adds r3, r1, r0\n\ + ldrb r1, [r2, 0x6]\n\ + ldrb r0, [r2, 0x7]\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x8]\n\ + lsls r0, 16\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x9]\n\ + lsls r0, 24\n\ + adds r4, r1, r0\n\ + ldrb r5, [r3]\n\ + adds r0, r5, 0\n\ + cmp r0, 0x1\n\ + beq _080214FE\n\ + cmp r0, 0x11\n\ + beq _080214FE\n\ + cmp r0, 0x2\n\ + bne _08021524\n\ +_080214FE:\n\ + ldrb r1, [r3]\n\ + ldrh r2, [r4]\n\ + movs r0, 0\n\ + bl EmitBattleAnimation\n\ + ldr r0, _08021520 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ + ldr r1, _0802151C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0xA\n\ + str r0, [r1]\n\ + b _0802157A\n\ + .align 2, 0\n\ +_0802151C: .4byte gBattlescriptCurrInstr\n\ +_08021520: .4byte gActiveBank\n\ +_08021524:\n\ + ldr r0, _08021534 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021538\n\ + adds r0, r2, 0\n\ + b _08021576\n\ + .align 2, 0\n\ +_08021534: .4byte gHitMarker\n\ +_08021538:\n\ + adds r0, r5, 0\n\ + subs r0, 0xA\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x3\n\ + bls _08021564\n\ + ldr r1, _0802155C @ =gStatuses3\n\ + ldrb r0, [r7]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _08021560 @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021564\n\ + adds r0, r2, 0\n\ + b _08021576\n\ + .align 2, 0\n\ +_0802155C: .4byte gStatuses3\n\ +_08021560: .4byte 0x000400c0\n\ +_08021564:\n\ + ldrb r1, [r3]\n\ + ldrh r2, [r4]\n\ + movs r0, 0\n\ + bl EmitBattleAnimation\n\ + ldrb r0, [r7]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, [r6]\n\ +_08021576:\n\ + adds r0, 0xA\n\ + str r0, [r6]\n\ +_0802157A:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided "); +} +#endif // NONMATCHING + +static void atk47_setgraphicalstatchangevalues(void) +{ + u8 to_add = 0; + switch (BATTLE_STRUCT->statChanger & 0xF0) + { + case 0x10: //+1 + to_add = 0xF; + break; + case 0x20: //+2 + to_add = 0x27; + break; + case 0x90: //-1 + to_add = 0x16; + break; + case 0xA0: //-2 + to_add = 0x2E; + break; + } + BATTLE_STRUCT->animArg1 = (BATTLE_STRUCT->statChanger & 0xF) + to_add - 1; + BATTLE_STRUCT->animArg2 = 0; + gBattlescriptCurrInstr++; +} + +#ifdef NONMATCHING +static void atk48_playstatchangeanimation(void) +{ + int curr_stat = 0; + u16 stat_animID = 0; + int changeable_stats = 0; + u32 stats_to_check; + u8 arg3; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + stats_to_check = BSScriptRead8(gBattlescriptCurrInstr + 2); + arg3 = BSScriptRead8(gBattlescriptCurrInstr + 3); + if (arg3 & 1) + { + u16 r1 = 0x15; + if (arg3 & 0x2) + r1 = 0x2D; + while (stats_to_check != 0) + { + if (!(stats_to_check & 1)) + continue; + if (!(BSScriptRead8(gBattlescriptCurrInstr + 3))) + { + u8 ability; + if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer) + continue; + ability = gBattleMons[gActiveBank].ability; + if (ability == ABILITY_CLEAR_BODY || ability == ABILITY_WHITE_SMOKE || (ability == ABILITY_KEEN_EYE && curr_stat == 6) || (ability == ABILITY_HYPER_CUTTER && curr_stat == 1)) + continue; + } + if (gBattleMons[gActiveBank].statStages[curr_stat] > 0) + { + stat_animID = r1; + changeable_stats++; + } + + stats_to_check >>= 1; + r1 += 1; + curr_stat++; + } + if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2) + stat_animID = 0x39; + else + stat_animID = 0x3A; + } + else + { + u16 r1 = 0x15; + if (arg3 & 0x2) + r1 = 0x2D; + while (stats_to_check != 0) + { + if (!(stats_to_check & 1)) + continue; + if (gBattleMons[gActiveBank].statStages[curr_stat] < 0xB) + { + stat_animID = r1; + changeable_stats++; + } + + stats_to_check >>= 1; + r1 += 1; + curr_stat++; + } + if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2) + stat_animID = 0x37; + else + stat_animID = 0x38; + } + if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1) + || changeable_stats == 0 || BATTLE_STRUCT->filler2[0] != 0) + gBattlescriptCurrInstr += 4; + else + { + EmitBattleAnimation(0, 1, stat_animID); + MarkBufferBankForExecution(gActiveBank); + if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1) + BATTLE_STRUCT->filler2[0] = 1; + gBattlescriptCurrInstr += 4; + } +} + +#else +__attribute__((naked)) +static void atk48_playstatchangeanimation(void) +{ + asm(".syntax unified\n\ +push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + movs r7, 0\n\ + movs r0, 0\n\ + mov r8, r0\n\ + movs r3, 0\n\ + ldr r5, _08021670 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r5]\n\ + ldrb r0, [r0, 0x1]\n\ + str r3, [sp]\n\ + bl GetBattleBank\n\ + ldr r2, _08021674 @ =gActiveBank\n\ + strb r0, [r2]\n\ + ldr r0, [r5]\n\ + ldrb r4, [r0, 0x2]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + ldr r3, [sp]\n\ + cmp r0, 0\n\ + beq _08021710\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + movs r1, 0x15\n\ + cmp r0, 0\n\ + beq _0802163C\n\ + movs r1, 0x2D\n\ +_0802163C:\n\ + cmp r4, 0\n\ + beq _080216E4\n\ + movs r0, 0x1\n\ + mov r10, r0\n\ + ldr r0, _08021678 @ =gUnknown_02024A98\n\ + mov r9, r0\n\ + lsls r5, r1, 16\n\ +_0802164A:\n\ + adds r0, r4, 0\n\ + mov r1, r10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080216D6\n\ + ldr r0, _08021670 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802167C\n\ + ldr r0, _08021674 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r7, r0\n\ + b _080216C4\n\ + .align 2, 0\n\ +_08021670: .4byte gBattlescriptCurrInstr\n\ +_08021674: .4byte gActiveBank\n\ +_08021678: .4byte gUnknown_02024A98\n\ +_0802167C:\n\ + ldr r6, _08021700 @ =gActiveBank\n\ + ldrb r0, [r6]\n\ + str r3, [sp]\n\ + bl GetBankIdentity\n\ + mov r1, r10\n\ + ands r1, r0\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _08021704 @ =gSideTimer\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x2]\n\ + ldr r3, [sp]\n\ + cmp r0, 0\n\ + bne _080216D6\n\ + ldr r0, _08021708 @ =gBattleMons\n\ + ldrb r2, [r6]\n\ + movs r1, 0x58\n\ + muls r2, r1\n\ + adds r0, r2, r0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1D\n\ + beq _080216D6\n\ + cmp r0, 0x49\n\ + beq _080216D6\n\ + cmp r0, 0x33\n\ + bne _080216BA\n\ + cmp r7, 0x6\n\ + beq _080216D6\n\ +_080216BA:\n\ + cmp r0, 0x34\n\ + bne _080216C2\n\ + cmp r7, 0x1\n\ + beq _080216D6\n\ +_080216C2:\n\ + adds r0, r7, r2\n\ +_080216C4:\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0\n\ + ble _080216D6\n\ + lsrs r0, r5, 16\n\ + mov r8, r0\n\ + adds r3, 0x1\n\ +_080216D6:\n\ + lsrs r4, 1\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + adds r5, r1\n\ + adds r7, 0x1\n\ + cmp r4, 0\n\ + bne _0802164A\n\ +_080216E4:\n\ + ldr r0, _0802170C @ =gBattlescriptCurrInstr\n\ + mov r9, r0\n\ + cmp r3, 0x1\n\ + ble _08021772\n\ + ldr r0, [r0]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + movs r1, 0x39\n\ + mov r8, r1\n\ + cmp r0, 0\n\ + beq _08021772\n\ + movs r0, 0x3A\n\ + b _08021770\n\ + .align 2, 0\n\ +_08021700: .4byte gActiveBank\n\ +_08021704: .4byte gSideTimer\n\ +_08021708: .4byte gBattleMons\n\ +_0802170C: .4byte gBattlescriptCurrInstr\n\ +_08021710:\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + movs r1, 0xE\n\ + cmp r0, 0\n\ + beq _0802171C\n\ + movs r1, 0x26\n\ +_0802171C:\n\ + mov r9, r5\n\ + cmp r4, 0\n\ + beq _08021758\n\ + ldr r6, _0802178C @ =gUnknown_02024A98\n\ + adds r5, r2, 0\n\ + lsls r2, r1, 16\n\ +_08021728:\n\ + movs r0, 0x1\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + beq _0802174A\n\ + ldrb r1, [r5]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r7, r0\n\ + adds r0, r6\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0xB\n\ + bgt _0802174A\n\ + lsrs r1, r2, 16\n\ + mov r8, r1\n\ + adds r3, 0x1\n\ +_0802174A:\n\ + lsrs r4, 1\n\ + movs r0, 0x80\n\ + lsls r0, 9\n\ + adds r2, r0\n\ + adds r7, 0x1\n\ + cmp r4, 0\n\ + bne _08021728\n\ +_08021758:\n\ + cmp r3, 0x1\n\ + ble _08021772\n\ + mov r1, r9\n\ + ldr r0, [r1]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + movs r1, 0x37\n\ + mov r8, r1\n\ + cmp r0, 0\n\ + beq _08021772\n\ + movs r0, 0x38\n\ +_08021770:\n\ + mov r8, r0\n\ +_08021772:\n\ + mov r1, r9\n\ + ldr r2, [r1]\n\ + ldrb r1, [r2, 0x3]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021790\n\ + cmp r3, 0x1\n\ + bgt _08021790\n\ + adds r0, r2, 0x4\n\ + mov r1, r9\n\ + b _080217E6\n\ + .align 2, 0\n\ +_0802178C: .4byte gUnknown_02024A98\n\ +_08021790:\n\ + cmp r3, 0\n\ + beq _080217E0\n\ + ldr r0, _080217D0 @ =0x02000000\n\ + ldr r1, _080217D4 @ =0x000160dc\n\ + adds r4, r0, r1\n\ + ldrb r0, [r4]\n\ + cmp r0, 0\n\ + bne _080217E0\n\ + movs r0, 0\n\ + movs r1, 0x1\n\ + mov r2, r8\n\ + str r3, [sp]\n\ + bl EmitBattleAnimation\n\ + ldr r0, _080217D8 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _080217DC @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + ldr r3, [sp]\n\ + cmp r0, 0\n\ + beq _080217CC\n\ + cmp r3, 0x1\n\ + ble _080217CC\n\ + movs r0, 0x1\n\ + strb r0, [r4]\n\ +_080217CC:\n\ + ldr r1, _080217DC @ =gBattlescriptCurrInstr\n\ + b _080217E2\n\ + .align 2, 0\n\ +_080217D0: .4byte 0x02000000\n\ +_080217D4: .4byte 0x000160dc\n\ +_080217D8: .4byte gActiveBank\n\ +_080217DC: .4byte gBattlescriptCurrInstr\n\ +_080217E0:\n\ + mov r1, r9\n\ +_080217E2:\n\ + ldr r0, [r1]\n\ + adds r0, 0x4\n\ +_080217E6:\n\ + str r0, [r1]\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +#endif // NONMATCHING + +#ifdef NONMATCHING +static void atk49_moveendturn(void) +{ + int i; + int effect = 0; + u16 last_move = 0, *choiced_move_atk; + int arg1, arg2, hold_effect_atk, move_type; + if (gLastUsedMove != 0xFFFF) + last_move = gLastUsedMove; + + arg1 = BSScriptRead8(gBattlescriptCurrInstr + 1); + arg2 = BSScriptRead8(gBattlescriptCurrInstr + 2); + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect_atk = gEnigmaBerries[gBankAttacker].holdEffect; + else + hold_effect_atk = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + + choiced_move_atk = (u16*)(gBankAttacker * 0x020160e8); + if (BATTLE_STRUCT->dynamicMoveType) + move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + else + move_type = gBattleMoves[gCurrentMove].type; + + do + { + switch (BATTLE_STRUCT->cmd49StateTracker) + { + case 0: //rage check + if (gBattleMons[gBankTarget].status2 & STATUS2_RAGE + && gBattleMons[gBankTarget].hp && gBankAttacker != gBankTarget + && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget) + && !(gBattleMoveFlags & MOVE_NO_EFFECT) && TargetTurnDamaged + && gBattleMoves[gCurrentMove].power && gBattleMons[gBankTarget].statStages[ATK_BUFF] <= 0xB) + { + gBattleMons[gBankTarget].statStages[ATK_BUFF]++; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = gUnknown_081D9132; + effect = 1; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 1: //defrosting check + if (gBattleMons[gBankTarget].status1 & STATUS_FREEZE + && gBattleMons[gBankTarget].hp && gBankAttacker != gBankTarget + && gSpecialStatuses[gBankTarget].moveturnLostHP + && !(gBattleMoveFlags & MOVE_NO_EFFECT) && move_type == TYPE_FIRE) + { + gBattleMons[gBankTarget].status1 &= ~(STATUS_FREEZE); + gActiveBank = gBankTarget; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); + MarkBufferBankForExecution(gActiveBank); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = gUnknown_081D955D; + effect = 1; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 2: //target synchronize + if (AbilityBattleEffects(ABILITY_TARGET_SYNCHRONIZE, gBankTarget, 0, 0, 0)) + effect = 1; + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 3: //contact abilities + if (AbilityBattleEffects(ABILITY_CONTACT, gBankTarget, 0, 0, 0)) + effect = 1; + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 4: //status immunities + if (AbilityBattleEffects(ABILITY_STATUS_IMMUNNITY, 0, 0, 0, 0)) + effect = 1; //it loops through 4 banks, so we increment after its done with all banks + else + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 5: //attacker synchronize + if (AbilityBattleEffects(ABILITY_ATK_SYNCHRONIZE, gBankAttacker, 0, 0, 0)) + effect = 1; + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 6: //update choice band move + if (gHitMarker & HITMARKER_OBEYS && hold_effect_atk == HOLD_EFFECT_CHOICE_BAND + && gLastUsedMove != MOVE_STRUGGLE && (*choiced_move_atk == 0 || *choiced_move_atk == 0xFFF) + && gLastUsedMove != MOVE_BATON_PASS && !(gBattleMoveFlags & MOVE_NO_EFFECT)) + { + *choiced_move_atk = gLastUsedMove; + for (i = 0; i < 4 && gBattleMons[gBankAttacker].moves[i] != *choiced_move_atk; i++){} + if (i == 4) + *choiced_move_atk = 0; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 7: //changed held items + for (i = 0; i < gNoOfAllBanks; i++) + { + #define CHANGED_ITEM (((*u16)(0x020160f0))) + if (CHANGED_ITEM(i)) + gBattleMons[i].item = CHANGED_ITEM(i); + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 8: //make sprite invisible + if (gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER) + && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + gActiveBank = gBankAttacker; + EmitSpriteInvisibility(0, 1); + MarkBufferBankForExecution(gActiveBank); + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + //sub_8015660 CheckIfMoveFailed + case 9: //semi-invlurneable attacker make visible + if (!(gBattleMoveFlags & MOVE_NO_EFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + || sub_8015660(gBankAttacker)) + { + gActiveBank = gBankAttacker; + EmitSpriteInvisibility(0, 0); + MarkBufferBankForExecution(gActiveBank); + gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); + gSpecialStatuses[gBankAttacker].restored_bank_sprite = 1; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 10: //semi-invlurneable target make visible + if (!(gBattleMoveFlags & MOVE_NO_EFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + || sub_8015660(gBankTarget)) + { + gActiveBank = gBankTarget; + EmitSpriteInvisibility(0, 0); + MarkBufferBankForExecution(gActiveBank); + gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); + gSpecialStatuses[gBankTarget].restored_bank_sprite = 1; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 11: // + } + + } while (effect == 0) +} +#else +__attribute__((naked)) +static void atk49_moveendturn(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x18\n\ + movs r0, 0\n\ + mov r10, r0\n\ + ldr r0, _08021834 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + ldrb r1, [r0, 0x1]\n\ + str r1, [sp, 0x10]\n\ + ldrb r0, [r0, 0x2]\n\ + str r0, [sp, 0x14]\n\ + ldr r1, _08021838 @ =gBattleMons\n\ + ldr r0, _0802183C @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r1, r0, r1\n\ + ldrh r0, [r1, 0x2E]\n\ + cmp r0, 0xAF\n\ + bne _08021844\n\ + ldr r1, _08021840 @ =gEnigmaBerries\n\ + lsls r0, r2, 3\n\ + subs r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x7]\n\ + b _0802184E\n\ + .align 2, 0\n\ +_08021834: .4byte gBattlescriptCurrInstr\n\ +_08021838: .4byte gBattleMons\n\ +_0802183C: .4byte gBankAttacker\n\ +_08021840: .4byte gEnigmaBerries\n\ +_08021844:\n\ + ldrh r0, [r1, 0x2E]\n\ + bl ItemId_GetHoldEffect\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ +_0802184E:\n\ + str r0, [sp, 0x8]\n\ + ldr r0, _0802186C @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + lsls r1, 1\n\ + ldr r0, _08021870 @ =0x020160e8\n\ + adds r1, r0\n\ + str r1, [sp, 0xC]\n\ + subs r0, 0xCC\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _080218C0\n\ + movs r2, 0x3F\n\ + ands r2, r0\n\ + str r2, [sp, 0x4]\n\ + b _080218D2\n\ + .align 2, 0\n\ +_0802186C: .4byte gBankAttacker\n\ +_08021870: .4byte 0x020160e8\n\ +_08021874:\n\ + strb r2, [r7]\n\ + ldr r0, [r5]\n\ + orrs r0, r6\n\ + str r0, [r5]\n\ + ldr r0, _080218AC @ =0x02000000\n\ + ldr r3, _080218B0 @ =0x0001600c\n\ + adds r0, r3\n\ + strb r4, [r0]\n\ + bl MoveValuesCleanUp\n\ + ldr r2, _080218B4 @ =gBattleScriptsEffectsTable\n\ + mov r4, r8\n\ + ldrh r1, [r4]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + bl b_movescr_stack_push\n\ + ldr r1, _080218B8 @ =gBattlescriptCurrInstr\n\ + ldr r0, _080218BC @ =gUnknown_081D9B2D\n\ + bl _0802229C\n\ + .align 2, 0\n\ +_080218AC: .4byte 0x02000000\n\ +_080218B0: .4byte 0x0001600c\n\ +_080218B4: .4byte gBattleScriptsEffectsTable\n\ +_080218B8: .4byte gBattlescriptCurrInstr\n\ +_080218BC: .4byte gUnknown_081D9B2D\n\ +_080218C0:\n\ + ldr r2, _080218D8 @ =gBattleMoves\n\ + ldr r0, _080218DC @ =gCurrentMove\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x2]\n\ + str r0, [sp, 0x4]\n\ +_080218D2:\n\ + ldr r5, _080218E0 @ =0x02000000\n\ + mov r12, r5\n\ + b _080218EE\n\ + .align 2, 0\n\ +_080218D8: .4byte gBattleMoves\n\ +_080218DC: .4byte gCurrentMove\n\ +_080218E0: .4byte 0x02000000\n\ +_080218E4:\n\ + mov r0, r10\n\ + cmp r0, 0\n\ + beq _080218EE\n\ + bl _08022286\n\ +_080218EE:\n\ + ldr r0, _08021908 @ =0x0001600c\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + bls _080218FC\n\ + bl _0802224E\n\ +_080218FC:\n\ + lsls r0, 2\n\ + ldr r1, _0802190C @ =_08021910\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08021908: .4byte 0x0001600c\n\ +_0802190C: .4byte _08021910\n\ + .align 2, 0\n\ +_08021910:\n\ + .4byte _08021958\n\ + .4byte _08021A34\n\ + .4byte _08021AF0\n\ + .4byte _08021B20\n\ + .4byte _08021B44\n\ + .4byte _08021B78\n\ + .4byte _08021B9C\n\ + .4byte _08021C40\n\ + .4byte _08021C78\n\ + .4byte _08021CA8\n\ + .4byte _08021CCC\n\ + .4byte _08021D18\n\ + .4byte _08021DAC\n\ + .4byte _08021E30\n\ + .4byte _08021E70\n\ + .4byte _08022068\n\ + .4byte _080221C0\n\ + .4byte _0802224E\n\ +_08021958:\n\ + ldr r5, _08021A08 @ =gBattleMons\n\ + ldr r2, _08021A0C @ =gBankTarget\n\ + ldrb r4, [r2]\n\ + movs r6, 0x58\n\ + adds r3, r4, 0\n\ + muls r3, r6\n\ + adds r0, r5, 0\n\ + adds r0, 0x50\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 16\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080219FE\n\ + adds r0, r3, r5\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + beq _080219FE\n\ + ldr r0, _08021A10 @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + cmp r1, r4\n\ + beq _080219FE\n\ + adds r0, r1, 0\n\ + bl GetBankSide\n\ + adds r4, r0, 0\n\ + ldr r1, _08021A0C @ =gBankTarget\n\ + ldrb r0, [r1]\n\ + bl GetBankSide\n\ + lsls r4, 24\n\ + lsls r0, 24\n\ + cmp r4, r0\n\ + beq _080219FE\n\ + ldr r0, _08021A14 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080219FE\n\ + ldr r2, _08021A18 @ =gProtectStructs\n\ + ldr r4, _08021A0C @ =gBankTarget\n\ + ldrb r3, [r4]\n\ + lsls r1, r3, 4\n\ + adds r0, r2, 0x4\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _080219C8\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _080219FE\n\ +_080219C8:\n\ + ldr r2, _08021A1C @ =gBattleMoves\n\ + ldr r0, _08021A20 @ =gCurrentMove\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x1]\n\ + cmp r0, 0\n\ + beq _080219FE\n\ + adds r0, r3, 0\n\ + muls r0, r6\n\ + adds r1, r0, r5\n\ + ldrb r2, [r1, 0x19]\n\ + movs r0, 0x19\n\ + ldrsb r0, [r1, r0]\n\ + cmp r0, 0xB\n\ + bgt _080219FE\n\ + adds r0, r2, 0x1\n\ + strb r0, [r1, 0x19]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08021A24 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08021A28 @ =gUnknown_081D9132\n\ + str r0, [r1]\n\ + movs r5, 0x1\n\ + mov r10, r5\n\ +_080219FE:\n\ + ldr r2, _08021A2C @ =0x02000000\n\ + ldr r0, _08021A30 @ =0x0001600c\n\ + adds r1, r2, r0\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021A08: .4byte gBattleMons\n\ +_08021A0C: .4byte gBankTarget\n\ +_08021A10: .4byte gBankAttacker\n\ +_08021A14: .4byte gBattleMoveFlags\n\ +_08021A18: .4byte gProtectStructs\n\ +_08021A1C: .4byte gBattleMoves\n\ +_08021A20: .4byte gCurrentMove\n\ +_08021A24: .4byte gBattlescriptCurrInstr\n\ +_08021A28: .4byte gUnknown_081D9132\n\ +_08021A2C: .4byte 0x02000000\n\ +_08021A30: .4byte 0x0001600c\n\ +_08021A34:\n\ + ldr r2, _08021AD0 @ =gBattleMons\n\ + ldr r1, _08021AD4 @ =gBankTarget\n\ + ldrb r4, [r1]\n\ + movs r3, 0x58\n\ + mov r12, r3\n\ + mov r3, r12\n\ + muls r3, r4\n\ + adds r7, r2, 0\n\ + adds r7, 0x4C\n\ + adds r6, r3, r7\n\ + ldr r5, [r6]\n\ + movs r0, 0x20\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _08021A54\n\ + b _08021DFA\n\ +_08021A54:\n\ + adds r0, r3, r2\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _08021A5E\n\ + b _08021DFA\n\ +_08021A5E:\n\ + ldr r0, _08021AD8 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + cmp r0, r4\n\ + bne _08021A68\n\ + b _08021DFA\n\ +_08021A68:\n\ + ldr r0, _08021ADC @ =gSpecialStatuses\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 2\n\ + adds r0, 0xC\n\ + adds r1, r0\n\ + ldr r0, [r1]\n\ + cmp r0, 0\n\ + bne _08021A7C\n\ + b _08021DFA\n\ +_08021A7C:\n\ + ldr r0, _08021AE0 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021A8A\n\ + b _08021DFA\n\ +_08021A8A:\n\ + ldr r4, [sp, 0x4]\n\ + cmp r4, 0xA\n\ + beq _08021A92\n\ + b _08021DFA\n\ +_08021A92:\n\ + movs r0, 0x21\n\ + negs r0, r0\n\ + ands r5, r0\n\ + str r5, [r6]\n\ + ldr r4, _08021AE4 @ =gActiveBank\n\ + ldr r5, _08021AD4 @ =gBankTarget\n\ + ldrb r0, [r5]\n\ + strb r0, [r4]\n\ + ldrb r0, [r5]\n\ + mov r1, r12\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r7\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x28\n\ + movs r2, 0\n\ + movs r3, 0x4\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08021AE8 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08021AEC @ =gUnknown_081D955D\n\ + str r0, [r1]\n\ + movs r2, 0x1\n\ + mov r10, r2\n\ + b _08021DFA\n\ + .align 2, 0\n\ +_08021AD0: .4byte gBattleMons\n\ +_08021AD4: .4byte gBankTarget\n\ +_08021AD8: .4byte gBankAttacker\n\ +_08021ADC: .4byte gSpecialStatuses\n\ +_08021AE0: .4byte gBattleMoveFlags\n\ +_08021AE4: .4byte gActiveBank\n\ +_08021AE8: .4byte gBattlescriptCurrInstr\n\ +_08021AEC: .4byte gUnknown_081D955D\n\ +_08021AF0:\n\ + ldr r0, _08021B14 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x7\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021B0C\n\ + movs r4, 0x1\n\ + mov r10, r4\n\ +_08021B0C:\n\ + ldr r2, _08021B18 @ =0x02000000\n\ + ldr r5, _08021B1C @ =0x0001600c\n\ + adds r1, r2, r5\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021B14: .4byte gBankTarget\n\ +_08021B18: .4byte 0x02000000\n\ +_08021B1C: .4byte 0x0001600c\n\ +_08021B20:\n\ + ldr r0, _08021B40 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x4\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08021B3A\n\ + b _08021DFA\n\ +_08021B3A:\n\ + movs r0, 0x1\n\ + mov r10, r0\n\ + b _08021DFA\n\ + .align 2, 0\n\ +_08021B40: .4byte gBankTarget\n\ +_08021B44:\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x5\n\ + movs r1, 0\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021B68\n\ + movs r4, 0x1\n\ + mov r10, r4\n\ + ldr r5, _08021B64 @ =0x02000000\n\ + mov r12, r5\n\ + b _0802224E\n\ + .align 2, 0\n\ +_08021B64: .4byte 0x02000000\n\ +_08021B68:\n\ + ldr r2, _08021B70 @ =0x02000000\n\ + ldr r0, _08021B74 @ =0x0001600c\n\ + adds r1, r2, r0\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021B70: .4byte 0x02000000\n\ +_08021B74: .4byte 0x0001600c\n\ +_08021B78:\n\ + ldr r0, _08021B98 @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x8\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08021B92\n\ + b _08021DFA\n\ +_08021B92:\n\ + movs r1, 0x1\n\ + mov r10, r1\n\ + b _08021DFA\n\ + .align 2, 0\n\ +_08021B98: .4byte gBankAttacker\n\ +_08021B9C:\n\ + ldr r0, _08021C28 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021BE0\n\ + ldr r4, [sp, 0x8]\n\ + cmp r4, 0x1D\n\ + bne _08021BE0\n\ + ldr r0, _08021C2C @ =gUnknown_02024BE8\n\ + ldrh r2, [r0]\n\ + adds r7, r0, 0\n\ + cmp r2, 0xA5\n\ + beq _08021BE0\n\ + ldr r5, [sp, 0xC]\n\ + ldrh r1, [r5]\n\ + cmp r1, 0\n\ + beq _08021BC8\n\ + ldr r0, _08021C30 @ =0x0000ffff\n\ + cmp r1, r0\n\ + bne _08021BE0\n\ +_08021BC8:\n\ + cmp r2, 0xE2\n\ + bne _08021BDA\n\ + ldr r0, _08021C34 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021BDA\n\ + b _08022244\n\ +_08021BDA:\n\ + ldrh r0, [r7]\n\ + ldr r1, [sp, 0xC]\n\ + strh r0, [r1]\n\ +_08021BE0:\n\ + movs r4, 0\n\ + ldr r2, _08021C38 @ =gBattleMons\n\ + ldr r3, _08021C3C @ =gBankAttacker\n\ + ldrb r1, [r3]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r2, 0xC\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + ldr r5, [sp, 0xC]\n\ + ldrh r1, [r5]\n\ + mov r9, r3\n\ + cmp r0, r1\n\ + beq _08021C18\n\ + mov r6, r9\n\ + movs r3, 0x58\n\ + adds r5, r1, 0\n\ +_08021C02:\n\ + adds r4, 0x1\n\ + cmp r4, 0x3\n\ + bgt _08021C18\n\ + lsls r0, r4, 1\n\ + ldrb r1, [r6]\n\ + muls r1, r3\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + cmp r0, r5\n\ + bne _08021C02\n\ +_08021C18:\n\ + cmp r4, 0x4\n\ + beq _08021C1E\n\ + b _08022244\n\ +_08021C1E:\n\ + movs r0, 0\n\ + ldr r1, [sp, 0xC]\n\ +_08021C22:\n\ + strh r0, [r1]\n\ + b _08022244\n\ + .align 2, 0\n\ +_08021C28: .4byte gHitMarker\n\ +_08021C2C: .4byte gUnknown_02024BE8\n\ +_08021C30: .4byte 0x0000ffff\n\ +_08021C34: .4byte gBattleMoveFlags\n\ +_08021C38: .4byte gBattleMons\n\ +_08021C3C: .4byte gBankAttacker\n\ +_08021C40:\n\ + movs r4, 0\n\ + ldr r0, _08021C6C @ =gNoOfAllBanks\n\ + ldrb r2, [r0]\n\ + cmp r4, r2\n\ + blt _08021C4C\n\ + b _08022244\n\ +_08021C4C:\n\ + movs r5, 0\n\ + ldr r2, _08021C70 @ =0x020160f0\n\ + ldr r3, _08021C74 @ =gBattleMons\n\ +_08021C52:\n\ + ldrh r1, [r2]\n\ + cmp r1, 0\n\ + beq _08021C5C\n\ + strh r1, [r3, 0x2E]\n\ + strh r5, [r2]\n\ +_08021C5C:\n\ + adds r2, 0x2\n\ + adds r3, 0x58\n\ + adds r4, 0x1\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + blt _08021C52\n\ + b _08022244\n\ + .align 2, 0\n\ +_08021C6C: .4byte gNoOfAllBanks\n\ +_08021C70: .4byte 0x020160f0\n\ +_08021C74: .4byte gBattleMons\n\ +_08021C78:\n\ + movs r0, 0x3\n\ + movs r1, 0\n\ + movs r2, 0\n\ + bl ItemBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021C98\n\ + movs r2, 0x1\n\ + mov r10, r2\n\ + ldr r3, _08021C94 @ =0x02000000\n\ + mov r12, r3\n\ + b _0802224E\n\ + .align 2, 0\n\ +_08021C94: .4byte 0x02000000\n\ +_08021C98:\n\ + ldr r2, _08021CA0 @ =0x02000000\n\ + ldr r4, _08021CA4 @ =0x0001600c\n\ + adds r1, r2, r4\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021CA0: .4byte 0x02000000\n\ +_08021CA4: .4byte 0x0001600c\n\ +_08021CA8:\n\ + movs r0, 0x4\n\ + movs r1, 0\n\ + movs r2, 0\n\ + bl ItemBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021CBC\n\ + movs r5, 0x1\n\ + mov r10, r5\n\ +_08021CBC:\n\ + ldr r2, _08021CC4 @ =0x02000000\n\ + ldr r0, _08021CC8 @ =0x0001600c\n\ + adds r1, r2, r0\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021CC4: .4byte 0x02000000\n\ +_08021CC8: .4byte 0x0001600c\n\ +_08021CCC:\n\ + ldr r1, _08021D04 @ =gStatuses3\n\ + ldr r0, _08021D08 @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _08021D0C @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021CE2\n\ + b _08021DFA\n\ +_08021CE2:\n\ + ldr r0, _08021D10 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021CF0\n\ + b _08021DFA\n\ +_08021CF0:\n\ + ldr r4, _08021D14 @ =gActiveBank\n\ + strb r2, [r4]\n\ + movs r0, 0\n\ + movs r1, 0x1\n\ + bl EmitSpriteInvisibility\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08021DFA\n\ + .align 2, 0\n\ +_08021D04: .4byte gStatuses3\n\ +_08021D08: .4byte gBankAttacker\n\ +_08021D0C: .4byte 0x000400c0\n\ +_08021D10: .4byte gHitMarker\n\ +_08021D14: .4byte gActiveBank\n\ +_08021D18:\n\ + ldr r0, _08021D88 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021D44\n\ + ldr r1, _08021D8C @ =gStatuses3\n\ + ldr r0, _08021D90 @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _08021D94 @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021D44\n\ + adds r0, r2, 0\n\ + bl sub_8015660\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021D7E\n\ +_08021D44:\n\ + ldr r4, _08021D98 @ =gActiveBank\n\ + ldr r5, _08021D90 @ =gBankAttacker\n\ + ldrb r0, [r5]\n\ + strb r0, [r4]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl EmitSpriteInvisibility\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _08021D8C @ =gStatuses3\n\ + ldrb r2, [r5]\n\ + lsls r2, 2\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + ldr r1, _08021D9C @ =0xfffbff3f\n\ + ands r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _08021DA0 @ =gSpecialStatuses\n\ + ldrb r1, [r5]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r2, 0x4\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_08021D7E:\n\ + ldr r2, _08021DA4 @ =0x02000000\n\ + ldr r4, _08021DA8 @ =0x0001600c\n\ + adds r1, r2, r4\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021D88: .4byte gBattleMoveFlags\n\ +_08021D8C: .4byte gStatuses3\n\ +_08021D90: .4byte gBankAttacker\n\ +_08021D94: .4byte 0x000400c0\n\ +_08021D98: .4byte gActiveBank\n\ +_08021D9C: .4byte 0xfffbff3f\n\ +_08021DA0: .4byte gSpecialStatuses\n\ +_08021DA4: .4byte 0x02000000\n\ +_08021DA8: .4byte 0x0001600c\n\ +_08021DAC:\n\ + ldr r2, _08021E0C @ =gSpecialStatuses\n\ + ldr r1, _08021E10 @ =gBankTarget\n\ + ldrb r3, [r1]\n\ + lsls r4, r3, 2\n\ + adds r0, r4, r3\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 29\n\ + cmp r0, 0\n\ + blt _08021DFA\n\ + ldr r0, _08021E14 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + bcs _08021DFA\n\ + ldr r5, _08021E18 @ =gStatuses3\n\ + adds r0, r4, r5\n\ + ldr r0, [r0]\n\ + ldr r1, _08021E1C @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021DFA\n\ + ldr r4, _08021E20 @ =gActiveBank\n\ + strb r3, [r4]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl EmitSpriteInvisibility\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _08021E10 @ =gBankTarget\n\ + ldrb r2, [r0]\n\ + lsls r2, 2\n\ + adds r2, r5\n\ + ldr r0, [r2]\n\ + ldr r1, _08021E24 @ =0xfffbff3f\n\ + ands r0, r1\n\ + str r0, [r2]\n\ +_08021DFA:\n\ + ldr r2, _08021E28 @ =0x02000000\n\ + ldr r3, _08021E2C @ =0x0001600c\n\ + adds r1, r2, r3\n\ +_08021E00:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + mov r12, r2\n\ + b _0802224E\n\ + .align 2, 0\n\ +_08021E0C: .4byte gSpecialStatuses\n\ +_08021E10: .4byte gBankTarget\n\ +_08021E14: .4byte gNoOfAllBanks\n\ +_08021E18: .4byte gStatuses3\n\ +_08021E1C: .4byte 0x000400c0\n\ +_08021E20: .4byte gActiveBank\n\ +_08021E24: .4byte 0xfffbff3f\n\ +_08021E28: .4byte 0x02000000\n\ +_08021E2C: .4byte 0x0001600c\n\ +_08021E30:\n\ + movs r4, 0\n\ + ldr r0, _08021E60 @ =gNoOfAllBanks\n\ + ldrb r5, [r0]\n\ + cmp r4, r5\n\ + blt _08021E3C\n\ + b _08022244\n\ +_08021E3C:\n\ + ldr r2, _08021E64 @ =gDisableStructs\n\ + ldr r5, _08021E68 @ =0xfeffffff\n\ + adds r3, r0, 0\n\ + ldr r1, _08021E6C @ =gUnknown_02024AD0\n\ +_08021E44:\n\ + ldrb r0, [r2, 0xA]\n\ + cmp r0, 0\n\ + bne _08021E50\n\ + ldr r0, [r1]\n\ + ands r0, r5\n\ + str r0, [r1]\n\ +_08021E50:\n\ + adds r2, 0x1C\n\ + adds r1, 0x58\n\ + adds r4, 0x1\n\ + ldrb r0, [r3]\n\ + cmp r4, r0\n\ + blt _08021E44\n\ + b _08022244\n\ + .align 2, 0\n\ +_08021E60: .4byte gNoOfAllBanks\n\ +_08021E64: .4byte gDisableStructs\n\ +_08021E68: .4byte 0xfeffffff\n\ +_08021E6C: .4byte gUnknown_02024AD0\n\ +_08021E70:\n\ + ldr r1, _08021F2C @ =gHitMarker\n\ + ldr r3, [r1]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + ands r0, r3\n\ + ldr r2, _08021F30 @ =gBankAttacker\n\ + mov r9, r2\n\ + adds r5, r1, 0\n\ + cmp r0, 0\n\ + beq _08021E9A\n\ + ldr r0, _08021F34 @ =gActiveBank\n\ + ldrb r2, [r2]\n\ + strb r2, [r0]\n\ + ldr r1, _08021F38 @ =gBankTarget\n\ + ldrb r0, [r1]\n\ + mov r4, r9\n\ + strb r0, [r4]\n\ + strb r2, [r1]\n\ + ldr r0, _08021F3C @ =0xffffefff\n\ + ands r3, r0\n\ + str r3, [r5]\n\ +_08021E9A:\n\ + ldr r1, _08021F40 @ =gBattleMoves\n\ + ldr r2, _08021F44 @ =gUnknown_02024BE8\n\ + ldrh r3, [r2]\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + mov r8, r1\n\ + adds r7, r2, 0\n\ + cmp r0, 0x7F\n\ + bne _08021EBE\n\ + ldr r0, _08021F48 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021ECA\n\ +_08021EBE:\n\ + ldr r1, _08021F4C @ =gUnknown_02024C2C\n\ + mov r2, r9\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + strh r3, [r0]\n\ +_08021ECA:\n\ + ldr r0, _08021F50 @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r2, _08021F54 @ =gBitTable\n\ + mov r3, r9\n\ + ldrb r4, [r3]\n\ + lsls r0, r4, 2\n\ + adds r0, r2\n\ + ldr r3, [r0]\n\ + ands r1, r3\n\ + adds r6, r2, 0\n\ + cmp r1, 0\n\ + beq _08021EE4\n\ + b _08022244\n\ +_08021EE4:\n\ + ldr r0, _08021F58 @ =0x000160a6\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08021EF2\n\ + b _08022244\n\ +_08021EF2:\n\ + ldrh r2, [r7]\n\ + lsls r0, r2, 1\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + add r0, r8\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x7F\n\ + bne _08021F04\n\ + b _08022244\n\ +_08021F04:\n\ + ldr r0, [r5]\n\ + movs r1, 0x80\n\ + lsls r1, 18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021F68\n\ + ldr r1, _08021F5C @ =gLastUsedMove\n\ + lsls r0, r4, 1\n\ + adds r0, r1\n\ + strh r2, [r0]\n\ + ldr r0, _08021F60 @ =gUnknown_02024C4C\n\ + mov r4, r9\n\ + ldrb r1, [r4]\n\ + lsls r1, 1\n\ + adds r1, r0\n\ + ldr r0, _08021F64 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + b _08021F82\n\ + .align 2, 0\n\ +_08021F2C: .4byte gHitMarker\n\ +_08021F30: .4byte gBankAttacker\n\ +_08021F34: .4byte gActiveBank\n\ +_08021F38: .4byte gBankTarget\n\ +_08021F3C: .4byte 0xffffefff\n\ +_08021F40: .4byte gBattleMoves\n\ +_08021F44: .4byte gUnknown_02024BE8\n\ +_08021F48: .4byte gBattleMoveFlags\n\ +_08021F4C: .4byte gUnknown_02024C2C\n\ +_08021F50: .4byte gAbsentBankFlags\n\ +_08021F54: .4byte gBitTable\n\ +_08021F58: .4byte 0x000160a6\n\ +_08021F5C: .4byte gLastUsedMove\n\ +_08021F60: .4byte gUnknown_02024C4C\n\ +_08021F64: .4byte gCurrentMove\n\ +_08021F68:\n\ + ldr r1, _08021FD0 @ =gLastUsedMove\n\ + lsls r0, r4, 1\n\ + adds r0, r1\n\ + ldr r1, _08021FD4 @ =0x0000ffff\n\ + strh r1, [r0]\n\ + ldr r1, _08021FD8 @ =gUnknown_02024C4C\n\ + mov r2, r9\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + strh r1, [r0]\n\ +_08021F82:\n\ + ldr r2, _08021FDC @ =gBankTarget\n\ + ldrb r3, [r2]\n\ + lsls r0, r3, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + lsls r0, 28\n\ + ldr r1, [r5]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08021FA0\n\ + ldr r0, _08021FE0 @ =gUnknown_02024C5C\n\ + adds r0, r3, r0\n\ + mov r3, r9\n\ + ldrb r1, [r3]\n\ + strb r1, [r0]\n\ +_08021FA0:\n\ + ldr r0, [r5]\n\ + movs r1, 0x80\n\ + lsls r1, 18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802204C\n\ + ldr r0, _08021FE4 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0802204C\n\ + ldrh r2, [r7]\n\ + ldr r0, _08021FD4 @ =0x0000ffff\n\ + cmp r2, r0\n\ + bne _08021FEC\n\ + ldr r1, _08021FE8 @ =gMoveHitWith\n\ + ldr r4, _08021FDC @ =gBankTarget\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + strh r2, [r0]\n\ + b _08022244\n\ + .align 2, 0\n\ +_08021FD0: .4byte gLastUsedMove\n\ +_08021FD4: .4byte 0x0000ffff\n\ +_08021FD8: .4byte gUnknown_02024C4C\n\ +_08021FDC: .4byte gBankTarget\n\ +_08021FE0: .4byte gUnknown_02024C5C\n\ +_08021FE4: .4byte gBattleMoveFlags\n\ +_08021FE8: .4byte gMoveHitWith\n\ +_08021FEC:\n\ + ldr r0, _08022014 @ =gMoveHitWith\n\ + ldr r5, _08022018 @ =gBankTarget\n\ + ldrb r1, [r5]\n\ + lsls r1, 1\n\ + adds r1, r0\n\ + ldr r4, _0802201C @ =gCurrentMove\n\ + ldrh r0, [r4]\n\ + strh r0, [r1]\n\ + ldr r0, _08022020 @ =0x0001601c\n\ + add r0, r12\n\ + ldrb r3, [r0]\n\ + cmp r3, 0\n\ + beq _08022028\n\ + ldr r0, _08022024 @ =gUnknown_02024C44\n\ + ldrb r1, [r5]\n\ + lsls r1, 1\n\ + adds r1, r0\n\ + movs r0, 0x3F\n\ + ands r0, r3\n\ + b _08021C22\n\ + .align 2, 0\n\ +_08022014: .4byte gMoveHitWith\n\ +_08022018: .4byte gBankTarget\n\ +_0802201C: .4byte gCurrentMove\n\ +_08022020: .4byte 0x0001601c\n\ +_08022024: .4byte gUnknown_02024C44\n\ +_08022028:\n\ + ldr r0, _08022044 @ =gUnknown_02024C44\n\ + ldr r1, _08022048 @ =gBankTarget\n\ + ldrb r2, [r1]\n\ + lsls r2, 1\n\ + adds r2, r0\n\ + ldrh r1, [r4]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + add r0, r8\n\ + ldrb r0, [r0, 0x2]\n\ + strh r0, [r2]\n\ + b _08022244\n\ + .align 2, 0\n\ +_08022044: .4byte gUnknown_02024C44\n\ +_08022048: .4byte gBankTarget\n\ +_0802204C:\n\ + ldr r0, _0802205C @ =gMoveHitWith\n\ + ldr r2, _08022060 @ =gBankTarget\n\ + ldrb r1, [r2]\n\ + lsls r1, 1\n\ + adds r1, r0\n\ + ldr r0, _08022064 @ =0x0000ffff\n\ + b _08021C22\n\ + .align 2, 0\n\ +_0802205C: .4byte gMoveHitWith\n\ +_08022060: .4byte gBankTarget\n\ +_08022064: .4byte 0x0000ffff\n\ +_08022068:\n\ + ldr r0, _0802212C @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r6, _08022130 @ =gBitTable\n\ + ldr r2, _08022134 @ =gBankAttacker\n\ + ldrb r5, [r2]\n\ + lsls r0, r5, 2\n\ + adds r0, r6\n\ + ldr r4, [r0]\n\ + ands r1, r4\n\ + mov r9, r2\n\ + cmp r1, 0\n\ + beq _08022082\n\ + b _08022244\n\ +_08022082:\n\ + ldr r0, _08022138 @ =0x000160a6\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + beq _08022090\n\ + b _08022244\n\ +_08022090:\n\ + ldr r1, _0802213C @ =gBattleMoves\n\ + ldr r4, _08022140 @ =gUnknown_02024BE8\n\ + ldrh r3, [r4]\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x8]\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802215C\n\ + ldr r0, _08022144 @ =gHitMarker\n\ + ldr r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802215C\n\ + ldr r2, _08022148 @ =gBankTarget\n\ + ldrb r0, [r2]\n\ + cmp r5, r0\n\ + bne _080220C0\n\ + b _08022244\n\ +_080220C0:\n\ + adds r2, r0, 0\n\ + lsls r0, r2, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + lsls r0, 28\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _0802215C\n\ + ldr r0, _0802214C @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0802215C\n\ + lsls r0, r2, 1\n\ + ldr r5, _08022150 @ =0x000160ac\n\ + adds r0, r5\n\ + add r0, r12\n\ + strb r3, [r0]\n\ + ldr r0, _08022148 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + lsls r1, 1\n\ + ldr r2, _08022154 @ =0x000160ad\n\ + adds r1, r2\n\ + add r1, r12\n\ + ldrh r0, [r4]\n\ + lsrs r0, 8\n\ + strb r0, [r1]\n\ + ldr r3, _08022148 @ =gBankTarget\n\ + ldrb r2, [r3]\n\ + lsls r2, 2\n\ + mov r5, r9\n\ + ldrb r0, [r5]\n\ + lsrs r0, 1\n\ + lsls r0, 1\n\ + ldr r1, _08022158 @ =0x00016100\n\ + adds r0, r1\n\ + adds r2, r0\n\ + add r2, r12\n\ + ldrh r0, [r4]\n\ + strb r0, [r2]\n\ + ldrb r2, [r3]\n\ + lsls r2, 2\n\ + ldrb r0, [r5]\n\ + lsrs r0, 1\n\ + lsls r0, 1\n\ + adds r1, 0x1\n\ + adds r0, r1\n\ + adds r2, r0\n\ + add r2, r12\n\ + ldrh r0, [r4]\n\ + lsrs r0, 8\n\ + strb r0, [r2]\n\ + b _08022244\n\ + .align 2, 0\n\ +_0802212C: .4byte gAbsentBankFlags\n\ +_08022130: .4byte gBitTable\n\ +_08022134: .4byte gBankAttacker\n\ +_08022138: .4byte 0x000160a6\n\ +_0802213C: .4byte gBattleMoves\n\ +_08022140: .4byte gUnknown_02024BE8\n\ +_08022144: .4byte gHitMarker\n\ +_08022148: .4byte gBankTarget\n\ +_0802214C: .4byte gBattleMoveFlags\n\ +_08022150: .4byte 0x000160ac\n\ +_08022154: .4byte 0x000160ad\n\ +_08022158: .4byte 0x00016100\n\ +_0802215C:\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + ldr r2, _080221B4 @ =gBankTarget\n\ + ldrb r2, [r2]\n\ + cmp r0, r2\n\ + beq _08022244\n\ + ldr r3, _080221B4 @ =gBankTarget\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + ldr r4, _080221B8 @ =0x000160ac\n\ + adds r0, r4\n\ + add r0, r12\n\ + movs r3, 0\n\ + strb r3, [r0]\n\ + ldr r5, _080221B4 @ =gBankTarget\n\ + ldrb r0, [r5]\n\ + lsls r0, 1\n\ + ldr r1, _080221BC @ =0x000160ad\n\ + adds r0, r1\n\ + add r0, r12\n\ + strb r3, [r0]\n\ + ldrb r2, [r5]\n\ + lsls r2, 2\n\ + mov r4, r9\n\ + ldrb r0, [r4]\n\ + lsrs r0, 1\n\ + lsls r0, 1\n\ + adds r1, 0x53\n\ + adds r0, r1\n\ + adds r2, r0\n\ + add r2, r12\n\ + strb r3, [r2]\n\ + ldrb r2, [r5]\n\ + lsls r2, 2\n\ + ldrb r0, [r4]\n\ + lsrs r0, 1\n\ + lsls r0, 1\n\ + adds r1, 0x1\n\ + adds r0, r1\n\ + adds r2, r0\n\ + add r2, r12\n\ + strb r3, [r2]\n\ + b _08022244\n\ + .align 2, 0\n\ +_080221B4: .4byte gBankTarget\n\ +_080221B8: .4byte 0x000160ac\n\ +_080221BC: .4byte 0x000160ad\n\ +_080221C0:\n\ + ldr r5, _080222B0 @ =gHitMarker\n\ + ldr r2, [r5]\n\ + movs r0, 0x80\n\ + lsls r0, 12\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _08022244\n\ + ldr r0, _080222B4 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08022244\n\ + ldr r1, _080222B8 @ =gProtectStructs\n\ + ldr r0, _080222BC @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x1]\n\ + lsls r0, 29\n\ + cmp r0, 0\n\ + blt _08022244\n\ + ldr r0, _080222C0 @ =gBattleMoves\n\ + mov r9, r0\n\ + ldr r1, _080222C4 @ =gCurrentMove\n\ + mov r8, r1\n\ + ldrh r0, [r1]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + add r1, r9\n\ + ldrb r0, [r1, 0x6]\n\ + cmp r0, 0x8\n\ + bne _08022244\n\ + movs r6, 0x80\n\ + lsls r6, 2\n\ + adds r4, r6, 0\n\ + ands r4, r2\n\ + cmp r4, 0\n\ + bne _08022244\n\ + ldr r7, _080222C8 @ =gBankTarget\n\ + ldrb r0, [r7]\n\ + bl GetBankIdentity\n\ + movs r1, 0x2\n\ + eors r0, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetBankByPlayerAI\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r1, _080222CC @ =gBattleMons\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + beq _0802223A\n\ + bl _08021874\n\ +_0802223A:\n\ + ldr r0, [r5]\n\ + orrs r0, r6\n\ + str r0, [r5]\n\ + ldr r2, _080222D0 @ =0x02000000\n\ + mov r12, r2\n\ +_08022244:\n\ + ldr r1, _080222D4 @ =0x0001600c\n\ + add r1, r12\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ +_0802224E:\n\ + ldr r3, [sp, 0x10]\n\ + cmp r3, 0x1\n\ + bne _08022262\n\ + mov r4, r10\n\ + cmp r4, 0\n\ + bne _08022262\n\ + ldr r1, _080222D4 @ =0x0001600c\n\ + add r1, r12\n\ + movs r0, 0x11\n\ + strb r0, [r1]\n\ +_08022262:\n\ + ldr r5, [sp, 0x10]\n\ + cmp r5, 0x2\n\ + bne _08022278\n\ + ldr r1, _080222D4 @ =0x0001600c\n\ + add r1, r12\n\ + ldr r0, [sp, 0x14]\n\ + ldrb r2, [r1]\n\ + cmp r0, r2\n\ + bne _08022278\n\ + movs r0, 0x11\n\ + strb r0, [r1]\n\ +_08022278:\n\ + ldr r0, _080222D4 @ =0x0001600c\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + beq _08022286\n\ + bl _080218E4\n\ +_08022286:\n\ + ldr r0, _080222D4 @ =0x0001600c\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + bne _0802229E\n\ + mov r3, r10\n\ + cmp r3, 0\n\ + bne _0802229E\n\ + ldr r1, _080222D8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x3\n\ +_0802229C:\n\ + str r0, [r1]\n\ +_0802229E:\n\ + add sp, 0x18\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080222B0: .4byte gHitMarker\n\ +_080222B4: .4byte gBattleTypeFlags\n\ +_080222B8: .4byte gProtectStructs\n\ +_080222BC: .4byte gBankAttacker\n\ +_080222C0: .4byte gBattleMoves\n\ +_080222C4: .4byte gCurrentMove\n\ +_080222C8: .4byte gBankTarget\n\ +_080222CC: .4byte gBattleMons\n\ +_080222D0: .4byte 0x02000000\n\ +_080222D4: .4byte 0x0001600c\n\ +_080222D8: .4byte gBattlescriptCurrInstr\n\ + .syntax divided" + ); +} +#endif // NONMATCHING + +static void atk4A_typecalc2(void) +{ + u8 flags = 0; + int i = 0; + u8 move_type = gBattleMoves[gCurrentMove].type; + + if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) + { + gLastUsedAbility = gBattleMons[gBankTarget].ability; + gBattleMoveFlags |= (MOVE_MISSED | MOVE_NOTAFFECTED); + gMoveHitWith[gBankTarget] = 0; + gBattleCommunication[6] = move_type; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + else + { + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) + { + if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) {break;} + else {i += 3; continue;} + } + + if (gTypeEffectiveness[i] == move_type) + { + //check type1 + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1) + { + if (gTypeEffectiveness[i + 2] == 0) + { + gBattleMoveFlags |= MOVE_NOTAFFECTED; + break; + } + if (gTypeEffectiveness[i + 2] == 5) + flags |= MOVE_NOTVERYEFFECTIVE; + if (gTypeEffectiveness[i + 2] == 20) + flags |= MOVE_SUPEREFFECTIVE; + } + //check type2 + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2) + { + if (gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 + && gTypeEffectiveness[i + 2] == 0) + { + gBattleMoveFlags |= MOVE_NOTAFFECTED; + break; + } + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && gTypeEffectiveness[i + 2] == 5) + flags |= MOVE_NOTVERYEFFECTIVE; + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 + && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && gTypeEffectiveness[i + 2] == 20) + flags |= MOVE_SUPEREFFECTIVE; + } + } + i += 3; + } + } + + if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && !(flags & MOVE_NO_EFFECT) && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2 && + (!(flags & MOVE_SUPEREFFECTIVE) || ((flags & (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE)) == (MOVE_SUPEREFFECTIVE | MOVE_NOTVERYEFFECTIVE))) && + gBattleMoves[gCurrentMove].power) + { + gLastUsedAbility = ABILITY_WONDER_GUARD; + gBattleMoveFlags |= MOVE_MISSED; + gMoveHitWith[gBankTarget] = 0; + gBattleCommunication[6] = 3; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + if (gBattleMoveFlags & MOVE_NOTAFFECTED) + gProtectStructs[gBankAttacker].notEffective = 1; + + gBattlescriptCurrInstr++; +} + +static void atk4B_return_atk_to_ball(void) +{ + gActiveBank = gBankAttacker; + if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank))) + { + EmitReturnPokeToBall(0, 0); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr++; +} + +static void atk4C_copy_poke_data(void) +{ + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + + gBattlePartyID[gActiveBank] = unk_2000000[0x16068 + gActiveBank]; + + EmitGetAttributes(0, 0, gBitTable[gBattlePartyID[gActiveBank]]); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static inline u8 get_knocked_off_byte(u8 bank) +{ + register u32 side asm("r2") = GetBankSide(bank); + register struct WishFutureKnock* dummy = &gWishFutureKnock; + register u8* aa = ((u8*)((u8*)(dummy))); + register u8* bb = aa + 0x29; + register u8* cc asm("r0") = side + bb; + return *cc; +} + +static void atk4D_switch_data_update(void) +{ + struct BattlePokemon OldData; + int i; + u8 *monData; + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + OldData = gBattleMons[gActiveBank]; + monData = (u8*)(&gBattleMons[gActiveBank]); + for (i = 0; i < sizeof(struct BattlePokemon); i++) + { + monData[i] = gBattleBufferB[gActiveBank][4 + i]; + } + + gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; + gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; + gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); + //check knocked off item + if (get_knocked_off_byte(gActiveBank) & gBitTable[gBattlePartyID[gActiveBank]]) + { + gBattleMons[gActiveBank].item = 0; + } + + if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) + { + for (i = 0; i < 8; i++) + { + gBattleMons[gActiveBank].statStages[i] = OldData.statStages[i]; + } + gBattleMons[gActiveBank].status2 = OldData.status2; + } + SwitchInClearStructs(); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 7; + gBattleTextBuff1[2] = gActiveBank; + gBattleTextBuff1[3] = gBattlePartyID[gActiveBank]; + gBattleTextBuff1[4] = 0xFF; + + gBattlescriptCurrInstr += 2; +} + +static void atk4E_switchin_anim(void) +{ + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER))) + { + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); + } + gAbsentBankFlags &= ~(gBitTable[gActiveBank]); + EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2)); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 3; +} + +static void atk4F_jump_if_cannot_switch(void) +{ + int val, to_cmp; + register struct Pokemon* poke; + u8 r7; + //0x80 byte is used as a way of telling the function whether to not check status2/status3 + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x7F); + if (!(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x80) + && ((gBattleMons[gActiveBank].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + || (gStatuses3[gActiveBank] & STATUS3_ROOTED))) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + return; + } + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankSide(gActiveBank) == 1) + poke = gEnemyParty; + else + poke = gPlayerParty; + val = 0; + if (sub_803FBFC(sub_803FC34(gActiveBank)) == 1) + val = 3; + for (to_cmp = val + 3; val < to_cmp; val++) + { + if (ValidPoke(&poke[val]) && gBattlePartyID[gActiveBank] != val) + break; + } + if (val == to_cmp) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; + } + else + { + if (GetBankSide(gActiveBank) == 1) + { + r7 = GetBankByPlayerAI(1); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + to_cmp = GetBankByPlayerAI(3); + else + to_cmp = r7; + poke = gEnemyParty; + } + else + { + r7 = GetBankByPlayerAI(0); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + to_cmp = GetBankByPlayerAI(2); + else + to_cmp = r7; + poke = gPlayerParty; + } + for (val = 0; val < 6; val++) + { + if (ValidPoke2(&poke[val]) && val != gBattlePartyID[r7] && val != gBattlePartyID[to_cmp]) + break; + } + if (val == 6) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; + } +} + +void sub_8022A3C(u8 unkown) +{ + //BATTLE_STRUCT->unk16064[gActiveBank] = gBattlePartyID[gActiveBank]; + ewram[gActiveBank + 0x16064] = gBattlePartyID[gActiveBank]; + EmitChoosePokemon(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]); + MarkBufferBankForExecution(gActiveBank); +} + +/* +static void atk50_openpartyscreen(void) +{ + int i = 0; + int r9 = 0; + u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5) + { + if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) + { + for (gActiveBank = i; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank))) + { + EmitLinkStandbyMsg(0, 2); + MarkBufferBankForExecution(gActiveBank); + } + else if (sub_8018018(gActiveBank, 6, 6) == 0 + && !gSpecialStatuses[gActiveBank].flag40) + { + sub_8022A3C(6); + gSpecialStatuses[gActiveBank].flag40 = 1; + } + else + { + gAbsentBankFlags |= gBitTable[gActiveBank]; + gHitMarker &= (~HITMARKER_FAINTED(gActiveBank)); + EmitLinkStandbyMsg(0, 2); + MarkBufferBankForExecution(gActiveBank); + } + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (!(gHitMarker >> 0x1C & gBitTable[0])) + { + + } + else if (sub_8018018(gActiveBank, 6, 6) == 0 + && !gSpecialStatuses[gActiveBank].flag40) + { + + } + else + { + + } + } + } +} +*/ + +__attribute__((naked)) +static void atk50_openpartyscreen(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + sub sp, 0x4\n\ + movs r7, 0\n\ + movs r0, 0\n\ + mov r9, r0\n\ + ldr r6, _08022B44 @ =gBattlescriptCurrInstr\n\ + ldr r1, [r6]\n\ + ldrb r2, [r1, 0x2]\n\ + ldrb r0, [r1, 0x3]\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + ldrb r0, [r1, 0x4]\n\ + lsls r0, 16\n\ + orrs r2, r0\n\ + ldrb r0, [r1, 0x5]\n\ + lsls r0, 24\n\ + orrs r2, r0\n\ + mov r8, r2\n\ + ldrb r2, [r1, 0x1]\n\ + adds r0, r2, 0\n\ + mov r12, r6\n\ + cmp r0, 0x5\n\ + beq _08022ACE\n\ + b _08022F74\n\ +_08022ACE:\n\ + ldr r0, _08022B48 @ =gBattleTypeFlags\n\ + ldrh r0, [r0]\n\ + movs r1, 0x41\n\ + ands r1, r0\n\ + cmp r1, 0x1\n\ + beq _08022BBC\n\ + ldr r1, _08022B4C @ =gActiveBank\n\ + strb r7, [r1]\n\ + ldr r0, _08022B50 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r7, r0\n\ + bcc _08022AE8\n\ + b _08022F62\n\ +_08022AE8:\n\ + ldr r7, _08022B54 @ =gHitMarker\n\ + ldr r6, _08022B58 @ =gBitTable\n\ + adds r4, r1, 0\n\ + ldr r0, _08022B5C @ =gAbsentBankFlags\n\ + mov r8, r0\n\ +_08022AF2:\n\ + ldrb r2, [r4]\n\ + lsls r0, r2, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r7]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08022B94\n\ + adds r0, r2, 0\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022B60\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r7]\n\ + bics r0, r1\n\ + str r0, [r7]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022BA2\n\ + .align 2, 0\n\ +_08022B44: .4byte gBattlescriptCurrInstr\n\ +_08022B48: .4byte gBattleTypeFlags\n\ +_08022B4C: .4byte gActiveBank\n\ +_08022B50: .4byte gNoOfAllBanks\n\ +_08022B54: .4byte gHitMarker\n\ +_08022B58: .4byte gBitTable\n\ +_08022B5C: .4byte gAbsentBankFlags\n\ +_08022B60:\n\ + ldr r5, _08022B90 @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022BA2\n\ + movs r0, 0x6\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022BA2\n\ + .align 2, 0\n\ +_08022B90: .4byte gSpecialStatuses\n\ +_08022B94:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08022BA2:\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + ldr r1, _08022BB8 @ =gNoOfAllBanks\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _08022AF2\n\ + b _08022F62\n\ + .align 2, 0\n\ +_08022BB8: .4byte gNoOfAllBanks\n\ +_08022BBC:\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08022BC4\n\ + b _08022F62\n\ +_08022BC4:\n\ + ldr r0, _08022C1C @ =gHitMarker\n\ + mov r8, r0\n\ + ldr r0, [r0]\n\ + lsrs r5, r0, 28\n\ + ldr r6, _08022C20 @ =gBitTable\n\ + ldr r0, [r6]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08022C7E\n\ + ldr r4, _08022C24 @ =gActiveBank\n\ + strb r7, [r4]\n\ + movs r0, 0\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022C2C\n\ + ldr r2, _08022C28 @ =gAbsentBankFlags\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + mov r2, r8\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022C7E\n\ + .align 2, 0\n\ +_08022C1C: .4byte gHitMarker\n\ +_08022C20: .4byte gBitTable\n\ +_08022C24: .4byte gActiveBank\n\ +_08022C28: .4byte gAbsentBankFlags\n\ +_08022C2C:\n\ + ldr r6, _08022C60 @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022C6C\n\ + ldr r0, _08022C64 @ =0x02000000\n\ + ldr r1, _08022C68 @ =0x0001606a\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022C7E\n\ + .align 2, 0\n\ +_08022C60: .4byte gSpecialStatuses\n\ +_08022C64: .4byte 0x02000000\n\ +_08022C68: .4byte 0x0001606a\n\ +_08022C6C:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + movs r2, 0x1\n\ + mov r9, r2\n\ +_08022C7E:\n\ + ldr r6, _08022CD8 @ =gBitTable\n\ + ldr r0, [r6, 0x8]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08022D40\n\ + ldr r0, [r6]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _08022D40\n\ + ldr r4, _08022CDC @ =gActiveBank\n\ + movs r0, 0x2\n\ + strb r0, [r4]\n\ + movs r0, 0x2\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022CE8\n\ + ldr r2, _08022CE0 @ =gAbsentBankFlags\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r2, _08022CE4 @ =gHitMarker\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022D40\n\ + .align 2, 0\n\ +_08022CD8: .4byte gBitTable\n\ +_08022CDC: .4byte gActiveBank\n\ +_08022CE0: .4byte gAbsentBankFlags\n\ +_08022CE4: .4byte gHitMarker\n\ +_08022CE8:\n\ + ldr r6, _08022D1C @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022D28\n\ + ldr r0, _08022D20 @ =0x02000000\n\ + ldr r1, _08022D24 @ =0x00016068\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022D40\n\ + .align 2, 0\n\ +_08022D1C: .4byte gSpecialStatuses\n\ +_08022D20: .4byte 0x02000000\n\ +_08022D24: .4byte 0x00016068\n\ +_08022D28:\n\ + movs r0, 0x1\n\ + mov r2, r9\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _08022D40\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08022D40:\n\ + ldr r6, _08022D90 @ =gBitTable\n\ + ldr r0, [r6, 0x4]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08022DF6\n\ + ldr r4, _08022D94 @ =gActiveBank\n\ + movs r0, 0x1\n\ + strb r0, [r4]\n\ + movs r0, 0x1\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022DA0\n\ + ldr r2, _08022D98 @ =gAbsentBankFlags\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r2, _08022D9C @ =gHitMarker\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022DF6\n\ + .align 2, 0\n\ +_08022D90: .4byte gBitTable\n\ +_08022D94: .4byte gActiveBank\n\ +_08022D98: .4byte gAbsentBankFlags\n\ +_08022D9C: .4byte gHitMarker\n\ +_08022DA0:\n\ + ldr r6, _08022DD4 @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022DE0\n\ + ldr r0, _08022DD8 @ =0x02000000\n\ + ldr r1, _08022DDC @ =0x0001606b\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022DF6\n\ + .align 2, 0\n\ +_08022DD4: .4byte gSpecialStatuses\n\ +_08022DD8: .4byte 0x02000000\n\ +_08022DDC: .4byte 0x0001606b\n\ +_08022DE0:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + movs r0, 0x2\n\ + mov r2, r9\n\ + orrs r2, r0\n\ + mov r9, r2\n\ +_08022DF6:\n\ + ldr r6, _08022E50 @ =gBitTable\n\ + ldr r0, [r6, 0xC]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08022EB8\n\ + ldr r0, [r6, 0x4]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _08022EB8\n\ + ldr r4, _08022E54 @ =gActiveBank\n\ + movs r0, 0x3\n\ + strb r0, [r4]\n\ + movs r0, 0x3\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022E60\n\ + ldr r2, _08022E58 @ =gAbsentBankFlags\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r2, _08022E5C @ =gHitMarker\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022EB8\n\ + .align 2, 0\n\ +_08022E50: .4byte gBitTable\n\ +_08022E54: .4byte gActiveBank\n\ +_08022E58: .4byte gAbsentBankFlags\n\ +_08022E5C: .4byte gHitMarker\n\ +_08022E60:\n\ + ldr r6, _08022E94 @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022EA0\n\ + ldr r0, _08022E98 @ =0x02000000\n\ + ldr r1, _08022E9C @ =0x00016069\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022EB8\n\ + .align 2, 0\n\ +_08022E94: .4byte gSpecialStatuses\n\ +_08022E98: .4byte 0x02000000\n\ +_08022E9C: .4byte 0x00016069\n\ +_08022EA0:\n\ + movs r0, 0x2\n\ + mov r2, r9\n\ + ands r2, r0\n\ + cmp r2, 0\n\ + bne _08022EB8\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08022EB8:\n\ + ldr r1, _08022EE8 @ =gSpecialStatuses\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022F0C\n\ + adds r0, r1, 0\n\ + adds r0, 0x28\n\ + ldrb r0, [r0]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022F0C\n\ + cmp r5, 0\n\ + beq _08022F0C\n\ + ldr r0, _08022EEC @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r0, _08022EF0 @ =gBitTable\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08022EF8\n\ + ldr r1, _08022EF4 @ =gActiveBank\n\ + movs r0, 0x2\n\ + strb r0, [r1]\n\ + b _08022EFC\n\ + .align 2, 0\n\ +_08022EE8: .4byte gSpecialStatuses\n\ +_08022EEC: .4byte gAbsentBankFlags\n\ +_08022EF0: .4byte gBitTable\n\ +_08022EF4: .4byte gActiveBank\n\ +_08022EF8:\n\ + ldr r0, _08022F3C @ =gActiveBank\n\ + strb r1, [r0]\n\ +_08022EFC:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldr r0, _08022F3C @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ +_08022F0C:\n\ + ldr r1, _08022F40 @ =gSpecialStatuses\n\ + ldrb r0, [r1, 0x14]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022F62\n\ + adds r0, r1, 0\n\ + adds r0, 0x3C\n\ + ldrb r0, [r0]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022F62\n\ + cmp r5, 0\n\ + beq _08022F62\n\ + ldr r0, _08022F44 @ =gAbsentBankFlags\n\ + ldrb r0, [r0]\n\ + ldr r1, _08022F48 @ =gBitTable\n\ + ldr r1, [r1, 0x4]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08022F4C\n\ + ldr r1, _08022F3C @ =gActiveBank\n\ + movs r0, 0x3\n\ + b _08022F50\n\ + .align 2, 0\n\ +_08022F3C: .4byte gActiveBank\n\ +_08022F40: .4byte gSpecialStatuses\n\ +_08022F44: .4byte gAbsentBankFlags\n\ +_08022F48: .4byte gBitTable\n\ +_08022F4C:\n\ + ldr r1, _08022F6C @ =gActiveBank\n\ + movs r0, 0x1\n\ +_08022F50:\n\ + strb r0, [r1]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldr r0, _08022F6C @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ +_08022F62:\n\ + ldr r1, _08022F70 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x6\n\ + str r0, [r1]\n\ + b _08023302\n\ + .align 2, 0\n\ +_08022F6C: .4byte gActiveBank\n\ +_08022F70: .4byte gBattlescriptCurrInstr\n\ +_08022F74:\n\ + cmp r0, 0x6\n\ + beq _08022F7A\n\ + b _08023170\n\ +_08022F7A:\n\ + ldr r0, _08022FF0 @ =gBattleTypeFlags\n\ + ldrh r2, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08022F88\n\ + b _0802310C\n\ +_08022F88:\n\ + movs r0, 0x1\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _08022F92\n\ + b _0802310C\n\ +_08022F92:\n\ + ldr r7, _08022FF4 @ =gHitMarker\n\ + ldr r0, [r7]\n\ + lsrs r5, r0, 28\n\ + ldr r4, _08022FF8 @ =gBitTable\n\ + ldr r0, [r4, 0x8]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _0802303A\n\ + ldr r0, [r4]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _0802303A\n\ + ldr r6, _08022FFC @ =gActiveBank\n\ + movs r0, 0x2\n\ + strb r0, [r6]\n\ + ldr r0, _08023000 @ =gBattleBufferB\n\ + ldrb r1, [r0, 0x1]\n\ + movs r0, 0x2\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08023008\n\ + ldr r2, _08023004 @ =gAbsentBankFlags\n\ + ldrb r0, [r6]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldrb r0, [r6]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r7]\n\ + bics r0, r1\n\ + str r0, [r7]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r6]\n\ + bl MarkBufferBankForExecution\n\ + b _0802303A\n\ + .align 2, 0\n\ +_08022FF0: .4byte gBattleTypeFlags\n\ +_08022FF4: .4byte gHitMarker\n\ +_08022FF8: .4byte gBitTable\n\ +_08022FFC: .4byte gActiveBank\n\ +_08023000: .4byte gBattleBufferB\n\ +_08023004: .4byte gAbsentBankFlags\n\ +_08023008:\n\ + ldr r4, _08023098 @ =gSpecialStatuses\n\ + ldrb r0, [r6]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _0802303A\n\ + ldr r0, _0802309C @ =0x02000000\n\ + ldr r1, _080230A0 @ =0x00016068\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r6]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_0802303A:\n\ + ldr r4, _080230A4 @ =gBitTable\n\ + ldr r0, [r4, 0xC]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _080230EE\n\ + ldr r0, [r4, 0x4]\n\ + ands r5, r0\n\ + cmp r5, 0\n\ + beq _080230EE\n\ + ldr r5, _080230A8 @ =gActiveBank\n\ + movs r0, 0x3\n\ + strb r0, [r5]\n\ + ldr r0, _080230AC @ =gBattleBufferB\n\ + ldr r2, _080230B0 @ =0x00000201\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r0, 0x3\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080230BC\n\ + ldr r2, _080230B4 @ =gAbsentBankFlags\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r2, _080230B8 @ =gHitMarker\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r5]\n\ + bl MarkBufferBankForExecution\n\ + b _080230EE\n\ + .align 2, 0\n\ +_08023098: .4byte gSpecialStatuses\n\ +_0802309C: .4byte 0x02000000\n\ +_080230A0: .4byte 0x00016068\n\ +_080230A4: .4byte gBitTable\n\ +_080230A8: .4byte gActiveBank\n\ +_080230AC: .4byte gBattleBufferB\n\ +_080230B0: .4byte 0x00000201\n\ +_080230B4: .4byte gAbsentBankFlags\n\ +_080230B8: .4byte gHitMarker\n\ +_080230BC:\n\ + ldr r4, _080230FC @ =gSpecialStatuses\n\ + ldrb r0, [r5]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _080230EE\n\ + ldr r0, _08023100 @ =0x02000000\n\ + ldr r1, _08023104 @ =0x00016069\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r5]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_080230EE:\n\ + ldr r1, _08023108 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x6\n\ + str r0, [r1]\n\ + mov r12, r1\n\ + b _08023110\n\ + .align 2, 0\n\ +_080230FC: .4byte gSpecialStatuses\n\ +_08023100: .4byte 0x02000000\n\ +_08023104: .4byte 0x00016069\n\ +_08023108: .4byte gBattlescriptCurrInstr\n\ +_0802310C:\n\ + adds r0, r1, 0x6\n\ + str r0, [r6]\n\ +_08023110:\n\ + ldr r0, _08023160 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + lsrs r5, r0, 28\n\ + ldr r1, _08023164 @ =gBank1\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + ldr r4, _08023168 @ =gBitTable\n\ + ldr r2, [r4]\n\ + ands r2, r5\n\ + ldr r6, _0802316C @ =gNoOfAllBanks\n\ + cmp r2, 0\n\ + bne _0802314C\n\ + adds r7, r6, 0\n\ + ldrb r0, [r6]\n\ + cmp r2, r0\n\ + bcs _0802314C\n\ + adds r3, r1, 0\n\ +_08023132:\n\ + ldrb r0, [r3]\n\ + adds r0, 0x1\n\ + strb r0, [r3]\n\ + ldrb r2, [r3]\n\ + lsls r0, r2, 2\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _0802314C\n\ + ldrb r0, [r7]\n\ + cmp r2, r0\n\ + bcc _08023132\n\ +_0802314C:\n\ + ldrb r0, [r1]\n\ + ldrb r6, [r6]\n\ + cmp r0, r6\n\ + beq _08023156\n\ + b _08023302\n\ +_08023156:\n\ + mov r1, r8\n\ + mov r2, r12\n\ + str r1, [r2]\n\ + b _08023302\n\ + .align 2, 0\n\ +_08023160: .4byte gHitMarker\n\ +_08023164: .4byte gBank1\n\ +_08023168: .4byte gBitTable\n\ +_0802316C: .4byte gNoOfAllBanks\n\ +_08023170:\n\ + movs r0, 0x80\n\ + ands r0, r2\n\ + movs r5, 0x1\n\ + cmp r0, 0\n\ + beq _0802317C\n\ + movs r5, 0\n\ +_0802317C:\n\ + movs r0, 0x7F\n\ + ands r0, r2\n\ + bl GetBattleBank\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r1, _080231A4 @ =gSpecialStatuses\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + bge _080231A8\n\ + ldr r0, [r6]\n\ + adds r0, 0x6\n\ + str r0, [r6]\n\ + b _08023302\n\ + .align 2, 0\n\ +_080231A4: .4byte gSpecialStatuses\n\ +_080231A8:\n\ + adds r0, r7, 0\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080231F8\n\ + ldr r2, _080231E8 @ =gActiveBank\n\ + strb r7, [r2]\n\ + ldr r3, _080231EC @ =gAbsentBankFlags\n\ + ldr r4, _080231F0 @ =gBitTable\n\ + ldrb r0, [r2]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ldrb r1, [r3]\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + ldr r3, _080231F4 @ =gHitMarker\n\ + ldrb r0, [r2]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r3]\n\ + bics r0, r1\n\ + str r0, [r3]\n\ + mov r0, r8\n\ + str r0, [r6]\n\ + b _08023302\n\ + .align 2, 0\n\ +_080231E8: .4byte gActiveBank\n\ +_080231EC: .4byte gAbsentBankFlags\n\ +_080231F0: .4byte gBitTable\n\ +_080231F4: .4byte gHitMarker\n\ +_080231F8:\n\ + ldr r4, _080232A0 @ =gActiveBank\n\ + strb r7, [r4]\n\ + ldr r3, _080232A4 @ =0x02000000\n\ + ldrb r0, [r4]\n\ + ldr r2, _080232A8 @ =0x00016064\n\ + adds r1, r0, r2\n\ + adds r1, r3\n\ + ldr r2, _080232AC @ =gBattlePartyID\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r1, [r4]\n\ + movs r0, 0x2\n\ + eors r0, r1\n\ + ldr r1, _080232B0 @ =0x00016068\n\ + adds r0, r1\n\ + adds r0, r3\n\ + ldrb r2, [r0]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + ldr r1, _080232B4 @ =0x0001606c\n\ + adds r3, r1\n\ + adds r0, r3\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + adds r1, r5, 0\n\ + movs r3, 0\n\ + bl EmitChoosePokemon\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, [r6]\n\ + adds r0, 0x6\n\ + str r0, [r6]\n\ + ldrb r0, [r4]\n\ + bl GetBankIdentity\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0802325A\n\ + ldr r1, _080232B8 @ =gBattleResults\n\ + ldrb r0, [r1, 0x2]\n\ + cmp r0, 0xFE\n\ + bhi _0802325A\n\ + adds r0, 0x1\n\ + strb r0, [r1, 0x2]\n\ +_0802325A:\n\ + ldr r0, _080232BC @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080232C4\n\ + ldr r1, _080232A0 @ =gActiveBank\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + ldr r0, _080232C0 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _08023302\n\ + adds r4, r1, 0\n\ +_08023276:\n\ + ldrb r0, [r4]\n\ + cmp r0, r7\n\ + beq _0802328A\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_0802328A:\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + ldr r1, _080232C0 @ =gNoOfAllBanks\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _08023276\n\ + b _08023302\n\ + .align 2, 0\n\ +_080232A0: .4byte gActiveBank\n\ +_080232A4: .4byte 0x02000000\n\ +_080232A8: .4byte 0x00016064\n\ +_080232AC: .4byte gBattlePartyID\n\ +_080232B0: .4byte 0x00016068\n\ +_080232B4: .4byte 0x0001606c\n\ +_080232B8: .4byte gBattleResults\n\ +_080232BC: .4byte gBattleTypeFlags\n\ +_080232C0: .4byte gNoOfAllBanks\n\ +_080232C4:\n\ + adds r0, r7, 0\n\ + bl GetBankIdentity\n\ + movs r1, 0x1\n\ + eors r0, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetBankByPlayerAI\n\ + ldr r4, _08023310 @ =gActiveBank\n\ + strb r0, [r4]\n\ + ldr r0, _08023314 @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r2, _08023318 @ =gBitTable\n\ + ldrb r3, [r4]\n\ + lsls r0, r3, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080232F4\n\ + movs r0, 0x2\n\ + eors r3, r0\n\ + strb r3, [r4]\n\ +_080232F4:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08023302:\n\ + add sp, 0x4\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08023310: .4byte gActiveBank\n\ +_08023314: .4byte gAbsentBankFlags\n\ +_08023318: .4byte gBitTable\n\ + .syntax divided"); +} + +static void atk51_switch_handle_order(void) +{ + int i; + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) + { + case 0: + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleBufferB[i][0] == 0x22) + ewram[i + 0x16068] = gBattleBufferB[i][1]; + } + break; + case 1: + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + sub_8012258(gActiveBank); + break; + case 2: + gBattleCommunication[0] = gBattleBufferB[gActiveBank][1]; + ewram[gActiveBank + 0x16068] = gBattleBufferB[gActiveBank][1]; + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + + ewram[(gActiveBank) * 3 + (0x1606C + 0)] &= 0xF; + ewram[(gActiveBank) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0); + ewram[(gActiveBank) * 3 + (0x1606C + 1)] = gBattleBufferB[gActiveBank][3]; + + ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] &= (0xF0); + ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0) >> 4; + ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 2)] = gBattleBufferB[gActiveBank][3]; + } + else + sub_8012258(gActiveBank); + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 6; + gBattleTextBuff1[2] = gBattleMons[gBankAttacker].species; + gBattleTextBuff1[3] = gBattleMons[gBankAttacker].species >> 8; + gBattleTextBuff1[4] = 0xFF; + + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 7; + gBattleTextBuff2[2] = gActiveBank; + gBattleTextBuff2[3] = gBattleBufferB[gActiveBank][1]; + gBattleTextBuff2[4] = 0xFF; + break; + } + gBattlescriptCurrInstr += 3; +} + +static void atk52_switch_in_effects(void) +{ + int i; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + sub_80157C4(gActiveBank); + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank)); + gSpecialStatuses[gActiveBank].flag40 = 0; + + if (!(gSideAffecting[GetBankSide(gActiveBank)] & SIDE_SPIKES_DMG_DONE) && (gSideAffecting[GetBankSide(gActiveBank)] & SIDE_SPIKES) + && gBattleMons[gActiveBank].type1 != TYPE_FLYING && gBattleMons[gActiveBank].type2 != TYPE_FLYING && gBattleMons[gActiveBank].ability != ABILITY_LEVITATE) + { + u8 spikesDmg; + + gSideAffecting[GetBankSide(gActiveBank)] |= SIDE_SPIKES_DMG_DONE; + spikesDmg = (5 - gSideTimer[GetBankSide(gActiveBank)].spikesAmount) * 2; + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / (spikesDmg); + ATLEAST_ONE_PTR(&gBattleMoveDamage); + BATTLE_STRUCT->scriptingActive = gActiveBank; + b_movescr_stack_push_cursor(); + + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + gBattlescriptCurrInstr = gUnknown_081D919F; + else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1) + gBattlescriptCurrInstr = gUnknown_081D9171; + else + gBattlescriptCurrInstr = gUnknown_081D91CD; + } + else + { + if (gBattleMons[gActiveBank].ability == ABILITY_TRUANT) + { + gDisableStructs[gActiveBank].truantCounter = 1; + } + + if (AbilityBattleEffects(0, gActiveBank, 0, 0, 0) == 0 && ItemBattleEffects(0, gActiveBank, 0) == 0) + { + gSideAffecting[GetBankSide(gActiveBank)] &= ~(SIDE_SPIKES_DMG_DONE); + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gTurnOrder[i] == gActiveBank) + gUnknown_02024A76[i] = 0xC; + } + + for (i = 0; i < gNoOfAllBanks; i++) + { + *(HP_ON_SWITCHOUT + GetBankSide(i)) = gBattleMons[i].hp; + } + + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5) + { + u32 hitmark = gHitMarker >> 0x1C; + gBank1++; + while (1) + { + if (hitmark & gBitTable[gBank1] && !(gAbsentBankFlags & gBitTable[gBank1])) + break; + if (gBank1 >= gNoOfAllBanks) + break; + gBank1++; + } + } + gBattlescriptCurrInstr += 2; + } + } +} + +static void atk53_trainer_slide(void) +{ + if (!BSScriptRead8(gBattlescriptCurrInstr + 1)) + gActiveBank = GetBankByPlayerAI(0); + else + gActiveBank = GetBankByPlayerAI(1); + + EmitTrainerSlide(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk54_effectiveness_sound(void) +{ + gActiveBank = gBankAttacker; + EmitEffectivenessSound(0, BSScriptRead16(gBattlescriptCurrInstr + 1)); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 3; +} + +static void atk55_play_sound(void) +{ + gActiveBank = gBankAttacker; + EmitPlaySound(0, BSScriptRead16(gBattlescriptCurrInstr + 1)); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 3; +} + +static void atk56_fainting_cry(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitFaintingCry(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk57(void) +{ + gActiveBank = GetBankByPlayerAI(0); + dp01_build_cmdbuf_x37_a(0, gBattleOutcome); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 1; +} + +static void atk58_return_to_ball(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitReturnPokeToBall(0, 1); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk59_learnmove_inbattle(void) +{ + u8* loc1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* loc2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5); + + u16 ret; + for (ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], BSScriptRead8(gBattlescriptCurrInstr + 9)); ret == 0xFFFE; + ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0)) {} + if (ret == 0) + gBattlescriptCurrInstr = loc2; + else if (ret == 0xFFFF) + gBattlescriptCurrInstr += 10; + else + { + gActiveBank = GetBankByPlayerAI(0); + if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if + { + gActiveBank = GetBankByPlayerAI(2); + if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); + } + gBattlescriptCurrInstr = loc1; + } +} + +void sub_8023A80(void) +{ + sub_802BBD4(0x18, 8, 0x1D, 0xD, 0); + InitWindow(&gUnknown_03004210, gUnknown_08400D7A, 0x100, 0x19, 0x9); + sub_8002F44(&gUnknown_03004210); + sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); +} + +void sub_8023AD8(void) +{ + sub_802BBD4(0x18, 8, 0x1D, 0xD, 1); + DestroyMenuCursor(); +} + +#ifdef NONMATCHING +static void atk5A(void) +{ + gActiveBank = 0; + switch (BATTLE_STRUCT->atk5A_StateTracker) + { + case 0: + sub_8023A80(); + BATTLE_STRUCT->atk5A_StateTracker++; + gBattleCommunication[1] = 0; + sub_802BC6C(); + break; + case 1: + if (gMain.newKeys & 0x40 && gBattleCommunication[1] != 0) + { + PlaySE(5); + nullsub_6(); + gBattleCommunication[1] = 0; + sub_802BC6C(); + } + if (gMain.newKeys & 0x80 && gBattleCommunication[1] == 0) + { + PlaySE(5); + nullsub_6(); + gBattleCommunication[1] = 1; + sub_802BC6C(); + } + if (gMain.newKeys & 0x1) + { + PlaySE(5); + if (gBattleCommunication[1] == 0) + { + sub_8023AD8(); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + BATTLE_STRUCT->atk5A_StateTracker++; + } + else + goto TRACKER_4; + } + else if (gMain.newKeys & 0x2) + { + PlaySE(5); + TRACKER_4: + BATTLE_STRUCT->atk5A_StateTracker = 4; + } + break; + case 2: + if (!gPaletteFade.active) + { + sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, word_2024E82); + BATTLE_STRUCT->atk5A_StateTracker++; + } + break; + case 3: + if (!gPaletteFade.active && gMain.callback1 == sub_800F808) + { + u8 move_pos = sub_809FA30(); + if (move_pos == 4) + { + BATTLE_STRUCT->atk5A_StateTracker = 4; + } + else + { + u16 move = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MOVE1 + move_pos); + if (IsHMMove2(move)) + { + PrepareStringBattle(0x13F, gActiveBank); + BATTLE_STRUCT->atk5A_StateTracker = 5; + } + else + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 2; + gBattleTextBuff2[2] = move; + gBattleTextBuff2[3] = move >> 8; + gBattleTextBuff2[4] = 0xFF; + RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos); + SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], word_2024E82, move_pos); + if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[0].unk18_b & gBitTable[move_pos])) + { + RemoveBattleMonPPBonus(&gBattleMons[0], move_pos); + SetBattleMonMoveSlot(&gBattleMons[0], word_2024E82, move_pos); + } + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[2].unk18_b & gBitTable[move_pos])) + { + RemoveBattleMonPPBonus(&gBattleMons[2], move_pos); + SetBattleMonMoveSlot(&gBattleMons[2], word_2024E82, move_pos); + } + } + } + } + break; + case 4: + sub_8023AD8(); + gBattlescriptCurrInstr += 5; + break; + case 5: + if (gBattleExecBuffer == 0) + { + BATTLE_STRUCT->atk5A_StateTracker = 2; + } + break; + } +} + +#else +__attribute__((naked)) +static void atk5A(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + sub sp, 0x4\n\ + ldr r1, _08023B24 @ =gActiveBank\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + ldr r1, _08023B28 @ =0x02000000\n\ + ldr r2, _08023B2C @ =0x0001601a\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r5, r1, 0\n\ + cmp r0, 0x5\n\ + bls _08023B18\n\ + b _08023E5C\n\ +_08023B18:\n\ + lsls r0, 2\n\ + ldr r1, _08023B30 @ =_08023B34\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08023B24: .4byte gActiveBank\n\ +_08023B28: .4byte 0x02000000\n\ +_08023B2C: .4byte 0x0001601a\n\ +_08023B30: .4byte _08023B34\n\ + .align 2, 0\n\ +_08023B34:\n\ + .4byte _08023B4C\n\ + .4byte _08023B74\n\ + .4byte _08023C30\n\ + .4byte _08023C84\n\ + .4byte _08023E38\n\ + .4byte _08023E4C\n\ +_08023B4C:\n\ + bl sub_8023A80\n\ + ldr r1, _08023B68 @ =0x02000000\n\ + ldr r0, _08023B6C @ =0x0001601a\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + movs r2, 0\n\ + strb r0, [r1]\n\ + ldr r0, _08023B70 @ =gBattleCommunication\n\ + strb r2, [r0, 0x1]\n\ + bl sub_802BC6C\n\ + b _08023E5C\n\ + .align 2, 0\n\ +_08023B68: .4byte 0x02000000\n\ +_08023B6C: .4byte 0x0001601a\n\ +_08023B70: .4byte gBattleCommunication\n\ +_08023B74:\n\ + ldr r0, _08023BFC @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08023B9A\n\ + ldr r4, _08023C00 @ =gBattleCommunication\n\ + ldrb r0, [r4, 0x1]\n\ + cmp r0, 0\n\ + beq _08023B9A\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + bl nullsub_6\n\ + movs r0, 0\n\ + strb r0, [r4, 0x1]\n\ + bl sub_802BC6C\n\ +_08023B9A:\n\ + ldr r0, _08023BFC @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08023BC0\n\ + ldr r4, _08023C00 @ =gBattleCommunication\n\ + ldrb r0, [r4, 0x1]\n\ + cmp r0, 0\n\ + bne _08023BC0\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + bl nullsub_6\n\ + movs r0, 0x1\n\ + strb r0, [r4, 0x1]\n\ + bl sub_802BC6C\n\ +_08023BC0:\n\ + ldr r0, _08023BFC @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08023C0C\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r0, _08023C00 @ =gBattleCommunication\n\ + ldrb r4, [r0, 0x1]\n\ + cmp r4, 0\n\ + bne _08023C1C\n\ + bl sub_8023AD8\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + str r4, [sp]\n\ + movs r1, 0\n\ + movs r2, 0\n\ + movs r3, 0x10\n\ + bl BeginNormalPaletteFade\n\ + ldr r1, _08023C04 @ =0x02000000\n\ + ldr r2, _08023C08 @ =0x0001601a\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + b _08023E5A\n\ + .align 2, 0\n\ +_08023BFC: .4byte gMain\n\ +_08023C00: .4byte gBattleCommunication\n\ +_08023C04: .4byte 0x02000000\n\ +_08023C08: .4byte 0x0001601a\n\ +_08023C0C:\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08023C16\n\ + b _08023E5C\n\ +_08023C16:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ +_08023C1C:\n\ + ldr r0, _08023C28 @ =0x02000000\n\ + ldr r1, _08023C2C @ =0x0001601a\n\ + adds r0, r1\n\ + movs r1, 0x4\n\ + strb r1, [r0]\n\ + b _08023E5C\n\ + .align 2, 0\n\ +_08023C28: .4byte 0x02000000\n\ +_08023C2C: .4byte 0x0001601a\n\ +_08023C30:\n\ + ldr r0, _08023C68 @ =gPaletteFade\n\ + ldrb r1, [r0, 0x7]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08023C3E\n\ + b _08023E5C\n\ +_08023C3E:\n\ + ldr r0, _08023C6C @ =gPlayerParty\n\ + ldr r2, _08023C70 @ =0x00016018\n\ + adds r1, r5, r2\n\ + ldrb r1, [r1]\n\ + ldr r2, _08023C74 @ =gPlayerPartyCount\n\ + ldrb r2, [r2]\n\ + subs r2, 0x1\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + ldr r3, _08023C78 @ =ReshowBattleScreenAfterMenu\n\ + ldr r4, _08023C7C @ =word_2024E82\n\ + ldrh r4, [r4]\n\ + str r4, [sp]\n\ + bl sub_809D9F0\n\ + ldr r0, _08023C80 @ =0x0001601a\n\ + adds r1, r5, r0\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + b _08023E5A\n\ + .align 2, 0\n\ +_08023C68: .4byte gPaletteFade\n\ +_08023C6C: .4byte gPlayerParty\n\ +_08023C70: .4byte 0x00016018\n\ +_08023C74: .4byte gPlayerPartyCount\n\ +_08023C78: .4byte ReshowBattleScreenAfterMenu\n\ +_08023C7C: .4byte word_2024E82\n\ +_08023C80: .4byte 0x0001601a\n\ +_08023C84:\n\ + ldr r0, _08023CB4 @ =gPaletteFade\n\ + ldrb r1, [r0, 0x7]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08023C92\n\ + b _08023E5C\n\ +_08023C92:\n\ + ldr r0, _08023CB8 @ =gMain\n\ + ldr r1, [r0, 0x4]\n\ + ldr r0, _08023CBC @ =sub_800F808\n\ + cmp r1, r0\n\ + beq _08023C9E\n\ + b _08023E5C\n\ +_08023C9E:\n\ + bl sub_809FA30\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x4\n\ + bne _08023CC8\n\ + ldr r0, _08023CC0 @ =0x02000000\n\ + ldr r1, _08023CC4 @ =0x0001601a\n\ + adds r0, r1\n\ + strb r5, [r0]\n\ + b _08023E5C\n\ + .align 2, 0\n\ +_08023CB4: .4byte gPaletteFade\n\ +_08023CB8: .4byte gMain\n\ +_08023CBC: .4byte sub_800F808\n\ +_08023CC0: .4byte 0x02000000\n\ +_08023CC4: .4byte 0x0001601a\n\ +_08023CC8:\n\ + ldr r2, _08023D08 @ =0x02000000\n\ + mov r9, r2\n\ + ldr r6, _08023D0C @ =0x00016018\n\ + add r6, r9\n\ + ldrb r0, [r6]\n\ + movs r1, 0x64\n\ + mov r8, r1\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + ldr r7, _08023D10 @ =gPlayerParty\n\ + adds r0, r7\n\ + adds r1, r5, 0\n\ + adds r1, 0xD\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + adds r0, r4, 0\n\ + bl IsHMMove2\n\ + cmp r0, 0\n\ + beq _08023D20\n\ + ldr r0, _08023D14 @ =0x0000013f\n\ + ldr r1, _08023D18 @ =gActiveBank\n\ + ldrb r1, [r1]\n\ + bl PrepareStringBattle\n\ + ldr r1, _08023D1C @ =0x0001601a\n\ + add r1, r9\n\ + movs r0, 0x5\n\ + b _08023E5A\n\ + .align 2, 0\n\ +_08023D08: .4byte 0x02000000\n\ +_08023D0C: .4byte 0x00016018\n\ +_08023D10: .4byte gPlayerParty\n\ +_08023D14: .4byte 0x0000013f\n\ +_08023D18: .4byte gActiveBank\n\ +_08023D1C: .4byte 0x0001601a\n\ +_08023D20:\n\ + ldr r3, _08023E10 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ + ldr r1, _08023E14 @ =gBattleTextBuff2\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x2\n\ + strb r0, [r1, 0x1]\n\ + strb r4, [r1, 0x2]\n\ + lsrs r0, r4, 8\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldrb r0, [r6]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r7\n\ + adds r1, r5, 0\n\ + bl RemoveMonPPBonus\n\ + ldrb r0, [r6]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r0, r7\n\ + ldr r7, _08023E18 @ =word_2024E82\n\ + ldrh r1, [r7]\n\ + adds r2, r5, 0\n\ + bl SetMonMoveSlot\n\ + ldr r0, _08023E1C @ =gBattlePartyID\n\ + ldrh r0, [r0]\n\ + ldrb r6, [r6]\n\ + cmp r0, r6\n\ + bne _08023DB0\n\ + ldr r4, _08023E20 @ =gBattleMons\n\ + ldr r0, [r4, 0x50]\n\ + movs r1, 0x80\n\ + lsls r1, 14\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08023DB0\n\ + ldr r0, _08023E24 @ =gDisableStructs\n\ + ldrb r1, [r0, 0x18]\n\ + lsrs r1, 4\n\ + ldr r2, _08023E28 @ =gBitTable\n\ + lsls r0, r5, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08023DB0\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl RemoveBattleMonPPBonus\n\ + ldrh r1, [r7]\n\ + adds r0, r4, 0\n\ + adds r2, r5, 0\n\ + bl SetBattleMonMoveSlot\n\ +_08023DB0:\n\ + ldr r0, _08023E2C @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08023E5C\n\ + ldr r0, _08023E1C @ =gBattlePartyID\n\ + ldr r1, _08023E30 @ =0x02000000\n\ + ldr r2, _08023E34 @ =0x00016018\n\ + adds r1, r2\n\ + ldrh r0, [r0, 0x4]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bne _08023E5C\n\ + ldr r4, _08023E20 @ =gBattleMons\n\ + movs r1, 0x80\n\ + lsls r1, 1\n\ + adds r0, r4, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 14\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08023E5C\n\ + ldr r0, _08023E24 @ =gDisableStructs\n\ + adds r0, 0x50\n\ + ldrb r1, [r0]\n\ + lsrs r1, 4\n\ + ldr r2, _08023E28 @ =gBitTable\n\ + lsls r0, r5, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08023E5C\n\ + adds r4, 0xB0\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl RemoveBattleMonPPBonus\n\ + ldr r0, _08023E18 @ =word_2024E82\n\ + ldrh r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r2, r5, 0\n\ + bl SetBattleMonMoveSlot\n\ + b _08023E5C\n\ + .align 2, 0\n\ +_08023E10: .4byte gBattlescriptCurrInstr\n\ +_08023E14: .4byte gBattleTextBuff2\n\ +_08023E18: .4byte word_2024E82\n\ +_08023E1C: .4byte gBattlePartyID\n\ +_08023E20: .4byte gBattleMons\n\ +_08023E24: .4byte gDisableStructs\n\ +_08023E28: .4byte gBitTable\n\ +_08023E2C: .4byte gBattleTypeFlags\n\ +_08023E30: .4byte 0x02000000\n\ +_08023E34: .4byte 0x00016018\n\ +_08023E38:\n\ + bl sub_8023AD8\n\ + ldr r1, _08023E48 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + b _08023E5C\n\ + .align 2, 0\n\ +_08023E48: .4byte gBattlescriptCurrInstr\n\ +_08023E4C:\n\ + ldr r0, _08023E6C @ =gBattleExecBuffer\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08023E5C\n\ + ldr r2, _08023E70 @ =0x0001601a\n\ + adds r1, r5, r2\n\ + movs r0, 0x2\n\ +_08023E5A:\n\ + strb r0, [r1]\n\ +_08023E5C:\n\ + add sp, 0x4\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08023E6C: .4byte gBattleExecBuffer\n\ +_08023E70: .4byte 0x0001601a\n\ + .syntax divided"); +} +#endif //NONMATCHING + +static void atk5B_80256E0(void) +{ + switch (BATTLE_STRUCT->atk5A_StateTracker) + { + case 0: + sub_8023A80(); + BATTLE_STRUCT->atk5A_StateTracker++; + gBattleCommunication[1] = 0; + sub_802BC6C(); + break; + case 1: + if (gMain.newKeys & 0x40 && gBattleCommunication[1] != 0) + { + PlaySE(5); + nullsub_6(); + gBattleCommunication[1] = 0; + sub_802BC6C(); + } + if (gMain.newKeys & 0x80 && gBattleCommunication[1] == 0) + { + PlaySE(5); + nullsub_6(); + gBattleCommunication[1] = 1; + sub_802BC6C(); + } + if (gMain.newKeys & 1) + { + PlaySE(5); + if (gBattleCommunication[1] != 0) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + gBattlescriptCurrInstr += 5; + } + sub_8023AD8(); + } + else if (gMain.newKeys & 0x2) + { + PlaySE(5); + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + sub_8023AD8(); + } + } +} + +static void atk5C_hitanimation(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleMoveFlags & MOVE_NO_EFFECT) + gBattlescriptCurrInstr += 2; + else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) || gDisableStructs[gActiveBank].substituteHP == 0) + { + EmitHitAnimation(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; + } + else + gBattlescriptCurrInstr += 2; +} + +#define MONEY_UNKNOWN ((*(u8*)(0x02017000 + 0x94))) + +#ifdef NONMATCHING +static void atk5D_getmoneyreward(void) +{ + int i = 0; + u8 r5 = 0; + u32 money_to_give; + if (gTrainerBattleOpponent == 0x400) + { + money_to_give = 2 * BATTLE_STRUCT->moneyMultiplier * MONEY_UNKNOWN; + } + else + { + switch(gTrainers[gTrainerBattleOpponent].partyFlags) + { + case 0: + { + const struct PokeTrainerData1 *data = &gTrainers[gTrainerBattleOpponent].party->noItemNoMoves; + r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl; + } + break; + case 2: + { + const struct PokeTrainerData2 *data = &gTrainers[gTrainerBattleOpponent].party->itemNoMoves; + r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl; + } + break; + case 1: + case 3: + { + const struct PokeTrainerData3 *data = &gTrainers[gTrainerBattleOpponent].party->itemMoves; + r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl; + } + break; + } + for (; gTrainerMoney[i * 4] != 0xFF && gTrainerMoney[i * 4 + 1] != gTrainers[gTrainerBattleOpponent].trainerClass ; i++) {} + + money_to_give = (r5 << 2) * BATTLE_STRUCT->moneyMultiplier; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + money_to_give = 2 * gTrainerMoney[i * 4 + 1] * money_to_give; + else + money_to_give = 1 * gTrainerMoney[i * 4 + 1] * money_to_give; + } + + sub_80B79B8(&gSaveBlock1.money, money_to_give); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 1; + gBattleTextBuff1[2] = 4; + gBattleTextBuff1[3] = 5; + gBattleTextBuff1[4] = BYTE0(money_to_give); + gBattleTextBuff1[5] = BYTE1(money_to_give); + gBattleTextBuff1[6] = BYTE2(money_to_give); + gBattleTextBuff1[7] = BYTE3(money_to_give); + gBattleTextBuff1[8] = 0xFF; + + gBattlescriptCurrInstr += 1; +} +#else +__attribute__((naked)) +static void atk5D_getmoneyreward(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + movs r6, 0\n\ + movs r5, 0\n\ + ldr r0, _08024048 @ =gTrainerBattleOpponent\n\ + ldrh r2, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 3\n\ + cmp r2, r1\n\ + bne _08024058\n\ + ldr r0, _0802404C @ =0x02017000\n\ + adds r1, r0, 0\n\ + adds r1, 0x94\n\ + ldrb r2, [r1]\n\ + ldr r1, _08024050 @ =0xfffff056\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r4, r2, 0\n\ + muls r4, r0\n\ + ldr r0, _08024054 @ =gSaveBlock1 + 0x490\n\ + mov r8, r0\n\ + b _08024140\n\ + .align 2, 0\n\ +_08024048: .4byte gTrainerBattleOpponent\n\ +_0802404C: .4byte 0x02017000\n\ +_08024050: .4byte 0xfffff056\n\ +_08024054: .4byte gSaveBlock1 + 0x490\n\ +_08024058:\n\ + ldr r2, _08024074 @ =gTrainers\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r3, r0, 3\n\ + adds r4, r3, r2\n\ + ldrb r1, [r4]\n\ + cmp r1, 0x1\n\ + beq _080240AE\n\ + cmp r1, 0x1\n\ + bgt _08024078\n\ + cmp r1, 0\n\ + beq _08024082\n\ + b _080240C4\n\ + .align 2, 0\n\ +_08024074: .4byte gTrainers\n\ +_08024078:\n\ + cmp r1, 0x2\n\ + beq _08024098\n\ + cmp r1, 0x3\n\ + beq _080240AE\n\ + b _080240C4\n\ +_08024082:\n\ + adds r0, r2, 0\n\ + adds r0, 0x24\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + subs r0, 0x8\n\ + b _080240C2\n\ +_08024098:\n\ + adds r0, r2, 0\n\ + adds r0, 0x24\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + subs r0, 0x8\n\ + b _080240C2\n\ +_080240AE:\n\ + adds r0, r2, 0\n\ + adds r0, 0x24\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + subs r0, 0x10\n\ +_080240C2:\n\ + ldrb r5, [r0, 0x2]\n\ +_080240C4:\n\ + ldr r0, _08024120 @ =gTrainerMoney\n\ + lsls r1, r6, 2\n\ + adds r3, r1, r0\n\ + ldrb r1, [r3]\n\ + mov r12, r0\n\ + lsls r4, r5, 2\n\ + ldr r5, _08024124 @ =0x02000000\n\ + ldr r7, _08024128 @ =gBattleTypeFlags\n\ + ldr r0, _0802412C @ =gSaveBlock1 + 0x490\n\ + mov r8, r0\n\ + cmp r1, 0xFF\n\ + beq _080240FE\n\ + ldr r2, _08024130 @ =gTrainers\n\ + ldr r0, _08024134 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + ldrb r2, [r0, 0x1]\n\ + adds r1, r3, 0\n\ +_080240EE:\n\ + ldrb r0, [r1]\n\ + cmp r0, r2\n\ + beq _080240FE\n\ + adds r1, 0x4\n\ + adds r6, 0x1\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xFF\n\ + bne _080240EE\n\ +_080240FE:\n\ + ldr r1, _08024138 @ =0x00016056\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + adds r3, r4, 0\n\ + muls r3, r0\n\ + lsls r0, r6, 2\n\ + add r0, r12\n\ + ldrb r2, [r0, 0x1]\n\ + ldrh r1, [r7]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802413C\n\ + lsls r0, r2, 1\n\ + adds r4, r3, 0\n\ + muls r4, r0\n\ + b _08024140\n\ + .align 2, 0\n\ +_08024120: .4byte gTrainerMoney\n\ +_08024124: .4byte 0x02000000\n\ +_08024128: .4byte gBattleTypeFlags\n\ +_0802412C: .4byte gSaveBlock1 + 0x490\n\ +_08024130: .4byte gTrainers\n\ +_08024134: .4byte gTrainerBattleOpponent\n\ +_08024138: .4byte 0x00016056\n\ +_0802413C:\n\ + adds r4, r3, 0\n\ + muls r4, r2\n\ +_08024140:\n\ + mov r0, r8\n\ + adds r1, r4, 0\n\ + bl sub_80B79B8\n\ + ldr r1, _0802418C @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x1\n\ + strb r0, [r1, 0x1]\n\ + movs r0, 0x4\n\ + strb r0, [r1, 0x2]\n\ + movs r0, 0x5\n\ + strb r0, [r1, 0x3]\n\ + strb r4, [r1, 0x4]\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r4\n\ + lsrs r0, 8\n\ + strb r0, [r1, 0x5]\n\ + movs r0, 0xFF\n\ + lsls r0, 16\n\ + ands r0, r4\n\ + lsrs r0, 16\n\ + strb r0, [r1, 0x6]\n\ + lsrs r0, r4, 24\n\ + strb r0, [r1, 0x7]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x8]\n\ + ldr r1, _08024190 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x1\n\ + str r0, [r1]\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0802418C: .4byte gBattleTextBuff1\n\ +_08024190: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} +#endif //NONMATCHING + +static void atk5E_8025A70(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + switch (gBattleCommunication[0]) + { + case 0: + EmitGetAttributes(0, REQUEST_ALL_BATTLE, 0); + MarkBufferBankForExecution(gActiveBank); + gBattleCommunication[0]++; + break; + case 1: + if (gBattleExecBuffer == 0) + { + int i; + struct BattlePokemon* bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBank][4]; + for (i = 0; i < 4; i++) + { + gBattleMons[gActiveBank].moves[i] = bufferPoke->moves[i]; + gBattleMons[gActiveBank].pp[i] = bufferPoke->pp[i]; + } + gBattlescriptCurrInstr += 2; + } + break; + } +} + +static void atk5F_8025B24(void) +{ + gActiveBank = gBankAttacker; + gBankAttacker = gBankTarget; + gBankTarget = gActiveBank; + //what is xor... + if (gHitMarker & HITMARKER_PURSUIT_TRAP) + gHitMarker &= ~(HITMARKER_PURSUIT_TRAP); + else + gHitMarker |= HITMARKER_PURSUIT_TRAP; + gBattlescriptCurrInstr++; +} + +static void atk60_increment_gamestat(void) +{ + if (GetBankSide(gBankAttacker) == 0) + { + IncrementGameStat(BSScriptRead8(gBattlescriptCurrInstr + 1)); + } + gBattlescriptCurrInstr += 2; +} + +struct hp_status +{ + u16 hp; + u32 status; +}; + +static void atk61_8025BA4(void) +{ + int i; + struct Pokemon* poke; + struct hp_status hpStatus[6]; + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (GetBankSide(gActiveBank) == 0) + poke = gPlayerParty; + else + poke = gEnemyParty; + + for (i = 0; i < 6; i++) + { + if (GetMonData(&poke[i], MON_DATA_SPECIES2) == 0 || GetMonData(&poke[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + hpStatus[i].hp = 0xFFFF; + hpStatus[i].status = 0; + } + else + { + hpStatus[i].hp = GetMonData(&poke[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&poke[i], MON_DATA_STATUS); + } + } + dp01_build_cmdbuf_x30_TODO(0, (u8*)(hpStatus), 1); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk62_08025C6C(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + dp01_build_cmdbuf_x31_31_31_31(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk63_jumptorandomattack(void) +{ + if (BSScriptRead8(gBattlescriptCurrInstr + 1)) + gCurrentMove = gRandomMove; + else + gUnknown_02024BE8 = gCurrentMove = gRandomMove; + + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; +} + +static void atk64_statusanimation(void) +{ + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + EmitStatusAnimation(0, 0, gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr += 2; +} + +static void atk65_status2animation(void) +{ + u32 possible_to_anim; + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + possible_to_anim = BSScriptRead32(gBattlescriptCurrInstr + 2); + if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + EmitStatusAnimation(0, 1, gBattleMons[gActiveBank].status2 & possible_to_anim); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr += 6; +} + +static void atk66_chosenstatusanimation(void) +{ + u32 status; + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + status = BSScriptRead32(gBattlescriptCurrInstr + 3); + if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + EmitStatusAnimation(0, BSScriptRead8(gBattlescriptCurrInstr + 2), status); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr += 7; +} + +static void atk67_8025ECC(void) +{ + switch (gBattleCommunication[0]) + { + case 0: + sub_8023A80(); + gBattleCommunication[0]++; + gBattleCommunication[1] = 0; + sub_802BC6C(); + break; + case 1: + if (gMain.newKeys & 0x40 && gBattleCommunication[1] != 0) + { + PlaySE(5); + nullsub_6(); + gBattleCommunication[1] = 0; + sub_802BC6C(); + } + if (gMain.newKeys & 0x80 && gBattleCommunication[1] == 0) + { + PlaySE(5); + nullsub_6(); + gBattleCommunication[1] = 1; + sub_802BC6C(); + } + if (gMain.newKeys & 0x2) + gBattleCommunication[1] = 1; + else if (!(gMain.newKeys & 0x1)) + break; + PlaySE(5); + sub_8023AD8(); + gBattlescriptCurrInstr++; + break; + } +} + +static void atk68_80246A0(void) +{ + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + gUnknown_02024A76[i] = 0xC; + } + gBattlescriptCurrInstr++; +} + +static void atk69_dmg_adjustment2(void) //literally a copy of atk07 except theres no rand dmg modifier... +{ + u8 hold_effect, quality; + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) + { + RecordItemBattle(gBankTarget, hold_effect); + gSpecialStatuses[gBankTarget].focusBanded = 1; + } + if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) {goto END;} + if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBankTarget].endured + && !gSpecialStatuses[gBankTarget].focusBanded) {goto END;} + + if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) {goto END;} + + gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1; + + if (gProtectStructs[gBankTarget].endured) + { + gBattleMoveFlags |= MOVE_ENDURED; + goto END; + } + if (gSpecialStatuses[gBankTarget].focusBanded) + { + gBattleMoveFlags |= MOVE_HANGEDON; + gLastUsedItem = gBattleMons[gBankTarget].item; + } + + END: + gBattlescriptCurrInstr++; +} + +#ifdef NONMATCHING + +static void atk6A_removeitem(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + //BATTLE_STRUCT->UsedHeldItems[gActiveBank] = gBattleMons[gActiveBank].item; + #define USED_HELD_ITEMS(bank)((u16)(*(u8*)(((u8)(bank) << 1) + 0x020160cc))) + + USED_HELD_ITEMS(gActiveBank) = gBattleMons[gActiveBank].item; + gBattleMons[gActiveBank].item = 0; + EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +#else +__attribute__((naked)) +static void atk6A_removeitem(void) +{ + asm(".syntax unified\n\ +push {r4-r6,lr}\n\ + sub sp, 0x4\n\ + ldr r6, _080248B0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r6]\n\ + ldrb r0, [r0, 0x1]\n\ + bl GetBattleBank\n\ + ldr r5, _080248B4 @ =gActiveBank\n\ + strb r0, [r5]\n\ + ldrb r4, [r5]\n\ + lsls r1, r4, 1\n\ + ldr r0, _080248B8 @ =0x020160cc\n\ + adds r1, r0\n\ + ldr r2, _080248BC @ =gBattleMons\n\ + movs r3, 0x58\n\ + adds r0, r4, 0\n\ + muls r0, r3\n\ + adds r0, r2\n\ + ldrh r0, [r0, 0x2E]\n\ + strh r0, [r1]\n\ + ldrb r0, [r5]\n\ + muls r0, r3\n\ + adds r0, r2\n\ + movs r1, 0\n\ + strh r1, [r0, 0x2E]\n\ + ldrb r0, [r5]\n\ + muls r0, r3\n\ + adds r2, 0x2E\n\ + adds r0, r2\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r5]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, [r6]\n\ + adds r0, 0x2\n\ + str r0, [r6]\n\ + add sp, 0x4\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080248B0: .4byte gBattlescriptCurrInstr\n\ +_080248B4: .4byte gActiveBank\n\ +_080248B8: .4byte 0x020160cc\n\ +_080248BC: .4byte gBattleMons\n\ + .syntax divided"); +} + +#endif //NONMATCHING + +static void atk6B_atknameinbuff1(void) +{ + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 7; + gBattleTextBuff1[2] = gBankAttacker; + gBattleTextBuff1[3] = gBattlePartyID[gBankAttacker]; + gBattleTextBuff1[4] = 0xFF; + + gBattlescriptCurrInstr++; +} + +#ifdef NONMATCHING +static void atk6C_lvlbox_display(void) +{ + u8 r1 = 0; + u8 r7 = 0; + switch (BATTLE_STRUCT->atk6C_statetracker) + { + case 0: + sub_802BBD4(0xB, 0, 0x1D, 0x7, r1); + StringCopy(gStringVar4, gUnknown_08400D9F); + + } +} + +#else +__attribute__((naked)) +static void atk6C_lvlbox_display(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + movs r1, 0\n\ + movs r7, 0\n\ + ldr r0, _08024928 @ =0x02000000\n\ + mov r10, r0\n\ + ldr r4, _0802492C @ =0x0001609c\n\ + add r4, r10\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x1\n\ + bne _0802491C\n\ + b _08024AF4\n\ +_0802491C:\n\ + cmp r0, 0x1\n\ + bgt _08024930\n\ + cmp r0, 0\n\ + beq _0802493E\n\ + b _08024C38\n\ + .align 2, 0\n\ +_08024928: .4byte 0x02000000\n\ +_0802492C: .4byte 0x0001609c\n\ +_08024930:\n\ + cmp r0, 0x2\n\ + bne _08024936\n\ + b _08024C04\n\ +_08024936:\n\ + cmp r0, 0x3\n\ + bne _0802493C\n\ + b _08024C30\n\ +_0802493C:\n\ + b _08024C38\n\ +_0802493E:\n\ + str r1, [sp]\n\ + movs r0, 0xB\n\ + movs r1, 0\n\ + movs r2, 0x1D\n\ + movs r3, 0x7\n\ + bl sub_802BBD4\n\ + ldr r0, _0802499C @ =gStringVar4\n\ + ldr r1, _080249A0 @ =gUnknown_08400D9F\n\ + bl StringCopy\n\ + adds r5, r0, 0\n\ + movs r1, 0\n\ + mov r8, r1\n\ +_0802495A:\n\ + movs r2, 0\n\ + mov r9, r2\n\ + ldr r0, _080249A4 @ =gUnknown_0840165C\n\ + mov r1, r8\n\ + lsls r4, r1, 2\n\ + adds r0, r4, r0\n\ + ldr r1, [r0]\n\ + adds r0, r5, 0\n\ + bl StringAppend\n\ + adds r5, r0, 0\n\ + ldr r0, _080249A8 @ =0x02000000\n\ + ldr r2, _080249AC @ =0x00016018\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _080249B0 @ =gPlayerParty\n\ + adds r0, r1\n\ + ldr r1, _080249B4 @ =gLevelUpStatBoxStats\n\ + add r1, r8\n\ + ldrb r1, [r1]\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + mov r0, r8\n\ + cmp r0, 0x5\n\ + bhi _08024A1A\n\ + ldr r0, _080249B8 @ =_080249BC\n\ + adds r0, r4, r0\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0802499C: .4byte gStringVar4\n\ +_080249A0: .4byte gUnknown_08400D9F\n\ +_080249A4: .4byte gUnknown_0840165C\n\ +_080249A8: .4byte 0x02000000\n\ +_080249AC: .4byte 0x00016018\n\ +_080249B0: .4byte gPlayerParty\n\ +_080249B4: .4byte gLevelUpStatBoxStats\n\ +_080249B8: .4byte _080249BC\n\ + .align 2, 0\n\ +_080249BC:\n\ + .4byte _080249D4\n\ + .4byte _080249E0\n\ + .4byte _080249EC\n\ + .4byte _080249F8\n\ + .4byte _08024A04\n\ + .4byte _08024A10\n\ +_080249D4:\n\ + ldr r0, _080249DC @ =0x02017180\n\ + ldrh r0, [r0]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_080249DC: .4byte 0x02017180\n\ +_080249E0:\n\ + ldr r0, _080249E8 @ =0x02017180\n\ + ldrh r0, [r0, 0x8]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_080249E8: .4byte 0x02017180\n\ +_080249EC:\n\ + ldr r0, _080249F4 @ =0x02017180\n\ + ldrh r0, [r0, 0x2]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_080249F4: .4byte 0x02017180\n\ +_080249F8:\n\ + ldr r0, _08024A00 @ =0x02017180\n\ + ldrh r0, [r0, 0xA]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_08024A00: .4byte 0x02017180\n\ +_08024A04:\n\ + ldr r0, _08024A0C @ =0x02017180\n\ + ldrh r0, [r0, 0x4]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_08024A0C: .4byte 0x02017180\n\ +_08024A10:\n\ + ldr r0, _08024A54 @ =0x02017180\n\ + ldrh r0, [r0, 0x6]\n\ +_08024A14:\n\ + subs r0, r1, r0\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ +_08024A1A:\n\ + lsls r0, r7, 16\n\ + asrs r0, 16\n\ + cmp r0, 0\n\ + bge _08024A2C\n\ + negs r0, r0\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + movs r1, 0x1\n\ + add r9, r1\n\ +_08024A2C:\n\ + movs r0, 0xFC\n\ + strb r0, [r5]\n\ + movs r0, 0x13\n\ + strb r0, [r5, 0x1]\n\ + movs r1, 0x1\n\ + mov r2, r8\n\ + ands r1, r2\n\ + lsls r0, r1, 3\n\ + adds r0, r1\n\ + adds r0, 0x5\n\ + lsls r0, 3\n\ + adds r0, 0x6\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + mov r0, r9\n\ + cmp r0, 0\n\ + beq _08024A5C\n\ + ldr r1, _08024A58 @ =gUnknown_08400DAC\n\ + b _08024A5E\n\ + .align 2, 0\n\ +_08024A54: .4byte 0x02017180\n\ +_08024A58: .4byte gUnknown_08400DAC\n\ +_08024A5C:\n\ + ldr r1, _08024AA4 @ =gUnknown_08400DAA\n\ +_08024A5E:\n\ + adds r0, r5, 0\n\ + bl StringCopy\n\ + adds r5, r0, 0\n\ + movs r6, 0xFC\n\ + strb r6, [r5]\n\ + movs r4, 0x14\n\ + strb r4, [r5, 0x1]\n\ + movs r0, 0x6\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + lsls r1, r7, 16\n\ + asrs r1, 16\n\ + adds r0, r5, 0\n\ + movs r2, 0x1\n\ + movs r3, 0x2\n\ + bl ConvertIntToDecimalStringN\n\ + adds r5, r0, 0\n\ + strb r6, [r5]\n\ + strb r4, [r5, 0x1]\n\ + movs r0, 0\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + movs r0, 0x1\n\ + mov r1, r8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08024AA8\n\ + movs r0, 0xFE\n\ + strb r0, [r5]\n\ + movs r0, 0xFF\n\ + strb r0, [r5, 0x1]\n\ + adds r5, 0x1\n\ + b _08024AB8\n\ + .align 2, 0\n\ +_08024AA4: .4byte gUnknown_08400DAA\n\ +_08024AA8:\n\ + strb r6, [r5]\n\ + movs r0, 0x11\n\ + strb r0, [r5, 0x1]\n\ + movs r0, 0x8\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + movs r0, 0xFF\n\ + strb r0, [r5]\n\ +_08024AB8:\n\ + movs r2, 0x1\n\ + add r8, r2\n\ + mov r0, r8\n\ + cmp r0, 0x5\n\ + bgt _08024AC4\n\ + b _0802495A\n\ +_08024AC4:\n\ + ldr r4, _08024AE4 @ =gUnknown_03004210\n\ + ldr r1, _08024AE8 @ =gStringVar4\n\ + adds r2, 0xFF\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + adds r0, r4, 0\n\ + movs r3, 0xC\n\ + bl InitWindow\n\ + adds r0, r4, 0\n\ + bl sub_8002F44\n\ + ldr r1, _08024AEC @ =0x02000000\n\ + ldr r2, _08024AF0 @ =0x0001609c\n\ + adds r1, r2\n\ + b _08024BEA\n\ + .align 2, 0\n\ +_08024AE4: .4byte gUnknown_03004210\n\ +_08024AE8: .4byte gStringVar4\n\ +_08024AEC: .4byte 0x02000000\n\ +_08024AF0: .4byte 0x0001609c\n\ +_08024AF4:\n\ + ldr r0, _08024B94 @ =gMain\n\ + ldrh r0, [r0, 0x2E]\n\ + cmp r0, 0\n\ + bne _08024AFE\n\ + b _08024C38\n\ +_08024AFE:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r0, _08024B98 @ =gStringVar4\n\ + ldr r1, _08024B9C @ =gUnknown_08400D9F\n\ + bl StringCopy\n\ + adds r5, r0, 0\n\ + movs r0, 0\n\ + mov r8, r0\n\ + mov r9, r0\n\ + movs r6, 0xFC\n\ + movs r7, 0x14\n\ + ldr r1, _08024BA0 @ =0x00016018\n\ + add r10, r1\n\ +_08024B1C:\n\ + ldr r1, _08024BA4 @ =gUnknown_0840165C\n\ + mov r2, r8\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + adds r0, r5, 0\n\ + bl StringAppend\n\ + adds r5, r0, 0\n\ + mov r0, r10\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08024BA8 @ =gPlayerParty\n\ + adds r0, r1\n\ + ldr r1, _08024BAC @ =gLevelUpStatBoxStats\n\ + add r1, r8\n\ + ldrb r1, [r1]\n\ + bl GetMonData\n\ + adds r1, r0, 0\n\ + strb r6, [r5]\n\ + movs r0, 0x13\n\ + strb r0, [r5, 0x1]\n\ + movs r4, 0x1\n\ + mov r2, r8\n\ + ands r4, r2\n\ + lsls r0, r4, 3\n\ + adds r0, r4\n\ + adds r0, 0x5\n\ + lsls r0, 3\n\ + adds r0, 0x6\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + strb r6, [r5]\n\ + strb r7, [r5, 0x1]\n\ + movs r0, 0x6\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + adds r0, r5, 0\n\ + movs r2, 0x1\n\ + movs r3, 0x3\n\ + bl ConvertIntToDecimalStringN\n\ + adds r5, r0, 0\n\ + strb r6, [r5]\n\ + strb r7, [r5, 0x1]\n\ + mov r0, r9\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + cmp r4, 0\n\ + beq _08024BB0\n\ + movs r0, 0xFE\n\ + strb r0, [r5]\n\ + movs r0, 0xFF\n\ + strb r0, [r5, 0x1]\n\ + adds r5, 0x1\n\ + b _08024BC0\n\ + .align 2, 0\n\ +_08024B94: .4byte gMain\n\ +_08024B98: .4byte gStringVar4\n\ +_08024B9C: .4byte gUnknown_08400D9F\n\ +_08024BA0: .4byte 0x00016018\n\ +_08024BA4: .4byte gUnknown_0840165C\n\ +_08024BA8: .4byte gPlayerParty\n\ +_08024BAC: .4byte gLevelUpStatBoxStats\n\ +_08024BB0:\n\ + strb r6, [r5]\n\ + movs r0, 0x11\n\ + strb r0, [r5, 0x1]\n\ + movs r0, 0x8\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + movs r0, 0xFF\n\ + strb r0, [r5]\n\ +_08024BC0:\n\ + movs r1, 0x1\n\ + add r8, r1\n\ + mov r2, r8\n\ + cmp r2, 0x5\n\ + ble _08024B1C\n\ + ldr r4, _08024BF4 @ =gUnknown_03004210\n\ + ldr r1, _08024BF8 @ =gStringVar4\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + adds r0, r4, 0\n\ + movs r3, 0xC\n\ + bl InitWindow\n\ + adds r0, r4, 0\n\ + bl sub_8002F44\n\ + ldr r1, _08024BFC @ =0x02000000\n\ + ldr r0, _08024C00 @ =0x0001609c\n\ + adds r1, r0\n\ +_08024BEA:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _08024C38\n\ + .align 2, 0\n\ +_08024BF4: .4byte gUnknown_03004210\n\ +_08024BF8: .4byte gStringVar4\n\ +_08024BFC: .4byte 0x02000000\n\ +_08024C00: .4byte 0x0001609c\n\ +_08024C04:\n\ + ldr r0, _08024C2C @ =gMain\n\ + ldrh r0, [r0, 0x2E]\n\ + cmp r0, 0\n\ + beq _08024C38\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + movs r0, 0xB\n\ + movs r1, 0\n\ + movs r2, 0x1D\n\ + movs r3, 0x7\n\ + bl sub_802BBD4\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + b _08024C38\n\ + .align 2, 0\n\ +_08024C2C: .4byte gMain\n\ +_08024C30:\n\ + ldr r1, _08024C48 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x1\n\ + str r0, [r1]\n\ +_08024C38:\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08024C48: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} + +#endif + +static void atk6D_set_sentpokes_values(void) +{ + sub_80156DC(); + gBattlescriptCurrInstr++; +} + +static void atk6E_set_atk_to_player0(void) +{ + gBankAttacker = GetBankByPlayerAI(0); + gBattlescriptCurrInstr++; +} + +static void atk6F_set_visible(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitSpriteInvisibility(0, 0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk70_record_ability(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + RecordAbilityBattle(gActiveBank, gLastUsedAbility); + gBattlescriptCurrInstr += 1; //buggy, should be += 2, one byte for command, one byte for argument... +} + +void sub_8024CEC(void) +{ + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 2; + gBattleTextBuff2[2] = (word_2024E82); + gBattleTextBuff2[3] = uBYTE1_16(word_2024E82); + gBattleTextBuff2[4] = 0xFF; +} + +static void atk71_buffer_move_to_learn(void) +{ + sub_8024CEC(); + gBattlescriptCurrInstr++; +} + +static void atk72_jump_if_can_run_frombattle(void) +{ + if (sub_8014AB8(gBank1)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; +} + +static void atk73_hp_thresholds(void) +{ + u8 opposing_bank; + s32 result; + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + opposing_bank = gActiveBank ^ 1; + result = ATLEAST_ONE(gBattleMons[opposing_bank].hp * 100 / gBattleMons[opposing_bank].maxHP); + + if (result > 69 || !gBattleMons[opposing_bank].hp) + BATTLE_STRUCT->hpScale = 0; + else if (result > 39) + BATTLE_STRUCT->hpScale = 1; + else if (result > 9) + BATTLE_STRUCT->hpScale = 2; + else + BATTLE_STRUCT->hpScale = 3; + } + + gBattlescriptCurrInstr += 2; +} + +static void atk74_hp_thresholds2(void) +{ + u8 opposing_bank; + u8 hp_switchout; + s32 result; + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + opposing_bank = gActiveBank ^ 1; + hp_switchout = ewram[2 * GetBankSide(opposing_bank) + 0x160bc]; //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)]; + result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout; + + if (gBattleMons[opposing_bank].hp >= hp_switchout) + BATTLE_STRUCT->hpScale = 0; + else if (result <= 29) + BATTLE_STRUCT->hpScale = 1; + else if (result <= 69) + BATTLE_STRUCT->hpScale = 2; + else + BATTLE_STRUCT->hpScale = 3; + } + + gBattlescriptCurrInstr += 2; +} + +static void atk75_8026A58(void) +{ + gBankInMenu = gBankAttacker; + sub_803E1B0(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1); + gBattlescriptCurrInstr += 1; +} + +static void atk76_various(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) + { + case 0: + CancelMultiTurnMoves(gActiveBank); + break; + case 1: + { + u8 side; + gBankAttacker = gBankTarget; + side = GetBankSide(gBankAttacker) ^ 1; + if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp) + gBankTarget = gSideTimer[side].followmeTarget; + else + gBankTarget = gActiveBank; + } + break; + case 2: + gBattleCommunication[0] = CanRunFromBattle(); + break; + case 3: + gBankTarget = sub_801B5C0(gCurrentMove, 0); + break; + case 4: + if (gHitMarker & HITMARKER_FAINTED(gActiveBank)) + gBattleCommunication[0] = 1; + else + gBattleCommunication[0] = 0; + break; + case 5: + gSpecialStatuses[gActiveBank].intimidatedPoke = 0; + gSpecialStatuses[gActiveBank].traced = 0; + break; + case 6: + { + int i; + u16* choiced_move; + if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID) + goto ACTIVE_0; + if (gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) + break; + if (gBattlePartyID[0] == gBattlePartyID[2]) + { + ACTIVE_0: + gActiveBank = 0; + } + else + gActiveBank = 2; + + choiced_move = (u16*)(&ewram[gActiveBank * 2 + 0x160e8]); + for (i = 0; i < 4; i++) + { + if (gBattleMons[gActiveBank].moves[i] == *choiced_move) + break; + } + if (i == 4) + *choiced_move = 0; + } + break; + } + + gBattlescriptCurrInstr += 3; +} + +static void atk77_setprotect(void) //protect and endure +{ + bool8 not_last_turn = 1; + u16 last_move = gUnknown_02024C4C[gBankAttacker]; + + if (last_move != MOVE_PROTECT && last_move != MOVE_DETECT && last_move != MOVE_ENDURE) + gDisableStructs[gBankAttacker].protectUses = 0; + if (gCurrentMoveTurn == (gNoOfAllBanks - 1)) + not_last_turn = 0; + + if (sProtectSuccessRates[gDisableStructs[gBankAttacker].protectUses] > Random() && not_last_turn) + { + if (gBattleMoves[gCurrentMove].effect == EFFECT_PROTECT) + { + gProtectStructs[gBankAttacker].protected = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE) //what is else if + { + gProtectStructs[gBankAttacker].endured = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + gDisableStructs[gBankAttacker].protectUses++; + } + else + { + gDisableStructs[gBankAttacker].protectUses = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + gBattleMoveFlags |= MOVE_MISSED; + } + + gBattlescriptCurrInstr++; +} + +static void atk78_faintifabilitynotdamp(void) +{ + if (gBattleExecBuffer) + return; + + for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (gBattleMons[gBankTarget].ability == ABILITY_DAMP) + break; + } + + if (gBankTarget == gNoOfAllBanks) + { + gActiveBank = gBankAttacker; + gBattleMoveDamage = gBattleMons[gActiveBank].hp; + EmitHealthBarUpdate(0, 0x7FFF); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr++; + + for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (gBankTarget == gBankAttacker) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) + break; + } + } + else + { + gLastUsedAbility = ABILITY_DAMP; + RecordAbilityBattle(gBankTarget, gBattleMons[gBankTarget].ability); + gBattlescriptCurrInstr = gUnknown_081D9834; + } +} + +static void atk79_setatkhptozero(void) +{ + if (gBattleExecBuffer) + return; + + gActiveBank = gBankAttacker; + gBattleMons[gActiveBank].hp = 0; + EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); + MarkBufferBankForExecution(gActiveBank); + + gBattlescriptCurrInstr++; +} + +static void atk7A_jumpwhiletargetvalid(void) //used by intimidate to loop through all targets +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + for (gBankTarget++; ; gBankTarget++) + { + if (gBankTarget == gBankAttacker) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) + break; + } + + if (gBankTarget >= gNoOfAllBanks) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = jump_loc; + } + else + gBattlescriptCurrInstr += 5; +} + +static void atk7B_healhalfHP_if_possible(void) +{ + u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + + if (BSScriptRead8(gBattlescriptCurrInstr + 5) == 1) + gBankTarget = gBankAttacker; + + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + gBattleMoveDamage *= -1; + + if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) + gBattlescriptCurrInstr = fail_loc; + else + gBattlescriptCurrInstr += 6; +} + +static void atk7C_8025508(void) +{ + u16 r7 = ewram[gBankAttacker * 2 + 0x160ac] | (ewram[gBankAttacker * 2 + 0x160ad] << 8); + u16 r6 = ewram[gBankAttacker * 4 + 0x16100] | (ewram[gBankAttacker * 4 + 0x16101] << 8); + u16 r5 = ewram[gBankAttacker * 4 + 0x16102] | (ewram[gBankAttacker * 4 + 0x16103] << 8); + + if (r7 !=0 && r7 != 0xFFFF) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gCurrentMove = r7; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + } + else if (r6 != 0 && r5 != 0 && r6 != 0xFFFF && r5 != 0xFFFF) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + if (Random() & 1) + gCurrentMove = r6; + else + gCurrentMove = r5; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + } + else if (r6 != 0 && r6 != 0xFFFF) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gCurrentMove = r6; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + } + else if (r5 != 0 && r5 != 0xFFFF) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gCurrentMove = r5; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + } + else + { + gSpecialStatuses[gBankAttacker].flag20 = 1; + gBattlescriptCurrInstr++; + } +} + +static void atk7D_set_rain(void) +{ + if (gBattleWeather & WEATHER_RAINY) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gBattleWeather = weather_rain; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gWishFutureKnock.weatherDuration = 5; + } + gBattlescriptCurrInstr++; +} + +static void atk7E_setreflect(void) +{ + if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_REFLECT) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_REFLECT; + gSideTimer[GetBankIdentity(gBankAttacker) & 1].reflectTimer = 5; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + gBattlescriptCurrInstr++; +} + +static void atk7F_setseeded(void) +{ + if (gBattleMoveFlags & MOVE_NO_EFFECT || gStatuses3[gBankTarget] & STATUS3_LEECHSEED) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else if (gBattleMons[gBankTarget].type1 == TYPE_GRASS || gBattleMons[gBankTarget].type2 == TYPE_GRASS) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gStatuses3[gBankTarget] |= gBankAttacker; + gStatuses3[gBankTarget] |= STATUS3_LEECHSEED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + + gBattlescriptCurrInstr++; +} + +static void atk80_manipulatedamage(void) +{ + switch (BSScriptRead8(gBattlescriptCurrInstr + 1)) + { + case 0: + gBattleMoveDamage *= -1; + break; + case 1: + gBattleMoveDamage /= 2; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + if ((gBattleMons[gBankTarget].maxHP / 2) < gBattleMoveDamage) + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; + break; + case 2: + gBattleMoveDamage *= 2; + break; + } + + gBattlescriptCurrInstr += 2; +} + +static void atk81_setrest(void) +{ + u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gActiveBank = gBankTarget = gBankAttacker; + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP * (-1); + if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) + gBattlescriptCurrInstr = fail_loc; + else + { + if (gBattleMons[gBankTarget].status1 & ((u8)(~STATUS_SLEEP))) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + + gBattleMons[gBankTarget].status1 = 3; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 5; + } +} + +static void atk82_jumpifnotfirstturn(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + + if (gDisableStructs[gBankAttacker].isFirstTurn) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = jump_loc; +} + +static void atk83_nop(void) +{ + gBattlescriptCurrInstr++; +} + +bool8 sub_8025A44(u8 bank) //uproar wakeup check +{ + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[bank].ability == ABILITY_SOUNDPROOF) //wtf gamefreak, you should check this only once, not every time in a loop... + continue; + BATTLE_STRUCT->scriptingActive = i; + if (gBankTarget == 0xFF) + gBankTarget = i; + else if (gBankTarget == i) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + break; + } + if (i == gNoOfAllBanks) + return 0; + else + return 1; +} + +static void atk84_jump_if_cant_sleep(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + if (sub_8025A44(gBankTarget)) + gBattlescriptCurrInstr = jump_loc; + else if (gBattleMons[gBankTarget].ability == ABILITY_INSOMNIA || gBattleMons[gBankTarget].ability == ABILITY_VITAL_SPIRIT) + { + gLastUsedAbility = gBattleMons[gBankTarget].ability; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + gBattlescriptCurrInstr = jump_loc; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + else + { + gBattlescriptCurrInstr += 5; + } +} + +static void atk85_stockpile(void) +{ + if (gDisableStructs[gBankAttacker].stockpileCounter == 3) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gDisableStructs[gBankAttacker].stockpileCounter++; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 1; + gBattleTextBuff1[2] = 1; + gBattleTextBuff1[3] = 1; + gBattleTextBuff1[4] = gDisableStructs[gBankAttacker].stockpileCounter; + gBattleTextBuff1[5] = 0xFF; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + gBattlescriptCurrInstr++; +} + +static void atk86_stockpiletobasedamage(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + if (gDisableStructs[gBankAttacker].stockpileCounter == 0) + gBattlescriptCurrInstr = jump_loc; + else + { + if (gBattleCommunication[6] != 1) + { + gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, + gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0, + 0, gBankAttacker, gBankTarget) + * gDisableStructs[gBankAttacker].stockpileCounter; + BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; + + if (gProtectStructs[gBankAttacker].helpingHand) + gBattleMoveDamage = gBattleMoveDamage * 15 / 10; + } + gDisableStructs[gBankAttacker].stockpileCounter = 0; + gBattlescriptCurrInstr += 5; + } +} + +static void atk87_stockpiletohpheal(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + if (gDisableStructs[gBankAttacker].stockpileCounter == 0) + { + gBattlescriptCurrInstr = jump_loc; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else if (gBattleMons[gBankAttacker].maxHP == gBattleMons[gBankAttacker].hp) + { + gDisableStructs[gBankAttacker].stockpileCounter = 0; + gBattlescriptCurrInstr = jump_loc; + gBankTarget = gBankAttacker; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / (1 << (3 - gDisableStructs[gBankAttacker].stockpileCounter)); + ATLEAST_ONE_PTR(&gBattleMoveDamage); + gBattleMoveDamage *= -1; + BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; + gDisableStructs[gBankAttacker].stockpileCounter = 0; + gBattlescriptCurrInstr += 5; + gBankTarget = gBankAttacker; + } +} + +static void atk88_negativedamage(void) +{ + gBattleMoveDamage = (gHP_dealt / 2) *(-1); + ATLEAST_ONE_PTR_NEGATIVE(&gBattleMoveDamage); + gBattlescriptCurrInstr++; +} + +#ifdef NONMATCHING +u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) +{ + u8 r9 = 0; + u8 r10 = 0; + u8 index; + if (flags & 0x40) + gActiveBank = gBankAttacker; + else + gActiveBank = gBankTarget; + flags &= ~(0x40); + if (flags & 0x80) + r9++; + flags &= ~(0x80); + if (flags & 0x20) + r10++; + flags &= ~(0x20); + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 5; + gBattleTextBuff1[2] = stat; + gBattleTextBuff1[3] = 0xFF; + + if ((statchanger << 0x18) < 0) //stat decrease + { + if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE) + { + if (flags == 1) + { + if (gSpecialStatuses[gActiveBank].statloweringflag) + gBattlescriptCurrInstr = bs_ptr; + else + { + b_movescr_stack_push(bs_ptr); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattlescriptCurrInstr = BattleScript_MistProtected; + gSpecialStatuses[gActiveBank].statloweringflag = 1; + } + } + return 1; + } + else if (gCurrentMove != MOVE_CURSE && r10 != 1 && JumpIfMoveAffectedByProtect(0)) + { + gBattlescriptCurrInstr = BattleScript_ButItFailed; + return 1; + } + else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) && !r9 && gCurrentMove != MOVE_CURSE) + { + if (flags == 1) + { + if (gSpecialStatuses[gActiveBank].statloweringflag) + gBattlescriptCurrInstr = bs_ptr; + else + { + b_movescr_stack_push(bs_ptr); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; + gLastUsedAbility = gBattleMons[gActiveBank].ability; + RecordAbilityBattle(gActiveBank, gLastUsedAbility); + gSpecialStatuses[gActiveBank].statloweringflag = 1; + } + } + return 1; + } + else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE && !r9 && stat == ACC_BUFF) + { + if (flags == 1) + { + b_movescr_stack_push(bs_ptr); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; + gLastUsedAbility = gBattleMons[gActiveBank].ability; + RecordAbilityBattle(gActiveBank, gLastUsedAbility); + } + return 1; + } + else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER && !r9 && stat == ATK_BUFF) + { + if (flags == 1) + { + b_movescr_stack_push(bs_ptr); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; + gLastUsedAbility = gBattleMons[gActiveBank].ability; + RecordAbilityBattle(gActiveBank, gLastUsedAbility); + } + return 1; + } + else if (gBattleMons[gActiveBank].ability == ABILITY_SHIELD_DUST && flags == 0) + return 1; + else //decrease + { + statchanger = -((statchanger >> 4) & (7)); + gBattleTextBuff2[0] = 0xFD; + index = 1; + if (statchanger == -2) + { + gBattleTextBuff2[1] = 0; + gBattleTextBuff2[2] = 0xD3; //harshly + gBattleTextBuff2[3] = 0x0; + index = 4; + } + gBattleTextBuff2[index] = 0; + index++; + gBattleTextBuff2[index] = 0xD4; //fell + index++; + gBattleTextBuff2[index] = 0; + index++; + gBattleTextBuff2[index] = 0xFF; + + if (gBattleMons[gActiveBank].statStages[stat] == 0) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + u8 stringID = 0; + if (gBankTarget == gActiveBank) + stringID = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = stringID; + } + } + } + else //stat increase + { + statchanger = (statchanger >> 4) & (7); + gBattleTextBuff2[0] = 0xFD; + index = 1; + if (statchanger == 2) + { + gBattleTextBuff2[1] = 0; + gBattleTextBuff2[2] = 0xD1; //sharply + gBattleTextBuff2[3] = 0x0; + index = 4; + } + gBattleTextBuff2[index] = 0; + index++; + gBattleTextBuff2[index] = 0xD2; //rose + index++; + gBattleTextBuff2[index] = 0; + index++; + gBattleTextBuff2[index] = 0xFF; + + if (gBattleMons[gActiveBank].statStages[stat] == 0xC) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + u8 stringID = 0; + if (gBankTarget == gActiveBank) + stringID = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = stringID; + } + } + + gBattleMons[gActiveBank].statStages[stat] += statchanger; + if (gBattleMons[gActiveBank].statStages[stat] < 0) + gBattleMons[gActiveBank].statStages[stat] = 0; + if (gBattleMons[gActiveBank].statStages[stat] > 0xC) + gBattleMons[gActiveBank].statStages[stat] = 0xC; + + if (gBattleCommunication[MULTISTRING_CHOOSER] == 2) + { + if (flags & 1) + gBattleMoveFlags |= MOVE_MISSED; + if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & 1)) //what the actual fuck gamefreak... + return 1; + } + return 0; +} + +#else +__attribute__((naked)) +u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + mov r8, r3\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + lsls r1, 24\n\ + lsrs r7, r1, 24\n\ + lsls r2, 24\n\ + lsrs r5, r2, 24\n\ + movs r0, 0\n\ + mov r9, r0\n\ + mov r10, r0\n\ + movs r0, 0x40\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08025E54\n\ + ldr r0, _08025E4C @ =gActiveBank\n\ + ldr r1, _08025E50 @ =gBankAttacker\n\ + b _08025E58\n\ + .align 2, 0\n\ +_08025E4C: .4byte gActiveBank\n\ +_08025E50: .4byte gBankAttacker\n\ +_08025E54:\n\ + ldr r0, _08025EF8 @ =gActiveBank\n\ + ldr r1, _08025EFC @ =gBankTarget\n\ +_08025E58:\n\ + ldrb r1, [r1]\n\ + strb r1, [r0]\n\ + movs r0, 0xBF\n\ + ands r5, r0\n\ + movs r0, 0x80\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08025E72\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ +_08025E72:\n\ + movs r0, 0x7F\n\ + ands r5, r0\n\ + movs r0, 0x20\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08025E88\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ +_08025E88:\n\ + movs r0, 0xDF\n\ + ands r5, r0\n\ + ldr r1, _08025F00 @ =gBattleTextBuff1\n\ + movs r4, 0\n\ + movs r2, 0xFD\n\ + strb r2, [r1]\n\ + movs r0, 0x5\n\ + strb r0, [r1, 0x1]\n\ + strb r7, [r1, 0x2]\n\ + movs r3, 0x1\n\ + negs r3, r3\n\ + mov r12, r3\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x3]\n\ + lsls r0, r6, 24\n\ + cmp r0, 0\n\ + blt _08025EAC\n\ + b _080261B0\n\ +_08025EAC:\n\ + ldr r4, _08025F04 @ =gSideTimer\n\ + ldr r1, _08025EF8 @ =gActiveBank\n\ + ldrb r0, [r1]\n\ + bl GetBankIdentity\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r0, [r0, 0x2]\n\ + cmp r0, 0\n\ + beq _08025F54\n\ + mov r2, r9\n\ + cmp r2, 0\n\ + bne _08025F54\n\ + ldr r0, _08025F08 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + cmp r0, 0xAE\n\ + beq _08025F84\n\ + cmp r5, 0x1\n\ + bne _08025F74\n\ + ldr r4, _08025F0C @ =gSpecialStatuses\n\ + ldr r3, _08025EF8 @ =gActiveBank\n\ + ldrb r0, [r3]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + ldrb r0, [r1]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _08025F14\n\ + ldr r0, _08025F10 @ =gBattlescriptCurrInstr\n\ + mov r4, r8\n\ + str r4, [r0]\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08025EF8: .4byte gActiveBank\n\ +_08025EFC: .4byte gBankTarget\n\ +_08025F00: .4byte gBattleTextBuff1\n\ +_08025F04: .4byte gSideTimer\n\ +_08025F08: .4byte gCurrentMove\n\ +_08025F0C: .4byte gSpecialStatuses\n\ +_08025F10: .4byte gBattlescriptCurrInstr\n\ +_08025F14:\n\ + mov r0, r8\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08025F40 @ =0x02000000\n\ + ldr r6, _08025F44 @ =gActiveBank\n\ + ldrb r1, [r6]\n\ + ldr r2, _08025F48 @ =0x00016003\n\ + adds r0, r2\n\ + strb r1, [r0]\n\ + ldr r1, _08025F4C @ =gBattlescriptCurrInstr\n\ + ldr r0, _08025F50 @ =BattleScript_MistProtected\n\ + str r0, [r1]\n\ + ldrb r1, [r6]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r1, [r0]\n\ + movs r2, 0x1\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08025F40: .4byte 0x02000000\n\ +_08025F44: .4byte gActiveBank\n\ +_08025F48: .4byte 0x00016003\n\ +_08025F4C: .4byte gBattlescriptCurrInstr\n\ +_08025F50: .4byte BattleScript_MistProtected\n\ +_08025F54:\n\ + ldr r0, _08025F78 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + cmp r0, 0xAE\n\ + beq _08025F84\n\ + mov r3, r10\n\ + cmp r3, 0x1\n\ + beq _08025F84\n\ + movs r0, 0\n\ + bl JumpIfMoveAffectedByProtect\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08025F84\n\ + ldr r1, _08025F7C @ =gBattlescriptCurrInstr\n\ + ldr r0, _08025F80 @ =BattleScript_ButItFailed\n\ + str r0, [r1]\n\ +_08025F74:\n\ + movs r0, 0x1\n\ + b _080262A4\n\ + .align 2, 0\n\ +_08025F78: .4byte gCurrentMove\n\ +_08025F7C: .4byte gBattlescriptCurrInstr\n\ +_08025F80: .4byte BattleScript_ButItFailed\n\ +_08025F84:\n\ + ldr r2, _08025FCC @ =gBattleMons\n\ + ldr r1, _08025FD0 @ =gActiveBank\n\ + ldrb r3, [r1]\n\ + movs r4, 0x58\n\ + adds r0, r3, 0\n\ + muls r0, r4\n\ + adds r0, r2\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + mov r10, r2\n\ + cmp r0, 0x1D\n\ + beq _08025FA0\n\ + cmp r0, 0x49\n\ + bne _08026040\n\ +_08025FA0:\n\ + mov r0, r9\n\ + cmp r0, 0\n\ + bne _08026040\n\ + ldr r0, _08025FD4 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + cmp r0, 0xAE\n\ + beq _08026040\n\ + cmp r5, 0x1\n\ + bne _08025F74\n\ + ldr r4, _08025FD8 @ =gSpecialStatuses\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _08025FE0\n\ + ldr r0, _08025FDC @ =gBattlescriptCurrInstr\n\ + mov r1, r8\n\ + str r1, [r0]\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08025FCC: .4byte gBattleMons\n\ +_08025FD0: .4byte gActiveBank\n\ +_08025FD4: .4byte gCurrentMove\n\ +_08025FD8: .4byte gSpecialStatuses\n\ +_08025FDC: .4byte gBattlescriptCurrInstr\n\ +_08025FE0:\n\ + mov r0, r8\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08026028 @ =0x02000000\n\ + ldr r2, _0802602C @ =gActiveBank\n\ + ldrb r1, [r2]\n\ + ldr r3, _08026030 @ =0x00016003\n\ + adds r0, r3\n\ + strb r1, [r0]\n\ + ldr r1, _08026034 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08026038 @ =BattleScript_AbilityNoStatLoss\n\ + str r0, [r1]\n\ + ldr r1, _0802603C @ =gLastUsedAbility\n\ + ldrb r0, [r2]\n\ + movs r6, 0x58\n\ + muls r0, r6\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r2]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + ldr r0, _0802602C @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r1, [r0]\n\ + movs r2, 0x1\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08026028: .4byte 0x02000000\n\ +_0802602C: .4byte gActiveBank\n\ +_08026030: .4byte 0x00016003\n\ +_08026034: .4byte gBattlescriptCurrInstr\n\ +_08026038: .4byte BattleScript_AbilityNoStatLoss\n\ +_0802603C: .4byte gLastUsedAbility\n\ +_08026040:\n\ + ldr r1, _08026090 @ =gActiveBank\n\ + ldrb r0, [r1]\n\ + movs r4, 0x58\n\ + muls r0, r4\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x33\n\ + bne _080260A8\n\ + mov r2, r9\n\ + cmp r2, 0\n\ + bne _080260A8\n\ + cmp r7, 0x6\n\ + bne _080260A8\n\ + cmp r5, 0x1\n\ + bne _08025F74\n\ + mov r0, r8\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08026094 @ =0x02000000\n\ + ldr r3, _08026090 @ =gActiveBank\n\ + ldrb r1, [r3]\n\ + ldr r6, _08026098 @ =0x00016003\n\ + adds r0, r6\n\ + strb r1, [r0]\n\ + ldr r1, _0802609C @ =gBattlescriptCurrInstr\n\ + ldr r0, _080260A0 @ =BattleScript_AbilityNoSpecificStatLoss\n\ + str r0, [r1]\n\ + ldr r1, _080260A4 @ =gLastUsedAbility\n\ + ldrb r0, [r3]\n\ + muls r0, r4\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08026090: .4byte gActiveBank\n\ +_08026094: .4byte 0x02000000\n\ +_08026098: .4byte 0x00016003\n\ +_0802609C: .4byte gBattlescriptCurrInstr\n\ +_080260A0: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ +_080260A4: .4byte gLastUsedAbility\n\ +_080260A8:\n\ + ldr r1, _080260FC @ =gActiveBank\n\ + ldrb r0, [r1]\n\ + movs r4, 0x58\n\ + muls r0, r4\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x34\n\ + bne _08026114\n\ + mov r2, r9\n\ + cmp r2, 0\n\ + bne _08026114\n\ + cmp r7, 0x1\n\ + bne _08026114\n\ + cmp r5, 0x1\n\ + beq _080260CA\n\ + b _08025F74\n\ +_080260CA:\n\ + mov r0, r8\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08026100 @ =0x02000000\n\ + ldr r3, _080260FC @ =gActiveBank\n\ + ldrb r1, [r3]\n\ + ldr r6, _08026104 @ =0x00016003\n\ + adds r0, r6\n\ + strb r1, [r0]\n\ + ldr r1, _08026108 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0802610C @ =BattleScript_AbilityNoSpecificStatLoss\n\ + str r0, [r1]\n\ + ldr r1, _08026110 @ =gLastUsedAbility\n\ + ldrb r0, [r3]\n\ + muls r0, r4\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + b _08025F74\n\ + .align 2, 0\n\ +_080260FC: .4byte gActiveBank\n\ +_08026100: .4byte 0x02000000\n\ +_08026104: .4byte 0x00016003\n\ +_08026108: .4byte gBattlescriptCurrInstr\n\ +_0802610C: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ +_08026110: .4byte gLastUsedAbility\n\ +_08026114:\n\ + ldr r0, _080261A0 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x13\n\ + bne _0802612C\n\ + cmp r5, 0\n\ + bne _0802612C\n\ + b _08025F74\n\ +_0802612C:\n\ + lsls r0, r6, 24\n\ + asrs r0, 28\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + negs r0, r0\n\ + lsls r0, 24\n\ + ldr r3, _080261A4 @ =gBattleTextBuff2\n\ + movs r4, 0\n\ + movs r1, 0xFD\n\ + strb r1, [r3]\n\ + movs r2, 0x1\n\ + lsrs r6, r0, 24\n\ + asrs r0, 24\n\ + subs r1, 0xFF\n\ + cmp r0, r1\n\ + bne _08026156\n\ + strb r4, [r3, 0x1]\n\ + movs r0, 0xD3\n\ + strb r0, [r3, 0x2]\n\ + strb r4, [r3, 0x3]\n\ + movs r2, 0x4\n\ +_08026156:\n\ + adds r0, r2, r3\n\ + strb r4, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2, r3\n\ + movs r0, 0xD4\n\ + strb r0, [r1]\n\ + adds r2, 0x1\n\ + adds r0, r2, r3\n\ + strb r4, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2, r3\n\ + movs r0, 0xFF\n\ + strb r0, [r1]\n\ + ldr r1, _080261A0 @ =gActiveBank\n\ + ldrb r2, [r1]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r0, r7, r0\n\ + mov r1, r10\n\ + adds r1, 0x18\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0\n\ + beq _08026206\n\ + movs r1, 0\n\ + ldr r0, _080261A8 @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + ldr r3, _080261AC @ =gBattleCommunication\n\ + mov r8, r3\n\ + cmp r0, r2\n\ + bne _0802619A\n\ + movs r1, 0x1\n\ +_0802619A:\n\ + mov r4, r8\n\ + strb r1, [r4, 0x5]\n\ + b _08026234\n\ + .align 2, 0\n\ +_080261A0: .4byte gActiveBank\n\ +_080261A4: .4byte gBattleTextBuff2\n\ +_080261A8: .4byte gBankTarget\n\ +_080261AC: .4byte gBattleCommunication\n\ +_080261B0:\n\ + asrs r6, r0, 28\n\ + movs r0, 0x7\n\ + ands r6, r0\n\ + ldr r3, _08026210 @ =gBattleTextBuff2\n\ + strb r2, [r3]\n\ + movs r2, 0x1\n\ + cmp r6, 0x2\n\ + bne _080261CA\n\ + strb r4, [r3, 0x1]\n\ + movs r0, 0xD1\n\ + strb r0, [r3, 0x2]\n\ + strb r4, [r3, 0x3]\n\ + movs r2, 0x4\n\ +_080261CA:\n\ + adds r0, r2, r3\n\ + strb r4, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2, r3\n\ + movs r0, 0xD2\n\ + strb r0, [r1]\n\ + adds r2, 0x1\n\ + adds r0, r2, r3\n\ + strb r4, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2, r3\n\ + ldrb r0, [r1]\n\ + mov r2, r12\n\ + orrs r0, r2\n\ + strb r0, [r1]\n\ + ldr r2, _08026214 @ =gBattleMons\n\ + ldr r4, _08026218 @ =gActiveBank\n\ + ldrb r3, [r4]\n\ + movs r0, 0x58\n\ + muls r0, r3\n\ + adds r0, r7, r0\n\ + adds r1, r2, 0\n\ + adds r1, 0x18\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + mov r10, r2\n\ + cmp r0, 0xC\n\ + bne _08026220\n\ +_08026206:\n\ + ldr r1, _0802621C @ =gBattleCommunication\n\ + movs r0, 0x2\n\ + strb r0, [r1, 0x5]\n\ + mov r8, r1\n\ + b _08026234\n\ + .align 2, 0\n\ +_08026210: .4byte gBattleTextBuff2\n\ +_08026214: .4byte gBattleMons\n\ +_08026218: .4byte gActiveBank\n\ +_0802621C: .4byte gBattleCommunication\n\ +_08026220:\n\ + movs r1, 0\n\ + ldr r0, _080262B4 @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + ldr r2, _080262B8 @ =gBattleCommunication\n\ + mov r8, r2\n\ + cmp r0, r3\n\ + bne _08026230\n\ + movs r1, 0x1\n\ +_08026230:\n\ + mov r3, r8\n\ + strb r1, [r3, 0x5]\n\ +_08026234:\n\ + ldr r2, _080262BC @ =gActiveBank\n\ + ldrb r0, [r2]\n\ + movs r4, 0x58\n\ + adds r1, r0, 0\n\ + muls r1, r4\n\ + adds r1, r7, r1\n\ + mov r3, r10\n\ + adds r3, 0x18\n\ + adds r1, r3\n\ + lsls r0, r6, 24\n\ + asrs r0, 24\n\ + ldrb r6, [r1]\n\ + adds r0, r6\n\ + strb r0, [r1]\n\ + ldrb r0, [r2]\n\ + muls r0, r4\n\ + adds r0, r7, r0\n\ + adds r1, r0, r3\n\ + movs r0, 0\n\ + ldrsb r0, [r1, r0]\n\ + cmp r0, 0\n\ + bge _08026264\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ +_08026264:\n\ + ldr r1, _080262BC @ =gActiveBank\n\ + ldrb r0, [r1]\n\ + muls r0, r4\n\ + adds r0, r7, r0\n\ + adds r1, r0, r3\n\ + movs r0, 0\n\ + ldrsb r0, [r1, r0]\n\ + cmp r0, 0xC\n\ + ble _0802627A\n\ + movs r0, 0xC\n\ + strb r0, [r1]\n\ +_0802627A:\n\ + mov r2, r8\n\ + ldrb r0, [r2, 0x5]\n\ + cmp r0, 0x2\n\ + bne _080262A2\n\ + movs r3, 0x1\n\ + ands r3, r5\n\ + cmp r3, 0\n\ + beq _08026294\n\ + ldr r0, _080262C0 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r2, 0x1\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_08026294:\n\ + mov r4, r8\n\ + ldrb r0, [r4, 0x5]\n\ + cmp r0, 0x2\n\ + bne _080262A2\n\ + cmp r3, 0\n\ + bne _080262A2\n\ + b _08025F74\n\ +_080262A2:\n\ + movs r0, 0\n\ +_080262A4:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080262B4: .4byte gBankTarget\n\ +_080262B8: .4byte gBattleCommunication\n\ +_080262BC: .4byte gActiveBank\n\ +_080262C0: .4byte gBattleMoveFlags\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atk89_statbuffchange(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, BSScriptRead8(gBattlescriptCurrInstr + 1), jump_loc) == 0) + gBattlescriptCurrInstr += 6; +} + +static void atk8A_normalisebuffs(void) //haze +{ + int i, j; + for (i = 0; i < gNoOfAllBanks; i++) + { + for (j = 0; j < 8; j++) + { + gBattleMons[i].statStages[j] = 6; + } + } + gBattlescriptCurrInstr++; +} + +static void atk8B_setbide(void) +{ + gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gBankAttacker] = gCurrentMove; + gTakenDmg[gBankAttacker] = 0; + gBattleMons[gBankAttacker].status2 |= (STATUS2_BIDE - 0x100); //2 turns + gBattlescriptCurrInstr++; +} + +static void atk8C_confuseifrepeatingattackends(void) +{ + if (!(gBattleMons[gBankAttacker].status2 & STATUS2_LOCK_CONFUSE)) + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x75; + gBattlescriptCurrInstr++; +} + +static void atk8D_setmultihit_counter(void) +{ + if (BSScriptRead8(gBattlescriptCurrInstr + 1)) + gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1); + else + { + gMultiHitCounter = Random() & 3; + if (gMultiHitCounter > 1) + gMultiHitCounter = (Random() & 3) + 2; + else + gMultiHitCounter += 2; + } + gBattlescriptCurrInstr += 2; +} + +static void atk8E_prepare_multihit(void) +{ + ewram[0x160e0] = 0xFD; + ewram[0x160e1] = 1; + ewram[0x160e2] = 1; + ewram[0x160e3] = 1; + ewram[0x160e4] = 0; + ewram[0x160e5] = 0xFF; + gBattlescriptCurrInstr++; +} + +static bool8 sub_80264C0(void) +{ + if (gBattleMons[gBankAttacker].level >= gBattleMons[gBankTarget].level) + { + ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget]; + } + else + { + u16 random = Random() & 0xFF; + if ((u32)((random * (gBattleMons[gBankAttacker].level + gBattleMons[gBankTarget].level) >> 8) + 1) <= (gBattleMons[gBankTarget].level / 4)) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + return 0; + } + ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget]; + } + gBattlescriptCurrInstr = gUnknown_081D90FC; + return 1; +} + +static void atk8F_forcerandomswitch(void) +{ + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)) + { + u8 i; + struct Pokemon* poke; + u8 valid; + u8 val; + if (!GetBankSide(gBankTarget)) + poke = gPlayerParty; + else + poke = gEnemyParty; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + valid = 0; + val = 0; + if (sub_803FBFC(sub_803FC34(gBankTarget)) == 1) + val = 3; + for (i = val; i < val + 3; i++) + { + if (ValidPoke(&poke[i])) + valid++; + } + } + else + { + valid = 0; + for (i = 0; i < 6; i++) + { + if (ValidPoke(&poke[i])) + valid++; + } + } + + if ((valid < 2 && (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) + || (valid < 3 && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else if (sub_80264C0()) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + do + { + val = Random() % 3; + if (sub_803FBFC(sub_803FC34(gBankTarget)) == 1) + i = val + 3; + else + i = val; + } while (i == gBattlePartyID[gBankTarget] || i == gBattlePartyID[gBankTarget ^ 2] || !ValidPoke3(&poke[i])); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + do + { + i = Random() % 6; + } while (i == gBattlePartyID[gBankTarget] || i == gBattlePartyID[gBankTarget ^ 2] || !ValidPoke3(&poke[i])); + } + else + { + do + { + i = Random() % 6; + } while (i == gBattlePartyID[gBankTarget] || !ValidPoke3(&poke[i])); + } + } + ewram[gBankTarget + 0x16068] = i; + if (!IsLinkDoubleBattle()) + sub_8012258(gBankTarget); + sub_8094B6C(gBankTarget, i, 0); + sub_8094B6C(gBankTarget ^ 2, i, 1); + } + } + else + { + sub_80264C0(); + } +} + +static void atk90_conversion_type_change(void) +{ + //randomly changes user's type to one of its moves' type + u8 valid_moves = 0; + u8 checked_move; + u8 move_type; + while (valid_moves < 4) + { + if (gBattleMons[gBankAttacker].moves[valid_moves] == 0) + break; + valid_moves++; + } + + for (checked_move = 0; checked_move < valid_moves; checked_move++) + { + move_type = gBattleMoves[gBattleMons[gBankAttacker].moves[checked_move]].type; + if (move_type == TYPE_MYSTERY) + { + if (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST) + move_type = TYPE_GHOST; + else + move_type = TYPE_NORMAL; + } + if (move_type != gBattleMons[gBankAttacker].type1 && move_type != gBattleMons[gBankAttacker].type2) + break; + } + + if (checked_move == valid_moves) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + do + { + + while ((checked_move = Random() & 3) >= valid_moves); + + move_type = gBattleMoves[gBattleMons[gBankAttacker].moves[checked_move]].type; + if (move_type == TYPE_MYSTERY) + { + if (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST) + move_type = TYPE_GHOST; + else + move_type = TYPE_NORMAL; + } + } while (move_type == gBattleMons[gBankAttacker].type1 || move_type == gBattleMons[gBankAttacker].type2); + + gBattleMons[gBankAttacker].type1 = move_type; + gBattleMons[gBankAttacker].type2 = move_type; + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 3; + gBattleTextBuff1[2] = move_type; + gBattleTextBuff1[3] = 0xFF; + + gBattlescriptCurrInstr += 5; + } +} + +static void atk91_givepaydaymoney(void) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney) + { + sub_80B79B8(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 1; + gBattleTextBuff1[2] = 2; + gBattleTextBuff1[3] = 5; + gBattleTextBuff1[4] = gPaydayMoney; + gBattleTextBuff1[5] = uBYTE1_16(gPaydayMoney); + gBattleTextBuff1[6] = 0xFF; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = gUnknown_081D95DB; + } + else + gBattlescriptCurrInstr++; +} + +static void atk92_setlightscreen(void) +{ + if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_LIGHTSCREEN) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_LIGHTSCREEN; + gSideTimer[GetBankIdentity(gBankAttacker) & 1].lightscreenTimer = 5; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + } + gBattlescriptCurrInstr++; +} + +#ifdef NOTMATCHING +static void atk93_ko_move(void) +{ + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) + { + RecordItemBattle(gBankTarget, hold_effect); + gSpecialStatuses[gBankTarget].focusBanded = 1; + } + + if (gBattleMons[gBankTarget].ability == ABILITY_STURDY) + { + gBattleMoveFlags |= MOVE_MISSED; + gLastUsedAbility = ABILITY_STURDY; + gBattlescriptCurrInstr = x; + RecordAbilityBattle(gBankTarget, ABILITY_STURDY); + return; + } + + if (!(gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS)) + { + u16 to_cmp = gBattleMons[gBankAttacker].level - gBattleMons[gBankTarget].level + gBattleMoves[gCurrentMove].accuracy; + if (Random() % 0x64 + 1 < to_cmp || gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) + { + goto MOVE_MISSED_LABEL; + } + } + else + { + if (gDisableStructs[gBankTarget].bankWithSureHit != gBankAttacker || gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) + { + + } + } + +MOVE_MISSED_LABEL: + gBattleTypeFlags |= MOVE_MISSED; + if (gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#else +__attribute((naked)) +static void atk93_ko_move(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r7, _08026BA8 @ =gBattleMons\n\ + ldr r6, _08026BAC @ =gBankTarget\n\ + ldrb r2, [r6]\n\ + movs r5, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r5\n\ + adds r1, r0, r7\n\ + ldrh r0, [r1, 0x2E]\n\ + cmp r0, 0xAF\n\ + bne _08026BB4\n\ + ldr r1, _08026BB0 @ =gEnigmaBerries\n\ + lsls r0, r2, 3\n\ + subs r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r4, [r0, 0x7]\n\ + ldrb r6, [r0, 0x1A]\n\ + b _08026BCE\n\ + .align 2, 0\n\ +_08026BA8: .4byte gBattleMons\n\ +_08026BAC: .4byte gBankTarget\n\ +_08026BB0: .4byte gEnigmaBerries\n\ +_08026BB4:\n\ + ldrh r0, [r1, 0x2E]\n\ + bl ItemId_GetHoldEffect\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldrb r0, [r6]\n\ + muls r0, r5\n\ + adds r0, r7\n\ + ldrh r0, [r0, 0x2E]\n\ + bl ItemId_GetHoldEffectParam\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ +_08026BCE:\n\ + ldr r1, _08026C4C @ =gStringBank\n\ + ldr r5, _08026C50 @ =gBankTarget\n\ + ldrb r0, [r5]\n\ + strb r0, [r1]\n\ + cmp r4, 0x27\n\ + bne _08026C0C\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x64\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, r6\n\ + bcs _08026C0C\n\ + ldrb r0, [r5]\n\ + movs r1, 0x27\n\ + bl RecordItemBattle\n\ + ldr r2, _08026C54 @ =gSpecialStatuses\n\ + ldrb r1, [r5]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r2, 0x80\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_08026C0C:\n\ + ldr r0, _08026C58 @ =gBattleMons\n\ + mov r8, r0\n\ + ldr r1, _08026C50 @ =gBankTarget\n\ + ldrb r2, [r1]\n\ + movs r6, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r6\n\ + mov r3, r8\n\ + adds r5, r0, r3\n\ + adds r0, r5, 0\n\ + adds r0, 0x20\n\ + ldrb r3, [r0]\n\ + mov r10, r8\n\ + cmp r3, 0x5\n\ + bne _08026C6C\n\ + ldr r2, _08026C5C @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r0, _08026C60 @ =gLastUsedAbility\n\ + strb r3, [r0]\n\ + ldr r1, _08026C64 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08026C68 @ =gUnknown_081D9826\n\ + str r0, [r1]\n\ + ldr r1, _08026C50 @ =gBankTarget\n\ + ldrb r0, [r1]\n\ + movs r1, 0x5\n\ + bl RecordAbilityBattle\n\ + b _08026E40\n\ + .align 2, 0\n\ +_08026C4C: .4byte gStringBank\n\ +_08026C50: .4byte gBankTarget\n\ +_08026C54: .4byte gSpecialStatuses\n\ +_08026C58: .4byte gBattleMons\n\ +_08026C5C: .4byte gBattleMoveFlags\n\ +_08026C60: .4byte gLastUsedAbility\n\ +_08026C64: .4byte gBattlescriptCurrInstr\n\ +_08026C68: .4byte gUnknown_081D9826\n\ +_08026C6C:\n\ + ldr r1, _08026CE0 @ =gStatuses3\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08026CF4\n\ + ldr r1, _08026CE4 @ =gBattleMoves\n\ + ldr r0, _08026CE8 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + lsls r2, r0, 1\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r1\n\ + ldr r7, _08026CEC @ =gBankAttacker\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + add r0, r10\n\ + adds r0, 0x2A\n\ + ldrb r0, [r0]\n\ + adds r1, r5, 0\n\ + adds r1, 0x2A\n\ + ldrb r1, [r1]\n\ + subs r0, r1\n\ + ldrb r2, [r2, 0x3]\n\ + adds r0, r2\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x64\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r0, 0x1\n\ + cmp r0, r4\n\ + bge _08026CDC\n\ + ldrb r0, [r7]\n\ + adds r1, r0, 0\n\ + muls r1, r6\n\ + add r1, r10\n\ + adds r1, 0x2A\n\ + ldr r2, _08026CF0 @ =gBankTarget\n\ + ldrb r0, [r2]\n\ + muls r0, r6\n\ + add r0, r10\n\ + adds r0, 0x2A\n\ + ldrb r1, [r1]\n\ + movs r4, 0x1\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bcs _08026D20\n\ +_08026CDC:\n\ + mov r10, r8\n\ + b _08026DE0\n\ + .align 2, 0\n\ +_08026CE0: .4byte gStatuses3\n\ +_08026CE4: .4byte gBattleMoves\n\ +_08026CE8: .4byte gCurrentMove\n\ +_08026CEC: .4byte gBankAttacker\n\ +_08026CF0: .4byte gBankTarget\n\ +_08026CF4:\n\ + ldr r0, _08026D4C @ =gDisableStructs\n\ + lsls r1, r2, 3\n\ + subs r1, r2\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldr r2, _08026D50 @ =gBankAttacker\n\ + ldrb r0, [r1, 0x15]\n\ + movs r4, 0\n\ + ldrb r3, [r2]\n\ + cmp r0, r3\n\ + bne _08026D20\n\ + ldrb r0, [r2]\n\ + muls r0, r6\n\ + add r0, r10\n\ + adds r0, 0x2A\n\ + adds r1, r5, 0\n\ + adds r1, 0x2A\n\ + ldrb r0, [r0]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _08026D20\n\ + movs r4, 0x1\n\ +_08026D20:\n\ + cmp r4, 0\n\ + beq _08026DE0\n\ + ldr r0, _08026D54 @ =gProtectStructs\n\ + ldr r1, _08026D58 @ =gBankTarget\n\ + ldrb r2, [r1]\n\ + lsls r1, r2, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + lsls r0, 30\n\ + cmp r0, 0\n\ + bge _08026D64\n\ + ldr r1, _08026D5C @ =gBattleMoveDamage\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + add r0, r10\n\ + ldrh r0, [r0, 0x28]\n\ + subs r0, 0x1\n\ + str r0, [r1]\n\ + ldr r2, _08026D60 @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x40\n\ + b _08026DC6\n\ + .align 2, 0\n\ +_08026D4C: .4byte gDisableStructs\n\ +_08026D50: .4byte gBankAttacker\n\ +_08026D54: .4byte gProtectStructs\n\ +_08026D58: .4byte gBankTarget\n\ +_08026D5C: .4byte gBattleMoveDamage\n\ +_08026D60: .4byte gBattleMoveFlags\n\ +_08026D64:\n\ + ldr r0, _08026DA0 @ =gSpecialStatuses\n\ + lsls r1, r2, 2\n\ + adds r1, r2\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + lsrs r0, 7\n\ + cmp r0, 0\n\ + beq _08026DB4\n\ + ldr r1, _08026DA4 @ =gBattleMoveDamage\n\ + movs r3, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r3\n\ + add r0, r10\n\ + ldrh r0, [r0, 0x28]\n\ + subs r0, 0x1\n\ + str r0, [r1]\n\ + ldr r2, _08026DA8 @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x80\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r1, _08026DAC @ =gLastUsedItem\n\ + ldr r2, _08026DB0 @ =gBankTarget\n\ + ldrb r0, [r2]\n\ + muls r0, r3\n\ + add r0, r10\n\ + ldrh r0, [r0, 0x2E]\n\ + strh r0, [r1]\n\ + b _08026DCA\n\ + .align 2, 0\n\ +_08026DA0: .4byte gSpecialStatuses\n\ +_08026DA4: .4byte gBattleMoveDamage\n\ +_08026DA8: .4byte gBattleMoveFlags\n\ +_08026DAC: .4byte gLastUsedItem\n\ +_08026DB0: .4byte gBankTarget\n\ +_08026DB4:\n\ + ldr r1, _08026DD4 @ =gBattleMoveDamage\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + add r0, r10\n\ + ldrh r0, [r0, 0x28]\n\ + str r0, [r1]\n\ + ldr r2, _08026DD8 @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x10\n\ +_08026DC6:\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ +_08026DCA:\n\ + ldr r1, _08026DDC @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + b _08026E40\n\ + .align 2, 0\n\ +_08026DD4: .4byte gBattleMoveDamage\n\ +_08026DD8: .4byte gBattleMoveFlags\n\ +_08026DDC: .4byte gBattlescriptCurrInstr\n\ +_08026DE0:\n\ + ldr r2, _08026E10 @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r0, _08026E14 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + movs r2, 0x58\n\ + adds r1, r0, 0\n\ + muls r1, r2\n\ + add r1, r10\n\ + adds r1, 0x2A\n\ + ldr r3, _08026E18 @ =gBankTarget\n\ + ldrb r0, [r3]\n\ + muls r0, r2\n\ + add r0, r10\n\ + adds r0, 0x2A\n\ + ldrb r1, [r1]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bcc _08026E20\n\ + ldr r1, _08026E1C @ =gBattleCommunication\n\ + movs r0, 0\n\ + b _08026E24\n\ + .align 2, 0\n\ +_08026E10: .4byte gBattleMoveFlags\n\ +_08026E14: .4byte gBankAttacker\n\ +_08026E18: .4byte gBankTarget\n\ +_08026E1C: .4byte gBattleCommunication\n\ +_08026E20:\n\ + ldr r1, _08026E50 @ =gBattleCommunication\n\ + movs r0, 0x1\n\ +_08026E24:\n\ + strb r0, [r1, 0x5]\n\ + ldr r3, _08026E54 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ +_08026E40:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08026E50: .4byte gBattleCommunication\n\ +_08026E54: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} +#endif // NOTMATCHING + +static void atk94_gethalfcurrentenemyhp(void) //super fang +{ + gBattleMoveDamage = gBattleMons[gBankTarget].hp / 2; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + gBattlescriptCurrInstr++; +} + +static void atk95_setsandstorm(void) +{ + if (gBattleWeather & WEATHER_SANDSTORMY) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gBattleWeather = weather_sandstorm; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gWishFutureKnock.weatherDuration = 5; + } + gBattlescriptCurrInstr++; +} + +static void atk96_weatherdamage(void) +{ + if (WeatherHasEffect) + { + if (gBattleWeather & WEATHER_SANDSTORMY) + { + if (gBattleMons[gBankAttacker].type1 != TYPE_ROCK && gBattleMons[gBankAttacker].type1 != TYPE_STEEL && gBattleMons[gBankAttacker].type1 != TYPE_GROUND + && gBattleMons[gBankAttacker].type2 != TYPE_ROCK && gBattleMons[gBankAttacker].type2 != TYPE_STEEL && gBattleMons[gBankAttacker].type2 != TYPE_GROUND + && gBattleMons[gBankAttacker].ability != ABILITY_SAND_VEIL && !(gStatuses3[gBankAttacker] & STATUS3_UNDERGROUND) && !(gStatuses3[gBankAttacker] & STATUS3_UNDERWATER)) + { + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + } + else + gBattleMoveDamage = 0; + } + if (gBattleWeather & weather_hail) + { + if (gBattleMons[gBankAttacker].type1 != TYPE_ICE && gBattleMons[gBankAttacker].type2 != TYPE_ICE && !(gStatuses3[gBankAttacker] & STATUS3_UNDERGROUND) && !(gStatuses3[gBankAttacker] & STATUS3_UNDERWATER)) + { + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + } + else + gBattleMoveDamage = 0; + } + } + else + gBattleMoveDamage = 0; + + if (gAbsentBankFlags & gBitTable[gBankAttacker]) + gBattleMoveDamage = 0; + + gBattlescriptCurrInstr++; +} + +static void atk97_try_infatuation(void) +{ + struct Pokemon *attacker, *target; + u16 atk_species, def_species; + u32 atk_pid, def_pid; + if (!GetBankSide(gBankAttacker)) + attacker = &gPlayerParty[gBattlePartyID[gBankAttacker]]; + else + attacker = &gEnemyParty[gBattlePartyID[gBankAttacker]]; + + if (!GetBankSide(gBankTarget)) + target = &gPlayerParty[gBattlePartyID[gBankTarget]]; + else + target = &gEnemyParty[gBattlePartyID[gBankTarget]]; + + atk_species = GetMonData(attacker, MON_DATA_SPECIES); + atk_pid = GetMonData(attacker, MON_DATA_PERSONALITY); + + def_species = GetMonData(target, MON_DATA_SPECIES); + def_pid = GetMonData(target, MON_DATA_PERSONALITY); + + if (gBattleMons[gBankTarget].ability == ABILITY_OBLIVIOUS) + { + gBattlescriptCurrInstr = BattleScript_ObliviousPreventsAttraction; + gLastUsedAbility = ABILITY_OBLIVIOUS; + RecordAbilityBattle(gBankTarget, ABILITY_OBLIVIOUS); + } + else + { + if (GetGenderFromSpeciesAndPersonality(atk_species, atk_pid) == GetGenderFromSpeciesAndPersonality(def_species, def_pid) + || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE || gBattleMons[gBankTarget].status2 & STATUS2_INFATUATION || GetGenderFromSpeciesAndPersonality(atk_species, atk_pid) == 0xFF + || GetGenderFromSpeciesAndPersonality(def_species, def_pid) == 0xFF) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + gBattleMons[gBankTarget].status2 |= (gBitTable[gBankAttacker] << 16); + gBattlescriptCurrInstr += 5; + } + } +} + +static void atk98_status_icon_update(void) +{ + if (gBattleExecBuffer) + return; + + if (BSScriptRead8(gBattlescriptCurrInstr + 1) != 4) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; + } + else + { + gActiveBank = gBankAttacker; + if (!(gAbsentBankFlags & gBitTable[gActiveBank])) + { + EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); + MarkBufferBankForExecution(gActiveBank); + } + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (!(gAbsentBankFlags & gBitTable[gActiveBank])) + { + EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); + MarkBufferBankForExecution(gActiveBank); + } + } + gBattlescriptCurrInstr += 2; + } +} + +static void atk99_setmist(void) +{ + if (gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer) + { + gBattleMoveFlags |= MOVE_FAILED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer = 5; + gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_MIST; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + gBattlescriptCurrInstr++; +} + +static void atk9A_set_focusenergy(void) +{ + if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) + { + gBattleMoveFlags |= MOVE_FAILED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gBattleMons[gBankAttacker].status2 |= STATUS2_FOCUS_ENERGY; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + gBattlescriptCurrInstr++; +} + +static void atk9B_transformdataexecution(void) +{ + gUnknown_02024BE8 = 0xFFFF; + gBattlescriptCurrInstr++; + if (gBattleMons[gBankTarget].status2 & STATUS2_TRANSFORMED || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE) + { + gBattleMoveFlags |= MOVE_FAILED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + u32 i; s32 j; + u8 *atk_data, *def_data; + gBattleMons[gBankAttacker].status2 |= STATUS2_TRANSFORMED; + gDisableStructs[gBankAttacker].disabledMove = 0; + gDisableStructs[gBankAttacker].disableTimer1 = 0; + gDisableStructs[gBankAttacker].unk0 = gBattleMons[gBankTarget].personality; + gDisableStructs[gBankAttacker].unk18_b = 0; + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 6; + gBattleTextBuff1[2] = (gBattleMons[gBankTarget].species); + gBattleTextBuff1[3] = uBYTE1_16(gBattleMons[gBankTarget].species); + gBattleTextBuff1[4] = 0xFF; + + atk_data = (u8*)(&gBattleMons[gBankAttacker]); + def_data = (u8*)(&gBattleMons[gBankTarget]); + + for (i = 0; i < 0x24; i++) + atk_data[i] = def_data[i]; + + for (j = 0; j < 4; j++) + { + if (gBattleMoves[gBattleMons[gBankAttacker].moves[j]].pp < 5) + gBattleMons[gBankAttacker].pp[j] = gBattleMoves[gBattleMons[gBankAttacker].moves[j]].pp; + else + gBattleMons[gBankAttacker].pp[j] = 5; + } + + gActiveBank = gBankAttacker; + EmitResetActionMoveSelection(0, 2); + MarkBufferBankForExecution(gActiveBank); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } +} + +static void atk9C_set_substitute(void) +{ + u32 hp = gBattleMons[gBankAttacker].maxHP / 4; + if (gBattleMons[gBankAttacker].maxHP / 4 == 0) + hp = 1; + if (gBattleMons[gBankAttacker].hp <= hp) + { + gBattleMoveDamage = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 4; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + gBattleMons[gBankAttacker].status2 |= STATUS2_SUBSTITUTE; + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_WRAPPED); + gDisableStructs[gBankAttacker].substituteHP = gBattleMoveDamage; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE; + } + gBattlescriptCurrInstr++; +} + +static bool8 IsMoveUncopyable(u16 move) +{ + int i; + for (i = 0; sUnknown_081FACFE[i] != 0xFFFE && sUnknown_081FACFE[i] != move; i++) {} + return (sUnknown_081FACFE[i] != 0xFFFE); +} + +static void atk9D_copyattack(void) +{ + gUnknown_02024BE8 = 0xFFFF; + if (IsMoveUncopyable(gLastUsedMove[gBankTarget]) || gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED + || gLastUsedMove[gBankTarget] == 0 || gLastUsedMove[gBankTarget] == 0xFFFF) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + int i; + for (i = 0; i < 4; i++) + { + if (gBattleMons[gBankAttacker].moves[i] == gLastUsedMove[gBankTarget]) + break; + } + if (i == 4) + { + gBattleMons[gBankAttacker].moves[gCurrMovePos] = gLastUsedMove[gBankTarget]; + if (gBattleMoves[gLastUsedMove[gBankTarget]].pp < 5) + gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gLastUsedMove[gBankTarget]].pp; + else + gBattleMons[gBankAttacker].pp[gCurrMovePos] = 5; + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gLastUsedMove[gBankTarget]; + gBattleTextBuff1[3] = uBYTE1_16(gLastUsedMove[gBankTarget]); + gBattleTextBuff1[4] = 0xFF; + + gDisableStructs[gBankAttacker].unk18_b |= gBitTable[gCurrMovePos]; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +#ifdef NONMATCHING +static void atk9E_metronome(void) +{ + // sUnknown_081FACFE + int i; + do + { + while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162); + for (i = 0; sUnknown_081FACFE[i] != gCurrentMove && sUnknown_081FACFE[i] != 0xFFFF; i++); + } while (sUnknown_081FACFE[i] != 0xFFFF); + + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + gBankTarget = sub_801B5C0(gCurrentMove, 0); +} + +#else +__attribute__((naked)) +static void atk9E_metronome(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + ldr r7, _08027938 @ =gCurrentMove\n\ + movs r6, 0xB1\n\ + lsls r6, 1\n\ + ldr r5, _0802793C @ =sUnknown_081FACFE\n\ + ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\ + mov r8, r0\n\ +_080278CA:\n\ + bl Random\n\ + ldr r2, _08027944 @ =0x000001ff\n\ + adds r1, r2, 0\n\ + ands r0, r1\n\ + adds r0, 0x1\n\ + strh r0, [r7]\n\ + cmp r0, r6\n\ + bhi _080278CA\n\ + movs r0, 0x3\n\ +_080278DE:\n\ + subs r0, 0x1\n\ + cmp r0, 0\n\ + bge _080278DE\n\ + ldr r4, _08027938 @ =gCurrentMove\n\ + ldrh r2, [r4]\n\ + ldr r3, _08027948 @ =0x0000ffff\n\ + subs r0, r5, 0x2\n\ +_080278EC:\n\ + adds r0, 0x2\n\ + ldrh r1, [r0]\n\ + cmp r1, r2\n\ + beq _080278F8\n\ + cmp r1, r3\n\ + bne _080278EC\n\ +_080278F8:\n\ + ldr r0, _08027948 @ =0x0000ffff\n\ + cmp r1, r0\n\ + bne _080278CA\n\ + ldr r2, _0802794C @ =gHitMarker\n\ + ldr r0, [r2]\n\ + ldr r1, _08027950 @ =0xfffffbff\n\ + ands r0, r1\n\ + str r0, [r2]\n\ + ldr r3, _08027954 @ =gBattleScriptsEffectsTable\n\ + ldr r2, _08027958 @ =gBattleMoves\n\ + ldrh r1, [r4]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + ldrh r0, [r4]\n\ + movs r1, 0\n\ + bl sub_801B5C0\n\ + ldr r1, _0802795C @ =gBankTarget\n\ + strb r0, [r1]\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08027938: .4byte gCurrentMove\n\ +_0802793C: .4byte sUnknown_081FACFE\n\ +_08027940: .4byte gBattlescriptCurrInstr\n\ +_08027944: .4byte 0x000001ff\n\ +_08027948: .4byte 0x0000ffff\n\ +_0802794C: .4byte gHitMarker\n\ +_08027950: .4byte 0xfffffbff\n\ +_08027954: .4byte gBattleScriptsEffectsTable\n\ +_08027958: .4byte gBattleMoves\n\ +_0802795C: .4byte gBankTarget\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atk9F_dmgtolevel(void) +{ + gBattleMoveDamage = gBattleMons[gBankAttacker].level; + gBattlescriptCurrInstr++; +} + +static void atkA0_psywavedamageeffect(void) +{ + s32 rand_dmg; + while ((rand_dmg = (Random() & 0xF)) > 0xA); + rand_dmg *= 10; + gBattleMoveDamage = gBattleMons[gBankAttacker].level * (rand_dmg + 50) / 100; + gBattlescriptCurrInstr++; +} + +static void atkA1_counterdamagecalculator(void) +{ + u8 atk_side = GetBankSide(gBankAttacker); + u8 def_side = GetBankSide(gProtectStructs[gBankAttacker].physicalBank); + if (gProtectStructs[gBankAttacker].physicalDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].physicalBank].hp) + { + gBattleMoveDamage = gProtectStructs[gBankAttacker].physicalDmg * 2; + if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) + gBankTarget = gSideTimer[def_side].followmeTarget; + else + gBankTarget = gProtectStructs[gBankAttacker].physicalBank; + gBattlescriptCurrInstr += 5; + } + else + { + gSpecialStatuses[gBankAttacker].flag20 = 1; + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkA2_mirrorcoatdamagecalculator(void) //a copy of atkA1 with the physical -> special field changes +{ + u8 atk_side = GetBankSide(gBankAttacker); + u8 def_side = GetBankSide(gProtectStructs[gBankAttacker].specialBank); + if (gProtectStructs[gBankAttacker].specialDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].specialBank].hp) + { + gBattleMoveDamage = gProtectStructs[gBankAttacker].specialDmg * 2; + if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) + gBankTarget = gSideTimer[def_side].followmeTarget; + else + gBankTarget = gProtectStructs[gBankAttacker].specialBank; + gBattlescriptCurrInstr += 5; + } + else + { + gSpecialStatuses[gBankAttacker].flag20 = 1; + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkA3_disablelastusedattack(void) +{ + int i; + for (i = 0; i < 4; i++) + { + if (gBattleMons[gBankTarget].moves[i] == gLastUsedMove[gBankTarget]) + break; + } + if (gDisableStructs[gBankTarget].disabledMove == 0 && i != 4 && gBattleMons[gBankTarget].pp[i] != 0) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gBattleMons[gBankTarget].moves[i]; + gBattleTextBuff1[3] = uBYTE1_16(gBattleMons[gBankTarget].moves[i]); + gBattleTextBuff1[4] = 0xFF; + + gDisableStructs[gBankTarget].disabledMove = gBattleMons[gBankTarget].moves[i]; + gDisableStructs[gBankTarget].disableTimer1 = (Random() & 3) + 2; + gDisableStructs[gBankTarget].disableTimer2 = gDisableStructs[gBankTarget].disableTimer1; //that's interesting + gBattlescriptCurrInstr += 5; + } + else + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkA4_setencore(void) +{ + int i; + for (i = 0; i < 4; i++) + { + if (gBattleMons[gBankTarget].moves[i] == gLastUsedMove[gBankTarget]) + break; + } + if (gLastUsedMove[gBankTarget] == MOVE_STRUGGLE || gLastUsedMove[gBankTarget] == MOVE_ENCORE || gLastUsedMove[gBankTarget] == MOVE_MIRROR_MOVE) + i = 4; + if (gDisableStructs[gBankTarget].encoredMove == 0 && i != 4 && gBattleMons[gBankTarget].pp[i] != 0) + { + gDisableStructs[gBankTarget].encoredMove = gBattleMons[gBankTarget].moves[i]; + gDisableStructs[gBankTarget].encoredMovePos = i; + gDisableStructs[gBankTarget].encoreTimer1 = (Random() & 3) + 3; + gDisableStructs[gBankTarget].encoreTimer2 = gDisableStructs[gBankTarget].encoreTimer1; + gBattlescriptCurrInstr += 5; + } + else + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkA5_painsplitdmgcalc(void) +{ + if (!(gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE)) + { + s32 hp_diff = (gBattleMons[gBankAttacker].hp + gBattleMons[gBankTarget].hp) / 2; + s32 to_store = gBattleMoveDamage = gBattleMons[gBankTarget].hp - hp_diff; + BATTLE_STRUCT->unk16014 = sBYTE0_32(to_store); + BATTLE_STRUCT->unk16015 = sBYTE1_32(to_store); + BATTLE_STRUCT->unk16016 = sBYTE2_32(to_store); + BATTLE_STRUCT->unk16017 = sBYTE3_32(to_store); + + gBattleMoveDamage = gBattleMons[gBankAttacker].hp - hp_diff; + gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF; + + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#ifdef NONMATCHING +static void atkA6_settypetorandomresistance(void) +{ + if (gMoveHitWith[gBankAttacker] == 0 || gMoveHitWith[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gMoveHitWith[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + int type = 0, rands = 0; + do + { + while (((type = (Random() & 0x7F)) > 0x70)); + type *= 3; + if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) + { + gBattleMons[gBankAttacker].type1 = type; + gBattleMons[gBankAttacker].type2 = type; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 3; + gBattleTextBuff1[2] = type; + gBattleTextBuff1[3] = 0xFF; + gBattlescriptCurrInstr += 5; + return; + } + rands++; + } while (rands <= 999); + + type = 0, rands = 0; + do + { + if (gTypeEffectiveness[type] == 0xFE || gTypeEffectiveness[type] != 0xFF) + { + if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) + { + gBattleMons[gBankAttacker].type1 = gTypeEffectiveness[rands + 1]; + gBattleMons[gBankAttacker].type2 = gTypeEffectiveness[rands + 1]; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 3; + gBattleTextBuff1[2] = gTypeEffectiveness[rands + 1]; + gBattleTextBuff1[3] = 0xFF; + gBattlescriptCurrInstr += 5; + return; + } + } + type += 3, rands += 3; + } while (rands < 336); + + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +#else +__attribute__((naked)) +static void atkA6_settypetorandomresistance(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r1, _08027FA8 @ =gMoveHitWith\n\ + ldr r4, _08027FAC @ =gBankAttacker\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r2, r0, r1\n\ + ldrh r1, [r2]\n\ + cmp r1, 0\n\ + beq _08027F8C\n\ + ldr r0, _08027FB0 @ =0x0000ffff\n\ + cmp r1, r0\n\ + beq _08027F8C\n\ + ldrh r0, [r2]\n\ + bl IsTwoTurnsMove\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08028024\n\ + ldr r2, _08027FB4 @ =gProtectStructs\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 4\n\ + adds r0, r2, 0x4\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08028024\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08028024\n\ +_08027F8C:\n\ + ldr r3, _08027FB8 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ + b _08028110\n\ + .align 2, 0\n\ +_08027FA8: .4byte gMoveHitWith\n\ +_08027FAC: .4byte gBankAttacker\n\ +_08027FB0: .4byte 0x0000ffff\n\ +_08027FB4: .4byte gProtectStructs\n\ +_08027FB8: .4byte gBattlescriptCurrInstr\n\ +_08027FBC:\n\ + mov r0, r12\n\ + strb r5, [r0]\n\ + mov r1, r10\n\ + ldrb r0, [r1]\n\ + muls r0, r2\n\ + adds r0, r7\n\ + adds r0, 0x22\n\ + strb r5, [r0]\n\ + ldr r1, _08027FE0 @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x3\n\ + strb r0, [r1, 0x1]\n\ + strb r5, [r1, 0x2]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x3]\n\ + ldr r1, _08027FE4 @ =gBattlescriptCurrInstr\n\ + b _08028012\n\ + .align 2, 0\n\ +_08027FE0: .4byte gBattleTextBuff1\n\ +_08027FE4: .4byte gBattlescriptCurrInstr\n\ +_08027FE8:\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + adds r0, r3\n\ + ldrb r2, [r0]\n\ + strb r2, [r4]\n\ + mov r4, r10\n\ + ldrb r0, [r4]\n\ + muls r0, r6\n\ + ldr r7, _0802801C @ =gBattleMons\n\ + adds r0, r7\n\ + adds r0, 0x22\n\ + strb r2, [r0]\n\ + ldr r1, _08028020 @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x3\n\ + strb r0, [r1, 0x1]\n\ + strb r2, [r1, 0x2]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x3]\n\ + mov r1, r12\n\ +_08028012:\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + b _08028110\n\ + .align 2, 0\n\ +_0802801C: .4byte gBattleMons\n\ +_08028020: .4byte gBattleTextBuff1\n\ +_08028024:\n\ + movs r4, 0\n\ + mov r8, r4\n\ + movs r7, 0x7F\n\ + mov r9, r7\n\ +_0802802C:\n\ + bl Random\n\ + mov r4, r9\n\ + ands r4, r0\n\ + cmp r4, 0x70\n\ + bhi _0802802C\n\ + lsls r0, r4, 1\n\ + adds r4, r0, r4\n\ + ldr r6, _08028120 @ =gTypeEffectiveness\n\ + adds r3, r4, r6\n\ + ldr r1, _08028124 @ =gUnknown_02024C44\n\ + ldr r2, _08028128 @ =gBankAttacker\n\ + ldrb r5, [r2]\n\ + lsls r0, r5, 1\n\ + adds r0, r1\n\ + ldrb r1, [r3]\n\ + mov r10, r2\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bne _08028088\n\ + adds r0, r4, 0x2\n\ + adds r0, r6\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x5\n\ + bhi _08028088\n\ + ldr r7, _0802812C @ =gBattleMons\n\ + movs r2, 0x58\n\ + adds r0, r5, 0\n\ + muls r0, r2\n\ + adds r3, r0, r7\n\ + movs r0, 0x21\n\ + adds r0, r3\n\ + mov r12, r0\n\ + adds r0, r4, 0x1\n\ + adds r0, r6\n\ + ldrb r5, [r0]\n\ + mov r1, r12\n\ + ldrb r0, [r1]\n\ + adds r1, r5, 0\n\ + cmp r0, r1\n\ + beq _08028088\n\ + adds r0, r3, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, r1\n\ + bne _08027FBC\n\ +_08028088:\n\ + movs r7, 0x1\n\ + add r8, r7\n\ + ldr r0, _08028130 @ =0x000003e7\n\ + cmp r8, r0\n\ + ble _0802802C\n\ + movs r0, 0\n\ + mov r8, r0\n\ + ldr r1, _08028134 @ =gBattlescriptCurrInstr\n\ + mov r12, r1\n\ + ldr r3, _08028120 @ =gTypeEffectiveness\n\ + adds r0, r4, 0x1\n\ + adds r0, r3\n\ + mov r9, r0\n\ + adds r5, r3, 0\n\ +_080280A4:\n\ + ldrb r1, [r5]\n\ + cmp r1, 0xFF\n\ + bgt _080280AE\n\ + cmp r1, 0xFE\n\ + bge _080280E8\n\ +_080280AE:\n\ + mov r4, r10\n\ + ldrb r2, [r4]\n\ + lsls r0, r2, 1\n\ + ldr r7, _08028124 @ =gUnknown_02024C44\n\ + adds r0, r7\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bne _080280E8\n\ + ldrb r0, [r5, 0x2]\n\ + cmp r0, 0x5\n\ + bhi _080280E8\n\ + movs r6, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r6\n\ + ldr r1, _0802812C @ =gBattleMons\n\ + adds r2, r0, r1\n\ + adds r4, r2, 0\n\ + adds r4, 0x21\n\ + ldrb r0, [r4]\n\ + mov r7, r9\n\ + ldrb r1, [r7]\n\ + cmp r0, r1\n\ + beq _080280E8\n\ + adds r0, r2, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, r1\n\ + beq _080280E8\n\ + b _08027FE8\n\ +_080280E8:\n\ + adds r5, 0x3\n\ + movs r0, 0x3\n\ + add r8, r0\n\ + ldr r0, _08028138 @ =0x0000014f\n\ + cmp r8, r0\n\ + bls _080280A4\n\ + mov r1, r12\n\ + ldr r2, [r1]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + mov r4, r12\n\ + str r1, [r4]\n\ +_08028110:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08028120: .4byte gTypeEffectiveness\n\ +_08028124: .4byte gUnknown_02024C44\n\ +_08028128: .4byte gBankAttacker\n\ +_0802812C: .4byte gBattleMons\n\ +_08028130: .4byte 0x000003e7\n\ +_08028134: .4byte gBattlescriptCurrInstr\n\ +_08028138: .4byte 0x0000014f\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atkA7_setalwayshitflag(void) +{ + gStatuses3[gBankTarget] &= ~(STATUS3_ALWAYS_HITS); + gStatuses3[gBankTarget] |= 0x10; + gDisableStructs[gBankTarget].bankWithSureHit = gBankAttacker; + gBattlescriptCurrInstr++; +} + +struct move_pp +{ + u16 move[4]; + u8 pp[4]; + u8 ppBonuses; +}; + +static void atkA8_copymovepermanently(void) +{ + gUnknown_02024BE8 = 0xFFFF; + if (!(gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED) && gUnknown_02024C2C[gBankTarget] != MOVE_STRUGGLE && gUnknown_02024C2C[gBankTarget] != 0 && gUnknown_02024C2C[gBankTarget] != 0xFFFF && gUnknown_02024C2C[gBankTarget] != MOVE_SKETCH) + { + int i; + for (i = 0; i < 4; i++) + { + if (gBattleMons[gBankAttacker].moves[i] == MOVE_SKETCH) + continue; + if (gBattleMons[gBankAttacker].moves[i] == gUnknown_02024C2C[gBankTarget]) + break; + } + if (i != 4) //sketch fail + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else //sketch worked + { + struct move_pp moves_data; + gBattleMons[gBankAttacker].moves[gCurrMovePos] = gUnknown_02024C2C[gBankTarget]; + gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gUnknown_02024C2C[gBankTarget]].pp; + gActiveBank = gBankAttacker; + for (i = 0; i < 4; i++) + { + moves_data.move[i] = gBattleMons[gBankAttacker].moves[i]; + moves_data.pp[i] = gBattleMons[gBankAttacker].pp[i]; + } + moves_data.ppBonuses = gBattleMons[gBankAttacker].ppBonuses; + EmitSetAttributes(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct move_pp), &moves_data); + MarkBufferBankForExecution(gActiveBank); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gUnknown_02024C2C[gBankTarget]; + gBattleTextBuff1[3] = gUnknown_02024C2C[gBankTarget] >> 8; + gBattleTextBuff1[4] = 0xFF; + gBattlescriptCurrInstr += 5; + } + } + else //sketch fail + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static bool8 IsTwoTurnsMove(u16 move) +{ + u8 effect = gBattleMoves[move].effect; + if (effect == EFFECT_SKULL_BASH || effect == EFFECT_RAZOR_WIND || effect == EFFECT_SKY_ATTACK || effect == EFFECT_SOLARBEAM || effect == EFFECT_FLY || effect == EFFECT_BIDE) + return 1; + else + return 0; +} + +static bool8 IsMoveUnchoosable(u16 move) +{ + if (move == 0 || move == MOVE_SLEEP_TALK || move == MOVE_ASSIST || move == MOVE_MIRROR_MOVE || move == MOVE_METRONOME) + return 1; + else + return 0; +} + +static u8 AttacksThisTurn(u8 bank, u16 move) //Note: returns 1 if it's a charging turn, otherwise 2 +{ + //first argument is unused + u8 effect; + if (gBattleMoves[move].effect == EFFECT_SOLARBEAM && (gBattleWeather & WEATHER_SUNNY)) + return 2; + effect = gBattleMoves[move].effect; + if (effect == EFFECT_SKULL_BASH || effect == EFFECT_RAZOR_WIND || effect == EFFECT_SKY_ATTACK || effect == EFFECT_SOLARBEAM || effect == EFFECT_FLY || effect == EFFECT_BIDE) + { + if ((gHitMarker & HITMARKER_x8000000)) + return 1; + } + return 2; +} + +static void atkA9_sleeptalk_choose_move(void) +{ + u8 unusable_moves = 0; + int i; + + for (i = 0; i < 4; i++) + { + if (IsMoveUnchoosable(gBattleMons[gBankAttacker].moves[i]) || gBattleMons[gBankAttacker].moves[i] == MOVE_FOCUS_PUNCH + || gBattleMons[gBankAttacker].moves[i] == MOVE_UPROAR || IsTwoTurnsMove(gBattleMons[gBankAttacker].moves[i])) + unusable_moves |= gBitTable[i]; + } + unusable_moves = sub_8015A98(gBankAttacker, unusable_moves, 0xFD); + if (unusable_moves == 0xF) //all 4 moves cannot be chosen + gBattlescriptCurrInstr += 5; + else //at least one move can be chosen + { + u32 random_pos; + do + { + random_pos = Random() & 3; + } while ((gBitTable[random_pos] & unusable_moves)); + + gRandomMove = gBattleMons[gBankAttacker].moves[random_pos]; + gCurrMovePos = random_pos; + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gBankTarget = sub_801B5C0(gRandomMove, 0); + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkAA_set_destinybond(void) +{ + gBattleMons[gBankAttacker].status2 |= STATUS2_DESTINY_BOND; + gBattlescriptCurrInstr++; +} + +static void DestinyBondFlagUpdate(void) +{ + u8 atk_side = GetBankSide(gBankAttacker); + u8 def_side = GetBankSide(gBankTarget); + if (gBattleMons[gBankTarget].status2 & STATUS2_DESTINY_BOND && atk_side != def_side && !(gHitMarker & HITMARKER_GRUDGE)) + gHitMarker |= HITMARKER_DESTINYBOND; +} + +static void atkAB_DestinyBondFlagUpdate(void) +{ + DestinyBondFlagUpdate(); + gBattlescriptCurrInstr++; +} + +static void atkAC_remaininghptopower(void) +{ + s32 hp_fraction = GetScaledHPFraction(gBattleMons[gBankAttacker].hp, gBattleMons[gBankAttacker].maxHP, 48); + int i; + for (i = 0; i < 12; i += 2) + { + if (hp_fraction <= sUnknown_081FAD26[i]) + break; + } + gDynamicBasePower = sUnknown_081FAD26[i + 1]; + gBattlescriptCurrInstr++; +} + +static void atkAD_spite_ppreduce(void) +{ + if (gLastUsedMove[gBankTarget] != 0 && gLastUsedMove[gBankTarget] != 0xFFFF && !(gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE)) + { + int i; + for (i = 0; i < 4; i++) + { + if (gLastUsedMove[gBankTarget] == gBattleMons[gBankTarget].moves[i]) + break; + } + if (i != 4 && gBattleMons[gBankTarget].pp[i] > 1) + { + s32 lost_pp = (Random() & 3) + 2; + if (gBattleMons[gBankTarget].pp[i] < lost_pp) + lost_pp = gBattleMons[gBankTarget].pp[i]; + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gLastUsedMove[gBankTarget]; + gBattleTextBuff1[3] = gLastUsedMove[gBankTarget] >> 8; + gBattleTextBuff1[4] = 0xFF; + ConvertIntToDecimalStringN(gBattleTextBuff2, lost_pp, 0, 1); + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 1; + gBattleTextBuff2[2] = 1; + gBattleTextBuff2[3] = 1; + gBattleTextBuff2[4] = lost_pp; + gBattleTextBuff2[5] = 0xFF; + + gBattleMons[gBankTarget].pp[i] -= lost_pp; + gActiveBank = gBankTarget; + if (!(gDisableStructs[gActiveBank].unk18_b & gBitTable[i]) + && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + { + EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr += 5; + if (gBattleMons[gBankTarget].pp[i] == 0) + CancelMultiTurnMoves(gBankTarget); + return; + } + } + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkAE_heal_party_status(void) +{ + register u32 zero2 asm("r4") = 0; + u32 zero = zero2; + u8 to_heal = 0; + if (gCurrentMove == MOVE_HEAL_BELL) + { + struct Pokemon* poke; + int i; + + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (GetBankSide(gBankAttacker) == 0) + poke = gPlayerParty; + else + poke = gEnemyParty; + + if (gBattleMons[gBankAttacker].ability != ABILITY_SOUNDPROOF) + { + gBattleMons[gBankAttacker].status1 = 0; + } + else + { + RecordAbilityBattle(gBankAttacker, gBattleMons[gBankAttacker].ability); + gBattleCommunication[MULTISTRING_CHOOSER] |= 1; + } + + gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) + { + if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF) + { + gBattleMons[gActiveBank].status1 = 0; + } + else + { + RecordAbilityBattle(gActiveBank, gBattleMons[gActiveBank].ability); + gBattleCommunication[MULTISTRING_CHOOSER] |= 2; + } + } + + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&poke[i], MON_DATA_SPECIES2); + u8 abilityBit = GetMonData(&poke[i], MON_DATA_ALT_ABILITY); + if (species != 0 && species != SPECIES_EGG) + { + u8 ability; + if (gBattlePartyID[gBankAttacker] == i) + ability = gBattleMons[gBankAttacker].ability; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[gActiveBank] == i && !(gAbsentBankFlags & gBitTable[gActiveBank])) + ability = gBattleMons[gActiveBank].ability; + else + ability = GetAbilityBySpecies(species, abilityBit); + if (ability != ABILITY_SOUNDPROOF) + to_heal |= (1 << i); + } + } + } + else //Aromatherapy + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + to_heal = 0x3F; + gBattleMons[gBankAttacker].status1 = zero2; + + gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) + gBattleMons[gActiveBank].status1 = 0; + + } + //missing check? + gActiveBank = gBankAttacker; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, to_heal, 4, &zero); + MarkBufferBankForExecution(gActiveBank); + + gBattlescriptCurrInstr++; +} + +static void atkAF_cursetarget(void) +{ + if (gBattleMons[gBankTarget].status2 & STATUS2_CURSED || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gBattleMons[gBankTarget].status2 |= STATUS2_CURSED; + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + gBattlescriptCurrInstr += 5; + } +} + +static void atkB0_set_spikes(void) +{ + u8 side = GetBankSide(gBankAttacker) ^ 1; + if (gSideTimer[side].spikesAmount == 3) + { + gSpecialStatuses[gBankAttacker].flag20 = 1; + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + gSideAffecting[side] |= SIDE_SPIKES; + gSideTimer[side].spikesAmount++; + gBattlescriptCurrInstr += 5; + } +} + +static void atkB1_set_foresight(void) +{ + gBattleMons[gBankTarget].status2 |= STATUS2_FORESIGHT; + gBattlescriptCurrInstr++; +} + +static void atkB2_setperishsong(void) +{ + int not_affected_pokes = 0, i; + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gStatuses3[i] & STATUS3_PERISH_SONG || gBattleMons[i].ability == ABILITY_SOUNDPROOF) + not_affected_pokes++; + else + { + gStatuses3[i] |= STATUS3_PERISH_SONG; + gDisableStructs[i].perishSong1 = 3; + gDisableStructs[i].perishSong2 = 3; + } + } + + sub_80153D0(gBankAttacker); + if (not_affected_pokes == gNoOfAllBanks) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; +} + +static void atkB3_rolloutdamagecalculation(void) +{ + if (gBattleMoveFlags & MOVE_NO_EFFECT) + { + CancelMultiTurnMoves(gBankAttacker); + gBattlescriptCurrInstr = BattleScript_1D6F74; + } + else + { + int i; + if (!(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) //first hit + { + gDisableStructs[gBankAttacker].rolloutTimer1 = 5; + gDisableStructs[gBankAttacker].rolloutTimer2 = 5; + gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gBankAttacker] = gCurrentMove; + } + if (--gDisableStructs[gBankAttacker].rolloutTimer1 == 0) + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); + + gDynamicBasePower = gBattleMoves[gCurrentMove].power; + for (i = 1; i < (5 - gDisableStructs[gBankAttacker].rolloutTimer1); i++) + gDynamicBasePower *= 2; + + if (gBattleMons[gBankAttacker].status2 & STATUS2_DEFENSE_CURL) + gDynamicBasePower *= 2; + + gBattlescriptCurrInstr++; + } +} + +static void atkB4_jumpifconfusedandstatmaxed(void) +{ + if (gBattleMons[gBankTarget].status2 & STATUS2_CONFUSION && gBattleMons[gBankTarget].statStages[BSScriptRead8(gBattlescriptCurrInstr + 1)] == 0xC) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; +} + +static void atkB5_furycuttercalc(void) +{ + if (gBattleMoveFlags & MOVE_NO_EFFECT) + { + gDisableStructs[gBankAttacker].furyCutterCounter = 0; + gBattlescriptCurrInstr = BattleScript_1D6F74; + } + else + { + int i; + + if (gDisableStructs[gBankAttacker].furyCutterCounter != 5) + gDisableStructs[gBankAttacker].furyCutterCounter++; + + gDynamicBasePower = gBattleMoves[gCurrentMove].power; + for (i = 1; i < gDisableStructs[gBankAttacker].furyCutterCounter; i++) + gDynamicBasePower *= 2; + + gBattlescriptCurrInstr++; + } +} + +static void atkB6_happinesstodamagecalculation(void) +{ + if (gBattleMoves[gCurrentMove].effect == EFFECT_RETURN) + gDynamicBasePower = 10 * (gBattleMons[gBankAttacker].friendship) / 25; + else //EFFECT_FRUSTRATION + gDynamicBasePower = 10 * (255 - gBattleMons[gBankAttacker].friendship) / 25; + gBattlescriptCurrInstr++; +} + +static void atkB7_presentdamagecalculation(void) +{ + s32 rand = Random() & 0xFF; + if (rand < 102) + gDynamicBasePower = 40; + else if (rand < 178) + gDynamicBasePower = 80; + else if (rand < 204) + gDynamicBasePower = 120; + else + { + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 4; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + gBattleMoveDamage *= -1; + } + if (rand < 204) + gBattlescriptCurrInstr = BattleScript_1D6F44; + else if (gBattleMons[gBankTarget].maxHP == gBattleMons[gBankTarget].hp) + gBattlescriptCurrInstr = BattleScript_1D83B5; + else + { + //gBattleMoveFlags &= ~(MOVE_NOTAFFECTED); only in Emerald + gBattlescriptCurrInstr = BattleScript_1D839B; + } +} + +static void atkB8_set_safeguard(void) +{ + if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_SAFEGUARD) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_SAFEGUARD; + gSideTimer[GetBankIdentity(gBankAttacker) & 1].safeguardTimer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + gBattlescriptCurrInstr++; +} + +static void atkB9_magnitudedamagecalculation(void) +{ + s32 magnitude = Random() % 100; + if (magnitude < 5) + { + gDynamicBasePower = 10; + magnitude = 4; + } + else if (magnitude < 15) + { + gDynamicBasePower = 30; + magnitude = 5; + } + else if (magnitude < 35) + { + gDynamicBasePower = 50; + magnitude = 6; + } + else if (magnitude < 65) + { + gDynamicBasePower = 70; + magnitude = 7; + } + else if (magnitude < 85) + { + gDynamicBasePower = 90; + magnitude = 8; + } + else if (magnitude < 95) + { + gDynamicBasePower = 110; + magnitude = 9; + } + else + { + gDynamicBasePower = 150; + magnitude = 10; + } + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 1; + gBattleTextBuff1[2] = 1; + gBattleTextBuff1[3] = 2; + gBattleTextBuff1[4] = magnitude; + gBattleTextBuff1[5] = 0xFF; + + for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (gBankTarget == gBankAttacker) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) //a valid target was found + break; + } + gBattlescriptCurrInstr++; +} + +static void atkBA_jumpifnopursuitswitchdmg(void) +{ + if (gMultiHitCounter == 1) + { + if (GetBankSide(gBankAttacker) == 0) + gBankTarget = GetBankByPlayerAI(1); + else + gBankTarget = GetBankByPlayerAI(0); + } + else + { + if (GetBankSide(gBankAttacker) == 0) + gBankTarget = GetBankByPlayerAI(3); + else + gBankTarget = GetBankByPlayerAI(2); + } + + if (gActionForBanks[gBankTarget] == 0 && gBankAttacker == ewram[gBankTarget + 0x16010] && !(gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) + && gBattleMons[gBankAttacker].hp && !gDisableStructs[gBankTarget].truantCounter && gChosenMovesByBanks[gBankTarget] == MOVE_PURSUIT) + { + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gTurnOrder[i] == gBankTarget) + gUnknown_02024A76[i] = 11; + } + gCurrentMove = MOVE_PURSUIT; + gBattlescriptCurrInstr += 5; + BATTLE_STRUCT->animTurn = 1; + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkBB_setsunny(void) +{ + if (gBattleWeather & WEATHER_SUNNY) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gBattleWeather = weather_sun; + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gWishFutureKnock.weatherDuration = 5; + } + gBattlescriptCurrInstr++; +} + +static void atkBC_maxattackhalvehp(void) //belly drum +{ + u32 half_hp = gBattleMons[gBankAttacker].maxHP / 2; + if (!(gBattleMons[gBankAttacker].maxHP / 2)) + half_hp = 1; + + if (gBattleMons[gBankAttacker].statStages[ATK_BUFF] < 0xC && gBattleMons[gBankAttacker].hp > half_hp) + { + gBattleMons[gBankAttacker].statStages[ATK_BUFF] = 0xC; + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkBD_copyfoestats(void) //psych up +{ + int i; + for (i = 0; i < 8; i++) + { + gBattleMons[gBankAttacker].statStages[i] = gBattleMons[gBankTarget].statStages[i]; + } + gBattlescriptCurrInstr += 5; //why not 1? possible unused fail possibility? +} + +static void atkBE_breakfree(void) //rapid spin +{ + if (gBattleMons[gBankAttacker].status2 & STATUS2_WRAPPED) + { + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_WRAPPED); + gBankTarget = ewram[gBankAttacker + 0x16020]; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = ewram[gBankAttacker * 2 + 0x16004]; + gBattleTextBuff1[3] = ewram[gBankAttacker * 2 + 0x16005]; + gBattleTextBuff1[4] = 0xFF; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_WrapFree; + } + else if (gStatuses3[gBankAttacker] & STATUS3_LEECHSEED) + { + gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED); + gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED_BANK); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_LeechSeedFree; + } + else if (gSideAffecting[GetBankSide(gBankAttacker)] & SIDE_SPIKES) + { + gSideAffecting[GetBankSide(gBankAttacker)] &= ~(SIDE_SPIKES); + gSideTimer[GetBankSide(gBankAttacker)].spikesAmount = 0; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_SpikesFree; + } + else + gBattlescriptCurrInstr++; +} + +static void atkBF_set_defense_curl(void) +{ + gBattleMons[gBankAttacker].status2 |= STATUS2_DEFENSE_CURL; + gBattlescriptCurrInstr++; +} + +static void atkC0_recoverbasedonsunlight(void) +{ + gBankTarget = gBankAttacker; + if (gBattleMons[gBankAttacker].hp != gBattleMons[gBankAttacker].maxHP) + { + if (!gBattleWeather || !WeatherHasEffect) + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2; + else if (gBattleWeather & WEATHER_SUNNY) + gBattleMoveDamage = 20 * gBattleMons[gBankAttacker].maxHP / 30; + else //not sunny weather + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 4; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + gBattleMoveDamage *= -1; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +__attribute__((naked)) +static void atkC1_hidden_power(void) +{ + asm(".syntax unified\n\ +push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r2, _08029894 @ =gBattleMons\n\ + ldr r0, _08029898 @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + adds r4, r1, 0\n\ + muls r4, r0\n\ + adds r4, r2\n\ + ldrb r0, [r4, 0x14]\n\ + mov r10, r0\n\ + mov r7, r10\n\ + lsls r7, 27\n\ + adds r0, r7, 0\n\ + lsrs r0, 27\n\ + mov r10, r0\n\ + movs r1, 0x2\n\ + mov r2, r10\n\ + ands r2, r1\n\ + asrs r2, 1\n\ + ldrh r7, [r4, 0x14]\n\ + mov r9, r7\n\ + mov r0, r9\n\ + lsls r0, 22\n\ + mov r9, r0\n\ + lsrs r3, r0, 27\n\ + adds r0, r1, 0\n\ + ands r0, r3\n\ + orrs r2, r0\n\ + ldrb r7, [r4, 0x15]\n\ + mov r8, r7\n\ + mov r0, r8\n\ + lsls r0, 25\n\ + mov r8, r0\n\ + lsrs r3, r0, 27\n\ + adds r0, r1, 0\n\ + ands r0, r3\n\ + lsls r0, 1\n\ + orrs r2, r0\n\ + ldr r6, [r4, 0x14]\n\ + lsls r6, 12\n\ + lsrs r3, r6, 27\n\ + adds r0, r1, 0\n\ + ands r0, r3\n\ + lsls r0, 2\n\ + orrs r2, r0\n\ + ldrh r5, [r4, 0x16]\n\ + lsls r5, 23\n\ + lsrs r3, r5, 27\n\ + adds r0, r1, 0\n\ + ands r0, r3\n\ + lsls r0, 3\n\ + orrs r2, r0\n\ + ldrb r3, [r4, 0x17]\n\ + lsls r3, 26\n\ + lsrs r0, r3, 27\n\ + ands r1, r0\n\ + lsls r1, 4\n\ + orrs r2, r1\n\ + movs r1, 0x1\n\ + adds r4, r1, 0\n\ + mov r7, r10\n\ + ands r4, r7\n\ + mov r0, r9\n\ + lsrs r0, 27\n\ + mov r9, r0\n\ + adds r0, r1, 0\n\ + mov r7, r9\n\ + ands r0, r7\n\ + lsls r0, 1\n\ + orrs r4, r0\n\ + mov r0, r8\n\ + lsrs r0, 27\n\ + mov r8, r0\n\ + adds r0, r1, 0\n\ + mov r7, r8\n\ + ands r0, r7\n\ + lsls r0, 2\n\ + orrs r4, r0\n\ + lsrs r6, 27\n\ + adds r0, r1, 0\n\ + ands r0, r6\n\ + lsls r0, 3\n\ + orrs r4, r0\n\ + lsrs r5, 27\n\ + adds r0, r1, 0\n\ + ands r0, r5\n\ + lsls r0, 4\n\ + orrs r4, r0\n\ + lsrs r3, 27\n\ + ands r1, r3\n\ + lsls r1, 5\n\ + orrs r4, r1\n\ + ldr r5, _0802989C @ =gDynamicBasePower\n\ + lsls r0, r2, 2\n\ + adds r0, r2\n\ + lsls r0, 3\n\ + movs r1, 0x3F\n\ + bl __divsi3\n\ + adds r0, 0x1E\n\ + strh r0, [r5]\n\ + ldr r5, _080298A0 @ =0x02000000\n\ + lsls r0, r4, 4\n\ + subs r0, r4\n\ + movs r1, 0x3F\n\ + bl __divsi3\n\ + adds r1, r0, 0x1\n\ + ldr r0, _080298A4 @ =0x0001601c\n\ + adds r5, r0\n\ + strb r1, [r5]\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x8\n\ + bls _08029876\n\ + adds r0, r1, 0x1\n\ + strb r0, [r5]\n\ +_08029876:\n\ + ldrb r0, [r5]\n\ + movs r1, 0xC0\n\ + orrs r0, r1\n\ + strb r0, [r5]\n\ + ldr r1, _080298A8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x1\n\ + str r0, [r1]\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08029894: .4byte gBattleMons\n\ +_08029898: .4byte gBankAttacker\n\ +_0802989C: .4byte gDynamicBasePower\n\ +_080298A0: .4byte 0x02000000\n\ +_080298A4: .4byte 0x0001601c\n\ +_080298A8: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} + +static void atkC2_selectnexttarget(void) +{ + for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (gBankTarget == gBankAttacker) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) + break; + } + gBattlescriptCurrInstr++; +} + +static void atkC3_setfutureattack(void) +{ + if (gWishFutureKnock.futureSightCounter[gBankTarget] != 0) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gWishFutureKnock.futureSightMove[gBankTarget] = gCurrentMove; + gWishFutureKnock.futureSightAttacker[gBankTarget] = gBankAttacker; + gWishFutureKnock.futureSightCounter[gBankTarget] = 3; + gWishFutureKnock.futureSightDmg[gBankTarget] = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, + gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0, + 0, gBankAttacker, gBankTarget); + + if (gProtectStructs[gBankAttacker].helpingHand) + gWishFutureKnock.futureSightDmg[gBankTarget] = gWishFutureKnock.futureSightDmg[gBankTarget] * 15 / 10; + + if (gCurrentMove == MOVE_DOOM_DESIRE) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + + gBattlescriptCurrInstr += 5; + } +} + +#ifdef NONMATCHING +static void atkC4_beat_up(void) +{ + register struct Pokemon* poke asm("r7"); + if (GetBankSide(gBankAttacker) == 0) + poke = gPlayerParty; + else + poke = gEnemyParty; + + if (gBattleMons[gBankTarget].hp == 0) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + while (gBattleCommunication[0] < 6) + { + if (GetMonData(&poke[gBattleCommunication[0]], MON_DATA_HP) && GetMonData(&poke[gBattleCommunication[0]], MON_DATA_SPECIES2) + && GetMonData(&poke[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG && !GetMonData(&poke[gBattleCommunication[0]], MON_DATA_STATUS)) + break; + gBattleCommunication[0]++; + } + if (gBattleCommunication[0] < 6) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = gBankAttacker; + gBattleTextBuff1[3] = gBattleCommunication[0]; + gBattleTextBuff1[4] = 0xFF; + gBattlescriptCurrInstr += 9; + + gBattleMoveDamage = gBaseStats[GetMonData(&poke[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack; + gBattleMoveDamage *= gBattleMoves[gCurrentMove].power; + gBattleMoveDamage *= (GetMonData(&poke[gBattleCommunication[0]], MON_DATA_LEVEL) * 2 / 5 + 2); + gBattleMoveDamage /= gBaseStats[gBattleMons[gBankTarget].species].baseDefense; + gBattleMoveDamage = (gBattleMoveDamage / 50) + 2; + if (gProtectStructs[gBankAttacker].helpingHand) + gBattleMoveDamage = gBattleMoveDamage * 15 / 10; + + gBattleCommunication[0]++; + } + else if (gBattleCommunication[0] != 0) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 5); + } +} +#else +__attribute__((naked)) +static void atkC4_beat_up(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + ldr r0, _08029A8C @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + ldr r7, _08029A90 @ =gEnemyParty\n\ + cmp r0, 0\n\ + bne _08029A62\n\ + ldr r7, _08029A94 @ =gPlayerParty\n\ +_08029A62:\n\ + ldr r2, _08029A98 @ =gBattleMons\n\ + ldr r0, _08029A9C @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _08029AA4\n\ + ldr r3, _08029AA0 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + b _08029C40\n\ + .align 2, 0\n\ +_08029A8C: .4byte gBankAttacker\n\ +_08029A90: .4byte gEnemyParty\n\ +_08029A94: .4byte gPlayerParty\n\ +_08029A98: .4byte gBattleMons\n\ +_08029A9C: .4byte gBankTarget\n\ +_08029AA0: .4byte gBattlescriptCurrInstr\n\ +_08029AA4:\n\ + ldr r6, _08029BE0 @ =gBattleCommunication\n\ + ldrb r0, [r6]\n\ + mov r8, r0\n\ + cmp r0, 0x5\n\ + bls _08029AB0\n\ + b _08029C0C\n\ +_08029AB0:\n\ + adds r4, r6, 0\n\ + movs r5, 0x64\n\ +_08029AB4:\n\ + ldrb r0, [r4]\n\ + muls r0, r5\n\ + adds r0, r7, r0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08029AF8\n\ + ldrb r0, [r6]\n\ + muls r0, r5\n\ + adds r0, r7, r0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08029AF8\n\ + ldrb r0, [r4]\n\ + muls r0, r5\n\ + adds r0, r7, r0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + movs r1, 0xCE\n\ + lsls r1, 1\n\ + cmp r0, r1\n\ + beq _08029AF8\n\ + ldrb r0, [r4]\n\ + muls r0, r5\n\ + adds r0, r7, r0\n\ + movs r1, 0x37\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08029B08\n\ +_08029AF8:\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, r4, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x5\n\ + bls _08029AB4\n\ +_08029B08:\n\ + ldr r1, _08029BE0 @ =gBattleCommunication\n\ + mov r9, r1\n\ + ldrb r2, [r1]\n\ + cmp r2, 0x5\n\ + bhi _08029C0C\n\ + ldr r1, _08029BE4 @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x4\n\ + strb r0, [r1, 0x1]\n\ + ldr r6, _08029BE8 @ =gBankAttacker\n\ + ldrb r0, [r6]\n\ + strb r0, [r1, 0x2]\n\ + strb r2, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldr r1, _08029BEC @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x9\n\ + str r0, [r1]\n\ + ldr r2, _08029BF0 @ =gBattleMoveDamage\n\ + mov r8, r2\n\ + ldr r5, _08029BF4 @ =gBaseStats\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + movs r4, 0x64\n\ + muls r0, r4\n\ + adds r0, r7, r0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r3, [r1, 0x1]\n\ + mov r2, r8\n\ + str r3, [r2]\n\ + ldr r2, _08029BF8 @ =gBattleMoves\n\ + ldr r0, _08029BFC @ =gCurrentMove\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x1]\n\ + muls r0, r3\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + mov r2, r9\n\ + ldrb r0, [r2]\n\ + muls r0, r4\n\ + adds r0, r7, r0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + lsls r0, 1\n\ + movs r1, 0x5\n\ + bl __udivsi3\n\ + adds r0, 0x2\n\ + mov r2, r8\n\ + ldr r1, [r2]\n\ + muls r0, r1\n\ + str r0, [r2]\n\ + ldr r3, _08029C00 @ =gBattleMons\n\ + ldr r1, _08029C04 @ =gBankTarget\n\ + ldrb r2, [r1]\n\ + movs r1, 0x58\n\ + muls r1, r2\n\ + adds r1, r3\n\ + ldrh r2, [r1]\n\ + lsls r1, r2, 3\n\ + subs r1, r2\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r1, [r1, 0x2]\n\ + bl __divsi3\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + movs r1, 0x32\n\ + bl __divsi3\n\ + adds r2, r0, 0x2\n\ + mov r0, r8\n\ + str r2, [r0]\n\ + ldr r1, _08029C08 @ =gProtectStructs\n\ + ldrb r0, [r6]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 28\n\ + cmp r0, 0\n\ + bge _08029BD4\n\ + lsls r0, r2, 4\n\ + subs r0, r2\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + mov r1, r8\n\ + str r0, [r1]\n\ +_08029BD4:\n\ + mov r2, r9\n\ + ldrb r0, [r2]\n\ + adds r0, 0x1\n\ + strb r0, [r2]\n\ + b _08029C46\n\ + .align 2, 0\n\ +_08029BE0: .4byte gBattleCommunication\n\ +_08029BE4: .4byte gBattleTextBuff1\n\ +_08029BE8: .4byte gBankAttacker\n\ +_08029BEC: .4byte gBattlescriptCurrInstr\n\ +_08029BF0: .4byte gBattleMoveDamage\n\ +_08029BF4: .4byte gBaseStats\n\ +_08029BF8: .4byte gBattleMoves\n\ +_08029BFC: .4byte gCurrentMove\n\ +_08029C00: .4byte gBattleMons\n\ +_08029C04: .4byte gBankTarget\n\ +_08029C08: .4byte gProtectStructs\n\ +_08029C0C:\n\ + mov r0, r8\n\ + cmp r0, 0\n\ + beq _08029C2C\n\ + ldr r3, _08029C28 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + b _08029C40\n\ + .align 2, 0\n\ +_08029C28: .4byte gBattlescriptCurrInstr\n\ +_08029C2C:\n\ + ldr r3, _08029C54 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x5]\n\ + ldrb r0, [r2, 0x6]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x7]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x8]\n\ +_08029C40:\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ +_08029C46:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08029C54: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atkC5_hidepreattack(void) +{ + switch (gCurrentMove) + { + case MOVE_FLY: + case MOVE_BOUNCE: + gStatuses3[gBankAttacker] |= STATUS3_ON_AIR; + break; + case MOVE_DIG: + gStatuses3[gBankAttacker] |= STATUS3_UNDERGROUND; + break; + case MOVE_DIVE: + gStatuses3[gBankAttacker] |= STATUS3_UNDERWATER; + break; + } + gBattlescriptCurrInstr++; +} + +static void atkC6_unhidepostattack(void) +{ + switch (gCurrentMove) + { + case MOVE_FLY: + case MOVE_BOUNCE: + gStatuses3[gBankAttacker] &= ~STATUS3_ON_AIR; + break; + case MOVE_DIG: + gStatuses3[gBankAttacker] &= ~STATUS3_UNDERGROUND; + break; + case MOVE_DIVE: + gStatuses3[gBankAttacker] &= ~STATUS3_UNDERWATER; + break; + } + gBattlescriptCurrInstr++; +} + +static void atkC7_setminimize(void) +{ + if (gHitMarker & HITMARKER_OBEYS) + gStatuses3[gBankAttacker] |= STATUS3_MINIMIZED; + gBattlescriptCurrInstr++; +} + +static void atkC8_sethail(void) +{ + if (gBattleWeather & weather_hail) + { + gBattleMoveFlags |= MOVE_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gBattleWeather = weather_hail; + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + gWishFutureKnock.weatherDuration = 5; + } + gBattlescriptCurrInstr++; +} + +static void atkC9_jumpifattackandspecialattackcannotfall(void) //memento +{ + if (gBattleMons[gBankTarget].statStages[ATK_BUFF] == 0 + && gBattleMons[gBankTarget].statStages[SPATK_BUFF] == 0 + && gBattleCommunication[6] != 1) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gActiveBank = gBankAttacker; + gBattleMoveDamage = gBattleMons[gActiveBank].hp; + EmitHealthBarUpdate(0, 0x7FFF); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 5; + } +} + +static void atkCA_setforcedtarget(void) //follow me +{ + gSideTimer[GetBankSide(gBankAttacker)].followmeTimer = 1; + gSideTimer[GetBankSide(gBankAttacker)].followmeTarget = gBankAttacker; + gBattlescriptCurrInstr++; +} + +static void atkCB_setcharge(void) +{ + gStatuses3[gBankAttacker] |= STATUS3_CHARGED_UP; + gDisableStructs[gBankAttacker].chargeTimer1 = 2; + gDisableStructs[gBankAttacker].chargeTimer2 = 2; + gBattlescriptCurrInstr++; +} + +static void atkCC_callterrainattack(void) //nature power +{ + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gCurrentMove = sNaturePowerMoves[gBattleTerrain]; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + b_movescr_stack_push(gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]); + gBattlescriptCurrInstr++; +} + +static void atkCD_cureifburnedparalysedorpoisoned(void) //refresh +{ + if (gBattleMons[gBankAttacker].status1 & (STATUS_POISON | STATUS_BURN | STATUS_PARALYSIS | STATUS_TOXIC_POISON)) + { + gBattleMons[gBankAttacker].status1 = 0; + gBattlescriptCurrInstr += 5; + gActiveBank = gBankAttacker; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkCE_settorment(void) +{ + if (gBattleMons[gBankTarget].status2 & STATUS2_TORMENT) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gBattleMons[gBankTarget].status2 |= STATUS2_TORMENT; + gBattlescriptCurrInstr += 5; + } +} + +static void atkCF_jumpifnodamage(void) +{ + if (gProtectStructs[gBankAttacker].physicalDmg || gProtectStructs[gBankAttacker].specialDmg) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkD0_settaunt(void) +{ + if (gDisableStructs[gBankTarget].tauntTimer1 == 0) + { + gDisableStructs[gBankTarget].tauntTimer1 = 2; + gDisableStructs[gBankTarget].tauntTimer2 = 2; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkD1_set_helpinghand(void) +{ + gBankTarget = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gBankTarget]) + && !gProtectStructs[gBankAttacker].helpingHand && !gProtectStructs[gBankTarget].helpingHand) + { + gProtectStructs[gBankTarget].helpingHand = 1; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#ifdef NONMATCHING +static void atkD2_swap_items(void) +{ + if ((GetBankSide(gBankAttacker) != 1 || gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER) || gTrainerBattleOpponent == 0x400)) + { + u8 side = GetBankSide(gBankAttacker); + if (gBattleTypeFlags) + } + + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#else +__attribute__((naked)) +static void atkD2_swap_items(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + ldr r0, _0802A30C @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0802A24C\n\ + ldr r0, _0802A310 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _0802A314 @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0802A24C\n\ + ldr r0, _0802A318 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + cmp r1, r0\n\ + bne _0802A2EE\n\ +_0802A24C:\n\ + ldr r4, _0802A30C @ =gBankAttacker\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r0, _0802A310 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _0802A314 @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0802A290\n\ + ldr r0, _0802A318 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + cmp r1, r0\n\ + beq _0802A290\n\ + ldr r0, _0802A31C @ =gWishFutureKnock\n\ + adds r0, 0x29\n\ + adds r0, r2, r0\n\ + ldrb r1, [r0]\n\ + ldr r3, _0802A320 @ =gBitTable\n\ + ldr r2, _0802A324 @ =gBattlePartyID\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _0802A2EE\n\ +_0802A290:\n\ + ldr r0, _0802A328 @ =gBattleMons\n\ + mov r9, r0\n\ + ldr r1, _0802A30C @ =gBankAttacker\n\ + ldrb r4, [r1]\n\ + movs r2, 0x58\n\ + mov r8, r2\n\ + mov r0, r8\n\ + muls r0, r4\n\ + mov r3, r9\n\ + adds r5, r0, r3\n\ + ldrh r3, [r5, 0x2E]\n\ + adds r1, r3, 0\n\ + cmp r1, 0\n\ + bne _0802A2BE\n\ + ldr r0, _0802A32C @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + add r0, r9\n\ + ldrh r0, [r0, 0x2E]\n\ + cmp r0, 0\n\ + beq _0802A2EE\n\ +_0802A2BE:\n\ + cmp r1, 0xAF\n\ + beq _0802A2EE\n\ + ldr r7, _0802A32C @ =gBankTarget\n\ + ldrb r0, [r7]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + mov r1, r9\n\ + adds r2, r0, r1\n\ + ldrh r1, [r2, 0x2E]\n\ + cmp r1, 0xAF\n\ + beq _0802A2EE\n\ + adds r0, r3, 0\n\ + subs r0, 0x79\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xB\n\ + bls _0802A2EE\n\ + adds r0, r1, 0\n\ + subs r0, 0x79\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xB\n\ + bhi _0802A334\n\ +_0802A2EE:\n\ + ldr r3, _0802A330 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ + b _0802A49A\n\ + .align 2, 0\n\ +_0802A30C: .4byte gBankAttacker\n\ +_0802A310: .4byte gBattleTypeFlags\n\ +_0802A314: .4byte 0x00000902\n\ +_0802A318: .4byte gTrainerBattleOpponent\n\ +_0802A31C: .4byte gWishFutureKnock\n\ +_0802A320: .4byte gBitTable\n\ +_0802A324: .4byte gBattlePartyID\n\ +_0802A328: .4byte gBattleMons\n\ +_0802A32C: .4byte gBankTarget\n\ +_0802A330: .4byte gBattlescriptCurrInstr\n\ +_0802A334:\n\ + adds r0, r2, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3C\n\ + bne _0802A36C\n\ + ldr r1, _0802A360 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0802A364 @ =BattleScript_NoItemSteal\n\ + str r0, [r1]\n\ + ldr r1, _0802A368 @ =gLastUsedAbility\n\ + ldrb r0, [r7]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + b _0802A49A\n\ + .align 2, 0\n\ +_0802A360: .4byte gBattlescriptCurrInstr\n\ +_0802A364: .4byte BattleScript_NoItemSteal\n\ +_0802A368: .4byte gLastUsedAbility\n\ +_0802A36C:\n\ + lsls r0, r4, 1\n\ + ldr r4, _0802A458 @ =0x020160f0\n\ + adds r6, r0, r4\n\ + ldrh r5, [r5, 0x2E]\n\ + mov r10, r5\n\ + strh r1, [r6]\n\ + ldr r3, _0802A45C @ =gBankAttacker\n\ + ldrb r0, [r3]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + add r0, r9\n\ + movs r1, 0\n\ + strh r1, [r0, 0x2E]\n\ + ldrb r0, [r7]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + add r0, r9\n\ + mov r3, r10\n\ + strh r3, [r0, 0x2E]\n\ + ldr r5, _0802A460 @ =gActiveBank\n\ + ldr r1, _0802A45C @ =gBankAttacker\n\ + ldrb r0, [r1]\n\ + strb r0, [r5]\n\ + str r6, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl EmitSetAttributes\n\ + ldr r2, _0802A45C @ =gBankAttacker\n\ + ldrb r0, [r2]\n\ + bl MarkBufferBankForExecution\n\ + ldrb r0, [r7]\n\ + strb r0, [r5]\n\ + ldrb r0, [r7]\n\ + mov r3, r8\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + mov r1, r9\n\ + adds r1, 0x2E\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r7]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _0802A464 @ =0xfffe9f10\n\ + adds r4, r0\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + ldr r2, _0802A468 @ =0x000160e8\n\ + adds r0, r2\n\ + adds r0, r4\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + ldr r1, _0802A46C @ =0x000160e9\n\ + adds r0, r1\n\ + adds r0, r4\n\ + movs r3, 0\n\ + strb r3, [r0]\n\ + ldr r3, _0802A45C @ =gBankAttacker\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + adds r0, r4\n\ + movs r2, 0\n\ + strb r2, [r0]\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + adds r0, r4\n\ + strb r2, [r0]\n\ + ldr r1, _0802A470 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + ldr r1, _0802A474 @ =gBattleTextBuff1\n\ + movs r3, 0xFD\n\ + strb r3, [r1]\n\ + movs r2, 0xA\n\ + strb r2, [r1, 0x1]\n\ + ldrh r0, [r6]\n\ + strb r0, [r1, 0x2]\n\ + ldrh r0, [r6]\n\ + lsrs r0, 8\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldr r1, _0802A478 @ =gBattleTextBuff2\n\ + strb r3, [r1]\n\ + strb r2, [r1, 0x1]\n\ + mov r3, r10\n\ + strb r3, [r1, 0x2]\n\ + mov r2, r10\n\ + lsrs r0, r2, 8\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + strb r0, [r1, 0x4]\n\ + cmp r2, 0\n\ + beq _0802A480\n\ + ldrh r0, [r6]\n\ + cmp r0, 0\n\ + beq _0802A494\n\ + ldr r1, _0802A47C @ =gBattleCommunication\n\ + movs r0, 0x2\n\ + b _0802A498\n\ + .align 2, 0\n\ +_0802A458: .4byte 0x020160f0\n\ +_0802A45C: .4byte gBankAttacker\n\ +_0802A460: .4byte gActiveBank\n\ +_0802A464: .4byte 0xfffe9f10\n\ +_0802A468: .4byte 0x000160e8\n\ +_0802A46C: .4byte 0x000160e9\n\ +_0802A470: .4byte gBattlescriptCurrInstr\n\ +_0802A474: .4byte gBattleTextBuff1\n\ +_0802A478: .4byte gBattleTextBuff2\n\ +_0802A47C: .4byte gBattleCommunication\n\ +_0802A480:\n\ + ldrh r0, [r6]\n\ + cmp r0, 0\n\ + beq _0802A494\n\ + ldr r0, _0802A490 @ =gBattleCommunication\n\ + movs r3, 0\n\ + strb r3, [r0, 0x5]\n\ + b _0802A49A\n\ + .align 2, 0\n\ +_0802A490: .4byte gBattleCommunication\n\ +_0802A494:\n\ + ldr r1, _0802A4AC @ =gBattleCommunication\n\ + movs r0, 0x1\n\ +_0802A498:\n\ + strb r0, [r1, 0x5]\n\ +_0802A49A:\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0802A4AC: .4byte gBattleCommunication\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atkD3_copy_ability(void) //role play +{ + if (gBattleMons[gBankTarget].ability != 0 && gBattleMons[gBankTarget].ability != ABILITY_WONDER_GUARD) + { + gBattleMons[gBankAttacker].ability = gBattleMons[gBankTarget].ability; + gLastUsedAbility = gBattleMons[gBankTarget].ability; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkD4_wish_effect(void) +{ + switch (BSScriptRead8(gBattlescriptCurrInstr + 1)) + { + case 0: //use wish + if (gWishFutureKnock.wishCounter[gBankAttacker] == 0) + { + gWishFutureKnock.wishCounter[gBankAttacker] = 2; + gWishFutureKnock.wishUserID[gBankAttacker] = gBattlePartyID[gBankAttacker]; + gBattlescriptCurrInstr += 6; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + break; + case 1: //heal effect + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = gBankTarget; + gBattleTextBuff1[3] = gWishFutureKnock.wishUserID[gBankTarget]; + gBattleTextBuff1[4] = 0xFF; + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; + ATLEAST_ONE_PTR(&gBattleMoveDamage); + gBattleMoveDamage *= -1; + if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; + break; + } +} + +static void atkD5_setroots(void) //ingrain +{ + if (gStatuses3[gBankAttacker] & STATUS3_ROOTED) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gStatuses3[gBankAttacker] |= STATUS3_ROOTED; + gBattlescriptCurrInstr += 5; + } +} + +static void atkD6_doubledamagedealtifdamaged(void) +{ + if ((gProtectStructs[gBankAttacker].physicalDmg && gProtectStructs[gBankAttacker].physicalBank == gBankTarget) + || (gProtectStructs[gBankAttacker].specialDmg && gProtectStructs[gBankAttacker].specialBank == gBankTarget)) + BATTLE_STRUCT->dmgMultiplier = 2; + gBattlescriptCurrInstr++; +} + +static void atkD7_setyawn(void) +{ + if (gStatuses3[gBankTarget] & STATUS3_YAWN || (u8) gBattleMons[gBankTarget].status1) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gStatuses3[gBankTarget] |= 0x1000; + gBattlescriptCurrInstr += 5; + } +} + +static void atkD8_setdamagetohealthdifference(void) +{ + if (gBattleMons[gBankTarget].hp <= gBattleMons[gBankAttacker].hp) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gBattleMoveDamage = gBattleMons[gBankTarget].hp - gBattleMons[gBankAttacker].hp; + gBattlescriptCurrInstr += 5; + } +} + +static void atkD9_scaledamagebyhealthratio(void) +{ + if (gDynamicBasePower == 0) + { + u8 power = gBattleMoves[gCurrentMove].power; + gDynamicBasePower = gBattleMons[gBankAttacker].hp * power / gBattleMons[gBankAttacker].maxHP; + ATLEAST_ONE_PTR(&gDynamicBasePower); + } + gBattlescriptCurrInstr++; +} + +static void atkDA_abilityswap(void) +{ + if ((gBattleMons[gBankAttacker].ability == 0 && gBattleMons[gBankTarget].ability == 0) + || gBattleMons[gBankAttacker].ability == ABILITY_WONDER_GUARD || gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD + || gBattleMoveFlags & MOVE_NO_EFFECT) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + u8 atk_ability = gBattleMons[gBankAttacker].ability; + gBattleMons[gBankAttacker].ability = gBattleMons[gBankTarget].ability; + gBattleMons[gBankTarget].ability = atk_ability; + gBattlescriptCurrInstr += 5; + } +} + +static void atkDB_imprisoneffect(void) +{ + u8 r8 = 0; + if ((gStatuses3[gBankAttacker] & STATUS3_IMPRISIONED)) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + u8 bank; + sub_801529C(gBankAttacker); + for (bank = 0; bank < gNoOfAllBanks; bank++) + { + if (r8 != GetBankSide(bank)) + { + int j; + for (j = 0; j < 4; j++) + { + int k; + for (k = 0; k < 4; k++) + { + if (gBattleMons[gBankAttacker].moves[j] == gBattleMons[bank].moves[k] && gBattleMons[gBankAttacker].moves[j]) + break; + } + if (k != 4) + break; + } + if (j != 4) + { + gStatuses3[gBankAttacker] |= STATUS3_IMPRISIONED; + gBattlescriptCurrInstr += 5; + break; + } + } + } + if (bank == gNoOfAllBanks) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkDC_setgrudge(void) +{ + if (gStatuses3[gBankAttacker] & STATUS3_GRUDGE) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gStatuses3[gBankAttacker] |= STATUS3_GRUDGE; + gBattlescriptCurrInstr += 5; + } +} + +static void atkDD_weightdamagecalculation(void) +{ + int i; + for (i = 0; sWeightDamage[i] != 0xFFFF; i += 2) + { + if (sWeightDamage[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + break; + } + if (sWeightDamage[i] != 0xFFFF) + gDynamicBasePower = sWeightDamage[i + 1]; + else + gDynamicBasePower = 120; + gBattlescriptCurrInstr++; +} + +#ifdef NONMATCHING +static void atkDE_asistattackselect(void) +{ + u32 chooseable_moves_no = 0; + struct Pokemon* poke; + int i, j; + u16* chooseable_moves; + if (GetBankIdentity(gBankAttacker) & 1) + poke = gEnemyParty; + else + poke = gPlayerParty; + + for (i = 0; i < 6; i++) + { + if (i == gBattlePartyID[gBankAttacker]) + break; + if (!GetMonData(&poke[i], MON_DATA_SPECIES2) || GetMonData(&poke[i], MON_DATA_SPECIES2) == SPECIES_EGG) + break; + chooseable_moves = &BATTLE_STRUCT->assistMove[chooseable_moves_no]; + for (j = 0; j < 4; j++) + { + int k; + u16 move = GetMonData(&poke[i], MON_DATA_MOVE1 + i); + if (IsMoveUnchoosable(move)) + break; + //sUnknown_081FACFE[k] + for (k = 0; ;k++) + { + if (sUnknown_081FACFE[k] == 0xFFFF) + { + if (move) + { + *chooseable_moves = move; + chooseable_moves++; + chooseable_moves_no++; + } + break; + } + if (sUnknown_081FACFE[k] == move) + break; + } + } + } + if (chooseable_moves_no) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gRandomMove = BATTLE_STRUCT->assistMove[Random() % chooseable_moves_no]; + gBankTarget = sub_801B5C0(gRandomMove, 0); + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#else +__attribute__((naked)) +static void atkDE_asistattackselect(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + movs r0, 0\n\ + mov r10, r0\n\ + ldr r0, _0802AB9C @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBankIdentity\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + ldr r0, _0802ABA0 @ =gPlayerParty\n\ + str r0, [sp]\n\ + cmp r1, 0\n\ + beq _0802AAAC\n\ + ldr r1, _0802ABA4 @ =gEnemyParty\n\ + str r1, [sp]\n\ +_0802AAAC:\n\ + movs r2, 0\n\ +_0802AAAE:\n\ + ldr r1, _0802ABA8 @ =gBattlePartyID\n\ + ldr r0, _0802AB9C @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + adds r1, r2, 0x1\n\ + str r1, [sp, 0x4]\n\ + ldrh r0, [r0]\n\ + cmp r2, r0\n\ + beq _0802AB54\n\ + movs r0, 0x64\n\ + adds r6, r2, 0\n\ + muls r6, r0\n\ + ldr r0, [sp]\n\ + adds r4, r0, r6\n\ + adds r0, r4, 0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0802AB54\n\ + adds r0, r4, 0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + movs r1, 0xCE\n\ + lsls r1, 1\n\ + cmp r0, r1\n\ + beq _0802AB54\n\ + movs r5, 0\n\ + ldr r1, _0802ABAC @ =0x0000ffff\n\ + mov r8, r1\n\ + mov r9, r6\n\ + mov r1, r10\n\ + lsls r0, r1, 1\n\ + ldr r1, _0802ABB0 @ =0x02016024\n\ + adds r6, r0, r1\n\ +_0802AAF8:\n\ + movs r7, 0\n\ + adds r1, r5, 0\n\ + adds r1, 0xD\n\ + ldr r0, [sp]\n\ + add r0, r9\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + adds r0, r4, 0\n\ + bl IsMoveUnchoosable\n\ + lsls r0, 24\n\ + adds r1, r5, 0x1\n\ + cmp r0, 0\n\ + bne _0802AB4E\n\ + ldr r0, _0802ABB4 @ =sUnknown_081FACFE\n\ + ldrh r2, [r0]\n\ + adds r3, r0, 0\n\ + cmp r2, r8\n\ + beq _0802AB42\n\ + cmp r4, r2\n\ + beq _0802AB38\n\ + ldr r5, _0802ABAC @ =0x0000ffff\n\ + adds r2, r3, 0\n\ +_0802AB2A:\n\ + adds r2, 0x2\n\ + adds r7, 0x1\n\ + ldrh r0, [r2]\n\ + cmp r0, r5\n\ + beq _0802AB42\n\ + cmp r4, r0\n\ + bne _0802AB2A\n\ +_0802AB38:\n\ + lsls r0, r7, 1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + cmp r0, r8\n\ + bne _0802AB4E\n\ +_0802AB42:\n\ + cmp r4, 0\n\ + beq _0802AB4E\n\ + strh r4, [r6]\n\ + adds r6, 0x2\n\ + movs r0, 0x1\n\ + add r10, r0\n\ +_0802AB4E:\n\ + adds r5, r1, 0\n\ + cmp r5, 0x3\n\ + ble _0802AAF8\n\ +_0802AB54:\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, 0x5\n\ + ble _0802AAAE\n\ + mov r1, r10\n\ + cmp r1, 0\n\ + beq _0802ABCC\n\ + ldr r2, _0802ABB8 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + ldr r1, _0802ABBC @ =0xfffffbff\n\ + ands r0, r1\n\ + str r0, [r2]\n\ + ldr r4, _0802ABC0 @ =gRandomMove\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + mov r0, r10\n\ + muls r0, r1\n\ + asrs r0, 8\n\ + lsls r0, 1\n\ + ldr r1, _0802ABB0 @ =0x02016024\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + strh r0, [r4]\n\ + ldrh r0, [r4]\n\ + movs r1, 0\n\ + bl sub_801B5C0\n\ + ldr r1, _0802ABC4 @ =gBankTarget\n\ + strb r0, [r1]\n\ + ldr r1, _0802ABC8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + b _0802ABE6\n\ + .align 2, 0\n\ +_0802AB9C: .4byte gBankAttacker\n\ +_0802ABA0: .4byte gPlayerParty\n\ +_0802ABA4: .4byte gEnemyParty\n\ +_0802ABA8: .4byte gBattlePartyID\n\ +_0802ABAC: .4byte 0x0000ffff\n\ +_0802ABB0: .4byte 0x02016024\n\ +_0802ABB4: .4byte sUnknown_081FACFE\n\ +_0802ABB8: .4byte gHitMarker\n\ +_0802ABBC: .4byte 0xfffffbff\n\ +_0802ABC0: .4byte gRandomMove\n\ +_0802ABC4: .4byte gBankTarget\n\ +_0802ABC8: .4byte gBattlescriptCurrInstr\n\ +_0802ABCC:\n\ + ldr r3, _0802ABF8 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ +_0802ABE6:\n\ + add sp, 0x8\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0802ABF8: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} + +#endif // NONMATCHING + +static void atkDF_setmagiccoat(void) +{ + gBankTarget = gBankAttacker; + gSpecialStatuses[gBankAttacker].flag20 = 1; + if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gProtectStructs[gBankAttacker].bounceMove = 1; + gBattlescriptCurrInstr += 5; + } +} + +static void atkE0_setstealstatchange(void) +{ + gSpecialStatuses[gBankAttacker].flag20 = 1; + if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gProtectStructs[gBankAttacker].stealMove = 1; + gBattlescriptCurrInstr += 5; + } +} + +static void atkE1_intimidate_string_loader(void) +{ + u8 side; + + BATTLE_STRUCT->scriptingActive = ewram[0x160dd]; + side = GetBankSide(BATTLE_STRUCT->scriptingActive); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 9; + gBattleTextBuff1[2] = gBattleMons[BATTLE_STRUCT->scriptingActive].ability; + gBattleTextBuff1[3] = 0xFF; + + for (;gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (GetBankSide(gBankTarget) == side) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) + break; + } + + if (gBankTarget >= gNoOfAllBanks) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; +} + +static void atkE2_switchout_abilities(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + switch (gBattleMons[gActiveBank].ability) + { + case ABILITY_NATURAL_CURE: + gBattleMons[gActiveBank].status1 = 0; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, gBitTable[ewram[gActiveBank + 0x16064]], 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + break; + } + gBattlescriptCurrInstr += 2; +} + +static void atkE3_jumpiffainted(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleMons[gActiveBank].hp == 0) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; +} + +static void atkE4_getsecretpowereffect(void) +{ + switch (gBattleTerrain) + { + case 0: + gBattleCommunication[MOVE_EFFECT_BYTE] = 2; + break; + case 1: + gBattleCommunication[MOVE_EFFECT_BYTE] = 1; + break; + case 2: + gBattleCommunication[MOVE_EFFECT_BYTE] = 27; + break; + case 3: + gBattleCommunication[MOVE_EFFECT_BYTE] = 23; + break; + case 4: + gBattleCommunication[MOVE_EFFECT_BYTE] = 22; + break; + case 5: + gBattleCommunication[MOVE_EFFECT_BYTE] = 24; + break; + case 6: + gBattleCommunication[MOVE_EFFECT_BYTE] = 7; + break; + case 7: + gBattleCommunication[MOVE_EFFECT_BYTE] = 8; + break; + default: + gBattleCommunication[MOVE_EFFECT_BYTE] = 5; + break; + } + gBattlescriptCurrInstr++; +} + +static void atkE5_pickup(void) +{ + int i; + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u16 held_item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + u8 ability; + if (GetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY)) + ability = gBaseStats[species].ability2; + else + ability = gBaseStats[species].ability1; + + if (ability == ABILITY_PICKUP && species != 0 && species != SPECIES_EGG && held_item == 0 && (Random() % 10) == 0) + { + s32 chance = Random() % 100; + s32 j; + for (j = 0; j < 18; j += 2) + { + if (sPickupItems[j + 1] > chance) + break; + } + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (const void*) &sPickupItems[j]); + } + } + gBattlescriptCurrInstr++; +} + +static void atkE6_castform_change_animation(void) +{ + gActiveBank = BATTLE_STRUCT->scriptingActive; + if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) + BATTLE_STRUCT->castformToChangeInto |= 0x80; + EmitBattleAnimation(0, 0, BATTLE_STRUCT->castformToChangeInto); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr++; +} + +static void atkE7_castform_data_change(void) +{ + u8 form; + gBattlescriptCurrInstr++; + form = castform_switch(BATTLE_STRUCT->scriptingActive); + if (form) + { + b_push_move_exec(gUnknown_081D977D); + BATTLE_STRUCT->castformToChangeInto = form - 1; + } +} + +static void atkE8_settypebasedhalvers(void) //water/mud sport +{ + bool8 worked = FALSE; + if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT) + { + if (!(gStatuses3[gBankAttacker] & STATUS3_MUDSPORT)) + { + gStatuses3[gBankAttacker] |= STATUS3_MUDSPORT; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + worked = TRUE; + } + } + else //water sport + { + if (!(gStatuses3[gBankAttacker] & STATUS3_WATERSPORT)) + { + gStatuses3[gBankAttacker] |= STATUS3_WATERSPORT; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + worked = TRUE; + } + } + if (worked) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkE9_setweatherballtype(void) +{ + if (WeatherHasEffect) + { + if ((u8)(gBattleWeather)) + BATTLE_STRUCT->dmgMultiplier = 2; + if (gBattleWeather & WEATHER_RAINY) + BATTLE_STRUCT->dynamicMoveType = TYPE_WATER | 0x80; + else if (gBattleWeather & WEATHER_SANDSTORMY) + BATTLE_STRUCT->dynamicMoveType = TYPE_ROCK | 0x80; + else if (gBattleWeather & WEATHER_SUNNY) + BATTLE_STRUCT->dynamicMoveType = TYPE_FIRE | 0x80; + else if (gBattleWeather & weather_hail) + BATTLE_STRUCT->dynamicMoveType = TYPE_ICE | 0x80; + else + BATTLE_STRUCT->dynamicMoveType = TYPE_NORMAL | 0x80; + } + gBattlescriptCurrInstr++; +} + +static void atkEA_recycleitem(void) +{ + u16* used_item; + gActiveBank = gBankAttacker; + used_item = UsedHeldItem(gActiveBank); + if (*used_item && gBattleMons[gActiveBank].item == 0) + { + gLastUsedItem = *used_item; + *used_item = 0; + gBattleMons[gActiveBank].item = gLastUsedItem; + EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkEB_settypetoterrain(void) +{ + if (gBattleMons[gBankAttacker].type1 != sTerrainToType[gBattleTerrain] && gBattleMons[gBankAttacker].type2 != sTerrainToType[gBattleTerrain]) + { + gBattleMons[gBankAttacker].type1 = sTerrainToType[gBattleTerrain]; + gBattleMons[gBankAttacker].type2 = sTerrainToType[gBattleTerrain]; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 3; + gBattleTextBuff1[2] = sTerrainToType[gBattleTerrain]; + gBattleTextBuff1[3] = 0xFF; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkEC_pursuit_sth(void) +{ + gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]) && gActionForBanks[gActiveBank] == 0 && gChosenMovesByBanks[gActiveBank] == MOVE_PURSUIT) + { + gUnknown_02024A76[gActiveBank] = 11; + gCurrentMove = MOVE_PURSUIT; + gBattlescriptCurrInstr += 5; + BATTLE_STRUCT->animTurn = 1; + BATTLE_STRUCT->unk160A7 = gBankAttacker; + gBankAttacker = gActiveBank; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkED_802B4B4(void) +{ + gEffectBank = gBankAttacker; + if (gBankAttacker == gBankTarget) + gBankAttacker = gBankTarget = BATTLE_STRUCT->scriptingActive; + else + gBankTarget = BATTLE_STRUCT->scriptingActive; + BATTLE_STRUCT->scriptingActive = gEffectBank; + gBattlescriptCurrInstr++; +} + +static void atkEE_removelightscreenreflect(void) //brick break +{ + u8 side = GetBankSide(gBankAttacker) ^ 1; + if (gSideTimer[side].reflectTimer || gSideTimer[side].lightscreenTimer) + { + gSideAffecting[side] &= ~(SIDE_REFLECT); + gSideAffecting[side] &= ~(SIDE_LIGHTSCREEN); + gSideTimer[side].reflectTimer = 0; + gSideTimer[side].lightscreenTimer = 0; + BATTLE_STRUCT->animTurn = 1; + BATTLE_STRUCT->animTargetsHit = 1; + } + else + { + BATTLE_STRUCT->animTurn = 0; + BATTLE_STRUCT->animTargetsHit = 0; + } + gBattlescriptCurrInstr++; +} + +static void atkEF_pokeball_catch_calculation(void) +{ + u8 ball_multiplier = 0; + if (gBattleExecBuffer) + return; + + gActiveBank = gBankAttacker; + gBankTarget = gBankAttacker ^ 1; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + EmitBallThrowAnim(0, 5); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr = BattleScript_TrainerBallBlock; + } + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) + { + EmitBallThrowAnim(0, 4); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr = BattleScript_WallyBallThrow; + } + else + { + u32 odds; + u8 catch_rate; + if (gLastUsedItem == ITEM_SAFARI_BALL) + catch_rate = BATTLE_STRUCT->unk16089 * 1275 / 100; //correct the name to safariFleeRate + else + catch_rate = gBaseStats[gBattleMons[gBankTarget].species].catchRate; + if (gLastUsedItem > 5) + { + switch (gLastUsedItem) + { + case ITEM_NET_BALL: + if (gBattleMons[gBankTarget].type1 == TYPE_WATER || gBattleMons[gBankTarget].type2 == TYPE_WATER || gBattleMons[gBankTarget].type1 == TYPE_BUG || gBattleMons[gBankTarget].type2 == TYPE_BUG) + ball_multiplier = 30; + else + ball_multiplier = 10; + break; + case ITEM_DIVE_BALL: + if (sav1_map_get_light_level() == 5) + ball_multiplier = 35; + else + ball_multiplier = 10; + break; + case ITEM_NEST_BALL: + if (gBattleMons[gBankTarget].level <= 39) + { + ball_multiplier = 40 - gBattleMons[gBankTarget].level; + if (ball_multiplier <= 9) + ball_multiplier = 10; + } + else + ball_multiplier = 10; + break; + case ITEM_REPEAT_BALL: + if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + ball_multiplier = 30; + else + ball_multiplier = 10; + break; + case ITEM_TIMER_BALL: + ball_multiplier = gBattleResults.battleTurnCounter + 10; + if (ball_multiplier > 40) + ball_multiplier = 40; + break; + case ITEM_LUXURY_BALL: + case ITEM_PREMIER_BALL: + ball_multiplier = 10; + break; + } + } + else + ball_multiplier = sBallCatchBonuses[gLastUsedItem - 2]; + + odds = (catch_rate * ball_multiplier / 10) * (gBattleMons[gBankTarget].maxHP * 3 - gBattleMons[gBankTarget].hp * 2) / (3 * gBattleMons[gBankTarget].maxHP); + if (gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) + odds *= 2; + if (gBattleMons[gBankTarget].status1 & (STATUS_POISON | STATUS_BURN | STATUS_PARALYSIS /*| STATUS_TOXIC_POISON */)) //nice one gf + odds = (odds * 15) / 10; + + //I have NO CLUE how to fix that. + if (gLastUsedItem != ITEM_SAFARI_BALL) + { + register u16* item asm("r1") = &gLastUsedItem; + if (*item == ITEM_MASTER_BALL) + gBattleResults.unk5_1 = 1; + else + { + u8* a = &((u8*)(&gBattleResults))[0]; + asm("ldrh r1, [r1]\n\ + add r0, r0, r1"); + if ((a)[0x34] < 0xFF) + { + a[0x34] += 1; + } + } + } + if (odds > 254) //poke caught + { + EmitBallThrowAnim(0, 4); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; + SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem); + if (CalculatePlayerPartyCount() == 6) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else //poke may be caught, calculate shakes + { + u8 shakes; + odds = Sqrt(Sqrt(16711680 / odds)); + odds = 1048560 / odds; + for (shakes = 0; shakes < 4 && Random() < odds; shakes++) {} + if (gLastUsedItem == ITEM_MASTER_BALL) + shakes = 4; //why calculate the shakes before that check? + EmitBallThrowAnim(0, shakes); + MarkBufferBankForExecution(gActiveBank); + if (shakes == 4) //poke caught, copy of the code above + { + gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; + SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem); + if (CalculatePlayerPartyCount() == 6) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else //rip + { + gBattleCommunication[MULTISTRING_CHOOSER] = shakes; + gBattlescriptCurrInstr = BattleScript_ShakeBallThrow; + } + } + } +} + +static void atkF0_copy_caught_poke(void) +{ + GiveMonToPlayer(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]); + gBattleResults.caughtPoke = gBattleMons[gBankAttacker ^ 1].species; + GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleResults.caughtNick); + gBattlescriptCurrInstr++; +} + +static void atkF1_setpoke_as_caught(void) +{ + if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 3); + if (gBattleMons[gBankTarget].species == SPECIES_UNOWN) + gSaveBlock2.pokedex.unownPersonality = gBattleMons[gBankTarget].personality; + if (gBattleMons[gBankTarget].species == SPECIES_SPINDA) //else if + gSaveBlock2.pokedex.spindaPersonality = gBattleMons[gBankTarget].personality; + gBattlescriptCurrInstr += 5; + } +} + +extern const u32 gBattleTerrainTiles_Building[]; +extern const u32 gBattleTerrainTilemap_Building[]; +extern const u32 gBattleTerrainPalette_BattleTower[]; + +static void atkF2_display_dex_info(void) +{ + switch (gBattleCommunication[0]) + { + case 0: + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gBattleCommunication[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + gBattleCommunication[1] = sub_809070C(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), gBattleMons[gBankTarget].otId, gBattleMons[gBankTarget].personality); + gBattleCommunication[0]++; + } + break; + case 2: + if (!gPaletteFade.active && gMain.callback2 == sub_800F808 && !gTasks[gBattleCommunication[1]].isActive) + { + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(0x06008000)); + LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(0x0600d000)); + LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); + REG_BG3CNT = 0x5a0b; + gUnknown_030041B0 = 0x100; + BeginNormalPaletteFade(0xfffc, 0, 0x10, 0, 0); + gBattleCommunication[0]++; + } + break; + case 3: + if (!gPaletteFade.active) + gBattlescriptCurrInstr++; + break; + } +} + +__attribute__((naked)) +void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r4, [sp, 0x20]\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r12, r1\n\ + lsls r2, 24\n\ + lsrs r5, r2, 24\n\ + lsls r3, 24\n\ + lsrs r7, r3, 24\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + mov r8, r4\n\ + mov r2, r12\n\ + cmp r2, r7\n\ + bgt _0802BC5A\n\ + lsls r1, r6, 1\n\ + ldr r0, _0802BC20 @ =0x0600c000\n\ + adds r1, r0\n\ + mov r9, r1\n\ +_0802BC06:\n\ + adds r1, r6, 0\n\ + adds r0, r2, 0x1\n\ + mov r10, r0\n\ + cmp r1, r5\n\ + bgt _0802BC54\n\ + lsls r0, r2, 6\n\ + mov r4, r9\n\ + adds r3, r4, r0\n\ +_0802BC16:\n\ + cmp r2, r12\n\ + bne _0802BC28\n\ + ldr r0, _0802BC24 @ =0x00001022\n\ + b _0802BC36\n\ + .align 2, 0\n\ +_0802BC20: .4byte 0x0600c000\n\ +_0802BC24: .4byte 0x00001022\n\ +_0802BC28:\n\ + cmp r2, r7\n\ + bne _0802BC34\n\ + ldr r0, _0802BC30 @ =0x00001028\n\ + b _0802BC36\n\ + .align 2, 0\n\ +_0802BC30: .4byte 0x00001028\n\ +_0802BC34:\n\ + ldr r0, _0802BC68 @ =0x00001025\n\ +_0802BC36:\n\ + cmp r1, r6\n\ + beq _0802BC42\n\ + adds r0, 0x1\n\ + cmp r1, r5\n\ + bne _0802BC42\n\ + adds r0, 0x1\n\ +_0802BC42:\n\ + mov r4, r8\n\ + cmp r4, 0\n\ + beq _0802BC4A\n\ + movs r0, 0\n\ +_0802BC4A:\n\ + strh r0, [r3]\n\ + adds r3, 0x2\n\ + adds r1, 0x1\n\ + cmp r1, r5\n\ + ble _0802BC16\n\ +_0802BC54:\n\ + mov r2, r10\n\ + cmp r2, r7\n\ + ble _0802BC06\n\ +_0802BC5A:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0802BC68: .4byte 0x00001025\n\ + .syntax divided"); +} + +void sub_802BC6C(void) +{ + sub_814A880(0xC8, ((gBattleCommunication[1] << 28) + 1207959552) >> 24); //what could that be? +} + +void nullsub_6(void) +{ + return; +} + +static void atkF3_nickname_caught_poke(void) +{ + switch (gBattleCommunication[0]) + { + case 0: + sub_8023A80(); + gBattleCommunication[0]++; + gBattleCommunication[1] = 0; + sub_802BC6C(); + break; + case 1: + if (gMain.newKeys & 0x40 && gBattleCommunication[1] != 0) + { + PlaySE(5); + nullsub_6(); + gBattleCommunication[1] = 0; + sub_802BC6C(); + } + if (gMain.newKeys & 0x80 && gBattleCommunication[1] == 0) + { + PlaySE(5); + nullsub_6(); + gBattleCommunication[1] = 1; + sub_802BC6C(); + } + if (gMain.newKeys & 1) + { + PlaySE(5); + if (gBattleCommunication[1] == 0) + { + gBattleCommunication[0]++; + BeginFastPaletteFade(3); + } + else + gBattleCommunication[0] = 4; + } + else if (gMain.newKeys & 2) + { + PlaySE(5); + gBattleCommunication[0] = 4; + } + break; + case 2: + if (!gPaletteFade.active) + { + GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); + DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), sub_800F808); + gBattleCommunication[0]++; + } + break; + case 3: + if (gMain.callback2 == sub_800F808 && !gPaletteFade.active ) + { + SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + break; + case 4: + if (CalculatePlayerPartyCount() == 6) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + break; + } +} + +static void atkF4_802BEF0(void) +{ + gBattleMons[gBankAttacker].hp -= gBattleMoveDamage; + gBattlescriptCurrInstr++; +} + +static void atkF5_removeattackerstatus1(void) +{ + gBattleMons[gBankAttacker].status1 = 0; + gBattlescriptCurrInstr++; +} + +static void atkF6_802BF48(void) +{ + gFightStateTracker = 0xC; +} + +static void atkF7_802BF54(void) +{ + gFightStateTracker = 0xC; + gCurrentMoveTurn = gNoOfAllBanks; +} diff --git a/src/battle_6.c b/src/battle_6.c index 9ea3f240a..c833aef5e 100644 --- a/src/battle_6.c +++ b/src/battle_6.c @@ -83,7 +83,7 @@ extern void sub_802E220(); extern void sub_802E2D4(); extern void sub_802E004(void); extern void sub_802DF30(void); -extern void sub_80325B8(void); +extern void BattleMusicStop(void); extern void PlayerBufferExecCompleted(void); extern void bx_t1_healthbar_update(void); extern void nullsub_91(void); @@ -1101,7 +1101,7 @@ void sub_8030594(void) void sub_8030674(void) { - sub_80325B8(); + BattleMusicStop(); BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); PlayerBufferExecCompleted(); } diff --git a/src/battle_7.c b/src/battle_7.c index a93237608..f2838467e 100644 --- a/src/battle_7.c +++ b/src/battle_7.c @@ -808,7 +808,7 @@ void sub_80324F8(struct Pokemon *pkmn, u8 b) } } -void sub_80325B8(void) +void BattleMusicStop(void) { u8 r4 = GetBankByPlayerAI(0); diff --git a/src/battle_ai.c b/src/battle_ai.c index 6f91a104d..4206e8f83 100644 --- a/src/battle_ai.c +++ b/src/battle_ai.c @@ -896,7 +896,7 @@ static void BattleAICmd_if_user_cant_damage(void) static void BattleAICmd_get_turn_count(void) { - AI_THINKING_STRUCT->funcResult = gBattleResults.BattleTurnCounter; + AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter; gAIScriptPtr += 1; } @@ -1412,8 +1412,8 @@ static void BattleAICmd_get_highest_possible_damage(void) s32 i; gDynamicBasePower = 0; - BATTLE_STRUCT->DynamicMoveType = 0; - BATTLE_STRUCT->DmgMultiplier = 1; + BATTLE_STRUCT->dynamicMoveType = 0; + BATTLE_STRUCT->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; AI_THINKING_STRUCT->funcResult = 0; @@ -1452,8 +1452,8 @@ static void BattleAICmd_if_damage_bonus(void) u8 damageVar; gDynamicBasePower = 0; - BATTLE_STRUCT->DynamicMoveType = 0; - BATTLE_STRUCT->DmgMultiplier = 1; + BATTLE_STRUCT->dynamicMoveType = 0; + BATTLE_STRUCT->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; @@ -1659,8 +1659,8 @@ static void BattleAICmd_if_can_faint(void) } gDynamicBasePower = 0; - BATTLE_STRUCT->DynamicMoveType = 0; - BATTLE_STRUCT->DmgMultiplier = 1; + BATTLE_STRUCT->dynamicMoveType = 0; + BATTLE_STRUCT->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; gCurrentMove = AI_THINKING_STRUCT->moveConsidered; @@ -1688,8 +1688,8 @@ static void BattleAICmd_if_cant_faint(void) } gDynamicBasePower = 0; - BATTLE_STRUCT->DynamicMoveType = 0; - BATTLE_STRUCT->DmgMultiplier = 1; + BATTLE_STRUCT->dynamicMoveType = 0; + BATTLE_STRUCT->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; gCurrentMove = AI_THINKING_STRUCT->moveConsidered; @@ -1843,7 +1843,7 @@ static void BattleAICmd_if_last_move_did_damage(void) if (gAIScriptPtr[2] == 0) { - if (gDisableStructs[index].DisabledMove == 0) + if (gDisableStructs[index].disabledMove == 0) { gAIScriptPtr += 7; return; @@ -1856,7 +1856,7 @@ static void BattleAICmd_if_last_move_did_damage(void) gAIScriptPtr += 7; return; } - else if (gDisableStructs[index].EncoredMove != 0) + else if (gDisableStructs[index].encoredMove != 0) { gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); return; @@ -1869,7 +1869,7 @@ static void BattleAICmd_if_encored(void) switch (gAIScriptPtr[1]) { case 0: // _08109348 - if (gDisableStructs[gActiveBank].DisabledMove == AI_THINKING_STRUCT->moveConsidered) + if (gDisableStructs[gActiveBank].disabledMove == AI_THINKING_STRUCT->moveConsidered) { gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); return; @@ -1877,7 +1877,7 @@ static void BattleAICmd_if_encored(void) gAIScriptPtr += 6; return; case 1: // _08109370 - if (gDisableStructs[gActiveBank].EncoredMove == AI_THINKING_STRUCT->moveConsidered) + if (gDisableStructs[gActiveBank].encoredMove == AI_THINKING_STRUCT->moveConsidered) { gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); return; @@ -1954,7 +1954,7 @@ static void BattleAICmd_is_first_turn(void) else index = gBankTarget; - AI_THINKING_STRUCT->funcResult = gDisableStructs[index].IsFirstTurn; + AI_THINKING_STRUCT->funcResult = gDisableStructs[index].isFirstTurn; gAIScriptPtr += 2; } @@ -1968,7 +1968,7 @@ static void BattleAICmd_get_stockpile_count(void) else index = gBankTarget; - AI_THINKING_STRUCT->funcResult = gDisableStructs[index].StockpileCounter; + AI_THINKING_STRUCT->funcResult = gDisableStructs[index].stockpileCounter; gAIScriptPtr += 2; } @@ -2025,7 +2025,7 @@ static void BattleAICmd_get_protect_count(void) else index = gBankTarget; - AI_THINKING_STRUCT->funcResult = gDisableStructs[index].ProtectUses; + AI_THINKING_STRUCT->funcResult = gDisableStructs[index].protectUses; gAIScriptPtr += 2; } @@ -2104,7 +2104,7 @@ static void BattleAICmd_if_level_compare(void) static void BattleAICmd_if_taunted(void) { - if (gDisableStructs[gBankTarget].taunt != 0) + if (gDisableStructs[gBankTarget].tauntTimer1 != 0) gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); else gAIScriptPtr += 5; @@ -2112,7 +2112,7 @@ static void BattleAICmd_if_taunted(void) static void BattleAICmd_if_not_taunted(void) { - if (gDisableStructs[gBankTarget].taunt == 0) + if (gDisableStructs[gBankTarget].tauntTimer1 == 0) gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); else gAIScriptPtr += 5; diff --git a/src/rom3.c b/src/rom3.c index 02def5dfa..282253bff 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -582,7 +582,7 @@ void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, u8 *e) +void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e) { int i; @@ -590,7 +590,7 @@ void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, u8 *e) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = c; for (i = 0; i < d; i++) - gBattleBuffersTransferData[3 + i] = *(e++); + gBattleBuffersTransferData[3 + i] = *(u8*)(e++); dp01_prepare_buffer(a, gBattleBuffersTransferData, d + 3); } @@ -615,7 +615,7 @@ void dp01_build_cmdbuf_x04_4_4_4(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void sub_800C704(u8 a, u8 b, u8 c) +void EmitSwitchInAnim(u8 a, u8 b, u8 c) { gBattleBuffersTransferData[0] = 5; gBattleBuffersTransferData[1] = b; @@ -624,7 +624,7 @@ void sub_800C704(u8 a, u8 b, u8 c) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x06_a(u8 a, u8 b) +void EmitReturnPokeToBall(u8 a, u8 b) { gBattleBuffersTransferData[0] = 6; gBattleBuffersTransferData[1] = b; @@ -640,7 +640,7 @@ void dp01_build_cmdbuf_x07_7_7_7(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x08_8_8_8(u8 a) +void EmitTrainerSlide(u8 a) { gBattleBuffersTransferData[0] = 8; gBattleBuffersTransferData[1] = 8; @@ -685,7 +685,7 @@ void dp01_build_cmdbuf_x0C_C_C_C(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x0D_a(u8 a, u8 b) +void EmitBallThrowAnim(u8 a, u8 b) { gBattleBuffersTransferData[0] = 13; gBattleBuffersTransferData[1] = b; @@ -1060,7 +1060,7 @@ void sub_800CBE0(u8 a, u8 *b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f(u8 a, u8 b, u8 c, u8 d, u8 *e) +void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) { int i; @@ -1284,7 +1284,7 @@ void EmitEffectivenessSound(u8 a, u16 b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void sub_800D074(u8 a, u16 b) +void EmitPlaySound(u8 a, u16 b) { gBattleBuffersTransferData[0] = 44; gBattleBuffersTransferData[1] = b; @@ -316,14 +316,14 @@ void GabbyAndTyBeforeInterview(void) { u8 i; - gSaveBlock1.gabbyAndTyData.mon1 = gBattleResults.Poke1Species; - gSaveBlock1.gabbyAndTyData.mon2 = gBattleResults.OpponentSpecies; - gSaveBlock1.gabbyAndTyData.lastMove = gBattleResults.LastUsedMove; + gSaveBlock1.gabbyAndTyData.mon1 = gBattleResults.poke1Species; + gSaveBlock1.gabbyAndTyData.mon2 = gBattleResults.opponentSpecies; + gSaveBlock1.gabbyAndTyData.lastMove = gBattleResults.lastUsedMove; if (gSaveBlock1.gabbyAndTyData.battleNum != 0xff) gSaveBlock1.gabbyAndTyData.battleNum ++; gSaveBlock1.gabbyAndTyData.valA_0 = gBattleResults.unk5_0; - if (gBattleResults.PlayerFaintCounter) + if (gBattleResults.playerFaintCounter) gSaveBlock1.gabbyAndTyData.valA_1 = 1; else gSaveBlock1.gabbyAndTyData.valA_1 = 0; @@ -489,14 +489,14 @@ void sub_80BDEC8(void) sub_80BEB20(); sub_80BE778(); - if (gBattleResults.CaughtPoke == 0) + if (gBattleResults.caughtPoke == 0) { sub_80BE074(); } else { sub_80BE028(); - if (sub_80BF77C(0xffff) == 0 && StringCompareWithoutExtCtrlCodes(gSpeciesNames[gBattleResults.CaughtPoke], gBattleResults.CaughtNick) != 0) + if (sub_80BF77C(0xffff) == 0 && StringCompareWithoutExtCtrlCodes(gSpeciesNames[gBattleResults.caughtPoke], gBattleResults.caughtNick) != 0) { gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_POKEMON_TODAY_CAUGHT) != 1) @@ -527,8 +527,8 @@ void sub_80BDEC8(void) pokemonToday->var12 = total; pokemonToday->ball = item; StringCopy(pokemonToday->playerName, gSaveBlock2.playerName); - StringCopy(pokemonToday->nickname, gBattleResults.CaughtNick); - pokemonToday->species = gBattleResults.CaughtPoke; + StringCopy(pokemonToday->nickname, gBattleResults.caughtNick); + pokemonToday->species = gBattleResults.caughtPoke; sub_80BE138((TVShow *)pokemonToday); pokemonToday->language = GAME_LANGUAGE; pokemonToday->language2 = sub_80BDEAC(pokemonToday->nickname); @@ -550,8 +550,8 @@ void sub_80BE028(void) worldOfMasters->var00 = TVSHOW_WORLD_OF_MASTERS; } worldOfMasters->var02++; - worldOfMasters->var04 = gBattleResults.CaughtPoke; - worldOfMasters->var08 = gBattleResults.Poke1Species; + worldOfMasters->var04 = gBattleResults.caughtPoke; + worldOfMasters->var08 = gBattleResults.poke1Species; worldOfMasters->var0a = gMapHeader.regionMapSectionId; } @@ -577,8 +577,8 @@ void sub_80BE074(void) zero = 0; pokemonTodayFailed->var00 = TVSHOW_POKEMON_TODAY_FAILED; pokemonTodayFailed->var01 = zero; - pokemonTodayFailed->species = gBattleResults.Poke1Species; - pokemonTodayFailed->species2 = gBattleResults.LastOpponentSpecies; + pokemonTodayFailed->species = gBattleResults.poke1Species; + pokemonTodayFailed->species2 = gBattleResults.lastOpponentSpecies; pokemonTodayFailed->var10 = total; pokemonTodayFailed->var11 = gBattleOutcome; pokemonTodayFailed->var12 = gMapHeader.regionMapSectionId; diff --git a/sym_ewram.txt b/sym_ewram.txt index ecf74b07c..0e8b25e28 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -113,7 +113,7 @@ gCurrentMove: @ 2024BE6 gUnknown_02024BE8: @ 2024BE8 .space 0x2 -gUnknown_02024BEA: @ 2024BEA +gRandomMove: @ 2024BEA .space 0x2 gBattleMoveDamage: @ 2024BEC |