diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-08-26 14:38:40 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-08-26 14:38:40 +0800 |
commit | 184066d1c106d6dc61621504abe808112b48674e (patch) | |
tree | d62ab69e194b98defb519d825efa8cae48ee8fc6 | |
parent | db0d8e5bdbc0d043312ac78c5cec0ec53d7f45d6 (diff) |
thru atk6B
-rw-r--r-- | asm/battle_script_commands.s | 3695 | ||||
-rw-r--r-- | asm/evolution_scene.s | 4 | ||||
-rw-r--r-- | asm/learn_move.s | 2 | ||||
-rw-r--r-- | asm/party_menu.s | 2 | ||||
-rw-r--r-- | asm/pokemon_summary_screen.s | 6 | ||||
-rw-r--r-- | asm/script_pokemon_util_80BF8FC.s | 2 | ||||
-rw-r--r-- | include/battle.h | 3 | ||||
-rw-r--r-- | include/battle_main.h | 3 | ||||
-rw-r--r-- | include/battle_script_commands.h | 4 | ||||
-rw-r--r-- | include/battle_scripts.h | 1 | ||||
-rw-r--r-- | include/constants/trainers.h | 12 | ||||
-rw-r--r-- | include/overworld.h | 1 | ||||
-rw-r--r-- | include/pokemon_summary_screen.h | 36 | ||||
-rw-r--r-- | include/strings.h | 3 | ||||
-rw-r--r-- | src/battle_script_commands.c | 1233 |
15 files changed, 1300 insertions, 3707 deletions
diff --git a/asm/battle_script_commands.s b/asm/battle_script_commands.s index ed848ba78..7a0f29fb8 100644 --- a/asm/battle_script_commands.s +++ b/asm/battle_script_commands.s @@ -5,3701 +5,6 @@ .text - thumb_func_start atk50_openpartyscreen -atk50_openpartyscreen: @ 80243EC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - movs r7, 0 - movs r0, 0 - mov r9, r0 - ldr r6, _08024498 @ =gBattlescriptCurrInstr - ldr r2, [r6] - 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 - mov r8, r1 - ldrb r1, [r2, 0x1] - adds r0, r1, 0 - mov r12, r6 - cmp r0, 0x5 - beq _08024422 - b _080248B8 -_08024422: - ldr r0, _0802449C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x41 - ands r1, r0 - cmp r1, 0x1 - beq _08024510 - ldr r1, _080244A0 @ =gActiveBattler - strb r7, [r1] - ldr r0, _080244A4 @ =gBattlersCount - ldrb r0, [r0] - cmp r7, r0 - bcc _0802443C - b _080248A6 -_0802443C: - ldr r7, _080244A8 @ =gHitMarker - ldr r6, _080244AC @ =gBitTable - adds r4, r1, 0 - ldr r2, _080244B0 @ =gAbsentBattlerFlags - mov r8, r2 -_08024446: - ldrb r2, [r4] - lsls r0, r2, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r7] - ands r0, r1 - cmp r0, 0 - beq _080244E8 - adds r0, r2, 0 - movs r1, 0x6 - movs r2, 0x6 - bl HasNoMonsToSwitch - lsls r0, 24 - cmp r0, 0 - beq _080244B4 - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - mov r2, r8 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r7] - bics r0, r1 - str r0, [r7] - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBattlerForControllerExec - b _080244F6 - .align 2, 0 -_08024498: .4byte gBattlescriptCurrInstr -_0802449C: .4byte gBattleTypeFlags -_080244A0: .4byte gActiveBattler -_080244A4: .4byte gBattlersCount -_080244A8: .4byte gHitMarker -_080244AC: .4byte gBitTable -_080244B0: .4byte gAbsentBattlerFlags -_080244B4: - ldr r5, _080244E4 @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _080244F6 - movs r0, 0x6 - bl sub_8024398 - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _080244F6 - .align 2, 0 -_080244E4: .4byte gSpecialStatuses -_080244E8: - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_080244F6: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _0802450C @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08024446 - b _080248A6 - .align 2, 0 -_0802450C: .4byte gBattlersCount -_08024510: - ands r0, r1 - cmp r0, 0 - bne _08024518 - b _080248A6 -_08024518: - ldr r0, _08024570 @ =gHitMarker - mov r8, r0 - ldr r0, [r0] - lsrs r5, r0, 28 - ldr r6, _08024574 @ =gBitTable - ldr r0, [r6] - ands r0, r5 - cmp r0, 0 - beq _080245CE - ldr r4, _08024578 @ =gActiveBattler - strb r7, [r4] - movs r0, 0 - movs r1, 0x6 - movs r2, 0x6 - bl HasNoMonsToSwitch - lsls r0, 24 - cmp r0, 0 - beq _08024580 - ldr r2, _0802457C @ =gAbsentBattlerFlags - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - mov r2, r8 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl BtlController_EmitCmd42 - ldrb r0, [r4] - bl MarkBattlerForControllerExec - b _080245CE - .align 2, 0 -_08024570: .4byte gHitMarker -_08024574: .4byte gBitTable -_08024578: .4byte gActiveBattler -_0802457C: .4byte gAbsentBattlerFlags -_08024580: - ldr r6, _080245B4 @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _080245BC - ldr r0, _080245B8 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x5E - ldrb r0, [r0] - bl sub_8024398 - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _080245CE - .align 2, 0 -_080245B4: .4byte gSpecialStatuses -_080245B8: .4byte gBattleStruct -_080245BC: - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBattlerForControllerExec - movs r0, 0x1 - mov r9, r0 -_080245CE: - ldr r6, _08024628 @ =gBitTable - ldr r0, [r6, 0x8] - ands r0, r5 - cmp r0, 0 - beq _0802468C - ldr r0, [r6] - ands r0, r5 - cmp r0, 0 - bne _0802468C - ldr r4, _0802462C @ =gActiveBattler - movs r0, 0x2 - strb r0, [r4] - movs r0, 0x2 - movs r1, 0x6 - movs r2, 0x6 - bl HasNoMonsToSwitch - lsls r0, 24 - cmp r0, 0 - beq _08024638 - ldr r2, _08024630 @ =gAbsentBattlerFlags - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r2, _08024634 @ =gHitMarker - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl BtlController_EmitCmd42 - ldrb r0, [r4] - bl MarkBattlerForControllerExec - b _0802468C - .align 2, 0 -_08024628: .4byte gBitTable -_0802462C: .4byte gActiveBattler -_08024630: .4byte gAbsentBattlerFlags -_08024634: .4byte gHitMarker -_08024638: - ldr r6, _0802466C @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08024674 - ldr r0, _08024670 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x5C - ldrb r0, [r0] - bl sub_8024398 - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _0802468C - .align 2, 0 -_0802466C: .4byte gSpecialStatuses -_08024670: .4byte gBattleStruct -_08024674: - movs r0, 0x1 - mov r1, r9 - ands r0, r1 - cmp r0, 0 - bne _0802468C - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_0802468C: - ldr r6, _080246DC @ =gBitTable - ldr r0, [r6, 0x4] - ands r0, r5 - cmp r0, 0 - beq _0802473E - ldr r4, _080246E0 @ =gActiveBattler - movs r0, 0x1 - strb r0, [r4] - movs r0, 0x1 - movs r1, 0x6 - movs r2, 0x6 - bl HasNoMonsToSwitch - lsls r0, 24 - cmp r0, 0 - beq _080246EC - ldr r2, _080246E4 @ =gAbsentBattlerFlags - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r2, _080246E8 @ =gHitMarker - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl BtlController_EmitCmd42 - ldrb r0, [r4] - bl MarkBattlerForControllerExec - b _0802473E - .align 2, 0 -_080246DC: .4byte gBitTable -_080246E0: .4byte gActiveBattler -_080246E4: .4byte gAbsentBattlerFlags -_080246E8: .4byte gHitMarker -_080246EC: - ldr r6, _08024720 @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08024728 - ldr r0, _08024724 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x5F - ldrb r0, [r0] - bl sub_8024398 - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _0802473E - .align 2, 0 -_08024720: .4byte gSpecialStatuses -_08024724: .4byte gBattleStruct -_08024728: - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBattlerForControllerExec - movs r0, 0x2 - mov r2, r9 - orrs r2, r0 - mov r9, r2 -_0802473E: - ldr r6, _08024798 @ =gBitTable - ldr r0, [r6, 0xC] - ands r0, r5 - cmp r0, 0 - beq _080247FC - ldr r0, [r6, 0x4] - ands r0, r5 - cmp r0, 0 - bne _080247FC - ldr r4, _0802479C @ =gActiveBattler - movs r0, 0x3 - strb r0, [r4] - movs r0, 0x3 - movs r1, 0x6 - movs r2, 0x6 - bl HasNoMonsToSwitch - lsls r0, 24 - cmp r0, 0 - beq _080247A8 - ldr r2, _080247A0 @ =gAbsentBattlerFlags - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r2, _080247A4 @ =gHitMarker - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl BtlController_EmitCmd42 - ldrb r0, [r4] - bl MarkBattlerForControllerExec - b _080247FC - .align 2, 0 -_08024798: .4byte gBitTable -_0802479C: .4byte gActiveBattler -_080247A0: .4byte gAbsentBattlerFlags -_080247A4: .4byte gHitMarker -_080247A8: - ldr r6, _080247DC @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _080247E4 - ldr r0, _080247E0 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x5D - ldrb r0, [r0] - bl sub_8024398 - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _080247FC - .align 2, 0 -_080247DC: .4byte gSpecialStatuses -_080247E0: .4byte gBattleStruct -_080247E4: - movs r0, 0x2 - mov r1, r9 - ands r1, r0 - cmp r1, 0 - bne _080247FC - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_080247FC: - ldr r1, _0802482C @ =gSpecialStatuses - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08024850 - adds r0, r1, 0 - adds r0, 0x28 - ldrb r0, [r0] - lsls r0, 25 - cmp r0, 0 - blt _08024850 - cmp r5, 0 - beq _08024850 - ldr r0, _08024830 @ =gAbsentBattlerFlags - ldrb r1, [r0] - ldr r0, _08024834 @ =gBitTable - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0802483C - ldr r1, _08024838 @ =gActiveBattler - movs r0, 0x2 - strb r0, [r1] - b _08024840 - .align 2, 0 -_0802482C: .4byte gSpecialStatuses -_08024830: .4byte gAbsentBattlerFlags -_08024834: .4byte gBitTable -_08024838: .4byte gActiveBattler -_0802483C: - ldr r0, _08024880 @ =gActiveBattler - strb r1, [r0] -_08024840: - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldr r0, _08024880 @ =gActiveBattler - ldrb r0, [r0] - bl MarkBattlerForControllerExec -_08024850: - ldr r1, _08024884 @ =gSpecialStatuses - ldrb r0, [r1, 0x14] - lsls r0, 25 - cmp r0, 0 - blt _080248A6 - adds r0, r1, 0 - adds r0, 0x3C - ldrb r0, [r0] - lsls r0, 25 - cmp r0, 0 - blt _080248A6 - cmp r5, 0 - beq _080248A6 - ldr r0, _08024888 @ =gAbsentBattlerFlags - ldrb r0, [r0] - ldr r1, _0802488C @ =gBitTable - ldr r1, [r1, 0x4] - ands r0, r1 - cmp r0, 0 - beq _08024890 - ldr r1, _08024880 @ =gActiveBattler - movs r0, 0x3 - b _08024894 - .align 2, 0 -_08024880: .4byte gActiveBattler -_08024884: .4byte gSpecialStatuses -_08024888: .4byte gAbsentBattlerFlags -_0802488C: .4byte gBitTable -_08024890: - ldr r1, _080248B0 @ =gActiveBattler - movs r0, 0x1 -_08024894: - strb r0, [r1] - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldr r0, _080248B0 @ =gActiveBattler - ldrb r0, [r0] - bl MarkBattlerForControllerExec -_080248A6: - ldr r1, _080248B4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] - b _08024C2E - .align 2, 0 -_080248B0: .4byte gActiveBattler -_080248B4: .4byte gBattlescriptCurrInstr -_080248B8: - cmp r0, 0x6 - beq _080248BE - b _08024AAC -_080248BE: - ldr r0, _08024934 @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080248CC - b _08024A48 -_080248CC: - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - bne _080248D6 - b _08024A48 -_080248D6: - ldr r7, _08024938 @ =gHitMarker - ldr r0, [r7] - lsrs r5, r0, 28 - ldr r4, _0802493C @ =gBitTable - ldr r0, [r4, 0x8] - ands r0, r5 - cmp r0, 0 - beq _0802497E - ldr r0, [r4] - ands r0, r5 - cmp r0, 0 - beq _0802497E - ldr r6, _08024940 @ =gActiveBattler - movs r0, 0x2 - strb r0, [r6] - ldr r0, _08024944 @ =gBattleBufferB - ldrb r1, [r0, 0x1] - movs r0, 0x2 - movs r2, 0x6 - bl HasNoMonsToSwitch - lsls r0, 24 - cmp r0, 0 - beq _0802494C - ldr r2, _08024948 @ =gAbsentBattlerFlags - ldrb r0, [r6] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r6] - lsls r0, 2 - adds r0, r4 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r7] - bics r0, r1 - str r0, [r7] - movs r0, 0 - bl BtlController_EmitCmd42 - ldrb r0, [r6] - bl MarkBattlerForControllerExec - b _0802497E - .align 2, 0 -_08024934: .4byte gBattleTypeFlags -_08024938: .4byte gHitMarker -_0802493C: .4byte gBitTable -_08024940: .4byte gActiveBattler -_08024944: .4byte gBattleBufferB -_08024948: .4byte gAbsentBattlerFlags -_0802494C: - ldr r4, _080249DC @ =gSpecialStatuses - ldrb r0, [r6] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _0802497E - ldr r0, _080249E0 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x5C - ldrb r0, [r0] - bl sub_8024398 - ldrb r1, [r6] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] -_0802497E: - ldr r4, _080249E4 @ =gBitTable - ldr r0, [r4, 0xC] - ands r0, r5 - cmp r0, 0 - beq _08024A2E - ldr r0, [r4, 0x4] - ands r5, r0 - cmp r5, 0 - beq _08024A2E - ldr r5, _080249E8 @ =gActiveBattler - movs r0, 0x3 - strb r0, [r5] - ldr r0, _080249EC @ =gBattleBufferB - ldr r2, _080249F0 @ =0x00000201 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x3 - movs r2, 0x6 - bl HasNoMonsToSwitch - lsls r0, 24 - cmp r0, 0 - beq _080249FC - ldr r2, _080249F4 @ =gAbsentBattlerFlags - ldrb r0, [r5] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldr r2, _080249F8 @ =gHitMarker - ldrb r0, [r5] - lsls r0, 2 - adds r0, r4 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - movs r0, 0 - bl BtlController_EmitCmd42 - ldrb r0, [r5] - bl MarkBattlerForControllerExec - b _08024A2E - .align 2, 0 -_080249DC: .4byte gSpecialStatuses -_080249E0: .4byte gBattleStruct -_080249E4: .4byte gBitTable -_080249E8: .4byte gActiveBattler -_080249EC: .4byte gBattleBufferB -_080249F0: .4byte 0x00000201 -_080249F4: .4byte gAbsentBattlerFlags -_080249F8: .4byte gHitMarker -_080249FC: - ldr r4, _08024A3C @ =gSpecialStatuses - ldrb r0, [r5] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1] - lsls r0, 25 - cmp r0, 0 - blt _08024A2E - ldr r0, _08024A40 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x5D - ldrb r0, [r0] - bl sub_8024398 - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] -_08024A2E: - ldr r1, _08024A44 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] - mov r12, r1 - b _08024A4C - .align 2, 0 -_08024A3C: .4byte gSpecialStatuses -_08024A40: .4byte gBattleStruct -_08024A44: .4byte gBattlescriptCurrInstr -_08024A48: - adds r0, r2, 0x6 - str r0, [r6] -_08024A4C: - ldr r0, _08024A9C @ =gHitMarker - ldr r0, [r0] - lsrs r5, r0, 28 - ldr r1, _08024AA0 @ =gBattlerFainted - movs r0, 0 - strb r0, [r1] - ldr r4, _08024AA4 @ =gBitTable - ldr r2, [r4] - ands r2, r5 - ldr r6, _08024AA8 @ =gBattlersCount - cmp r2, 0 - bne _08024A88 - adds r7, r6, 0 - ldrb r0, [r6] - cmp r2, r0 - bcs _08024A88 - adds r3, r1, 0 -_08024A6E: - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] - ldrb r2, [r3] - lsls r0, r2, 2 - adds r0, r4 - ldr r0, [r0] - ands r0, r5 - cmp r0, 0 - bne _08024A88 - ldrb r0, [r7] - cmp r2, r0 - bcc _08024A6E -_08024A88: - ldrb r0, [r1] - ldrb r6, [r6] - cmp r0, r6 - beq _08024A92 - b _08024C2E -_08024A92: - mov r1, r8 - mov r2, r12 - str r1, [r2] - b _08024C2E - .align 2, 0 -_08024A9C: .4byte gHitMarker -_08024AA0: .4byte gBattlerFainted -_08024AA4: .4byte gBitTable -_08024AA8: .4byte gBattlersCount -_08024AAC: - movs r0, 0x80 - ands r0, r1 - movs r5, 0x1 - cmp r0, 0 - beq _08024AB8 - movs r5, 0 -_08024AB8: - movs r0, 0x7F - ands r0, r1 - bl GetBattlerForBattleScript - lsls r0, 24 - lsrs r7, r0, 24 - ldr r1, _08024AE0 @ =gSpecialStatuses - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 25 - cmp r0, 0 - bge _08024AE4 - ldr r0, [r6] - adds r0, 0x6 - str r0, [r6] - b _08024C2E - .align 2, 0 -_08024AE0: .4byte gSpecialStatuses -_08024AE4: - adds r0, r7, 0 - movs r1, 0x6 - movs r2, 0x6 - bl HasNoMonsToSwitch - lsls r0, 24 - cmp r0, 0 - beq _08024B34 - ldr r2, _08024B24 @ =gActiveBattler - strb r7, [r2] - ldr r3, _08024B28 @ =gAbsentBattlerFlags - ldr r4, _08024B2C @ =gBitTable - ldrb r0, [r2] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - ldrb r1, [r3] - orrs r0, r1 - strb r0, [r3] - ldr r3, _08024B30 @ =gHitMarker - ldrb r0, [r2] - lsls r0, 2 - adds r0, r4 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r3] - bics r0, r1 - str r0, [r3] - mov r0, r8 - str r0, [r6] - b _08024C2E - .align 2, 0 -_08024B24: .4byte gActiveBattler -_08024B28: .4byte gAbsentBattlerFlags -_08024B2C: .4byte gBitTable -_08024B30: .4byte gHitMarker -_08024B34: - ldr r4, _08024BD8 @ =gActiveBattler - strb r7, [r4] - ldrb r0, [r4] - ldr r3, _08024BDC @ =gBattleStruct - ldr r1, [r3] - adds r1, r0, r1 - adds r1, 0x58 - ldr r2, _08024BE0 @ =gBattlerPartyIndexes - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1] - ldrb r1, [r4] - movs r0, 0x2 - eors r0, r1 - ldr r3, [r3] - adds r0, r3 - adds r0, 0x5C - ldrb r2, [r0] - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - adds r0, 0x60 - adds r3, r0 - str r3, [sp] - movs r0, 0 - adds r1, r5, 0 - movs r3, 0 - bl BtlController_EmitChoosePokemon - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r0, [r6] - adds r0, 0x6 - str r0, [r6] - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - bne _08024B94 - ldr r1, _08024BE4 @ =gBattleResults - ldrb r0, [r1, 0x2] - cmp r0, 0xFE - bhi _08024B94 - adds r0, 0x1 - strb r0, [r1, 0x2] -_08024B94: - ldr r0, _08024BE8 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08024BF0 - ldr r1, _08024BD8 @ =gActiveBattler - movs r0, 0 - strb r0, [r1] - ldr r0, _08024BEC @ =gBattlersCount - ldrb r0, [r0] - cmp r0, 0 - beq _08024C2E - adds r4, r1, 0 -_08024BB0: - ldrb r0, [r4] - cmp r0, r7 - beq _08024BC4 - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_08024BC4: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08024BEC @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08024BB0 - b _08024C2E - .align 2, 0 -_08024BD8: .4byte gActiveBattler -_08024BDC: .4byte gBattleStruct -_08024BE0: .4byte gBattlerPartyIndexes -_08024BE4: .4byte gBattleResults -_08024BE8: .4byte gBattleTypeFlags -_08024BEC: .4byte gBattlersCount -_08024BF0: - adds r0, r7, 0 - bl GetBattlerPosition - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerAtPosition - ldr r4, _08024C3C @ =gActiveBattler - strb r0, [r4] - ldr r0, _08024C40 @ =gAbsentBattlerFlags - ldrb r1, [r0] - ldr r2, _08024C44 @ =gBitTable - ldrb r3, [r4] - lsls r0, r3, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _08024C20 - movs r0, 0x2 - eors r3, r0 - strb r3, [r4] -_08024C20: - movs r0, 0 - movs r1, 0x2 - bl BtlController_EmitLinkStandbyMsg - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_08024C2E: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08024C3C: .4byte gActiveBattler -_08024C40: .4byte gAbsentBattlerFlags -_08024C44: .4byte gBitTable - thumb_func_end atk50_openpartyscreen - - thumb_func_start atk51_switchhandleorder -atk51_switchhandleorder: @ 8024C48 - push {r4-r7,lr} - ldr r0, _08024C74 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - beq _08024C54 - b _08024E16 -_08024C54: - ldr r4, _08024C78 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r7, _08024C7C @ =gActiveBattler - strb r0, [r7] - ldr r0, [r4] - ldrb r0, [r0, 0x2] - cmp r0, 0x1 - beq _08024CC4 - cmp r0, 0x1 - bgt _08024C80 - cmp r0, 0 - beq _08024C86 - b _08024E0E - .align 2, 0 -_08024C74: .4byte gBattleControllerExecFlags -_08024C78: .4byte gBattlescriptCurrInstr -_08024C7C: .4byte gActiveBattler -_08024C80: - cmp r0, 0x2 - beq _08024CE0 - b _08024E0E -_08024C86: - movs r3, 0 - ldr r0, _08024CB8 @ =gBattlersCount - ldrb r1, [r0] - cmp r3, r1 - blt _08024C92 - b _08024E0E -_08024C92: - ldr r6, _08024CBC @ =gBattleStruct - ldr r2, _08024CC0 @ =gBattleBufferB - movs r5, 0x80 - lsls r5, 2 - adds r4, r0, 0 -_08024C9C: - ldrb r0, [r2] - cmp r0, 0x22 - bne _08024CAC - ldr r0, [r6] - adds r0, r3, r0 - adds r0, 0x5C - ldrb r1, [r2, 0x1] - strb r1, [r0] -_08024CAC: - adds r2, r5 - adds r3, 0x1 - ldrb r0, [r4] - cmp r3, r0 - blt _08024C9C - b _08024E0E - .align 2, 0 -_08024CB8: .4byte gBattlersCount -_08024CBC: .4byte gBattleStruct -_08024CC0: .4byte gBattleBufferB -_08024CC4: - ldr r0, _08024CDC @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08024CD2 - b _08024E0E -_08024CD2: - ldrb r0, [r7] - bl sub_8013F6C - b _08024E0E - .align 2, 0 -_08024CDC: .4byte gBattleTypeFlags -_08024CE0: - ldr r1, _08024DAC @ =gBattleCommunication - ldr r4, _08024DB0 @ =gBattleBufferB - ldrb r0, [r7] - lsls r0, 9 - adds r2, r4, 0x1 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r7] - ldr r6, _08024DB4 @ =gBattleStruct - ldr r1, [r6] - adds r1, r0, r1 - adds r1, 0x5C - lsls r0, 9 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _08024DB8 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08024DBC - ldrb r0, [r7] - ldr r2, [r6] - lsls r1, r0, 1 - adds r1, r0 - adds r1, r2 - adds r1, 0x60 - ldrb r2, [r1] - movs r0, 0xF - ands r0, r2 - strb r0, [r1] - ldrb r0, [r7] - ldr r2, [r6] - lsls r1, r0, 1 - adds r1, r0 - adds r1, r2 - adds r1, 0x60 - lsls r0, 9 - adds r5, r4, 0x2 - adds r0, r5 - ldrb r2, [r0] - movs r3, 0xF0 - adds r0, r3, 0 - ands r0, r2 - ldrb r2, [r1] - orrs r0, r2 - strb r0, [r1] - ldrb r1, [r7] - ldr r2, [r6] - lsls r0, r1, 1 - adds r0, r1 - adds r0, r2 - adds r0, 0x61 - lsls r1, 9 - adds r4, 0x3 - mov r12, r4 - add r1, r12 - ldrb r1, [r1] - strb r1, [r0] - ldrb r0, [r7] - movs r4, 0x2 - eors r0, r4 - ldr r2, [r6] - lsls r1, r0, 1 - adds r1, r0 - adds r1, r2 - adds r1, 0x60 - ldrb r2, [r1] - adds r0, r3, 0 - ands r0, r2 - strb r0, [r1] - ldrb r0, [r7] - eors r0, r4 - ldr r2, [r6] - lsls r1, r0, 1 - adds r1, r0 - adds r1, r2 - adds r1, 0x60 - ldrb r0, [r7] - lsls r0, 9 - adds r0, r5 - ldrb r0, [r0] - ands r3, r0 - lsrs r3, 4 - ldrb r0, [r1] - orrs r3, r0 - strb r3, [r1] - ldrb r0, [r7] - eors r4, r0 - ldr r0, [r6] - lsls r1, r4, 1 - adds r1, r4 - adds r1, r0 - adds r1, 0x62 - ldrb r0, [r7] - lsls r0, 9 - add r0, r12 - ldrb r0, [r0] - strb r0, [r1] - b _08024DC2 - .align 2, 0 -_08024DAC: .4byte gBattleCommunication -_08024DB0: .4byte gBattleBufferB -_08024DB4: .4byte gBattleStruct -_08024DB8: .4byte gBattleTypeFlags -_08024DBC: - ldrb r0, [r7] - bl sub_8013F6C -_08024DC2: - ldr r1, _08024E1C @ =gBattleTextBuff1 - movs r5, 0xFD - strb r5, [r1] - movs r0, 0x6 - strb r0, [r1, 0x1] - ldr r4, _08024E20 @ =gBattleMons - ldr r3, _08024E24 @ =gBattlerAttacker - ldrb r0, [r3] - movs r2, 0x58 - muls r0, r2 - adds r0, r4 - ldrh r0, [r0] - strb r0, [r1, 0x2] - ldrb r0, [r3] - muls r0, r2 - adds r0, r4 - ldrh r0, [r0] - lsrs r0, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r2, _08024E28 @ =gBattleTextBuff2 - strb r5, [r2] - movs r0, 0x7 - strb r0, [r2, 0x1] - ldr r3, _08024E2C @ =gActiveBattler - ldrb r0, [r3] - strb r0, [r2, 0x2] - ldr r1, _08024E30 @ =gBattleBufferB - ldrb r0, [r3] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2, 0x3] - movs r0, 0x1 - negs r0, r0 - strb r0, [r2, 0x4] -_08024E0E: - ldr r1, _08024E34 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x3 - str r0, [r1] -_08024E16: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08024E1C: .4byte gBattleTextBuff1 -_08024E20: .4byte gBattleMons -_08024E24: .4byte gBattlerAttacker -_08024E28: .4byte gBattleTextBuff2 -_08024E2C: .4byte gActiveBattler -_08024E30: .4byte gBattleBufferB -_08024E34: .4byte gBattlescriptCurrInstr - thumb_func_end atk51_switchhandleorder - - thumb_func_start atk52_switchineffects -atk52_switchineffects: @ 8024E38 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - ldr r6, _08024F40 @ =gBattlescriptCurrInstr - ldr r0, [r6] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r4, _08024F44 @ =gActiveBattler - strb r0, [r4] - ldrb r0, [r4] - bl sub_80174B8 - ldr r2, _08024F48 @ =gHitMarker - ldr r1, _08024F4C @ =gBitTable - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - lsls r1, 28 - ldr r0, [r2] - bics r0, r1 - str r0, [r2] - ldr r2, _08024F50 @ =gSpecialStatuses - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r2, [r1] - movs r0, 0x41 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldrb r0, [r4] - bl GetBattlerSide - ldr r5, _08024F54 @ =gSideStatuses - lsls r0, 24 - lsrs r0, 23 - adds r0, r5 - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 2 - mov r8, r0 - ands r0, r1 - cmp r0, 0 - bne _08024F88 - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 23 - adds r0, r5 - ldrh r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08024F88 - ldr r1, _08024F58 @ =gBattleMons - mov r9, r1 - ldrb r2, [r4] - movs r7, 0x58 - adds r0, r2, 0 - muls r0, r7 - adds r1, r0, r1 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08024F88 - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08024F88 - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1A - beq _08024F88 - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 23 - adds r0, r5 - ldrh r2, [r0] - mov r1, r8 - orrs r1, r2 - strh r1, [r0] - ldrb r0, [r4] - bl GetBattlerSide - ldr r2, _08024F5C @ =gSideTimers - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0xA] - movs r1, 0x5 - subs r1, r0 - lsls r1, 25 - lsrs r1, 24 - ldr r5, _08024F60 @ =gBattleMoveDamage - ldrb r0, [r4] - muls r0, r7 - add r0, r9 - ldrh r0, [r0, 0x2C] - bl __divsi3 - str r0, [r5] - cmp r0, 0 - bne _08024F28 - movs r0, 0x1 - str r0, [r5] -_08024F28: - ldr r0, _08024F64 @ =gBattleScripting - ldrb r1, [r4] - strb r1, [r0, 0x17] - bl BattleScriptPushCursor - ldr r0, [r6] - ldrb r0, [r0, 0x1] - cmp r0, 0 - bne _08024F6C - ldr r0, _08024F68 @ =BattleScript_SpikesOnTarget - str r0, [r6] - b _080250C6 - .align 2, 0 -_08024F40: .4byte gBattlescriptCurrInstr -_08024F44: .4byte gActiveBattler -_08024F48: .4byte gHitMarker -_08024F4C: .4byte gBitTable -_08024F50: .4byte gSpecialStatuses -_08024F54: .4byte gSideStatuses -_08024F58: .4byte gBattleMons -_08024F5C: .4byte gSideTimers -_08024F60: .4byte gBattleMoveDamage -_08024F64: .4byte gBattleScripting -_08024F68: .4byte BattleScript_SpikesOnTarget -_08024F6C: - cmp r0, 0x1 - bne _08024F7C - ldr r0, _08024F78 @ =BattleScript_SpikesOnAttacker - str r0, [r6] - b _080250C6 - .align 2, 0 -_08024F78: .4byte BattleScript_SpikesOnAttacker -_08024F7C: - ldr r0, _08024F84 @ =BattleScript_SpikesOnFaintedBattler - str r0, [r6] - b _080250C6 - .align 2, 0 -_08024F84: .4byte BattleScript_SpikesOnFaintedBattler -_08024F88: - ldr r1, _08025064 @ =gBattleMons - ldr r5, _08025068 @ =gActiveBattler - ldrb r2, [r5] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x36 - bne _08024FAE - ldr r1, _0802506C @ =gDisableStructs - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x18] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0, 0x18] -_08024FAE: - ldrb r1, [r5] - movs r0, 0 - str r0, [sp] - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _08024FC4 - b _080250C6 -_08024FC4: - ldrb r1, [r5] - movs r0, 0 - movs r2, 0 - bl ItemBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _080250C6 - ldrb r0, [r5] - bl GetBattlerSide - ldr r1, _08025070 @ =gSideStatuses - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - ldrh r2, [r0] - ldr r1, _08025074 @ =0x0000fdff - ands r1, r2 - strh r1, [r0] - movs r4, 0 - ldr r0, _08025078 @ =gBattlersCount - ldrb r3, [r0] - cmp r4, r3 - bge _08025012 - ldr r6, _0802507C @ =gBattlerByTurnOrder - ldr r3, _08025080 @ =gActionsByTurnOrder - movs r2, 0xC - adds r1, r0, 0 -_08024FFC: - adds r0, r4, r6 - ldrb r0, [r0] - ldrb r7, [r5] - cmp r0, r7 - bne _0802500A - adds r0, r4, r3 - strb r2, [r0] -_0802500A: - adds r4, 0x1 - ldrb r0, [r1] - cmp r4, r0 - blt _08024FFC -_08025012: - movs r4, 0 - ldr r0, _08025078 @ =gBattlersCount - ldrb r0, [r0] - cmp r4, r0 - bge _08025046 - ldr r6, _08025084 @ =gBattleStruct - ldr r5, _08025064 @ =gBattleMons -_08025020: - lsls r0, r4, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 23 - adds r0, 0xA8 - ldr r1, [r6] - adds r1, r0 - movs r0, 0x58 - muls r0, r4 - adds r0, r5 - ldrh r0, [r0, 0x28] - strh r0, [r1] - adds r4, 0x1 - ldr r0, _08025078 @ =gBattlersCount - ldrb r0, [r0] - cmp r4, r0 - blt _08025020 -_08025046: - ldr r0, _08025088 @ =gBattlescriptCurrInstr - ldr r1, [r0] - ldrb r1, [r1, 0x1] - adds r5, r0, 0 - cmp r1, 0x5 - bne _080250C0 - ldr r0, _0802508C @ =gHitMarker - ldr r0, [r0] - lsrs r4, r0, 28 - ldr r1, _08025090 @ =gBattlerFainted - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r2, _08025094 @ =gBitTable - b _080250A6 - .align 2, 0 -_08025064: .4byte gBattleMons -_08025068: .4byte gActiveBattler -_0802506C: .4byte gDisableStructs -_08025070: .4byte gSideStatuses -_08025074: .4byte 0x0000fdff -_08025078: .4byte gBattlersCount -_0802507C: .4byte gBattlerByTurnOrder -_08025080: .4byte gActionsByTurnOrder -_08025084: .4byte gBattleStruct -_08025088: .4byte gBattlescriptCurrInstr -_0802508C: .4byte gHitMarker -_08025090: .4byte gBattlerFainted -_08025094: .4byte gBitTable -_08025098: - ldr r0, _080250D4 @ =gBattlersCount - ldrb r3, [r1] - ldrb r0, [r0] - cmp r3, r0 - bcs _080250C0 - adds r0, r3, 0x1 - strb r0, [r1] -_080250A6: - ldrb r0, [r1] - lsls r0, 2 - adds r0, r2 - ldr r3, [r0] - adds r0, r4, 0 - ands r0, r3 - cmp r0, 0 - beq _08025098 - ldr r0, _080250D8 @ =gAbsentBattlerFlags - ldrb r0, [r0] - ands r0, r3 - cmp r0, 0 - bne _08025098 -_080250C0: - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] -_080250C6: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080250D4: .4byte gBattlersCount -_080250D8: .4byte gAbsentBattlerFlags - thumb_func_end atk52_switchineffects - - thumb_func_start atk53_trainerslidein -atk53_trainerslidein: @ 80250DC - push {lr} - ldr r0, _080250EC @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r0, 0 - bne _080250F0 - movs r0, 0 - b _080250F2 - .align 2, 0 -_080250EC: .4byte gBattlescriptCurrInstr -_080250F0: - movs r0, 0x1 -_080250F2: - bl GetBattlerAtPosition - ldr r1, _08025114 @ =gActiveBattler - strb r0, [r1] - movs r0, 0 - bl BtlController_EmitTrainerSlide - ldr r0, _08025114 @ =gActiveBattler - ldrb r0, [r0] - bl MarkBattlerForControllerExec - ldr r1, _08025118 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08025114: .4byte gActiveBattler -_08025118: .4byte gBattlescriptCurrInstr - thumb_func_end atk53_trainerslidein - - thumb_func_start atk54_playse -atk54_playse: @ 802511C - push {r4,r5,lr} - ldr r5, _0802514C @ =gActiveBattler - ldr r0, _08025150 @ =gBattlerAttacker - ldrb r0, [r0] - strb r0, [r5] - ldr r4, _08025154 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r1, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r1, r0 - movs r0, 0 - bl BtlController_EmitPlaySE - ldrb r0, [r5] - bl MarkBattlerForControllerExec - ldr r0, [r4] - adds r0, 0x3 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802514C: .4byte gActiveBattler -_08025150: .4byte gBattlerAttacker -_08025154: .4byte gBattlescriptCurrInstr - thumb_func_end atk54_playse - - thumb_func_start atk55_fanfare -atk55_fanfare: @ 8025158 - push {r4,r5,lr} - ldr r5, _08025188 @ =gActiveBattler - ldr r0, _0802518C @ =gBattlerAttacker - ldrb r0, [r0] - strb r0, [r5] - ldr r4, _08025190 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r1, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r1, r0 - movs r0, 0 - bl BtlController_EmitPlayFanfare - ldrb r0, [r5] - bl MarkBattlerForControllerExec - ldr r0, [r4] - adds r0, 0x3 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08025188: .4byte gActiveBattler -_0802518C: .4byte gBattlerAttacker -_08025190: .4byte gBattlescriptCurrInstr - thumb_func_end atk55_fanfare - - thumb_func_start atk56_playfaintcry -atk56_playfaintcry: @ 8025194 - push {r4,r5,lr} - ldr r5, _080251BC @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r4, _080251C0 @ =gActiveBattler - strb r0, [r4] - movs r0, 0 - bl BtlController_EmitFaintingCry - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080251BC: .4byte gBattlescriptCurrInstr -_080251C0: .4byte gActiveBattler - thumb_func_end atk56_playfaintcry - - thumb_func_start atk57 -atk57: @ 80251C4 - push {r4,lr} - movs r0, 0 - bl GetBattlerAtPosition - ldr r4, _080251F0 @ =gActiveBattler - strb r0, [r4] - ldr r0, _080251F4 @ =gBattleOutcome - ldrb r1, [r0] - movs r0, 0 - bl BtlController_EmitCmd55 - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r1, _080251F8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080251F0: .4byte gActiveBattler -_080251F4: .4byte gBattleOutcome -_080251F8: .4byte gBattlescriptCurrInstr - thumb_func_end atk57 - - thumb_func_start atk58_returntoball -atk58_returntoball: @ 80251FC - push {r4,r5,lr} - ldr r5, _08025228 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r4, _0802522C @ =gActiveBattler - strb r0, [r4] - movs r0, 0 - movs r1, 0x1 - bl BtlController_EmitReturnMonToBall - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08025228: .4byte gBattlescriptCurrInstr -_0802522C: .4byte gActiveBattler - thumb_func_end atk58_returntoball - - thumb_func_start atk59_handlelearnnewmove -atk59_handlelearnnewmove: @ 8025230 - push {r4-r7,lr} - ldr r0, _080252A4 @ =gBattlescriptCurrInstr - ldr r2, [r0] - ldrb r6, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r6, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r6, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r6, r0 - ldrb r4, [r2, 0x5] - ldrb r0, [r2, 0x6] - lsls r0, 8 - orrs r4, r0 - ldrb r0, [r2, 0x7] - lsls r0, 16 - orrs r4, r0 - ldrb r0, [r2, 0x8] - lsls r0, 24 - orrs r4, r0 - ldr r0, _080252A8 @ =gBattleStruct - ldr r0, [r0] - ldrb r1, [r0, 0x10] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080252AC @ =gPlayerParty - adds r0, r1 - ldrb r1, [r2, 0x9] - bl MonTryLearningNewMove - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, _080252B0 @ =0x0000fffe - cmp r5, r0 - bne _0802529A - adds r7, r5, 0 -_0802527E: - ldr r0, _080252A8 @ =gBattleStruct - ldr r0, [r0] - ldrb r1, [r0, 0x10] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080252AC @ =gPlayerParty - adds r0, r1 - movs r1, 0 - bl MonTryLearningNewMove - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r7 - beq _0802527E -_0802529A: - cmp r5, 0 - bne _080252B4 - ldr r0, _080252A4 @ =gBattlescriptCurrInstr - str r4, [r0] - b _0802535C - .align 2, 0 -_080252A4: .4byte gBattlescriptCurrInstr -_080252A8: .4byte gBattleStruct -_080252AC: .4byte gPlayerParty -_080252B0: .4byte 0x0000fffe -_080252B4: - ldr r0, _080252C4 @ =0x0000ffff - cmp r5, r0 - bne _080252CC - ldr r1, _080252C8 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0xA - str r0, [r1] - b _0802535C - .align 2, 0 -_080252C4: .4byte 0x0000ffff -_080252C8: .4byte gBattlescriptCurrInstr -_080252CC: - movs r0, 0 - bl GetBattlerAtPosition - ldr r1, _08025364 @ =gActiveBattler - strb r0, [r1] - ldr r2, _08025368 @ =gBattlerPartyIndexes - ldrb r3, [r1] - lsls r0, r3, 1 - adds r0, r2 - ldr r1, _0802536C @ =gBattleStruct - ldr r1, [r1] - ldrh r0, [r0] - ldrb r1, [r1, 0x10] - cmp r0, r1 - bne _0802530C - ldr r4, _08025370 @ =gBattleMons - movs r0, 0x58 - adds r2, r3, 0 - muls r2, r0 - adds r0, r4, 0 - adds r0, 0x50 - adds r0, r2, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _0802530C - adds r0, r2, r4 - adds r1, r5, 0 - bl GiveMoveToBattleMon -_0802530C: - ldr r0, _08025374 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08025358 - movs r0, 0x2 - bl GetBattlerAtPosition - ldr r1, _08025364 @ =gActiveBattler - strb r0, [r1] - ldr r2, _08025368 @ =gBattlerPartyIndexes - ldrb r3, [r1] - lsls r0, r3, 1 - adds r0, r2 - ldr r1, _0802536C @ =gBattleStruct - ldr r1, [r1] - ldrh r0, [r0] - ldrb r1, [r1, 0x10] - cmp r0, r1 - bne _08025358 - ldr r4, _08025370 @ =gBattleMons - movs r0, 0x58 - adds r2, r3, 0 - muls r2, r0 - adds r0, r4, 0 - adds r0, 0x50 - adds r0, r2, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _08025358 - adds r0, r2, r4 - adds r1, r5, 0 - bl GiveMoveToBattleMon -_08025358: - ldr r0, _08025378 @ =gBattlescriptCurrInstr - str r6, [r0] -_0802535C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08025364: .4byte gActiveBattler -_08025368: .4byte gBattlerPartyIndexes -_0802536C: .4byte gBattleStruct -_08025370: .4byte gBattleMons -_08025374: .4byte gBattleTypeFlags -_08025378: .4byte gBattlescriptCurrInstr - thumb_func_end atk59_handlelearnnewmove - - thumb_func_start atk5A_yesnoboxlearnmove -atk5A_yesnoboxlearnmove: @ 802537C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - ldr r0, _080253A0 @ =gActiveBattler - movs r1, 0 - strb r1, [r0] - ldr r0, _080253A4 @ =gBattleScripting - ldrb r1, [r0, 0x1F] - adds r2, r0, 0 - cmp r1, 0x5 - bls _08025396 - b _080256D0 -_08025396: - lsls r0, r1, 2 - ldr r1, _080253A8 @ =_080253AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080253A0: .4byte gActiveBattler -_080253A4: .4byte gBattleScripting -_080253A8: .4byte _080253AC - .align 2, 0 -_080253AC: - .4byte _080253C4 - .4byte _080253FC - .4byte _080254A8 - .4byte _08025500 - .4byte _080256A4 - .4byte _080256C4 -_080253C4: - movs r4, 0 - str r4, [sp] - movs r0, 0x17 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl HandleBattleWindow - ldr r0, _080253F0 @ =gText_BattleYesNoChoice - movs r1, 0xE - bl BattlePutTextOnWindow - ldr r1, _080253F4 @ =gBattleScripting - ldrb r0, [r1, 0x1F] - adds r0, 0x1 - strb r0, [r1, 0x1F] - ldr r0, _080253F8 @ =gBattleCommunication - strb r4, [r0, 0x1] - bl BattleCreateYesNoCursorAt - b _080256D0 - .align 2, 0 -_080253F0: .4byte gText_BattleYesNoChoice -_080253F4: .4byte gBattleScripting -_080253F8: .4byte gBattleCommunication -_080253FC: - ldr r0, _08025484 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08025422 - ldr r4, _08025488 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08025422 - movs r0, 0x5 - bl PlaySE - bl BattleDestroyYesNoCursorAt - movs r0, 0 - strb r0, [r4, 0x1] - bl BattleCreateYesNoCursorAt -_08025422: - ldr r0, _08025484 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08025448 - ldr r4, _08025488 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08025448 - movs r0, 0x5 - bl PlaySE - bl BattleDestroyYesNoCursorAt - movs r0, 0x1 - strb r0, [r4, 0x1] - bl BattleCreateYesNoCursorAt -_08025448: - ldr r0, _08025484 @ =gMain - ldrh r1, [r0, 0x2E] - movs r5, 0x1 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _0802548C - movs r0, 0x5 - bl PlaySE - ldr r0, _08025488 @ =gBattleCommunication - ldrb r4, [r0, 0x1] - cmp r4, 0 - bne _0802549C - str r5, [sp] - movs r0, 0x17 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl HandleBattleWindow - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _080254D8 - .align 2, 0 -_08025484: .4byte gMain -_08025488: .4byte gBattleCommunication -_0802548C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08025496 - b _080256D0 -_08025496: - movs r0, 0x5 - bl PlaySE -_0802549C: - ldr r1, _080254A4 @ =gBattleScripting - movs r0, 0x4 - strb r0, [r1, 0x1F] - b _080256D0 - .align 2, 0 -_080254A4: .4byte gBattleScripting -_080254A8: - ldr r0, _080254E4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080254B6 - b _080256D0 -_080254B6: - bl FreeAllWindowBuffers - ldr r0, _080254E8 @ =gPlayerParty - ldr r1, _080254EC @ =gBattleStruct - ldr r1, [r1] - ldrb r1, [r1, 0x10] - ldr r2, _080254F0 @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _080254F4 @ =ReshowBattleScreenAfterMenu - ldr r4, _080254F8 @ =gMoveToLearn - ldrh r4, [r4] - str r4, [sp] - bl sub_8134738 -_080254D8: - ldr r1, _080254FC @ =gBattleScripting - ldrb r0, [r1, 0x1F] - adds r0, 0x1 - strb r0, [r1, 0x1F] - b _080256D0 - .align 2, 0 -_080254E4: .4byte gPaletteFade -_080254E8: .4byte gPlayerParty -_080254EC: .4byte gBattleStruct -_080254F0: .4byte gPlayerPartyCount -_080254F4: .4byte ReshowBattleScreenAfterMenu -_080254F8: .4byte gMoveToLearn -_080254FC: .4byte gBattleScripting -_08025500: - ldr r0, _0802552C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0802550E - b _080256D0 -_0802550E: - ldr r0, _08025530 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _08025534 @ =BattleMainCB2 - cmp r1, r0 - beq _0802551A - b _080256D0 -_0802551A: - bl sub_8138B2C - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x4 - bne _0802553C - ldr r0, _08025538 @ =gBattleScripting - strb r5, [r0, 0x1F] - b _080256D0 - .align 2, 0 -_0802552C: .4byte gPaletteFade -_08025530: .4byte gMain -_08025534: .4byte BattleMainCB2 -_08025538: .4byte gBattleScripting -_0802553C: - ldr r6, _08025578 @ =gBattleStruct - ldr r0, [r6] - ldrb r0, [r0, 0x10] - movs r1, 0x64 - mov r8, r1 - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - ldr r7, _0802557C @ =gPlayerParty - adds r0, r7 - adds r1, r5, 0 - adds r1, 0xD - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl IsHMMove2 - cmp r0, 0 - beq _0802558C - ldr r0, _08025580 @ =0x0000013f - ldr r1, _08025584 @ =gActiveBattler - ldrb r1, [r1] - bl PrepareStringBattle - ldr r1, _08025588 @ =gBattleScripting - movs r0, 0x5 - strb r0, [r1, 0x1F] - b _080256D0 - .align 2, 0 -_08025578: .4byte gBattleStruct -_0802557C: .4byte gPlayerParty -_08025580: .4byte 0x0000013f -_08025584: .4byte gActiveBattler -_08025588: .4byte gBattleScripting -_0802558C: - ldr r3, _08025680 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - ldr r1, _08025684 @ =gBattleTextBuff2 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - strb r4, [r1, 0x2] - lsrs r0, r4, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r0, [r6] - ldrb r0, [r0, 0x10] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - adds r1, r5, 0 - bl RemoveMonPPBonus - ldr r0, [r6] - ldrb r0, [r0, 0x10] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - ldr r7, _08025688 @ =gMoveToLearn - ldrh r1, [r7] - adds r2, r5, 0 - bl SetMonMoveSlot - ldr r0, _0802568C @ =gBattlerPartyIndexes - ldr r1, [r6] - ldrh r0, [r0] - ldrb r1, [r1, 0x10] - cmp r0, r1 - bne _08025622 - ldr r4, _08025690 @ =gBattleMons - ldr r0, [r4, 0x50] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _08025622 - ldr r0, _08025694 @ =gDisableStructs - ldrb r1, [r0, 0x18] - lsrs r1, 4 - ldr r2, _08025698 @ =gBitTable - lsls r0, r5, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _08025622 - adds r0, r4, 0 - adds r1, r5, 0 - bl RemoveBattleMonPPBonus - ldrh r1, [r7] - adds r0, r4, 0 - adds r2, r5, 0 - bl SetBattleMonMoveSlot -_08025622: - ldr r0, _0802569C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080256D0 - ldr r2, _0802568C @ =gBattlerPartyIndexes - ldr r0, _080256A0 @ =gBattleStruct - ldr r1, [r0] - ldrh r0, [r2, 0x4] - ldrb r1, [r1, 0x10] - cmp r0, r1 - bne _080256D0 - ldr r4, _08025690 @ =gBattleMons - movs r1, 0x80 - lsls r1, 1 - adds r0, r4, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _080256D0 - ldr r0, _08025694 @ =gDisableStructs - adds r0, 0x50 - ldrb r1, [r0] - lsrs r1, 4 - ldr r2, _08025698 @ =gBitTable - lsls r0, r5, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _080256D0 - adds r4, 0xB0 - adds r0, r4, 0 - adds r1, r5, 0 - bl RemoveBattleMonPPBonus - ldr r0, _08025688 @ =gMoveToLearn - ldrh r1, [r0] - adds r0, r4, 0 - adds r2, r5, 0 - bl SetBattleMonMoveSlot - b _080256D0 - .align 2, 0 -_08025680: .4byte gBattlescriptCurrInstr -_08025684: .4byte gBattleTextBuff2 -_08025688: .4byte gMoveToLearn -_0802568C: .4byte gBattlerPartyIndexes -_08025690: .4byte gBattleMons -_08025694: .4byte gDisableStructs -_08025698: .4byte gBitTable -_0802569C: .4byte gBattleTypeFlags -_080256A0: .4byte gBattleStruct -_080256A4: - movs r0, 0x1 - str r0, [sp] - movs r0, 0x17 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl HandleBattleWindow - ldr r1, _080256C0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _080256D0 - .align 2, 0 -_080256C0: .4byte gBattlescriptCurrInstr -_080256C4: - ldr r0, _080256DC @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _080256D0 - movs r0, 0x2 - strb r0, [r2, 0x1F] -_080256D0: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080256DC: .4byte gBattleControllerExecFlags - thumb_func_end atk5A_yesnoboxlearnmove - - thumb_func_start atk5B_yesnoboxstoplearningmove -atk5B_yesnoboxstoplearningmove: @ 80256E0 - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _080256F4 @ =gBattleScripting - ldrb r4, [r5, 0x1F] - cmp r4, 0 - beq _080256F8 - cmp r4, 0x1 - beq _08025728 - b _0802580E - .align 2, 0 -_080256F4: .4byte gBattleScripting -_080256F8: - str r4, [sp] - movs r0, 0x17 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl HandleBattleWindow - ldr r0, _08025720 @ =gText_BattleYesNoChoice - movs r1, 0xE - bl BattlePutTextOnWindow - ldrb r0, [r5, 0x1F] - adds r0, 0x1 - strb r0, [r5, 0x1F] - ldr r0, _08025724 @ =gBattleCommunication - strb r4, [r0, 0x1] - bl BattleCreateYesNoCursorAt - b _0802580E - .align 2, 0 -_08025720: .4byte gText_BattleYesNoChoice -_08025724: .4byte gBattleCommunication -_08025728: - ldr r0, _080257AC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0802574E - ldr r4, _080257B0 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _0802574E - movs r0, 0x5 - bl PlaySE - bl BattleDestroyYesNoCursorAt - movs r0, 0 - strb r0, [r4, 0x1] - bl BattleCreateYesNoCursorAt -_0802574E: - ldr r0, _080257AC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08025774 - ldr r4, _080257B0 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08025774 - movs r0, 0x5 - bl PlaySE - bl BattleDestroyYesNoCursorAt - movs r0, 0x1 - strb r0, [r4, 0x1] - bl BattleCreateYesNoCursorAt -_08025774: - ldr r0, _080257AC @ =gMain - ldrh r1, [r0, 0x2E] - movs r4, 0x1 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _080257D8 - movs r0, 0x5 - bl PlaySE - ldr r0, _080257B0 @ =gBattleCommunication - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _080257B8 - ldr r3, _080257B4 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _080257C0 - .align 2, 0 -_080257AC: .4byte gMain -_080257B0: .4byte gBattleCommunication -_080257B4: .4byte gBattlescriptCurrInstr -_080257B8: - ldr r1, _080257D4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_080257C0: - movs r0, 0x1 - str r0, [sp] - movs r0, 0x17 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl HandleBattleWindow - b _0802580E - .align 2, 0 -_080257D4: .4byte gBattlescriptCurrInstr -_080257D8: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802580E - movs r0, 0x5 - bl PlaySE - ldr r3, _08025818 @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - str r4, [sp] - movs r0, 0x17 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl HandleBattleWindow -_0802580E: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08025818: .4byte gBattlescriptCurrInstr - thumb_func_end atk5B_yesnoboxstoplearningmove - - thumb_func_start atk5C_hitanimation -atk5C_hitanimation: @ 802581C - push {r4,lr} - ldr r4, _08025888 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r2, _0802588C @ =gActiveBattler - strb r0, [r2] - ldr r0, _08025890 @ =gMoveResultFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - bne _080258A0 - ldr r0, _08025894 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 1 - ands r0, r1 - cmp r0, 0 - beq _0802586E - ldr r1, _08025898 @ =gBattleMons - ldrb r2, [r2] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 17 - ands r0, r1 - cmp r0, 0 - beq _0802586E - ldr r0, _0802589C @ =gDisableStructs - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - cmp r0, 0 - bne _080258A0 -_0802586E: - movs r0, 0 - bl BtlController_EmitHitAnimation - ldr r0, _0802588C @ =gActiveBattler - ldrb r0, [r0] - bl MarkBattlerForControllerExec - ldr r1, _08025888 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - b _080258A6 - .align 2, 0 -_08025888: .4byte gBattlescriptCurrInstr -_0802588C: .4byte gActiveBattler -_08025890: .4byte gMoveResultFlags -_08025894: .4byte gHitMarker -_08025898: .4byte gBattleMons -_0802589C: .4byte gDisableStructs -_080258A0: - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] -_080258A6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end atk5C_hitanimation - - thumb_func_start atk5D_getmoneyreward -atk5D_getmoneyreward: @ 80258AC - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0 - movs r5, 0 - ldr r0, _080258F0 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0x1 - beq _080258C0 - b _080259FA -_080258C0: - ldr r0, _080258F4 @ =gTrainerBattleOpponent_A - ldrh r2, [r0] - movs r1, 0x80 - lsls r1, 3 - cmp r2, r1 - bne _08025904 - ldr r0, _080258F8 @ =gBattleResources - ldr r0, [r0] - ldr r0, [r0] - adds r0, 0x94 - ldrb r2, [r0] - ldr r0, _080258FC @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x4A - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r4, r2, 0 - muls r4, r0 - ldr r0, _08025900 @ =gSaveBlock1Ptr - mov r8, r0 - b _080259E8 - .align 2, 0 -_080258F0: .4byte gBattleOutcome -_080258F4: .4byte gTrainerBattleOpponent_A -_080258F8: .4byte gBattleResources -_080258FC: .4byte gBattleStruct -_08025900: .4byte gSaveBlock1Ptr -_08025904: - ldr r2, _08025920 @ =gTrainers - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r3, r0, 3 - adds r4, r3, r2 - ldrb r1, [r4] - cmp r1, 0x1 - beq _0802595A - cmp r1, 0x1 - bgt _08025924 - cmp r1, 0 - beq _0802592E - b _08025970 - .align 2, 0 -_08025920: .4byte gTrainers -_08025924: - cmp r1, 0x2 - beq _08025944 - cmp r1, 0x3 - beq _0802595A - b _08025970 -_0802592E: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r3, r0 - ldr r1, [r0] - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - lsls r0, 3 - adds r0, r1 - subs r0, 0x8 - b _0802596E -_08025944: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r3, r0 - ldr r1, [r0] - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - lsls r0, 3 - adds r0, r1 - subs r0, 0x8 - b _0802596E -_0802595A: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r3, r0 - ldr r1, [r0] - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - subs r0, 0x10 -_0802596E: - ldrb r5, [r0, 0x2] -_08025970: - ldr r0, _080259CC @ =gTrainerMoneyTable - lsls r1, r6, 2 - adds r3, r1, r0 - ldrb r1, [r3] - ldr r7, _080259D0 @ =gBattleStruct - mov r12, r0 - lsls r4, r5, 2 - ldr r5, _080259D4 @ =gBattleTypeFlags - ldr r0, _080259D8 @ =gSaveBlock1Ptr - mov r8, r0 - cmp r1, 0xFF - beq _080259AA - ldr r2, _080259DC @ =gTrainers - ldr r0, _080259E0 @ =gTrainerBattleOpponent_A - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r2, [r0, 0x1] - adds r1, r3, 0 -_0802599A: - ldrb r0, [r1] - cmp r0, r2 - beq _080259AA - adds r1, 0x4 - adds r6, 0x1 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0802599A -_080259AA: - ldr r0, [r7] - adds r0, 0x4A - ldrb r0, [r0] - adds r3, r4, 0 - muls r3, r0 - lsls r0, r6, 2 - add r0, r12 - ldrb r2, [r0, 0x1] - ldr r0, [r5] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080259E4 - lsls r0, r2, 1 - adds r4, r3, 0 - muls r4, r0 - b _080259E8 - .align 2, 0 -_080259CC: .4byte gTrainerMoneyTable -_080259D0: .4byte gBattleStruct -_080259D4: .4byte gBattleTypeFlags -_080259D8: .4byte gSaveBlock1Ptr -_080259DC: .4byte gTrainers -_080259E0: .4byte gTrainerBattleOpponent_A -_080259E4: - adds r4, r3, 0 - muls r4, r2 -_080259E8: - mov r1, r8 - ldr r0, [r1] - movs r1, 0xA4 - lsls r1, 2 - adds r0, r1 - adds r1, r4, 0 - bl AddMoney - b _08025A00 -_080259FA: - bl sub_8054C04 - adds r4, r0, 0 -_08025A00: - ldr r1, _08025A40 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x1 - strb r0, [r1, 0x1] - movs r0, 0x4 - strb r0, [r1, 0x2] - movs r0, 0x5 - strb r0, [r1, 0x3] - strb r4, [r1, 0x4] - movs r0, 0xFF - lsls r0, 8 - ands r0, r4 - lsrs r0, 8 - strb r0, [r1, 0x5] - movs r0, 0xFF - lsls r0, 16 - ands r0, r4 - lsrs r0, 16 - strb r0, [r1, 0x6] - lsrs r0, r4, 24 - strb r0, [r1, 0x7] - movs r0, 0xFF - strb r0, [r1, 0x8] - cmp r4, 0 - beq _08025A48 - ldr r1, _08025A44 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - b _08025A62 - .align 2, 0 -_08025A40: .4byte gBattleTextBuff1 -_08025A44: .4byte gBattlescriptCurrInstr -_08025A48: - ldr r3, _08025A6C @ =gBattlescriptCurrInstr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] -_08025A62: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08025A6C: .4byte gBattlescriptCurrInstr - thumb_func_end atk5D_getmoneyreward - - thumb_func_start atk5E -atk5E: @ 8025A70 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _08025A94 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r6, _08025A98 @ =gActiveBattler - strb r0, [r6] - ldr r5, _08025A9C @ =gBattleCommunication - ldrb r0, [r5] - mov r8, r4 - cmp r0, 0 - beq _08025AA0 - cmp r0, 0x1 - beq _08025AB8 - b _08025B0C - .align 2, 0 -_08025A94: .4byte gBattlescriptCurrInstr -_08025A98: .4byte gActiveBattler -_08025A9C: .4byte gBattleCommunication -_08025AA0: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl BtlController_EmitGetMonData - ldrb r0, [r6] - bl MarkBattlerForControllerExec - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _08025B0C -_08025AB8: - ldr r0, _08025B18 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08025B0C - ldrb r0, [r6] - lsls r0, 9 - ldr r1, _08025B1C @ =gUnknown_20233C8 - adds r0, r1 - mov r12, r0 - movs r2, 0 - adds r4, r6, 0 - movs r5, 0x58 - ldr r6, _08025B20 @ =gUnknown_2023C08 - adds r7, r6, 0 - subs r7, 0x18 - mov r3, r12 - adds r3, 0xC -_08025ADA: - lsls r1, r2, 1 - ldrb r0, [r4] - muls r0, r5 - adds r1, r0 - adds r1, r7 - ldrh r0, [r3] - strh r0, [r1] - ldrb r0, [r4] - adds r1, r0, 0 - muls r1, r5 - adds r1, r2, r1 - adds r1, r6 - mov r0, r12 - adds r0, 0x24 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r3, 0x2 - adds r2, 0x1 - cmp r2, 0x3 - ble _08025ADA - mov r1, r8 - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_08025B0C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08025B18: .4byte gBattleControllerExecFlags -_08025B1C: .4byte gUnknown_20233C8 -_08025B20: .4byte gUnknown_2023C08 - thumb_func_end atk5E - - thumb_func_start atk5F_swapattackerwithtarget -atk5F_swapattackerwithtarget: @ 8025B24 - push {lr} - ldr r0, _08025B4C @ =gActiveBattler - ldr r2, _08025B50 @ =gBattlerAttacker - ldrb r3, [r2] - strb r3, [r0] - ldr r1, _08025B54 @ =gBattlerTarget - ldrb r0, [r1] - strb r0, [r2] - strb r3, [r1] - ldr r2, _08025B58 @ =gHitMarker - ldr r1, [r2] - movs r3, 0x80 - lsls r3, 5 - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - beq _08025B60 - ldr r0, _08025B5C @ =0xffffefff - ands r1, r0 - b _08025B62 - .align 2, 0 -_08025B4C: .4byte gActiveBattler -_08025B50: .4byte gBattlerAttacker -_08025B54: .4byte gBattlerTarget -_08025B58: .4byte gHitMarker -_08025B5C: .4byte 0xffffefff -_08025B60: - orrs r1, r3 -_08025B62: - str r1, [r2] - ldr r1, _08025B70 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08025B70: .4byte gBattlescriptCurrInstr - thumb_func_end atk5F_swapattackerwithtarget - - thumb_func_start atk60_incrementgamestat -atk60_incrementgamestat: @ 8025B74 - push {lr} - ldr r0, _08025B9C @ =gBattlerAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08025B8E - ldr r0, _08025BA0 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl IncrementGameStat -_08025B8E: - ldr r1, _08025BA0 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08025B9C: .4byte gBattlerAttacker -_08025BA0: .4byte gBattlescriptCurrInstr - thumb_func_end atk60_incrementgamestat - - thumb_func_start atk61_drawpartystatussummary -atk61_drawpartystatussummary: @ 8025BA4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x30 - ldr r0, _08025C08 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08025C58 - ldr r0, _08025C0C @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r1, _08025C10 @ =gActiveBattler - strb r0, [r1] - ldrb r0, [r1] - bl GetBattlerSide - lsls r0, 24 - ldr r1, _08025C14 @ =gEnemyParty - mov r8, r1 - cmp r0, 0 - bne _08025BD6 - ldr r0, _08025C18 @ =gPlayerParty - mov r8, r0 -_08025BD6: - movs r7, 0 - add r6, sp, 0x4 - mov r5, sp -_08025BDC: - movs r0, 0x64 - muls r0, r7 - mov r1, r8 - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _08025C00 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _08025C20 -_08025C00: - ldr r0, _08025C1C @ =0x0000ffff - strh r0, [r5] - movs r0, 0 - b _08025C32 - .align 2, 0 -_08025C08: .4byte gBattleControllerExecFlags -_08025C0C: .4byte gBattlescriptCurrInstr -_08025C10: .4byte gActiveBattler -_08025C14: .4byte gEnemyParty -_08025C18: .4byte gPlayerParty -_08025C1C: .4byte 0x0000ffff -_08025C20: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData -_08025C32: - str r0, [r6] - adds r6, 0x8 - adds r5, 0x8 - adds r7, 0x1 - cmp r7, 0x5 - ble _08025BDC - movs r0, 0 - mov r1, sp - movs r2, 0x1 - bl BtlController_EmitDrawPartyStatusSummary - ldr r0, _08025C64 @ =gActiveBattler - ldrb r0, [r0] - bl MarkBattlerForControllerExec - ldr r1, _08025C68 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_08025C58: - add sp, 0x30 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08025C64: .4byte gActiveBattler -_08025C68: .4byte gBattlescriptCurrInstr - thumb_func_end atk61_drawpartystatussummary - - thumb_func_start atk62_hidepartystatussummary -atk62_hidepartystatussummary: @ 8025C6C - push {r4,r5,lr} - ldr r5, _08025C94 @ =gBattlescriptCurrInstr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r4, _08025C98 @ =gActiveBattler - strb r0, [r4] - movs r0, 0 - bl BtlController_EmitHidePartyStatusSummary - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08025C94: .4byte gBattlescriptCurrInstr -_08025C98: .4byte gActiveBattler - thumb_func_end atk62_hidepartystatussummary - - thumb_func_start atk63_jumptocalledmove -atk63_jumptocalledmove: @ 8025C9C - push {r4,lr} - ldr r0, _08025CB4 @ =gBattlescriptCurrInstr - ldr r1, [r0] - ldrb r1, [r1, 0x1] - adds r4, r0, 0 - cmp r1, 0 - beq _08025CC0 - ldr r0, _08025CB8 @ =gCurrentMove - ldr r1, _08025CBC @ =gCalledMove - ldrh r1, [r1] - strh r1, [r0] - b _08025CCE - .align 2, 0 -_08025CB4: .4byte gBattlescriptCurrInstr -_08025CB8: .4byte gCurrentMove -_08025CBC: .4byte gCalledMove -_08025CC0: - ldr r2, _08025CEC @ =gChosenMove - ldr r1, _08025CF0 @ =gCurrentMove - ldr r0, _08025CF4 @ =gCalledMove - ldrh r0, [r0] - strh r0, [r1] - strh r0, [r2] - adds r0, r1, 0 -_08025CCE: - ldr r3, _08025CF8 @ =gBattleScriptsForMoveEffects - ldr r2, _08025CFC @ =gBattleMoves - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08025CEC: .4byte gChosenMove -_08025CF0: .4byte gCurrentMove -_08025CF4: .4byte gCalledMove -_08025CF8: .4byte gBattleScriptsForMoveEffects -_08025CFC: .4byte gBattleMoves - thumb_func_end atk63_jumptocalledmove - - thumb_func_start atk64_statusanimation -atk64_statusanimation: @ 8025D00 - push {r4,lr} - ldr r0, _08025D70 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08025D68 - ldr r0, _08025D74 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r4, _08025D78 @ =gActiveBattler - strb r0, [r4] - ldr r1, _08025D7C @ =gStatuses3 - ldrb r2, [r4] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08025D80 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _08025D60 - ldr r0, _08025D84 @ =gDisableStructs - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - cmp r0, 0 - bne _08025D60 - ldr r0, _08025D88 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08025D60 - ldr r1, _08025D8C @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r1, 0x4C - adds r0, r1 - ldr r2, [r0] - movs r0, 0 - movs r1, 0 - bl BtlController_EmitStatusAnimation - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_08025D60: - ldr r1, _08025D74 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] -_08025D68: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08025D70: .4byte gBattleControllerExecFlags -_08025D74: .4byte gBattlescriptCurrInstr -_08025D78: .4byte gActiveBattler -_08025D7C: .4byte gStatuses3 -_08025D80: .4byte 0x000400c0 -_08025D84: .4byte gDisableStructs -_08025D88: .4byte gHitMarker -_08025D8C: .4byte gBattleMons - thumb_func_end atk64_statusanimation - - thumb_func_start atk65_status2animation -atk65_status2animation: @ 8025D90 - push {r4,r5,lr} - ldr r0, _08025E18 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08025E10 - ldr r4, _08025E1C @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r5, _08025E20 @ =gActiveBattler - strb r0, [r5] - ldr r1, [r4] - ldrb r3, [r1, 0x2] - ldrb r0, [r1, 0x3] - lsls r0, 8 - orrs r3, r0 - ldrb r0, [r1, 0x4] - lsls r0, 16 - orrs r3, r0 - ldrb r0, [r1, 0x5] - lsls r0, 24 - orrs r3, r0 - ldr r1, _08025E24 @ =gStatuses3 - ldrb r2, [r5] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08025E28 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _08025E08 - ldr r0, _08025E2C @ =gDisableStructs - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - cmp r0, 0 - bne _08025E08 - ldr r0, _08025E30 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08025E08 - ldr r1, _08025E34 @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r2, [r0] - ands r2, r3 - movs r0, 0 - movs r1, 0x1 - bl BtlController_EmitStatusAnimation - ldrb r0, [r5] - bl MarkBattlerForControllerExec -_08025E08: - ldr r1, _08025E1C @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] -_08025E10: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08025E18: .4byte gBattleControllerExecFlags -_08025E1C: .4byte gBattlescriptCurrInstr -_08025E20: .4byte gActiveBattler -_08025E24: .4byte gStatuses3 -_08025E28: .4byte 0x000400c0 -_08025E2C: .4byte gDisableStructs -_08025E30: .4byte gHitMarker -_08025E34: .4byte gBattleMons - thumb_func_end atk65_status2animation - - thumb_func_start atk66_chosenstatusanimation -atk66_chosenstatusanimation: @ 8025E38 - push {r4,r5,lr} - ldr r0, _08025EB0 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08025EAA - ldr r4, _08025EB4 @ =gBattlescriptCurrInstr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r5, _08025EB8 @ =gActiveBattler - strb r0, [r5] - ldr r4, [r4] - ldrb r2, [r4, 0x3] - ldrb r0, [r4, 0x4] - lsls r0, 8 - orrs r2, r0 - ldrb r0, [r4, 0x5] - lsls r0, 16 - orrs r2, r0 - ldrb r0, [r4, 0x6] - lsls r0, 24 - orrs r2, r0 - ldr r1, _08025EBC @ =gStatuses3 - ldrb r3, [r5] - lsls r0, r3, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08025EC0 @ =0x000400c0 - ands r0, r1 - cmp r0, 0 - bne _08025EA2 - ldr r0, _08025EC4 @ =gDisableStructs - lsls r1, r3, 3 - subs r1, r3 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - cmp r0, 0 - bne _08025EA2 - ldr r0, _08025EC8 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08025EA2 - ldrb r1, [r4, 0x2] - movs r0, 0 - bl BtlController_EmitStatusAnimation - ldrb r0, [r5] - bl MarkBattlerForControllerExec -_08025EA2: - ldr r1, _08025EB4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x7 - str r0, [r1] -_08025EAA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08025EB0: .4byte gBattleControllerExecFlags -_08025EB4: .4byte gBattlescriptCurrInstr -_08025EB8: .4byte gActiveBattler -_08025EBC: .4byte gStatuses3 -_08025EC0: .4byte 0x000400c0 -_08025EC4: .4byte gDisableStructs -_08025EC8: .4byte gHitMarker - thumb_func_end atk66_chosenstatusanimation - - thumb_func_start atk67_yesnobox -atk67_yesnobox: @ 8025ECC - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _08025EE0 @ =gBattleCommunication - ldrb r4, [r5] - cmp r4, 0 - beq _08025EE4 - cmp r4, 0x1 - beq _08025F0C - b _08025F9A - .align 2, 0 -_08025EE0: .4byte gBattleCommunication -_08025EE4: - str r4, [sp] - movs r0, 0x17 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl HandleBattleWindow - ldr r0, _08025F08 @ =gText_BattleYesNoChoice - movs r1, 0xE - bl BattlePutTextOnWindow - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - strb r4, [r5, 0x1] - bl BattleCreateYesNoCursorAt - b _08025F9A - .align 2, 0 -_08025F08: .4byte gText_BattleYesNoChoice -_08025F0C: - ldr r0, _08025F6C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08025F30 - ldrb r0, [r5, 0x1] - cmp r0, 0 - beq _08025F30 - movs r0, 0x5 - bl PlaySE - bl BattleDestroyYesNoCursorAt - movs r0, 0 - strb r0, [r5, 0x1] - bl BattleCreateYesNoCursorAt -_08025F30: - ldr r0, _08025F6C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08025F56 - ldr r4, _08025F70 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08025F56 - movs r0, 0x5 - bl PlaySE - bl BattleDestroyYesNoCursorAt - movs r0, 0x1 - strb r0, [r4, 0x1] - bl BattleCreateYesNoCursorAt -_08025F56: - ldr r0, _08025F6C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08025F74 - ldr r0, _08025F70 @ =gBattleCommunication - movs r4, 0x1 - strb r4, [r0, 0x1] - b _08025F7E - .align 2, 0 -_08025F6C: .4byte gMain -_08025F70: .4byte gBattleCommunication -_08025F74: - movs r4, 0x1 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08025F9A -_08025F7E: - movs r0, 0x5 - bl PlaySE - str r4, [sp] - movs r0, 0x17 - movs r1, 0x8 - movs r2, 0x1D - movs r3, 0xD - bl HandleBattleWindow - ldr r1, _08025FA4 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_08025F9A: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08025FA4: .4byte gBattlescriptCurrInstr - thumb_func_end atk67_yesnobox - - thumb_func_start atk68_cancelallactions -atk68_cancelallactions: @ 8025FA8 - push {r4,r5,lr} - movs r1, 0 - ldr r2, _08025FD4 @ =gBattlersCount - ldr r5, _08025FD8 @ =gBattlescriptCurrInstr - ldrb r0, [r2] - cmp r1, r0 - bge _08025FC6 - ldr r4, _08025FDC @ =gActionsByTurnOrder - movs r3, 0xC -_08025FBA: - adds r0, r1, r4 - strb r3, [r0] - adds r1, 0x1 - ldrb r0, [r2] - cmp r1, r0 - blt _08025FBA -_08025FC6: - ldr r0, [r5] - adds r0, 0x1 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08025FD4: .4byte gBattlersCount -_08025FD8: .4byte gBattlescriptCurrInstr -_08025FDC: .4byte gActionsByTurnOrder - thumb_func_end atk68_cancelallactions - - thumb_func_start atk69_adjustsetdamage -atk69_adjustsetdamage: @ 8025FE0 - push {r4-r7,lr} - ldr r7, _08026008 @ =gBattleMons - ldr r6, _0802600C @ =gBattlerTarget - ldrb r2, [r6] - movs r5, 0x58 - adds r0, r2, 0 - muls r0, r5 - adds r1, r0, r7 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _08026014 - ldr r1, _08026010 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r4, [r0, 0x7] - ldrb r6, [r0, 0x1A] - b _0802602E - .align 2, 0 -_08026008: .4byte gBattleMons -_0802600C: .4byte gBattlerTarget -_08026010: .4byte gEnigmaBerries -_08026014: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r6] - muls r0, r5 - adds r0, r7 - ldrh r0, [r0, 0x2E] - bl ItemId_GetHoldEffectParam - lsls r0, 24 - lsrs r6, r0, 24 -_0802602E: - ldr r1, _080260F0 @ =gPotentialItemEffectBattler - ldr r5, _080260F4 @ =gBattlerTarget - ldrb r0, [r5] - strb r0, [r1] - cmp r4, 0x27 - bne _0802606C - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r6 - bcs _0802606C - ldrb r0, [r5] - movs r1, 0x27 - bl RecordItemEffectBattle - ldr r2, _080260F8 @ =gSpecialStatuses - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] -_0802606C: - ldr r2, _080260FC @ =gBattleMons - ldr r3, _080260F4 @ =gBattlerTarget - ldrb r4, [r3] - movs r0, 0x58 - muls r0, r4 - adds r1, r2, 0 - adds r1, 0x50 - adds r0, r1 - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 17 - ands r1, r0 - adds r5, r2, 0 - cmp r1, 0 - bne _0802613C - ldr r2, _08026100 @ =gBattleMoves - ldr r0, _08026104 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x65 - beq _080260BE - ldr r0, _08026108 @ =gProtectStructs - lsls r1, r4, 4 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 30 - cmp r0, 0 - blt _080260BE - ldr r0, _080260F8 @ =gSpecialStatuses - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsrs r0, 7 - cmp r0, 0 - beq _0802613C -_080260BE: - ldrb r0, [r3] - movs r4, 0x58 - muls r0, r4 - adds r0, r5 - ldrh r1, [r0, 0x28] - ldr r2, _0802610C @ =gBattleMoveDamage - ldr r0, [r2] - cmp r1, r0 - bgt _0802613C - subs r0, r1, 0x1 - str r0, [r2] - ldr r1, _08026108 @ =gProtectStructs - ldrb r3, [r3] - lsls r0, r3, 4 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - cmp r0, 0 - bge _08026114 - ldr r0, _08026110 @ =gMoveResultFlags - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - b _0802613C - .align 2, 0 -_080260F0: .4byte gPotentialItemEffectBattler -_080260F4: .4byte gBattlerTarget -_080260F8: .4byte gSpecialStatuses -_080260FC: .4byte gBattleMons -_08026100: .4byte gBattleMoves -_08026104: .4byte gCurrentMove -_08026108: .4byte gProtectStructs -_0802610C: .4byte gBattleMoveDamage -_08026110: .4byte gMoveResultFlags -_08026114: - ldr r0, _0802614C @ =gSpecialStatuses - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - lsrs r0, 7 - cmp r0, 0 - beq _0802613C - ldr r2, _08026150 @ =gMoveResultFlags - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08026154 @ =gLastUsedItem - adds r0, r3, 0 - muls r0, r4 - adds r0, r5 - ldrh r0, [r0, 0x2E] - strh r0, [r1] -_0802613C: - ldr r1, _08026158 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802614C: .4byte gSpecialStatuses -_08026150: .4byte gMoveResultFlags -_08026154: .4byte gLastUsedItem -_08026158: .4byte gBattlescriptCurrInstr - thumb_func_end atk69_adjustsetdamage - - thumb_func_start atk6A_removeitem -atk6A_removeitem: @ 802615C - push {r4-r6,lr} - sub sp, 0x4 - ldr r6, _080261BC @ =gBattlescriptCurrInstr - ldr r0, [r6] - ldrb r0, [r0, 0x1] - bl GetBattlerForBattleScript - ldr r5, _080261C0 @ =gActiveBattler - strb r0, [r5] - ldr r1, _080261C4 @ =gBattleStruct - ldrb r4, [r5] - lsls r0, r4, 1 - adds r0, 0xB8 - ldr r1, [r1] - adds r1, r0 - ldr r2, _080261C8 @ =gBattleMons - movs r3, 0x58 - adds r0, r4, 0 - muls r0, r3 - adds r0, r2 - ldrh r0, [r0, 0x2E] - strh r0, [r1] - ldrb r0, [r5] - muls r0, r3 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x2E] - ldrb r0, [r5] - muls r0, r3 - adds r2, 0x2E - adds r0, r2 - str r0, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl BtlController_EmitSetMonData - ldrb r0, [r5] - bl MarkBattlerForControllerExec - ldr r0, [r6] - adds r0, 0x2 - str r0, [r6] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080261BC: .4byte gBattlescriptCurrInstr -_080261C0: .4byte gActiveBattler -_080261C4: .4byte gBattleStruct -_080261C8: .4byte gBattleMons - thumb_func_end atk6A_removeitem - - thumb_func_start atk6B_atknameinbuff1 -atk6B_atknameinbuff1: @ 80261CC - ldr r1, _080261F8 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x7 - strb r0, [r1, 0x1] - ldr r2, _080261FC @ =gBattlerAttacker - ldrb r0, [r2] - strb r0, [r1, 0x2] - ldr r3, _08026200 @ =gBattlerPartyIndexes - ldrb r0, [r2] - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _08026204 @ =gBattlescriptCurrInstr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_080261F8: .4byte gBattleTextBuff1 -_080261FC: .4byte gBattlerAttacker -_08026200: .4byte gBattlerPartyIndexes -_08026204: .4byte gBattlescriptCurrInstr - thumb_func_end atk6B_atknameinbuff1 - thumb_func_start atk6C_drawlvlupbox atk6C_drawlvlupbox: @ 8026208 push {r4,lr} diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index 8669270af..d88145fde 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -2449,7 +2449,7 @@ _080CF2C2: ldr r4, _080CF308 @ =gMoveToLearn ldrh r4, [r4] str r4, [sp] - bl sub_8134738 + bl ShowSelectMovePokemonSummaryScreen ldrh r0, [r5, 0x14] adds r0, 0x1 strh r0, [r5, 0x14] @@ -3718,7 +3718,7 @@ _080CFDC6: ldr r4, _080CFE2C @ =gMoveToLearn ldrh r4, [r4] str r4, [sp] - bl sub_8134738 + bl ShowSelectMovePokemonSummaryScreen ldrh r0, [r5, 0x14] adds r0, 0x1 strh r0, [r5, 0x14] diff --git a/asm/learn_move.s b/asm/learn_move.s index 6684874bb..a7a5b264d 100644 --- a/asm/learn_move.s +++ b/asm/learn_move.s @@ -758,7 +758,7 @@ _080E4C7E: adds r5, r4 ldrh r4, [r5] str r4, [sp] - bl sub_8134738 + bl ShowSelectMovePokemonSummaryScreen ldr r1, [r7] movs r0, 0x1C b _080E4ED8 diff --git a/asm/party_menu.s b/asm/party_menu.s index e7126dfda..661dddf60 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -14645,7 +14645,7 @@ sub_8125E4C: @ 8125E4C ldr r3, _08125E80 @ =sub_8125E84 ldrh r4, [r4, 0xE] str r4, [sp] - bl sub_8134738 + bl ShowSelectMovePokemonSummaryScreen add sp, 0x4 pop {r4} pop {r0} diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 3385c3d5c..14577269c 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -270,8 +270,8 @@ _08134730: .4byte 0x00003204 _08134734: .4byte sub_8135C34 thumb_func_end sub_81344F8 - thumb_func_start sub_8134738 -sub_8134738: @ 8134738 + thumb_func_start ShowSelectMovePokemonSummaryScreen +ShowSelectMovePokemonSummaryScreen: @ 8134738 push {r4,r5,lr} sub sp, 0x4 ldr r5, [sp, 0x10] @@ -296,7 +296,7 @@ sub_8134738: @ 8134738 .align 2, 0 _08134764: .4byte gUnknown_203B140 _08134768: .4byte 0x00003260 - thumb_func_end sub_8134738 + thumb_func_end ShowSelectMovePokemonSummaryScreen thumb_func_start sub_813476C sub_813476C: @ 813476C diff --git a/asm/script_pokemon_util_80BF8FC.s b/asm/script_pokemon_util_80BF8FC.s index b5ef5f090..297d09e9a 100644 --- a/asm/script_pokemon_util_80BF8FC.s +++ b/asm/script_pokemon_util_80BF8FC.s @@ -115,7 +115,7 @@ sub_80BF9BC: @ 80BF9BC ldr r3, _080BF9FC @ =CB2_ReturnToField movs r4, 0 str r4, [sp] - bl sub_8134738 + bl ShowSelectMovePokemonSummaryScreen movs r0, 0x3 bl sub_8138B38 ldr r1, _080BFA00 @ =gFieldCallback diff --git a/include/battle.h b/include/battle.h index 144d0a3bb..8abb95333 100644 --- a/include/battle.h +++ b/include/battle.h @@ -264,7 +264,7 @@ struct DisableStruct /*0x16*/ u8 isFirstTurn; /*0x17*/ u8 unk17; /*0x18*/ u8 truantCounter : 1; - /*0x18*/ u8 truantSwitchInHack : 1; + /*0x18*/ u8 truantSwitchInHack : 1; // unused? /*0x18*/ u8 unk18_a_2 : 2; /*0x18*/ u8 mimickedMoves : 4; /*0x19*/ u8 rechargeTimer; @@ -941,5 +941,6 @@ extern u16 gExpShareExp; extern u8 gLeveledUpInBattle; extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT]; extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT]; +extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT]; #endif // GUARD_BATTLE_H diff --git a/include/battle_main.h b/include/battle_main.h index 86de8f39a..27aae9970 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -75,7 +75,7 @@ void sub_803B3AC(void); // unused void sub_803B598(void); // unused void BattleTurnPassed(void); u8 IsRunningFromBattleImpossible(void); -void sub_803BDA0(u8 bank); +void sub_8013F6C(u8 battlerId); void SwapTurnOrder(u8 id1, u8 id2); u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves); void RunBattleScriptCommands_PopCallbacksStack(void); @@ -98,5 +98,6 @@ extern const u8 gStatusConditionString_LoveJpn[8]; extern const u8 * const gStatusConditionStringsTable[7][2]; extern const u8 gTypeEffectiveness[336]; +extern const struct TrainerMoney gTrainerMoneyTable[]; #endif // GUARD_BATTLE_MAIN_H diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index c75a029c2..8e5274844 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -56,8 +56,8 @@ u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef); u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility); u8 GetBattlerTurnOrderNum(u8 bank); void SetMoveEffect(bool8 primary, u8 certain); -void BattleDestroyYesNoCursorAt(u8 cursorPosition); -void BattleCreateYesNoCursorAt(u8 cursorPosition); +void BattleDestroyYesNoCursorAt(void); +void BattleCreateYesNoCursorAt(void); void BufferMoveToLearnIntoBattleTextBuff2(void); void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags); bool8 UproarWakeUpCheck(u8 bank); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 165b580de..769c4a84a 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -224,5 +224,6 @@ extern const u8 BattleScript_IgnoresWhileAsleep[]; extern const u8 BattleScript_IgnoresAndHitsItself[]; extern const u8 BattleScript_MoveEffectRecoil[]; extern const u8 BattleScript_FlushMessageBox[]; +extern const u8 BattleScript_SpikesOnFaintedBattler[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/trainers.h b/include/constants/trainers.h new file mode 100644 index 000000000..1aad499a1 --- /dev/null +++ b/include/constants/trainers.h @@ -0,0 +1,12 @@ +#ifndef GUARD_TRAINERS_H +#define GUARD_TRAINERS_H + +#define F_TRAINER_FEMALE (1 << 7) + +// All trainer parties specify the IV, level, and species for each Pokémon in the +// party. Some trainer parties also specify held items and custom moves for each +// Pokémon. +#define F_TRAINER_PARTY_CUSTOM_MOVESET (1 << 0) +#define F_TRAINER_PARTY_HELD_ITEM (1 << 1) + +#endif // GUARD_TRAINERS_H diff --git a/include/overworld.h b/include/overworld.h index 7c1f34e41..ea877730e 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -96,6 +96,7 @@ void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y); void ResetInitialPlayerAvatarState(void); void sub_8055D40(u16 mapDataId); void CleanupOverworldWindowsAndTilemaps(void); +u32 sub_8054C04(void); extern u8 gUnknown_2031DD8; extern u8 gUnknown_2036E28; diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h new file mode 100644 index 000000000..7b250b647 --- /dev/null +++ b/include/pokemon_summary_screen.h @@ -0,0 +1,36 @@ +#ifndef GUARD_POKEMON_SUMMARY_SCREEN_H +#define GUARD_POKEMON_SUMMARY_SCREEN_H + +#include "main.h" + +extern u8 gLastViewedMonIndex; + +extern const u8 *const gMoveDescriptionPointers[]; +extern const u8 *const gNatureNamePointers[]; + +void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); +void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16); +void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); +u8 sub_8138B2C(void); +void SummaryScreen_SetUnknownTaskId(u8 a0); +void SummaryScreen_DestroyUnknownTask(void); + +// The Pokemon Summary Screen can operate in different modes. Certain features, +// such as move re-ordering, are available in the different modes. +enum PokemonSummaryScreenMode +{ + PSS_MODE_NORMAL, + PSS_MODE_UNK1, + PSS_MODE_BOX, + PSS_MODE_SELECT_MOVE, +}; + +enum PokemonSummaryScreenPage +{ + PSS_PAGE_INFO, + PSS_PAGE_SKILLS, + PSS_PAGE_BATTLE_MOVES, + PSS_PAGE_CONTEST_MOVES, +}; + +#endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/include/strings.h b/include/strings.h index 2b914dfc8..2da65d3e0 100644 --- a/include/strings.h +++ b/include/strings.h @@ -223,4 +223,7 @@ extern const u8 gText_LinkStandby[]; extern const u8 gUnknown_83FE725[]; extern const u8 gText_WhatWillPkmnDo[]; +// battle_script_commands +extern const u8 gText_BattleYesNoChoice[]; + #endif //GUARD_STRINGS_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index aa3ef9504..7816f4f7e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -17,7 +17,9 @@ #include "m4a.h" #include "mail.h" #include "event_data.h" +#include "strings.h" #include "pokemon_storage_system.h" +#include "pokemon_summary_screen.h" #include "task.h" #include "naming_screen.h" #include "overworld.h" @@ -43,6 +45,7 @@ #include "constants/moves.h" #include "constants/abilities.h" #include "constants/pokemon.h" +#include "constants/trainers.h" #define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) @@ -4502,3 +4505,1233 @@ void sub_8024398(u8 arg0) BtlController_EmitChoosePokemon(0, PARTY_MUST_CHOOSE_MON, arg0, 0, gBattleStruct->field_60[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); } + +void atk50_openpartyscreen(void) +{ + u32 flags; + u8 hitmarkerFaintBits; + u8 battlerId; + const u8 *jumpPtr; + + battlerId = 0; + flags = 0; + jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + if (gBattlescriptCurrInstr[1] == 5) + { + if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (gHitMarker & HITMARKER_FAINTED(gActiveBattler)) + { + if (HasNoMonsToSwitch(gActiveBattler, 6, 6)) + { + gAbsentBattlerFlags |= gBitTable[gActiveBattler]; + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + } + else if (!gSpecialStatuses[gActiveBattler].flag40) + { + sub_8024398(6); + gSpecialStatuses[gActiveBattler].flag40 = 1; + } + } + else + { + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + } + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + u8 flag40_0, flag40_1, flag40_2, flag40_3; + + hitmarkerFaintBits = gHitMarker >> 0x1C; + if (gBitTable[0] & hitmarkerFaintBits) + { + gActiveBattler = 0; + if (HasNoMonsToSwitch(0, 6, 6)) + { + gAbsentBattlerFlags |= gBitTable[gActiveBattler]; + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + BtlController_EmitCmd42(0); + MarkBattlerForControllerExec(gActiveBattler); + } + else if (!gSpecialStatuses[gActiveBattler].flag40) + { + sub_8024398(gBattleStruct->monToSwitchIntoId[2]); + gSpecialStatuses[gActiveBattler].flag40 = 1; + } + else + { + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + flags |= 1; + } + } + if (gBitTable[2] & hitmarkerFaintBits && !(gBitTable[0] & hitmarkerFaintBits)) + { + gActiveBattler = 2; + if (HasNoMonsToSwitch(2, 6, 6)) + { + gAbsentBattlerFlags |= gBitTable[gActiveBattler]; + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + BtlController_EmitCmd42(0); + MarkBattlerForControllerExec(gActiveBattler); + } + else if (!gSpecialStatuses[gActiveBattler].flag40) + { + sub_8024398(gBattleStruct->monToSwitchIntoId[0]); + gSpecialStatuses[gActiveBattler].flag40 = 1; + } + else if (!(flags & 1)) + { + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + } + } + if (gBitTable[1] & hitmarkerFaintBits) + { + gActiveBattler = 1; + if (HasNoMonsToSwitch(1, 6, 6)) + { + gAbsentBattlerFlags |= gBitTable[gActiveBattler]; + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + BtlController_EmitCmd42(0); + MarkBattlerForControllerExec(gActiveBattler); + } + else if (!gSpecialStatuses[gActiveBattler].flag40) + { + sub_8024398(gBattleStruct->monToSwitchIntoId[3]); + gSpecialStatuses[gActiveBattler].flag40 = 1; + } + else + { + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + flags |= 2; + } + } + if (gBitTable[3] & hitmarkerFaintBits && !(gBitTable[1] & hitmarkerFaintBits)) + { + gActiveBattler = 3; + if (HasNoMonsToSwitch(3, 6, 6)) + { + gAbsentBattlerFlags |= gBitTable[gActiveBattler]; + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + BtlController_EmitCmd42(0); + MarkBattlerForControllerExec(gActiveBattler); + } + else if (!gSpecialStatuses[gActiveBattler].flag40) + { + sub_8024398(gBattleStruct->monToSwitchIntoId[1]); + gSpecialStatuses[gActiveBattler].flag40 = 1; + } + else if (!(flags & 2)) + { + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + } + } + flag40_0 = gSpecialStatuses[0].flag40; + if (!flag40_0) + { + flag40_2 = gSpecialStatuses[2].flag40; + if (!flag40_2 && hitmarkerFaintBits != 0) + { + if (gAbsentBattlerFlags & gBitTable[0]) + gActiveBattler = 2; + else + gActiveBattler = 0; + + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + } + + } + flag40_1 = gSpecialStatuses[1].flag40; + if (!flag40_1) + { + flag40_3 = gSpecialStatuses[3].flag40; + if (!flag40_3 && hitmarkerFaintBits != 0) + { + if (gAbsentBattlerFlags & gBitTable[1]) + gActiveBattler = 3; + else + gActiveBattler = 1; + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + } + } + } + gBattlescriptCurrInstr += 6; + } + else if (gBattlescriptCurrInstr[1] == 6) + { + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + hitmarkerFaintBits = gHitMarker >> 0x1C; + if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits) + { + gActiveBattler = 2; + if (HasNoMonsToSwitch(2, gBattleBufferB[0][1], 6)) + { + gAbsentBattlerFlags |= gBitTable[gActiveBattler]; + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + BtlController_EmitCmd42(0); + MarkBattlerForControllerExec(gActiveBattler); + } + else if (!gSpecialStatuses[gActiveBattler].flag40) + { + sub_8024398(gBattleStruct->monToSwitchIntoId[0]); + gSpecialStatuses[gActiveBattler].flag40 = 1; + } + } + if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1]) + { + gActiveBattler = 3; + if (HasNoMonsToSwitch(3, gBattleBufferB[1][1], 6)) + { + gAbsentBattlerFlags |= gBitTable[gActiveBattler]; + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + BtlController_EmitCmd42(0); + MarkBattlerForControllerExec(gActiveBattler); + } + else if (!gSpecialStatuses[gActiveBattler].flag40) + { + sub_8024398(gBattleStruct->monToSwitchIntoId[1]); + gSpecialStatuses[gActiveBattler].flag40 = 1; + } + } + gBattlescriptCurrInstr += 6; + } + else + { + gBattlescriptCurrInstr += 6; + } + } + else + { + gBattlescriptCurrInstr += 6; + } + + hitmarkerFaintBits = gHitMarker >> 0x1C; + + gBattlerFainted = 0; + while (1) + { + if (gBitTable[gBattlerFainted] & hitmarkerFaintBits) + break; + if (gBattlerFainted >= gBattlersCount) + break; + ++gBattlerFainted; + } + + if (gBattlerFainted == gBattlersCount) + gBattlescriptCurrInstr = jumpPtr; + } + else + { + if (gBattlescriptCurrInstr[1] & 0x80) + hitmarkerFaintBits = PARTY_CHOOSE_MON; // Used here as the caseId for the EmitChoose function. + else + hitmarkerFaintBits = PARTY_MUST_CHOOSE_MON; + battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(0x80)); + if (gSpecialStatuses[battlerId].flag40) + { + gBattlescriptCurrInstr += 6; + } + else if (HasNoMonsToSwitch(battlerId, 6, 6)) + { + gActiveBattler = battlerId; + gAbsentBattlerFlags |= gBitTable[gActiveBattler]; + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + gBattlescriptCurrInstr = jumpPtr; + } + else + { + gActiveBattler = battlerId; + *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), 0, gBattleStruct->field_60[gActiveBattler]); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 6; + if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT && gBattleResults.playerSwitchesCounter < 0xFF) + ++gBattleResults.playerSwitchesCounter; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (gActiveBattler != battlerId) + { + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + } + } + } + else + { + gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(battlerId) ^ BIT_SIDE); + if (gAbsentBattlerFlags & gBitTable[gActiveBattler]) + gActiveBattler ^= BIT_FLANK; + BtlController_EmitLinkStandbyMsg(0, 2); + MarkBattlerForControllerExec(gActiveBattler); + } + } + } +} + +void atk51_switchhandleorder(void) +{ + s32 i; + + if (!gBattleControllerExecFlags) + { + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + switch (gBattlescriptCurrInstr[2]) + { + case 0: + for (i = 0; i < gBattlersCount; ++i) + if (gBattleBufferB[i][0] == 0x22) + *(gBattleStruct->monToSwitchIntoId + i) = gBattleBufferB[i][1]; + break; + case 1: + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + sub_8013F6C(gActiveBattler); + break; + case 2: + gBattleCommunication[0] = gBattleBufferB[gActiveBattler][1]; + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1]; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= 0xF; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 1) = gBattleBufferB[gActiveBattler][3]; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= (0xF0); + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 2) = gBattleBufferB[gActiveBattler][3]; + } + else + { + sub_8013F6C(gActiveBattler); + } + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species) + PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, gActiveBattler, gBattleBufferB[gActiveBattler][1]) + break; + } + gBattlescriptCurrInstr += 3; + } +} + +void atk52_switchineffects(void) +{ + s32 i; + + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + sub_80174B8(gActiveBattler); + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + gSpecialStatuses[gActiveBattler].flag40 = 0; + if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED) + && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES) + && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) + && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE) + { + u8 spikesDmg; + + gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_SPIKES_DAMAGED; + spikesDmg = (5 - gSideTimers[GetBattlerSide(gActiveBattler)].spikesAmount) * 2; + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / (spikesDmg); + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleScripting.battler = gActiveBattler; + BattleScriptPushCursor(); + if (gBattlescriptCurrInstr[1] == BS_TARGET) + gBattlescriptCurrInstr = BattleScript_SpikesOnTarget; + else if (gBattlescriptCurrInstr[1] == BS_ATTACKER) + gBattlescriptCurrInstr = BattleScript_SpikesOnAttacker; + else + gBattlescriptCurrInstr = BattleScript_SpikesOnFaintedBattler; + } + else + { + if (gBattleMons[gActiveBattler].ability == ABILITY_TRUANT) + gDisableStructs[gActiveBattler].truantCounter = 1; + if (!AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0) + && !ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE)) + { + gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED); + + for (i = 0; i < gBattlersCount; ++i) + { + if (gBattlerByTurnOrder[i] == gActiveBattler) + gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER; + } + for (i = 0; i < gBattlersCount; ++i) + { + u16 *hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(i)]; + *hpOnSwitchout = gBattleMons[i].hp; + } + + if (gBattlescriptCurrInstr[1] == 5) + { + u32 hitmarkerFaintBits = gHitMarker >> 0x1C; + + ++gBattlerFainted; + while (TRUE) + { + if (hitmarkerFaintBits & gBitTable[gBattlerFainted] && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted])) + break; + if (gBattlerFainted >= gBattlersCount) + break; + ++gBattlerFainted; + } + } + gBattlescriptCurrInstr += 2; + } + } +} + +void atk53_trainerslidein(void) +{ + if (!gBattlescriptCurrInstr[1]) + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + else + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + BtlController_EmitTrainerSlide(0); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 2; +} + +void atk54_playse(void) +{ + gActiveBattler = gBattlerAttacker; + BtlController_EmitPlaySE(0, T2_READ_16(gBattlescriptCurrInstr + 1)); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 3; +} + +void atk55_fanfare(void) +{ + gActiveBattler = gBattlerAttacker; + BtlController_EmitPlayFanfare(0, T2_READ_16(gBattlescriptCurrInstr + 1)); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 3; +} + +void atk56_playfaintcry(void) +{ + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + BtlController_EmitFaintingCry(0); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 2; +} + +void atk57(void) +{ + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + BtlController_EmitCmd55(0, gBattleOutcome); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 1; +} + +void atk58_returntoball(void) +{ + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + BtlController_EmitReturnMonToBall(0, 1); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 2; +} + +void atk59_handlelearnnewmove(void) +{ + const u8 *jumpPtr1 = T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *jumpPtr2 = T1_READ_PTR(gBattlescriptCurrInstr + 5); + u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]); + + while (ret == 0xFFFE) + ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], 0); + if (ret == 0) + { + gBattlescriptCurrInstr = jumpPtr2; + } + else if (ret == 0xFFFF) + { + gBattlescriptCurrInstr += 10; + } + else + { + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId + && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED)) + { + GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret); + } + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId + && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED)) + { + GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret); + } + } + gBattlescriptCurrInstr = jumpPtr1; + } +} + +void atk5A_yesnoboxlearnmove(void) +{ + gActiveBattler = 0; + + switch (gBattleScripting.learnMoveState) + { + case 0: + HandleBattleWindow(0x17, 8, 0x1D, 0xD, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xE); + ++gBattleScripting.learnMoveState; + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(); + break; + case 1: + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(); + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(); + } + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(); + gBattleCommunication[CURSOR_POSITION] = 1; + BattleCreateYesNoCursorAt(); + } + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + if (gBattleCommunication[1] == 0) + { + HandleBattleWindow(0x17, 0x8, 0x1D, 0xD, WINDOW_CLEAR); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + ++gBattleScripting.learnMoveState; + } + else + { + gBattleScripting.learnMoveState = 4; + } + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + gBattleScripting.learnMoveState = 4; + } + break; + case 2: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gBattleStruct->expGetterMonId, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); + ++gBattleScripting.learnMoveState; + } + break; + case 3: + if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2) + { + u8 movePosition = sub_8138B2C(); + + if (movePosition == 4) + { + gBattleScripting.learnMoveState = 4; + } + else + { + u16 moveId = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MOVE1 + movePosition); + + if (IsHMMove2(moveId)) + { + PrepareStringBattle(STRINGID_HMMOVESCANTBEFORGOTTEN, gActiveBattler); + gBattleScripting.learnMoveState = 5; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + PREPARE_MOVE_BUFFER(gBattleTextBuff2, moveId) + RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterMonId], movePosition); + SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterMonId], gMoveToLearn, movePosition); + if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId + && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[0].mimickedMoves & gBitTable[movePosition])) + { + RemoveBattleMonPPBonus(&gBattleMons[0], movePosition); + SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, movePosition); + } + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId + && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[2].mimickedMoves & gBitTable[movePosition])) + { + RemoveBattleMonPPBonus(&gBattleMons[2], movePosition); + SetBattleMonMoveSlot(&gBattleMons[2], gMoveToLearn, movePosition); + } + } + } + } + break; + case 4: + HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR); + gBattlescriptCurrInstr += 5; + break; + case 5: + if (!gBattleControllerExecFlags) + { + gBattleScripting.learnMoveState = 2; + } + break; + } +} + +void atk5B_yesnoboxstoplearningmove(void) +{ + switch (gBattleScripting.learnMoveState) + { + case 0: + HandleBattleWindow(0x17, 8, 0x1D, 0xD, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xE); + ++gBattleScripting.learnMoveState; + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(); + break; + case 1: + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(); + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(); + } + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(); + gBattleCommunication[CURSOR_POSITION] = 1; + BattleCreateYesNoCursorAt(); + } + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + + if (gBattleCommunication[1] != 0) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; + HandleBattleWindow(0x17, 0x8, 0x1D, 0xD, WINDOW_CLEAR); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + HandleBattleWindow(0x17, 0x8, 0x1D, 0xD, WINDOW_CLEAR); + } + break; + } +} + +void atk5C_hitanimation(void) +{ + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + { + gBattlescriptCurrInstr += 2; + } + else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) + || !(gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE) + || gDisableStructs[gActiveBattler].substituteHP == 0) + { + BtlController_EmitHitAnimation(0); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 2; + } + else + { + gBattlescriptCurrInstr += 2; + } +} + +#ifdef NONMATCHING +void atk5D_getmoneyreward(void) +{ + u32 i = 0; + u32 lastMonLevel = 0; + u32 moneyReward = 0; + u32 value; + + // The whole function is using wrong registers. + if (gBattleOutcome == B_OUTCOME_WON) + { + if (gTrainerBattleOpponent_A == 0x400) + { + moneyReward = 20 * gBattleResources->secretBase->party.levels[0] * gBattleStruct->moneyMultiplier; + } + else + { + switch (gTrainers[gTrainerBattleOpponent_A].partyFlags) + { + case 0: + { + const struct TrainerMonNoItemDefaultMoves *party = gTrainers[gTrainerBattleOpponent_A].party.NoItemDefaultMoves; + + lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET: + { + const struct TrainerMonNoItemCustomMoves *party = gTrainers[gTrainerBattleOpponent_A].party.NoItemCustomMoves; + + lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl; + } + break; + case F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemDefaultMoves *party = gTrainers[gTrainerBattleOpponent_A].party.ItemDefaultMoves; + + lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemCustomMoves *party = gTrainers[gTrainerBattleOpponent_A].party.ItemCustomMoves; + + lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl; + } + break; + } + for (; gTrainerMoneyTable[i].classId != 0xFF; ++i) + { + if (gTrainerMoneyTable[i].classId == gTrainers[gTrainerBattleOpponent_A].trainerClass) + break; + } + moneyReward = 4 * lastMonLevel; + moneyReward *= gBattleStruct->moneyMultiplier; + value = gTrainerMoneyTable[i].value; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + moneyReward *= (value << 1); + else + moneyReward *= value; + } + AddMoney(&gSaveBlock1Ptr->money, moneyReward); + } + else + { + moneyReward = sub_8054C04(); + } + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, moneyReward); + if (moneyReward) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); +} +#else +NAKED +void atk5D_getmoneyreward(void) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + movs r6, 0\n\ + movs r5, 0\n\ + ldr r0, _080258F0 @ =gBattleOutcome\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + beq _080258C0\n\ + b _080259FA\n\ + _080258C0:\n\ + ldr r0, _080258F4 @ =gTrainerBattleOpponent_A\n\ + ldrh r2, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 3\n\ + cmp r2, r1\n\ + bne _08025904\n\ + ldr r0, _080258F8 @ =gBattleResources\n\ + ldr r0, [r0]\n\ + ldr r0, [r0]\n\ + adds r0, 0x94\n\ + ldrb r2, [r0]\n\ + ldr r0, _080258FC @ =gBattleStruct\n\ + ldr r0, [r0]\n\ + adds r0, 0x4A\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r4, r2, 0\n\ + muls r4, r0\n\ + ldr r0, _08025900 @ =gSaveBlock1Ptr\n\ + mov r8, r0\n\ + b _080259E8\n\ + .align 2, 0\n\ + _080258F0: .4byte gBattleOutcome\n\ + _080258F4: .4byte gTrainerBattleOpponent_A\n\ + _080258F8: .4byte gBattleResources\n\ + _080258FC: .4byte gBattleStruct\n\ + _08025900: .4byte gSaveBlock1Ptr\n\ + _08025904:\n\ + ldr r2, _08025920 @ =gTrainers\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r3, r0, 3\n\ + adds r4, r3, r2\n\ + ldrb r1, [r4]\n\ + cmp r1, 0x1\n\ + beq _0802595A\n\ + cmp r1, 0x1\n\ + bgt _08025924\n\ + cmp r1, 0\n\ + beq _0802592E\n\ + b _08025970\n\ + .align 2, 0\n\ + _08025920: .4byte gTrainers\n\ + _08025924:\n\ + cmp r1, 0x2\n\ + beq _08025944\n\ + cmp r1, 0x3\n\ + beq _0802595A\n\ + b _08025970\n\ + _0802592E:\n\ + adds r0, r2, 0\n\ + adds r0, 0x24\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + subs r0, 0x8\n\ + b _0802596E\n\ + _08025944:\n\ + adds r0, r2, 0\n\ + adds r0, 0x24\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + subs r0, 0x8\n\ + b _0802596E\n\ + _0802595A:\n\ + adds r0, r2, 0\n\ + adds r0, 0x24\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + subs r0, 0x10\n\ + _0802596E:\n\ + ldrb r5, [r0, 0x2]\n\ + _08025970:\n\ + ldr r0, _080259CC @ =gTrainerMoneyTable\n\ + lsls r1, r6, 2\n\ + adds r3, r1, r0\n\ + ldrb r1, [r3]\n\ + ldr r7, _080259D0 @ =gBattleStruct\n\ + mov r12, r0\n\ + lsls r4, r5, 2\n\ + ldr r5, _080259D4 @ =gBattleTypeFlags\n\ + ldr r0, _080259D8 @ =gSaveBlock1Ptr\n\ + mov r8, r0\n\ + cmp r1, 0xFF\n\ + beq _080259AA\n\ + ldr r2, _080259DC @ =gTrainers\n\ + ldr r0, _080259E0 @ =gTrainerBattleOpponent_A\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + ldrb r2, [r0, 0x1]\n\ + adds r1, r3, 0\n\ + _0802599A:\n\ + ldrb r0, [r1]\n\ + cmp r0, r2\n\ + beq _080259AA\n\ + adds r1, 0x4\n\ + adds r6, 0x1\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xFF\n\ + bne _0802599A\n\ + _080259AA:\n\ + ldr r0, [r7]\n\ + adds r0, 0x4A\n\ + ldrb r0, [r0]\n\ + adds r3, r4, 0\n\ + muls r3, r0\n\ + lsls r0, r6, 2\n\ + add r0, r12\n\ + ldrb r2, [r0, 0x1]\n\ + ldr r0, [r5]\n\ + movs r1, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080259E4\n\ + lsls r0, r2, 1\n\ + adds r4, r3, 0\n\ + muls r4, r0\n\ + b _080259E8\n\ + .align 2, 0\n\ + _080259CC: .4byte gTrainerMoneyTable\n\ + _080259D0: .4byte gBattleStruct\n\ + _080259D4: .4byte gBattleTypeFlags\n\ + _080259D8: .4byte gSaveBlock1Ptr\n\ + _080259DC: .4byte gTrainers\n\ + _080259E0: .4byte gTrainerBattleOpponent_A\n\ + _080259E4:\n\ + adds r4, r3, 0\n\ + muls r4, r2\n\ + _080259E8:\n\ + mov r1, r8\n\ + ldr r0, [r1]\n\ + movs r1, 0xA4\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + adds r1, r4, 0\n\ + bl AddMoney\n\ + b _08025A00\n\ + _080259FA:\n\ + bl sub_8054C04\n\ + adds r4, r0, 0\n\ + _08025A00:\n\ + ldr r1, _08025A40 @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x1\n\ + strb r0, [r1, 0x1]\n\ + movs r0, 0x4\n\ + strb r0, [r1, 0x2]\n\ + movs r0, 0x5\n\ + strb r0, [r1, 0x3]\n\ + strb r4, [r1, 0x4]\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r4\n\ + lsrs r0, 8\n\ + strb r0, [r1, 0x5]\n\ + movs r0, 0xFF\n\ + lsls r0, 16\n\ + ands r0, r4\n\ + lsrs r0, 16\n\ + strb r0, [r1, 0x6]\n\ + lsrs r0, r4, 24\n\ + strb r0, [r1, 0x7]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x8]\n\ + cmp r4, 0\n\ + beq _08025A48\n\ + ldr r1, _08025A44 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + b _08025A62\n\ + .align 2, 0\n\ + _08025A40: .4byte gBattleTextBuff1\n\ + _08025A44: .4byte gBattlescriptCurrInstr\n\ + _08025A48:\n\ + ldr r3, _08025A6C @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ + _08025A62:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _08025A6C: .4byte gBattlescriptCurrInstr\n\ + "); +} +#endif + +void atk5E(void) +{ + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + + switch (gBattleCommunication[0]) + { + case 0: + BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, 0); + MarkBattlerForControllerExec(gActiveBattler); + ++gBattleCommunication[0]; + break; + case 1: + if (!gBattleControllerExecFlags) + { + s32 i; + struct BattlePokemon *bufferPoke = (struct BattlePokemon *) &gBattleBufferB[gActiveBattler][4]; + + for (i = 0; i < MAX_MON_MOVES; ++i) + { + gBattleMons[gActiveBattler].moves[i] = bufferPoke->moves[i]; + gBattleMons[gActiveBattler].pp[i] = bufferPoke->pp[i]; + } + gBattlescriptCurrInstr += 2; + } + break; + } +} + +void atk5F_swapattackerwithtarget(void) +{ + gActiveBattler = gBattlerAttacker; + gBattlerAttacker = gBattlerTarget; + gBattlerTarget = gActiveBattler; + if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET) + gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET); + else + gHitMarker |= HITMARKER_SWAP_ATTACKER_TARGET; + ++gBattlescriptCurrInstr; +} + +void atk60_incrementgamestat(void) +{ + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + IncrementGameStat(gBattlescriptCurrInstr[1]); + gBattlescriptCurrInstr += 2; +} + +void atk61_drawpartystatussummary(void) +{ + s32 i; + struct Pokemon *party; + struct HpAndStatus hpStatuses[PARTY_SIZE]; + + if (!gBattleControllerExecFlags) + { + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + party = gPlayerParty; + else + party = gEnemyParty; + + for (i = 0; i < PARTY_SIZE; ++i) + { + if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE + || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + hpStatuses[i].hp = 0xFFFF; + hpStatuses[i].status = 0; + } + else + { + hpStatuses[i].hp = GetMonData(&party[i], MON_DATA_HP); + hpStatuses[i].status = GetMonData(&party[i], MON_DATA_STATUS); + } + } + BtlController_EmitDrawPartyStatusSummary(0, hpStatuses, 1); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 2; + } +} + +void atk62_hidepartystatussummary(void) +{ + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + BtlController_EmitHidePartyStatusSummary(0); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 2; +} + +void atk63_jumptocalledmove(void) +{ + if (gBattlescriptCurrInstr[1]) + gCurrentMove = gCalledMove; + else + gChosenMove = gCurrentMove = gCalledMove; + gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; +} + +void atk64_statusanimation(void) +{ + if (!gBattleControllerExecFlags) + { + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) + && gDisableStructs[gActiveBattler].substituteHP == 0 + && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + BtlController_EmitStatusAnimation(0, FALSE, gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); + } + gBattlescriptCurrInstr += 2; + } +} + +void atk65_status2animation(void) +{ + u32 wantedToAnimate; + + if (!gBattleControllerExecFlags) + { + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + wantedToAnimate = T1_READ_32(gBattlescriptCurrInstr + 2); + if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) + && gDisableStructs[gActiveBattler].substituteHP == 0 + && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + BtlController_EmitStatusAnimation(0, TRUE, gBattleMons[gActiveBattler].status2 & wantedToAnimate); + MarkBattlerForControllerExec(gActiveBattler); + } + gBattlescriptCurrInstr += 6; + } +} + +void atk66_chosenstatusanimation(void) +{ + u32 wantedStatus; + + if (!gBattleControllerExecFlags) + { + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + wantedStatus = T1_READ_32(gBattlescriptCurrInstr + 3); + if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) + && gDisableStructs[gActiveBattler].substituteHP == 0 + && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + BtlController_EmitStatusAnimation(0, gBattlescriptCurrInstr[2], wantedStatus); + MarkBattlerForControllerExec(gActiveBattler); + } + gBattlescriptCurrInstr += 7; + } +} + +void atk67_yesnobox(void) +{ + switch (gBattleCommunication[0]) + { + case 0: + HandleBattleWindow(0x17, 8, 0x1D, 0xD, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xE); + ++gBattleCommunication[0]; + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(); + break; + case 1: + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(); + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(); + } + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(); + gBattleCommunication[CURSOR_POSITION] = 1; + BattleCreateYesNoCursorAt(); + } + if (JOY_NEW(B_BUTTON)) + { + gBattleCommunication[CURSOR_POSITION] = 1; + PlaySE(SE_SELECT); + HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR); + ++gBattlescriptCurrInstr; + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR); + ++gBattlescriptCurrInstr; + } + break; + } +} + +void atk68_cancelallactions(void) +{ + s32 i; + + for (i = 0; i < gBattlersCount; ++i) + gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER; + ++gBattlescriptCurrInstr; +} + +// The same as 0x7, except there's no random damage multiplier. +void atk69_adjustsetdamage(void) +{ + u8 holdEffect, param; + + if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY) + { + holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect; + param = gEnigmaBerries[gBattlerTarget].holdEffectParam; + } + else + { + holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item); + param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item); + } + gPotentialItemEffectBattler = gBattlerTarget; + if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param) + { + RecordItemEffectBattle(gBattlerTarget, holdEffect); + gSpecialStatuses[gBattlerTarget].focusBanded = 1; + } + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) + && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded) + && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) + { + gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; + if (gProtectStructs[gBattlerTarget].endured) + { + gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; + } + else if (gSpecialStatuses[gBattlerTarget].focusBanded) + { + gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; + gLastUsedItem = gBattleMons[gBattlerTarget].item; + } + } + ++gBattlescriptCurrInstr; +} + +void atk6A_removeitem(void) +{ + u16 *usedHeldItem; + + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + usedHeldItem = &gBattleStruct->usedHeldItems[gActiveBattler]; + *usedHeldItem = gBattleMons[gActiveBattler].item; + gBattleMons[gActiveBattler].item = ITEM_NONE; + BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBattler].item); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 2; +} + +void atk6B_atknameinbuff1(void) +{ + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]) + ++gBattlescriptCurrInstr; +} |