diff options
author | Marcus Huderle <huderlem@gmail.com> | 2017-10-23 19:32:10 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2017-10-26 19:30:21 -0700 |
commit | e27be38588bc1d2d3e26e10c87d5de91a5cbab21 (patch) | |
tree | a72acc4e643e29d416a0695b8ad2e8938a3041b7 | |
parent | f90bc99a49a3d4fa60e96cd6fbcb546f8e3a1da0 (diff) |
More decomp of battle_tower
-rw-r--r-- | asm/battle_tower.s | 823 | ||||
-rw-r--r-- | include/easy_chat.h | 1 | ||||
-rw-r--r-- | include/global.h | 18 | ||||
-rw-r--r-- | include/pokemon.h | 46 | ||||
-rw-r--r-- | src/battle_tower.c | 508 |
5 files changed, 546 insertions, 850 deletions
diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 9c574eeb4..42cf56a7d 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -6,829 +6,6 @@ .text - thumb_func_start CheckMonBattleTowerBanlist -CheckMonBattleTowerBanlist: @ 8135200 - 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 _081352CE - cmp r4, 0 - beq _081352CE - ldr r0, _081352DC @ =gBattleTowerBanlist - ldrh r1, [r0] - ldr r5, _081352E0 @ =0x0000ffff - adds r3, r0, 0 - cmp r1, r5 - beq _08135264 - cmp r1, r4 - beq _08135258 - adds r1, r3, 0 -_0813524A: - adds r1, 0x2 - adds r2, 0x1 - ldrh r0, [r1] - cmp r0, r5 - beq _08135264 - cmp r0, r4 - bne _0813524A -_08135258: - lsls r0, r2, 1 - adds r0, r3 - ldrh r1, [r0] - ldr r0, _081352E0 @ =0x0000ffff - cmp r1, r0 - bne _081352CE -_08135264: - mov r0, r12 - cmp r0, 0 - bne _08135270 - mov r1, r8 - cmp r1, 0x32 - bhi _081352CE -_08135270: - movs r2, 0 - ldrb r3, [r7] - cmp r2, r3 - bge _08135290 - mov r1, r9 - ldrh r0, [r1] - cmp r0, r4 - beq _08135290 - adds r5, r3, 0 -_08135282: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r5 - bge _08135290 - ldrh r0, [r1] - cmp r0, r4 - bne _08135282 -_08135290: - cmp r2, r3 - bne _081352CE - cmp r6, 0 - beq _081352BA - movs r2, 0 - cmp r2, r3 - bge _081352B6 - mov r1, r10 - ldrh r0, [r1] - cmp r0, r6 - beq _081352B6 - adds r5, r3, 0 -_081352A8: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r5 - bge _081352B6 - ldrh r0, [r1] - cmp r0, r6 - bne _081352A8 -_081352B6: - cmp r2, r3 - bne _081352CE -_081352BA: - 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] -_081352CE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081352DC: .4byte gBattleTowerBanlist -_081352E0: .4byte 0x0000ffff - thumb_func_end CheckMonBattleTowerBanlist - - thumb_func_start CheckPartyBattleTowerBanlist -CheckPartyBattleTowerBanlist: @ 81352E4 - 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 -_081352FE: - movs r0, 0x64 - adds r5, r7, 0 - muls r5, r0 - ldr r0, _081353C4 @ =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, _081353C8 @ =gScriptResult - 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 CheckMonBattleTowerBanlist - adds r7, 0x1 - cmp r7, 0x5 - ble _081352FE - mov r1, r9 - ldrb r0, [r1] - cmp r0, 0x2 - bhi _08135420 - ldr r1, _081353CC @ =gStringVar1 - movs r0, 0xFF - strb r0, [r1] - ldr r1, _081353D0 @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - movs r0, 0 - mov r1, r9 - strb r0, [r1] - bl CountBattleTowerBanlistCaught - adds r6, r0, 0 - ldr r2, _081353D4 @ =gBattleTowerBanlist - ldrh r0, [r2] - ldr r1, _081353D8 @ =0x0000ffff - cmp r0, r1 - beq _081353A8 - mov r5, r9 - adds r7, r1, 0 - adds r4, r2, 0 -_08135394: - ldrh r0, [r4] - ldrb r1, [r5] - adds r2, r6, 0 - bl AppendBattleTowerBannedSpeciesName - strb r0, [r5] - adds r4, 0x2 - ldrh r0, [r4] - cmp r0, r7 - bne _08135394 -_081353A8: - mov r0, r9 - ldrb r1, [r0] - cmp r1, 0 - bne _081353E4 - ldr r4, _081353CC @ =gStringVar1 - ldr r1, _081353DC @ =gUnknown_08400E2C - adds r0, r4, 0 - bl StringAppend - ldr r1, _081353E0 @ =gUnknown_08400E32 - adds r0, r4, 0 - bl StringAppend - b _0813543E - .align 2, 0 -_081353C4: .4byte gPlayerParty -_081353C8: .4byte gScriptResult -_081353CC: .4byte gStringVar1 -_081353D0: .4byte gSpecialVar_0x8004 -_081353D4: .4byte gBattleTowerBanlist -_081353D8: .4byte 0x0000ffff -_081353DC: .4byte gUnknown_08400E2C -_081353E0: .4byte gUnknown_08400E32 -_081353E4: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08135400 - ldr r0, _081353F8 @ =gStringVar1 - ldr r1, _081353FC @ =gUnknown_08400E2E - bl StringAppend - b _08135408 - .align 2, 0 -_081353F8: .4byte gStringVar1 -_081353FC: .4byte gUnknown_08400E2E -_08135400: - ldr r0, _08135414 @ =gStringVar1 - ldr r1, _08135418 @ =gUnknown_08400E2C - bl StringAppend -_08135408: - ldr r0, _08135414 @ =gStringVar1 - ldr r1, _0813541C @ =gUnknown_08400E36 - bl StringAppend - b _0813543E - .align 2, 0 -_08135414: .4byte gStringVar1 -_08135418: .4byte gUnknown_08400E2C -_0813541C: .4byte gUnknown_08400E36 -_08135420: - ldr r1, _08135450 @ =gSpecialVar_0x8004 - movs r0, 0 - strh r0, [r1] - ldr r2, _08135454 @ =gSaveBlock2 - ldrb r0, [r5] - ldr r1, _08135458 @ =0x00000554 - 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] -_0813543E: - 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 -_08135450: .4byte gSpecialVar_0x8004 -_08135454: .4byte gSaveBlock2 -_08135458: .4byte 0x00000554 - thumb_func_end CheckPartyBattleTowerBanlist - - thumb_func_start sub_813545C -sub_813545C: @ 813545C - push {lr} - adds r1, r0, 0 - ldr r0, _08135470 @ =gStringVar4 - movs r2, 0x2 - movs r3, 0x3 - bl sub_80EB544 - pop {r0} - bx r0 - .align 2, 0 -_08135470: .4byte gStringVar4 - thumb_func_end sub_813545C - - thumb_func_start sub_8135474 -sub_8135474: @ 8135474 - push {lr} - ldr r2, _08135490 @ =gSaveBlock2 - ldr r0, _08135494 @ =0x00000564 - adds r1, r2, r0 - ldrb r0, [r1] - cmp r0, 0xC8 - bne _08135498 - movs r1, 0x95 - lsls r1, 3 - adds r0, r2, r1 - bl sub_813545C - b _081354C4 - .align 2, 0 -_08135490: .4byte gSaveBlock2 -_08135494: .4byte 0x00000564 -_08135498: - cmp r0, 0x63 - bhi _081354B4 - ldrb r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r1, _081354B0 @ =gBattleTowerTrainers + 0xC - adds r0, r1 - bl sub_813545C - b _081354C4 - .align 2, 0 -_081354B0: .4byte gBattleTowerTrainers + 0xC -_081354B4: - ldrb r1, [r1] - movs r0, 0xA4 - muls r0, r1 - ldr r3, _081354C8 @ =0xffffc14c - adds r1, r2, r3 - adds r0, r1 - bl sub_813545C -_081354C4: - pop {r0} - bx r0 - .align 2, 0 -_081354C8: .4byte 0xffffc14c - thumb_func_end sub_8135474 - - thumb_func_start sub_81354CC -sub_81354CC: @ 81354CC - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _081354E4 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x1 - beq _081354E8 - cmp r0, 0x1 - ble _08135520 - cmp r0, 0x2 - beq _0813551C - b _08135520 - .align 2, 0 -_081354E4: .4byte gSpecialVar_0x8004 -_081354E8: - movs r5, 0 -_081354EA: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _08135514 @ =gSaveBlock1 + 0x238 - adds r0, r4, r0 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1] - ldr r0, _08135518 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r5, 0x1 - cmp r5, 0x5 - ble _081354EA - b _08135520 - .align 2, 0 -_08135514: .4byte gSaveBlock1 + 0x238 -_08135518: .4byte gPlayerParty -_0813551C: - bl sub_81360D0 -_08135520: - ldr r0, _08135530 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl SetMainCallback2 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08135530: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music - thumb_func_end sub_81354CC - - thumb_func_start sub_8135534 -sub_8135534: @ 8135534 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsBattleTransitionDone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08135558 - ldr r0, _08135560 @ =gMain - ldr r1, _08135564 @ =sub_81354CC - str r1, [r0, 0x8] - ldr r0, _08135568 @ =sub_800E7C4 - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_08135558: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08135560: .4byte gMain -_08135564: .4byte sub_81354CC -_08135568: .4byte sub_800E7C4 - thumb_func_end sub_8135534 - - thumb_func_start sub_813556C -sub_813556C: @ 813556C - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _08135584 @ =gSpecialVar_0x8004 - ldrh r2, [r0] - cmp r2, 0x1 - beq _081355AC - cmp r2, 0x1 - bgt _08135588 - cmp r2, 0 - beq _0813558E - b _08135648 - .align 2, 0 -_08135584: .4byte gSpecialVar_0x8004 -_08135588: - cmp r2, 0x2 - beq _08135600 - b _08135648 -_0813558E: - ldr r1, _081355A4 @ =gBattleTypeFlags - movs r3, 0x84 - lsls r3, 1 - adds r0, r3, 0 - strh r0, [r1] - ldr r0, _081355A8 @ =gTrainerBattleOpponent - strh r2, [r0] - bl sub_8134DD4 - b _081355D6 - .align 2, 0 -_081355A4: .4byte gBattleTypeFlags -_081355A8: .4byte gTrainerBattleOpponent -_081355AC: - movs r5, 0 -_081355AE: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _081355F4 @ =gPlayerParty - adds r0, r4, r0 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1] - ldr r0, _081355F8 @ =gSaveBlock1 + 0x238 - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r5, 0x1 - cmp r5, 0x5 - ble _081355AE -_081355D6: - ldr r0, _081355FC @ =sub_8135534 - movs r1, 0x1 - bl CreateTask - movs r0, 0 - bl current_map_music_set__default_for_battle - bl BattleSetup_GetBattleTowerBattleTransition - lsls r0, 24 - lsrs r0, 24 - bl BattleTransition_StartOnField - b _08135648 - .align 2, 0 -_081355F4: .4byte gPlayerParty -_081355F8: .4byte gSaveBlock1 + 0x238 -_081355FC: .4byte sub_8135534 -_08135600: - bl ZeroEnemyPartyMons - movs r5, 0 -_08135606: - movs r0, 0x64 - muls r0, r5 - ldr r1, _08135650 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2C - muls r1, r5 - ldr r2, _08135654 @ =gSaveBlock2 + 0x4CC - adds r1, r2 - bl sub_803ADE8 - adds r5, 0x1 - cmp r5, 0x2 - ble _08135606 - ldr r1, _08135658 @ =gBattleTypeFlags - ldr r2, _0813565C @ =0x00000808 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08135660 @ =gTrainerBattleOpponent - movs r0, 0 - strh r0, [r1] - ldr r0, _08135664 @ =sub_8135534 - movs r1, 0x1 - bl CreateTask - movs r0, 0 - bl current_map_music_set__default_for_battle - bl BattleSetup_GetBattleTowerBattleTransition - lsls r0, 24 - lsrs r0, 24 - bl BattleTransition_StartOnField -_08135648: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08135650: .4byte gEnemyParty -_08135654: .4byte gSaveBlock2 + 0x4CC -_08135658: .4byte gBattleTypeFlags -_0813565C: .4byte 0x00000808 -_08135660: .4byte gTrainerBattleOpponent -_08135664: .4byte sub_8135534 - thumb_func_end sub_813556C - - thumb_func_start sub_8135668 -sub_8135668: @ 8135668 - push {r4,r5,lr} - ldr r1, _0813568C @ =gSaveBlock2 - ldr r2, _08135690 @ =0x00000554 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r4, r0, 31 - ldr r0, _08135694 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - adds r5, r1, 0 - cmp r0, 0xE - bls _08135682 - b _0813589A -_08135682: - lsls r0, 2 - ldr r1, _08135698 @ =_0813569C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813568C: .4byte gSaveBlock2 -_08135690: .4byte 0x00000554 -_08135694: .4byte gSpecialVar_0x8004 -_08135698: .4byte _0813569C - .align 2, 0 -_0813569C: - .4byte _081356D8 - .4byte _08135700 - .4byte _0813571C - .4byte _08135726 - .4byte _08135740 - .4byte _08135754 - .4byte _08135774 - .4byte _081357D0 - .4byte _081357FC - .4byte _0813589A - .4byte _08135820 - .4byte _08135834 - .4byte _0813584C - .4byte _0813586C - .4byte _08135888 -_081356D8: - ldr r0, _081356F0 @ =0x02000000 - ldr r3, _081356F4 @ =0x00000556 - adds r1, r5, r3 - adds r1, r4, r1 - ldrb r2, [r1] - ldr r3, _081356F8 @ =0x000160fb - adds r0, r3 - strb r2, [r0] - ldr r0, _081356FC @ =gSpecialVar_0x8005 - ldrh r0, [r0] - b _08135898 - .align 2, 0 -_081356F0: .4byte 0x02000000 -_081356F4: .4byte 0x00000556 -_081356F8: .4byte 0x000160fb -_081356FC: .4byte gSpecialVar_0x8005 -_08135700: - ldr r0, _08135714 @ =gSpecialVar_0x8005 - ldrb r0, [r0] - ldr r1, _08135718 @ =0x00000554 - adds r3, r5, r1 - movs r1, 0x1 - ands r1, r0 - ldrb r2, [r3] - movs r0, 0x2 - negs r0, r0 - b _08135810 - .align 2, 0 -_08135714: .4byte gSpecialVar_0x8005 -_08135718: .4byte 0x00000554 -_0813571C: - lsls r1, r4, 1 - movs r2, 0xAB - lsls r2, 3 - adds r0, r5, r2 - b _0813572C -_08135726: - lsls r1, r4, 1 - ldr r3, _08135738 @ =0x0000055c - adds r0, r5, r3 -_0813572C: - adds r1, r0 - ldr r0, _0813573C @ =gSpecialVar_0x8005 - ldrh r0, [r0] - strh r0, [r1] - b _0813589A - .align 2, 0 -_08135738: .4byte 0x0000055c -_0813573C: .4byte gSpecialVar_0x8005 -_08135740: - ldr r0, _0813574C @ =gSpecialVar_0x8005 - ldrh r1, [r0] - ldr r2, _08135750 @ =0x00000564 - adds r0, r5, r2 - strb r1, [r0] - b _0813589A - .align 2, 0 -_0813574C: .4byte gSpecialVar_0x8005 -_08135750: .4byte 0x00000564 -_08135754: - movs r2, 0 - ldr r4, _0813576C @ =gSaveBlock2 + 0x565 - ldr r3, _08135770 @ =gSelectedOrderFromParty -_0813575A: - adds r0, r2, r4 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _0813575A - b _0813589A - .align 2, 0 -_0813576C: .4byte gSaveBlock2 + 0x565 -_08135770: .4byte gSelectedOrderFromParty -_08135774: - ldr r3, _081357C0 @ =0x00000564 - adds r0, r5, r3 - ldrb r0, [r0] - cmp r0, 0xC8 - bne _08135788 - movs r1, 0x93 - lsls r1, 3 - adds r0, r5, r1 - bl sub_81360AC -_08135788: - movs r3, 0xAE - lsls r3, 3 - adds r2, r5, r3 - ldrh r1, [r2] - ldr r0, _081357C4 @ =0x0000270e - cmp r1, r0 - bhi _0813579A - adds r0, r1, 0x1 - strh r0, [r2] -_0813579A: - lsls r4, 1 - movs r1, 0xAB - lsls r1, 3 - adds r0, r5, r1 - adds r4, r0 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - bl sub_8135A3C - ldr r1, _081357C8 @ =gScriptResult - ldrh r0, [r4] - strh r0, [r1] - ldr r1, _081357CC @ =gStringVar1 - adds r0, 0xA1 - strb r0, [r1] - movs r0, 0xFF - strb r0, [r1, 0x1] - b _0813589A - .align 2, 0 -_081357C0: .4byte 0x00000564 -_081357C4: .4byte 0x0000270e -_081357C8: .4byte gScriptResult -_081357CC: .4byte gStringVar1 -_081357D0: - lsls r0, r4, 1 - ldr r2, _081357F0 @ =0x0000055c - adds r1, r5, r2 - adds r4, r0, r1 - ldrh r1, [r4] - ldr r0, _081357F4 @ =0x00000595 - cmp r1, r0 - bhi _081357E4 - adds r0, r1, 0x1 - strh r0, [r4] -_081357E4: - bl sub_8135A3C - ldr r1, _081357F8 @ =gScriptResult - ldrh r0, [r4] - strh r0, [r1] - b _0813589A - .align 2, 0 -_081357F0: .4byte 0x0000055c -_081357F4: .4byte 0x00000595 -_081357F8: .4byte gScriptResult -_081357FC: - ldr r0, _08135818 @ =gSpecialVar_0x8005 - ldrb r0, [r0] - ldr r1, _0813581C @ =0x00000554 - adds r3, r5, r1 - movs r1, 0x1 - ands r1, r0 - lsls r1, 1 - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 -_08135810: - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _0813589A - .align 2, 0 -_08135818: .4byte gSpecialVar_0x8005 -_0813581C: .4byte 0x00000554 -_08135820: - ldr r2, _08135830 @ =0x00000572 - adds r0, r5, r2 - ldrh r1, [r0] - movs r0, 0x20 - bl SetGameStat - b _0813589A - .align 2, 0 -_08135830: .4byte 0x00000572 -_08135834: - ldr r3, _08135848 @ =0x00000556 - adds r0, r5, r3 - adds r0, r4, r0 - ldrb r0, [r0] - cmp r0, 0x3 - beq _0813589A - adds r0, r4, 0 - bl sub_813461C - b _0813589A - .align 2, 0 -_08135848: .4byte 0x00000556 -_0813584C: - ldr r1, _08135860 @ =0x00000556 - adds r0, r5, r1 - adds r0, r4, r0 - ldr r1, _08135864 @ =0x02000000 - ldr r2, _08135868 @ =0x000160fb - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - b _0813589A - .align 2, 0 -_08135860: .4byte 0x00000556 -_08135864: .4byte 0x02000000 -_08135868: .4byte 0x000160fb -_0813586C: - adds r0, r4, 0 - bl sub_8135D3C - ldr r1, _08135880 @ =gSaveBlock2 - lsls r2, r4, 1 - ldr r3, _08135884 @ =0x00000574 - adds r1, r3 - adds r2, r1 - strh r0, [r2] - b _0813589A - .align 2, 0 -_08135880: .4byte gSaveBlock2 -_08135884: .4byte 0x00000574 -_08135888: - ldr r1, _081358A0 @ =0x00000554 - adds r0, r5, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - movs r2, 0xAF - lsls r2, 3 - adds r1, r5, r2 -_08135898: - strb r0, [r1] -_0813589A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081358A0: .4byte 0x00000554 - thumb_func_end sub_8135668 - thumb_func_start sub_81358A4 sub_81358A4: @ 81358A4 push {r4,lr} diff --git a/include/easy_chat.h b/include/easy_chat.h index 8a820353f..b59adedd5 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -1080,6 +1080,7 @@ u8 sub_80EB868(u8); void sub_80EB890(u8); u8 sub_80EB8C0(void); u16 sub_80EB8EC(void); +u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3); #if GERMAN u32 de_sub_80EB748(u32, u32); diff --git a/include/global.h b/include/global.h index 11611dc41..1431bf772 100644 --- a/include/global.h +++ b/include/global.h @@ -766,8 +766,11 @@ struct BattleTowerRecord // record mixing /*0x01*/u8 trainerClass; /*0x02*/u16 var_2; /*0x04*/u8 name[8]; - /*0x0C*/u8 var_C[5]; - u8 filler[0x93]; + /*0x0C*/u8 var_C[4]; + /*0x10*/struct { + u16 easyChat[6]; + } greeting; + /*0x1C*/u8 filler[0x87]; }; struct BattleTowerEReaderTrainer @@ -775,8 +778,14 @@ struct BattleTowerEReaderTrainer /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; /*0x02*/u16 filler_2; - /*0x04*/u8 name[8]; - /*0x0B*/u8 ereaderTrainer[0xB0]; + /*0x04*/u8 name[7]; + /*0x0B*/u8 filler_B[0x5]; + /*0x10*/struct { + u16 easyChat[6]; + } greeting; + /*0x1C*/u8 filler_1C[0x18]; + /*0x34*/struct UnknownPokemonStruct party[3]; + /*0xB8*/u32 unk_B0; }; struct SaveBlock2_Sub @@ -788,6 +797,7 @@ struct SaveBlock2_Sub /*0x03DC, 0x0484*/ u8 filler_3DC[0x14]; /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer; /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100 + /*0x04AC, 0x0554*/ u8 unk_554:1; /*0x04AD, 0x0555*/ u8 var_4AD; // used by tv, but ultimately does nothing, since both code paths are identical /*0x04AE, 0x0556*/ u8 var_4AE[2]; /*0x04B0, 0x0558*/ u16 var_4B0[2]; diff --git a/include/pokemon.h b/include/pokemon.h index 4c3e27609..554d18aa6 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -288,29 +288,29 @@ struct Pokemon struct UnknownPokemonStruct { - u16 species; - u16 heldItem; - u16 moves[4]; - u8 level; - u8 ppBonuses; - u8 hpEV; - u8 attackEV; - u8 defenseEV; - u8 speedEV; - u8 spAttackEV; - u8 spDefenseEV; - u32 otId; - u32 hpIV:5; - u32 attackIV:5; - u32 defenseIV:5; - u32 speedIV:5; - u32 spAttackIV:5; - u32 spDefenseIV:5; - u32 gap:1; - u32 altAbility:1; - u32 personality; - u8 nickname[POKEMON_NAME_LENGTH + 1]; - u8 friendship; + /*0x00*/u16 species; + /*0x02*/u16 heldItem; + /*0x04*/u16 moves[4]; + /*0x0C*/u8 level; + /*0x0D*/u8 ppBonuses; + /*0x0E*/u8 hpEV; + /*0x0F*/u8 attackEV; + /*0x10*/u8 defenseEV; + /*0x11*/u8 speedEV; + /*0x12*/u8 spAttackEV; + /*0x13*/u8 spDefenseEV; + /*0x14*/u32 otId; + /*0x18*/u32 hpIV:5; + /*0x18*/u32 attackIV:5; + /*0x19*/u32 defenseIV:5; + /*0x19*/u32 speedIV:5; + /*0x1A*/u32 spAttackIV:5; + /*0x1A*/u32 spDefenseIV:5; + /*0x1B*/u32 gap:1; + /*0x1B*/u32 altAbility:1; + /*0x1C*/u32 personality; + /*0x20*/u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x2B*/u8 friendship; }; struct BattlePokemon diff --git a/src/battle_tower.c b/src/battle_tower.c index 507d2be10..519a6f71e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,15 +1,21 @@ #include "global.h" +#include "battle.h" +#include "battle_setup.h" #include "battle_tower.h" +#include "battle_transition.h" #include "data2.h" #include "easy_chat.h" #include "event_data.h" #include "items.h" +#include "main.h" #include "map_object_constants.h" #include "moves.h" +#include "overworld.h" #include "pokedex.h" #include "rng.h" #include "species.h" #include "string_util.h" +#include "task.h" #include "text.h" #include "trainer.h" #include "vars.h" @@ -232,6 +238,8 @@ const u16 gUnknown_08405EE6[] = { ITEM_CHOICE_BAND, }; +extern void sub_81360D0(void); +extern u16 gSpecialVar_0x8004; extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; extern u8 gUnknown_08400E2E[]; @@ -239,10 +247,17 @@ extern u8 gUnknown_08400E30[]; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; +extern u16 gTrainerBattleOpponent; +extern u16 gBattleTypeFlags; +extern u8 gSelectedOrderFromParty[]; extern void sub_8135C44(void); extern void sub_813601C(void); extern void sub_81349FC(u8); +extern void sub_81360AC(struct BattleTowerEReaderTrainer *); +extern void sub_8135A3C(void); + +#define ewram160FB (ewram[0x160FB]) void sub_8134548(void) @@ -1787,3 +1802,496 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT return curIndexToAppend; } + +__attribute__((naked)) +void CheckMonBattleTowerBanlist() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r2, [sp, 0x20]\n\ + ldr r4, [sp, 0x24]\n\ + mov r9, r4\n\ + ldr r4, [sp, 0x28]\n\ + mov r10, r4\n\ + ldr r7, [sp, 0x2C]\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + mov r12, r3\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r8, r2\n\ + movs r2, 0\n\ + movs r0, 0xCE\n\ + lsls r0, 1\n\ + cmp r4, r0\n\ + beq _081352CE\n\ + cmp r4, 0\n\ + beq _081352CE\n\ + ldr r0, _081352DC @ =gBattleTowerBanlist\n\ + ldrh r1, [r0]\n\ + ldr r5, _081352E0 @ =0x0000ffff\n\ + adds r3, r0, 0\n\ + cmp r1, r5\n\ + beq _08135264\n\ + cmp r1, r4\n\ + beq _08135258\n\ + adds r1, r3, 0\n\ +_0813524A:\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + ldrh r0, [r1]\n\ + cmp r0, r5\n\ + beq _08135264\n\ + cmp r0, r4\n\ + bne _0813524A\n\ +_08135258:\n\ + lsls r0, r2, 1\n\ + adds r0, r3\n\ + ldrh r1, [r0]\n\ + ldr r0, _081352E0 @ =0x0000ffff\n\ + cmp r1, r0\n\ + bne _081352CE\n\ +_08135264:\n\ + mov r0, r12\n\ + cmp r0, 0\n\ + bne _08135270\n\ + mov r1, r8\n\ + cmp r1, 0x32\n\ + bhi _081352CE\n\ +_08135270:\n\ + movs r2, 0\n\ + ldrb r3, [r7]\n\ + cmp r2, r3\n\ + bge _08135290\n\ + mov r1, r9\n\ + ldrh r0, [r1]\n\ + cmp r0, r4\n\ + beq _08135290\n\ + adds r5, r3, 0\n\ +_08135282:\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + cmp r2, r5\n\ + bge _08135290\n\ + ldrh r0, [r1]\n\ + cmp r0, r4\n\ + bne _08135282\n\ +_08135290:\n\ + cmp r2, r3\n\ + bne _081352CE\n\ + cmp r6, 0\n\ + beq _081352BA\n\ + movs r2, 0\n\ + cmp r2, r3\n\ + bge _081352B6\n\ + mov r1, r10\n\ + ldrh r0, [r1]\n\ + cmp r0, r6\n\ + beq _081352B6\n\ + adds r5, r3, 0\n\ +_081352A8:\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + cmp r2, r5\n\ + bge _081352B6\n\ + ldrh r0, [r1]\n\ + cmp r0, r6\n\ + bne _081352A8\n\ +_081352B6:\n\ + cmp r2, r3\n\ + bne _081352CE\n\ +_081352BA:\n\ + lsls r0, r3, 1\n\ + add r0, r9\n\ + strh r4, [r0]\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + add r0, r10\n\ + strh r6, [r0]\n\ + ldrb r0, [r7]\n\ + adds r0, 0x1\n\ + strb r0, [r7]\n\ +_081352CE:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081352DC: .4byte gBattleTowerBanlist\n\ +_081352E0: .4byte 0x0000ffff\n\ +.syntax divided\n"); +} + +__attribute__((naked)) +void CheckPartyBattleTowerBanlist() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x2C\n\ + add r1, sp, 0x28\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + movs r7, 0\n\ + mov r9, r1\n\ + add r0, sp, 0x1C\n\ + mov r10, r0\n\ +_081352FE:\n\ + movs r0, 0x64\n\ + adds r5, r7, 0\n\ + muls r5, r0\n\ + ldr r0, _081353C4 @ =gPlayerParty\n\ + adds r5, r0\n\ + adds r0, r5, 0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + mov r8, r0\n\ + mov r1, r8\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r8, r1\n\ + adds r0, r5, 0\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + adds r6, r0, 0\n\ + lsls r6, 16\n\ + lsrs r6, 16\n\ + adds r0, r5, 0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r5, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r2, r0, 0\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + ldr r5, _081353C8 @ =gScriptResult\n\ + ldrb r3, [r5]\n\ + str r4, [sp]\n\ + add r0, sp, 0x10\n\ + str r0, [sp, 0x4]\n\ + mov r1, r10\n\ + str r1, [sp, 0x8]\n\ + mov r0, r9\n\ + str r0, [sp, 0xC]\n\ + mov r0, r8\n\ + adds r1, r6, 0\n\ + bl CheckMonBattleTowerBanlist\n\ + adds r7, 0x1\n\ + cmp r7, 0x5\n\ + ble _081352FE\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x2\n\ + bhi _08135420\n\ + ldr r1, _081353CC @ =gStringVar1\n\ + movs r0, 0xFF\n\ + strb r0, [r1]\n\ + ldr r1, _081353D0 @ =gSpecialVar_0x8004\n\ + movs r0, 0x1\n\ + strh r0, [r1]\n\ + movs r0, 0\n\ + mov r1, r9\n\ + strb r0, [r1]\n\ + bl CountBattleTowerBanlistCaught\n\ + adds r6, r0, 0\n\ + ldr r2, _081353D4 @ =gBattleTowerBanlist\n\ + ldrh r0, [r2]\n\ + ldr r1, _081353D8 @ =0x0000ffff\n\ + cmp r0, r1\n\ + beq _081353A8\n\ + mov r5, r9\n\ + adds r7, r1, 0\n\ + adds r4, r2, 0\n\ +_08135394:\n\ + ldrh r0, [r4]\n\ + ldrb r1, [r5]\n\ + adds r2, r6, 0\n\ + bl AppendBattleTowerBannedSpeciesName\n\ + strb r0, [r5]\n\ + adds r4, 0x2\n\ + ldrh r0, [r4]\n\ + cmp r0, r7\n\ + bne _08135394\n\ +_081353A8:\n\ + mov r0, r9\n\ + ldrb r1, [r0]\n\ + cmp r1, 0\n\ + bne _081353E4\n\ + ldr r4, _081353CC @ =gStringVar1\n\ + ldr r1, _081353DC @ =gUnknown_08400E2C\n\ + adds r0, r4, 0\n\ + bl StringAppend\n\ + ldr r1, _081353E0 @ =gUnknown_08400E32\n\ + adds r0, r4, 0\n\ + bl StringAppend\n\ + b _0813543E\n\ + .align 2, 0\n\ +_081353C4: .4byte gPlayerParty\n\ +_081353C8: .4byte gScriptResult\n\ +_081353CC: .4byte gStringVar1\n\ +_081353D0: .4byte gSpecialVar_0x8004\n\ +_081353D4: .4byte gBattleTowerBanlist\n\ +_081353D8: .4byte 0x0000ffff\n\ +_081353DC: .4byte gUnknown_08400E2C\n\ +_081353E0: .4byte gUnknown_08400E32\n\ +_081353E4:\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08135400\n\ + ldr r0, _081353F8 @ =gStringVar1\n\ + ldr r1, _081353FC @ =gUnknown_08400E2E\n\ + bl StringAppend\n\ + b _08135408\n\ + .align 2, 0\n\ +_081353F8: .4byte gStringVar1\n\ +_081353FC: .4byte gUnknown_08400E2E\n\ +_08135400:\n\ + ldr r0, _08135414 @ =gStringVar1\n\ + ldr r1, _08135418 @ =gUnknown_08400E2C\n\ + bl StringAppend\n\ +_08135408:\n\ + ldr r0, _08135414 @ =gStringVar1\n\ + ldr r1, _0813541C @ =gUnknown_08400E36\n\ + bl StringAppend\n\ + b _0813543E\n\ + .align 2, 0\n\ +_08135414: .4byte gStringVar1\n\ +_08135418: .4byte gUnknown_08400E2C\n\ +_0813541C: .4byte gUnknown_08400E36\n\ +_08135420:\n\ + ldr r1, _08135450 @ =gSpecialVar_0x8004\n\ + movs r0, 0\n\ + strh r0, [r1]\n\ + ldr r2, _08135454 @ =gSaveBlock2\n\ + ldrb r0, [r5]\n\ + ldr r1, _08135458 @ =0x00000554\n\ + adds r2, r1\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + ldrb r3, [r2]\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ +_0813543E:\n\ + add sp, 0x2C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135450: .4byte gSpecialVar_0x8004\n\ +_08135454: .4byte gSaveBlock2\n\ +_08135458: .4byte 0x00000554\n\ +.syntax divided\n"); +} + +void sub_813545C(u16 *easyChat) +{ + sub_80EB544(gStringVar4, easyChat, 2, 3); +} + +void sub_8135474(void) +{ + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat); + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + { + sub_813545C((u16 *)gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].greeting.easyChat); + } + else + { + sub_813545C(gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].greeting.easyChat); + } +} + +void sub_81354CC(void) +{ + s32 i; + u16 heldItem; + + switch (gSpecialVar_0x8004) + { + case 0: + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + break; + case 2: + sub_81360D0(); + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void sub_8135534(u8 taskId) +{ + if (IsBattleTransitionDone() == TRUE) + { + gMain.savedCallback = sub_81354CC; + SetMainCallback2(sub_800E7C4); + DestroyTask(taskId); + } +} + +void sub_813556C(void) +{ + s32 i; + u16 heldItem; + u8 transition; + + switch (gSpecialVar_0x8004) + { + case 0: + gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + sub_8134DD4(); + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 2: + ZeroEnemyPartyMons(); + + for (i = 0; i < 3; i++) + { + sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.filler_A8.ereaderTrainer.party[i]); + } + + gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + } +} + +void sub_8135668(void) +{ + s32 i; + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + ewram160FB = gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType]; + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 1: + gSaveBlock2.filler_A8.battleTowerLevelType = gSpecialVar_0x8005; + break; + case 2: + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 3: + gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 4: + gSaveBlock2.filler_A8.battleTowerTrainerId = gSpecialVar_0x8005; + break; + case 5: + for (i = 0; i < 3; i++) + { + gSaveBlock2.filler_A8.var_4BD[i] = gSelectedOrderFromParty[i]; + } + break; + case 6: + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + sub_81360AC(&gSaveBlock2.filler_A8.ereaderTrainer); + } + + if (gSaveBlock2.filler_A8.totalBattleTowerWins < 9999) + { + gSaveBlock2.filler_A8.totalBattleTowerWins++; + } + + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]++; + sub_8135A3C(); + gScriptResult = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + + gStringVar1[0] = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] + 0xA1; + gStringVar1[1] = 0xFF; + break; + case 7: + if (gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] < 1430) + { + gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]++; + } + + sub_8135A3C(); + gScriptResult = gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]; + break; + case 8: + gSaveBlock2.filler_A8.unk_554 = gSpecialVar_0x8005; + break; + case 9: + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.bestBattleTowerWinStreak); + break; + case 11: + if (gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] != 3) + { + sub_813461C(battleTowerLevelType); + } + break; + case 12: + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.filler_A8.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + break; + case 14: + gSaveBlock2.filler_A8.lastStreakLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + break; + } +} |