summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2019-07-16 08:47:35 -0400
committerGitHub <noreply@github.com>2019-07-16 08:47:35 -0400
commit96a39a14bd99d7100246bac68a9965e55ab1e34a (patch)
tree1b5493034d8be68a7b8315c0da312413af85be8c
parent53b950019aca8896d70c4d5e4f9e2a1d5143e489 (diff)
parent7e238443712a68188d0ca0fcee75dc273f8dcb70 (diff)
Merge pull request #81 from pret/battle_records
Battle records
-rwxr-xr-x[-rw-r--r--].travis/calcrom/webhook.sh0
-rw-r--r--asm/battle_records.s1398
-rw-r--r--asm/battle_tower.s8
-rw-r--r--asm/cable_club.s10
-rw-r--r--asm/link_rfu_3.s8
-rw-r--r--asm/overworld.s8
-rw-r--r--asm/post_battle_event_funcs.s2
-rw-r--r--asm/trainer_card.s16
-rw-r--r--baserom.ipsbin2327998 -> 2325687 bytes
-rw-r--r--data/data_83F5738.s23
-rw-r--r--data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc2
-rw-r--r--data/specials.inc2
-rw-r--r--data/strings.s92
-rw-r--r--graphics/battle_records/bg_tiles.pngbin0 -> 135 bytes
-rw-r--r--graphics/battle_records/palette.pal19
-rw-r--r--graphics/battle_records/tilemap.binbin0 -> 2048 bytes
-rw-r--r--include/overworld.h3
-rw-r--r--include/strings.h7
-rw-r--r--include/trainer_card.h43
-rw-r--r--include/trainer_tower.h6
-rw-r--r--ld_script.txt4
-rw-r--r--src/battle_records.c576
-rw-r--r--src/trainer_tower.c6
-rw-r--r--sym_ewram.txt16
24 files changed, 739 insertions, 1510 deletions
diff --git a/.travis/calcrom/webhook.sh b/.travis/calcrom/webhook.sh
index 86da74c87..86da74c87 100644..100755
--- a/.travis/calcrom/webhook.sh
+++ b/.travis/calcrom/webhook.sh
diff --git a/asm/battle_records.s b/asm/battle_records.s
deleted file mode 100644
index d0a99b4cf..000000000
--- a/asm/battle_records.s
+++ /dev/null
@@ -1,1398 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80CD228
-sub_80CD228: @ 80CD228
- push {lr}
- movs r0, 0
- bl SetVBlankCallback
- ldr r0, _080CD23C @ =sub_80CD240
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_080CD23C: .4byte sub_80CD240
- thumb_func_end sub_80CD228
-
- thumb_func_start sub_80CD240
-sub_80CD240: @ 80CD240
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _080CD260 @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _080CD254
- b _080CD376
-_080CD254:
- lsls r0, 2
- ldr r1, _080CD264 @ =_080CD268
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CD260: .4byte gMain
-_080CD264: .4byte _080CD268
- .align 2, 0
-_080CD268:
- .4byte _080CD288
- .4byte _080CD294
- .4byte _080CD29A
- .4byte _080CD2CC
- .4byte _080CD2E2
- .4byte _080CD302
- .4byte _080CD314
- .4byte _080CD338
-_080CD288:
- movs r0, 0
- bl SetVBlankCallback
- bl sub_80CD4D0
- b _080CD324
-_080CD294:
- bl sub_80CD608
- b _080CD324
-_080CD29A:
- ldr r4, _080CD2C4 @ =gUnknown_2039A1C
- movs r0, 0x80
- lsls r0, 4
- bl AllocZeroed
- str r0, [r4]
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _080CD2C8 @ =gUnknown_83F6C7C
- movs r0, 0
- movs r2, 0x2
- bl InitBgsFromTemplates
- ldr r1, [r4]
- movs r0, 0x3
- bl SetBgTilemapBuffer
- bl sub_80CD638
- b _080CD324
- .align 2, 0
-_080CD2C4: .4byte gUnknown_2039A1C
-_080CD2C8: .4byte gUnknown_83F6C7C
-_080CD2CC:
- movs r0, 0x3
- bl sub_80CDCD0
- movs r0, 0
- bl stdpal_get
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- b _080CD324
-_080CD2E2:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080CD376
- movs r0, 0
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- movs r0, 0x3
- bl CopyBgTilemapBufferToVram
- b _080CD324
-_080CD302:
- ldr r0, _080CD310 @ =gUnknown_83F6C68
- bl InitWindows
- bl DeactivateAllTextPrinters
- b _080CD324
- .align 2, 0
-_080CD310: .4byte gUnknown_83F6C68
-_080CD314:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_080CD324:
- ldr r1, _080CD334 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _080CD376
- .align 2, 0
-_080CD334: .4byte gMain
-_080CD338:
- bl sub_80CD628
- ldr r0, _080CD350 @ =sub_80CD38C
- bl SetVBlankCallback
- ldr r0, _080CD354 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- beq _080CD358
- bl sub_815EC8C
- b _080CD35C
- .align 2, 0
-_080CD350: .4byte sub_80CD38C
-_080CD354: .4byte gSpecialVar_0x8004
-_080CD358:
- bl sub_80CDBE4
-_080CD35C:
- ldr r0, _080CD380 @ =sub_80CD3B8
- movs r1, 0x8
- bl CreateTask
- ldr r0, _080CD384 @ =sub_80CD3A0
- bl SetMainCallback2
- ldr r0, _080CD388 @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_080CD376:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CD380: .4byte sub_80CD3B8
-_080CD384: .4byte sub_80CD3A0
-_080CD388: .4byte gMain
- thumb_func_end sub_80CD240
-
- thumb_func_start sub_80CD38C
-sub_80CD38C: @ 80CD38C
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80CD38C
-
- thumb_func_start sub_80CD3A0
-sub_80CD3A0: @ 80CD3A0
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_80CD3A0
-
- thumb_func_start sub_80CD3B8
-sub_80CD3B8: @ 80CD3B8
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080CD3DC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080CD3D8
- ldr r0, _080CD3E0 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _080CD3E4 @ =sub_80CD3E8
- str r0, [r1]
-_080CD3D8:
- pop {r0}
- bx r0
- .align 2, 0
-_080CD3DC: .4byte gPaletteFade
-_080CD3E0: .4byte gTasks
-_080CD3E4: .4byte sub_80CD3E8
- thumb_func_end sub_80CD3B8
-
- thumb_func_start sub_80CD3E8
-sub_80CD3E8: @ 80CD3E8
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080CD41C @ =gTasks
- adds r4, r1, r0
- ldr r0, _080CD420 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080CD40C
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080CD416
-_080CD40C:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _080CD424 @ =sub_80CD428
- str r0, [r4]
-_080CD416:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CD41C: .4byte gTasks
-_080CD420: .4byte gMain
-_080CD424: .4byte sub_80CD428
- thumb_func_end sub_80CD3E8
-
- thumb_func_start sub_80CD428
-sub_80CD428: @ 80CD428
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _080CD458 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080CD45C @ =sub_80CD460
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CD458: .4byte gTasks
-_080CD45C: .4byte sub_80CD460
- thumb_func_end sub_80CD428
-
- thumb_func_start sub_80CD460
-sub_80CD460: @ 80CD460
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080CD498 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080CD490
- ldr r0, _080CD49C @ =CB2_ReturnToFieldContinueScriptPlayMapMusic
- bl SetMainCallback2
- ldr r0, _080CD4A0 @ =gUnknown_2039A1C
- ldr r0, [r0]
- bl Free
- movs r0, 0
- bl sub_80CD4A4
- bl FreeAllWindowBuffers
- adds r0, r4, 0
- bl DestroyTask
-_080CD490:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CD498: .4byte gPaletteFade
-_080CD49C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
-_080CD4A0: .4byte gUnknown_2039A1C
- thumb_func_end sub_80CD460
-
- thumb_func_start sub_80CD4A4
-sub_80CD4A4: @ 80CD4A4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- adds r0, r4, 0
- bl ClearWindowTilemap
- adds r0, r4, 0
- movs r1, 0x2
- bl CopyWindowToVram
- adds r0, r4, 0
- bl RemoveWindow
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80CD4A4
-
- thumb_func_start sub_80CD4D0
-sub_80CD4D0: @ 80CD4D0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r3, 0xC0
- lsls r3, 19
- movs r4, 0xC0
- lsls r4, 9
- add r0, sp, 0x4
- mov r8, r0
- mov r2, sp
- movs r6, 0
- ldr r1, _080CD600 @ =0x040000d4
- movs r5, 0x80
- lsls r5, 5
- ldr r7, _080CD604 @ =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_080CD4F6:
- strh r6, [r2]
- mov r0, sp
- str r0, [r1]
- str r3, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r3, r5
- subs r4, r5
- cmp r4, r5
- bhi _080CD4F6
- strh r6, [r2]
- mov r2, sp
- str r2, [r1]
- str r3, [r1, 0x4]
- lsrs r0, r4, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0xE0
- lsls r0, 19
- movs r3, 0x80
- lsls r3, 3
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r2, _080CD600 @ =0x040000d4
- mov r1, r8
- str r1, [r2]
- str r0, [r2, 0x4]
- lsrs r0, r3, 2
- movs r1, 0x85
- lsls r1, 24
- orrs r0, r1
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r1, 0xA0
- lsls r1, 19
- mov r0, sp
- strh r4, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- lsrs r3, 1
- movs r0, 0x81
- lsls r0, 24
- orrs r3, r0
- str r3, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xE
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CD600: .4byte 0x040000d4
-_080CD604: .4byte 0x81000800
- thumb_func_end sub_80CD4D0
-
- thumb_func_start sub_80CD608
-sub_80CD608: @ 80CD608
- push {lr}
- bl ScanlineEffect_Stop
- bl ResetTasks
- bl ResetSpriteData
- bl ResetAllPicSprites
- bl ResetPaletteFade
- bl FreeAllSpritePalettes
- pop {r0}
- bx r0
- thumb_func_end sub_80CD608
-
- thumb_func_start sub_80CD628
-sub_80CD628: @ 80CD628
- push {lr}
- movs r1, 0x94
- lsls r1, 4
- movs r0, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- thumb_func_end sub_80CD628
-
- thumb_func_start sub_80CD638
-sub_80CD638: @ 80CD638
- push {lr}
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- pop {r0}
- bx r0
- thumb_func_end sub_80CD638
-
- thumb_func_start InitLinkBattleRecord
-InitLinkBattleRecord: @ 80CD690
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r2, _080CD6BC @ =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
-_080CD6BC: .4byte 0x01000008
- thumb_func_end InitLinkBattleRecord
-
- thumb_func_start InitLinkBattleRecords_
-InitLinkBattleRecords_: @ 80CD6C0
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r5, 0x4
-_080CD6C6:
- adds r0, r4, 0
- bl InitLinkBattleRecord
- adds r4, 0x10
- subs r5, 0x1
- cmp r5, 0
- bge _080CD6C6
- movs r0, 0x17
- movs r1, 0
- bl sub_8054F00
- movs r0, 0x18
- movs r1, 0
- bl sub_8054F00
- movs r0, 0x19
- movs r1, 0
- bl sub_8054F00
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end InitLinkBattleRecords_
-
- thumb_func_start GetLinkBattleRecordTotalBattles
-GetLinkBattleRecordTotalBattles: @ 80CD6F4
- 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 GetLinkBattleRecordTotalBattles
-
- thumb_func_start sub_80CD704
-sub_80CD704: @ 80CD704
- push {r4-r7,lr}
- adds r7, r1, 0
- lsls r2, 16
- lsrs r6, r2, 16
- movs r5, 0
- adds r4, r0, 0
-_080CD710:
- adds r0, r4, 0
- adds r1, r7, 0
- movs r2, 0x7
- bl StringCompareN
- cmp r0, 0
- bne _080CD728
- ldrh r0, [r4, 0x8]
- cmp r0, r6
- bne _080CD728
- adds r0, r5, 0
- b _080CD732
-_080CD728:
- adds r4, 0x10
- adds r5, 0x1
- cmp r5, 0x4
- ble _080CD710
- movs r0, 0x5
-_080CD732:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80CD704
-
- thumb_func_start SortLinkBattleRecords
-SortLinkBattleRecords: @ 80CD738
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- mov r8, r0
- movs r0, 0x4
-_080CD746:
- subs r2, r0, 0x1
- mov r9, r2
- cmp r2, 0
- blt _080CD7A0
- lsls r0, 4
- mov r1, r8
- adds r6, r1, r0
- lsls r0, r2, 4
- adds r5, r0, r1
-_080CD758:
- adds r0, r6, 0
- str r2, [sp, 0x10]
- bl GetLinkBattleRecordTotalBattles
- adds r4, r0, 0
- adds r0, r5, 0
- bl GetLinkBattleRecordTotalBattles
- ldr r2, [sp, 0x10]
- cmp r4, r0
- ble _080CD792
- 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]
-_080CD792:
- subs r5, 0x10
- movs r0, 0x1
- negs r0, r0
- add r9, r0
- mov r1, r9
- cmp r1, 0
- bge _080CD758
-_080CD7A0:
- adds r0, r2, 0
- cmp r0, 0
- bgt _080CD746
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end SortLinkBattleRecords
-
- thumb_func_start UpdateLinkBattleRecord
-UpdateLinkBattleRecord: @ 80CD7B4
- push {lr}
- adds r2, r0, 0
- cmp r1, 0x2
- beq _080CD7E4
- cmp r1, 0x2
- bgt _080CD7C6
- cmp r1, 0x1
- beq _080CD7CC
- b _080CD80E
-_080CD7C6:
- cmp r1, 0x3
- beq _080CD7FC
- b _080CD80E
-_080CD7CC:
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- strh r0, [r2, 0xA]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _080CD7E0 @ =0x0000270f
- cmp r0, r1
- bls _080CD80E
- strh r1, [r2, 0xA]
- b _080CD80E
- .align 2, 0
-_080CD7E0: .4byte 0x0000270f
-_080CD7E4:
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- strh r0, [r2, 0xC]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _080CD7F8 @ =0x0000270f
- cmp r0, r1
- bls _080CD80E
- strh r1, [r2, 0xC]
- b _080CD80E
- .align 2, 0
-_080CD7F8: .4byte 0x0000270f
-_080CD7FC:
- ldrh r0, [r2, 0xE]
- adds r0, 0x1
- strh r0, [r2, 0xE]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _080CD814 @ =0x0000270f
- cmp r0, r1
- bls _080CD80E
- strh r1, [r2, 0xE]
-_080CD80E:
- pop {r0}
- bx r0
- .align 2, 0
-_080CD814: .4byte 0x0000270f
- thumb_func_end UpdateLinkBattleRecord
-
- thumb_func_start UpdateLinkBattleGameStats
-UpdateLinkBattleGameStats: @ 80CD818
- push {r4,lr}
- cmp r0, 0x2
- beq _080CD832
- cmp r0, 0x2
- bgt _080CD828
- cmp r0, 0x1
- beq _080CD82E
- b _080CD84A
-_080CD828:
- cmp r0, 0x3
- beq _080CD836
- b _080CD84A
-_080CD82E:
- movs r4, 0x17
- b _080CD838
-_080CD832:
- movs r4, 0x18
- b _080CD838
-_080CD836:
- movs r4, 0x19
-_080CD838:
- adds r0, r4, 0
- bl GetGameStat
- ldr r1, _080CD850 @ =0x0000270e
- cmp r0, r1
- bhi _080CD84A
- adds r0, r4, 0
- bl IncrementGameStat
-_080CD84A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CD850: .4byte 0x0000270e
- thumb_func_end UpdateLinkBattleGameStats
-
- thumb_func_start sub_80CD854
-sub_80CD854: @ 80CD854
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r6, r0, 0
- adds r4, r1, 0
- mov r8, r3
- ldr r0, [sp, 0x20]
- lsls r2, 16
- lsrs r7, r2, 16
- cmp r0, 0x1
- bne _080CD882
- mov r1, sp
- movs r0, 0xFC
- strb r0, [r1]
- movs r0, 0x15
- strb r0, [r1, 0x1]
- mov r0, sp
- adds r0, 0x2
- adds r1, r4, 0
- bl StringCopy
- b _080CD88A
-_080CD882:
- mov r0, sp
- adds r1, r4, 0
- bl StringCopy
-_080CD88A:
- mov r0, r8
- bl UpdateLinkBattleGameStats
- adds r0, r6, 0
- bl SortLinkBattleRecords
- adds r0, r6, 0
- mov r1, sp
- adds r2, r7, 0
- bl sub_80CD704
- adds r5, r0, 0
- cmp r5, 0x5
- bne _080CD8BE
- movs r5, 0x4
- adds r4, r6, 0
- adds r4, 0x40
- adds r0, r4, 0
- bl InitLinkBattleRecord
- adds r0, r4, 0
- mov r1, sp
- movs r2, 0x7
- bl StringCopyN
- strh r7, [r4, 0x8]
-_080CD8BE:
- lsls r0, r5, 4
- adds r0, r6, r0
- mov r1, r8
- bl UpdateLinkBattleRecord
- adds r0, r6, 0
- bl SortLinkBattleRecords
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80CD854
-
- thumb_func_start InitLinkBattleRecords
-InitLinkBattleRecords: @ 80CD8DC
- push {lr}
- ldr r0, _080CD8F0 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r1, _080CD8F4 @ =0x00000a98
- adds r0, r1
- bl InitLinkBattleRecords_
- pop {r0}
- bx r0
- .align 2, 0
-_080CD8F0: .4byte gSaveBlock2Ptr
-_080CD8F4: .4byte 0x00000a98
- thumb_func_end InitLinkBattleRecords
-
- thumb_func_start sub_80CD8F8
-sub_80CD8F8: @ 80CD8F8
- push {lr}
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 5
- ldr r0, _080CD91C @ =gUnknown_2039638
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _080CD920 @ =0x0000270f
- cmp r0, r2
- bls _080CD916
- strh r2, [r1]
-_080CD916:
- pop {r0}
- bx r0
- .align 2, 0
-_080CD91C: .4byte gUnknown_2039638
-_080CD920: .4byte 0x0000270f
- thumb_func_end sub_80CD8F8
-
- thumb_func_start sub_80CD924
-sub_80CD924: @ 80CD924
- push {lr}
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 5
- ldr r0, _080CD948 @ =gUnknown_203963A
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _080CD94C @ =0x0000270f
- cmp r0, r2
- bls _080CD942
- strh r2, [r1]
-_080CD942:
- pop {r0}
- bx r0
- .align 2, 0
-_080CD948: .4byte gUnknown_203963A
-_080CD94C: .4byte 0x0000270f
- thumb_func_end sub_80CD924
-
- thumb_func_start sub_80CD950
-sub_80CD950: @ 80CD950
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080CD964 @ =gBattleOutcome
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080CD968
- cmp r0, 0x2
- beq _080CD976
- b _080CD984
- .align 2, 0
-_080CD964: .4byte gBattleOutcome
-_080CD968:
- eors r0, r4
- bl sub_80CD8F8
- adds r0, r4, 0
- bl sub_80CD924
- b _080CD984
-_080CD976:
- movs r0, 0x1
- eors r0, r4
- bl sub_80CD924
- adds r0, r4, 0
- bl sub_80CD8F8
-_080CD984:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80CD950
-
- thumb_func_start sub_80CD98C
-sub_80CD98C: @ 80CD98C
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- ldr r0, _080CD9DC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _080CD9D4
- adds r0, r6, 0
- bl sub_80CD950
- ldr r0, _080CD9E0 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r1, _080CD9E4 @ =0x00000a98
- adds r0, r1
- lsls r2, r6, 1
- adds r2, r6
- lsls r2, 5
- ldr r3, _080CD9E8 @ =gUnknown_2039654
- adds r1, r2, r3
- subs r3, 0x30
- adds r2, r3
- ldrh r2, [r2, 0xE]
- ldr r3, _080CD9EC @ =gBattleOutcome
- ldrb r3, [r3]
- ldr r5, _080CD9F0 @ =gLinkPlayers
- lsls r4, r6, 3
- subs r4, r6
- lsls r4, 2
- adds r4, r5
- ldrh r4, [r4, 0x1A]
- str r4, [sp]
- bl sub_80CD854
-_080CD9D4:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CD9DC: .4byte gSaveBlock1Ptr
-_080CD9E0: .4byte gSaveBlock2Ptr
-_080CD9E4: .4byte 0x00000a98
-_080CD9E8: .4byte gUnknown_2039654
-_080CD9EC: .4byte gBattleOutcome
-_080CD9F0: .4byte gLinkPlayers
- thumb_func_end sub_80CD98C
-
- thumb_func_start sub_80CD9F4
-sub_80CD9F4: @ 80CD9F4
- push {r4-r7,lr}
- sub sp, 0x14
- movs r0, 0x17
- bl GetGameStat
- adds r4, r0, 0
- movs r0, 0x18
- bl GetGameStat
- adds r5, r0, 0
- movs r0, 0x19
- bl GetGameStat
- adds r6, r0, 0
- ldr r0, _080CDAB0 @ =0x0000270f
- cmp r4, r0
- bls _080CDA18
- adds r4, r0, 0
-_080CDA18:
- cmp r5, r0
- bls _080CDA1E
- adds r5, r0, 0
-_080CDA1E:
- cmp r6, r0
- bls _080CDA24
- adds r6, r0, 0
-_080CDA24:
- ldr r0, _080CDAB4 @ =gStringVar1
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- ldr r0, _080CDAB8 @ =gStringVar2
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- ldr r0, _080CDABC @ =gStringVar3
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- movs r3, 0
- ldr r6, _080CDAC0 @ =gUnknown_83F6C84
- ldr r7, _080CDAC4 @ =gStringVar4
- ldr r0, _080CDAC8 @ =gUnknown_8418188
- mov r12, r0
- movs r5, 0
-_080CDA54:
- lsls r0, r3, 2
- adds r0, r6
- ldr r2, [r0]
- movs r1, 0
- adds r4, r3, 0x1
- movs r3, 0x3
-_080CDA60:
- cmp r1, 0
- bne _080CDA70
- ldrb r0, [r2]
- cmp r0, 0xFF
- bne _080CDA6C
- movs r1, 0x1
-_080CDA6C:
- cmp r1, 0
- beq _080CDA72
-_080CDA70:
- strb r5, [r2]
-_080CDA72:
- adds r2, 0x1
- subs r3, 0x1
- cmp r3, 0
- bge _080CDA60
- movs r0, 0xFF
- strb r0, [r2]
- adds r3, r4, 0
- cmp r3, 0x2
- bls _080CDA54
- adds r0, r7, 0
- mov r1, r12
- bl StringExpandPlaceholders
- movs r0, 0
- str r0, [sp]
- movs r1, 0x2
- str r1, [sp, 0x4]
- ldr r1, _080CDACC @ =gUnknown_83F6C78
- str r1, [sp, 0x8]
- str r0, [sp, 0xC]
- str r7, [sp, 0x10]
- movs r1, 0x2
- movs r2, 0xC
- movs r3, 0x18
- bl AddTextPrinterParameterized4
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CDAB0: .4byte 0x0000270f
-_080CDAB4: .4byte gStringVar1
-_080CDAB8: .4byte gStringVar2
-_080CDABC: .4byte gStringVar3
-_080CDAC0: .4byte gUnknown_83F6C84
-_080CDAC4: .4byte gStringVar4
-_080CDAC8: .4byte gUnknown_8418188
-_080CDACC: .4byte gUnknown_83F6C78
- thumb_func_end sub_80CD9F4
-
- thumb_func_start sub_80CDAD0
-sub_80CDAD0: @ 80CDAD0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- adds r6, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- movs r5, 0
- ldrh r0, [r6, 0xA]
- cmp r0, 0
- bne _080CDB50
- ldr r0, [r6, 0xC]
- cmp r0, 0
- bne _080CDB50
- str r5, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- ldr r0, _080CDB44 @ =gUnknown_83F6C78
- str r0, [sp, 0x8]
- str r5, [sp, 0xC]
- ldr r0, _080CDB48 @ =gUnknown_84181B6
- str r0, [sp, 0x10]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- mov r3, r8
- bl AddTextPrinterParameterized4
- movs r6, 0
-_080CDB0E:
- movs r4, 0x54
- cmp r5, 0
- beq _080CDB1C
- movs r4, 0xB4
- cmp r5, 0x1
- bne _080CDB1C
- movs r4, 0x84
-_080CDB1C:
- adds r2, r4, 0
- str r6, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- ldr r0, _080CDB44 @ =gUnknown_83F6C78
- str r0, [sp, 0x8]
- str r6, [sp, 0xC]
- ldr r0, _080CDB4C @ =gUnknown_84181BE
- str r0, [sp, 0x10]
- movs r0, 0
- movs r1, 0x2
- mov r3, r8
- bl AddTextPrinterParameterized4
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _080CDB0E
- b _080CDBCE
- .align 2, 0
-_080CDB44: .4byte gUnknown_83F6C78
-_080CDB48: .4byte gUnknown_84181B6
-_080CDB4C: .4byte gUnknown_84181BE
-_080CDB50:
- movs r5, 0
- ldr r7, _080CDB70 @ =gStringVar1
- mov r9, r5
-_080CDB56:
- cmp r5, 0
- bne _080CDB74
- movs r4, 0
- adds r0, r7, 0
- movs r1, 0x8
- bl StringFillWithTerminator
- adds r0, r7, 0
- adds r1, r6, 0
- movs r2, 0x7
- bl StringCopyN
- b _080CDBA6
- .align 2, 0
-_080CDB70: .4byte gStringVar1
-_080CDB74:
- cmp r5, 0x1
- bne _080CDB7E
- movs r4, 0x54
- ldrh r1, [r6, 0xA]
- b _080CDB86
-_080CDB7E:
- cmp r5, 0x2
- bne _080CDB98
- movs r4, 0x84
- ldrh r1, [r6, 0xC]
-_080CDB86:
- ldr r0, _080CDB94 @ =gStringVar1
- movs r2, 0x1
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- b _080CDBA6
- .align 2, 0
-_080CDB94: .4byte gStringVar1
-_080CDB98:
- movs r4, 0xB4
- ldrh r1, [r6, 0xE]
- ldr r0, _080CDBDC @ =gStringVar1
- movs r2, 0x1
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
-_080CDBA6:
- adds r2, r4, 0
- mov r0, r9
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- ldr r0, _080CDBE0 @ =gUnknown_83F6C78
- str r0, [sp, 0x8]
- mov r0, r9
- str r0, [sp, 0xC]
- str r7, [sp, 0x10]
- movs r0, 0
- movs r1, 0x2
- mov r3, r8
- bl AddTextPrinterParameterized4
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _080CDB56
-_080CDBCE:
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CDBDC: .4byte gStringVar1
-_080CDBE0: .4byte gUnknown_83F6C78
- thumb_func_end sub_80CDAD0
-
- thumb_func_start sub_80CDBE4
-sub_80CDBE4: @ 80CDBE4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- movs r0, 0xD8
- str r0, [sp]
- movs r0, 0x90
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillWindowPixelRect
- ldr r5, _080CDC9C @ =gStringVar4
- ldr r1, _080CDCA0 @ =gUnknown_8418174
- adds r0, r5, 0
- bl StringExpandPlaceholders
- movs r2, 0x1
- negs r2, r2
- movs r0, 0x2
- adds r1, r5, 0
- bl GetStringWidth
- movs r2, 0xD0
- subs r2, r0
- lsrs r2, 1
- lsls r2, 24
- lsrs r2, 24
- movs r4, 0
- str r4, [sp]
- movs r0, 0x2
- mov r9, r0
- str r0, [sp, 0x4]
- ldr r6, _080CDCA4 @ =gUnknown_83F6C78
- str r6, [sp, 0x8]
- str r4, [sp, 0xC]
- str r5, [sp, 0x10]
- movs r0, 0
- movs r1, 0x2
- movs r3, 0x4
- bl AddTextPrinterParameterized4
- ldr r5, _080CDCA8 @ =gSaveBlock2Ptr
- ldr r0, [r5]
- ldr r1, _080CDCAC @ =0x00000a98
- mov r8, r1
- add r0, r8
- bl sub_80CD9F4
- str r4, [sp]
- mov r0, r9
- str r0, [sp, 0x4]
- str r6, [sp, 0x8]
- str r4, [sp, 0xC]
- ldr r0, _080CDCB0 @ =gUnknown_84181A4
- str r0, [sp, 0x10]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0x54
- movs r3, 0x30
- bl AddTextPrinterParameterized4
- adds r7, r5, 0
- movs r5, 0xF4
- lsls r5, 22
- mov r6, r8
- movs r4, 0x4
-_080CDC70:
- ldr r0, [r7]
- adds r0, r6
- lsrs r1, r5, 24
- bl sub_80CDAD0
- movs r1, 0xE0
- lsls r1, 20
- adds r5, r1
- adds r6, 0x10
- subs r4, 0x1
- cmp r4, 0
- bge _080CDC70
- movs r0, 0
- bl sub_80CDCB4
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CDC9C: .4byte gStringVar4
-_080CDCA0: .4byte gUnknown_8418174
-_080CDCA4: .4byte gUnknown_83F6C78
-_080CDCA8: .4byte gSaveBlock2Ptr
-_080CDCAC: .4byte 0x00000a98
-_080CDCB0: .4byte gUnknown_84181A4
- thumb_func_end sub_80CDBE4
-
- thumb_func_start sub_80CDCB4
-sub_80CDCB4: @ 80CDCB4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl PutWindowTilemap
- adds r0, r4, 0
- movs r1, 0x3
- bl CopyWindowToVram
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80CDCB4
-
- thumb_func_start sub_80CDCD0
-sub_80CDCD0: @ 80CDCD0
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _080CDD0C @ =gUnknown_83F6388
- adds r0, r4, 0
- movs r2, 0xC0
- movs r3, 0
- bl LoadBgTiles
- ldr r1, _080CDD10 @ =gUnknown_83F6468
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBufferRect
- ldr r0, _080CDD14 @ =gUnknown_83F6448
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CDD0C: .4byte gUnknown_83F6388
-_080CDD10: .4byte gUnknown_83F6468
-_080CDD14: .4byte gUnknown_83F6448
- thumb_func_end sub_80CDCD0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index 01ac780a2..779fef0db 100644
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -2407,7 +2407,7 @@ _080E6C00:
adds r0, r2
ldrh r1, [r0]
movs r0, 0x20
- bl sub_8054F00
+ bl SetGameStat
b _080E6C80
.align 2, 0
_080E6C10: .4byte 0x0000057a
@@ -2599,7 +2599,7 @@ _080E6D9C:
adds r0, r1
ldrh r1, [r0]
movs r0, 0x20
- bl sub_8054F00
+ bl SetGameStat
b _080E6E08
.align 2, 0
_080E6DAC: .4byte 0x0000057a
@@ -2717,7 +2717,7 @@ _080E6E76:
adds r5, r0, 0
movs r0, 0x20
adds r1, r5, 0
- bl sub_8054F00
+ bl SetGameStat
ldr r1, _080E6EA4 @ =0x0000270f
cmp r5, r1
bhi _080E6EB8
@@ -2731,7 +2731,7 @@ _080E6EA8:
ldrh r5, [r1]
movs r0, 0x20
adds r1, r5, 0
- bl sub_8054F00
+ bl SetGameStat
ldr r1, _080E6EC4 @ =0x0000270f
cmp r5, r1
bls _080E6ECC
diff --git a/asm/cable_club.s b/asm/cable_club.s
index 85f6243b4..28cbfc49c 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -943,7 +943,7 @@ _08080E9A:
lsls r1, r5, 8
ldr r0, _08080ED4 @ =gBlockRecvBuffer
adds r1, r0
- ldr r0, _08080ED8 @ =gUnknown_2039624
+ ldr r0, _08080ED8 @ =gTrainerCards
lsls r4, r5, 1
adds r4, r5
lsls r4, 5
@@ -958,12 +958,12 @@ _08080E9A:
.align 2, 0
_08080ED0: .4byte gLinkPlayers
_08080ED4: .4byte gBlockRecvBuffer
-_08080ED8: .4byte gUnknown_2039624
+_08080ED8: .4byte gTrainerCards
_08080EDC:
lsls r1, r5, 8
ldr r0, _08080F3C @ =gBlockRecvBuffer
adds r1, r0
- ldr r2, _08080F40 @ =gUnknown_2039624
+ ldr r2, _08080F40 @ =gTrainerCards
lsls r0, r5, 1
adds r0, r5
lsls r0, 5
@@ -1004,7 +1004,7 @@ _08080EF8:
b _08080F66
.align 2, 0
_08080F3C: .4byte gBlockRecvBuffer
-_08080F40: .4byte gUnknown_2039624
+_08080F40: .4byte gTrainerCards
_08080F44: .4byte gSpecialVar_Result
_08080F48: .4byte gLinkType
_08080F4C: .4byte 0x00004411
@@ -1935,7 +1935,7 @@ sub_8081668: @ 8081668
ldrb r0, [r0]
movs r5, 0x1
eors r0, r5
- bl sub_80CD98C
+ bl TryRecordLinkBattleOutcome
ldr r0, _080816C0 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s
index d4a88c18f..17d761a3d 100644
--- a/asm/link_rfu_3.s
+++ b/asm/link_rfu_3.s
@@ -3154,14 +3154,14 @@ _081172C0:
cmp r4, r0
bne _0811734A
movs r4, 0
- ldr r0, _081172E0 @ =gUnknown_2039624
+ ldr r0, _081172E0 @ =gTrainerCards
adds r7, r0, 0
adds r7, 0x38
ldr r6, _081172E4 @ =gLinkPlayers
adds r5, r0, 0
b _08117302
.align 2, 0
-_081172E0: .4byte gUnknown_2039624
+_081172E0: .4byte gTrainerCards
_081172E4: .4byte gLinkPlayers
_081172E8:
lsls r0, r4, 8
@@ -10949,7 +10949,7 @@ sub_811B31C: @ 811B31C
lsls r1, r0, 1
adds r1, r0
lsls r1, 5
- ldr r0, _0811B4B0 @ =gUnknown_2039624
+ ldr r0, _0811B4B0 @ =gTrainerCards
adds r1, r0
mov r8, r1
bl DynamicPlaceholderTextUtil_Reset
@@ -11108,7 +11108,7 @@ _0811B45E:
bl StringAppend
b _0811B4F0
.align 2, 0
-_0811B4B0: .4byte gUnknown_2039624
+_0811B4B0: .4byte gTrainerCards
_0811B4B4: .4byte gTrainerClassNames
_0811B4B8: .4byte gUnknown_84594B0
_0811B4BC: .4byte gUnknown_84594C4
diff --git a/asm/overworld.s b/asm/overworld.s
index 5e50a5d05..abe4fd8cd 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -334,7 +334,7 @@ _08054EB0:
ldr r1, _08054EC0 @ =0x00ffffff
_08054EB2:
adds r0, r4, 0
- bl sub_8054F00
+ bl SetGameStat
_08054EB8:
pop {r4}
pop {r0}
@@ -376,8 +376,8 @@ _08054EFA:
bx r1
thumb_func_end GetGameStat
- thumb_func_start sub_8054F00
-sub_8054F00: @ 8054F00
+ thumb_func_start SetGameStat
+SetGameStat: @ 8054F00
push {lr}
adds r3, r1, 0
lsls r0, 24
@@ -405,7 +405,7 @@ _08054F2A:
.align 2, 0
_08054F30: .4byte gSaveBlock1Ptr
_08054F34: .4byte gSaveBlock2Ptr
- thumb_func_end sub_8054F00
+ thumb_func_end SetGameStat
thumb_func_start sub_8054F38
sub_8054F38: @ 8054F38
diff --git a/asm/post_battle_event_funcs.s b/asm/post_battle_event_funcs.s
index 14703e26e..264ca380d 100644
--- a/asm/post_battle_event_funcs.s
+++ b/asm/post_battle_event_funcs.s
@@ -44,7 +44,7 @@ _080CA318:
ldrb r0, [r2, 0x11]
orrs r1, r0
movs r0, 0x1
- bl sub_8054F00
+ bl SetGameStat
_080CA33A:
bl sub_804C1AC
movs r0, 0x1
diff --git a/asm/trainer_card.s b/asm/trainer_card.s
index e8a591264..694f11600 100644
--- a/asm/trainer_card.s
+++ b/asm/trainer_card.s
@@ -4090,7 +4090,7 @@ _0808B1B8: .4byte 0x00007bce
sub_808B1BC: @ 808B1BC
lsls r0, 24
lsrs r0, 24
- ldr r2, _0808B1D0 @ =gUnknown_2039624
+ ldr r2, _0808B1D0 @ =gTrainerCards
lsls r1, r0, 1
adds r1, r0
lsls r1, 5
@@ -4098,7 +4098,7 @@ sub_808B1BC: @ 808B1BC
ldrb r0, [r1, 0x1]
bx lr
.align 2, 0
-_0808B1D0: .4byte gUnknown_2039624
+_0808B1D0: .4byte gTrainerCards
thumb_func_end sub_808B1BC
thumb_func_start sub_808B1D4
@@ -4792,7 +4792,7 @@ sub_808B700: @ 808B700
ldr r0, [r5]
ldr r1, _0808B760 @ =0x0000045c
adds r0, r1
- ldr r2, _0808B764 @ =gUnknown_2039624
+ ldr r2, _0808B764 @ =gTrainerCards
lsls r1, r4, 1
adds r1, r4
lsls r1, 5
@@ -4818,7 +4818,7 @@ sub_808B700: @ 808B700
_0808B758: .4byte gUnknown_20397A4
_0808B75C: .4byte 0x00007bd0
_0808B760: .4byte 0x0000045c
-_0808B764: .4byte gUnknown_2039624
+_0808B764: .4byte gTrainerCards
_0808B768: .4byte gLinkPlayers
_0808B76C: .4byte 0x00007bcf
_0808B770: .4byte sub_80895B8
@@ -5070,7 +5070,7 @@ _0808B95C: .4byte sub_80895B8
sub_808B960: @ 808B960
push {r4,lr}
adds r4, r0, 0
- ldr r0, _0808B984 @ =gUnknown_2039624
+ ldr r0, _0808B984 @ =gTrainerCards
ldr r1, _0808B988 @ =gUnknown_83CD960
movs r2, 0x60
bl memcpy
@@ -5083,7 +5083,7 @@ sub_808B960: @ 808B960
pop {r0}
bx r0
.align 2, 0
-_0808B984: .4byte gUnknown_2039624
+_0808B984: .4byte gTrainerCards
_0808B988: .4byte gUnknown_83CD960
_0808B98C: .4byte sub_80895B8
thumb_func_end sub_808B960
@@ -5092,7 +5092,7 @@ _0808B98C: .4byte sub_80895B8
sub_808B990: @ 808B990
push {r4,lr}
adds r4, r0, 0
- ldr r0, _0808B9B4 @ =gUnknown_2039624
+ ldr r0, _0808B9B4 @ =gTrainerCards
ldr r1, _0808B9B8 @ =gUnknown_83CD9C0
movs r2, 0x60
bl memcpy
@@ -5105,7 +5105,7 @@ sub_808B990: @ 808B990
pop {r0}
bx r0
.align 2, 0
-_0808B9B4: .4byte gUnknown_2039624
+_0808B9B4: .4byte gTrainerCards
_0808B9B8: .4byte gUnknown_83CD9C0
_0808B9BC: .4byte sub_80895B8
thumb_func_end sub_808B990
diff --git a/baserom.ips b/baserom.ips
index f70a84768..d9f256fbb 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
diff --git a/data/data_83F5738.s b/data/data_83F5738.s
index c14edc5c8..a466ffd45 100644
--- a/data/data_83F5738.s
+++ b/data/data_83F5738.s
@@ -105,26 +105,9 @@ gUnknown_83F6366:: @ 83F6366
gUnknown_83F637C:: @ 83F637C
.incbin "baserom.gba", 0x3F637C, 0xC
-gUnknown_83F6388:: @ 83F6388
- .incbin "baserom.gba", 0x3F6388, 0xC0
-
-gUnknown_83F6448:: @ 83F6448
- .incbin "baserom.gba", 0x3F6448, 0x20
-
-gUnknown_83F6468:: @ 83F6468
- .incbin "baserom.gba", 0x3F6468, 0x800
-
-gUnknown_83F6C68:: @ 83F6C68
- .incbin "baserom.gba", 0x3F6C68, 0x10
-
-gUnknown_83F6C78:: @ 83F6C78
- .incbin "baserom.gba", 0x3F6C78, 0x4
-
-gUnknown_83F6C7C:: @ 83F6C7C
- .incbin "baserom.gba", 0x3F6C7C, 0x8
-
-gUnknown_83F6C84:: @ 83F6C84
- .incbin "baserom.gba", 0x3F6C84, 0x2C
+ .section .rodata.83F6C90
+gUnknown_83F6C90:: @ 83F6C90
+ .incbin "baserom.gba", 0x3F6C90, 0x20
gUnknown_83F6CB0:: @ 83F6CB0
.incbin "baserom.gba", 0x3F6CB0, 0x6F8
diff --git a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc b/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc
index 0b6b930c7..5acb601dc 100644
--- a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc
+++ b/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc
@@ -223,7 +223,7 @@ SevenIsland_TrainerTower_Lobby_EventScript_164AD8:: @ 8164AD8
lockall
fadescreen 1
setvar VAR_0x8004, 1
- special sub_80CD228
+ special Special_BattleRecords
waitstate
releaseall
end
diff --git a/data/specials.inc b/data/specials.inc
index 4c7ad327d..dcd996bbc 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -205,7 +205,7 @@ gSpecials:: @ 815FD60
def_special ScriptHatchMon
def_special EggHatch
def_special sub_8046EAC
- def_special sub_80CD228
+ def_special Special_BattleRecords
def_special IsEnoughForCostInVar0x8005
def_special SubtractMoneyFromVar0x8005
def_special ExecuteWhiteOut
diff --git a/data/strings.s b/data/strings.s
index 83b86558c..e1804aae0 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -670,7 +670,7 @@ gUnknown_8416741:: @ 0x8416741
.string "SEE YA!$"
gUnknown_8416749:: @ 8416749
- .string "IN BAG:{SIZE 0x00} {STR_VAR_1}$"
+ .string "IN BAG:{SMALL} {STR_VAR_1}$"
gUnknown_8416757:: @ 8416757
.string "Quit shopping.$"
@@ -1293,19 +1293,19 @@ gUnknown_841797F:: @ 0x841797F
.string "INFO$"
gUnknown_8417984:: @ 0x8417984
- .string "FRESH WATER{CLEAR_TO 0x57}{SIZE 0x00}¥200$"
+ .string "FRESH WATER{CLEAR_TO 0x57}{SMALL}¥200$"
gUnknown_841799A:: @ 0x841799A
- .string "SODA POP{CLEAR_TO 0x57}{SIZE 0x00}¥300$"
+ .string "SODA POP{CLEAR_TO 0x57}{SMALL}¥300$"
gUnknown_84179AD:: @ 0x84179AD
- .string "LEMONADE{CLEAR_TO 0x57}{SIZE 0x00}¥350$"
+ .string "LEMONADE{CLEAR_TO 0x57}{SMALL}¥350$"
gUnknown_84179C0:: @ 0x84179C0
- .string "{SIZE 0x00} 50 COINS{CLEAR_TO 0x45}¥1,000$"
+ .string "{SMALL} 50 COINS{CLEAR_TO 0x45}¥1,000$"
gUnknown_84179D6:: @ 0x84179D6
- .string "{SIZE 0x00}500 COINS{CLEAR_TO 0x40}¥10,000$"
+ .string "{SMALL}500 COINS{CLEAR_TO 0x40}¥10,000$"
gUnknown_84179ED:: @ 0x84179ED
.string "Excellent$"
@@ -1335,19 +1335,19 @@ gUnknown_8417A3D:: @ 0x8417A3D
.string "Left$"
gUnknown_8417A42:: @ 0x8417A42
- .string "TM13{CLEAR_TO 0x48}{SIZE 0x00}4,000 COINS$"
+ .string "TM13{CLEAR_TO 0x48}{SMALL}4,000 COINS$"
gUnknown_8417A58:: @ 0x8417A58
- .string "TM23{CLEAR_TO 0x48}{SIZE 0x00}3,500 COINS$"
+ .string "TM23{CLEAR_TO 0x48}{SMALL}3,500 COINS$"
gUnknown_8417A6E:: @ 0x8417A6E
- .string "TM24{CLEAR_TO 0x48}{SIZE 0x00}4,000 COINS$"
+ .string "TM24{CLEAR_TO 0x48}{SMALL}4,000 COINS$"
gUnknown_8417A84:: @ 0x8417A84
- .string "TM30{CLEAR_TO 0x48}{SIZE 0x00}4,500 COINS$"
+ .string "TM30{CLEAR_TO 0x48}{SMALL}4,500 COINS$"
gUnknown_8417A9A:: @ 0x8417A9A
- .string "TM35{CLEAR_TO 0x48}{SIZE 0x00}4,000 COINS$"
+ .string "TM35{CLEAR_TO 0x48}{SMALL}4,000 COINS$"
gUnknown_8417AB0:: @ 0x8417AB0
.string "1F$"
@@ -1491,40 +1491,40 @@ gUnknown_8417C2D:: @ 8417C2D
.string "COINS$"
gUnknown_8417C33:: @ 0x8417C33
- .string "BICYCLE{CLEAR_TO 0x49}{SIZE 0x00}¥1,000,000$"
+ .string "BICYCLE{CLEAR_TO 0x49}{SMALL}¥1,000,000$"
gUnknown_8417C4B:: @ 0x8417C4B
.string "NO THANKS$"
gUnknown_8417C55:: @ 0x8417C55
- .string "ABRA{CLEAR_TO 0x55}{SIZE 0x00} 180 COINS$"
+ .string "ABRA{CLEAR_TO 0x55}{SMALL} 180 COINS$"
gUnknown_8417C6A:: @ 0x8417C6A
- .string "CLEFAIRY{CLEAR_TO 0x55}{SIZE 0x00} 500 COINS$"
+ .string "CLEFAIRY{CLEAR_TO 0x55}{SMALL} 500 COINS$"
gUnknown_8417C83:: @ 0x8417C83
- .string "DRATINI{CLEAR_TO 0x4B}{SIZE 0x00} 2,800 COINS$"
+ .string "DRATINI{CLEAR_TO 0x4B}{SMALL} 2,800 COINS$"
gUnknown_8417C9D:: @ 0x8417C9D
- .string "SCYTHER{CLEAR_TO 0x4B}{SIZE 0x00} 5,500 COINS$"
+ .string "SCYTHER{CLEAR_TO 0x4B}{SMALL} 5,500 COINS$"
gUnknown_8417CB7:: @ 0x8417CB7
- .string "PORYGON{CLEAR_TO 0x4B}{SIZE 0x00} 9,999 COINS$"
+ .string "PORYGON{CLEAR_TO 0x4B}{SMALL} 9,999 COINS$"
gUnknown_8417CD1:: @ 0x8417CD1
- .string "ABRA{CLEAR_TO 0x55}{SIZE 0x00} 120 COINS$"
+ .string "ABRA{CLEAR_TO 0x55}{SMALL} 120 COINS$"
gUnknown_8417CE6:: @ 0x8417CE6
- .string "CLEFAIRY{CLEAR_TO 0x55}{SIZE 0x00} 750 COINS$"
+ .string "CLEFAIRY{CLEAR_TO 0x55}{SMALL} 750 COINS$"
gUnknown_8417CFF:: @ 0x8417CFF
- .string "PINSIR{CLEAR_TO 0x4B}{SIZE 0x00} 2,500 COINS$"
+ .string "PINSIR{CLEAR_TO 0x4B}{SMALL} 2,500 COINS$"
gUnknown_8417D18:: @ 0x8417D18
- .string "DRATINI{CLEAR_TO 0x4B}{SIZE 0x00} 4,600 COINS$"
+ .string "DRATINI{CLEAR_TO 0x4B}{SMALL} 4,600 COINS$"
gUnknown_8417D32:: @ 0x8417D32
- .string "PORYGON{CLEAR_TO 0x4B}{SIZE 0x00} 6,500 COINS$"
+ .string "PORYGON{CLEAR_TO 0x4B}{SMALL} 6,500 COINS$"
gUnknown_8417D4C:: @ 0x8417D4C
.string "NO THANKS$"
@@ -1632,19 +1632,19 @@ gUnknown_8417ECC:: @ 0x8417ECC
.string "BIRTH ISLAND$"
gUnknown_8417ED9:: @ 0x8417ED9
- .string "MIRACLE SEED{CLEAR_TO 0x50}{SIZE 0x00}1,000 COINS$"
+ .string "MIRACLE SEED{CLEAR_TO 0x50}{SMALL}1,000 COINS$"
gUnknown_8417EF7:: @ 0x8417EF7
- .string "CHARCOAL{CLEAR_TO 0x50}{SIZE 0x00}1,000 COINS$"
+ .string "CHARCOAL{CLEAR_TO 0x50}{SMALL}1,000 COINS$"
gUnknown_8417F11:: @ 0x8417F11
- .string "MYSTIC WATER{CLEAR_TO 0x50}{SIZE 0x00}1,000 COINS$"
+ .string "MYSTIC WATER{CLEAR_TO 0x50}{SMALL}1,000 COINS$"
gUnknown_8417F2F:: @ 0x8417F2F
- .string "YELLOW FLUTE{CLEAR_TO 0x50}{SIZE 0x00}1,600 COINS$"
+ .string "YELLOW FLUTE{CLEAR_TO 0x50}{SMALL}1,600 COINS$"
gUnknown_8417F4D:: @ 0x8417F4D
- .string "SMOKE BALL{CLEAR_TO 0x5A}{SIZE 0x00}800 COINS$"
+ .string "SMOKE BALL{CLEAR_TO 0x5A}{SMALL}800 COINS$"
gUnknown_8417F67:: @ 0x8417F67
.string "$"
@@ -1782,51 +1782,51 @@ gUnknown_841809C:: @ 0x841809C
.string "UNION ROOM$"
gUnknown_84180A7:: @ 0x84180A7
- .string "ENERGYPOWDER{CLEAR_TO 0x74}{SIZE 0x00}50$"
+ .string "ENERGYPOWDER{CLEAR_TO 0x74}{SMALL}50$"
gUnknown_84180BC:: @ 0x84180BC
- .string "ENERGY ROOT{CLEAR_TO 0x74}{SIZE 0x00}80$"
+ .string "ENERGY ROOT{CLEAR_TO 0x74}{SMALL}80$"
gUnknown_84180D0:: @ 0x84180D0
- .string "HEAL POWDER{CLEAR_TO 0x74}{SIZE 0x00}50$"
+ .string "HEAL POWDER{CLEAR_TO 0x74}{SMALL}50$"
gUnknown_84180E4:: @ 0x84180E4
- .string "REVIVAL HERB{CLEAR_TO 0x6F}{SIZE 0x00}300$"
+ .string "REVIVAL HERB{CLEAR_TO 0x6F}{SMALL}300$"
gUnknown_84180FA:: @ 0x84180FA
- .string "PROTEIN{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
+ .string "PROTEIN{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_841810D:: @ 0x841810D
- .string "IRON{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
+ .string "IRON{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_841811D:: @ 0x841811D
- .string "CARBOS{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
+ .string "CARBOS{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_841812F:: @ 0x841812F
- .string "CALCIUM{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
+ .string "CALCIUM{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_8418142:: @ 0x8418142
- .string "ZINC{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
+ .string "ZINC{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_8418152:: @ 0x8418152
- .string "HP UP{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
+ .string "HP UP{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_8418163:: @ 0x8418163
- .string "PP UP{CLEAR_TO 0x65}{SIZE 0x00}3,000$"
+ .string "PP UP{CLEAR_TO 0x65}{SMALL}3,000$"
-gUnknown_8418174:: @ 8418174
+gString_BattleRecords_PlayersBattleResults:: @ 8418174
.string "{PLAYER}'s BATTLE RESULTS$"
-gUnknown_8418188:: @ 8418188
+gString_BattleRecords_TotalRecord:: @ 8418188
.string "TOTAL RECORD W:{STR_VAR_1} L:{STR_VAR_2} D:{STR_VAR_3}$"
-gUnknown_84181A4:: @ 84181A4
+gString_BattleRecords_ColumnHeaders:: @ 84181A4
.string "WIN{CLEAR_TO 0x30}LOSE{CLEAR_TO 0x60}DRAW$"
-gUnknown_84181B6:: @ 84181B6
+gString_BattleRecords_7Dashes:: @ 84181B6
.string "-------$"
-gUnknown_84181BE:: @ 84181BE
+gString_BattleRecords_4Dashes:: @ 84181BE
.string "----$"
gFameCheckerText_FameCheckerWillBeClosed:: @ 84181C3
@@ -2870,7 +2870,7 @@ gUnknown_841B2A7:: @ 841B2A7
.string ".$"
gUnknown_841B2A9:: @ 0x841B2A9
- .string "{SIZE 0x00}MAX.{SIZE 0x02} HP$"
+ .string "{SMALL}MAX.{SIZE 0x02} HP$"
gUnknown_841B2B7:: @ 0x841B2B7
.string "ATTACK$"
@@ -2888,10 +2888,10 @@ gUnknown_841B2D4:: @ 0x841B2D4
.string "SP. DEF$"
gUnknown_841B2DC:: @ 841B2DC
- .string "{SIZE 0x00}{EXTRA_PLUS}{SIZE 0x02}$"
+ .string "{SMALL}{EXTRA_PLUS}{SIZE 0x02}$"
gUnknown_841B2E5:: @ 841B2E5
- .string "{SIZE 0x00}-{SIZE 0x02}$"
+ .string "{SMALL}-{SIZE 0x02}$"
gUnknown_841B2ED:: @ 841B2ED
.string "1, $"
diff --git a/graphics/battle_records/bg_tiles.png b/graphics/battle_records/bg_tiles.png
new file mode 100644
index 000000000..bbe9de321
--- /dev/null
+++ b/graphics/battle_records/bg_tiles.png
Binary files differ
diff --git a/graphics/battle_records/palette.pal b/graphics/battle_records/palette.pal
new file mode 100644
index 000000000..d6994a324
--- /dev/null
+++ b/graphics/battle_records/palette.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+115 197 164
+74 74 74
+189 131 156
+230 156 213
+222 238 255
+230 246 255
+148 115 139
+197 213 222
+172 164 189
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_records/tilemap.bin b/graphics/battle_records/tilemap.bin
new file mode 100644
index 000000000..a3691cfd7
--- /dev/null
+++ b/graphics/battle_records/tilemap.bin
Binary files differ
diff --git a/include/overworld.h b/include/overworld.h
index 799389353..9a9657006 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -78,7 +78,8 @@ void c2_load_new_map(void);
void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
void mapldr_default(void);
-u32 GetGameStat(u8);
+u32 GetGameStat(u8 statId);
+u32 SetGameStat(u8 statId, u32 value);
void CB2_ContinueSavedGame(void);
void sub_8055D5C(struct WarpData *);
diff --git a/include/strings.h b/include/strings.h
index 8fb15be76..2cb57e19d 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -185,4 +185,11 @@ extern const u8 gUnknown_841B684[];
extern const u8 gUnknown_841B68F[];
extern const u8 gUnknown_841B698[];
+// battle_records
+extern const u8 gString_BattleRecords_PlayersBattleResults[];
+extern const u8 gString_BattleRecords_TotalRecord[];
+extern const u8 gString_BattleRecords_ColumnHeaders[];
+extern const u8 gString_BattleRecords_7Dashes[];
+extern const u8 gString_BattleRecords_4Dashes[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/trainer_card.h b/include/trainer_card.h
new file mode 100644
index 000000000..e8531cef5
--- /dev/null
+++ b/include/trainer_card.h
@@ -0,0 +1,43 @@
+#ifndef GUARD_TRAINER_CARD_H
+#define GUARD_TRAINER_CARD_H
+
+struct TrainerCard
+{
+ /*0x00*/ u8 gender;
+ /*0x01*/ u8 stars;
+ /*0x02*/ bool8 hasPokedex;
+ /*0x03*/ bool8 caughtAllHoenn;
+ /*0x04*/ bool8 hasAllPaintings;
+ /*0x06*/ u16 hofDebutHours;
+ /*0x08*/ u16 hofDebutMinutes;
+ /*0x0A*/ u16 hofDebutSeconds;
+ /*0x0C*/ u16 caughtMonsCount;
+ /*0x0E*/ u16 trainerId;
+ /*0x10*/ u16 playTimeHours;
+ /*0x12*/ u16 playTimeMinutes;
+ /*0x14*/ u16 linkBattleWins;
+ /*0x16*/ u16 linkBattleLosses;
+ /*0x18*/ u16 battleTowerWins;
+ /*0x1A*/ u16 battleTowerStraightWins;
+ /*0x1C*/ u16 contestsWithFriends;
+ /*0x1E*/ u16 pokeblocksWithFriends;
+ /*0x20*/ u16 pokemonTrades;
+ /*0x24*/ u32 money;
+ /*0x28*/ u16 var_28[4];
+ /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
+ /*0x38*/ u8 version;
+ /*0x3A*/ u16 var_3A;
+ /*0x3C*/ u32 berryCrushPoints;
+ /*0x40*/ u32 unionRoomNum;
+ /*0x44*/ u8 filler44[0x8];
+ /*0x4C*/ u8 var_4C;
+ /*0x4D*/ u8 var_4D;
+ /*0x4E*/ u8 var_4E;
+ /*0x4F*/ u8 var_4F;
+ /*0x50*/ u8 var_50[0x4];
+ /*0x54*/ u16 monSpecies[PARTY_SIZE];
+};
+
+extern struct TrainerCard gTrainerCards[4];
+
+#endif //GUARD_TRAINER_CARD_H
diff --git a/include/trainer_tower.h b/include/trainer_tower.h
new file mode 100644
index 000000000..b9c16d958
--- /dev/null
+++ b/include/trainer_tower.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_TRAINER_TOWER_H
+#define GUARD_TRAINER_TOWER_H
+
+void PrintTrainerTowerRecords(void);
+
+#endif //GUARD_TRAINER_TOWER_H
diff --git a/ld_script.txt b/ld_script.txt
index 6dddecf0c..bf6ddadc4 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -188,7 +188,7 @@ SECTIONS {
src/prof_pc.o(.text);
src/hof_pc.o(.text);
asm/field_specials.o(.text);
- asm/battle_records.o(.text);
+ src/battle_records.o(.text);
asm/evolution_scene.o(.text);
src/coins.o(.text);
src/fldeff_strength.o(.text);
@@ -416,6 +416,8 @@ SECTIONS {
data/data_835B488.o(.rodata.83EEC98);
src/battle_ai_script_commands.o(.rodata);
data/data_83F5738.o(.rodata);
+ src/battle_records.o(.rodata);
+ data/data_83F5738.o(.rodata.83F6C90);
src/save.o(.rodata);
data/data_83FECCC.o(.rodata);
src/intro.o(.rodata);
diff --git a/src/battle_records.c b/src/battle_records.c
new file mode 100644
index 000000000..79f29eb8a
--- /dev/null
+++ b/src/battle_records.c
@@ -0,0 +1,576 @@
+#include "global.h"
+#include "malloc.h"
+#include "main.h"
+#include "bg.h"
+#include "gpu_regs.h"
+#include "event_data.h"
+#include "palette.h"
+#include "task.h"
+#include "text.h"
+#include "window.h"
+#include "text_window.h"
+#include "battle.h"
+#include "trainer_tower.h"
+#include "trainer_pokemon_sprites.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "string_util.h"
+#include "link.h"
+#include "menu.h"
+#include "overworld.h"
+#include "strings.h"
+#include "trainer_card.h"
+#include "constants/battle.h"
+#include "constants/songs.h"
+#include "constants/maps.h"
+
+static EWRAM_DATA u16 * sBg3TilemapBuffer_p = NULL;
+
+static void MainCB2_SetUp(void);
+static void VBlankCB(void);
+static void MainCB2(void);
+static void Task_WaitFadeIn(u8 taskId);
+static void Task_WaitButton(u8 taskId);
+static void Task_FadeOut(u8 taskId);
+static void Task_DestroyAndReturnToField(u8 taskId);
+static void ClearWindowCommitAndRemove(u8 winddowId);
+static void ResetGpu(void);
+static void StopAllRunningTasks(void);
+static void EnableDisplay(void);
+static void ResetBGPos(void);
+static void PrintBattleRecords(void);
+static void CommitWindow(u8 windowId);
+static void LoadFrameGfxOnBg(u8 bgId);
+
+static const u16 sTiles[] = INCBIN_U16("graphics/battle_records/bg_tiles.4bpp");
+static const u16 sPalette[] = INCBIN_U16("graphics/battle_records/palette.gbapal");
+static const u16 sTilemap[] = INCBIN_U16("graphics/battle_records/tilemap.bin");
+
+static const struct WindowTemplate sWindowTemplates[] = {
+ {
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 1,
+ .width = 27,
+ .height = 18,
+ .paletteNum = 0xF,
+ .baseBlock = 0x014
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const struct TextColor sTextColor = {
+ 0, 2, 3
+};
+
+static const struct BgTemplate sBgTemplates[2] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0, // 4bpp
+ .priority = 0,
+ .baseTile = 0x000
+ }, {
+ .bg = 3,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0, // 4bpp
+ .priority = 3,
+ .baseTile = 0x000
+ }
+};
+
+static u8 *const sStringVars[3] = {
+ gStringVar1,
+ gStringVar2,
+ gStringVar3
+};
+
+void Special_BattleRecords(void)
+{
+ SetVBlankCallback(NULL);
+ SetMainCallback2(MainCB2_SetUp);
+}
+
+static void MainCB2_SetUp(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ ResetGpu();
+ gMain.state++;
+ break;
+ case 1:
+ StopAllRunningTasks();
+ gMain.state++;
+ break;
+ case 2:
+ sBg3TilemapBuffer_p = AllocZeroed(0x800);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates));
+ SetBgTilemapBuffer(3, sBg3TilemapBuffer_p);
+ ResetBGPos();
+ gMain.state++;
+ break;
+ case 3:
+ LoadFrameGfxOnBg(3);
+ LoadPalette(stdpal_get(0), 0xF0, 0x20);
+ gMain.state++;
+ break;
+ case 4:
+ if (IsDma3ManagerBusyWithBgCopy() != TRUE)
+ {
+ ShowBg(0);
+ ShowBg(3);
+ CopyBgTilemapBufferToVram(3);
+ gMain.state++;
+ }
+ break;
+ case 5:
+ InitWindows(sWindowTemplates);
+ DeactivateAllTextPrinters();
+ gMain.state++;
+ break;
+ case 6:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ gMain.state++;
+ break;
+ case 7:
+ EnableDisplay();
+ SetVBlankCallback(VBlankCB);
+ if (gSpecialVar_0x8004)
+ PrintTrainerTowerRecords();
+ else
+ PrintBattleRecords();
+ CreateTask(Task_WaitFadeIn, 8);
+ SetMainCallback2(MainCB2);
+ gMain.state = 0;
+ break;
+ }
+}
+
+static void VBlankCB(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void MainCB2(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void Task_WaitFadeIn(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = Task_WaitButton;
+}
+
+static void Task_WaitButton(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+
+ if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ task->func = Task_FadeOut;
+ }
+}
+
+static void Task_FadeOut(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = Task_DestroyAndReturnToField;
+}
+
+static void Task_DestroyAndReturnToField(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+ Free(sBg3TilemapBuffer_p);
+ ClearWindowCommitAndRemove(0);
+ FreeAllWindowBuffers();
+ DestroyTask(taskId);
+ }
+}
+
+static void ClearWindowCommitAndRemove(u8 windowId)
+{
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
+ ClearWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 2);
+ RemoveWindow(windowId);
+}
+
+static void ResetGpu(void)
+{
+ {
+ void * dest = (void *)VRAM;
+ u32 size = VRAM_SIZE;
+ DmaClearLarge16(3, dest, size, 0x1000);
+ }
+
+ {
+ void * dest = (void *)OAM;
+ u32 size = OAM_SIZE;
+ DmaClear32(3, dest, size);
+ }
+
+ {
+ void * dest = (void *)PLTT;
+ u32 size = PLTT_SIZE;
+ DmaClear16(3, dest, size);
+ }
+
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3CNT, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+}
+
+static void StopAllRunningTasks(void)
+{
+ ScanlineEffect_Stop();
+ ResetTasks();
+ ResetSpriteData();
+ ResetAllPicSprites();
+ ResetPaletteFade();
+ FreeAllSpritePalettes();
+}
+
+static void EnableDisplay(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON);
+}
+
+static void ResetBGPos(void)
+{
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+}
+
+static void InitLinkBattleRecord(struct LinkBattleRecord * record)
+{
+ CpuFill16(0, record, sizeof(*record));
+ record->name[0] = EOS;
+ record->trainerId = 0;
+ record->wins = 0;
+ record->losses = 0;
+ record->draws = 0;
+}
+
+static void InitLinkBattleRecords_(struct LinkBattleRecords * records)
+{
+ s32 i;
+
+ for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
+ InitLinkBattleRecord(&records->entries[i]);
+ SetGameStat(GAME_STAT_LINK_BATTLE_WINS, 0);
+ SetGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 0);
+ SetGameStat(GAME_STAT_LINK_BATTLE_DRAWS, 0);
+}
+
+static s32 GetLinkBattleRecordTotalBattles(struct LinkBattleRecord * record)
+{
+ return record->wins + record->losses + record->draws;
+}
+
+static s32 IndexOfOpponentLinkBattleRecord(struct LinkBattleRecords * records, const u8 * name, u16 trainerId)
+{
+ s32 i;
+
+ for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
+ {
+ if (StringCompareN(records->entries[i].name, name, OT_NAME_LENGTH) == 0 && records->entries[i].trainerId == trainerId)
+ return i;
+ }
+
+ return LINK_B_RECORDS_COUNT;
+}
+
+static void SortLinkBattleRecords(struct LinkBattleRecords * records)
+{
+ struct LinkBattleRecord tmp;
+ s32 i;
+ s32 j;
+
+ for (i = LINK_B_RECORDS_COUNT - 1; i > 0; i--)
+ {
+ for (j = i - 1; j >= 0; j--)
+ {
+ if (GetLinkBattleRecordTotalBattles(&records->entries[i]) > GetLinkBattleRecordTotalBattles(&records->entries[j]))
+ {
+ tmp = records->entries[i];
+ records->entries[i] = records->entries[j];
+ records->entries[j] = tmp;
+ }
+ }
+ }
+}
+
+static void UpdateLinkBattleRecord(struct LinkBattleRecord * record, s32 outcome)
+{
+ switch (outcome)
+ {
+ case B_OUTCOME_WON:
+ record->wins++;
+ if (record->wins > 9999)
+ record->wins = 9999;
+ break;
+ case B_OUTCOME_LOST:
+ record->losses++;
+ if (record->losses > 9999)
+ record->losses = 9999;
+ break;
+ case B_OUTCOME_DREW:
+ record->draws++;
+ if (record->draws > 9999)
+ record->draws = 9999;
+ break;
+ }
+}
+
+static void UpdateLinkBattleGameStats(s32 outcome)
+{
+ u8 statId;
+
+ switch (outcome)
+ {
+ case B_OUTCOME_WON:
+ statId = GAME_STAT_LINK_BATTLE_WINS;
+ break;
+ case B_OUTCOME_LOST:
+ statId = GAME_STAT_LINK_BATTLE_LOSSES;
+ break;
+ case B_OUTCOME_DREW:
+ statId = GAME_STAT_LINK_BATTLE_DRAWS;
+ break;
+ default:
+ return;
+ }
+
+ if (GetGameStat(statId) < 9999)
+ IncrementGameStat(statId);
+}
+
+static void AddOpponentLinkBattleRecord(struct LinkBattleRecords * records, const u8 * name, u16 trainerId, s32 outcome, u32 language)
+{
+ u8 namebuf[OT_NAME_LENGTH + 1];
+ s32 i;
+ struct LinkBattleRecord * record;
+
+ if (language == LANGUAGE_JAPANESE)
+ {
+ namebuf[0] = EXT_CTRL_CODE_BEGIN;
+ namebuf[1] = EXT_CTRL_CODE_JPN;
+ StringCopy(&namebuf[2], name);
+ }
+ else
+ StringCopy(namebuf, name);
+ UpdateLinkBattleGameStats(outcome);
+ SortLinkBattleRecords(records);
+ i = IndexOfOpponentLinkBattleRecord(records, namebuf, trainerId);
+ if (i == LINK_B_RECORDS_COUNT)
+ {
+ i = LINK_B_RECORDS_COUNT - 1;
+ record = &records->entries[LINK_B_RECORDS_COUNT - 1];
+ InitLinkBattleRecord(record);
+ StringCopyN(record->name, namebuf, OT_NAME_LENGTH);
+ record->trainerId = trainerId;
+ }
+ UpdateLinkBattleRecord(&records->entries[i], outcome);
+ SortLinkBattleRecords(records);
+}
+
+void InitLinkBattleRecords(void)
+{
+ InitLinkBattleRecords_(&gSaveBlock2Ptr->linkBattleRecords);
+}
+
+static void IncTrainerCardWinCount(s32 battlerId)
+{
+ u16 *wins = &gTrainerCards[battlerId].linkBattleWins;
+ (*wins)++;
+ if (*wins > 9999)
+ *wins = 9999;
+}
+
+static void IncTrainerCardLossCount(s32 battlerId)
+{
+ u16 *losses = &gTrainerCards[battlerId].linkBattleLosses;
+ (*losses)++;
+ if (*losses > 9999)
+ *losses = 9999;
+}
+
+static void UpdateBattleOutcomeOnTrainerCards(s32 battlerId)
+{
+ switch (gBattleOutcome)
+ {
+ case B_OUTCOME_WON:
+ IncTrainerCardWinCount(battlerId ^ 1);
+ IncTrainerCardLossCount(battlerId);
+ break;
+ case B_OUTCOME_LOST:
+ IncTrainerCardLossCount(battlerId ^ 1);
+ IncTrainerCardWinCount(battlerId);
+ break;
+ }
+}
+
+void TryRecordLinkBattleOutcome(s32 battlerId)
+{
+ if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(UNKNOWN_MAP_00_04) || gSaveBlock1Ptr->location.mapNum != MAP_NUM(UNKNOWN_MAP_00_04))
+ {
+ UpdateBattleOutcomeOnTrainerCards(battlerId);
+ AddOpponentLinkBattleRecord(&gSaveBlock2Ptr->linkBattleRecords, gTrainerCards[battlerId].playerName, gTrainerCards[battlerId].trainerId, gBattleOutcome, gLinkPlayers[battlerId].language);
+ }
+}
+
+static void PrintTotalRecord(struct LinkBattleRecords * records)
+{
+ u32 nwins = GetGameStat(GAME_STAT_LINK_BATTLE_WINS);
+ u32 nlosses = GetGameStat(GAME_STAT_LINK_BATTLE_LOSSES);
+ u32 ndraws = GetGameStat(GAME_STAT_LINK_BATTLE_DRAWS);
+ s32 i;
+ s32 j;
+ bool32 foundEnd;
+ u8 * strvar;
+
+ if (nwins > 9999)
+ nwins = 9999;
+ if (nlosses > 9999)
+ nlosses = 9999;
+ if (ndraws > 9999)
+ ndraws = 9999;
+
+ ConvertIntToDecimalStringN(gStringVar1, nwins, STR_CONV_MODE_LEFT_ALIGN, 4);
+ ConvertIntToDecimalStringN(gStringVar2, nlosses, STR_CONV_MODE_LEFT_ALIGN, 4);
+ ConvertIntToDecimalStringN(gStringVar3, ndraws, STR_CONV_MODE_LEFT_ALIGN, 4);
+
+ for (i = 0; i < NELEMS(sStringVars); i++)
+ {
+ strvar = sStringVars[i];
+ foundEnd = FALSE;
+ for (j = 0; j < 4; j++)
+ {
+ if (!foundEnd && *strvar == EOS)
+ foundEnd = TRUE;
+ if (foundEnd)
+ *strvar = CHAR_SPACE;
+ strvar++;
+ }
+ *strvar = 0xFF;
+ }
+
+ StringExpandPlaceholders(gStringVar4, gString_BattleRecords_TotalRecord);
+ AddTextPrinterParameterized4(0, 2, 12, 24, 0, 2, &sTextColor, 0, gStringVar4);
+}
+
+static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y)
+{
+ u8 i = 0;
+ s32 x;
+
+ if (record->wins == 0 && record->losses == 0 && record->draws == 0)
+ {
+ AddTextPrinterParameterized4(0, 2, 0, y, 0, 2, &sTextColor, 0, gString_BattleRecords_7Dashes);
+ for (i = 0; i < 3; i++)
+ {
+ if (i == 0)
+ x = 0x54;
+ else if (i == 1)
+ x = 0x84;
+ else
+ x = 0xB4;
+ AddTextPrinterParameterized4(0, 2, x, y, 0, 2, &sTextColor, 0, gString_BattleRecords_4Dashes);
+ }
+ }
+ else
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (i == 0)
+ {
+ x = 0;
+ StringFillWithTerminator(gStringVar1, OT_NAME_LENGTH + 1);
+ StringCopyN(gStringVar1, record->name, OT_NAME_LENGTH);
+ }
+ else if (i == 1)
+ {
+ x = 0x54;
+ ConvertIntToDecimalStringN(gStringVar1, record->wins, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ }
+ else if (i == 2)
+ {
+ x = 0x84;
+ ConvertIntToDecimalStringN(gStringVar1, record->losses, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ }
+ else
+ {
+ x = 0xB4;
+ ConvertIntToDecimalStringN(gStringVar1, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ }
+ AddTextPrinterParameterized4(0, 2, x, y, 0, 2, &sTextColor, 0, gStringVar1);
+ }
+ }
+}
+
+static void PrintBattleRecords(void)
+{
+ u32 left;
+ s32 i;
+
+ FillWindowPixelRect(0, PIXEL_FILL(0), 0, 0, 0xD8, 0x90);
+ StringExpandPlaceholders(gStringVar4, gString_BattleRecords_PlayersBattleResults);
+ left = 0xD0 - GetStringWidth(2, gStringVar4, -1);
+ AddTextPrinterParameterized4(0, 2, left / 2, 4, 0, 2, &sTextColor, 0, gStringVar4);
+ PrintTotalRecord(&gSaveBlock2Ptr->linkBattleRecords);
+ AddTextPrinterParameterized4(0, 2, 0x54, 0x30, 0, 2, &sTextColor, 0, gString_BattleRecords_ColumnHeaders);
+ for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
+ PrintOpponentBattleRecord(&gSaveBlock2Ptr->linkBattleRecords.entries[i], 0x3D + 14 * i);
+ CommitWindow(0);
+}
+
+static void CommitWindow(u8 windowId)
+{
+ PutWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 3);
+}
+
+static void LoadFrameGfxOnBg(u8 bg)
+{
+ LoadBgTiles(bg, sTiles, 0xC0, 0);
+ CopyToBgTilemapBufferRect(bg, sTilemap, 0, 0, 32, 32);
+ LoadPalette(sPalette, 0, 0x20);
+}
diff --git a/src/trainer_tower.c b/src/trainer_tower.c
index b7b9c096d..6ef7157af 100644
--- a/src/trainer_tower.c
+++ b/src/trainer_tower.c
@@ -566,10 +566,10 @@ void sub_815D8C8(void)
}
}
-void sub_815D8F8(void) // fakematching
+void sub_815D8F8(void)
{
u8 i;
- register u32 found_map asm("r4") = 0xFF;
+ u8 found_map = 0xFF;
for (i = 0; i < 15; i++)
{
if (gUnknown_8479D34[i].mapGroup == gSaveBlock1Ptr->location.mapGroup && gUnknown_8479D34[i].mapNum == gSaveBlock1Ptr->location.mapNum)
@@ -1425,7 +1425,7 @@ void sub_815EC0C(void)
}
}
-void sub_815EC8C(void)
+void PrintTrainerTowerRecords(void)
{
s32 i;
u8 windowId = 0;
diff --git a/sym_ewram.txt b/sym_ewram.txt
index b968e31ee..f757982ff 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -841,17 +841,8 @@ gFieldEffectArguments: @ 20386E0
gUnknown_2039620: @ 2039620
.space 0x4
-gUnknown_2039624: @ 2039624
- .space 0x14
-
-gUnknown_2039638: @ 2039638
- .space 0x2
-
-gUnknown_203963A: @ 203963A
- .space 0x1A
-
-gUnknown_2039654: @ 2039654
- .space 0x150
+gTrainerCards: @ 2039624
+ .space 0x180
gUnknown_20397A4: @ 20397A4
.space 0x4
@@ -1061,8 +1052,7 @@ gUnknown_2039A1A: @ 2039A1A
gUnknown_2039A1B: @ 2039A1B
.space 0x1
-gUnknown_2039A1C: @ 2039A1C
- .space 0x4
+ .include "src/battle_records.o"
gUnknown_2039A20: @ 2039A20
.space 0x4