diff options
author | yenatch <yenatch@gmail.com> | 2017-07-20 22:40:04 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-20 22:40:04 -0400 |
commit | c9e64b65ac89951583429563b83db40b712f484d (patch) | |
tree | 5bb3263a3911bddcb64ce840c6fa08f74d1e3eaa | |
parent | 3606fccc83333c9f96428f738287f0f84500dd27 (diff) | |
parent | e4c1e80941c62b9d1dfe6312173e800de7439175 (diff) |
Merge pull request #368 from drifloony/battle_records
decompile battle_records
-rw-r--r-- | asm/battle_records.s | 868 | ||||
-rw-r--r-- | asm/cable_club.s | 2 | ||||
-rw-r--r-- | include/battle_records.h | 5 | ||||
-rw-r--r-- | include/global.h | 19 | ||||
-rw-r--r-- | include/menu.h | 2 | ||||
-rw-r--r-- | include/trainer_card.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle_records.c | 316 | ||||
-rw-r--r-- | src/menu.c | 2 | ||||
-rw-r--r-- | src/unknown_debug_menu.c | 4 |
10 files changed, 338 insertions, 884 deletions
diff --git a/asm/battle_records.s b/asm/battle_records.s deleted file mode 100644 index cfe822acc..000000000 --- a/asm/battle_records.s +++ /dev/null @@ -1,868 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_810FF78 -sub_810FF78: @ 810FF78 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r2, _0810FFA4 @ =0x01000008 - mov r0, sp - adds r1, r4, 0 - bl CpuSet - movs r0, 0xFF - strb r0, [r4] - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0xA] - strh r0, [r4, 0xC] - strh r0, [r4, 0xE] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810FFA4: .4byte 0x01000008 - thumb_func_end sub_810FF78 - - thumb_func_start InitLinkBattleRecords_ -InitLinkBattleRecords_: @ 810FFA8 - push {r4,r5,lr} - adds r4, r0, 0 - movs r5, 0x4 -_0810FFAE: - adds r0, r4, 0 - bl sub_810FF78 - adds r4, 0x10 - subs r5, 0x1 - cmp r5, 0 - bge _0810FFAE - movs r0, 0x17 - movs r1, 0 - bl SetGameStat - movs r0, 0x18 - movs r1, 0 - bl SetGameStat - movs r0, 0x19 - movs r1, 0 - bl SetGameStat - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end InitLinkBattleRecords_ - - thumb_func_start sub_810FFDC -sub_810FFDC: @ 810FFDC - adds r1, r0, 0 - ldrh r0, [r1, 0xA] - ldrh r2, [r1, 0xC] - adds r0, r2 - ldrh r1, [r1, 0xE] - adds r0, r1 - bx lr - thumb_func_end sub_810FFDC - - thumb_func_start sub_810FFEC -sub_810FFEC: @ 810FFEC - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r1 - lsls r2, 16 - lsrs r7, r2, 16 - movs r5, 0 - ldr r6, _08110024 @ =gStringVar1 - adds r4, r0, 0 -_0810FFFE: - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0x7 - bl memcpy - movs r0, 0xFF - strb r0, [r6, 0x7] - adds r0, r6, 0 - mov r1, r8 - bl StringCompareWithoutExtCtrlCodes - cmp r0, 0 - bne _08110028 - ldrh r0, [r4, 0x8] - cmp r0, r7 - bne _08110028 - adds r0, r5, 0 - b _08110032 - .align 2, 0 -_08110024: .4byte gStringVar1 -_08110028: - adds r4, 0x10 - adds r5, 0x1 - cmp r5, 0x4 - ble _0810FFFE - movs r0, 0x5 -_08110032: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_810FFEC - - thumb_func_start sub_811003C -sub_811003C: @ 811003C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - mov r8, r0 - movs r0, 0x4 -_0811004A: - subs r2, r0, 0x1 - mov r9, r2 - cmp r2, 0 - blt _081100A4 - lsls r0, 4 - mov r1, r8 - adds r6, r1, r0 - lsls r0, r2, 4 - adds r5, r0, r1 -_0811005C: - adds r0, r6, 0 - str r2, [sp, 0x10] - bl sub_810FFDC - adds r4, r0, 0 - adds r0, r5, 0 - bl sub_810FFDC - ldr r2, [sp, 0x10] - cmp r4, r0 - ble _08110096 - mov r1, sp - adds r0, r6, 0 - ldm r0!, {r3,r4,r7} - stm r1!, {r3,r4,r7} - ldr r0, [r0] - str r0, [r1] - adds r1, r6, 0 - adds r0, r5, 0 - ldm r0!, {r3,r4,r7} - stm r1!, {r3,r4,r7} - ldr r0, [r0] - str r0, [r1] - adds r1, r5, 0 - mov r0, sp - ldm r0!, {r3,r4,r7} - stm r1!, {r3,r4,r7} - ldr r0, [r0] - str r0, [r1] -_08110096: - subs r5, 0x10 - movs r0, 0x1 - negs r0, r0 - add r9, r0 - mov r1, r9 - cmp r1, 0 - bge _0811005C -_081100A4: - adds r0, r2, 0 - cmp r0, 0 - bgt _0811004A - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_811003C - - thumb_func_start sub_81100B8 -sub_81100B8: @ 81100B8 - push {lr} - adds r2, r0, 0 - cmp r1, 0x2 - beq _081100E8 - cmp r1, 0x2 - bgt _081100CA - cmp r1, 0x1 - beq _081100D0 - b _08110112 -_081100CA: - cmp r1, 0x3 - beq _08110100 - b _08110112 -_081100D0: - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - lsrs r0, 16 - ldr r1, _081100E4 @ =0x0000270f - cmp r0, r1 - bls _08110112 - strh r1, [r2, 0xA] - b _08110112 - .align 2, 0 -_081100E4: .4byte 0x0000270f -_081100E8: - ldrh r0, [r2, 0xC] - adds r0, 0x1 - strh r0, [r2, 0xC] - lsls r0, 16 - lsrs r0, 16 - ldr r1, _081100FC @ =0x0000270f - cmp r0, r1 - bls _08110112 - strh r1, [r2, 0xC] - b _08110112 - .align 2, 0 -_081100FC: .4byte 0x0000270f -_08110100: - ldrh r0, [r2, 0xE] - adds r0, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08110118 @ =0x0000270f - cmp r0, r1 - bls _08110112 - strh r1, [r2, 0xE] -_08110112: - pop {r0} - bx r0 - .align 2, 0 -_08110118: .4byte 0x0000270f - thumb_func_end sub_81100B8 - - thumb_func_start sub_811011C -sub_811011C: @ 811011C - push {r4,lr} - cmp r0, 0x2 - beq _08110136 - cmp r0, 0x2 - bgt _0811012C - cmp r0, 0x1 - beq _08110132 - b _0811014E -_0811012C: - cmp r0, 0x3 - beq _0811013A - b _0811014E -_08110132: - movs r4, 0x17 - b _0811013C -_08110136: - movs r4, 0x18 - b _0811013C -_0811013A: - movs r4, 0x19 -_0811013C: - adds r0, r4, 0 - bl GetGameStat - ldr r1, _08110154 @ =0x0000270e - cmp r0, r1 - bhi _0811014E - adds r0, r4, 0 - bl IncrementGameStat -_0811014E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08110154: .4byte 0x0000270e - thumb_func_end sub_811011C - - thumb_func_start sub_8110158 -sub_8110158: @ 8110158 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r0, 0 - adds r7, r1, 0 - mov r10, r3 - ldr r0, [sp, 0x20] - lsls r2, 16 - lsrs r2, 16 - mov r9, r2 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r0, r10 - bl sub_811011C - adds r0, r5, 0 - bl sub_811003C - adds r0, r5, 0 - adds r1, r7, 0 - mov r2, r9 - bl sub_810FFEC - adds r6, r0, 0 - cmp r6, 0x5 - bne _081101CC - movs r6, 0x4 - adds r4, r5, 0 - adds r4, 0x40 - adds r0, r4, 0 - bl sub_810FF78 - mov r0, r8 - cmp r0, 0x1 - bne _081101BA - movs r0, 0xFC - strb r0, [r4] - movs r0, 0x15 - strb r0, [r4, 0x1] - adds r0, r5, 0 - adds r0, 0x42 - adds r1, r7, 0 - movs r2, 0x5 - bl StringCopyN - b _081101C4 -_081101BA: - adds r0, r4, 0 - adds r1, r7, 0 - movs r2, 0x7 - bl StringCopyN -_081101C4: - lsls r0, r6, 4 - adds r0, r5, r0 - mov r1, r9 - strh r1, [r0, 0x8] -_081101CC: - lsls r0, r6, 4 - adds r0, r5, r0 - mov r1, r10 - bl sub_81100B8 - adds r0, r5, 0 - bl sub_811003C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8110158 - - thumb_func_start InitLinkBattleRecords -InitLinkBattleRecords: @ 81101EC - push {lr} - ldr r0, _081101F8 @ =gSaveBlock1 + 0x30B8 - bl InitLinkBattleRecords_ - pop {r0} - bx r0 - .align 2, 0 -_081101F8: .4byte gSaveBlock1 + 0x30B8 - thumb_func_end InitLinkBattleRecords - - thumb_func_start sub_81101FC -sub_81101FC: @ 81101FC - push {lr} - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 3 - ldr r0, _08110220 @ =gTrainerCards + 0x14 - adds r1, r0 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08110224 @ =0x0000270f - cmp r0, r2 - bls _0811021A - strh r2, [r1] -_0811021A: - pop {r0} - bx r0 - .align 2, 0 -_08110220: .4byte gTrainerCards + 0x14 -_08110224: .4byte 0x0000270f - thumb_func_end sub_81101FC - - thumb_func_start sub_8110228 -sub_8110228: @ 8110228 - push {lr} - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 3 - ldr r0, _0811024C @ =gTrainerCards + 0x16 - adds r1, r0 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08110250 @ =0x0000270f - cmp r0, r2 - bls _08110246 - strh r2, [r1] -_08110246: - pop {r0} - bx r0 - .align 2, 0 -_0811024C: .4byte gTrainerCards + 0x16 -_08110250: .4byte 0x0000270f - thumb_func_end sub_8110228 - - thumb_func_start sub_8110254 -sub_8110254: @ 8110254 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08110268 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0x1 - beq _0811026C - cmp r0, 0x2 - beq _0811027A - b _08110288 - .align 2, 0 -_08110268: .4byte gBattleOutcome -_0811026C: - eors r0, r4 - bl sub_81101FC - adds r0, r4, 0 - bl sub_8110228 - b _08110288 -_0811027A: - movs r0, 0x1 - eors r0, r4 - bl sub_8110228 - adds r0, r4, 0 - bl sub_81101FC -_08110288: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8110254 - - thumb_func_start sub_8110290 -sub_8110290: @ 8110290 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - bl sub_8110254 - ldr r0, _081102D4 @ =gSaveBlock1 + 0x30B8 - lsls r2, r4, 3 - subs r2, r4 - lsls r2, 3 - ldr r3, _081102D8 @ =gTrainerCards + 0x30 - adds r1, r2, r3 - subs r3, 0x30 - adds r2, r3 - ldrh r2, [r2, 0xE] - ldr r3, _081102DC @ =gBattleOutcome - ldrb r3, [r3] - ldr r6, _081102E0 @ =gLinkPlayers - ldr r5, _081102E4 @ =gLinkPlayerMapObjects - lsls r4, 2 - adds r4, r5 - ldrb r5, [r4, 0x1] - lsls r4, r5, 3 - subs r4, r5 - lsls r4, 2 - adds r4, r6 - ldrb r4, [r4, 0x1A] - str r4, [sp] - bl sub_8110158 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081102D4: .4byte gSaveBlock1 + 0x30B8 -_081102D8: .4byte gTrainerCards + 0x30 -_081102DC: .4byte gBattleOutcome -_081102E0: .4byte gLinkPlayers -_081102E4: .4byte gLinkPlayerMapObjects - thumb_func_end sub_8110290 - - thumb_func_start PrintLinkBattleWinsLossesDraws -PrintLinkBattleWinsLossesDraws: @ 81102E8 - push {r4,lr} - ldr r4, _08110338 @ =gStringVar1 - movs r0, 0x17 - bl GetGameStat - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN_DigitWidth6 - ldr r4, _0811033C @ =gStringVar2 - movs r0, 0x18 - bl GetGameStat - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN_DigitWidth6 - ldr r4, _08110340 @ =gStringVar3 - movs r0, 0x19 - bl GetGameStat - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN_DigitWidth6 - ldr r0, _08110344 @ =gOtherText_WinRecord - movs r1, 0x3 - movs r2, 0x3 - bl MenuPrint - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08110338: .4byte gStringVar1 -_0811033C: .4byte gStringVar2 -_08110340: .4byte gStringVar3 -_08110344: .4byte gOtherText_WinRecord - thumb_func_end PrintLinkBattleWinsLossesDraws - - thumb_func_start PrintLinkBattleRecord -PrintLinkBattleRecord: @ 8110348 - push {r4-r7,lr} - sub sp, 0x10 - adds r7, r0, 0 - lsls r1, 24 - lsrs r6, r1, 24 - ldrh r0, [r7, 0xA] - cmp r0, 0 - bne _081103C0 - ldr r0, [r7, 0xC] - cmp r0, 0 - bne _081103C0 - mov r0, sp - movs r2, 0xFC - strb r2, [r0] - mov r1, sp - movs r0, 0x14 - strb r0, [r1, 0x1] - movs r0, 0x6 - strb r0, [r1, 0x2] - mov r0, sp - strb r2, [r0, 0x3] - movs r0, 0x11 - strb r0, [r1, 0x4] - movs r0, 0x1 - strb r0, [r1, 0x5] - mov r4, sp - adds r4, 0x6 - ldr r1, _081103B8 @ =gOtherText_SevenDashes - adds r0, r4, 0 - bl StringCopy - mov r0, sp - movs r1, 0x3 - adds r2, r6, 0 - bl MenuPrint - ldr r1, _081103BC @ =gOtherText_FourDashes - adds r0, r4, 0 - bl StringCopy - mov r0, sp - movs r1, 0xB - adds r2, r6, 0 - bl MenuPrint - mov r0, sp - movs r1, 0x11 - adds r2, r6, 0 - bl MenuPrint - mov r0, sp - movs r1, 0x17 - adds r2, r6, 0 - bl MenuPrint - b _0811042E - .align 2, 0 -_081103B8: .4byte gOtherText_SevenDashes -_081103BC: .4byte gOtherText_FourDashes -_081103C0: - ldr r4, _08110438 @ =gStringVar1 - adds r0, r4, 0 - movs r1, 0x8 - bl StringFillWithTerminator - adds r0, r4, 0 - adds r1, r7, 0 - movs r2, 0x7 - bl StringCopyN - adds r0, r4, 0 - movs r1, 0x3 - adds r2, r6, 0 - bl MenuPrint - movs r0, 0xFC - strb r0, [r4] - movs r0, 0x14 - strb r0, [r4, 0x1] - movs r0, 0x6 - strb r0, [r4, 0x2] - adds r5, r4, 0x3 - ldrh r1, [r7, 0xA] - adds r0, r5, 0 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - adds r0, r4, 0 - movs r1, 0xB - adds r2, r6, 0 - bl MenuPrint - ldrh r1, [r7, 0xC] - adds r0, r5, 0 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - adds r0, r4, 0 - movs r1, 0x11 - adds r2, r6, 0 - bl MenuPrint - ldrh r1, [r7, 0xE] - adds r0, r5, 0 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - adds r0, r4, 0 - movs r1, 0x17 - adds r2, r6, 0 - bl MenuPrint -_0811042E: - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08110438: .4byte gStringVar1 - thumb_func_end PrintLinkBattleRecord - -.section .text_8110494 - - thumb_func_start sub_8110494 -sub_8110494: @ 8110494 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _081104B4 @ =gSaveBlock2 + 0xA8 - ldr r2, _081104B8 @ =0x000004ae - adds r1, r2 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x6 - bhi _081104E0 - lsls r0, 2 - ldr r1, _081104BC @ =_081104C0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081104B4: .4byte gSaveBlock2 + 0xA8 -_081104B8: .4byte 0x000004ae -_081104BC: .4byte _081104C0 - .align 2, 0 -_081104C0: - .4byte _081104E0 - .4byte _081104E0 - .4byte _081104DC - .4byte _081104DC - .4byte _081104E0 - .4byte _081104E0 - .4byte _081104DC -_081104DC: - movs r0, 0x1 - b _081104E2 -_081104E0: - movs r0, 0 -_081104E2: - pop {r1} - bx r1 - thumb_func_end sub_8110494 - - thumb_func_start sub_81104E8 -sub_81104E8: @ 81104E8 - push {r4-r6,lr} - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r2, 24 - adds r5, r2, 0 - lsls r3, 24 - lsrs r3, 24 - adds r6, r3, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl MenuPrint - ldr r0, _0811052C @ =0x0000270f - cmp r4, r0 - bls _0811050A - adds r4, r0, 0 -_0811050A: - ldr r0, _08110530 @ =gStringVar1 - adds r1, r4, 0 - movs r2, 0x18 - movs r3, 0x1 - bl sub_8072C14 - ldr r0, _08110534 @ =gOtherText_WinStreak - adds r1, r5, 0x7 - lsls r1, 24 - lsrs r1, 24 - adds r2, r6, 0 - bl MenuPrint - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811052C: .4byte 0x0000270f -_08110530: .4byte gStringVar1 -_08110534: .4byte gOtherText_WinStreak - thumb_func_end sub_81104E8 - - thumb_func_start sub_8110538 -sub_8110538: @ 8110538 - push {r4,lr} - adds r4, r1, 0 - adds r3, r2, 0 - lsls r0, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r3, 24 - lsrs r3, 24 - ldr r1, _08110564 @ =gSaveBlock2 + 0xA8 - lsrs r0, 23 - movs r2, 0x97 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _08110568 @ =gOtherText_Record - adds r2, r4, 0 - bl sub_81104E8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08110564: .4byte gSaveBlock2 + 0xA8 -_08110568: .4byte gOtherText_Record - thumb_func_end sub_8110538 - - thumb_func_start sub_811056C -sub_811056C: @ 811056C - push {lr} - lsls r0, 24 - ldr r1, _08110588 @ =gSaveBlock2 - lsrs r0, 23 - ldr r2, _0811058C @ =0x00000574 - adds r1, r2 - adds r0, r1 - ldrh r0, [r0] - ldr r1, _08110590 @ =0x0000270f - cmp r0, r1 - bls _08110584 - adds r0, r1, 0 -_08110584: - pop {r1} - bx r1 - .align 2, 0 -_08110588: .4byte gSaveBlock2 -_0811058C: .4byte 0x00000574 -_08110590: .4byte 0x0000270f - thumb_func_end sub_811056C - - thumb_func_start sub_8110594 -sub_8110594: @ 8110594 - push {r4-r7,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r1, 24 - lsrs r6, r1, 24 - lsls r2, 24 - lsrs r7, r2, 24 - adds r0, r4, 0 - bl sub_811056C - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - bl sub_8110494 - cmp r0, 0x1 - bne _081105CC - ldr r0, _081105C8 @ =gOtherText_Current - adds r1, r5, 0 - adds r2, r6, 0 - adds r3, r7, 0 - bl sub_81104E8 - b _081105D8 - .align 2, 0 -_081105C8: .4byte gOtherText_Current -_081105CC: - ldr r0, _081105E0 @ =gOtherText_Prev - adds r1, r5, 0 - adds r2, r6, 0 - adds r3, r7, 0 - bl sub_81104E8 -_081105D8: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081105E0: .4byte gOtherText_Prev - thumb_func_end sub_8110594 - - thumb_func_start ShowBattleTowerRecords -ShowBattleTowerRecords: @ 81105E4 - push {r4,lr} - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0x1B - movs r3, 0x11 - bl MenuDrawTextWindow - ldr r0, _08110658 @ =gOtherText_BattleTowerResults - movs r1, 0x3 - movs r2, 0x2 - movs r3, 0xC8 - bl sub_8072BD8 - ldr r0, _0811065C @ =gOtherText_Lv50 - movs r1, 0x5 - movs r2, 0x6 - bl MenuPrint - ldr r0, _08110660 @ =gOtherText_Lv100 - movs r1, 0x5 - movs r2, 0xC - bl MenuPrint - movs r4, 0x5 -_08110614: - lsls r1, r4, 24 - lsrs r1, 24 - movs r0, 0xAE - movs r2, 0xA - bl sub_8071F60 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x19 - bls _08110614 - movs r0, 0 - movs r1, 0xA - movs r2, 0x6 - bl sub_8110594 - movs r0, 0 - movs r1, 0xA - movs r2, 0x8 - bl sub_8110538 - movs r0, 0x1 - movs r1, 0xA - movs r2, 0xC - bl sub_8110594 - movs r0, 0x1 - movs r1, 0xA - movs r2, 0xE - bl sub_8110538 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08110658: .4byte gOtherText_BattleTowerResults -_0811065C: .4byte gOtherText_Lv50 -_08110660: .4byte gOtherText_Lv100 - thumb_func_end ShowBattleTowerRecords - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/cable_club.s b/asm/cable_club.s index 7e5d19c24..68804ca21 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -1215,7 +1215,7 @@ sub_8083958: @ 8083958 ldrb r1, [r0] movs r0, 0x1 eors r0, r1 - bl sub_8110290 + bl UpdateLinkBattleRecords _0808397E: ldr r0, _08083998 @ =gMain ldr r1, _0808399C @ =sub_805465C diff --git a/include/battle_records.h b/include/battle_records.h index f0c1a101b..ac6c3cbdb 100644 --- a/include/battle_records.h +++ b/include/battle_records.h @@ -2,7 +2,8 @@ #define GUARD_BATTLE_RECORDS_H void InitLinkBattleRecords(void); -void PrintLinkBattleWinsLossesDraws(void *); -void PrintLinkBattleRecord(void *, u8); +void UpdateLinkBattleRecords(int id); +void ShowLinkBattleRecords(void); +void ShowBattleTowerRecords(void); #endif // GUARD_BATTLE_RECORDS_H diff --git a/include/global.h b/include/global.h index c9a092f05..73f73093d 100644 --- a/include/global.h +++ b/include/global.h @@ -548,6 +548,15 @@ struct RecordMixing_UnknownStruct u16 unk74[0x2]; }; +struct LinkBattleRecord +{ + u8 name[8]; + u16 trainerId; + u16 wins; + u16 losses; + u16 draws; +}; + struct SaveBlock1 /* 0x02025734 */ { /*0x00*/ struct Coords16 pos; @@ -626,7 +635,7 @@ struct SaveBlock1 /* 0x02025734 */ /*0x30AC*/ u8 filler_30B4[0x2]; /*0x30B6*/ u8 filler_30B6; /*0x30B7*/ u8 filler_30B7[1]; - /*0x30B8*/ u8 linkBattleRecords[5][16]; + /*0x30B8*/ struct LinkBattleRecord linkBattleRecords[5]; /*0x3108*/ u8 filler_3108[8]; /*0x3110*/ u8 giftRibbons[7]; /*0x3117*/ u8 filler_311B[0x2D]; @@ -668,16 +677,16 @@ struct SaveBlock2_Sub /*0x03DC, 0x0484*/ u8 filler_3DC[0xD0]; /*0x04AC, 0x0554*/ u8 var_4AC; /*0x04AD, 0x0555*/ u8 var_4AD; - /*0x04AE, 0x0556*/ u8 var_4AE; - /*0x04AF, 0x0557*/ u8 var_4AF; + /*0x04AE, 0x0556*/ u8 var_4AE[2]; /*0x04B0, 0x0558*/ u16 var_4B0; /*0x04B2, 0x055A*/ u16 var_4B2; /*0x04B4, 0x055C*/ u16 var_4B4; /*0x04B6, 0x055E*/ u16 var_4B6; - /*0x04B8, 0x0560*/ u8 filler_4B8[0x10]; + /*0x04B8, 0x0560*/ u16 recordWinStreak[2]; + /*0x04BC, 0x0564*/ u8 filler_4BC[0xC]; /*0x04C8, 0x0570*/ u16 var_4C8; /*0x04CA, 0x0572*/ u16 var_4CA; - /*0x04CC, 0x0574*/ u8 filler_4CC[4]; + /*0x04CC, 0x0574*/ u16 winStreak[2]; /*0x04D0, 0x0578*/ u8 var_4D0; /*0x04D1, 0x0579*/ u8 filler_4D1[0x317]; }; diff --git a/include/menu.h b/include/menu.h index 25b1487d7..e1bb4f1e4 100644 --- a/include/menu.h +++ b/include/menu.h @@ -38,7 +38,7 @@ void MenuFillWindowRectWithBlankTile(u8, u8, u8, u8); void MenuZeroFillScreen(void); void MenuDrawTextWindow(u8, u8, u8, u8); void sub_8071F40(const u8 *); -void sub_8071F60(u8, u8, u8, u8); +void sub_8071F60(u8, u8, u8); u16 unref_sub_8071F98(u8, u8); void unref_sub_8071FBC(u16, u8, u8, u8, u8); void MenuDisplayMessageBox(void); diff --git a/include/trainer_card.h b/include/trainer_card.h index 98b5934f7..b9d3ca081 100644 --- a/include/trainer_card.h +++ b/include/trainer_card.h @@ -33,4 +33,6 @@ void sub_8093130(u8, void (*)(void)); void sub_8093390(struct TrainerCard *); u8 sub_80934C4(u8 id); +extern struct TrainerCard gTrainerCards[4]; + #endif // GUARD_TRAINER_CARD_H diff --git a/ld_script.txt b/ld_script.txt index fca1b712b..03181e65a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -218,9 +218,7 @@ SECTIONS { src/birch_pc.o(.text); src/hof_pc.o(.text); src/field_specials.o(.text); - asm/battle_records.o(.text); src/battle_records.o(.text); - asm/battle_records.o(.text_8110494); asm/pokedex_area_screen.o(.text); asm/evolution_scene.o(.text); asm/roulette.o(.text); diff --git a/src/battle_records.c b/src/battle_records.c index cf86787f0..61dc09792 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -1,7 +1,244 @@ #include "global.h" #include "battle_records.h" +#include "game_stat.h" +#include "link.h" #include "menu.h" +#include "rom4.h" +#include "string_util.h" #include "strings2.h" +#include "trainer_card.h" + +extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4]; +extern u8 gBattleOutcome; + +static void InitLinkBattleRecord(struct LinkBattleRecord *record) +{ + CpuFill16(0, record, sizeof(struct LinkBattleRecord)); + record->name[0] = 0xFF; + record->trainerId = 0; + record->wins = 0; + record->losses = 0; + record->draws = 0; +} + +static void InitLinkBattleRecords_(struct LinkBattleRecord *records) +{ + int i; + for (i = 0; i < 5; i++) + { + InitLinkBattleRecord(records + i); + } + SetGameStat(GAME_STAT_LINK_BATTLE_WINS, 0); + SetGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 0); + SetGameStat(GAME_STAT_LINK_BATTLE_DRAWS, 0); +} + +static int GetLinkBattleRecordTotalBattles(struct LinkBattleRecord *record) +{ + return record->wins + record->losses + record->draws; +} + +static int FindLinkBattleRecord(struct LinkBattleRecord *records, u8 *name, u16 trainerId) +{ + int i; + + for (i = 0; i < 5; i++) + { + memcpy(gStringVar1, records[i].name, 7); + gStringVar1[7] = EOS; + if (!StringCompareWithoutExtCtrlCodes(gStringVar1, name) && records[i].trainerId == trainerId) + return i; + } + + return 5; +} + +static void SortLinkBattleRecords(struct LinkBattleRecord *records) +{ + int i, j; + + for (i = 4; i > 0; i--) + { + for (j = i - 1; j >= 0; j--) + { + int totalBattlesI = GetLinkBattleRecordTotalBattles(records + i); + int totalBattlesJ = GetLinkBattleRecordTotalBattles(records + j); + + if (totalBattlesI > totalBattlesJ) + { + struct LinkBattleRecord temp = *(records + i); + *(records + i) = *(records + j); + *(records + j) = temp; + } + } + } +} + +static void UpdateLinkBattleRecord(struct LinkBattleRecord *record, int battleOutcome) +{ + switch (battleOutcome) + { + case 1: + record->wins++; + if (record->wins > 9999) + record->wins = 9999; + break; + case 2: + record->losses++; + if (record->losses > 9999) + record->losses = 9999; + break; + case 3: + record->draws++; + if (record->draws > 9999) + record->draws = 9999; + break; + } +} + +static void UpdateLinkBattleGameStats(int battleOutcome) +{ + u8 stat; + + switch (battleOutcome) + { + case 1: + stat = GAME_STAT_LINK_BATTLE_WINS; + break; + case 2: + stat = GAME_STAT_LINK_BATTLE_LOSSES; + break; + case 3: + stat = GAME_STAT_LINK_BATTLE_DRAWS; + break; + default: + return; + } + + if (GetGameStat(stat) < 9999) + IncrementGameStat(stat); +} + +static void UpdateLinkBattleRecords_(struct LinkBattleRecord *records, u8 *name, u16 trainerId, int battleOutcome, u8 language) +{ + int index; + UpdateLinkBattleGameStats(battleOutcome); + SortLinkBattleRecords(records); + index = FindLinkBattleRecord(records, name, trainerId); + if (index == 5) + { + index = 4; + InitLinkBattleRecord(records + index); + if (language == LANGUAGE_JAPANESE) + { + records[index].name[0] = EXT_CTRL_CODE_BEGIN; + records[index].name[1] = 0x15; + StringCopyN(records[index].name + 2, name, 5); + } + else + { + StringCopyN(records[index].name, name, 7); + } + + // needed block to match + { + struct LinkBattleRecord *record = records + index; + record->trainerId = trainerId; + } + } + UpdateLinkBattleRecord(records + index, battleOutcome); + SortLinkBattleRecords(records); +} + +void InitLinkBattleRecords(void) +{ + InitLinkBattleRecords_(gSaveBlock1.linkBattleRecords); +} + +static void IncTrainerCardWins(int id) +{ + u16 *wins = &gTrainerCards[id].linkBattleWins; + (*wins)++; + if (*wins > 9999) + *wins = 9999; +} + +static void IncTrainerCardLosses(int id) +{ + u16 *losses = &gTrainerCards[id].linkBattleLosses; + (*losses)++; + if (*losses > 9999) + *losses = 9999; +} + +static void UpdateTrainerCardWinsLosses(int id) +{ + switch (gBattleOutcome) + { + case 1: + IncTrainerCardWins(id ^ 1); + IncTrainerCardLosses(id); + break; + case 2: + IncTrainerCardLosses(id ^ 1); + IncTrainerCardWins(id); + break; + } +} + +void UpdateLinkBattleRecords(int id) +{ + UpdateTrainerCardWinsLosses(id); + UpdateLinkBattleRecords_( + gSaveBlock1.linkBattleRecords, + gTrainerCards[id].playerName, + gTrainerCards[id].trainerId, + gBattleOutcome, + gLinkPlayers[gLinkPlayerMapObjects[id].linkPlayerId].language); +} + +static void PrintLinkBattleWinsLossesDraws(struct LinkBattleRecord *records) +{ + ConvertIntToDecimalStringN_DigitWidth6(gStringVar1, GetGameStat(GAME_STAT_LINK_BATTLE_WINS), STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN_DigitWidth6(gStringVar2, GetGameStat(GAME_STAT_LINK_BATTLE_LOSSES), STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN_DigitWidth6(gStringVar3, GetGameStat(GAME_STAT_LINK_BATTLE_DRAWS), STR_CONV_MODE_RIGHT_ALIGN, 4); + MenuPrint(gOtherText_WinRecord, 3, 3); +} + +static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y) +{ + if (!record->wins && !record->losses && !record->draws) + { + u8 buffer[16]; + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x14; + buffer[2] = 6; + buffer[3] = EXT_CTRL_CODE_BEGIN; + buffer[4] = 0x11; + buffer[5] = 1; + StringCopy(buffer + 6, gOtherText_SevenDashes); + MenuPrint(buffer, 3, y); + StringCopy(buffer + 6, gOtherText_FourDashes); + MenuPrint(buffer, 11, y); + MenuPrint(buffer, 17, y); + MenuPrint(buffer, 23, y); + } + else + { + StringFillWithTerminator(gStringVar1, 8); + StringCopyN(gStringVar1, record->name, 7); + MenuPrint(gStringVar1, 3, y); + gStringVar1[0] = EXT_CTRL_CODE_BEGIN; + gStringVar1[1] = 0x14; + gStringVar1[2] = 6; + ConvertIntToDecimalStringN(gStringVar1 + 3, record->wins, STR_CONV_MODE_RIGHT_ALIGN, 4); + MenuPrint(gStringVar1, 11, y); + ConvertIntToDecimalStringN(gStringVar1 + 3, record->losses, STR_CONV_MODE_RIGHT_ALIGN, 4); + MenuPrint(gStringVar1, 17, y); + ConvertIntToDecimalStringN(gStringVar1 + 3, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4); + MenuPrint(gStringVar1, 23, y); + } +} void ShowLinkBattleRecords(void) { s32 i; @@ -12,11 +249,86 @@ void ShowLinkBattleRecords(void) { #if ENGLISH MenuPrint(gOtherText_WinLoseDraw, 12, 6); #elif GERMAN - MenuPrint_PixelCoords((u8 *) gOtherText_WinLoseDraw, 88, 48, 1); + MenuPrint_PixelCoords(gOtherText_WinLoseDraw, 88, 48, 1); #endif for (i = 0; i < 5; i++) { - PrintLinkBattleRecord(gSaveBlock1.linkBattleRecords[i], 6 + (i + 1) * 2); + PrintLinkBattleRecord(&gSaveBlock1.linkBattleRecords[i], 6 + (i + 1) * 2); + } +} + +static bool32 sub_8110494(u8 level) +{ + struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; + + switch (sb2sub->var_4AE[level]) + { + case 0: + return FALSE; + case 1: + return FALSE; + case 2: + return TRUE; + case 4: + return FALSE; + case 3: + return TRUE; + case 5: + return FALSE; + case 6: + return TRUE; + default: + return FALSE; + } +} + +static void PrintWinStreak(const u8 *str, u16 streak, u8 left, u8 top) +{ + MenuPrint(str, left, top); + if (streak > 9999) + streak = 9999; + sub_8072C14(gStringVar1, streak, 24, 1); + MenuPrint(gOtherText_WinStreak, left + 7, top); +} + +static void PrintRecordWinStreak(u8 level, u8 left, u8 top) +{ + struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; + u16 winStreak = sb2sub->recordWinStreak[level]; + PrintWinStreak(gOtherText_Record, winStreak, left, top); +} + +static u16 GetLastWinStreak(u8 level) +{ + u16 result = gSaveBlock2.filler_A8.winStreak[level]; + if (result > 9999) + result = 9999; + return result; +} + +static void PrintLastWinStreak(u8 level, u8 left, u8 top) +{ + u16 winStreak = GetLastWinStreak(level); + if (sub_8110494(level) == TRUE) + PrintWinStreak(gOtherText_Current, winStreak, left, top); + else + PrintWinStreak(gOtherText_Prev, winStreak, left, top); +} + +void ShowBattleTowerRecords(void) +{ + u16 i; + MenuDrawTextWindow(3, 1, 27, 17); + sub_8072BD8(gOtherText_BattleTowerResults, 3, 2, 0xC8); + MenuPrint(gOtherText_Lv50, 5, 6); + MenuPrint(gOtherText_Lv100, 5, 12); + for (i = 5; i < 26; i++) + { + sub_8071F60(CHAR_HYPHEN, i, 10); } + PrintLastWinStreak(0, 10, 6); + PrintRecordWinStreak(0, 10, 8); + PrintLastWinStreak(1, 10, 12); + PrintRecordWinStreak(1, 10, 14); } diff --git a/src/menu.c b/src/menu.c index 8d80c35aa..ef458124b 100644 --- a/src/menu.c +++ b/src/menu.c @@ -180,7 +180,7 @@ void sub_8071F40(const u8 *str) MenuPrint(str, 3, 15); } -void sub_8071F60(u8 a1, u8 a2, u8 a3, u8 a4) +void sub_8071F60(u8 a1, u8 a2, u8 a3) { sub_8003490(gMenuWindowPtr, a1, gMenuTextTileOffset, a2, a3); } diff --git a/src/unknown_debug_menu.c b/src/unknown_debug_menu.c index 6a8bad0d4..a81625f2a 100644 --- a/src/unknown_debug_menu.c +++ b/src/unknown_debug_menu.c @@ -41,8 +41,8 @@ static u8 sub_814A464(void) u8 sub_814A4B8(void) { - gSaveBlock2.filler_A8.var_4AE = 3; - gSaveBlock2.filler_A8.var_4AF = 3; + gSaveBlock2.filler_A8.var_4AE[0] = 3; + gSaveBlock2.filler_A8.var_4AE[1] = 3; gSaveBlock2.filler_A8.var_4B4 = gBattleCommunication[0] + 1; gSaveBlock2.filler_A8.var_4B6 = gBattleCommunication[0] + 1; gSaveBlock2.filler_A8.var_4B0 = 1; |