diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-08-26 06:48:04 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-08-26 06:48:04 +0800 |
commit | db0d8e5bdbc0d043312ac78c5cec0ec53d7f45d6 (patch) | |
tree | 016845b60222e8e610377e3864d0fc86d77291db | |
parent | 1d8232b919a973b8e58d6431b0fb66ae6459f17a (diff) |
thru sub_8024398
-rw-r--r-- | asm/battle_script_commands.s | 4138 | ||||
-rw-r--r-- | include/battle.h | 48 | ||||
-rw-r--r-- | include/battle_anim.h | 8 | ||||
-rw-r--r-- | include/battle_scripts.h | 1 | ||||
-rw-r--r-- | include/constants/battle_anim.h | 1 | ||||
-rw-r--r-- | include/party_menu.h | 10 | ||||
-rw-r--r-- | include/pokemon.h | 2 | ||||
-rw-r--r-- | src/battle_gfx_sfx_util.c | 1 | ||||
-rw-r--r-- | src/battle_script_commands.c | 1196 | ||||
-rw-r--r-- | src/pokemon.c | 4 |
10 files changed, 1220 insertions, 4189 deletions
diff --git a/asm/battle_script_commands.s b/asm/battle_script_commands.s index 1d0282835..ed848ba78 100644 --- a/asm/battle_script_commands.s +++ b/asm/battle_script_commands.s @@ -5,4144 +5,6 @@ .text - thumb_func_start atk24 -atk24: @ 80223F8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0 - ldr r0, _08022534 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - beq _0802240A - b _0802258A -_0802240A: - movs r5, 0 -_0802240C: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08022538 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0802243C - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _0802243C - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - adds r0, r6, r0 - lsls r0, 16 - lsrs r6, r0, 16 -_0802243C: - adds r5, 0x1 - cmp r5, 0x5 - ble _0802240C - cmp r6, 0 - bne _08022450 - ldr r0, _0802253C @ =gBattleOutcome - ldrb r1, [r0] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0] -_08022450: - movs r6, 0 - movs r5, 0 -_08022454: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08022540 @ =gEnemyParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08022484 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _08022484 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - adds r0, r6, r0 - lsls r0, 16 - lsrs r6, r0, 16 -_08022484: - adds r5, 0x1 - cmp r5, 0x5 - ble _08022454 - ldr r2, _0802253C @ =gBattleOutcome - cmp r6, 0 - bne _08022498 - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] -_08022498: - ldrb r0, [r2] - cmp r0, 0 - bne _08022582 - ldr r0, _08022544 @ =gBattleTypeFlags - ldr r1, [r0] - movs r2, 0x2 - ands r1, r2 - mov r8, r0 - cmp r1, 0 - beq _08022582 - movs r3, 0 - movs r5, 0 - ldr r0, _08022548 @ =gBattlersCount - ldrb r1, [r0] - mov r12, r0 - ldr r7, _0802254C @ =gBattlescriptCurrInstr - cmp r3, r1 - bge _080224E4 - ldr r0, _08022550 @ =gHitMarker - movs r6, 0x80 - lsls r6, 21 - ldr r4, [r0] - adds r2, r1, 0 - ldr r1, _08022554 @ =gSpecialStatuses -_080224C8: - adds r0, r6, 0 - lsls r0, r5 - ands r0, r4 - cmp r0, 0 - beq _080224DC - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _080224DC - adds r3, 0x1 -_080224DC: - adds r1, 0x28 - adds r5, 0x2 - cmp r5, r2 - blt _080224C8 -_080224E4: - movs r2, 0 - movs r5, 0x1 - mov r0, r12 - ldrb r1, [r0] - cmp r5, r1 - bge _0802251E - ldr r0, _08022550 @ =gHitMarker - movs r4, 0x80 - lsls r4, 21 - mov r12, r4 - ldr r6, [r0] - ldr r0, _08022554 @ =gSpecialStatuses - adds r4, r1, 0 - adds r1, r0, 0 - adds r1, 0x14 -_08022502: - mov r0, r12 - lsls r0, r5 - ands r0, r6 - cmp r0, 0 - beq _08022516 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08022516 - adds r2, 0x1 -_08022516: - adds r1, 0x28 - adds r5, 0x2 - cmp r5, r4 - blt _08022502 -_0802251E: - mov r1, r8 - ldr r0, [r1] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08022558 - adds r0, r2, r3 - cmp r0, 0x1 - bgt _08022560 - b _0802257A - .align 2, 0 -_08022534: .4byte gBattleControllerExecFlags -_08022538: .4byte gPlayerParty -_0802253C: .4byte gBattleOutcome -_08022540: .4byte gEnemyParty -_08022544: .4byte gBattleTypeFlags -_08022548: .4byte gBattlersCount -_0802254C: .4byte gBattlescriptCurrInstr -_08022550: .4byte gHitMarker -_08022554: .4byte gSpecialStatuses -_08022558: - cmp r2, 0 - beq _0802257A - cmp r3, 0 - beq _0802257A -_08022560: - 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 _0802258A -_0802257A: - ldr r0, [r7] - adds r0, 0x5 - str r0, [r7] - b _0802258A -_08022582: - ldr r1, _08022594 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_0802258A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08022594: .4byte gBattlescriptCurrInstr - thumb_func_end atk24 - - thumb_func_start MoveValuesCleanUp -MoveValuesCleanUp: @ 8022598 - ldr r1, _080225C0 @ =gMoveResultFlags - movs r0, 0 - strb r0, [r1] - ldr r0, _080225C4 @ =gBattleScripting - movs r2, 0 - movs r1, 0x1 - strb r1, [r0, 0xE] - ldr r0, _080225C8 @ =gCritMultiplier - strb r1, [r0] - ldr r0, _080225CC @ =gBattleCommunication - strb r2, [r0, 0x3] - strb r2, [r0, 0x6] - ldr r2, _080225D0 @ =gHitMarker - ldr r0, [r2] - subs r1, 0x42 - ands r0, r1 - ldr r1, _080225D4 @ =0xffffbfff - ands r0, r1 - str r0, [r2] - bx lr - .align 2, 0 -_080225C0: .4byte gMoveResultFlags -_080225C4: .4byte gBattleScripting -_080225C8: .4byte gCritMultiplier -_080225CC: .4byte gBattleCommunication -_080225D0: .4byte gHitMarker -_080225D4: .4byte 0xffffbfff - thumb_func_end MoveValuesCleanUp - - thumb_func_start atk25_movevaluescleanup -atk25_movevaluescleanup: @ 80225D8 - push {lr} - bl MoveValuesCleanUp - ldr r1, _080225EC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080225EC: .4byte gBattlescriptCurrInstr - thumb_func_end atk25_movevaluescleanup - - thumb_func_start atk26_setmultihit -atk26_setmultihit: @ 80225F0 - ldr r3, _08022600 @ =gMultiHitCounter - ldr r2, _08022604 @ =gBattlescriptCurrInstr - ldr r0, [r2] - ldrb r1, [r0, 0x1] - strb r1, [r3] - adds r0, 0x2 - str r0, [r2] - bx lr - .align 2, 0 -_08022600: .4byte gMultiHitCounter -_08022604: .4byte gBattlescriptCurrInstr - thumb_func_end atk26_setmultihit - - thumb_func_start atk27_decrementmultihit -atk27_decrementmultihit: @ 8022608 - push {lr} - ldr r1, _08022624 @ =gMultiHitCounter - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - lsls r0, 24 - cmp r0, 0 - bne _0802262C - ldr r1, _08022628 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08022646 - .align 2, 0 -_08022624: .4byte gMultiHitCounter -_08022628: .4byte gBattlescriptCurrInstr -_0802262C: - ldr r3, _0802264C @ =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] -_08022646: - pop {r0} - bx r0 - .align 2, 0 -_0802264C: .4byte gBattlescriptCurrInstr - thumb_func_end atk27_decrementmultihit - - thumb_func_start atk28_goto -atk28_goto: @ 8022650 - ldr r3, _0802266C @ =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 -_0802266C: .4byte gBattlescriptCurrInstr - thumb_func_end atk28_goto - - thumb_func_start atk29_jumpifbyte -atk29_jumpifbyte: @ 8022670 - push {r4-r6,lr} - ldr r3, _080226B4 @ =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 _08022708 - lsls r0, r6, 2 - ldr r1, _080226B8 @ =_080226BC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080226B4: .4byte gBattlescriptCurrInstr -_080226B8: .4byte _080226BC - .align 2, 0 -_080226BC: - .4byte _080226D4 - .4byte _080226DC - .4byte _080226E4 - .4byte _080226EC - .4byte _080226F4 - .4byte _080226FE -_080226D4: - ldrb r0, [r5] - cmp r0, r4 - bne _08022708 - b _08022706 -_080226DC: - ldrb r0, [r5] - cmp r0, r4 - beq _08022708 - b _08022706 -_080226E4: - ldrb r0, [r5] - cmp r0, r4 - bls _08022708 - b _08022706 -_080226EC: - ldrb r0, [r5] - cmp r0, r4 - bcs _08022708 - b _08022706 -_080226F4: - ldrb r0, [r5] - ands r4, r0 - cmp r4, 0 - beq _08022708 - b _08022706 -_080226FE: - ldrb r0, [r5] - ands r4, r0 - cmp r4, 0 - bne _08022708 -_08022706: - str r2, [r3] -_08022708: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk29_jumpifbyte - - thumb_func_start atk2A_jumpifhalfword -atk2A_jumpifhalfword: @ 8022710 - push {r4-r6,lr} - ldr r3, _0802275C @ =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 _080227B0 - lsls r0, r6, 2 - ldr r1, _08022760 @ =_08022764 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802275C: .4byte gBattlescriptCurrInstr -_08022760: .4byte _08022764 - .align 2, 0 -_08022764: - .4byte _0802277C - .4byte _08022784 - .4byte _0802278C - .4byte _08022794 - .4byte _0802279C - .4byte _080227A6 -_0802277C: - ldrh r0, [r5] - cmp r0, r4 - bne _080227B0 - b _080227AE -_08022784: - ldrh r0, [r5] - cmp r0, r4 - beq _080227B0 - b _080227AE -_0802278C: - ldrh r0, [r5] - cmp r0, r4 - bls _080227B0 - b _080227AE -_08022794: - ldrh r0, [r5] - cmp r0, r4 - bcs _080227B0 - b _080227AE -_0802279C: - ldrh r0, [r5] - ands r4, r0 - cmp r4, 0 - beq _080227B0 - b _080227AE -_080227A6: - ldrh r0, [r5] - ands r4, r0 - cmp r4, 0 - bne _080227B0 -_080227AE: - str r2, [r3] -_080227B0: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk2A_jumpifhalfword - - thumb_func_start atk2B_jumpifword -atk2B_jumpifword: @ 80227B8 - push {r4-r6,lr} - ldr r3, _08022810 @ =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 _08022864 - lsls r0, r6, 2 - ldr r1, _08022814 @ =_08022818 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022810: .4byte gBattlescriptCurrInstr -_08022814: .4byte _08022818 - .align 2, 0 -_08022818: - .4byte _08022830 - .4byte _08022838 - .4byte _08022840 - .4byte _08022848 - .4byte _08022850 - .4byte _0802285A -_08022830: - ldr r0, [r5] - cmp r0, r4 - bne _08022864 - b _08022862 -_08022838: - ldr r0, [r5] - cmp r0, r4 - beq _08022864 - b _08022862 -_08022840: - ldr r0, [r5] - cmp r0, r4 - bls _08022864 - b _08022862 -_08022848: - ldr r0, [r5] - cmp r0, r4 - bcs _08022864 - b _08022862 -_08022850: - ldr r0, [r5] - ands r0, r4 - cmp r0, 0 - beq _08022864 - b _08022862 -_0802285A: - ldr r0, [r5] - ands r0, r4 - cmp r0, 0 - bne _08022864 -_08022862: - str r2, [r3] -_08022864: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk2B_jumpifword - - thumb_func_start atk2C_jumpifarrayequal -atk2C_jumpifarrayequal: @ 802286C - push {r4-r7,lr} - ldr r2, _080228C4 @ =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 _080228E4 - ldrb r0, [r5] - ldrb r7, [r4] - cmp r0, r7 - beq _080228C8 - adds r0, r3, 0 - b _080228E0 - .align 2, 0 -_080228C4: .4byte gBattlescriptCurrInstr -_080228C8: - adds r5, 0x1 - adds r4, 0x1 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r6 - bcs _080228E4 - ldrb r0, [r5] - ldrb r3, [r4] - cmp r0, r3 - beq _080228C8 - ldr r0, [r2] -_080228E0: - adds r0, 0xE - str r0, [r2] -_080228E4: - cmp r1, r6 - bne _080228EC - mov r7, r12 - str r7, [r2] -_080228EC: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk2C_jumpifarrayequal - - thumb_func_start atk2D_jumpifarraynotequal -atk2D_jumpifarraynotequal: @ 80228F4 - push {r4-r7,lr} - movs r7, 0 - ldr r3, _08022968 @ =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 _0802295E -_08022942: - ldrb r0, [r5] - ldrb r2, [r4] - cmp r0, r2 - bne _08022950 - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 -_08022950: - adds r5, 0x1 - adds r4, 0x1 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r6 - bcc _08022942 -_0802295E: - cmp r7, r6 - beq _0802296C - mov r0, r12 - b _08022970 - .align 2, 0 -_08022968: .4byte gBattlescriptCurrInstr -_0802296C: - ldr r0, [r3] - adds r0, 0xE -_08022970: - str r0, [r3] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk2D_jumpifarraynotequal - - thumb_func_start atk2E_setbyte -atk2E_setbyte: @ 8022978 - ldr r3, _0802299C @ =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 -_0802299C: .4byte gBattlescriptCurrInstr - thumb_func_end atk2E_setbyte - - thumb_func_start atk2F_addbyte -atk2F_addbyte: @ 80229A0 - ldr r3, _080229C8 @ =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 -_080229C8: .4byte gBattlescriptCurrInstr - thumb_func_end atk2F_addbyte - - thumb_func_start atk30_subbyte -atk30_subbyte: @ 80229CC - ldr r3, _080229F4 @ =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 -_080229F4: .4byte gBattlescriptCurrInstr - thumb_func_end atk30_subbyte - - thumb_func_start atk31_copyarray -atk31_copyarray: @ 80229F8 - push {r4-r6,lr} - ldr r3, _08022A48 @ =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 _08022A3C -_08022A2E: - adds r0, r6, r2 - adds r1, r5, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, r4 - blt _08022A2E -_08022A3C: - ldr r0, [r3] - adds r0, 0xA - str r0, [r3] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08022A48: .4byte gBattlescriptCurrInstr - thumb_func_end atk31_copyarray - - thumb_func_start atk32_copyarraywithindex -atk32_copyarraywithindex: @ 8022A4C - push {r4-r7,lr} - ldr r3, _08022AB4 @ =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 _08022AA8 -_08022A96: - 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 _08022A96 -_08022AA8: - ldr r0, [r3] - adds r0, 0xE - str r0, [r3] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08022AB4: .4byte gBattlescriptCurrInstr - thumb_func_end atk32_copyarraywithindex - - thumb_func_start atk33_orbyte -atk33_orbyte: @ 8022AB8 - ldr r3, _08022AE0 @ =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 -_08022AE0: .4byte gBattlescriptCurrInstr - thumb_func_end atk33_orbyte - - thumb_func_start atk34_orhalfword -atk34_orhalfword: @ 8022AE4 - push {r4,lr} - ldr r4, _08022B18 @ =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 -_08022B18: .4byte gBattlescriptCurrInstr - thumb_func_end atk34_orhalfword - - thumb_func_start atk35_orword -atk35_orword: @ 8022B1C - push {r4,lr} - ldr r4, _08022B5C @ =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 -_08022B5C: .4byte gBattlescriptCurrInstr - thumb_func_end atk35_orword - - thumb_func_start atk36_bicbyte -atk36_bicbyte: @ 8022B60 - ldr r3, _08022B88 @ =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 -_08022B88: .4byte gBattlescriptCurrInstr - thumb_func_end atk36_bicbyte - - thumb_func_start atk37_bichalfword -atk37_bichalfword: @ 8022B8C - push {r4,lr} - ldr r4, _08022BC0 @ =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 -_08022BC0: .4byte gBattlescriptCurrInstr - thumb_func_end atk37_bichalfword - - thumb_func_start atk38_bicword -atk38_bicword: @ 8022BC4 - push {r4,lr} - ldr r4, _08022C04 @ =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 -_08022C04: .4byte gBattlescriptCurrInstr - thumb_func_end atk38_bicword - - thumb_func_start atk39_pause -atk39_pause: @ 8022C08 - push {r4,r5,lr} - ldr r0, _08022C3C @ =gBattleControllerExecFlags - ldr r4, [r0] - cmp r4, 0 - bne _08022C34 - ldr r5, _08022C40 @ =gBattlescriptCurrInstr - ldr r2, [r5] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldr r3, _08022C44 @ =gPauseCounterBattle - ldrh r0, [r3] - adds r0, 0x1 - strh r0, [r3] - lsls r0, 16 - lsrs r0, 16 - cmp r0, r1 - bcc _08022C34 - strh r4, [r3] - adds r0, r2, 0x3 - str r0, [r5] -_08022C34: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08022C3C: .4byte gBattleControllerExecFlags -_08022C40: .4byte gBattlescriptCurrInstr -_08022C44: .4byte gPauseCounterBattle - thumb_func_end atk39_pause - - thumb_func_start atk3A_waitstate -atk3A_waitstate: @ 8022C48 - push {lr} - ldr r0, _08022C60 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08022C5A - ldr r1, _08022C64 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_08022C5A: - pop {r0} - bx r0 - .align 2, 0 -_08022C60: .4byte gBattleControllerExecFlags -_08022C64: .4byte gBattlescriptCurrInstr - thumb_func_end atk3A_waitstate - - thumb_func_start atk3B_healthbar_update -atk3B_healthbar_update: @ 8022C68 - push {lr} - ldr r0, _08022C7C @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r0, 0 - bne _08022C88 - ldr r0, _08022C80 @ =gActiveBattler - ldr r1, _08022C84 @ =gBattlerTarget - b _08022C8C - .align 2, 0 -_08022C7C: .4byte gBattlescriptCurrInstr -_08022C80: .4byte gActiveBattler -_08022C84: .4byte gBattlerTarget -_08022C88: - ldr r0, _08022CB0 @ =gActiveBattler - ldr r1, _08022CB4 @ =gBattlerAttacker -_08022C8C: - ldrb r1, [r1] - strb r1, [r0] - ldr r0, _08022CB8 @ =gBattleMoveDamage - ldrh r1, [r0] - movs r0, 0 - bl BtlController_EmitHealthBarUpdate - ldr r0, _08022CB0 @ =gActiveBattler - ldrb r0, [r0] - bl MarkBattlerForControllerExec - ldr r1, _08022CBC @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08022CB0: .4byte gActiveBattler -_08022CB4: .4byte gBattlerAttacker -_08022CB8: .4byte gBattleMoveDamage -_08022CBC: .4byte gBattlescriptCurrInstr - thumb_func_end atk3B_healthbar_update - - thumb_func_start atk3C_return -atk3C_return: @ 8022CC0 - push {lr} - bl BattleScriptPop - pop {r0} - bx r0 - thumb_func_end atk3C_return - - thumb_func_start atk3D_end -atk3D_end: @ 8022CCC - ldr r0, _08022CE0 @ =gMoveResultFlags - movs r1, 0 - strb r1, [r0] - ldr r0, _08022CE4 @ =gActiveBattler - strb r1, [r0] - ldr r1, _08022CE8 @ =gCurrentActionFuncId - movs r0, 0xB - strb r0, [r1] - bx lr - .align 2, 0 -_08022CE0: .4byte gMoveResultFlags -_08022CE4: .4byte gActiveBattler -_08022CE8: .4byte gCurrentActionFuncId - thumb_func_end atk3D_end - - thumb_func_start atk3E_end2 -atk3E_end2: @ 8022CEC - ldr r1, _08022CFC @ =gActiveBattler - movs r0, 0 - strb r0, [r1] - ldr r1, _08022D00 @ =gCurrentActionFuncId - movs r0, 0xB - strb r0, [r1] - bx lr - .align 2, 0 -_08022CFC: .4byte gActiveBattler -_08022D00: .4byte gCurrentActionFuncId - thumb_func_end atk3E_end2 - - thumb_func_start atk3F_end3 -atk3F_end3: @ 8022D04 - push {lr} - bl BattleScriptPop - ldr r3, _08022D38 @ =gBattleResources - ldr r0, [r3] - ldr r0, [r0, 0xC] - adds r1, r0, 0 - adds r1, 0x20 - ldrb r0, [r1] - cmp r0, 0 - beq _08022D1E - subs r0, 0x1 - strb r0, [r1] -_08022D1E: - ldr r2, _08022D3C @ =gBattleMainFunc - ldr r0, [r3] - ldr r1, [r0, 0xC] - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - str r0, [r2] - pop {r0} - bx r0 - .align 2, 0 -_08022D38: .4byte gBattleResources -_08022D3C: .4byte gBattleMainFunc - thumb_func_end atk3F_end3 - - thumb_func_start atk41_call -atk41_call: @ 8022D40 - push {r4,lr} - ldr r4, _08022D6C @ =gBattlescriptCurrInstr - ldr r0, [r4] - adds r0, 0x5 - bl BattleScriptPush - 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 -_08022D6C: .4byte gBattlescriptCurrInstr - thumb_func_end atk41_call - - thumb_func_start atk42_jumpiftype2 -atk42_jumpiftype2: @ 8022D70 - push {r4,lr} - ldr r4, _08022DB8 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - lsls r0, 24 - lsrs r0, 24 - ldr r3, [r4] - ldr r2, _08022DBC @ =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 _08022D9E - adds r0, 0x22 - ldrb r0, [r0] - cmp r2, r0 - bne _08022DC0 -_08022D9E: - 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 _08022DC4 - .align 2, 0 -_08022DB8: .4byte gBattlescriptCurrInstr -_08022DBC: .4byte gBattleMons -_08022DC0: - adds r0, r3, 0x7 - str r0, [r4] -_08022DC4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end atk42_jumpiftype2 - - thumb_func_start atk43_jumpifabilitypresent -atk43_jumpifabilitypresent: @ 8022DCC - push {r4,lr} - sub sp, 0x4 - ldr r4, _08022E04 @ =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 _08022E08 - 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 _08022E0E - .align 2, 0 -_08022E04: .4byte gBattlescriptCurrInstr -_08022E08: - ldr r0, [r4] - adds r0, 0x6 - str r0, [r4] -_08022E0E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end atk43_jumpifabilitypresent - - thumb_func_start atk44_endselectionscript -atk44_endselectionscript: @ 8022E18 - ldr r0, _08022E2C @ =gBattlerAttacker - ldrb r0, [r0] - ldr r1, _08022E30 @ =gBattleStruct - ldr r1, [r1] - adds r0, r1 - adds r0, 0x54 - movs r1, 0x1 - strb r1, [r0] - bx lr - .align 2, 0 -_08022E2C: .4byte gBattlerAttacker -_08022E30: .4byte gBattleStruct - thumb_func_end atk44_endselectionscript - - thumb_func_start atk45_playanimation -atk45_playanimation: @ 8022E34 - push {r4-r6,lr} - ldr r4, _08022E84 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r6, _08022E88 @ =gActiveBattler - strb r0, [r6] - ldr r2, [r4] - 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 r5, [r2, 0x2] - adds r0, r5, 0 - cmp r0, 0x1 - beq _08022E6E - cmp r0, 0x11 - beq _08022E6E - cmp r0, 0x2 - beq _08022E6E - cmp r0, 0x19 - bne _08022E8C -_08022E6E: - ldr r4, _08022E84 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r1, [r0, 0x2] - ldrh r2, [r3] - movs r0, 0 - bl BtlController_EmitBattleAnimation - ldr r0, _08022E88 @ =gActiveBattler - ldrb r0, [r0] - b _08022EE4 - .align 2, 0 -_08022E84: .4byte gBattlescriptCurrInstr -_08022E88: .4byte gActiveBattler -_08022E8C: - ldr r0, _08022EA4 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08022EAC - adds r0, r2, 0x7 - bl BattleScriptPush - ldr r0, _08022EA8 @ =BattleScript_Pausex20 - b _08022EEC - .align 2, 0 -_08022EA4: .4byte gHitMarker -_08022EA8: .4byte BattleScript_Pausex20 -_08022EAC: - adds r0, r5, 0 - subs r0, 0xA - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _08022ED8 - ldr r1, _08022ED0 @ =gStatuses3 - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08022ED4 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - beq _08022ED8 - adds r0, r2, 0x7 - b _08022EEC - .align 2, 0 -_08022ED0: .4byte gStatuses3 -_08022ED4: .4byte 0x000400c0 -_08022ED8: - ldrb r1, [r2, 0x2] - ldrh r2, [r3] - movs r0, 0 - bl BtlController_EmitBattleAnimation - ldrb r0, [r6] -_08022EE4: - bl MarkBattlerForControllerExec - ldr r0, [r4] - adds r0, 0x7 -_08022EEC: - str r0, [r4] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end atk45_playanimation - - thumb_func_start atk46_playanimation2 -atk46_playanimation2: @ 8022EF4 - push {r4-r7,lr} - ldr r6, _08022F5C @ =gBattlescriptCurrInstr - ldr r0, [r6] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r7, _08022F60 @ =gActiveBattler - 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 _08022F3E - cmp r0, 0x11 - beq _08022F3E - cmp r0, 0x2 - bne _08022F64 -_08022F3E: - ldrb r1, [r3] - ldrh r2, [r4] - movs r0, 0 - bl BtlController_EmitBattleAnimation - ldr r0, _08022F60 @ =gActiveBattler - ldrb r0, [r0] - bl MarkBattlerForControllerExec - ldr r1, _08022F5C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0xA - str r0, [r1] - b _08022FBA - .align 2, 0 -_08022F5C: .4byte gBattlescriptCurrInstr -_08022F60: .4byte gActiveBattler -_08022F64: - ldr r0, _08022F74 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08022F78 - adds r0, r2, 0 - b _08022FB6 - .align 2, 0 -_08022F74: .4byte gHitMarker -_08022F78: - adds r0, r5, 0 - subs r0, 0xA - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _08022FA4 - ldr r1, _08022F9C @ =gStatuses3 - ldrb r0, [r7] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08022FA0 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - beq _08022FA4 - adds r0, r2, 0 - b _08022FB6 - .align 2, 0 -_08022F9C: .4byte gStatuses3 -_08022FA0: .4byte 0x000400c0 -_08022FA4: - ldrb r1, [r3] - ldrh r2, [r4] - movs r0, 0 - bl BtlController_EmitBattleAnimation - ldrb r0, [r7] - bl MarkBattlerForControllerExec - ldr r0, [r6] -_08022FB6: - adds r0, 0xA - str r0, [r6] -_08022FBA: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end atk46_playanimation2 - - thumb_func_start atk47_setgraphicalstatchangevalues -atk47_setgraphicalstatchangevalues: @ 8022FC0 - push {r4,lr} - movs r3, 0 - ldr r1, _08022FDC @ =gBattleScripting - ldrb r0, [r1, 0x1A] - movs r2, 0xF0 - ands r2, r0 - adds r4, r1, 0 - cmp r2, 0x20 - beq _08022FEE - cmp r2, 0x20 - bgt _08022FE0 - cmp r2, 0x10 - beq _08022FEA - b _08022FF8 - .align 2, 0 -_08022FDC: .4byte gBattleScripting -_08022FE0: - cmp r2, 0x90 - beq _08022FF2 - cmp r2, 0xA0 - beq _08022FF6 - b _08022FF8 -_08022FEA: - movs r3, 0xF - b _08022FF8 -_08022FEE: - movs r3, 0x27 - b _08022FF8 -_08022FF2: - movs r3, 0x16 - b _08022FF8 -_08022FF6: - movs r3, 0x2E -_08022FF8: - ldrb r1, [r4, 0x1A] - movs r0, 0xF - ands r0, r1 - adds r0, r3, r0 - subs r0, 0x1 - movs r1, 0 - strb r0, [r4, 0x10] - strb r1, [r4, 0x11] - ldr r1, _08023018 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08023018: .4byte gBattlescriptCurrInstr - thumb_func_end atk47_setgraphicalstatchangevalues - - thumb_func_start atk48_playstatchangeanimation -atk48_playstatchangeanimation: @ 802301C - 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, _08023090 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - str r3, [sp] - bl GetBattlerForBattleScript - ldr r2, _08023094 @ =gActiveBattler - 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 _08023130 - movs r0, 0x2 - ands r0, r1 - movs r1, 0x15 - cmp r0, 0 - beq _0802305C - movs r1, 0x2D -_0802305C: - cmp r4, 0 - beq _08023104 - movs r0, 0x1 - mov r10, r0 - ldr r0, _08023098 @ =gUnknown_2023BFC - mov r9, r0 - lsls r5, r1, 16 -_0802306A: - adds r0, r4, 0 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - beq _080230F6 - ldr r0, _08023090 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r1, [r0, 0x3] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0802309C - ldr r0, _08023094 @ =gActiveBattler - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r7, r0 - b _080230E4 - .align 2, 0 -_08023090: .4byte gBattlescriptCurrInstr -_08023094: .4byte gActiveBattler -_08023098: .4byte gUnknown_2023BFC -_0802309C: - ldr r6, _08023120 @ =gActiveBattler - ldrb r0, [r6] - str r3, [sp] - bl GetBattlerPosition - mov r1, r10 - ands r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08023124 @ =gSideTimers - adds r0, r1 - ldrb r0, [r0, 0x4] - ldr r3, [sp] - cmp r0, 0 - bne _080230F6 - ldr r0, _08023128 @ =gBattleMons - ldrb r2, [r6] - movs r1, 0x58 - muls r2, r1 - adds r0, r2, r0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1D - beq _080230F6 - cmp r0, 0x49 - beq _080230F6 - cmp r0, 0x33 - bne _080230DA - cmp r7, 0x6 - beq _080230F6 -_080230DA: - cmp r0, 0x34 - bne _080230E2 - cmp r7, 0x1 - beq _080230F6 -_080230E2: - adds r0, r7, r2 -_080230E4: - add r0, r9 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - ble _080230F6 - lsrs r0, r5, 16 - mov r8, r0 - adds r3, 0x1 -_080230F6: - lsrs r4, 1 - movs r1, 0x80 - lsls r1, 9 - adds r5, r1 - adds r7, 0x1 - cmp r4, 0 - bne _0802306A -_08023104: - ldr r0, _0802312C @ =gBattlescriptCurrInstr - mov r9, r0 - cmp r3, 0x1 - ble _08023192 - ldr r0, [r0] - ldrb r1, [r0, 0x3] - movs r0, 0x2 - ands r0, r1 - movs r1, 0x39 - mov r8, r1 - cmp r0, 0 - beq _08023192 - movs r0, 0x3A - b _08023190 - .align 2, 0 -_08023120: .4byte gActiveBattler -_08023124: .4byte gSideTimers -_08023128: .4byte gBattleMons -_0802312C: .4byte gBattlescriptCurrInstr -_08023130: - movs r0, 0x2 - ands r0, r1 - movs r1, 0xE - cmp r0, 0 - beq _0802313C - movs r1, 0x26 -_0802313C: - mov r9, r5 - cmp r4, 0 - beq _08023178 - ldr r6, _080231AC @ =gUnknown_2023BFC - adds r5, r2, 0 - lsls r2, r1, 16 -_08023148: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0802316A - 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 _0802316A - lsrs r1, r2, 16 - mov r8, r1 - adds r3, 0x1 -_0802316A: - lsrs r4, 1 - movs r0, 0x80 - lsls r0, 9 - adds r2, r0 - adds r7, 0x1 - cmp r4, 0 - bne _08023148 -_08023178: - cmp r3, 0x1 - ble _08023192 - 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 _08023192 - movs r0, 0x38 -_08023190: - mov r8, r0 -_08023192: - mov r1, r9 - ldr r2, [r1] - ldrb r1, [r2, 0x3] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080231B0 - cmp r3, 0x1 - bgt _080231B0 - adds r0, r2, 0x4 - mov r1, r9 - b _080231FE - .align 2, 0 -_080231AC: .4byte gUnknown_2023BFC -_080231B0: - cmp r3, 0 - beq _080231F8 - ldr r4, _080231EC @ =gBattleScripting - ldrb r0, [r4, 0x1B] - cmp r0, 0 - bne _080231F8 - movs r0, 0 - movs r1, 0x1 - mov r2, r8 - str r3, [sp] - bl BtlController_EmitBattleAnimation - ldr r0, _080231F0 @ =gActiveBattler - ldrb r0, [r0] - bl MarkBattlerForControllerExec - ldr r0, _080231F4 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r1, [r0, 0x3] - movs r0, 0x4 - ands r0, r1 - ldr r3, [sp] - cmp r0, 0 - beq _080231E8 - cmp r3, 0x1 - ble _080231E8 - movs r0, 0x1 - strb r0, [r4, 0x1B] -_080231E8: - ldr r1, _080231F4 @ =gBattlescriptCurrInstr - b _080231FA - .align 2, 0 -_080231EC: .4byte gBattleScripting -_080231F0: .4byte gActiveBattler -_080231F4: .4byte gBattlescriptCurrInstr -_080231F8: - mov r1, r9 -_080231FA: - ldr r0, [r1] - adds r0, 0x4 -_080231FE: - 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 atk49_moveend -atk49_moveend: @ 8023210 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - movs r0, 0 - mov r10, r0 - ldr r2, _08023260 @ =gChosenMove - ldrh r1, [r2] - ldr r0, _08023264 @ =0x0000ffff - movs r3, 0 - str r3, [sp, 0x18] - cmp r1, r0 - beq _08023232 - ldrh r2, [r2] - str r2, [sp, 0x18] -_08023232: - ldr r0, _08023268 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r4, [r0, 0x1] - str r4, [sp, 0x10] - ldrb r0, [r0, 0x2] - str r0, [sp, 0x14] - ldr r1, _0802326C @ =gBattleMons - ldr r0, _08023270 @ =gBattlerAttacker - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _08023278 - ldr r1, _08023274 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x7] - b _08023282 - .align 2, 0 -_08023260: .4byte gChosenMove -_08023264: .4byte 0x0000ffff -_08023268: .4byte gBattlescriptCurrInstr -_0802326C: .4byte gBattleMons -_08023270: .4byte gBattlerAttacker -_08023274: .4byte gEnigmaBerries -_08023278: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r0, 24 -_08023282: - str r0, [sp, 0x8] - ldr r1, _080232A4 @ =gBattleStruct - ldr r0, _080232A8 @ =gBattlerAttacker - ldrb r0, [r0] - lsls r0, 1 - adds r0, 0xC8 - ldr r1, [r1] - adds r0, r1, r0 - str r0, [sp, 0xC] - ldrb r0, [r1, 0x13] - cmp r0, 0 - beq _08023334 - movs r5, 0x3F - ands r5, r0 - str r5, [sp, 0x4] - b _08023346 - .align 2, 0 -_080232A4: .4byte gBattleStruct -_080232A8: .4byte gBattlerAttacker -_080232AC: - ldr r4, _080232C0 @ =gActiveBattler - strb r2, [r4] - movs r0, 0 - movs r1, 0x1 - bl BtlController_EmitSpriteInvisibility - ldrb r0, [r4] - bl MarkBattlerForControllerExec - b _0802379E - .align 2, 0 -_080232C0: .4byte gActiveBattler -_080232C4: - ldr r4, _080232E8 @ =gActiveBattler - strb r2, [r4] - movs r0, 0 - movs r1, 0 - bl BtlController_EmitSpriteInvisibility - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldrb r1, [r6] - lsls r1, 2 - adds r1, r5 - ldr r0, [r1] - ldr r2, _080232EC @ =0xfffbff3f - ands r0, r2 - str r0, [r1] - b _0802379E - .align 2, 0 -_080232E8: .4byte gActiveBattler -_080232EC: .4byte 0xfffbff3f -_080232F0: - strb r2, [r7] - ldr r0, [r5] - orrs r0, r6 - str r0, [r5] - ldr r0, _08023324 @ =gBattleScripting - strb r4, [r0, 0x14] - bl MoveValuesCleanUp - ldr r2, _08023328 @ =gBattleScriptsForMoveEffects - mov r0, r8 - ldrh r1, [r0] - 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 BattleScriptPush - ldr r1, _0802332C @ =gBattlescriptCurrInstr - ldr r0, _08023330 @ =BattleScript_FlushMessageBox - bl _08023BFC - .align 2, 0 -_08023324: .4byte gBattleScripting -_08023328: .4byte gBattleScriptsForMoveEffects -_0802332C: .4byte gBattlescriptCurrInstr -_08023330: .4byte BattleScript_FlushMessageBox -_08023334: - ldr r2, _0802334C @ =gBattleMoves - ldr r0, _08023350 @ =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] -_08023346: - ldr r1, _08023354 @ =gBattleScripting - mov r12, r1 - b _08023362 - .align 2, 0 -_0802334C: .4byte gBattleMoves -_08023350: .4byte gCurrentMove -_08023354: .4byte gBattleScripting -_08023358: - mov r2, r10 - cmp r2, 0 - beq _08023362 - bl _08023BE8 -_08023362: - mov r3, r12 - ldrb r0, [r3, 0x14] - cmp r0, 0x11 - bls _0802336E - bl _08023BB4 -_0802336E: - lsls r0, 2 - ldr r1, _08023378 @ =_0802337C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08023378: .4byte _0802337C - .align 2, 0 -_0802337C: - .4byte _080233C4 - .4byte _080234A0 - .4byte _0802355C - .4byte _08023580 - .4byte _08023598 - .4byte _080235C0 - .4byte _080235E4 - .4byte _0802368C - .4byte _08023702 - .4byte _08023738 - .4byte _080237D8 - .4byte _080236CC - .4byte _080236EC - .4byte _0802381C - .4byte _08023860 - .4byte _08023A40 - .4byte _08023B28 - .4byte _08023BB4 -_080233C4: - ldr r6, _0802347C @ =gBattleMons - ldr r5, _08023480 @ =gBattlerTarget - ldrb r3, [r5] - movs r7, 0x58 - adds r2, r3, 0 - muls r2, r7 - adds r0, r6, 0 - adds r0, 0x50 - adds r0, r2, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 16 - ands r0, r1 - cmp r0, 0 - bne _080233E4 - b _080237C8 -_080233E4: - adds r0, r2, r6 - ldrh r0, [r0, 0x28] - cmp r0, 0 - bne _080233EE - b _080237C8 -_080233EE: - ldr r0, _08023484 @ =gBattlerAttacker - ldrb r1, [r0] - cmp r1, r3 - bne _080233F8 - b _080237C8 -_080233F8: - adds r0, r1, 0 - bl GetBattlerSide - adds r4, r0, 0 - ldrb r0, [r5] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _08023410 - b _080237C8 -_08023410: - ldr r0, _08023488 @ =gMoveResultFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _0802341E - b _080237C8 -_0802341E: - ldr r2, _0802348C @ =gSpecialStatuses - ldrb r3, [r5] - lsls r0, r3, 2 - adds r0, r3 - lsls r1, r0, 2 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - bne _08023442 - adds r0, r2, 0 - adds r0, 0xC - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, 0 - bne _08023442 - b _080237C8 -_08023442: - ldr r2, _08023490 @ =gBattleMoves - ldr r0, _08023494 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0 - bne _08023458 - b _080237C8 -_08023458: - adds r0, r3, 0 - muls r0, r7 - adds r1, r0, r6 - ldrb r2, [r1, 0x19] - movs r0, 0x19 - ldrsb r0, [r1, r0] - cmp r0, 0xB - ble _0802346A - b _080237C8 -_0802346A: - adds r0, r2, 0x1 - strb r0, [r1, 0x19] - bl BattleScriptPushCursor - ldr r1, _08023498 @ =gBattlescriptCurrInstr - ldr r0, _0802349C @ =BattleScript_RageIsBuilding - str r0, [r1] - b _080236FC - .align 2, 0 -_0802347C: .4byte gBattleMons -_08023480: .4byte gBattlerTarget -_08023484: .4byte gBattlerAttacker -_08023488: .4byte gMoveResultFlags -_0802348C: .4byte gSpecialStatuses -_08023490: .4byte gBattleMoves -_08023494: .4byte gCurrentMove -_08023498: .4byte gBattlescriptCurrInstr -_0802349C: .4byte BattleScript_RageIsBuilding -_080234A0: - ldr r4, _0802353C @ =gBattleMons - ldr r6, _08023540 @ =gBattlerTarget - ldrb r2, [r6] - movs r5, 0x58 - mov r12, r5 - mov r1, r12 - muls r1, r2 - adds r7, r4, 0 - adds r7, 0x4C - adds r5, r1, r7 - ldr r3, [r5] - movs r0, 0x20 - ands r0, r3 - cmp r0, 0 - bne _080234C0 - b _080237C8 -_080234C0: - adds r0, r1, r4 - ldrh r0, [r0, 0x28] - cmp r0, 0 - bne _080234CA - b _080237C8 -_080234CA: - ldr r0, _08023544 @ =gBattlerAttacker - ldrb r0, [r0] - cmp r0, r2 - bne _080234D4 - b _080237C8 -_080234D4: - ldr r0, _08023548 @ =gSpecialStatuses - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 2 - adds r0, 0xC - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - bne _080234E8 - b _080237C8 -_080234E8: - ldr r0, _0802354C @ =gMoveResultFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _080234F6 - b _080237C8 -_080234F6: - ldr r0, [sp, 0x4] - cmp r0, 0xA - beq _080234FE - b _080237C8 -_080234FE: - movs r0, 0x21 - negs r0, r0 - ands r3, r0 - str r3, [r5] - ldr r4, _08023550 @ =gActiveBattler - ldrb r0, [r6] - strb r0, [r4] - ldrb r0, [r6] - 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 BtlController_EmitSetMonData - ldrb r0, [r4] - bl MarkBattlerForControllerExec - bl BattleScriptPushCursor - ldr r1, _08023554 @ =gBattlescriptCurrInstr - ldr r0, _08023558 @ =BattleScript_DefrostedViaFireMove - str r0, [r1] - movs r2, 0x1 - mov r10, r2 - b _080237C8 - .align 2, 0 -_0802353C: .4byte gBattleMons -_08023540: .4byte gBattlerTarget -_08023544: .4byte gBattlerAttacker -_08023548: .4byte gSpecialStatuses -_0802354C: .4byte gMoveResultFlags -_08023550: .4byte gActiveBattler -_08023554: .4byte gBattlescriptCurrInstr -_08023558: .4byte BattleScript_DefrostedViaFireMove -_0802355C: - ldr r0, _0802357C @ =gBattlerTarget - 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 - bne _08023576 - b _080237C8 -_08023576: - movs r3, 0x1 - mov r10, r3 - b _080237C8 - .align 2, 0 -_0802357C: .4byte gBattlerTarget -_08023580: - ldr r0, _08023594 @ =gBattlerTarget - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - b _080236F6 - .align 2, 0 -_08023594: .4byte gBattlerTarget -_08023598: - 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 - bne _080235B0 - b _080237C8 -_080235B0: - movs r5, 0x1 - mov r10, r5 - ldr r0, _080235BC @ =gBattleScripting - mov r12, r0 - b _08023BB4 - .align 2, 0 -_080235BC: .4byte gBattleScripting -_080235C0: - ldr r0, _080235E0 @ =gBattlerAttacker - 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 _080235DA - b _080237C8 -_080235DA: - movs r1, 0x1 - mov r10, r1 - b _080237C8 - .align 2, 0 -_080235E0: .4byte gBattlerAttacker -_080235E4: - ldr r0, _08023674 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 18 - ands r0, r1 - cmp r0, 0 - beq _08023628 - ldr r2, [sp, 0x8] - cmp r2, 0x1D - bne _08023628 - ldr r0, _08023678 @ =gChosenMove - ldrh r2, [r0] - adds r3, r0, 0 - cmp r2, 0xA5 - beq _08023628 - ldr r4, [sp, 0xC] - ldrh r1, [r4] - cmp r1, 0 - beq _08023610 - ldr r0, _0802367C @ =0x0000ffff - cmp r1, r0 - bne _08023628 -_08023610: - cmp r2, 0xE2 - bne _08023622 - ldr r0, _08023680 @ =gMoveResultFlags - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08023622 - b _08023AFA -_08023622: - ldrh r0, [r3] - ldr r1, [sp, 0xC] - strh r0, [r1] -_08023628: - movs r4, 0 - ldr r2, _08023684 @ =gBattleMons - ldr r3, _08023688 @ =gBattlerAttacker - 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 _08023660 - mov r6, r9 - movs r3, 0x58 - adds r5, r1, 0 -_0802364A: - adds r4, 0x1 - cmp r4, 0x3 - bgt _08023660 - lsls r0, r4, 1 - ldrb r1, [r6] - muls r1, r3 - adds r0, r1 - adds r0, r2 - ldrh r0, [r0] - cmp r0, r5 - bne _0802364A -_08023660: - cmp r4, 0x4 - bne _0802366A - movs r0, 0 - ldr r1, [sp, 0xC] - strh r0, [r1] -_0802366A: - mov r2, r12 - ldrb r0, [r2, 0x14] - adds r0, 0x1 - strb r0, [r2, 0x14] - b _08023BB4 - .align 2, 0 -_08023674: .4byte gHitMarker -_08023678: .4byte gChosenMove -_0802367C: .4byte 0x0000ffff -_08023680: .4byte gMoveResultFlags -_08023684: .4byte gBattleMons -_08023688: .4byte gBattlerAttacker -_0802368C: - movs r4, 0 - ldr r0, _080236C0 @ =gBattlersCount - ldrb r3, [r0] - cmp r4, r3 - blt _08023698 - b _08023846 -_08023698: - ldr r7, _080236C4 @ =gBattleStruct - movs r6, 0 - movs r3, 0xD0 - adds r5, r0, 0 - ldr r2, _080236C8 @ =gBattleMons -_080236A2: - ldr r0, [r7] - adds r0, r3 - ldrh r1, [r0] - cmp r1, 0 - beq _080236B0 - strh r1, [r2, 0x2E] - strh r6, [r0] -_080236B0: - adds r3, 0x2 - adds r2, 0x58 - adds r4, 0x1 - ldrb r0, [r5] - cmp r4, r0 - blt _080236A2 - b _08023846 - .align 2, 0 -_080236C0: .4byte gBattlersCount -_080236C4: .4byte gBattleStruct -_080236C8: .4byte gBattleMons -_080236CC: - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ItemBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _080237C8 - movs r2, 0x1 - mov r10, r2 - ldr r3, _080236E8 @ =gBattleScripting - mov r12, r3 - b _08023BB4 - .align 2, 0 -_080236E8: .4byte gBattleScripting -_080236EC: - movs r0, 0x4 - movs r1, 0 - movs r2, 0 - bl ItemBattleEffects -_080236F6: - lsls r0, 24 - cmp r0, 0 - beq _080237C8 -_080236FC: - movs r4, 0x1 - mov r10, r4 - b _080237C8 -_08023702: - ldr r1, _08023728 @ =gStatuses3 - ldr r0, _0802372C @ =gBattlerAttacker - ldrb r2, [r0] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08023730 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _08023718 - b _08023AFA -_08023718: - ldr r0, _08023734 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08023726 - b _080232AC -_08023726: - b _08023AFA - .align 2, 0 -_08023728: .4byte gStatuses3 -_0802372C: .4byte gBattlerAttacker -_08023730: .4byte 0x000400c0 -_08023734: .4byte gHitMarker -_08023738: - ldr r0, _080237A8 @ =gMoveResultFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _08023764 - ldr r1, _080237AC @ =gStatuses3 - ldr r0, _080237B0 @ =gBattlerAttacker - ldrb r2, [r0] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080237B4 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - beq _08023764 - adds r0, r2, 0 - bl WasUnableToUseMove - lsls r0, 24 - cmp r0, 0 - beq _080237C8 -_08023764: - ldr r4, _080237B8 @ =gActiveBattler - ldr r5, _080237B0 @ =gBattlerAttacker - ldrb r0, [r5] - strb r0, [r4] - movs r0, 0 - movs r1, 0 - bl BtlController_EmitSpriteInvisibility - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r0, _080237AC @ =gStatuses3 - ldrb r2, [r5] - lsls r2, 2 - adds r2, r0 - ldr r0, [r2] - ldr r1, _080237BC @ =0xfffbff3f - ands r0, r1 - str r0, [r2] - ldr r2, _080237C0 @ =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] -_0802379E: - ldr r1, _080237C4 @ =gBattleScripting - ldrb r0, [r1, 0x14] - adds r0, 0x1 - strb r0, [r1, 0x14] - b _08023BFE - .align 2, 0 -_080237A8: .4byte gMoveResultFlags -_080237AC: .4byte gStatuses3 -_080237B0: .4byte gBattlerAttacker -_080237B4: .4byte 0x000400c0 -_080237B8: .4byte gActiveBattler -_080237BC: .4byte 0xfffbff3f -_080237C0: .4byte gSpecialStatuses -_080237C4: .4byte gBattleScripting -_080237C8: - ldr r1, _080237D4 @ =gBattleScripting - ldrb r0, [r1, 0x14] - adds r0, 0x1 - strb r0, [r1, 0x14] - mov r12, r1 - b _08023BB4 - .align 2, 0 -_080237D4: .4byte gBattleScripting -_080237D8: - ldr r0, _08023808 @ =gSpecialStatuses - ldr r6, _0802380C @ =gBattlerTarget - ldrb r2, [r6] - lsls r3, r2, 2 - adds r1, r3, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 29 - cmp r0, 0 - blt _08023846 - ldr r0, _08023810 @ =gBattlersCount - ldrb r0, [r0] - cmp r2, r0 - bcs _08023846 - ldr r5, _08023814 @ =gStatuses3 - adds r0, r3, r5 - ldr r0, [r0] - ldr r1, _08023818 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _08023806 - b _080232C4 -_08023806: - b _08023846 - .align 2, 0 -_08023808: .4byte gSpecialStatuses -_0802380C: .4byte gBattlerTarget -_08023810: .4byte gBattlersCount -_08023814: .4byte gStatuses3 -_08023818: .4byte 0x000400c0 -_0802381C: - movs r4, 0 - ldr r0, _08023850 @ =gBattlersCount - ldrb r2, [r0] - cmp r4, r2 - bge _08023846 - ldr r2, _08023854 @ =gDisableStructs - ldr r5, _08023858 @ =0xfeffffff - adds r3, r0, 0 - ldr r1, _0802385C @ =gUnknown_2023C34 -_0802382E: - ldrb r0, [r2, 0xA] - cmp r0, 0 - bne _0802383A - ldr r0, [r1] - ands r0, r5 - str r0, [r1] -_0802383A: - adds r2, 0x1C - adds r1, 0x58 - adds r4, 0x1 - ldrb r0, [r3] - cmp r4, r0 - blt _0802382E -_08023846: - mov r1, r12 - ldrb r0, [r1, 0x14] - adds r0, 0x1 - strb r0, [r1, 0x14] - b _08023BB4 - .align 2, 0 -_08023850: .4byte gBattlersCount -_08023854: .4byte gDisableStructs -_08023858: .4byte 0xfeffffff -_0802385C: .4byte gUnknown_2023C34 -_08023860: - ldr r1, _08023914 @ =gHitMarker - ldr r3, [r1] - movs r0, 0x80 - lsls r0, 5 - ands r0, r3 - ldr r2, _08023918 @ =gBattlerAttacker - mov r9, r2 - adds r5, r1, 0 - cmp r0, 0 - beq _0802388A - ldr r0, _0802391C @ =gActiveBattler - ldrb r2, [r2] - strb r2, [r0] - ldr r1, _08023920 @ =gBattlerTarget - ldrb r0, [r1] - mov r4, r9 - strb r0, [r4] - strb r2, [r1] - ldr r0, _08023924 @ =0xffffefff - ands r3, r0 - str r3, [r5] -_0802388A: - ldr r0, [r5] - movs r1, 0x80 - lsls r1, 3 - ands r0, r1 - cmp r0, 0 - beq _080238A6 - ldr r0, _08023928 @ =gLastPrintedMoves - mov r2, r9 - ldrb r1, [r2] - lsls r1, 1 - adds r1, r0 - ldr r0, _0802392C @ =gChosenMove - ldrh r0, [r0] - strh r0, [r1] -_080238A6: - ldr r0, _08023930 @ =gAbsentBattlerFlags - ldrb r1, [r0] - ldr r2, _08023934 @ =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 _080238C0 - b _08023A2C -_080238C0: - ldr r0, _08023938 @ =gBattleStruct - ldr r1, [r0] - adds r1, 0x91 - ldrb r1, [r1] - ands r1, r3 - adds r7, r0, 0 - cmp r1, 0 - beq _080238D2 - b _08023A2C -_080238D2: - ldr r0, _0802393C @ =gBattleMoves - ldr r2, [sp, 0x18] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r1, [r1] - mov r8, r0 - cmp r1, 0x7F - bne _080238E8 - b _08023A2C -_080238E8: - ldr r0, [r5] - movs r1, 0x80 - lsls r1, 18 - ands r0, r1 - cmp r0, 0 - beq _0802394C - ldr r0, _08023940 @ =gLastMoves - lsls r1, r4, 1 - adds r1, r0 - ldr r0, _0802392C @ =gChosenMove - ldrh r0, [r0] - strh r0, [r1] - ldr r0, _08023944 @ =gLastResultingMoves - mov r3, r9 - ldrb r1, [r3] - lsls r1, 1 - adds r1, r0 - ldr r0, _08023948 @ =gCurrentMove - ldrh r0, [r0] - strh r0, [r1] - b _08023966 - .align 2, 0 -_08023914: .4byte gHitMarker -_08023918: .4byte gBattlerAttacker -_0802391C: .4byte gActiveBattler -_08023920: .4byte gBattlerTarget -_08023924: .4byte 0xffffefff -_08023928: .4byte gLastPrintedMoves -_0802392C: .4byte gChosenMove -_08023930: .4byte gAbsentBattlerFlags -_08023934: .4byte gBitTable -_08023938: .4byte gBattleStruct -_0802393C: .4byte gBattleMoves -_08023940: .4byte gLastMoves -_08023944: .4byte gLastResultingMoves -_08023948: .4byte gCurrentMove -_0802394C: - ldr r1, _080239B4 @ =gLastMoves - lsls r0, r4, 1 - adds r0, r1 - ldr r1, _080239B8 @ =0x0000ffff - strh r1, [r0] - ldr r1, _080239BC @ =gLastResultingMoves - mov r4, r9 - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - movs r1, 0x1 - negs r1, r1 - strh r1, [r0] -_08023966: - ldr r2, _080239C0 @ =gBattlerTarget - 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 _08023984 - ldr r0, _080239C4 @ =gLastHitBy - adds r0, r3, r0 - mov r3, r9 - ldrb r1, [r3] - strb r1, [r0] -_08023984: - ldr r0, [r5] - movs r1, 0x80 - lsls r1, 18 - ands r0, r1 - cmp r0, 0 - beq _08023A20 - ldr r0, _080239C8 @ =gMoveResultFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _08023A20 - ldr r0, _080239CC @ =gChosenMove - ldrh r3, [r0] - ldr r0, _080239B8 @ =0x0000ffff - cmp r3, r0 - bne _080239D4 - ldr r1, _080239D0 @ =gLastLandedMoves - ldrb r0, [r2] - lsls r0, 1 - adds r0, r1 - strh r3, [r0] - b _08023A2C - .align 2, 0 -_080239B4: .4byte gLastMoves -_080239B8: .4byte 0x0000ffff -_080239BC: .4byte gLastResultingMoves -_080239C0: .4byte gBattlerTarget -_080239C4: .4byte gLastHitBy -_080239C8: .4byte gMoveResultFlags -_080239CC: .4byte gChosenMove -_080239D0: .4byte gLastLandedMoves -_080239D4: - ldr r0, _080239F8 @ =gLastLandedMoves - ldrb r1, [r2] - lsls r1, 1 - adds r1, r0 - ldr r4, _080239FC @ =gCurrentMove - ldrh r0, [r4] - strh r0, [r1] - ldr r0, [r7] - ldrb r3, [r0, 0x13] - cmp r3, 0 - beq _08023A04 - ldr r0, _08023A00 @ =gLastHitByType - ldrb r1, [r2] - lsls r1, 1 - adds r1, r0 - movs r0, 0x3F - ands r0, r3 - b _08023A2A - .align 2, 0 -_080239F8: .4byte gLastLandedMoves -_080239FC: .4byte gCurrentMove -_08023A00: .4byte gLastHitByType -_08023A04: - ldr r0, _08023A1C @ =gLastHitByType - ldrb r2, [r2] - 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 _08023A2C - .align 2, 0 -_08023A1C: .4byte gLastHitByType -_08023A20: - ldr r0, _08023A38 @ =gLastLandedMoves - ldrb r1, [r2] - lsls r1, 1 - adds r1, r0 - ldr r0, _08023A3C @ =0x0000ffff -_08023A2A: - strh r0, [r1] -_08023A2C: - mov r4, r12 - ldrb r0, [r4, 0x14] - adds r0, 0x1 - strb r0, [r4, 0x14] - b _08023BB4 - .align 2, 0 -_08023A38: .4byte gLastLandedMoves -_08023A3C: .4byte 0x0000ffff -_08023A40: - ldr r0, _08023B04 @ =gAbsentBattlerFlags - ldrb r1, [r0] - ldr r7, _08023B08 @ =gBitTable - ldr r2, _08023B0C @ =gBattlerAttacker - ldrb r3, [r2] - lsls r0, r3, 2 - adds r0, r7 - ldr r4, [r0] - ands r1, r4 - mov r9, r2 - cmp r1, 0 - bne _08023AFA - ldr r6, _08023B10 @ =gBattleStruct - ldr r5, [r6] - adds r0, r5, 0 - adds r0, 0x91 - ldrb r0, [r0] - ands r0, r4 - cmp r0, 0 - bne _08023AFA - ldr r1, _08023B14 @ =gBattleMoves - ldr r2, [sp, 0x18] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x8] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08023AFA - ldr r0, _08023B18 @ =gHitMarker - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 18 - ands r0, r1 - cmp r0, 0 - beq _08023AFA - ldr r4, _08023B1C @ =gBattlerTarget - ldrb r0, [r4] - cmp r3, r0 - beq _08023AFA - ldrb r2, [r4] - lsls r0, r2, 2 - adds r0, r7 - ldr r0, [r0] - lsls r0, 28 - ands r1, r0 - cmp r1, 0 - bne _08023AFA - ldr r0, _08023B20 @ =gMoveResultFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _08023AFA - lsls r1, r2, 1 - adds r1, r5 - adds r1, 0x98 - ldr r3, _08023B24 @ =gChosenMove - ldrh r0, [r3] - strb r0, [r1] - ldrb r1, [r4] - ldr r0, [r6] - lsls r1, 1 - adds r1, r0 - adds r1, 0x99 - ldrh r0, [r3] - lsrs r0, 8 - strb r0, [r1] - ldrb r0, [r4] - mov r2, r9 - ldrb r1, [r2] - ldr r2, [r6] - lsls r0, 3 - lsls r1, 1 - adds r0, r1 - adds r0, r2 - adds r0, 0xE0 - ldrh r1, [r3] - strb r1, [r0] - ldrb r1, [r4] - mov r4, r9 - ldrb r0, [r4] - ldr r2, [r6] - lsls r1, 3 - lsls r0, 1 - adds r1, r0 - adds r1, r2 - adds r1, 0xE1 - ldrh r0, [r3] - lsrs r0, 8 - strb r0, [r1] -_08023AFA: - mov r5, r12 - ldrb r0, [r5, 0x14] - adds r0, 0x1 - strb r0, [r5, 0x14] - b _08023BB4 - .align 2, 0 -_08023B04: .4byte gAbsentBattlerFlags -_08023B08: .4byte gBitTable -_08023B0C: .4byte gBattlerAttacker -_08023B10: .4byte gBattleStruct -_08023B14: .4byte gBattleMoves -_08023B18: .4byte gHitMarker -_08023B1C: .4byte gBattlerTarget -_08023B20: .4byte gMoveResultFlags -_08023B24: .4byte gChosenMove -_08023B28: - ldr r5, _08023C10 @ =gHitMarker - ldr r2, [r5] - movs r0, 0x80 - lsls r0, 12 - ands r0, r2 - cmp r0, 0 - bne _08023BAC - ldr r0, _08023C14 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08023BAC - ldr r1, _08023C18 @ =gProtectStructs - ldr r0, _08023C1C @ =gBattlerAttacker - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0, 0x1] - lsls r0, 29 - cmp r0, 0 - blt _08023BAC - ldr r0, _08023C20 @ =gBattleMoves - mov r9, r0 - ldr r1, _08023C24 @ =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 _08023BAC - movs r6, 0x80 - lsls r6, 2 - adds r4, r6, 0 - ands r4, r2 - cmp r4, 0 - bne _08023BAC - ldr r7, _08023C28 @ =gBattlerTarget - ldrb r0, [r7] - bl GetBattlerPosition - movs r1, 0x2 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _08023C2C @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _08023BA2 - bl _080232F0 -_08023BA2: - ldr r0, [r5] - orrs r0, r6 - str r0, [r5] - ldr r2, _08023C30 @ =gBattleScripting - mov r12, r2 -_08023BAC: - mov r3, r12 - ldrb r0, [r3, 0x14] - adds r0, 0x1 - strb r0, [r3, 0x14] -_08023BB4: - ldr r4, [sp, 0x10] - cmp r4, 0x1 - bne _08023BC6 - mov r5, r10 - cmp r5, 0 - bne _08023BC6 - movs r0, 0x11 - mov r1, r12 - strb r0, [r1, 0x14] -_08023BC6: - ldr r2, [sp, 0x10] - cmp r2, 0x2 - bne _08023BDC - ldr r4, [sp, 0x14] - mov r3, r12 - ldrb r3, [r3, 0x14] - cmp r4, r3 - bne _08023BDC - movs r0, 0x11 - mov r4, r12 - strb r0, [r4, 0x14] -_08023BDC: - mov r5, r12 - ldrb r0, [r5, 0x14] - cmp r0, 0x11 - beq _08023BE8 - bl _08023358 -_08023BE8: - mov r1, r12 - ldrb r0, [r1, 0x14] - cmp r0, 0x11 - bne _08023BFE - mov r2, r10 - cmp r2, 0 - bne _08023BFE - ldr r1, _08023C34 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x3 -_08023BFC: - str r0, [r1] -_08023BFE: - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08023C10: .4byte gHitMarker -_08023C14: .4byte gBattleTypeFlags -_08023C18: .4byte gProtectStructs -_08023C1C: .4byte gBattlerAttacker -_08023C20: .4byte gBattleMoves -_08023C24: .4byte gCurrentMove -_08023C28: .4byte gBattlerTarget -_08023C2C: .4byte gBattleMons -_08023C30: .4byte gBattleScripting -_08023C34: .4byte gBattlescriptCurrInstr - thumb_func_end atk49_moveend - - thumb_func_start atk4A_typecalc2 -atk4A_typecalc2: @ 8023C38 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r4, 0 - movs r5, 0 - ldr r2, _08023C9C @ =gBattleMoves - ldr r0, _08023CA0 @ =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, _08023CA4 @ =gBattleMons - ldr r3, _08023CA8 @ =gBattlerTarget - 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 _08023CCC - mov r1, r8 - cmp r1, 0x4 - bne _08023CCC - ldr r3, _08023CAC @ =gLastUsedAbility - strb r0, [r3] - ldr r2, _08023CB0 @ =gMoveResultFlags - ldrb r0, [r2] - movs r1, 0x9 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08023CB4 @ =gLastLandedMoves - ldrb r0, [r7] - lsls r0, 1 - adds r0, r1 - strh r4, [r0] - ldr r0, _08023CB8 @ =gBattleCommunication - mov r2, r8 - strb r2, [r0, 0x6] - ldrb r0, [r7] - ldrb r1, [r3] - bl RecordAbilityBattle - b _08023DAE - .align 2, 0 -_08023C9C: .4byte gBattleMoves -_08023CA0: .4byte gCurrentMove -_08023CA4: .4byte gBattleMons -_08023CA8: .4byte gBattlerTarget -_08023CAC: .4byte gLastUsedAbility -_08023CB0: .4byte gMoveResultFlags -_08023CB4: .4byte gLastLandedMoves -_08023CB8: .4byte gBattleCommunication -_08023CBC: - ldr r0, _08023CC8 @ =gMoveResultFlags - ldrb r1, [r0] - movs r2, 0x8 - orrs r1, r2 - strb r1, [r0] - b _08023DAE - .align 2, 0 -_08023CC8: .4byte gMoveResultFlags -_08023CCC: - ldr r1, _08023CD8 @ =gTypeEffectiveness - adds r0, r5, r1 - ldrb r0, [r0] - adds r6, r1, 0 - b _08023D8E - .align 2, 0 -_08023CD8: .4byte gTypeEffectiveness -_08023CDC: - adds r0, r5, r6 - ldrb r0, [r0] - cmp r0, r8 - bne _08023D88 - 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 _08023D1A - adds r0, r5, 0x2 - adds r0, r6 - ldrb r1, [r0] - cmp r1, 0 - beq _08023CBC - cmp r1, 0x5 - bne _08023D0E - movs r0, 0x4 - orrs r4, r0 -_08023D0E: - cmp r1, 0x14 - bne _08023D1A - movs r0, 0x2 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_08023D1A: - 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 _08023D88 - adds r0, 0x21 - ldrb r1, [r0] - cmp r1, r2 - beq _08023D42 - adds r0, r5, 0x2 - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0 - beq _08023CBC -_08023D42: - cmp r1, r2 - beq _08023D58 - adds r0, r5, 0x2 - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0x5 - bne _08023D58 - movs r0, 0x4 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_08023D58: - 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 _08023D88 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, r2 - beq _08023D88 - adds r0, r5, 0x2 - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0x14 - bne _08023D88 - movs r0, 0x2 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_08023D88: - adds r5, 0x3 - adds r0, r5, r6 - ldrb r0, [r0] -_08023D8E: - cmp r0, 0xFF - beq _08023DAE - cmp r0, 0xFE - bne _08023CDC - 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 _08023D88 -_08023DAE: - ldr r2, _08023E5C @ =gBattleMons - ldr r0, _08023E60 @ =gBattlerTarget - 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 _08023E2A - movs r5, 0x29 - ands r5, r4 - cmp r5, 0 - bne _08023E2A - ldr r0, _08023E64 @ =gBattlerAttacker - ldrb r0, [r0] - ldr r7, _08023E68 @ =gCurrentMove - ldrh r1, [r7] - bl AttacksThisTurn - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x2 - bne _08023E2A - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08023DF0 - movs r0, 0x6 - ands r4, r0 - cmp r4, 0x6 - bne _08023E2A -_08023DF0: - ldr r2, _08023E6C @ =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 _08023E2A - ldr r3, _08023E70 @ =gLastUsedAbility - strb r6, [r3] - ldr r2, _08023E74 @ =gMoveResultFlags - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08023E78 @ =gLastLandedMoves - mov r2, r8 - ldrb r0, [r2] - lsls r0, 1 - adds r0, r1 - strh r5, [r0] - ldr r1, _08023E7C @ =gBattleCommunication - movs r0, 0x3 - strb r0, [r1, 0x6] - ldrb r0, [r2] - ldrb r1, [r3] - bl RecordAbilityBattle -_08023E2A: - ldr r0, _08023E74 @ =gMoveResultFlags - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08023E48 - ldr r2, _08023E80 @ =gProtectStructs - ldr r0, _08023E64 @ =gBattlerAttacker - ldrb r1, [r0] - lsls r1, 4 - adds r1, r2 - ldrb r0, [r1, 0x1] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r1, 0x1] -_08023E48: - ldr r1, _08023E84 @ =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 -_08023E5C: .4byte gBattleMons -_08023E60: .4byte gBattlerTarget -_08023E64: .4byte gBattlerAttacker -_08023E68: .4byte gCurrentMove -_08023E6C: .4byte gBattleMoves -_08023E70: .4byte gLastUsedAbility -_08023E74: .4byte gMoveResultFlags -_08023E78: .4byte gLastLandedMoves -_08023E7C: .4byte gBattleCommunication -_08023E80: .4byte gProtectStructs -_08023E84: .4byte gBattlescriptCurrInstr - thumb_func_end atk4A_typecalc2 - - thumb_func_start atk4B_returnatktoball -atk4B_returnatktoball: @ 8023E88 - push {r4,lr} - ldr r4, _08023EC4 @ =gActiveBattler - ldr r0, _08023EC8 @ =gBattlerAttacker - ldrb r0, [r0] - strb r0, [r4] - ldr r2, _08023ECC @ =gHitMarker - ldr r1, _08023ED0 @ =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 _08023EB6 - movs r0, 0 - movs r1, 0 - bl BtlController_EmitReturnMonToBall - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_08023EB6: - ldr r1, _08023ED4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08023EC4: .4byte gActiveBattler -_08023EC8: .4byte gBattlerAttacker -_08023ECC: .4byte gHitMarker -_08023ED0: .4byte gBitTable -_08023ED4: .4byte gBattlescriptCurrInstr - thumb_func_end atk4B_returnatktoball - - thumb_func_start atk4C_getswitchedmondata -atk4C_getswitchedmondata: @ 8023ED8 - push {r4,r5,lr} - ldr r0, _08023F30 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08023F28 - ldr r5, _08023F34 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r4, _08023F38 @ =gActiveBattler - strb r0, [r4] - ldr r3, _08023F3C @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r2, r0, 1 - adds r2, r3 - ldr r1, _08023F40 @ =gBattleStruct - ldr r1, [r1] - adds r0, r1 - adds r0, 0x5C - ldrb r0, [r0] - strh r0, [r2] - ldr r1, _08023F44 @ =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 BtlController_EmitGetMonData - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] -_08023F28: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08023F30: .4byte gBattleControllerExecFlags -_08023F34: .4byte gBattlescriptCurrInstr -_08023F38: .4byte gActiveBattler -_08023F3C: .4byte gBattlerPartyIndexes -_08023F40: .4byte gBattleStruct -_08023F44: .4byte gBitTable - thumb_func_end atk4C_getswitchedmondata - - thumb_func_start atk4D_switchindataupdate -atk4D_switchindataupdate: @ 8023F48 - push {r4-r7,lr} - sub sp, 0x58 - ldr r0, _080240A0 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - beq _08023F56 - b _08024098 -_08023F56: - ldr r0, _080240A4 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r4, _080240A8 @ =gActiveBattler - strb r0, [r4] - ldr r6, _080240AC @ =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, _080240B0 @ =gBattleBufferB - adds r7, r4, 0 -_08023F84: - 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 _08023F84 - ldr r4, _080240AC @ =gBattleMons - ldrb r0, [r7] - movs r6, 0x58 - adds r2, r0, 0 - muls r2, r6 - adds r2, r4 - ldr r3, _080240B4 @ =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 GetBattlerSide - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080240B8 @ =gWishFutureKnock - adds r0, 0x29 - adds r0, r2, r0 - ldrb r1, [r0] - ldr r3, _080240BC @ =gBitTable - ldr r2, _080240C0 @ =gBattlerPartyIndexes - 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 _08024022 - adds r0, r5, 0 - muls r0, r6 - add r0, r12 - movs r1, 0 - strh r1, [r0, 0x2E] -_08024022: - ldr r2, _080240C4 @ =gBattleMoves - ldr r0, _080240C8 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x7F - bne _08024068 - movs r2, 0 - adds r4, r7, 0 - movs r6, 0x58 - mov r5, r12 - adds r5, 0x18 - add r3, sp, 0x18 -_08024042: - 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 _08024042 - 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] -_08024068: - bl SwitchInClearSetData - ldr r0, _080240CC @ =gBattleScripting - ldr r3, _080240A8 @ =gActiveBattler - ldrb r2, [r3] - strb r2, [r0, 0x17] - ldr r1, _080240D0 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x7 - strb r0, [r1, 0x1] - strb r2, [r1, 0x2] - ldr r2, _080240C0 @ =gBattlerPartyIndexes - 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, _080240A4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_08024098: - add sp, 0x58 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080240A0: .4byte gBattleControllerExecFlags -_080240A4: .4byte gBattlescriptCurrInstr -_080240A8: .4byte gActiveBattler -_080240AC: .4byte gBattleMons -_080240B0: .4byte gBattleBufferB -_080240B4: .4byte gBaseStats -_080240B8: .4byte gWishFutureKnock -_080240BC: .4byte gBitTable -_080240C0: .4byte gBattlerPartyIndexes -_080240C4: .4byte gBattleMoves -_080240C8: .4byte gCurrentMove -_080240CC: .4byte gBattleScripting -_080240D0: .4byte gBattleTextBuff1 - thumb_func_end atk4D_switchindataupdate - - thumb_func_start atk4E_switchinanim -atk4E_switchinanim: @ 80240D4 - push {r4-r6,lr} - ldr r0, _08024168 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08024160 - ldr r0, _0802416C @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r6, _08024170 @ =gActiveBattler - strb r0, [r6] - ldrb r0, [r6] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0802412A - ldr r0, _08024174 @ =gBattleTypeFlags - ldr r0, [r0] - ldr r1, _08024178 @ =0x0001aa02 - ands r0, r1 - cmp r0, 0 - bne _0802412A - ldr r4, _0802417C @ =gBattleMons - 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] - muls r1, r5 - adds r4, 0x48 - adds r1, r4 - ldr r2, [r1] - movs r1, 0x2 - bl HandleSetPokedexFlag -_0802412A: - ldr r2, _08024180 @ =gAbsentBattlerFlags - ldr r1, _08024184 @ =gBitTable - ldr r5, _08024170 @ =gActiveBattler - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] - ldr r1, _08024188 @ =gBattlerPartyIndexes - ldrb r0, [r5] - lsls r0, 1 - adds r0, r1 - ldrb r1, [r0] - ldr r4, _0802416C @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r2, [r0, 0x2] - movs r0, 0 - bl BtlController_EmitSwitchInAnim - ldrb r0, [r5] - bl MarkBattlerForControllerExec - ldr r0, [r4] - adds r0, 0x3 - str r0, [r4] -_08024160: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08024168: .4byte gBattleControllerExecFlags -_0802416C: .4byte gBattlescriptCurrInstr -_08024170: .4byte gActiveBattler -_08024174: .4byte gBattleTypeFlags -_08024178: .4byte 0x0001aa02 -_0802417C: .4byte gBattleMons -_08024180: .4byte gAbsentBattlerFlags -_08024184: .4byte gBitTable -_08024188: .4byte gBattlerPartyIndexes - thumb_func_end atk4E_switchinanim - - thumb_func_start atk4F_jumpifcantswitch -atk4F_jumpifcantswitch: @ 802418C - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _080241F0 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r1, [r0, 0x1] - movs r0, 0x7F - ands r0, r1 - bl GetBattlerForBattleScript - ldr r3, _080241F4 @ =gActiveBattler - strb r0, [r3] - ldr r2, [r4] - ldrb r1, [r2, 0x1] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08024204 - ldr r1, _080241F8 @ =gBattleMons - ldrb r3, [r3] - movs r0, 0x58 - muls r0, r3 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080241FC @ =0x0400e000 - ands r0, r1 - cmp r0, 0 - bne _080241D8 - ldr r1, _08024200 @ =gStatuses3 - lsls r0, r3, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 3 - ands r0, r1 - cmp r0, 0 - beq _08024204 -_080241D8: - 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 _08024388 - .align 2, 0 -_080241F0: .4byte gBattlescriptCurrInstr -_080241F4: .4byte gActiveBattler -_080241F8: .4byte gBattleMons -_080241FC: .4byte 0x0400e000 -_08024200: .4byte gStatuses3 -_08024204: - ldr r5, _08024290 @ =gBattleTypeFlags - ldr r0, [r5] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080242A4 - ldr r4, _08024294 @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08024298 @ =gPlayerParty - mov r8, r1 - cmp r0, 0x1 - bne _08024228 - ldr r0, _0802429C @ =gEnemyParty - mov r8, r0 -_08024228: - movs r5, 0 - ldrb r0, [r4] - bl GetBattlerMultiplayerId - lsls r0, 24 - lsrs r0, 24 - bl GetLinkTrainerFlankId - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bne _08024242 - movs r5, 0x3 -_08024242: - adds r6, r5, 0x3 - cmp r5, r6 - bge _0802428A - ldr r7, _080242A0 @ =gBattlerPartyIndexes -_0802424A: - 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 _08024284 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _08024284 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _08024284 - ldr r0, _08024294 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 1 - adds r0, r7 - ldrh r0, [r0] - cmp r0, r5 - bne _0802428A -_08024284: - adds r5, 0x1 - cmp r5, r6 - blt _0802424A -_0802428A: - cmp r5, r6 - beq _08024358 - b _08024380 - .align 2, 0 -_08024290: .4byte gBattleTypeFlags -_08024294: .4byte gActiveBattler -_08024298: .4byte gPlayerParty -_0802429C: .4byte gEnemyParty -_080242A0: .4byte gBattlerPartyIndexes -_080242A4: - ldr r0, _080242D4 @ =gActiveBattler - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bne _080242E4 - movs r0, 0x1 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, [r5] - ands r0, r4 - cmp r0, 0 - beq _080242D8 - movs r0, 0x3 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r6, r0, 24 - b _080242DA - .align 2, 0 -_080242D4: .4byte gActiveBattler -_080242D8: - adds r6, r7, 0 -_080242DA: - ldr r0, _080242E0 @ =gEnemyParty - mov r8, r0 - b _0802430A - .align 2, 0 -_080242E0: .4byte gEnemyParty -_080242E4: - movs r0, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, [r5] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08024304 - movs r0, 0x2 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r6, r0, 24 - b _08024306 -_08024304: - adds r6, r7, 0 -_08024306: - ldr r1, _08024374 @ =gPlayerParty - mov r8, r1 -_0802430A: - movs r5, 0 -_0802430C: - 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 _0802434E - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0802434E - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _0802434E - ldr r1, _08024378 @ =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r5, r0 - beq _0802434E - lsls r0, r6, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r5, r0 - bne _08024354 -_0802434E: - adds r5, 0x1 - cmp r5, 0x5 - ble _0802430C -_08024354: - cmp r5, 0x6 - bne _08024380 -_08024358: - ldr r3, _0802437C @ =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 _08024388 - .align 2, 0 -_08024374: .4byte gPlayerParty -_08024378: .4byte gBattlerPartyIndexes -_0802437C: .4byte gBattlescriptCurrInstr -_08024380: - ldr r1, _08024394 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] -_08024388: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08024394: .4byte gBattlescriptCurrInstr - thumb_func_end atk4F_jumpifcantswitch - - thumb_func_start sub_8024398 -sub_8024398: @ 8024398 - push {r4,r5,lr} - sub sp, 0x4 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r4, _080243E0 @ =gActiveBattler - ldrb r0, [r4] - ldr r5, _080243E4 @ =gBattleStruct - ldr r1, [r5] - adds r1, r0, r1 - adds r1, 0x58 - ldr r3, _080243E8 @ =gBattlerPartyIndexes - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strb r0, [r1] - ldrb r0, [r4] - lsls r1, r0, 1 - adds r1, r0 - adds r1, 0x60 - ldr r0, [r5] - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x1 - movs r3, 0 - bl BtlController_EmitChoosePokemon - ldrb r0, [r4] - bl MarkBattlerForControllerExec - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080243E0: .4byte gActiveBattler -_080243E4: .4byte gBattleStruct -_080243E8: .4byte gBattlerPartyIndexes - thumb_func_end sub_8024398 - thumb_func_start atk50_openpartyscreen atk50_openpartyscreen: @ 80243EC push {r4-r7,lr} diff --git a/include/battle.h b/include/battle.h index fc92417da..144d0a3bb 100644 --- a/include/battle.h +++ b/include/battle.h @@ -657,52 +657,6 @@ extern struct BattleStruct *gBattleStruct; #define MOVE_EFFECT_AFFECTS_USER 0x40 #define MOVE_EFFECT_CERTAIN 0x80 -// table ids for general animations -#define B_ANIM_CASTFORM_CHANGE 0x0 -#define B_ANIM_STATS_CHANGE 0x1 -#define B_ANIM_SUBSTITUTE_FADE 0x2 -#define B_ANIM_SUBSTITUTE_APPEAR 0x3 -#define B_ANIM_x4 0x4 -#define B_ANIM_ITEM_KNOCKOFF 0x5 -#define B_ANIM_TURN_TRAP 0x6 -#define B_ANIM_ITEM_EFFECT 0x7 -#define B_ANIM_SMOKEBALL_ESCAPE 0x8 -#define B_ANIM_HANGED_ON 0x9 -#define B_ANIM_RAIN_CONTINUES 0xA -#define B_ANIM_SUN_CONTINUES 0xB -#define B_ANIM_SANDSTORM_CONTINUES 0xC -#define B_ANIM_HAIL_CONTINUES 0xD -#define B_ANIM_LEECH_SEED_DRAIN 0xE -#define B_ANIM_MON_HIT 0xF -#define B_ANIM_ITEM_STEAL 0x10 -#define B_ANIM_SNATCH_MOVE 0x11 -#define B_ANIM_FUTURE_SIGHT_HIT 0x12 -#define B_ANIM_DOOM_DESIRE_HIT 0x13 -#define B_ANIM_x14 0x14 -#define B_ANIM_INGRAIN_HEAL 0x15 -#define B_ANIM_WISH_HEAL 0x16 - -// special animations table -#define B_ANIM_LVL_UP 0x0 -#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1 -#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2 -#define B_ANIM_BALL_THROW 0x3 -#define B_ANIM_SAFARI_BALL_THROW 0x4 -#define B_ANIM_SUBSTITUTE_TO_MON 0x5 -#define B_ANIM_MON_TO_SUBSTITUTE 0x6 - -// status animation table -#define B_ANIM_STATUS_PSN 0x0 -#define B_ANIM_STATUS_CONFUSION 0x1 -#define B_ANIM_STATUS_BRN 0x2 -#define B_ANIM_STATUS_INFATUATION 0x3 -#define B_ANIM_STATUS_SLP 0x4 -#define B_ANIM_STATUS_PRZ 0x5 -#define B_ANIM_STATUS_FRZ 0x6 -#define B_ANIM_STATUS_CURSED 0x7 -#define B_ANIM_STATUS_NIGHTMARE 0x8 -#define B_ANIM_STATUS_WRAPPED 0x9 - #define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8 #define GET_STAT_BUFF_VALUE2(n)((n & 0xF0)) #define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40 @@ -985,5 +939,7 @@ extern u16 gLockedMoves[MAX_BATTLERS_COUNT]; extern u8 gCurrentTurnActionNumber; extern u16 gExpShareExp; extern u8 gLeveledUpInBattle; +extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT]; +extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT]; #endif // GUARD_BATTLE_H diff --git a/include/battle_anim.h b/include/battle_anim.h index 35d144bac..3536e89f4 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -137,6 +137,14 @@ void sub_8072E48(u8 battlerId, u8); void sub_8073128(u8); // battle_anim_80A9C70.s +#define STAT_ANIM_PLUS1 15 +#define STAT_ANIM_PLUS2 39 +#define STAT_ANIM_MINUS1 22 +#define STAT_ANIM_MINUS2 46 +#define STAT_ANIM_MULTIPLE_PLUS1 55 +#define STAT_ANIM_MULTIPLE_PLUS2 56 +#define STAT_ANIM_MULTIPLE_MINUS1 57 +#define STAT_ANIM_MULTIPLE_MINUS2 58 void LaunchStatusAnimation(u8 bank, u8 statusAnimId); // battle_anim_8170478.s diff --git a/include/battle_scripts.h b/include/battle_scripts.h index adbbd7e0c..165b580de 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -223,5 +223,6 @@ extern const u8 BattleScript_IntimidateActivatesEnd3[]; extern const u8 BattleScript_IgnoresWhileAsleep[]; extern const u8 BattleScript_IgnoresAndHitsItself[]; extern const u8 BattleScript_MoveEffectRecoil[]; +extern const u8 BattleScript_FlushMessageBox[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 0a023f0c2..22793032f 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -370,6 +370,7 @@ #define B_ANIM_FOCUS_PUNCH_SETUP 0x14 #define B_ANIM_INGRAIN_HEAL 0x15 #define B_ANIM_WISH_HEAL 0x16 +#define B_ANIM_x19 0x19 // special animations table #define B_ANIM_LVL_UP 0x0 diff --git a/include/party_menu.h b/include/party_menu.h index 84d9edb76..d10d0e48a 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -13,6 +13,16 @@ enum { AILMENT_BRN }; +enum +{ + PARTY_CHOOSE_MON, + PARTY_MUST_CHOOSE_MON, + PARTY_CANT_SWITCH, + PARTY_USE_ITEM_ON, + PARTY_ABILITY_PREVENTS, + PARTY_GIVE_ITEM, +}; + struct Struct203B0A0 { MainCallback exitCallback; diff --git a/include/pokemon.h b/include/pokemon.h index bf30766a0..5ec4443c6 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -623,7 +623,7 @@ u16 SpeciesToCryId(u16 species); void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4); void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); bool8 sub_80435E0(void); -bool8 GetLinkTrainerFlankId(u8 linkPlayerId); +bool16 GetLinkTrainerFlankId(u8 linkPlayerId); s32 GetBattlerMultiplayerId(u16 a1); u8 GetTrainerEncounterMusicId(u16 trainer); void AdjustFriendship(struct Pokemon *mon, u8 event); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 912c98410..55f3876af 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -17,6 +17,7 @@ #include "battle_ai_script_commands.h" #include "battle_anim.h" #include "battle_interface.h" +#include "constants/battle_anim.h" #include "constants/species.h" #include "constants/moves.h" #include "constants/songs.h" diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 405a4136f..aa3ef9504 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -714,7 +714,7 @@ const u16 gUnknown_82506D0[] = INCBIN_U16("graphics/battle_interface/unk_battleb const u32 gUnknown_82506F0[] = INCBIN_U32("graphics/battle_interface/unk_battlebox.4bpp.lz"); // not used -const u8 sRubyLevelUpStatBoxStats[] = +static const u8 sRubyLevelUpStatBoxStats[] = { MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED @@ -867,7 +867,7 @@ const u8 sBallCatchBonuses[] = }; // not used -const u32 gUnknown_8250898 = 0xFF7EAE60; +static const u32 gUnknown_8250898 = 0xFF7EAE60; void atk00_attackcanceler(void) { @@ -3310,3 +3310,1195 @@ void atk23_getexp(void) break; } } + +void atk24(void) +{ + u16 HP_count = 0; + s32 i; + + if (!gBattleControllerExecFlags) + { + for (i = 0; i < PARTY_SIZE; ++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 |= B_OUTCOME_LOST; + for (HP_count = 0, i = 0; i < PARTY_SIZE; ++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 == 0) + gBattleOutcome |= B_OUTCOME_WON; + if (gBattleOutcome == 0 && (gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + s32 foundPlayer; + s32 foundOpponent; + + for (foundPlayer = 0, i = 0; i < gBattlersCount; i += 2) + { + u32 *ptr = &gHitMarker; + u32 hitMarkerUnk = 0x10000000; + + ++i; + --i; + if ((hitMarkerUnk << i) & *ptr && !gSpecialStatuses[i].flag40) + ++foundPlayer; + } + for (foundOpponent = 0, i = 1; i < gBattlersCount; i += 2) + { + u32 *ptr = &gHitMarker; + u32 hitMarkerUnk = 0x10000000; + + { + u8 match; + + ++match; + --match; + } + if ((hitMarkerUnk << i) & *ptr && !gSpecialStatuses[i].flag40) + ++foundOpponent; + } + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (foundOpponent + foundPlayer > 1) + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; + } + else + { + if (foundOpponent != 0 && foundPlayer != 0) + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; + } + } + else + { + gBattlescriptCurrInstr += 5; + } + } +} + +void MoveValuesCleanUp(void) +{ + gMoveResultFlags = 0; + gBattleScripting.dmgMultiplier = 1; + gCritMultiplier = 1; + gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattleCommunication[6] = 0; + gHitMarker &= ~(HITMARKER_DESTINYBOND); + gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); +} + +void atk25_movevaluescleanup(void) +{ + MoveValuesCleanUp(); + gBattlescriptCurrInstr += 1; +} + +void atk26_setmultihit(void) +{ + gMultiHitCounter = gBattlescriptCurrInstr[1]; + gBattlescriptCurrInstr += 2; +} + +void atk27_decrementmultihit(void) +{ + if (--gMultiHitCounter == 0) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); +} + +void atk28_goto(void) +{ + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); +} + +void atk29_jumpifbyte(void) +{ + u8 caseID = gBattlescriptCurrInstr[1]; + const u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2); + u8 value = gBattlescriptCurrInstr[6]; + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); + + gBattlescriptCurrInstr += 11; + + switch (caseID) + { + case CMP_EQUAL: + if (*memByte == value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_NOT_EQUAL: + if (*memByte != value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_GREATER_THAN: + if (*memByte > value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_LESS_THAN: + if (*memByte < value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_COMMON_BITS: + if (*memByte & value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_NO_COMMON_BITS: + if (!(*memByte & value)) + gBattlescriptCurrInstr = jumpPtr; + break; + } +} + +void atk2A_jumpifhalfword(void) +{ + u8 caseID = gBattlescriptCurrInstr[1]; + const u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2); + u16 value = T2_READ_16(gBattlescriptCurrInstr + 6); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8); + + gBattlescriptCurrInstr += 12; + switch (caseID) + { + case CMP_EQUAL: + if (*memHword == value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_NOT_EQUAL: + if (*memHword != value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_GREATER_THAN: + if (*memHword > value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_LESS_THAN: + if (*memHword < value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_COMMON_BITS: + if (*memHword & value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_NO_COMMON_BITS: + if (!(*memHword & value)) + gBattlescriptCurrInstr = jumpPtr; + break; + } +} + +void atk2B_jumpifword(void) +{ + u8 caseID = gBattlescriptCurrInstr[1]; + const u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2); + u32 value = T1_READ_32(gBattlescriptCurrInstr + 6); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + + gBattlescriptCurrInstr += 14; + switch (caseID) + { + case CMP_EQUAL: + if (*memWord == value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_NOT_EQUAL: + if (*memWord != value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_GREATER_THAN: + if (*memWord > value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_LESS_THAN: + if (*memWord < value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_COMMON_BITS: + if (*memWord & value) + gBattlescriptCurrInstr = jumpPtr; + break; + case CMP_NO_COMMON_BITS: + if (!(*memWord & value)) + gBattlescriptCurrInstr = jumpPtr; + break; + } +} + +void atk2C_jumpifarrayequal(void) +{ + const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); + u32 size = gBattlescriptCurrInstr[9]; + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + u8 i; + + for (i = 0; i < size; ++i) + { + if (*mem1 != *mem2) + { + gBattlescriptCurrInstr += 14; + break; + } + ++mem1, ++mem2; + } + if (i == size) + gBattlescriptCurrInstr = jumpPtr; +} + +void atk2D_jumpifarraynotequal(void) +{ + u8 equalBytes = 0; + const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); + u32 size = gBattlescriptCurrInstr[9]; + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + u8 i; + + for (i = 0; i < size; ++i) + { + if (*mem1 == *mem2) + ++equalBytes; + ++mem1, ++mem2; + } + if (equalBytes != size) + gBattlescriptCurrInstr = jumpPtr; + else + gBattlescriptCurrInstr += 14; +} + +void atk2E_setbyte(void) +{ + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + + *memByte = gBattlescriptCurrInstr[5]; + gBattlescriptCurrInstr += 6; +} + +void atk2F_addbyte(void) +{ + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + + *memByte += gBattlescriptCurrInstr[5]; + gBattlescriptCurrInstr += 6; +} + +void atk30_subbyte(void) +{ + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + + *memByte -= gBattlescriptCurrInstr[5]; + gBattlescriptCurrInstr += 6; +} + +void atk31_copyarray(void) +{ + u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5); + s32 size = gBattlescriptCurrInstr[9]; + s32 i; + + for (i = 0; i < size; ++i) + { + dest[i] = src[i]; + } + gBattlescriptCurrInstr += 10; +} + +void atk32_copyarraywithindex(void) +{ + u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5); + const u8 *index = T2_READ_PTR(gBattlescriptCurrInstr + 9); + s32 size = gBattlescriptCurrInstr[13]; + s32 i; + + for (i = 0; i < size; ++i) + { + dest[i] = src[i + *index]; + } + gBattlescriptCurrInstr += 14; +} + +void atk33_orbyte(void) +{ + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + *memByte |= gBattlescriptCurrInstr[5]; + gBattlescriptCurrInstr += 6; +} + +void atk34_orhalfword(void) +{ + u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); + + *memHword |= val; + gBattlescriptCurrInstr += 7; +} + +void atk35_orword(void) +{ + u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); + + *memWord |= val; + gBattlescriptCurrInstr += 9; +} + +void atk36_bicbyte(void) +{ + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + + *memByte &= ~(gBattlescriptCurrInstr[5]); + gBattlescriptCurrInstr += 6; +} + +void atk37_bichalfword(void) +{ + u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); + + *memHword &= ~val; + gBattlescriptCurrInstr += 7; +} + +void atk38_bicword(void) +{ + u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); + + *memWord &= ~val; + gBattlescriptCurrInstr += 9; +} + +void atk39_pause(void) +{ + if (!gBattleControllerExecFlags) + { + u16 value = T2_READ_16(gBattlescriptCurrInstr + 1); + + if (++gPauseCounterBattle >= value) + { + gPauseCounterBattle = 0; + gBattlescriptCurrInstr += 3; + } + } +} + +void atk3A_waitstate(void) +{ + if (!gBattleControllerExecFlags) + ++gBattlescriptCurrInstr; +} + +void atk3B_healthbar_update(void) +{ + if (gBattlescriptCurrInstr[1] == BS_TARGET) + gActiveBattler = gBattlerTarget; + else + gActiveBattler = gBattlerAttacker; + BtlController_EmitHealthBarUpdate(0, gBattleMoveDamage); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 2; +} + +void atk3C_return(void) +{ + BattleScriptPop(); +} + +void atk3D_end(void) +{ + gMoveResultFlags = 0; + gActiveBattler = 0; + gCurrentActionFuncId = B_ACTION_TRY_FINISH; +} + +void atk3E_end2(void) +{ + gActiveBattler = 0; + gCurrentActionFuncId = B_ACTION_TRY_FINISH; +} + +void atk3F_end3(void) // pops the main function stack +{ + BattleScriptPop(); + if (gBattleResources->battleCallbackStack->size != 0) + gBattleResources->battleCallbackStack->size--; + gBattleMainFunc = gBattleResources->battleCallbackStack->function[gBattleResources->battleCallbackStack->size]; +} + +void atk41_call(void) +{ + BattleScriptPush(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); +} + +void atk42_jumpiftype2(void) +{ + u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + + if (gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type1 || gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type2) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; +} + +void atk43_jumpifabilitypresent(void) +{ + if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, gBattlescriptCurrInstr[1], 0, 0)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; +} + +void atk44_endselectionscript(void) +{ + *(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE; +} + +void atk45_playanimation(void) +{ + const u16 *argumentPtr; + + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3); + if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE + || gBattlescriptCurrInstr[2] == B_ANIM_SNATCH_MOVE + || gBattlescriptCurrInstr[2] == B_ANIM_SUBSTITUTE_FADE + || gBattlescriptCurrInstr[2] == B_ANIM_x19) + { + BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 7; + } + else if (gHitMarker & HITMARKER_NO_ANIMATIONS) + { + BattleScriptPush(gBattlescriptCurrInstr + 7); + gBattlescriptCurrInstr = BattleScript_Pausex20; + } + else if (gBattlescriptCurrInstr[2] == B_ANIM_RAIN_CONTINUES + || gBattlescriptCurrInstr[2] == B_ANIM_SUN_CONTINUES + || gBattlescriptCurrInstr[2] == B_ANIM_SANDSTORM_CONTINUES + || gBattlescriptCurrInstr[2] == B_ANIM_HAIL_CONTINUES) + { + BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 7; + } + else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) + { + gBattlescriptCurrInstr += 7; + } + else + { + BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 7; + } +} + +void atk46_playanimation2(void) // animation Id is stored in the first pointer +{ + const u16 *argumentPtr; + const u8 *animationIdPtr; + + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2); + argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); + if (*animationIdPtr == B_ANIM_STATS_CHANGE + || *animationIdPtr == B_ANIM_SNATCH_MOVE + || *animationIdPtr == B_ANIM_SUBSTITUTE_FADE) + { + BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 10; + } + else if (gHitMarker & HITMARKER_NO_ANIMATIONS) + { + gBattlescriptCurrInstr += 10; + } + else if (*animationIdPtr == B_ANIM_RAIN_CONTINUES + || *animationIdPtr == B_ANIM_SUN_CONTINUES + || *animationIdPtr == B_ANIM_SANDSTORM_CONTINUES + || *animationIdPtr == B_ANIM_HAIL_CONTINUES) + { + BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 10; + } + else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) + { + gBattlescriptCurrInstr += 10; + } + else + { + BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 10; + } +} + +void atk47_setgraphicalstatchangevalues(void) +{ + u8 value = 0; + + switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger)) + { + case SET_STAT_BUFF_VALUE(1): // +1 + value = STAT_ANIM_PLUS1; + break; + case SET_STAT_BUFF_VALUE(2): // +2 + value = STAT_ANIM_PLUS2; + break; + case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1 + value = STAT_ANIM_MINUS1; + break; + case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2 + value = STAT_ANIM_MINUS2; + break; + } + gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1; + gBattleScripting.animArg2 = 0; + ++gBattlescriptCurrInstr; +} + +void atk48_playstatchangeanimation(void) +{ + u32 currStat = 0; + u16 statAnimId = 0; + s32 changeableStatsCount = 0; + u8 statsToCheck = 0; + + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + statsToCheck = gBattlescriptCurrInstr[2]; + if (gBattlescriptCurrInstr[3] & ATK48_STAT_NEGATIVE) // goes down + { + s16 startingStatAnimId; + if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) + startingStatAnimId = STAT_ANIM_MINUS2 - 1; + else + startingStatAnimId = STAT_ANIM_MINUS1 - 1; + + while (statsToCheck != 0) + { + if (statsToCheck & 1) + { + if (gBattlescriptCurrInstr[3] & ATK48_DONT_CHECK_LOWER) + { + if (gBattleMons[gActiveBattler].statStages[currStat] > 0) + { + statAnimId = startingStatAnimId + currStat; + ++changeableStatsCount; + } + } + else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer + && gBattleMons[gActiveBattler].ability != ABILITY_CLEAR_BODY + && gBattleMons[gActiveBattler].ability != ABILITY_WHITE_SMOKE + && !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_ACC) + && !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK)) + { + if (gBattleMons[gActiveBattler].statStages[currStat] > 0) + { + statAnimId = startingStatAnimId + currStat; + ++changeableStatsCount; + } + } + } + statsToCheck >>= 1; + ++currStat; + } + + if (changeableStatsCount > 1) // more than one stat, so the color is gray + { + if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) + statAnimId = STAT_ANIM_MULTIPLE_MINUS2; + else + statAnimId = STAT_ANIM_MULTIPLE_MINUS1; + } + } + else // goes up + { + s16 startingStatAnimId; + if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) + startingStatAnimId = STAT_ANIM_PLUS2 - 1; + else + startingStatAnimId = STAT_ANIM_PLUS1 - 1; + + while (statsToCheck != 0) + { + if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < 0xC) + { + statAnimId = startingStatAnimId + currStat; + ++changeableStatsCount; + } + statsToCheck >>= 1; + ++currStat; + } + if (changeableStatsCount > 1) // more than one stat, so the color is gray + { + if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) + statAnimId = STAT_ANIM_MULTIPLE_PLUS2; + else + statAnimId = STAT_ANIM_MULTIPLE_PLUS1; + } + } + if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount < 2) + { + gBattlescriptCurrInstr += 4; + } + else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed) + { + BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId); + MarkBattlerForControllerExec(gActiveBattler); + if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount > 1) + gBattleScripting.statAnimPlayed = TRUE; + gBattlescriptCurrInstr += 4; + } + else + { + gBattlescriptCurrInstr += 4; + } +} + +void atk49_moveend(void) +{ + s32 i; + bool32 effect = FALSE; + u8 moveType = 0; + u8 holdEffectAtk = 0; + u16 *choicedMoveAtk = NULL; + u8 arg1, arg2; + u16 originallyUsedMove; + + if (gChosenMove == 0xFFFF) + originallyUsedMove = 0; + else + originallyUsedMove = gChosenMove; + arg1 = gBattlescriptCurrInstr[1]; + arg2 = gBattlescriptCurrInstr[2]; + if (gBattleMons[gBattlerAttacker].item == ITEM_ENIGMA_BERRY) + holdEffectAtk = gEnigmaBerries[gBattlerAttacker].holdEffect; + else + holdEffectAtk = ItemId_GetHoldEffect(gBattleMons[gBattlerAttacker].item); + choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker]; + GET_MOVE_TYPE(gCurrentMove, moveType); + do + { + switch (gBattleScripting.atk49_state) + { + case ATK49_RAGE: // rage check + if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE + && gBattleMons[gBattlerTarget].hp != 0 + && gBattlerAttacker != gBattlerTarget + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && gBattleMoves[gCurrentMove].power + && gBattleMons[gBattlerTarget].statStages[STAT_ATK] <= 0xB) + { + ++gBattleMons[gBattlerTarget].statStages[STAT_ATK]; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_RageIsBuilding; + effect = TRUE; + } + ++gBattleScripting.atk49_state; + break; + case ATK49_DEFROST: // defrosting check + if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE + && gBattleMons[gBattlerTarget].hp != 0 + && gBattlerAttacker != gBattlerTarget + && gSpecialStatuses[gBattlerTarget].specialDmg + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && moveType == TYPE_FIRE) + { + gBattleMons[gBattlerTarget].status1 &= ~(STATUS1_FREEZE); + gActiveBattler = gBattlerTarget; + BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gActiveBattler); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; + effect = TRUE; + } + ++gBattleScripting.atk49_state; + break; + case ATK49_SYNCHRONIZE_TARGET: // target synchronize + if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBattlerTarget, 0, 0, 0)) + effect = TRUE; + ++gBattleScripting.atk49_state; + break; + case ATK49_MOVE_END_ABILITIES: // Such as abilities activating on contact(Poison Spore, Rough Skin, etc.). + if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerTarget, 0, 0, 0)) + effect = TRUE; + ++gBattleScripting.atk49_state; + break; + case ATK49_STATUS_IMMUNITY_ABILITIES: // status immunities + if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0)) + effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers + else + ++gBattleScripting.atk49_state; + break; + case ATK49_SYNCHRONIZE_ATTACKER: // attacker synchronize + if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBattlerAttacker, 0, 0, 0)) + effect = TRUE; + ++gBattleScripting.atk49_state; + break; + case ATK49_CHOICE_MOVE: // update choice band move + if (gHitMarker & HITMARKER_OBEYS + && holdEffectAtk == HOLD_EFFECT_CHOICE_BAND + && gChosenMove != MOVE_STRUGGLE + && (*choicedMoveAtk == 0 || *choicedMoveAtk == 0xFFFF)) + { + if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED)) + { + ++gBattleScripting.atk49_state; + break; + } + *choicedMoveAtk = gChosenMove; + } + for (i = 0; i < MAX_MON_MOVES; ++i) + { + if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk) + break; + } + if (i == MAX_MON_MOVES) + *choicedMoveAtk = 0; + ++gBattleScripting.atk49_state; + break; + case ATK49_CHANGED_ITEMS: // changed held items + for (i = 0; i < gBattlersCount; ++i) + { + u16 *changedItem = &gBattleStruct->changedItems[i]; + + if (*changedItem != 0) + { + gBattleMons[i].item = *changedItem; + *changedItem = 0; + } + } + ++gBattleScripting.atk49_state; + break; + case ATK49_ITEM_EFFECTS_ALL: // item effects for all battlers + if (ItemBattleEffects(ITEMEFFECT_MOVE_END, 0, FALSE)) + effect = TRUE; + else + ++gBattleScripting.atk49_state; + break; + case ATK49_KINGSROCK_SHELLBELL: // king's rock and shell bell + if (ItemBattleEffects(ITEMEFFECT_KINGSROCK_SHELLBELL, 0, FALSE)) + effect = TRUE; + ++gBattleScripting.atk49_state; + break; + case ATK49_ATTACKER_INVISIBLE: // make attacker sprite invisible + if (gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE) + && gHitMarker & HITMARKER_NO_ANIMATIONS) + { + gActiveBattler = gBattlerAttacker; + BtlController_EmitSpriteInvisibility(0, TRUE); + MarkBattlerForControllerExec(gActiveBattler); + ++gBattleScripting.atk49_state; + return; + } + ++gBattleScripting.atk49_state; + break; + case ATK49_ATTACKER_VISIBLE: // make attacker sprite visible + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT + || !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)) + || WasUnableToUseMove(gBattlerAttacker)) + { + gActiveBattler = gBattlerAttacker; + BtlController_EmitSpriteInvisibility(0, FALSE); + MarkBattlerForControllerExec(gActiveBattler); + gStatuses3[gBattlerAttacker] &= ~(STATUS3_SEMI_INVULNERABLE); + gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = 1; + ++gBattleScripting.atk49_state; + return; + } + ++gBattleScripting.atk49_state; + break; + case ATK49_TARGET_VISIBLE: // make target sprite visible + if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite + && gBattlerTarget < gBattlersCount + && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)) + { + gActiveBattler = gBattlerTarget; + BtlController_EmitSpriteInvisibility(0, FALSE); + MarkBattlerForControllerExec(gActiveBattler); + gStatuses3[gBattlerTarget] &= ~(STATUS3_SEMI_INVULNERABLE); + ++gBattleScripting.atk49_state; + return; + } + ++gBattleScripting.atk49_state; + break; + case ATK49_SUBSTITUTE: // update substitute + for (i = 0; i < gBattlersCount; ++i) + { + if (gDisableStructs[i].substituteHP == 0) + gBattleMons[i].status2 &= ~(STATUS2_SUBSTITUTE); + } + ++gBattleScripting.atk49_state; + break; + case ATK49_UPDATE_LAST_MOVES: + if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET) + { + gActiveBattler = gBattlerAttacker; + gBattlerAttacker = gBattlerTarget; + gBattlerTarget = gActiveBattler; + gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET); + } + if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) + { + gLastPrintedMoves[gBattlerAttacker] = gChosenMove; + } + if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) + && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker]) + && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS) + { + if (gHitMarker & HITMARKER_OBEYS) + { + gLastMoves[gBattlerAttacker] = gChosenMove; + gLastResultingMoves[gBattlerAttacker] = gCurrentMove; + } + else + { + gLastMoves[gBattlerAttacker] = 0xFFFF; + gLastResultingMoves[gBattlerAttacker] = 0xFFFF; + } + + if (!(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))) + gLastHitBy[gBattlerTarget] = gBattlerAttacker; + + if (gHitMarker & HITMARKER_OBEYS && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + { + if (gChosenMove == 0xFFFF) + { + gLastLandedMoves[gBattlerTarget] = gChosenMove; + } + else + { + gLastLandedMoves[gBattlerTarget] = gCurrentMove; + GET_MOVE_TYPE(gCurrentMove, gLastHitByType[gBattlerTarget]); + } + } + else + { + gLastLandedMoves[gBattlerTarget] = 0xFFFF; + } + } + ++gBattleScripting.atk49_state; + break; + case ATK49_MIRROR_MOVE: // mirror move + if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) + && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker]) + && gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED + && gHitMarker & HITMARKER_OBEYS + && gBattlerAttacker != gBattlerTarget + && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget)) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + { + u8 target, attacker; + + *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 0) = gChosenMove; + *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 1) = gChosenMove >> 8; + target = gBattlerTarget; + attacker = gBattlerAttacker; + *(attacker * 2 + target * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = gChosenMove; + target = gBattlerTarget; + attacker = gBattlerAttacker; + *(attacker * 2 + target * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = gChosenMove >> 8; + } + ++gBattleScripting.atk49_state; + break; + case ATK49_NEXT_TARGET: // For moves hitting two opposing Pokemon. + if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && !gProtectStructs[gBattlerAttacker].chargingTurn + && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH + && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) + { + u8 battlerId = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); + if (gBattleMons[battlerId].hp != 0) + { + gBattlerTarget = battlerId; + gHitMarker |= HITMARKER_NO_ATTACKSTRING; + gBattleScripting.atk49_state = 0; + MoveValuesCleanUp(); + BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); + gBattlescriptCurrInstr = BattleScript_FlushMessageBox; + return; + } + else + { + gHitMarker |= HITMARKER_NO_ATTACKSTRING; + } + } + ++gBattleScripting.atk49_state; + break; + case ATK49_COUNT: + break; + } + if (arg1 == 1 && effect == FALSE) + gBattleScripting.atk49_state = ATK49_COUNT; + if (arg1 == 2 && arg2 == gBattleScripting.atk49_state) + gBattleScripting.atk49_state = ATK49_COUNT; + } + while (gBattleScripting.atk49_state != ATK49_COUNT && effect == FALSE); + if (gBattleScripting.atk49_state == ATK49_COUNT && effect == FALSE) + gBattlescriptCurrInstr += 3; +} + +void atk4A_typecalc2(void) +{ + u8 flags = 0; + s32 i = 0; + u8 moveType = gBattleMoves[gCurrentMove].type; + + if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) + { + gLastUsedAbility = gBattleMons[gBattlerTarget].ability; + gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE); + gLastLandedMoves[gBattlerTarget] = 0; + gBattleCommunication[6] = moveType; + RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); + } + else + { + while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) + { + if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) + { + if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT) + { + break; + } + else + { + i += 3; + continue; + } + } + if (TYPE_EFFECT_ATK_TYPE(i) == moveType) + { + // check type1 + if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1) + { + if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT) + { + gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; + break; + } + if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE) + { + flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE; + } + if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) + { + flags |= MOVE_RESULT_SUPER_EFFECTIVE; + } + } + // check type2 + if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2) + { + if (gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 + && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT) + { + gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; + break; + } + if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 + && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 + && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE) + { + flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE; + } + if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 + && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 + && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) + { + flags |= MOVE_RESULT_SUPER_EFFECTIVE; + } + } + } + i += 3; + } + } + if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD + && !(flags & MOVE_RESULT_NO_EFFECT) + && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2 + && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE))) + && gBattleMoves[gCurrentMove].power) + { + gLastUsedAbility = ABILITY_WONDER_GUARD; + gMoveResultFlags |= MOVE_RESULT_MISSED; + gLastLandedMoves[gBattlerTarget] = 0; + gBattleCommunication[6] = 3; + RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); + } + if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) + gProtectStructs[gBattlerAttacker].targetNotAffected = 1; + ++gBattlescriptCurrInstr; +} + +void atk4B_returnatktoball(void) +{ + gActiveBattler = gBattlerAttacker; + if (!(gHitMarker & HITMARKER_FAINTED(gActiveBattler))) + { + BtlController_EmitReturnMonToBall(0, 0); + MarkBattlerForControllerExec(gActiveBattler); + } + ++gBattlescriptCurrInstr; +} + +void atk4C_getswitchedmondata(void) +{ + if (!gBattleControllerExecFlags) + { + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gBattlerPartyIndexes[gActiveBattler] = *(gBattleStruct->monToSwitchIntoId + gActiveBattler); + BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]]); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 2; + } +} + +void atk4D_switchindataupdate(void) +{ + struct BattlePokemon oldData; + s32 i; + u8 *monData; + + if (!gBattleControllerExecFlags) + { + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + oldData = gBattleMons[gActiveBattler]; + monData = (u8 *)(&gBattleMons[gActiveBattler]); + for (i = 0; i < sizeof(struct BattlePokemon); ++i) + { + monData[i] = gBattleBufferB[gActiveBattler][4 + i]; + } + gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; + gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; + gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); + // check knocked off item + i = GetBattlerSide(gActiveBattler); + if (gWishFutureKnock.knockedOffMons[i] & gBitTable[gBattlerPartyIndexes[gActiveBattler]]) + gBattleMons[gActiveBattler].item = 0; + if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) + { + for (i = 0; i < NUM_BATTLE_STATS; ++i) + { + gBattleMons[gActiveBattler].statStages[i] = oldData.statStages[i]; + } + gBattleMons[gActiveBattler].status2 = oldData.status2; + } + SwitchInClearSetData(); + gBattleScripting.battler = gActiveBattler; + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]); + gBattlescriptCurrInstr += 2; + } +} + +void atk4E_switchinanim(void) +{ + if (!gBattleControllerExecFlags) + { + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT + && !(gBattleTypeFlags & + (BATTLE_TYPE_LINK + | BATTLE_TYPE_LEGENDARY + | BATTLE_TYPE_OLDMAN_TUTORIAL + | BATTLE_TYPE_POKEDUDE + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_GHOST))) + HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); + gAbsentBattlerFlags &= ~(gBitTable[gActiveBattler]); + BtlController_EmitSwitchInAnim(0, gBattlerPartyIndexes[gActiveBattler], gBattlescriptCurrInstr[2]); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 3; + } +} + +void atk4F_jumpifcantswitch(void) +{ + s32 i; + s32 lastMonId; + struct Pokemon *party; + + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(ATK4F_DONT_CHECK_STATUSES)); + if (!(gBattlescriptCurrInstr[1] & ATK4F_DONT_CHECK_STATUSES) + && ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + || (gStatuses3[gActiveBattler] & STATUS3_ROOTED))) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + } + else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + party = gEnemyParty; + else + party = gPlayerParty; + + i = 0; + if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE) + i = 3; + for (lastMonId = i + 3; i < lastMonId; ++i) + { + if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[i], MON_DATA_IS_EGG) + && GetMonData(&party[i], MON_DATA_HP) != 0 + && gBattlerPartyIndexes[gActiveBattler] != i) + break; + } + if (i == lastMonId) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; + } + else + { + u8 battlerIn1, battlerIn2; + + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + { + battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + else + battlerIn2 = battlerIn1; + party = gEnemyParty; + } + else + { + battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + battlerIn2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + else + battlerIn2 = battlerIn1; + party = gPlayerParty; + } + for (i = 0; i < PARTY_SIZE; ++i) + { + if (GetMonData(&party[i], MON_DATA_HP) != 0 + && GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[i], MON_DATA_IS_EGG) + && i != gBattlerPartyIndexes[battlerIn1] + && i != gBattlerPartyIndexes[battlerIn2]) + break; + } + if (i == 6) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; + } +} + +void sub_8024398(u8 arg0) +{ + *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + BtlController_EmitChoosePokemon(0, PARTY_MUST_CHOOSE_MON, arg0, 0, gBattleStruct->field_60[gActiveBattler]); + MarkBattlerForControllerExec(gActiveBattler); +} diff --git a/src/pokemon.c b/src/pokemon.c index e21643c51..e476ab456 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6465,9 +6465,9 @@ bool8 sub_80435E0(void) return retVal; } -bool8 GetLinkTrainerFlankId(u8 linkPlayerId) +bool16 GetLinkTrainerFlankId(u8 linkPlayerId) { - bool8 retVal = FALSE; + bool16 retVal = FALSE; switch (gLinkPlayers[linkPlayerId].id) { case 0: |