diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-11-09 13:59:24 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-11-09 13:59:24 -0500 |
commit | 55bede6ca279483a0e4b9b51ebe152d4be135b93 (patch) | |
tree | c71d15d950a17f44276254643b155229f2b8ece5 | |
parent | 9773fcf278cd9e830440c993a3e79899c2f89b67 (diff) |
Finish decomp of battle_tower
-rw-r--r-- | asm/battle_message.s | 2 | ||||
-rw-r--r-- | asm/battle_tower.s | 2175 | ||||
-rw-r--r-- | asm/link_rfu_3.s | 8 | ||||
-rw-r--r-- | asm/party_menu.s | 42 | ||||
-rw-r--r-- | asm/script_pokemon_util_80A0058.s | 12 | ||||
-rw-r--r-- | include/battle_tower.h | 4 | ||||
-rw-r--r-- | include/party_menu.h | 1 | ||||
-rw-r--r-- | include/script_pokemon_util_80A0058.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_tower.c | 764 | ||||
-rw-r--r-- | src/mevent.c | 2 | ||||
-rw-r--r-- | sym_ewram.txt | 26 |
12 files changed, 802 insertions, 2236 deletions
diff --git a/asm/battle_message.s b/asm/battle_message.s index 28d7b196d..18d4106e1 100644 --- a/asm/battle_message.s +++ b/asm/battle_message.s @@ -1781,7 +1781,7 @@ _080D80F0: cmp r0, 0 beq _080D810C mov r0, sp - bl sub_80E6150 + bl get_trainer_name b _080D8382 .align 2, 0 _080D8108: .4byte gBattleTypeFlags diff --git a/asm/battle_tower.s b/asm/battle_tower.s deleted file mode 100644 index 3d4169293..000000000 --- a/asm/battle_tower.s +++ /dev/null @@ -1,2175 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80E64C0 -sub_80E64C0: @ 80E64C0 - push {r4-r6,lr} - lsls r0, 16 - lsrs r0, 16 - adds r5, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetSetPokedexFlag - lsls r0, 24 - cmp r0, 0 - beq _080E6554 - cmp r4, 0 - bne _080E64EC - ldr r0, _080E6514 @ =gStringVar1 - ldr r1, _080E6518 @ =gUnknown_83FE859 - bl StringAppend -_080E64EC: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r6, _080E6514 @ =gStringVar1 - movs r0, 0xB - adds r1, r5, 0 - muls r1, r0 - ldr r0, _080E651C @ =gSpeciesNames - adds r1, r0 - adds r0, r6, 0 - bl StringAppend - cmp r4, 0x5 - beq _080E6538 - cmp r4, 0x5 - bgt _080E6520 - cmp r4, 0x2 - beq _080E652A - b _080E654C - .align 2, 0 -_080E6514: .4byte gStringVar1 -_080E6518: .4byte gUnknown_83FE859 -_080E651C: .4byte gSpeciesNames -_080E6520: - cmp r4, 0x8 - beq _080E6538 - cmp r4, 0xB - beq _080E6538 - b _080E654C -_080E652A: - ldr r1, _080E6534 @ =gUnknown_83FE85E - adds r0, r6, 0 - bl StringAppend - b _080E6554 - .align 2, 0 -_080E6534: .4byte gUnknown_83FE85E -_080E6538: - ldr r0, _080E6544 @ =gStringVar1 - ldr r1, _080E6548 @ =gUnknown_83FE85C - bl StringAppend - b _080E6554 - .align 2, 0 -_080E6544: .4byte gStringVar1 -_080E6548: .4byte gUnknown_83FE85C -_080E654C: - ldr r0, _080E655C @ =gStringVar1 - ldr r1, _080E6560 @ =gUnknown_83FE859 - bl StringAppend -_080E6554: - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080E655C: .4byte gStringVar1 -_080E6560: .4byte gUnknown_83FE859 - thumb_func_end sub_80E64C0 - - thumb_func_start sub_80E6564 -sub_80E6564: @ 80E6564 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r2, [sp, 0x20] - ldr r4, [sp, 0x24] - mov r9, r4 - ldr r4, [sp, 0x28] - mov r10, r4 - ldr r7, [sp, 0x2C] - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r3, 24 - lsrs r3, 24 - mov r12, r3 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - movs r2, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - beq _080E6632 - cmp r4, 0 - beq _080E6632 - ldr r0, _080E6640 @ =gBattleTowerBannedSpecies - ldrh r1, [r0] - ldr r5, _080E6644 @ =0x0000ffff - adds r3, r0, 0 - cmp r1, r5 - beq _080E65C8 - cmp r1, r4 - beq _080E65BC - adds r1, r3, 0 -_080E65AE: - adds r1, 0x2 - adds r2, 0x1 - ldrh r0, [r1] - cmp r0, r5 - beq _080E65C8 - cmp r0, r4 - bne _080E65AE -_080E65BC: - lsls r0, r2, 1 - adds r0, r3 - ldrh r1, [r0] - ldr r0, _080E6644 @ =0x0000ffff - cmp r1, r0 - bne _080E6632 -_080E65C8: - mov r0, r12 - cmp r0, 0 - bne _080E65D4 - mov r1, r8 - cmp r1, 0x32 - bhi _080E6632 -_080E65D4: - movs r2, 0 - ldrb r3, [r7] - cmp r2, r3 - bge _080E65F4 - mov r1, r9 - ldrh r0, [r1] - cmp r0, r4 - beq _080E65F4 - adds r5, r3, 0 -_080E65E6: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r5 - bge _080E65F4 - ldrh r0, [r1] - cmp r0, r4 - bne _080E65E6 -_080E65F4: - cmp r2, r3 - bne _080E6632 - cmp r6, 0 - beq _080E661E - movs r2, 0 - cmp r2, r3 - bge _080E661A - mov r1, r10 - ldrh r0, [r1] - cmp r0, r6 - beq _080E661A - adds r5, r3, 0 -_080E660C: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r5 - bge _080E661A - ldrh r0, [r1] - cmp r0, r6 - bne _080E660C -_080E661A: - cmp r2, r3 - bne _080E6632 -_080E661E: - lsls r0, r3, 1 - add r0, r9 - strh r4, [r0] - ldrb r0, [r7] - lsls r0, 1 - add r0, r10 - strh r6, [r0] - ldrb r0, [r7] - adds r0, 0x1 - strb r0, [r7] -_080E6632: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E6640: .4byte gBattleTowerBannedSpecies -_080E6644: .4byte 0x0000ffff - thumb_func_end sub_80E6564 - - thumb_func_start CheckPartyBattleTowerBanlist -CheckPartyBattleTowerBanlist: @ 80E6648 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - add r1, sp, 0x28 - movs r0, 0 - strb r0, [r1] - movs r7, 0 - mov r9, r1 - add r0, sp, 0x1C - mov r10, r0 -_080E6662: - movs r0, 0x64 - adds r5, r7, 0 - muls r5, r0 - ldr r0, _080E6724 @ =gPlayerParty - adds r5, r0 - adds r0, r5, 0 - movs r1, 0x41 - bl GetMonData - mov r8, r0 - mov r1, r8 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - adds r0, r5, 0 - movs r1, 0xC - bl GetMonData - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 16 - adds r0, r5, 0 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - adds r2, r0, 0 - lsls r2, 16 - lsrs r2, 16 - ldr r5, _080E6728 @ =gSpecialVar_Result - ldrb r3, [r5] - str r4, [sp] - add r0, sp, 0x10 - str r0, [sp, 0x4] - mov r1, r10 - str r1, [sp, 0x8] - mov r0, r9 - str r0, [sp, 0xC] - mov r0, r8 - adds r1, r6, 0 - bl sub_80E6564 - adds r7, 0x1 - cmp r7, 0x5 - ble _080E6662 - mov r1, r9 - ldrb r0, [r1] - cmp r0, 0x2 - bhi _080E6750 - ldr r1, _080E672C @ =gStringVar1 - movs r0, 0xFF - strb r0, [r1] - ldr r1, _080E6730 @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - movs r0, 0 - mov r1, r9 - strb r0, [r1] - ldr r2, _080E6734 @ =gBattleTowerBannedSpecies - ldrh r0, [r2] - ldr r1, _080E6738 @ =0x0000ffff - cmp r0, r1 - beq _080E6704 - mov r5, r9 - adds r6, r1, 0 - adds r4, r2, 0 -_080E66F2: - ldrh r0, [r4] - ldrb r1, [r5] - bl sub_80E64C0 - strb r0, [r5] - adds r4, 0x2 - ldrh r0, [r4] - cmp r0, r6 - bne _080E66F2 -_080E6704: - ldr r4, _080E672C @ =gStringVar1 - adds r0, r4, 0 - bl StringLength - lsls r0, 16 - lsrs r7, r0, 16 - subs r0, r7, 0x1 - adds r0, r4 - movs r1, 0xFF - strb r1, [r0] - mov r1, r9 - ldrb r0, [r1] - cmp r0, 0x2 - bhi _080E6740 - ldr r1, _080E673C @ =gUnknown_83FE860 - b _080E6742 - .align 2, 0 -_080E6724: .4byte gPlayerParty -_080E6728: .4byte gSpecialVar_Result -_080E672C: .4byte gStringVar1 -_080E6730: .4byte gSpecialVar_0x8004 -_080E6734: .4byte gBattleTowerBannedSpecies -_080E6738: .4byte 0x0000ffff -_080E673C: .4byte gUnknown_83FE860 -_080E6740: - ldr r1, _080E674C @ =gUnknown_83FE864 -_080E6742: - adds r0, r4, 0 - bl StringAppend - b _080E6770 - .align 2, 0 -_080E674C: .4byte gUnknown_83FE864 -_080E6750: - ldr r1, _080E6780 @ =gSpecialVar_0x8004 - movs r0, 0 - strh r0, [r1] - ldr r0, _080E6784 @ =gSaveBlock2Ptr - ldr r2, [r0] - ldrb r0, [r5] - ldr r1, _080E6788 @ =0x0000055c - adds r2, r1 - movs r1, 0x1 - ands r1, r0 - ldrb r3, [r2] - movs r0, 0x2 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] -_080E6770: - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E6780: .4byte gSpecialVar_0x8004 -_080E6784: .4byte gSaveBlock2Ptr -_080E6788: .4byte 0x0000055c - thumb_func_end CheckPartyBattleTowerBanlist - - thumb_func_start sub_80E678C -sub_80E678C: @ 80E678C - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x3 - movs r2, 0x2 - movs r3, 0x12 - bl EC_DoesEasyChatStringFitOnLine - lsls r0, 24 - cmp r0, 0 - beq _080E67E4 - ldr r5, _080E67E0 @ =gStringVar4 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x2 - movs r3, 0x3 - bl ConvertEasyChatWordsToString - ldrb r0, [r5] - movs r1, 0x1 - cmp r0, 0xFE - beq _080E67C2 - adds r2, r5, 0 -_080E67B8: - adds r0, r1, r2 - ldrb r0, [r0] - adds r1, 0x1 - cmp r0, 0xFE - bne _080E67B8 -_080E67C2: - ldr r2, _080E67E0 @ =gStringVar4 - adds r0, r1, r2 - ldrb r0, [r0] - adds r3, r2, 0 - cmp r0, 0xFE - beq _080E67D8 -_080E67CE: - adds r1, 0x1 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0xFE - bne _080E67CE -_080E67D8: - adds r1, r3 - movs r0, 0xFA - strb r0, [r1] - b _080E67F0 - .align 2, 0 -_080E67E0: .4byte gStringVar4 -_080E67E4: - ldr r0, _080E67F8 @ =gStringVar4 - adds r1, r4, 0 - movs r2, 0x3 - movs r3, 0x2 - bl ConvertEasyChatWordsToString -_080E67F0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E67F8: .4byte gStringVar4 - thumb_func_end sub_80E678C - - thumb_func_start PrintBattleTowerTrainerGreeting -PrintBattleTowerTrainerGreeting: @ 80E67FC - push {lr} - ldr r0, _080E6818 @ =gSaveBlock2Ptr - ldr r2, [r0] - ldr r1, _080E681C @ =0x0000056c - adds r0, r2, r1 - ldrb r1, [r0] - cmp r1, 0xC8 - bne _080E6820 - movs r1, 0x96 - lsls r1, 3 - adds r0, r2, r1 - bl sub_80E678C - b _080E684C - .align 2, 0 -_080E6818: .4byte gSaveBlock2Ptr -_080E681C: .4byte 0x0000056c -_080E6820: - cmp r1, 0x63 - bhi _080E683C - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E6838 @ =gBattleTowerTrainers + 6 - adds r0, r1 - bl sub_80E678C - b _080E684C - .align 2, 0 -_080E6838: .4byte gBattleTowerTrainers + 6 -_080E683C: - ldrb r1, [r0] - movs r0, 0xA4 - muls r0, r1 - adds r0, r2 - ldr r1, _080E6850 @ =0xffffc154 - adds r0, r1 - bl sub_80E678C -_080E684C: - pop {r0} - bx r0 - .align 2, 0 -_080E6850: .4byte 0xffffc154 - thumb_func_end PrintBattleTowerTrainerGreeting - - thumb_func_start sub_80E6854 -sub_80E6854: @ 80E6854 - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _080E686C @ =gUnknown_203AAB8 - ldrh r0, [r0] - cmp r0, 0x1 - beq _080E6870 - cmp r0, 0x1 - ble _080E68B0 - cmp r0, 0x2 - beq _080E68AC - b _080E68B0 - .align 2, 0 -_080E686C: .4byte gUnknown_203AAB8 -_080E6870: - movs r5, 0 - ldr r6, _080E68A4 @ =gSaveBlock1Ptr -_080E6874: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - adds r1, r4, 0 - adds r1, 0x38 - ldr r0, [r6] - adds r0, r1 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1] - ldr r0, _080E68A8 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r5, 0x1 - cmp r5, 0x5 - ble _080E6874 - b _080E68B0 - .align 2, 0 -_080E68A4: .4byte gSaveBlock1Ptr -_080E68A8: .4byte gPlayerParty -_080E68AC: - bl sub_80E7550 -_080E68B0: - ldr r0, _080E68C0 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E68C0: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_80E6854 - - thumb_func_start sub_80E68C4 -sub_80E68C4: @ 80E68C4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl BT_IsDone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080E68EC - ldr r0, _080E68F4 @ =gMain - ldr r1, _080E68F8 @ =sub_80E6854 - str r1, [r0, 0x8] - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _080E68FC @ =CB2_InitBattle - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_080E68EC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E68F4: .4byte gMain -_080E68F8: .4byte sub_80E6854 -_080E68FC: .4byte CB2_InitBattle - thumb_func_end sub_80E68C4 - - thumb_func_start StartSpecialBattle -StartSpecialBattle: @ 80E6900 - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _080E691C @ =gUnknown_203AAB8 - ldr r1, _080E6920 @ =gSpecialVar_0x8004 - ldrh r1, [r1] - strh r1, [r0] - ldrh r2, [r0] - cmp r2, 0x1 - beq _080E6944 - cmp r2, 0x1 - bgt _080E6924 - cmp r2, 0 - beq _080E692A - b _080E69E6 - .align 2, 0 -_080E691C: .4byte gUnknown_203AAB8 -_080E6920: .4byte gSpecialVar_0x8004 -_080E6924: - cmp r2, 0x2 - beq _080E6998 - b _080E69E6 -_080E692A: - ldr r1, _080E693C @ =gBattleTypeFlags - movs r0, 0x84 - lsls r0, 1 - str r0, [r1] - ldr r0, _080E6940 @ =gTrainerBattleOpponent_A - strh r2, [r0] - bl sub_80E61DC - b _080E6970 - .align 2, 0 -_080E693C: .4byte gBattleTypeFlags -_080E6940: .4byte gTrainerBattleOpponent_A -_080E6944: - movs r5, 0 - ldr r6, _080E698C @ =gSaveBlock1Ptr -_080E6948: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _080E6990 @ =gPlayerParty - adds r0, r4, r0 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1] - adds r4, 0x38 - ldr r0, [r6] - adds r0, r4 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r5, 0x1 - cmp r5, 0x5 - ble _080E6948 -_080E6970: - ldr r0, _080E6994 @ =sub_80E68C4 - movs r1, 0x1 - bl CreateTask - movs r0, 0 - bl PlayMapChosenOrBattleBGM - bl BattleSetup_GetBattleTowerBattleTransition - lsls r0, 24 - lsrs r0, 24 - bl BT_StartOnField - b _080E69E6 - .align 2, 0 -_080E698C: .4byte gSaveBlock1Ptr -_080E6990: .4byte gPlayerParty -_080E6994: .4byte sub_80E68C4 -_080E6998: - bl ZeroEnemyPartyMons - movs r5, 0 - ldr r4, _080E69F0 @ =gSaveBlock2Ptr -_080E69A0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _080E69F4 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2C - adds r2, r5, 0 - muls r2, r1 - ldr r1, _080E69F8 @ =0x000004d4 - adds r2, r1 - ldr r1, [r4] - adds r1, r2 - bl CreateBattleTowerMon - adds r5, 0x1 - cmp r5, 0x2 - ble _080E69A0 - ldr r1, _080E69FC @ =gBattleTypeFlags - ldr r0, _080E6A00 @ =0x00000808 - str r0, [r1] - ldr r1, _080E6A04 @ =gTrainerBattleOpponent_A - movs r0, 0 - strh r0, [r1] - ldr r0, _080E6A08 @ =sub_80E68C4 - movs r1, 0x1 - bl CreateTask - movs r0, 0 - bl PlayMapChosenOrBattleBGM - bl BattleSetup_GetBattleTowerBattleTransition - lsls r0, 24 - lsrs r0, 24 - bl BT_StartOnField -_080E69E6: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E69F0: .4byte gSaveBlock2Ptr -_080E69F4: .4byte gEnemyParty -_080E69F8: .4byte 0x000004d4 -_080E69FC: .4byte gBattleTypeFlags -_080E6A00: .4byte 0x00000808 -_080E6A04: .4byte gTrainerBattleOpponent_A -_080E6A08: .4byte sub_80E68C4 - thumb_func_end StartSpecialBattle - - thumb_func_start SetBattleTowerProperty -SetBattleTowerProperty: @ 80E6A0C - push {r4-r6,lr} - ldr r1, _080E6A34 @ =gSaveBlock2Ptr - ldr r0, [r1] - ldr r2, _080E6A38 @ =0x0000055c - adds r0, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r5, r0, 31 - ldr r0, _080E6A3C @ =gSpecialVar_0x8004 - ldrh r0, [r0] - adds r6, r1, 0 - cmp r0, 0xE - bls _080E6A28 - b _080E6C80 -_080E6A28: - lsls r0, 2 - ldr r1, _080E6A40 @ =_080E6A44 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080E6A34: .4byte gSaveBlock2Ptr -_080E6A38: .4byte 0x0000055c -_080E6A3C: .4byte gSpecialVar_0x8004 -_080E6A40: .4byte _080E6A44 - .align 2, 0 -_080E6A44: - .4byte _080E6A80 - .4byte _080E6AAC - .4byte _080E6AD0 - .4byte _080E6AE4 - .4byte _080E6AFC - .4byte _080E6B14 - .4byte _080E6B3C - .4byte _080E6BA4 - .4byte _080E6BD8 - .4byte _080E6C80 - .4byte _080E6C00 - .4byte _080E6C14 - .4byte _080E6C30 - .4byte _080E6C4C - .4byte _080E6C6C -_080E6A80: - ldr r0, _080E6AA0 @ =gBattleStruct - ldr r1, [r0] - adds r1, 0xDA - ldr r0, [r6] - ldr r2, _080E6AA4 @ =0x0000055e - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, [r6] - adds r0, r2 - adds r0, r5 - ldr r1, _080E6AA8 @ =gSpecialVar_0x8005 - ldrh r1, [r1] - strb r1, [r0] - b _080E6C80 - .align 2, 0 -_080E6AA0: .4byte gBattleStruct -_080E6AA4: .4byte 0x0000055e -_080E6AA8: .4byte gSpecialVar_0x8005 -_080E6AAC: - ldr r2, [r6] - ldr r0, _080E6AC8 @ =gSpecialVar_0x8005 - ldrb r0, [r0] - ldr r3, _080E6ACC @ =0x0000055c - adds r2, r3 - movs r1, 0x1 - ands r1, r0 - ldrb r3, [r2] - movs r0, 0x2 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - b _080E6C80 - .align 2, 0 -_080E6AC8: .4byte gSpecialVar_0x8005 -_080E6ACC: .4byte 0x0000055c -_080E6AD0: - ldr r0, [r6] - lsls r1, r5, 1 - movs r2, 0xAC - lsls r2, 3 - adds r0, r2 - adds r0, r1 - ldr r1, _080E6AE0 @ =gSpecialVar_0x8005 - b _080E6BC6 - .align 2, 0 -_080E6AE0: .4byte gSpecialVar_0x8005 -_080E6AE4: - ldr r0, [r6] - lsls r1, r5, 1 - ldr r3, _080E6AF4 @ =0x00000564 - adds r0, r3 - adds r0, r1 - ldr r1, _080E6AF8 @ =gSpecialVar_0x8005 - b _080E6BC6 - .align 2, 0 -_080E6AF4: .4byte 0x00000564 -_080E6AF8: .4byte gSpecialVar_0x8005 -_080E6AFC: - ldr r0, [r6] - ldr r1, _080E6B0C @ =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, _080E6B10 @ =0x0000056c - adds r0, r2 - strb r1, [r0] - b _080E6C80 - .align 2, 0 -_080E6B0C: .4byte gSpecialVar_0x8005 -_080E6B10: .4byte 0x0000056c -_080E6B14: - movs r2, 0 - ldr r5, _080E6B30 @ =gSaveBlock2Ptr - ldr r4, _080E6B34 @ =0x0000056d - ldr r3, _080E6B38 @ =gUnknown_203B0D4 -_080E6B1C: - ldr r0, [r5] - adds r0, r4 - adds r0, r2 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _080E6B1C - b _080E6C80 - .align 2, 0 -_080E6B30: .4byte gSaveBlock2Ptr -_080E6B34: .4byte 0x0000056d -_080E6B38: .4byte gUnknown_203B0D4 -_080E6B3C: - ldr r1, [r6] - ldr r3, _080E6B94 @ =0x0000056c - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0xC8 - bne _080E6B52 - movs r2, 0x94 - lsls r2, 3 - adds r0, r1, r2 - bl sub_80E7524 -_080E6B52: - ldr r0, [r6] - movs r3, 0xAF - lsls r3, 3 - adds r2, r0, r3 - ldrh r1, [r2] - ldr r0, _080E6B98 @ =0x0000270e - cmp r1, r0 - bhi _080E6B66 - adds r0, r1, 0x1 - strh r0, [r2] -_080E6B66: - ldr r1, [r6] - lsls r5, 1 - movs r4, 0xAC - lsls r4, 3 - adds r1, r4 - adds r1, r5 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - bl sub_80E6E48 - ldr r1, _080E6B9C @ =gSpecialVar_Result - ldr r0, [r6] - adds r0, r4 - adds r0, r5 - ldrh r0, [r0] - strh r0, [r1] - ldr r1, _080E6BA0 @ =gStringVar1 - adds r0, 0xA1 - strb r0, [r1] - movs r0, 0xFF - strb r0, [r1, 0x1] - b _080E6C80 - .align 2, 0 -_080E6B94: .4byte 0x0000056c -_080E6B98: .4byte 0x0000270e -_080E6B9C: .4byte gSpecialVar_Result -_080E6BA0: .4byte gStringVar1 -_080E6BA4: - ldr r0, [r6] - lsls r5, 1 - ldr r4, _080E6BCC @ =0x00000564 - adds r0, r4 - adds r2, r0, r5 - ldrh r1, [r2] - ldr r0, _080E6BD0 @ =0x00000595 - cmp r1, r0 - bhi _080E6BBA - adds r0, r1, 0x1 - strh r0, [r2] -_080E6BBA: - bl sub_80E6E48 - ldr r0, _080E6BD4 @ =gSpecialVar_Result - ldr r1, [r6] - adds r1, r4 - adds r1, r5 -_080E6BC6: - ldrh r1, [r1] - strh r1, [r0] - b _080E6C80 - .align 2, 0 -_080E6BCC: .4byte 0x00000564 -_080E6BD0: .4byte 0x00000595 -_080E6BD4: .4byte gSpecialVar_Result -_080E6BD8: - ldr r3, [r6] - ldr r0, _080E6BF8 @ =gSpecialVar_0x8005 - ldrb r0, [r0] - ldr r1, _080E6BFC @ =0x0000055c - adds r3, r1 - movs r1, 0x1 - ands r1, r0 - lsls r1, 1 - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _080E6C80 - .align 2, 0 -_080E6BF8: .4byte gSpecialVar_0x8005 -_080E6BFC: .4byte 0x0000055c -_080E6C00: - ldr r0, [r6] - ldr r2, _080E6C10 @ =0x0000057a - adds r0, r2 - ldrh r1, [r0] - movs r0, 0x20 - bl SetGameStat - b _080E6C80 - .align 2, 0 -_080E6C10: .4byte 0x0000057a -_080E6C14: - ldr r0, [r6] - ldr r3, _080E6C2C @ =0x0000055e - adds r0, r3 - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x3 - beq _080E6C80 - adds r0, r5, 0 - bl sub_80E5A38 - b _080E6C80 - .align 2, 0 -_080E6C2C: .4byte 0x0000055e -_080E6C30: - ldr r1, [r6] - ldr r0, _080E6C44 @ =0x0000055e - adds r1, r0 - adds r1, r5 - ldr r0, _080E6C48 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xDA - ldrb r0, [r0] - b _080E6C7E - .align 2, 0 -_080E6C44: .4byte 0x0000055e -_080E6C48: .4byte gBattleStruct -_080E6C4C: - adds r0, r5, 0 - bl sub_80E7188 - ldr r1, _080E6C64 @ =gSaveBlock2Ptr - ldr r1, [r1] - lsls r2, r5, 1 - ldr r3, _080E6C68 @ =0x0000057c - adds r1, r3 - adds r1, r2 - strh r0, [r1] - b _080E6C80 - .align 2, 0 -_080E6C64: .4byte gSaveBlock2Ptr -_080E6C68: .4byte 0x0000057c -_080E6C6C: - ldr r1, [r6] - ldr r2, _080E6C88 @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - movs r3, 0xB0 - lsls r3, 3 - adds r1, r3 -_080E6C7E: - strb r0, [r1] -_080E6C80: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E6C88: .4byte 0x0000055c - thumb_func_end SetBattleTowerProperty - - thumb_func_start BattleTowerUtil -BattleTowerUtil: @ 80E6C8C - push {r4,lr} - ldr r1, _080E6CB4 @ =gSaveBlock2Ptr - ldr r0, [r1] - ldr r2, _080E6CB8 @ =0x0000055c - adds r0, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r4, r0, 31 - ldr r0, _080E6CBC @ =gSpecialVar_0x8004 - ldrh r0, [r0] - adds r3, r1, 0 - cmp r0, 0xE - bls _080E6CA8 - b _080E6E08 -_080E6CA8: - lsls r0, 2 - ldr r1, _080E6CC0 @ =_080E6CC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080E6CB4: .4byte gSaveBlock2Ptr -_080E6CB8: .4byte 0x0000055c -_080E6CBC: .4byte gSpecialVar_0x8004 -_080E6CC0: .4byte _080E6CC4 - .align 2, 0 -_080E6CC4: - .4byte _080E6D00 - .4byte _080E6D14 - .4byte _080E6D2C - .4byte _080E6D3C - .4byte _080E6D58 - .4byte _080E6E08 - .4byte _080E6E08 - .4byte _080E6E08 - .4byte _080E6D70 - .4byte _080E6D8C - .4byte _080E6D9C - .4byte _080E6DB0 - .4byte _080E6DB8 - .4byte _080E6DD4 - .4byte _080E6DF4 -_080E6D00: - ldr r0, _080E6D0C @ =gSpecialVar_Result - ldr r1, [r3] - ldr r3, _080E6D10 @ =0x0000055e - adds r1, r3 - adds r1, r4 - b _080E6D60 - .align 2, 0 -_080E6D0C: .4byte gSpecialVar_Result -_080E6D10: .4byte 0x0000055e -_080E6D14: - ldr r0, _080E6D24 @ =gSpecialVar_Result - ldr r1, [r3] - ldr r2, _080E6D28 @ =0x0000055c - adds r1, r2 - ldrb r1, [r1] - lsls r1, 31 - b _080E6D7C - .align 2, 0 -_080E6D24: .4byte gSpecialVar_Result -_080E6D28: .4byte 0x0000055c -_080E6D2C: - ldr r2, _080E6D38 @ =gSpecialVar_Result - ldr r0, [r3] - lsls r1, r4, 1 - movs r3, 0xAC - lsls r3, 3 - b _080E6D44 - .align 2, 0 -_080E6D38: .4byte gSpecialVar_Result -_080E6D3C: - ldr r2, _080E6D50 @ =gSpecialVar_Result - ldr r0, [r3] - lsls r1, r4, 1 - ldr r3, _080E6D54 @ =0x00000564 -_080E6D44: - adds r0, r3 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - b _080E6E08 - .align 2, 0 -_080E6D50: .4byte gSpecialVar_Result -_080E6D54: .4byte 0x00000564 -_080E6D58: - ldr r0, _080E6D68 @ =gSpecialVar_Result - ldr r1, [r3] - ldr r2, _080E6D6C @ =0x0000056c - adds r1, r2 -_080E6D60: - ldrb r1, [r1] - strh r1, [r0] - b _080E6E08 - .align 2, 0 -_080E6D68: .4byte gSpecialVar_Result -_080E6D6C: .4byte 0x0000056c -_080E6D70: - ldr r0, _080E6D84 @ =gSpecialVar_Result - ldr r1, [r3] - ldr r3, _080E6D88 @ =0x0000055c - adds r1, r3 - ldrb r1, [r1] - lsls r1, 30 -_080E6D7C: - lsrs r1, 31 - strh r1, [r0] - b _080E6E08 - .align 2, 0 -_080E6D84: .4byte gSpecialVar_Result -_080E6D88: .4byte 0x0000055c -_080E6D8C: - adds r0, r4, 0 - bl sub_80E7188 - ldr r1, _080E6D98 @ =gSpecialVar_Result - strh r0, [r1] - b _080E6E08 - .align 2, 0 -_080E6D98: .4byte gSpecialVar_Result -_080E6D9C: - ldr r0, [r3] - ldr r1, _080E6DAC @ =0x0000057a - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x20 - bl SetGameStat - b _080E6E08 - .align 2, 0 -_080E6DAC: .4byte 0x0000057a -_080E6DB0: - adds r0, r4, 0 - bl sub_80E5A38 - b _080E6E08 -_080E6DB8: - ldr r1, [r3] - ldr r2, _080E6DCC @ =0x0000055e - adds r1, r2 - adds r1, r4 - ldr r0, _080E6DD0 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xDA - ldrb r0, [r0] - b _080E6E06 - .align 2, 0 -_080E6DCC: .4byte 0x0000055e -_080E6DD0: .4byte gBattleStruct -_080E6DD4: - adds r0, r4, 0 - bl sub_80E7188 - ldr r1, _080E6DEC @ =gSaveBlock2Ptr - ldr r1, [r1] - lsls r2, r4, 1 - ldr r3, _080E6DF0 @ =0x0000057c - adds r1, r3 - adds r1, r2 - strh r0, [r1] - b _080E6E08 - .align 2, 0 -_080E6DEC: .4byte gSaveBlock2Ptr -_080E6DF0: .4byte 0x0000057c -_080E6DF4: - ldr r1, [r3] - ldr r2, _080E6E10 @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - movs r3, 0xB0 - lsls r3, 3 - adds r1, r3 -_080E6E06: - strb r0, [r1] -_080E6E08: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E6E10: .4byte 0x0000055c - thumb_func_end BattleTowerUtil - - thumb_func_start SetBattleTowerParty -SetBattleTowerParty: @ 80E6E14 - push {r4,r5,lr} - movs r2, 0 - ldr r5, _080E6E3C @ =gUnknown_203B0D4 - ldr r4, _080E6E40 @ =gSaveBlock2Ptr - ldr r3, _080E6E44 @ =0x0000056d -_080E6E1E: - adds r0, r2, r5 - ldr r1, [r4] - adds r1, r3 - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _080E6E1E - bl ReducePlayerPartyToThree - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E6E3C: .4byte gUnknown_203B0D4 -_080E6E40: .4byte gSaveBlock2Ptr -_080E6E44: .4byte 0x0000056d - thumb_func_end SetBattleTowerParty - - thumb_func_start sub_80E6E48 -sub_80E6E48: @ 80E6E48 - push {r4-r6,lr} - ldr r6, _080E6E98 @ =gSaveBlock2Ptr - ldr r0, [r6] - ldr r1, _080E6E9C @ =0x0000055c - adds r0, r1 - ldrb r4, [r0] - lsls r4, 31 - lsrs r4, 31 - adds r0, r4, 0 - bl sub_80E7188 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, [r6] - lsls r4, 1 - movs r2, 0xAD - lsls r2, 3 - adds r0, r2 - adds r1, r0, r4 - ldrh r0, [r1] - cmp r0, r5 - bcs _080E6E76 - strh r5, [r1] -_080E6E76: - ldr r0, [r6] - adds r2, r0, r2 - ldr r3, _080E6EA0 @ =0x0000056a - adds r1, r0, r3 - ldrh r0, [r2] - ldrh r3, [r1] - cmp r0, r3 - bls _080E6EA8 - adds r5, r0, 0 - movs r0, 0x20 - adds r1, r5, 0 - bl SetGameStat - ldr r1, _080E6EA4 @ =0x0000270f - cmp r5, r1 - bhi _080E6EB8 - b _080E6ECC - .align 2, 0 -_080E6E98: .4byte gSaveBlock2Ptr -_080E6E9C: .4byte 0x0000055c -_080E6EA0: .4byte 0x0000056a -_080E6EA4: .4byte 0x0000270f -_080E6EA8: - ldrh r5, [r1] - movs r0, 0x20 - adds r1, r5, 0 - bl SetGameStat - ldr r1, _080E6EC4 @ =0x0000270f - cmp r5, r1 - bls _080E6ECC -_080E6EB8: - ldr r0, [r6] - ldr r2, _080E6EC8 @ =0x0000057a - adds r0, r2 - strh r1, [r0] - b _080E6ED4 - .align 2, 0 -_080E6EC4: .4byte 0x0000270f -_080E6EC8: .4byte 0x0000057a -_080E6ECC: - ldr r0, [r6] - ldr r3, _080E6EDC @ =0x0000057a - adds r0, r3 - strh r5, [r0] -_080E6ED4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E6EDC: .4byte 0x0000057a - thumb_func_end sub_80E6E48 - - thumb_func_start sub_80E6EE0 -sub_80E6EE0: @ 80E6EE0 - push {r4-r6,lr} - ldr r0, _080E6F00 @ =gSaveBlock2Ptr - ldr r2, [r0] - adds r5, r2, 0 - adds r5, 0xB0 - ldr r1, _080E6F04 @ =0x0000055c - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r6, r0, 31 - ldrb r0, [r2, 0x8] - cmp r0, 0 - beq _080E6F0C - ldr r4, _080E6F08 @ =sFemaleTrainerClasses - b _080E6F0E - .align 2, 0 -_080E6F00: .4byte gSaveBlock2Ptr -_080E6F04: .4byte 0x0000055c -_080E6F08: .4byte sFemaleTrainerClasses -_080E6F0C: - ldr r4, _080E6FA0 @ =sMaleTrainerClasses -_080E6F0E: - ldrb r0, [r2, 0xA] - ldrb r1, [r2, 0xB] - adds r0, r1 - ldrb r1, [r2, 0xC] - adds r0, r1 - ldrb r1, [r2, 0xD] - adds r0, r1 - movs r1, 0 - bl __umodsi3 - adds r0, r4 - ldrb r0, [r0] - strb r6, [r5] - strb r0, [r5, 0x1] - adds r0, r5, 0 - adds r0, 0xC - ldr r4, _080E6FA4 @ =gSaveBlock2Ptr - ldr r1, [r4] - adds r1, 0xA - bl CopyTrainerId - adds r0, r5, 0x4 - ldr r1, [r4] - bl StringCopy7 - adds r0, r6, 0 - bl sub_80E7188 - strh r0, [r5, 0x2] - movs r4, 0 - ldr r6, _080E6FA8 @ =gSaveBlock1Ptr - ldr r3, _080E6FAC @ =0x00002cac - adds r2, r5, 0 - adds r2, 0x10 -_080E6F52: - lsls r0, r4, 1 - ldr r1, [r6] - adds r1, r3 - adds r1, r0 - ldrh r0, [r1] - strh r0, [r2] - adds r2, 0x2 - adds r4, 0x1 - cmp r4, 0x5 - ble _080E6F52 - movs r4, 0 -_080E6F68: - ldr r6, _080E6FA4 @ =gSaveBlock2Ptr - ldr r0, [r6] - ldr r1, _080E6FB0 @ =0x0000056d - adds r0, r1 - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E6FB4 @ =gEnemyParty + 500 @ &gEnemyParty[5] - adds r0, r1 - movs r1, 0x2C - muls r1, r4 - adds r1, 0x1C - adds r1, r5, r1 - bl sub_803E23C - adds r4, 0x1 - cmp r4, 0x2 - ble _080E6F68 - ldr r0, [r6] - adds r0, 0xB0 - bl SetBattleTowerRecordChecksum - bl sub_80E6E48 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E6FA0: .4byte sMaleTrainerClasses -_080E6FA4: .4byte gSaveBlock2Ptr -_080E6FA8: .4byte gSaveBlock1Ptr -_080E6FAC: .4byte 0x00002cac -_080E6FB0: .4byte 0x0000056d -_080E6FB4: .4byte gEnemyParty + 500 @ &gEnemyParty[5] - thumb_func_end sub_80E6EE0 - - thumb_func_start SaveBattleTowerProgress -SaveBattleTowerProgress: @ 80E6FB8 - push {r4,r5,lr} - ldr r0, _080E703C @ =gSaveBlock2Ptr - ldr r1, [r0] - ldr r2, _080E7040 @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r5, r0, 31 - ldr r0, _080E7044 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x3 - beq _080E6FD4 - cmp r0, 0 - bne _080E6FF2 -_080E6FD4: - lsls r2, r5, 1 - ldr r3, _080E7048 @ =0x00000564 - adds r0, r1, r3 - adds r0, r2 - ldrh r0, [r0] - cmp r0, 0x1 - bhi _080E6FEE - subs r3, 0x4 - adds r0, r1, r3 - adds r0, r2 - ldrh r0, [r0] - cmp r0, 0x1 - bls _080E6FF2 -_080E6FEE: - bl sub_80E6EE0 -_080E6FF2: - bl sub_80E712C - ldr r4, _080E703C @ =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, _080E704C @ =gBattleOutcome - ldrb r1, [r1] - ldr r2, _080E7050 @ =0x0000055d - adds r0, r2 - strb r1, [r0] - ldr r0, _080E7044 @ =gSpecialVar_0x8004 - ldrh r1, [r0] - cmp r1, 0x3 - beq _080E7016 - ldr r0, [r4] - ldr r3, _080E7054 @ =0x0000055e - adds r0, r3 - adds r0, r5 - strb r1, [r0] -_080E7016: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - bl VarSet - ldr r1, [r4] - ldr r0, _080E7040 @ =0x0000055c - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r1] - movs r0, 0x2 - bl TrySavingData - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E703C: .4byte gSaveBlock2Ptr -_080E7040: .4byte 0x0000055c -_080E7044: .4byte gSpecialVar_0x8004 -_080E7048: .4byte 0x00000564 -_080E704C: .4byte gBattleOutcome -_080E7050: .4byte 0x0000055d -_080E7054: .4byte 0x0000055e - thumb_func_end SaveBattleTowerProgress - - thumb_func_start BattleTower_SoftReset -BattleTower_SoftReset: @ 80E7058 - push {lr} - bl DoSoftReset - pop {r0} - bx r0 - thumb_func_end BattleTower_SoftReset - - thumb_func_start sub_80E7064 -sub_80E7064: @ 80E7064 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _080E70F0 @ =gSaveBlock2Ptr - ldr r0, [r0] - movs r3, 0 - movs r2, 0 - adds r1, r0, 0 - adds r1, 0xB0 -_080E7076: - ldm r1!, {r0} - adds r3, r0 - adds r2, 0x1 - cmp r2, 0x27 - bls _080E7076 - ldr r5, _080E70F0 @ =gSaveBlock2Ptr - ldr r1, [r5] - movs r2, 0xA8 - lsls r2, 1 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, r3 - beq _080E7098 - adds r0, r1, 0 - adds r0, 0xB0 - bl ClearBattleTowerRecord -_080E7098: - movs r4, 0 - adds r7, r5, 0 - movs r6, 0xA4 - mov r8, r7 -_080E70A0: - adds r0, r4, 0 - muls r0, r6 - movs r3, 0xAA - lsls r3, 1 - adds r0, r3 - ldr r1, [r7] - movs r3, 0 - movs r2, 0 - adds r5, r4, 0x1 - adds r1, r0 -_080E70B4: - ldm r1!, {r0} - adds r3, r0 - adds r2, 0x1 - cmp r2, 0x27 - bls _080E70B4 - mov r0, r8 - ldr r2, [r0] - adds r1, r4, 0 - muls r1, r6 - movs r4, 0xFA - lsls r4, 1 - adds r0, r2, r4 - adds r0, r1 - ldr r0, [r0] - cmp r0, r3 - beq _080E70E0 - movs r3, 0xAA - lsls r3, 1 - adds r0, r1, r3 - adds r0, r2, r0 - bl ClearBattleTowerRecord -_080E70E0: - adds r4, r5, 0 - cmp r4, 0x4 - ble _080E70A0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E70F0: .4byte gSaveBlock2Ptr - thumb_func_end sub_80E7064 - - thumb_func_start SetBattleTowerRecordChecksum -SetBattleTowerRecordChecksum: @ 80E70F4 - push {r4,lr} - adds r2, r0, 0 - adds r2, 0xA0 - movs r1, 0 - str r1, [r2] - movs r3, 0 - adds r4, r0, 0 -_080E7102: - ldr r0, [r2] - ldm r4!, {r1} - adds r0, r1 - str r0, [r2] - adds r3, 0x1 - cmp r3, 0x27 - bls _080E7102 - pop {r4} - pop {r0} - bx r0 - thumb_func_end SetBattleTowerRecordChecksum - - thumb_func_start ClearBattleTowerRecord -ClearBattleTowerRecord: @ 80E7118 - push {lr} - movs r1, 0 - movs r2, 0 -_080E711E: - stm r0!, {r2} - adds r1, 0x1 - cmp r1, 0x28 - bls _080E711E - pop {r0} - bx r0 - thumb_func_end ClearBattleTowerRecord - - thumb_func_start sub_80E712C -sub_80E712C: @ 80E712C - push {r4,r5,lr} - ldr r4, _080E7174 @ =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, _080E7178 @ =0x0000048c - adds r0, r1 - bl sub_80E6150 - ldr r1, [r4] - ldr r3, _080E717C @ =gBattleMons - adds r0, r3, 0 - adds r0, 0x58 - ldrh r2, [r0] - ldr r5, _080E7180 @ =0x0000048a - adds r0, r1, r5 - strh r2, [r0] - ldrh r0, [r3] - movs r2, 0x91 - lsls r2, 3 - adds r1, r2 - strh r0, [r1] - movs r2, 0 - adds r5, r4, 0 - ldr r4, _080E7184 @ =0x00000494 - adds r3, 0x30 -_080E715C: - ldr r0, [r5] - adds r0, r4 - adds r0, r2 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x9 - ble _080E715C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E7174: .4byte gSaveBlock2Ptr -_080E7178: .4byte 0x0000048c -_080E717C: .4byte gBattleMons -_080E7180: .4byte 0x0000048a -_080E7184: .4byte 0x00000494 - thumb_func_end sub_80E712C - - thumb_func_start sub_80E7188 -sub_80E7188: @ 80E7188 - push {lr} - lsls r0, 24 - ldr r1, _080E71C0 @ =gSaveBlock2Ptr - ldr r3, [r1] - lsrs r0, 23 - ldr r2, _080E71C4 @ =0x00000564 - adds r1, r3, r2 - adds r1, r0 - ldrh r2, [r1] - subs r2, 0x1 - lsls r1, r2, 3 - subs r1, r2 - movs r2, 0xAC - lsls r2, 3 - adds r3, r2 - adds r3, r0 - ldr r0, _080E71C8 @ =0x0000ffff - adds r1, r0 - ldrh r3, [r3] - adds r1, r3 - lsls r1, 16 - lsrs r0, r1, 16 - ldr r1, _080E71CC @ =0x0000270f - cmp r0, r1 - bls _080E71BC - adds r0, r1, 0 -_080E71BC: - pop {r1} - bx r1 - .align 2, 0 -_080E71C0: .4byte gSaveBlock2Ptr -_080E71C4: .4byte 0x00000564 -_080E71C8: .4byte 0x0000ffff -_080E71CC: .4byte 0x0000270f - thumb_func_end sub_80E7188 - - thumb_func_start DetermineBattleTowerPrize -DetermineBattleTowerPrize: @ 80E71D0 - push {r4,r5,lr} - ldr r4, _080E7214 @ =gSaveBlock2Ptr - ldr r1, [r4] - ldr r2, _080E7218 @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - lsls r0, 1 - adds r2, 0x8 - adds r1, r2 - adds r1, r0 - ldrh r0, [r1] - subs r0, 0x1 - cmp r0, 0x5 - ble _080E7220 - bl Random - ldr r4, [r4] - ldr r5, _080E721C @ =sLongStreakPrizes - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x9 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - movs r1, 0xAE - lsls r1, 3 - adds r4, r1 - b _080E7240 - .align 2, 0 -_080E7214: .4byte gSaveBlock2Ptr -_080E7218: .4byte 0x0000055c -_080E721C: .4byte sLongStreakPrizes -_080E7220: - bl Random - ldr r4, [r4] - ldr r5, _080E7248 @ =sShortStreakPrizes - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - movs r2, 0xAE - lsls r2, 3 - adds r4, r2 -_080E7240: - strh r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E7248: .4byte sShortStreakPrizes - thumb_func_end DetermineBattleTowerPrize - - thumb_func_start GiveBattleTowerPrize -GiveBattleTowerPrize: @ 80E724C - push {r4-r6,lr} - ldr r5, _080E7288 @ =gSaveBlock2Ptr - ldr r1, [r5] - ldr r2, _080E728C @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r6, r0, 31 - movs r0, 0xAE - lsls r0, 3 - adds r1, r0 - ldrh r0, [r1] - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bne _080E7298 - ldr r0, [r5] - movs r1, 0xAE - lsls r1, 3 - adds r0, r1 - ldrh r0, [r0] - ldr r1, _080E7290 @ =gStringVar1 - bl CopyItemName - ldr r0, _080E7294 @ =gSpecialVar_Result - strh r4, [r0] - b _080E72AA - .align 2, 0 -_080E7288: .4byte gSaveBlock2Ptr -_080E728C: .4byte 0x0000055c -_080E7290: .4byte gStringVar1 -_080E7294: .4byte gSpecialVar_Result -_080E7298: - ldr r1, _080E72B0 @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - ldr r0, [r5] - ldr r2, _080E72B4 @ =0x0000055e - adds r0, r2 - adds r0, r6 - movs r1, 0x6 - strb r1, [r0] -_080E72AA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E72B0: .4byte gSpecialVar_Result -_080E72B4: .4byte 0x0000055e - thumb_func_end GiveBattleTowerPrize - - thumb_func_start AwardBattleTowerRibbons -AwardBattleTowerRibbons: @ 80E72B8 - push {r4-r7,lr} - ldr r0, _080E7334 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E7338 @ =0x0000055c - adds r0, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - adds r1, r0, 0 - movs r7, 0x44 - cmp r1, 0 - beq _080E72D2 - movs r7, 0x45 -_080E72D2: - ldr r4, _080E733C @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r4] - adds r0, r1, 0 - bl sub_80E7188 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x37 - bls _080E7320 - movs r5, 0 - adds r6, r4, 0 -_080E72EA: - ldr r0, _080E7334 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E7340 @ =0x0000056d - adds r0, r1 - adds r0, r5 - ldrb r0, [r0] - subs r0, 0x1 - movs r1, 0x64 - muls r1, r0 - ldr r0, _080E7344 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - adds r1, r7, 0 - bl GetMonData - cmp r0, 0 - bne _080E731A - movs r0, 0x1 - strh r0, [r6] - adds r0, r4, 0 - adds r1, r7, 0 - adds r2, r6, 0 - bl SetMonData -_080E731A: - adds r5, 0x1 - cmp r5, 0x2 - ble _080E72EA -_080E7320: - ldr r0, _080E733C @ =gSpecialVar_Result - ldrh r0, [r0] - cmp r0, 0 - beq _080E732E - movs r0, 0x2A - bl IncrementGameStat -_080E732E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E7334: .4byte gSaveBlock2Ptr -_080E7338: .4byte 0x0000055c -_080E733C: .4byte gSpecialVar_Result -_080E7340: .4byte 0x0000056d -_080E7344: .4byte gPlayerParty - thumb_func_end AwardBattleTowerRibbons - - thumb_func_start sub_80E7348 -sub_80E7348: @ 80E7348 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r1, _080E7368 @ =gSaveBlock2Ptr - ldr r2, [r1] - movs r0, 0x94 - lsls r0, 3 - adds r7, r2, r0 - ldrb r0, [r2, 0x8] - adds r5, r1, 0 - cmp r0, 0 - beq _080E7370 - ldr r4, _080E736C @ =sFemaleTrainerClasses - b _080E7372 - .align 2, 0 -_080E7368: .4byte gSaveBlock2Ptr -_080E736C: .4byte sFemaleTrainerClasses -_080E7370: - ldr r4, _080E7410 @ =sMaleTrainerClasses -_080E7372: - ldrb r0, [r2, 0xA] - ldrb r1, [r2, 0xB] - adds r0, r1 - ldrb r1, [r2, 0xC] - adds r0, r1 - ldrb r1, [r2, 0xD] - adds r0, r1 - movs r1, 0 - bl __umodsi3 - adds r0, r4 - ldrb r0, [r0] - strb r0, [r7, 0x1] - adds r0, r7, 0 - adds r0, 0xC - ldr r1, [r5] - adds r1, 0xA - bl CopyTrainerId - adds r0, r7, 0x4 - ldr r1, [r5] - bl StringCopy7 - movs r0, 0x1 - strh r0, [r7, 0x2] - movs r6, 0x7 - movs r4, 0 - ldr r0, _080E7414 @ =gSaveBlock1Ptr - mov r8, r0 - adds r5, r7, 0 - adds r5, 0x10 - ldr r1, _080E7418 @ =0x00002cac - mov r12, r1 - adds r3, r7, 0 - adds r3, 0x28 - adds r2, r7, 0 - adds r2, 0x1C -_080E73BC: - lsls r0, r4, 1 - mov r9, r0 - mov r1, r8 - ldr r0, [r1] - add r0, r12 - add r0, r9 - ldrh r0, [r0] - strh r0, [r5] - strh r6, [r2] - adds r0, r6, 0x6 - strh r0, [r3] - adds r6, 0x1 - adds r5, 0x2 - adds r3, 0x2 - adds r2, 0x2 - adds r4, 0x1 - cmp r4, 0x5 - ble _080E73BC - movs r4, 0 -_080E73E2: - movs r0, 0x64 - muls r0, r4 - ldr r1, _080E741C @ =gPlayerParty - adds r0, r1 - movs r1, 0x2C - muls r1, r4 - adds r1, 0x34 - adds r1, r7, r1 - bl sub_803E23C - adds r4, 0x1 - cmp r4, 0x2 - ble _080E73E2 - adds r0, r7, 0 - bl sub_80E7500 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E7410: .4byte sMaleTrainerClasses -_080E7414: .4byte gSaveBlock1Ptr -_080E7418: .4byte 0x00002cac -_080E741C: .4byte gPlayerParty - thumb_func_end sub_80E7348 - - thumb_func_start GetEreaderTrainerFrontSpriteId -GetEreaderTrainerFrontSpriteId: @ 80E7420 - ldr r1, _080E7434 @ =gFacilityClassToPicIndex - ldr r0, _080E7438 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r2, _080E743C @ =0x000004a1 - adds r0, r2 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080E7434: .4byte gFacilityClassToPicIndex -_080E7438: .4byte gSaveBlock2Ptr -_080E743C: .4byte 0x000004a1 - thumb_func_end GetEreaderTrainerFrontSpriteId - - thumb_func_start GetEreaderTrainerClassId -GetEreaderTrainerClassId: @ 80E7440 - ldr r1, _080E7454 @ =gFacilityClassToTrainerClass - ldr r0, _080E7458 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r2, _080E745C @ =0x000004a1 - adds r0, r2 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080E7454: .4byte gFacilityClassToTrainerClass -_080E7458: .4byte gSaveBlock2Ptr -_080E745C: .4byte 0x000004a1 - thumb_func_end GetEreaderTrainerClassId - - thumb_func_start CopyEReaderTrainerName5 -CopyEReaderTrainerName5: @ 80E7460 - push {r4,lr} - adds r3, r0, 0 - movs r2, 0 - ldr r0, _080E7488 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E748C @ =0x000004a4 - adds r4, r0, r1 -_080E746E: - adds r0, r3, r2 - adds r1, r4, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x4 - ble _080E746E - adds r1, r3, r2 - movs r0, 0xFF - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E7488: .4byte gSaveBlock2Ptr -_080E748C: .4byte 0x000004a4 - thumb_func_end CopyEReaderTrainerName5 - - thumb_func_start ValidateEReaderTrainer -ValidateEReaderTrainer: @ 80E7490 - push {r4-r6,lr} - ldr r2, _080E74C0 @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r2] - ldr r1, _080E74C4 @ =gSaveBlock2Ptr - ldr r0, [r1] - movs r3, 0x94 - lsls r3, 3 - adds r5, r0, r3 - movs r4, 0 - movs r3, 0 - adds r6, r1, 0 - adds r1, r5, 0 -_080E74AA: - ldm r1!, {r0} - orrs r4, r0 - adds r3, 0x1 - cmp r3, 0x2D - bls _080E74AA - cmp r4, 0 - bne _080E74C8 - movs r0, 0x1 - strh r0, [r2] - b _080E74F6 - .align 2, 0 -_080E74C0: .4byte gSpecialVar_Result -_080E74C4: .4byte gSaveBlock2Ptr -_080E74C8: - movs r4, 0 - movs r3, 0 - adds r2, r5, 0 -_080E74CE: - ldm r2!, {r0} - adds r4, r0 - adds r3, 0x1 - cmp r3, 0x2D - bls _080E74CE - ldr r1, [r6] - movs r2, 0xAB - lsls r2, 3 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, r4 - beq _080E74F6 - movs r3, 0x94 - lsls r3, 3 - adds r0, r1, r3 - bl sub_80E7524 - ldr r1, _080E74FC @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_080E74F6: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E74FC: .4byte gSpecialVar_Result - thumb_func_end ValidateEReaderTrainer - - thumb_func_start sub_80E7500 -sub_80E7500: @ 80E7500 - push {r4,lr} - adds r2, r0, 0 - adds r2, 0xB8 - movs r1, 0 - str r1, [r2] - movs r3, 0 - adds r4, r0, 0 -_080E750E: - ldr r0, [r2] - ldm r4!, {r1} - adds r0, r1 - str r0, [r2] - adds r3, 0x1 - cmp r3, 0x2D - bls _080E750E - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80E7500 - - thumb_func_start sub_80E7524 -sub_80E7524: @ 80E7524 - push {lr} - movs r1, 0 - movs r2, 0 -_080E752A: - stm r0!, {r2} - adds r1, 0x1 - cmp r1, 0x2E - bls _080E752A - pop {r0} - bx r0 - thumb_func_end sub_80E7524 - - thumb_func_start PrintEReaderTrainerGreeting -PrintEReaderTrainerGreeting: @ 80E7538 - push {lr} - ldr r0, _080E754C @ =gSaveBlock2Ptr - ldr r0, [r0] - movs r1, 0x96 - lsls r1, 3 - adds r0, r1 - bl sub_80E678C - pop {r0} - bx r0 - .align 2, 0 -_080E754C: .4byte gSaveBlock2Ptr - thumb_func_end PrintEReaderTrainerGreeting - - thumb_func_start sub_80E7550 -sub_80E7550: @ 80E7550 - push {lr} - ldr r0, _080E7564 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0x3 - bne _080E756C - ldr r1, _080E7568 @ =gStringVar4 - movs r0, 0xFF - strb r0, [r1] - b _080E7590 - .align 2, 0 -_080E7564: .4byte gBattleOutcome -_080E7568: .4byte gStringVar4 -_080E756C: - cmp r0, 0x1 - bne _080E7584 - ldr r0, _080E7580 @ =gSaveBlock2Ptr - ldr r0, [r0] - movs r1, 0x99 - lsls r1, 3 - adds r0, r1 - bl sub_80E678C - b _080E7590 - .align 2, 0 -_080E7580: .4byte gSaveBlock2Ptr -_080E7584: - ldr r0, _080E7594 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E7598 @ =0x000004bc - adds r0, r1 - bl sub_80E678C -_080E7590: - pop {r0} - bx r0 - .align 2, 0 -_080E7594: .4byte gSaveBlock2Ptr -_080E7598: .4byte 0x000004bc - thumb_func_end sub_80E7550 - - thumb_func_start Dummy_TryEnableBravoTrainerBattleTower -Dummy_TryEnableBravoTrainerBattleTower: @ 80E759C - push {lr} - movs r0, 0x1 -_080E75A0: - subs r0, 0x1 - cmp r0, 0 - bge _080E75A0 - pop {r0} - bx r0 - thumb_func_end Dummy_TryEnableBravoTrainerBattleTower - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 63a894247..24125485e 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -12663,7 +12663,7 @@ sub_811C04C: @ 811C04C ldr r6, _0811C0CC @ =gPlayerParty ldr r5, _0811C0D0 @ =gEnemyParty _0811C05C: - ldr r0, _0811C0D4 @ =gUnknown_203B0D4 + ldr r0, _0811C0D4 @ =gSelectedOrderFromParty adds r0, r4, r0 ldrb r0, [r0] subs r0, 0x1 @@ -12717,7 +12717,7 @@ _0811C096: .align 2, 0 _0811C0CC: .4byte gPlayerParty _0811C0D0: .4byte gEnemyParty -_0811C0D4: .4byte gUnknown_203B0D4 +_0811C0D4: .4byte gSelectedOrderFromParty _0811C0D8: .4byte gTrainerBattleOpponent_A _0811C0DC: .4byte CB2_InitBattle thumb_func_end sub_811C04C @@ -13029,7 +13029,7 @@ _0811C3BC: movs r1, 0 movs r2, 0x20 bl memset - ldr r0, _0811C3DC @ =gUnknown_203B0D4 + ldr r0, _0811C3DC @ =gSelectedOrderFromParty ldrb r1, [r0] ldrb r0, [r0, 0x1] cmn r1, r0 @@ -13038,7 +13038,7 @@ _0811C3BC: b _0811C3E2 .align 2, 0 _0811C3D8: .4byte gBlockSendBuffer -_0811C3DC: .4byte gUnknown_203B0D4 +_0811C3DC: .4byte gSelectedOrderFromParty _0811C3E0: movs r0, 0x51 _0811C3E2: diff --git a/asm/party_menu.s b/asm/party_menu.s index aab14bbf0..dfe4e02c0 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -1152,7 +1152,7 @@ sub_811F388: @ 811F388 muls r0, r4 ldr r1, _0811F3AC @ =gPlayerParty adds r0, r1 - ldr r5, _0811F3B0 @ =gUnknown_203B0D4 + ldr r5, _0811F3B0 @ =gSelectedOrderFromParty bl sub_8127550 lsls r0, 24 cmp r0, 0 @@ -1163,7 +1163,7 @@ sub_811F388: @ 811F388 b _0811F3F8 .align 2, 0 _0811F3AC: .4byte gPlayerParty -_0811F3B0: .4byte gUnknown_203B0D4 +_0811F3B0: .4byte gSelectedOrderFromParty _0811F3B4: adds r1, 0x2 lsls r1, 24 @@ -11131,7 +11131,7 @@ _0812418C: adds r0, r1 mov r10, r0 _081241B6: - ldr r0, _0812420C @ =gUnknown_203B0D4 + ldr r0, _0812420C @ =gSelectedOrderFromParty adds r4, r5, r0 ldrb r0, [r4] cmp r0, 0 @@ -11168,7 +11168,7 @@ _081241FC: .4byte gUnknown_8416B16 _08124200: .4byte gUnknown_203B09C _08124204: .4byte gUnknown_203B0A0 _08124208: .4byte gTasks -_0812420C: .4byte gUnknown_203B0D4 +_0812420C: .4byte gSelectedOrderFromParty _08124210: .4byte gUnknown_203B0B4 _08124214: .4byte sub_811FB28 _08124218: @@ -11237,7 +11237,7 @@ sub_8124278: @ 8124278 adds r0, 0xD bl sub_8121CE4 movs r4, 0 - ldr r3, _081242C0 @ =gUnknown_203B0D4 + ldr r3, _081242C0 @ =gSelectedOrderFromParty ldr r6, _081242C4 @ =gUnknown_203B0A0 adds r5, r6, 0 _0812429E: @@ -11257,7 +11257,7 @@ _0812429E: b _081242E6 .align 2, 0 _081242BC: .4byte gUnknown_203B09C -_081242C0: .4byte gUnknown_203B0D4 +_081242C0: .4byte gSelectedOrderFromParty _081242C4: .4byte gUnknown_203B0A0 _081242C8: ldrb r0, [r3, 0x1] @@ -11287,7 +11287,7 @@ _081242E6: movs r0, 0x1 movs r2, 0x1 bl sub_8121C70 - ldr r4, _08124348 @ =gUnknown_203B0D4 + ldr r4, _08124348 @ =gSelectedOrderFromParty ldrb r0, [r4] cmp r0, 0 beq _08124312 @@ -11324,7 +11324,7 @@ _08124328: bx r0 .align 2, 0 _08124344: .4byte gUnknown_203B0B4 -_08124348: .4byte gUnknown_203B0D4 +_08124348: .4byte gSelectedOrderFromParty _0812434C: .4byte gTasks _08124350: .4byte sub_811FB28 thumb_func_end sub_8124278 @@ -17411,14 +17411,14 @@ _081274F8: .4byte sub_812773C thumb_func_start sub_81274FC sub_81274FC: @ 81274FC push {lr} - ldr r0, _0812750C @ =gUnknown_203B0D4 + ldr r0, _0812750C @ =gSelectedOrderFromParty movs r1, 0 movs r2, 0x3 bl memset pop {r0} bx r0 .align 2, 0 -_0812750C: .4byte gUnknown_203B0D4 +_0812750C: .4byte gSelectedOrderFromParty thumb_func_end sub_81274FC thumb_func_start sub_8127510 @@ -17564,18 +17564,18 @@ sub_81275F8: @ 81275F8 _08127618: .4byte gPlayerParty _0812761C: .4byte gUnknown_203B0A0 _08127620: - ldr r1, _0812762C @ =gUnknown_203B0D4 + ldr r1, _0812762C @ =gSelectedOrderFromParty ldrb r0, [r1, 0x2] cmp r0, 0 bne _08127630 movs r0, 0x11 b _08127702 .align 2, 0 -_0812762C: .4byte gUnknown_203B0D4 +_0812762C: .4byte gSelectedOrderFromParty _08127630: movs r5, 0 _08127632: - ldr r2, _081276DC @ =gUnknown_203B0D4 + ldr r2, _081276DC @ =gSelectedOrderFromParty adds r4, r2, r5 ldrb r0, [r4] movs r1, 0x64 @@ -17618,7 +17618,7 @@ _0812767E: adds r0, r2 movs r1, 0 ldrsh r4, [r0, r1] - ldr r2, _081276DC @ =gUnknown_203B0D4 + ldr r2, _081276DC @ =gSelectedOrderFromParty adds r6, r2, r5 ldrb r0, [r6] muls r0, r7 @@ -17660,18 +17660,18 @@ _081276D0: bls _08127632 b _08127700 .align 2, 0 -_081276DC: .4byte gUnknown_203B0D4 +_081276DC: .4byte gSelectedOrderFromParty _081276E0: .4byte gUnknown_203B09C _081276E4: .4byte 0x00000236 _081276E8: - ldr r2, _081276F4 @ =gUnknown_203B0D4 + ldr r2, _081276F4 @ =gSelectedOrderFromParty ldrb r0, [r2, 0x1] cmp r0, 0 bne _08127700 movs r0, 0x12 b _08127702 .align 2, 0 -_081276F4: .4byte gUnknown_203B0D4 +_081276F4: .4byte gSelectedOrderFromParty _081276F8: movs r0, 0x13 b _08127702 @@ -17696,7 +17696,7 @@ sub_8127710: @ 8127710 lsls r0, 24 lsrs r2, r0, 24 movs r1, 0 - ldr r3, _08127728 @ =gUnknown_203B0D4 + ldr r3, _08127728 @ =gSelectedOrderFromParty _0812771A: adds r0, r1, r3 ldrb r0, [r0] @@ -17705,7 +17705,7 @@ _0812771A: movs r0, 0x1 b _08127738 .align 2, 0 -_08127728: .4byte gUnknown_203B0D4 +_08127728: .4byte gSelectedOrderFromParty _0812772C: adds r0, r1, 0x1 lsls r0, 24 @@ -17740,7 +17740,7 @@ sub_812773C: @ 812773C .align 2, 0 _08127764: .4byte gTasks _08127768: - ldr r0, _08127780 @ =gUnknown_203B0D4 + ldr r0, _08127780 @ =gSelectedOrderFromParty ldrb r0, [r0] cmp r0, 0 beq _08127784 @@ -17750,7 +17750,7 @@ _08127768: bl sub_811FA78 b _0812779E .align 2, 0 -_08127780: .4byte gUnknown_203B0D4 +_08127780: .4byte gSelectedOrderFromParty _08127784: movs r0, 0x1A bl PlaySE diff --git a/asm/script_pokemon_util_80A0058.s b/asm/script_pokemon_util_80A0058.s index 525293081..81b3b7efe 100644 --- a/asm/script_pokemon_util_80A0058.s +++ b/asm/script_pokemon_util_80A0058.s @@ -396,7 +396,7 @@ _080A034C: .4byte sub_80A0350 thumb_func_start sub_80A0350 sub_80A0350: @ 80A0350 push {lr} - ldr r0, _080A0360 @ =gUnknown_203B0D4 + ldr r0, _080A0360 @ =gSelectedOrderFromParty ldrb r1, [r0] cmp r1, 0 bne _080A0368 @@ -404,7 +404,7 @@ sub_80A0350: @ 80A0350 strh r1, [r0] b _080A036E .align 2, 0 -_080A0360: .4byte gUnknown_203B0D4 +_080A0360: .4byte gSelectedOrderFromParty _080A0364: .4byte gSpecialVar_Result _080A0368: ldr r1, _080A0378 @ =gSpecialVar_Result @@ -438,7 +438,7 @@ _080A0398: .4byte sub_80A039C thumb_func_start sub_80A039C sub_80A039C: @ 80A039C push {r4,lr} - ldr r0, _080A03B0 @ =gUnknown_203B0D4 + ldr r0, _080A03B0 @ =gSelectedOrderFromParty ldrb r4, [r0] cmp r4, 0 bne _080A03B8 @@ -447,7 +447,7 @@ sub_80A039C: @ 80A039C strh r4, [r0] b _080A03C2 .align 2, 0 -_080A03B0: .4byte gUnknown_203B0D4 +_080A03B0: .4byte gSelectedOrderFromParty _080A03B4: .4byte gSpecialVar_Result _080A03B8: bl ReducePlayerPartyToThree @@ -481,7 +481,7 @@ ReducePlayerPartyToThree: @ 80A03D8 ldr r6, _080A0454 @ =gPlayerParty adds r4, r7, 0 _080A03F4: - ldr r0, _080A0458 @ =gUnknown_203B0D4 + ldr r0, _080A0458 @ =gSelectedOrderFromParty adds r1, r5, r0 ldrb r0, [r1] cmp r0, 0 @@ -528,7 +528,7 @@ _080A042C: bx r0 .align 2, 0 _080A0454: .4byte gPlayerParty -_080A0458: .4byte gUnknown_203B0D4 +_080A0458: .4byte gSelectedOrderFromParty _080A045C: .4byte 0x05000096 thumb_func_end ReducePlayerPartyToThree diff --git a/include/battle_tower.h b/include/battle_tower.h index b7b106107..9bb93f1c2 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -12,7 +12,7 @@ struct BattleTowerTrainer u8 trainerClass; u8 name[3]; u8 teamFlags; - u16 speech[6]; + u16 greeting[6]; }; struct BattleTowerPokemonTemplate @@ -26,7 +26,7 @@ struct BattleTowerPokemonTemplate }; u16 sub_8164FCC(u8, u8); -void sub_80E7524(struct BattleTowerEReaderTrainer *); +void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); void ValidateEReaderTrainer(void); u8 GetBattleTowerTrainerFrontSpriteId(void); u8 GetEreaderTrainerFrontSpriteId(void); diff --git a/include/party_menu.h b/include/party_menu.h index c07371a5d..6c81a248c 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -45,6 +45,7 @@ extern u8 gUnknown_203B0C0; extern u8 gUnknown_203B0C1; extern u8 gUnknown_203B0DC[3]; extern void (*gUnknown_3005E98)(u8 taskId, TaskFunc func); +extern u8 gSelectedOrderFromParty[3]; bool8 FieldCallback_PrepareFadeInFromMenu(void); bool8 MonKnowsMove(struct Pokemon *, u16); diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util_80A0058.h index 768e838dd..b63a7b0ef 100644 --- a/include/script_pokemon_util_80A0058.h +++ b/include/script_pokemon_util_80A0058.h @@ -5,5 +5,6 @@ bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3 bool8 ScriptGiveEgg(u16 species); void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); void sp000_heal_pokemon(void); +void ReducePlayerPartyToThree(void); #endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H diff --git a/ld_script.txt b/ld_script.txt index 50e6faea4..b2a1f11e7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -209,7 +209,6 @@ SECTIONS { asm/learn_move.o(.text); src/fldeff_softboiled.o(.text); src/battle_tower.o(.text); - asm/battle_tower.o(.text); src/battle_controller_oak_old_man.o(.text); src/player_pc.o(.text); src/intro.o(.text); diff --git a/src/battle_tower.c b/src/battle_tower.c index 0ed20d6c9..421d9cf3b 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3,6 +3,22 @@ #include "random.h" #include "text.h" #include "event_data.h" +#include "string_util.h" +#include "battle_message.h" +#include "data.h" +#include "pokedex.h" +#include "overworld.h" +#include "battle_transition.h" +#include "easy_chat.h" +#include "battle_setup.h" +#include "battle_main.h" +#include "task.h" +#include "battle.h" +#include "party_menu.h" +#include "new_game.h" +#include "save.h" +#include "item.h" +#include "script_pokemon_util_80A0058.h" #include "constants/species.h" #include "constants/items.h" #include "constants/moves.h" @@ -10,11 +26,21 @@ #include "constants/vars.h" #include "constants/map_objects.h" -void sub_80E5A38(u8 levelType); +EWRAM_DATA u16 gUnknown_203AAB8 = 0; + +#define TakeBravoTrainerBattleTowerOffTheAir() + +void ResetBattleTowerStreak(u8 levelType); void sub_80E5E5C(u8 trainerClass); -u16 sub_80E7188(u8 levelType); -void sub_80E7064(void); -void sub_80E6564(u16 species, u16 heldItem, u8 unused, u8 levelType, u8 monLevel, u16 *validSpecies, u16 *validHeldItems, u8 *numValid); +void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid); +void SaveCurrentWinStreak(void); +void ValidateBattleTowerRecordChecksums(void); +void SetBattleTowerRecordChecksum(struct BattleTowerRecord * record); +void ClearBattleTowerRecord(struct BattleTowerRecord * record); +void sub_80E712C(void); +u16 GetCurrentBattleTowerWinStreak(u8 levelType); +void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer * eReaderTrainer); +void PrintEReaderTrainerFarewellMessage(void); #include "data/battle_tower/trainers.h" @@ -153,12 +179,12 @@ void sub_80E5970(void) { default: case 0: - sub_80E5A38(levelType); + ResetBattleTowerStreak(levelType); if (count == 0) VarSet(VAR_0x4000, 5); break; case 1: - sub_80E5A38(levelType); + ResetBattleTowerStreak(levelType); VarSet(VAR_0x4000, 1); count++; break; @@ -182,10 +208,10 @@ void sub_80E5970(void) } if (gSaveBlock2Ptr->battleTower.var_4AE[0] == 3 && gSaveBlock2Ptr->battleTower.var_4AE[1] == 3) VarSet(VAR_0x4000, 5); - sub_80E7064(); + ValidateBattleTowerRecordChecksums(); } -void sub_80E5A38(u8 levelType) +void ResetBattleTowerStreak(u8 levelType) { gSaveBlock2Ptr->battleTower.var_4AE[levelType] = 0; gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] = 1; @@ -219,7 +245,7 @@ bool8 sub_80E5A70(u8 levelType, u16 winStreak) if (gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) return FALSE; - sub_80E6564( + CheckMonBattleTowerBanlist( gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].species, gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].heldItem, 1, @@ -245,7 +271,7 @@ bool8 sub_80E5B14(void) numCandidates = 0; battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; - winStreak = sub_80E7188(battleTowerLevelType); + winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); if (sub_80E5A70(battleTowerLevelType, winStreak)) { gSaveBlock2Ptr->battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; @@ -478,7 +504,7 @@ u8 sub_80E60E4(void) } } -void sub_80E6150(u8 *dest) +void get_trainer_name(u8 *dest) { s32 i; if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) @@ -500,7 +526,7 @@ void sub_80E6150(u8 *dest) } #ifdef NONMATCHING // r6/r7 swap -void sub_80E61DC(void) +void FillBattleTowerTrainerParty(void) { s32 partyIndex; s32 i; @@ -674,7 +700,7 @@ void sub_80E61DC(void) } #else NAKED -void sub_80E61DC(void) +void FillBattleTowerTrainerParty(void) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -1050,3 +1076,715 @@ void sub_80E61DC(void) "_080E64BC: .4byte sBattleTowerHeldItems"); } #endif //NONMATCHING + +u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 count) +{ + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + if (count == 0) + StringAppend(gStringVar1, gUnknown_83FE859); + count++; + StringAppend(gStringVar1, gSpeciesNames[species]); + switch (count) + { + case 2: + StringAppend(gStringVar1, gUnknown_83FE85E); + break; + case 5: + case 8: + case 11: + StringAppend(gStringVar1, gUnknown_83FE85C); + break; + default: + StringAppend(gStringVar1, gUnknown_83FE859); + break; + } + } + return count; +} + +void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) +{ + s32 i; + u32 counter = 0; + + if (species == SPECIES_EGG || species == SPECIES_NONE) + return; + + while (1) + { + if (gBattleTowerBannedSpecies[counter] == 0xFFFF) + break; + + if (gBattleTowerBannedSpecies[counter] == species) + break; + + counter++; + } + + if (gBattleTowerBannedSpecies[counter] != 0xFFFF) + return; + + if (battleTowerLevelType == 0 && monLevel > 50) + return; + + for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); + if (i != *numValid) + return; + + if (heldItem != 0) + { + for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); + if (i != *numValid) + return; + } + + validPartySpecies[*numValid] = species; + validPartyHeldItems[*numValid] = heldItem; + *numValid = *numValid + 1; +} + +void CheckPartyBattleTowerBanlist(void) +{ + s32 i; + u16 species2; + u16 heldItem; + u8 level; + u16 hp; + u32 numBanlistCaught; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 counter; + + counter = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + + CheckMonBattleTowerBanlist(species2, heldItem, hp, gSpecialVar_Result, level, validPartySpecies, validPartyHeldItems, &counter); + } + + if (counter < 3) + { + gStringVar1[0] = EOS; + gSpecialVar_0x8004 = 1; + counter = 0; + + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) + counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter); + + i = StringLength(gStringVar1); + gStringVar1[i - 1] = EOS; + if (counter < 3) + StringAppend(gStringVar1, gUnknown_83FE860); + else + StringAppend(gStringVar1, gUnknown_83FE864); + } + else + { + gSpecialVar_0x8004 = 0; + gSaveBlock2Ptr->battleTower.battleTowerLevelType = gSpecialVar_Result; + } +} + +void PrintBattleTowerTrainerMessage(const u16 *greeting) +{ + s32 i; + if (EC_DoesEasyChatStringFitOnLine(greeting, 3, 2, 18)) + { + ConvertEasyChatWordsToString(gStringVar4, greeting, 2, 3); + i = 0; + while (gStringVar4[i++] != CHAR_NEWLINE) + ; + while (gStringVar4[i] != CHAR_NEWLINE) + i++; + gStringVar4[i] = CHAR_PROMPT_SCROLL; + } + else + { + ConvertEasyChatWordsToString(gStringVar4, greeting, 3, 2); + } +} + +void PrintBattleTowerTrainerGreeting(void) +{ + if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.greeting); + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + PrintBattleTowerTrainerMessage(gBattleTowerTrainers[gSaveBlock2Ptr->battleTower.battleTowerTrainerId].greeting); + else + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.records[gSaveBlock2Ptr->battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting); +} + +void sub_80E6854(void) +{ + s32 i; + u16 heldItem; + + switch (gUnknown_203AAB8) + { + case 0: + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + break; + case 2: + PrintEReaderTrainerFarewellMessage(); + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void sub_80E68C4(u8 taskId) +{ + if (BT_IsDone() == TRUE) + { + gMain.savedCallback = sub_80E6854; + CleanupOverworldWindowsAndTilemaps(); + SetMainCallback2(CB2_InitBattle); + DestroyTask(taskId); + } +} + + +void StartSpecialBattle(void) +{ + s32 i; + u16 heldItem; + u8 transition; + + gUnknown_203AAB8 = gSpecialVar_0x8004; + switch (gUnknown_203AAB8) + { + case 0: // battle tower battle + gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent_A = 0; + + FillBattleTowerTrainerParty(); + + CreateTask(sub_80E68C4, 1); + PlayMapChosenOrBattleBGM(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BT_StartOnField(transition); + break; + case 1: // secret base battle + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + + CreateTask(sub_80E68C4, 1); + PlayMapChosenOrBattleBGM(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BT_StartOnField(transition); + break; + case 2: // e-reader trainer battle + ZeroEnemyPartyMons(); + + for (i = 0; i < 3; i++) + CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i]); + + gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent_A = 0; + + CreateTask(sub_80E68C4, 1); + PlayMapChosenOrBattleBGM(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BT_StartOnField(transition); + break; + } +} + +void SetBattleTowerProperty(void) +{ + s32 i; + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + // Weird cast required to match + // Leftover from RS macro? + *((u8 *)&gBattleStruct->arenaTurnCounter) = gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType]; + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 1: + gSaveBlock2Ptr->battleTower.battleTowerLevelType = gSpecialVar_0x8005; + break; + case 2: + gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 3: + gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 4: + gSaveBlock2Ptr->battleTower.battleTowerTrainerId = gSpecialVar_0x8005; + break; + case 5: + for (i = 0; i < 3; i++) + gSaveBlock2Ptr->battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; + break; + case 6: + if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer); + if (gSaveBlock2Ptr->battleTower.totalBattleTowerWins < 9999) + gSaveBlock2Ptr->battleTower.totalBattleTowerWins++; + gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]++; + SaveCurrentWinStreak(); + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]; + gStringVar1[0] = gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; + gStringVar1[1] = 0xFF; + break; + case 7: + if (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) + gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType]++; + SaveCurrentWinStreak(); + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 8: + gSaveBlock2Ptr->battleTower.unk_554 = gSpecialVar_0x8005; + break; + case 9: + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak); + break; + case 11: + if (gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] != 3) + ResetBattleTowerStreak(battleTowerLevelType); + break; + case 12: + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = *((u8 *)&gBattleStruct->arenaTurnCounter); + break; + case 13: + gSaveBlock2Ptr->battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2Ptr->battleTower.lastStreakLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + break; + } +} + +void BattleTowerUtil(void) +{ + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType]; + break; + case 1: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + break; + case 2: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]; + break; + case 3: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 4: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.battleTowerTrainerId; + break; + case 5: + case 6: + case 7: + break; + case 8: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.unk_554; + break; + case 9: + gSpecialVar_Result = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak); + break; + case 11: + ResetBattleTowerStreak(battleTowerLevelType); + break; + case 12: + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = *((u8 *)&gBattleStruct->arenaTurnCounter); + break; + case 13: + gSaveBlock2Ptr->battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2Ptr->battleTower.lastStreakLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + break; + } +} + +void SetBattleTowerParty(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + gSelectedOrderFromParty[i] = gSaveBlock2Ptr->battleTower.selectedPartyMons[i]; + + ReducePlayerPartyToThree(); +} + +void SaveCurrentWinStreak(void) +{ + u8 levelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + u16 streak = GetCurrentBattleTowerWinStreak(levelType); + + if (gSaveBlock2Ptr->battleTower.recordWinStreaks[levelType] < streak) + gSaveBlock2Ptr->battleTower.recordWinStreaks[levelType] = streak; + + if (gSaveBlock2Ptr->battleTower.recordWinStreaks[0] > gSaveBlock2Ptr->battleTower.recordWinStreaks[1]) + { + streak = gSaveBlock2Ptr->battleTower.recordWinStreaks[0]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + + if (streak > 9999) + gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak = 9999; + else + gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak = streak; + } + else + { + streak = gSaveBlock2Ptr->battleTower.recordWinStreaks[1]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + + if (streak > 9999) + gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak = 9999; + else + gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak = streak; + } +} + +void sub_80E6EE0(void) +{ + s32 i; + u8 trainerClass; + struct BattleTowerRecord *playerRecord = &gSaveBlock2Ptr->battleTower.playerRecord; + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (gSaveBlock2Ptr->playerGender != MALE) + { + trainerClass = sFemaleTrainerClasses[(gSaveBlock2Ptr->playerTrainerId[0] + gSaveBlock2Ptr->playerTrainerId[1] + + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % NELEMS(sFemaleTrainerClasses)]; + } + else + { + trainerClass = sMaleTrainerClasses[(gSaveBlock2Ptr->playerTrainerId[0] + gSaveBlock2Ptr->playerTrainerId[1] + + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % NELEMS(sMaleTrainerClasses)]; + } + + playerRecord->battleTowerLevelType = battleTowerLevelType; + playerRecord->trainerClass = trainerClass; + + CopyTrainerId(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId); + StringCopy7(playerRecord->name, gSaveBlock2Ptr->playerName); + + playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + + for (i = 0; i < 6; i++) + playerRecord->greeting[i] = gSaveBlock1Ptr->easyChatBattleStart[i]; + + for (i = 0; i < 3; i++) + sub_803E23C(&gPlayerParty[gSaveBlock2Ptr->battleTower.selectedPartyMons[i] - 1], &playerRecord->party[i]); + + SetBattleTowerRecordChecksum(&gSaveBlock2Ptr->battleTower.playerRecord); + SaveCurrentWinStreak(); +} + +void SaveBattleTowerProgress(void) +{ + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) + { + if (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 + || gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) + sub_80E6EE0(); + } + + sub_80E712C(); + + gSaveBlock2Ptr->battleTower.battleOutcome = gBattleOutcome; + + if (gSpecialVar_0x8004 != 3) + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; + + VarSet(VAR_0x4000, 0); + gSaveBlock2Ptr->battleTower.unk_554 = 1; + TrySavingData(SAVE_EREADER); +} + +void BattleTower_SoftReset(void) +{ + DoSoftReset(); +} + +void ValidateBattleTowerRecordChecksums(void) +{ + u32 i; + s32 recordIndex; + struct BattleTowerRecord *record; + u32 checksum; + + record = &gSaveBlock2Ptr->battleTower.playerRecord; + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + checksum += ((u32 *)record)[i]; + + if (gSaveBlock2Ptr->battleTower.playerRecord.checksum != checksum) + ClearBattleTowerRecord(&gSaveBlock2Ptr->battleTower.playerRecord); + + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + record = &gSaveBlock2Ptr->battleTower.records[recordIndex]; + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + checksum += ((u32 *)record)[i]; + + if (gSaveBlock2Ptr->battleTower.records[recordIndex].checksum != checksum) + ClearBattleTowerRecord(&gSaveBlock2Ptr->battleTower.records[recordIndex]); + } +} + +void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) +{ + u32 i; + + record->checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + record->checksum += ((u32 *)record)[i]; +} + +void ClearBattleTowerRecord(struct BattleTowerRecord *record) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) + ((u32 *)record)[i] = 0; +} + +void sub_80E712C(void) +{ + s32 i; + + get_trainer_name(gSaveBlock2Ptr->battleTower.defeatedByTrainerName); + gSaveBlock2Ptr->battleTower.defeatedBySpecies = gBattleMons[1].species; + gSaveBlock2Ptr->battleTower.firstMonSpecies = gBattleMons[0].species; + + for (i = 0; i < POKEMON_NAME_LENGTH; i++) + gSaveBlock2Ptr->battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; +} + +u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) +{ + u16 winStreak = ((gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + + gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]; + + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +void DetermineBattleTowerPrize(void) +{ + u8 levelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[levelType] - 1 > 5) + gSaveBlock2Ptr->battleTower.prizeItem = sLongStreakPrizes[Random() % NELEMS(sLongStreakPrizes)]; + else + gSaveBlock2Ptr->battleTower.prizeItem = sShortStreakPrizes[Random() % NELEMS(sShortStreakPrizes)]; +} + +void GiveBattleTowerPrize(void) +{ + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (AddBagItem(gSaveBlock2Ptr->battleTower.prizeItem, 1) == TRUE) + { + CopyItemName(gSaveBlock2Ptr->battleTower.prizeItem, gStringVar1); + gSpecialVar_Result = 1; + } + else + { + gSpecialVar_Result = 0; + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = 6; + } +} + +void AwardBattleTowerRibbons(void) +{ + s32 i; + u32 partyIndex; + struct Pokemon *pokemon; + u8 ribbonType; + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (battleTowerLevelType != 0) + ribbonType = MON_DATA_VICTORY_RIBBON; + else + ribbonType = MON_DATA_WINNING_RIBBON; + + gSpecialVar_Result = 0; + + if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) + { + for (i = 0; i < 3; i++) + { + partyIndex = gSaveBlock2Ptr->battleTower.selectedPartyMons[i] - 1; + pokemon = &gPlayerParty[partyIndex]; + if (!GetMonData(pokemon, ribbonType)) + { + gSpecialVar_Result = 1; + SetMonData(pokemon, ribbonType, &gSpecialVar_Result); + } + } + } + + if (gSpecialVar_Result != 0) + IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); +} + +// This is a leftover debugging function that is used to populate the E-Reader +// trainer with the player's current data. +void Debug_FillEReaderTrainerWithPlayerData(void) +{ + struct BattleTowerEReaderTrainer *ereaderTrainer; + s32 i; + s32 j; + + ereaderTrainer = &gSaveBlock2Ptr->battleTower.ereaderTrainer; + + if (gSaveBlock2Ptr->playerGender != MALE) + { + ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2Ptr->playerTrainerId[0] + gSaveBlock2Ptr->playerTrainerId[1] + + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % NELEMS(sFemaleTrainerClasses)]; + } + else + { + ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2Ptr->playerTrainerId[0] + gSaveBlock2Ptr->playerTrainerId[1] + + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % NELEMS(sMaleTrainerClasses)]; + } + + CopyTrainerId(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId); + StringCopy7(ereaderTrainer->name, gSaveBlock2Ptr->playerName); + + ereaderTrainer->winStreak = 1; + + j = 7; + for (i = 0; i < 6; i++) + { + ereaderTrainer->greeting[i] = gSaveBlock1Ptr->easyChatBattleStart[i]; + ereaderTrainer->farewellPlayerLost[i] = j; + ereaderTrainer->farewellPlayerWon[i] = j + 6; + j++; + } + + for (i = 0; i < 3; i++) + sub_803E23C(&gPlayerParty[i], &ereaderTrainer->party[i]); + + SetEReaderTrainerChecksum(ereaderTrainer); +} + +u8 GetEreaderTrainerFrontSpriteId(void) +{ + return gFacilityClassToPicIndex[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass]; +} + +u8 GetEreaderTrainerClassId(void) +{ + return gFacilityClassToTrainerClass[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass]; +} + +void CopyEReaderTrainerName5(u8 *trainerName) +{ + s32 i; + + for (i = 0; i < 5; i++) + trainerName[i] = gSaveBlock2Ptr->battleTower.ereaderTrainer.name[i]; + + trainerName[i] = EOS; +} + +// Checks if the saved E-Reader trainer is valid. +void ValidateEReaderTrainer(void) +{ + u32 i; + u32 checksum; + struct BattleTowerEReaderTrainer *ereaderTrainer; + + gSpecialVar_Result = 0; + ereaderTrainer = &gSaveBlock2Ptr->battleTower.ereaderTrainer; + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + checksum |= ((u32 *)ereaderTrainer)[i]; + + if (checksum == 0) + { + gSpecialVar_Result = 1; + return; + } + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + checksum += ((u32 *)ereaderTrainer)[i]; + + if (gSaveBlock2Ptr->battleTower.ereaderTrainer.checksum != checksum) + { + ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer); + gSpecialVar_Result = 1; + } +} + +void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + s32 i; + + ereaderTrainer->checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; +} + +void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) + ((u32 *)ereaderTrainer)[i] = 0; +} + +void PrintEReaderTrainerGreeting(void) +{ + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.greeting); +} + +void PrintEReaderTrainerFarewellMessage(void) +{ + if (gBattleOutcome == B_OUTCOME_DREW) + gStringVar4[0] = EOS; + else if (gBattleOutcome == B_OUTCOME_WON) + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.farewellPlayerWon); + else + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.farewellPlayerLost); +} + +void Dummy_TryEnableBravoTrainerBattleTower(void) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + if (gSaveBlock2Ptr->battleTower.var_4AE[i] == 1) + TakeBravoTrainerBattleTowerOffTheAir(); + } +} diff --git a/src/mevent.c b/src/mevent.c index 671e30ee0..5ed001d09 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -588,7 +588,7 @@ void DestroyWonderCard(void) ClearRamScript(); sub_806E2D0(); sub_806E370(); - sub_80E7524(&gSaveBlock2Ptr->battleTower.ereaderTrainer); + ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer); } bool32 sub_8143F68(const struct MEWonderCardData * data) diff --git a/sym_ewram.txt b/sym_ewram.txt index 14a9fad1e..27b3067ec 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -75,6 +75,7 @@ gUnknown_2031DEA: @ 2031DEA gUnknown_2031DEC: @ 2031DEC .space 0x10 + .align 2 .include "src/fieldmap.o" gUnknown_2036E28: @ 2036E28 @@ -189,7 +190,9 @@ gAnimBattlerSpecies: @ 2037F1C gUnknown_2037F24: @ 2037F24 .space 0x4 + .align 2 .include "src/battle_anim_mons.o" + .align 2 .include "src/title_screen.o" .align 2 @@ -219,6 +222,7 @@ gUnknown_20386A8: @ 20386A8 gFieldEffectArguments: @ 20386E0 .space 0x20 + .align 2 .include "src/scanline_effect.o" .align 2 @@ -352,10 +356,12 @@ gUnknown_2039984: @ 2039984 gUnknown_203998C: @ 203998C .space 0x4 + .align 2 .include "src/money.o" .align 2 .include "src/safari_zone.o" + .align 2 .include "src/item_use.o" .align 2 @@ -413,7 +419,6 @@ gPlayerFacingPosition: @ 2039A04 .align 2 .include "src/field_specials.o" - .align 2 .include "src/battle_records.o" @@ -423,7 +428,9 @@ gUnknown_2039A20: @ 2039A20 gUnknown_2039A24: @ 2039A24 .space 0x4 + .align 2 .include "src/coins.o" + .align 2 .include "src/battle_transition.o" gUnknown_2039A30: @ 2039A30 @@ -432,7 +439,9 @@ gUnknown_2039A30: @ 2039A30 gUnknown_2039A34: @ 2039A34 .space 0x4 + .align 2 .include "src/save.o" + .align 2 .include "src/mystery_event_script.o" gUnknown_203AAB0: @ 203AAB0 @@ -441,14 +450,12 @@ gUnknown_203AAB0: @ 203AAB0 gUnknown_203AAB4: @ 203AAB4 .space 0x4 -gUnknown_203AAB8: @ 203AAB8 - .space 0x4 - + .align 2 + .include "src/battle_tower.o" .align 2 .include "src/player_pc.o" .align 2 .include "src/intro.o" - .align 2 .include "src/hall_of_fame.o" .align 2 @@ -496,6 +503,7 @@ gUnknown_203ACEC: @ 203ACEC gUnknown_203ACF0: @ 203ACF0 .space 0x4 + .align 2 .include "src/list_menu.o" .align 2 gUnknown_203ACFC: @ 203ACFC @@ -539,22 +547,16 @@ gSpecialVar_ItemId: @ 203AD30 .align 2 .include "src/bag.o" - .align 2 .include "src/trainer_pokemon_sprites.o" - .align 2 .include "src/vs_seeker.o" - .align 2 .include "src/item_pc.o" - .align 2 .include "src/mailbox_pc.o" - .align 2 .include "src/menu.o" - .align 2 .include "src/quest_log.o" @@ -640,7 +642,7 @@ gUnknown_203B0CC: @ 203B0CC gUnknown_203B0D0: @ 203B0D0 .space 0x4 -gUnknown_203B0D4: @ 203B0D4 +gSelectedOrderFromParty: @ 203B0D4 .space 0x4 gUnknown_203B0D8: @ 203B0D8 |