summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/cable_club.s8
-rw-r--r--asm/link_rfu_3.s4
-rw-r--r--asm/trainer_card.s5113
-rw-r--r--data/graphics.s8
-rw-r--r--data/strings.s34
-rw-r--r--data/trainer_card.s192
-rw-r--r--graphics/trainer_card/badges.pngbin0 -> 537 bytes
-rw-r--r--graphics/trainer_card/em_1stars_pals.pal51
-rw-r--r--graphics/trainer_card/em_2stars_pals.pal51
-rw-r--r--graphics/trainer_card/em_3stars_pals.pal51
-rw-r--r--graphics/trainer_card/em_4stars_pals.pal51
-rw-r--r--graphics/trainer_card/em_badges.pal19
-rw-r--r--graphics/trainer_card/em_badges.pngbin0 -> 513 bytes
-rw-r--r--graphics/trainer_card/em_female_bg.pal19
-rw-r--r--graphics/trainer_card/fr_1stars_pals.pal51
-rw-r--r--graphics/trainer_card/fr_2stars_pals.pal51
-rw-r--r--graphics/trainer_card/fr_3stars_pals.pal51
-rw-r--r--graphics/trainer_card/fr_4stars_pals.pal51
-rw-r--r--graphics/trainer_card/fr_badges.pal19
-rw-r--r--graphics/trainer_card/fr_female_bg.pal19
-rw-r--r--graphics/trainer_card/sticker1.pal19
-rw-r--r--graphics/trainer_card/sticker2.pal19
-rw-r--r--graphics/trainer_card/sticker3.pal19
-rw-r--r--graphics/trainer_card/sticker4.pal19
-rw-r--r--graphics/trainer_card/stickers.pngbin0 -> 336 bytes
-rw-r--r--graphics/trainer_card/unk_83CC4DC.binbin0 -> 532 bytes
-rw-r--r--graphics/trainer_card/unk_83CC6F0.binbin0 -> 440 bytes
-rw-r--r--graphics/trainer_card/unk_83CC8A8.binbin0 -> 220 bytes
-rw-r--r--graphics/trainer_card/unk_83CC984.binbin0 -> 300 bytes
-rw-r--r--graphics/trainer_card/unk_83CCAB0.binbin0 -> 500 bytes
-rw-r--r--graphics/trainer_card/unk_83CCCA4.binbin0 -> 396 bytes
-rw-r--r--graphics/trainer_card/unk_83CCE30.binbin0 -> 152 bytes
-rw-r--r--graphics/trainer_card/unk_83CCEC8.binbin0 -> 184 bytes
-rw-r--r--graphics/trainer_card/unk_83CD300.pal19
-rw-r--r--include/constants/game_stat.h5
-rw-r--r--include/global.h2
-rw-r--r--include/graphics.h6
-rw-r--r--include/pokedex.h3
-rw-r--r--include/pokemon_icon.h3
-rw-r--r--include/strings.h19
-rw-r--r--include/trainer_card.h17
-rw-r--r--include/trainer_pokemon_sprites.h2
-rw-r--r--ld_script.txt4
-rw-r--r--src/money.c6
-rw-r--r--src/pokedex.c2
-rw-r--r--src/start_menu.c4
-rw-r--r--src/trainer_card.c1932
-rw-r--r--sym_ewram.txt8
48 files changed, 2593 insertions, 5358 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s
index d19bb3a35..3fea2b935 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -781,7 +781,7 @@ _08080D54:
ldrb r0, [r4]
bl sub_800A900
ldr r0, _08080D84 @ =gBlockSendBuffer
- bl sub_80898E8
+ bl TrainerCard_GenerateCardForLinkPlayer
ldr r0, _08080D88 @ =sub_8080E6C
_08080D72:
str r0, [r5]
@@ -884,7 +884,7 @@ _08080E20:
ldrb r0, [r4]
bl sub_800A900
ldr r0, _08080E60 @ =gBlockSendBuffer
- bl sub_80898E8
+ bl TrainerCard_GenerateCardForLinkPlayer
ldr r1, _08080E64 @ =gTasks
lsls r0, r5, 2
adds r0, r5
@@ -2388,7 +2388,7 @@ sp02A_crash_sound: @ 8081A1C
ldr r0, _08081A2C @ =gSpecialVar_0x8006
ldrb r0, [r0]
ldr r1, _08081A30 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic
- bl InitLinkPartnerTrainerCard
+ bl ShowTrainerCardInLink
pop {r0}
bx r0
.align 2, 0
@@ -2412,7 +2412,7 @@ sub_8081A34: @ 8081A34
adds r1, r2
bl StringCopy
adds r0, r4, 0
- bl sub_808B1BC
+ bl GetTrainerCardStars
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s
index 1e076a55e..d1f18a8ae 100644
--- a/asm/link_rfu_3.s
+++ b/asm/link_rfu_3.s
@@ -3252,7 +3252,7 @@ _08117384:
lsls r0, 24
lsrs r0, 24
ldr r1, _081173BC @ =CB2_ReturnToField
- bl InitLinkPartnerTrainerCard
+ bl ShowTrainerCardInLink
_081173A2:
bl RunTasks
bl RunTextPrinters
@@ -3489,7 +3489,7 @@ sub_8117594: @ 8117594
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
- bl sub_80898E8
+ bl TrainerCard_GenerateCardForLinkPlayer
cmp r5, 0
beq _081175AE
bl sub_81440E8
diff --git a/asm/trainer_card.s b/asm/trainer_card.s
deleted file mode 100644
index 1e97ba2de..000000000
--- a/asm/trainer_card.s
+++ /dev/null
@@ -1,5113 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8088FF0
-sub_8088FF0: @ 8088FF0
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl sub_808B180
- ldr r0, _08089024 @ =gUnknown_20397A4
- ldr r0, [r0]
- ldrb r0, [r0, 0x9]
- cmp r0, 0
- beq _08089020
- ldr r1, _08089028 @ =0x040000d4
- ldr r0, _0808902C @ =gScanlineEffectRegBuffers
- str r0, [r1]
- movs r2, 0xF0
- lsls r2, 3
- adds r0, r2
- str r0, [r1, 0x4]
- ldr r0, _08089030 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_08089020:
- pop {r0}
- bx r0
- .align 2, 0
-_08089024: .4byte gUnknown_20397A4
-_08089028: .4byte 0x040000d4
-_0808902C: .4byte gScanlineEffectRegBuffers
-_08089030: .4byte 0x800000a0
- thumb_func_end sub_8088FF0
-
- thumb_func_start sub_8089034
-sub_8089034: @ 8089034
- push {r4,lr}
- ldr r4, _08089060 @ =0x04000208
- ldrh r3, [r4]
- movs r0, 0
- strh r0, [r4]
- ldr r1, _08089064 @ =gScanlineEffectRegBuffers
- ldr r0, _08089068 @ =0x04000006
- ldrh r2, [r0]
- movs r0, 0xFF
- ands r0, r2
- lsls r0, 1
- movs r2, 0xF0
- lsls r2, 3
- adds r1, r2
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, _0808906C @ =0x04000012
- strh r1, [r0]
- strh r3, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08089060: .4byte 0x04000208
-_08089064: .4byte gScanlineEffectRegBuffers
-_08089068: .4byte 0x04000006
-_0808906C: .4byte 0x04000012
- thumb_func_end sub_8089034
-
- thumb_func_start sub_8089070
-sub_8089070: @ 8089070
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_8089070
-
- thumb_func_start sub_8089088
-sub_8089088: @ 8089088
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _080890BC @ =gUnknown_20397A4
- ldr r0, [r5]
- movs r1, 0x8B
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- bl SetMainCallback2
- bl FreeAllWindowBuffers
- ldr r0, [r5]
- bl Free
- movs r0, 0
- str r0, [r5]
- adds r0, r4, 0
- bl DestroyTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080890BC: .4byte gUnknown_20397A4
- thumb_func_end sub_8089088
-
- thumb_func_start sub_80890C0
-sub_80890C0: @ 80890C0
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080890E0 @ =gUnknown_20397A4
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r4, r1, 0
- cmp r0, 0x10
- bls _080890D6
- b _08089416
-_080890D6:
- lsls r0, 2
- ldr r1, _080890E4 @ =_080890E8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080890E0: .4byte gUnknown_20397A4
-_080890E4: .4byte _080890E8
- .align 2, 0
-_080890E8:
- .4byte _0808912C
- .4byte _08089142
- .4byte _08089150
- .4byte _08089158
- .4byte _0808916C
- .4byte _08089180
- .4byte _08089194
- .4byte _0808919A
- .4byte _080891DC
- .4byte _08089208
- .4byte _08089224
- .4byte _080892E4
- .4byte _080892B8
- .4byte _080893F6
- .4byte _080893E4
- .4byte _0808937A
- .4byte _080893B8
-_0808912C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- beq _08089138
- b _08089416
-_08089138:
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- b _08089214
-_08089142:
- bl sub_8089DC8
- lsls r0, 24
- cmp r0, 0
- bne _0808914E
- b _08089416
-_0808914E:
- b _08089214
-_08089150:
- movs r0, 0x1
- bl sub_808ACC8
- b _08089214
-_08089158:
- movs r0, 0x2
- movs r1, 0
- bl FillWindowPixelBuffer
- bl sub_808B838
- movs r0, 0x2
- bl sub_808ACC8
- b _08089214
-_0808916C:
- ldr r0, [r4]
- ldr r1, _0808917C @ =0x00000e1c
- adds r0, r1
- bl sub_808AE94
- ldr r1, [r4]
- b _08089218
- .align 2, 0
-_0808917C: .4byte 0x00000e1c
-_08089180:
- ldr r0, [r4]
- ldr r1, _08089190 @ =0x000004bc
- adds r0, r1
- bl sub_808AF04
- ldr r1, [r4]
- b _08089218
- .align 2, 0
-_08089190: .4byte 0x000004bc
-_08089194:
- bl sub_808AF74
- b _08089214
-_0808919A:
- ldr r0, _080891D0 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080891B6
- ldr r0, _080891D4 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080891B6
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0xE6
- movs r1, 0x96
- bl CreateWirelessStatusIndicatorSprite
-_080891B6:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _080891D8 @ =sub_8088FF0
- bl SetVBlankCallback
- b _08089214
- .align 2, 0
-_080891D0: .4byte gWirelessCommType
-_080891D4: .4byte gReceivedRemoteLinkPlayers
-_080891D8: .4byte sub_8088FF0
-_080891DC:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- beq _080891E8
- b _08089416
-_080891E8:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- beq _080891F4
- b _08089416
-_080891F4:
- movs r0, 0xF4
- bl PlaySE
- ldr r0, _08089204 @ =gUnknown_20397A4
- ldr r1, [r0]
- movs r0, 0xA
- strb r0, [r1]
- b _08089416
- .align 2, 0
-_08089204: .4byte gUnknown_20397A4
-_08089208:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _08089214
- b _08089416
-_08089214:
- ldr r0, _08089220 @ =gUnknown_20397A4
- ldr r1, [r0]
-_08089218:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08089416
- .align 2, 0
-_08089220: .4byte gUnknown_20397A4
-_08089224:
- ldr r0, _08089270 @ =gReceivedRemoteLinkPlayers
- ldrb r5, [r0]
- cmp r5, 0
- bne _0808924A
- ldr r0, [r4]
- ldr r1, _08089274 @ =0x00007bce
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808924A
- bl sub_808A22C
- movs r0, 0x1
- bl sub_808ACC8
- ldr r0, [r4]
- ldr r1, _08089274 @ =0x00007bce
- adds r0, r1
- strb r5, [r0]
-_0808924A:
- ldr r0, _08089278 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08089280
- movs r0, 0xB
- bl HelpSystem_SetSomeVariable2
- bl sub_808B1D4
- movs r0, 0xF2
- bl PlaySE
- ldr r0, _0808927C @ =gUnknown_20397A4
- ldr r1, [r0]
- movs r0, 0xC
- strb r0, [r1]
- b _08089416
- .align 2, 0
-_08089270: .4byte gReceivedRemoteLinkPlayers
-_08089274: .4byte 0x00007bce
-_08089278: .4byte gMain
-_0808927C: .4byte gUnknown_20397A4
-_08089280:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0808928A
- b _08089416
-_0808928A:
- ldr r0, _080892B0 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080892A4
- ldr r4, _080892B4 @ =gUnknown_20397A4
- ldr r0, [r4]
- ldrb r0, [r0, 0x5]
- cmp r0, 0
- beq _080892A4
- bl InUnionRoom
- cmp r0, 0x1
- beq _08089364
-_080892A4:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- b _080893C8
- .align 2, 0
-_080892B0: .4byte gReceivedRemoteLinkPlayers
-_080892B4: .4byte gUnknown_20397A4
-_080892B8:
- bl sub_808B1FC
- lsls r0, 24
- cmp r0, 0
- bne _080892C4
- b _08089416
-_080892C4:
- bl sub_8058244
- cmp r0, 0x1
- bne _080892CE
- b _08089416
-_080892CE:
- movs r0, 0xF4
- bl PlaySE
- ldr r0, _080892E0 @ =gUnknown_20397A4
- ldr r1, [r0]
- movs r0, 0xB
- strb r0, [r1]
- b _08089416
- .align 2, 0
-_080892E0: .4byte gUnknown_20397A4
-_080892E4:
- ldr r0, _0808931C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08089344
- ldr r0, _08089320 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08089324
- ldr r0, [r4]
- ldrb r0, [r0, 0x5]
- cmp r0, 0
- beq _08089308
- bl InUnionRoom
- cmp r0, 0x1
- beq _08089364
-_08089308:
- ldr r0, _08089320 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08089324
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- b _080893C8
- .align 2, 0
-_0808931C: .4byte gMain
-_08089320: .4byte gReceivedRemoteLinkPlayers
-_08089324:
- movs r0, 0xA
- bl HelpSystem_SetSomeVariable2
- bl sub_808B1D4
- ldr r0, _08089340 @ =gUnknown_20397A4
- ldr r1, [r0]
- movs r0, 0xD
- strb r0, [r1]
- movs r0, 0xF2
- bl PlaySE
- b _08089416
- .align 2, 0
-_08089340: .4byte gUnknown_20397A4
-_08089344:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08089416
- ldr r0, _0808936C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08089370
- ldr r0, [r4]
- ldrb r0, [r0, 0x5]
- cmp r0, 0
- beq _08089370
- bl InUnionRoom
- cmp r0, 0x1
- bne _08089370
-_08089364:
- ldr r1, [r4]
- movs r0, 0xF
- strb r0, [r1]
- b _08089416
- .align 2, 0
-_0808936C: .4byte gReceivedRemoteLinkPlayers
-_08089370:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- b _080893C8
-_0808937A:
- bl sub_800AAC0
- movs r0, 0
- movs r1, 0x1
- bl DrawDialogueFrame
- ldr r2, _080893B0 @ =gUnknown_8419D89
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r1, 0x2
- movs r3, 0
- bl AddTextPrinterParameterized
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- ldr r0, _080893B4 @ =gUnknown_20397A4
- ldr r1, [r0]
- movs r0, 0x10
- strb r0, [r1]
- b _08089416
- .align 2, 0
-_080893B0: .4byte gUnknown_8419D89
-_080893B4: .4byte gUnknown_20397A4
-_080893B8:
- ldr r0, _080893DC @ =gReceivedRemoteLinkPlayers
- ldrb r1, [r0]
- cmp r1, 0
- bne _08089416
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
-_080893C8:
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080893E0 @ =gUnknown_20397A4
- ldr r1, [r0]
- movs r0, 0xE
- strb r0, [r1]
- b _08089416
- .align 2, 0
-_080893DC: .4byte gReceivedRemoteLinkPlayers
-_080893E0: .4byte gUnknown_20397A4
-_080893E4:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _08089416
- adds r0, r5, 0
- bl sub_8089088
- b _08089416
-_080893F6:
- bl sub_808B1FC
- lsls r0, 24
- cmp r0, 0
- beq _08089416
- bl sub_8058244
- cmp r0, 0x1
- beq _08089416
- ldr r0, _08089420 @ =gUnknown_20397A4
- ldr r1, [r0]
- movs r0, 0xA
- strb r0, [r1]
- movs r0, 0xF4
- bl PlaySE
-_08089416:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08089420: .4byte gUnknown_20397A4
- thumb_func_end sub_80890C0
-
- thumb_func_start sub_8089424
-sub_8089424: @ 8089424
- push {lr}
- ldr r0, _0808943C @ =gUnknown_20397A4
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- cmp r0, 0x5
- bls _08089432
- b _0808959C
-_08089432:
- lsls r0, 2
- ldr r1, _08089440 @ =_08089444
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808943C: .4byte gUnknown_20397A4
-_08089440: .4byte _08089444
- .align 2, 0
-_08089444:
- .4byte _0808945C
- .4byte _08089490
- .4byte _080894C4
- .4byte _08089524
- .4byte _0808953C
- .4byte _08089570
-_0808945C:
- ldr r0, _08089470 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldr r2, _08089474 @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08089480
- ldr r0, _08089478 @ =gUnknown_83CCE30
- ldr r2, _0808947C @ =0x00000e1c
- b _08089582
- .align 2, 0
-_08089470: .4byte gUnknown_20397A4
-_08089474: .4byte 0x00000457
-_08089478: .4byte gUnknown_83CCE30
-_0808947C: .4byte 0x00000e1c
-_08089480:
- ldr r0, _08089488 @ =gUnknown_83CCEC8
- ldr r2, _0808948C @ =0x00000e1c
- b _08089582
- .align 2, 0
-_08089488: .4byte gUnknown_83CCEC8
-_0808948C: .4byte 0x00000e1c
-_08089490:
- ldr r0, _080894A4 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldr r2, _080894A8 @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080894B4
- ldr r0, _080894AC @ =gUnknown_83CC8A8
- ldr r2, _080894B0 @ =0x0000096c
- b _08089582
- .align 2, 0
-_080894A4: .4byte gUnknown_20397A4
-_080894A8: .4byte 0x00000457
-_080894AC: .4byte gUnknown_83CC8A8
-_080894B0: .4byte 0x0000096c
-_080894B4:
- ldr r0, _080894BC @ =gUnknown_83CC984
- ldr r2, _080894C0 @ =0x0000096c
- b _08089582
- .align 2, 0
-_080894BC: .4byte gUnknown_83CC984
-_080894C0: .4byte 0x0000096c
-_080894C4:
- ldr r0, _080894E0 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldrb r0, [r1, 0x5]
- cmp r0, 0
- bne _080894FC
- ldr r2, _080894E4 @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080894EC
- ldr r0, _080894E8 @ =gUnknown_83CC4DC
- adds r2, 0x65
- b _08089582
- .align 2, 0
-_080894E0: .4byte gUnknown_20397A4
-_080894E4: .4byte 0x00000457
-_080894E8: .4byte gUnknown_83CC4DC
-_080894EC:
- ldr r0, _080894F4 @ =gUnknown_83CC6F0
- ldr r2, _080894F8 @ =0x000004bc
- b _08089582
- .align 2, 0
-_080894F4: .4byte gUnknown_83CC6F0
-_080894F8: .4byte 0x000004bc
-_080894FC:
- ldr r2, _0808950C @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08089514
- ldr r0, _08089510 @ =gUnknown_83CCAB0
- adds r2, 0x65
- b _08089582
- .align 2, 0
-_0808950C: .4byte 0x00000457
-_08089510: .4byte gUnknown_83CCAB0
-_08089514:
- ldr r0, _0808951C @ =gUnknown_83CCCA4
- ldr r2, _08089520 @ =0x000004bc
- b _08089582
- .align 2, 0
-_0808951C: .4byte gUnknown_83CCCA4
-_08089520: .4byte 0x000004bc
-_08089524:
- ldr r0, _08089530 @ =gUnknown_83CD5E8
- ldr r1, _08089534 @ =gUnknown_20397A4
- ldr r1, [r1]
- ldr r2, _08089538 @ =0x000012cc
- b _08089582
- .align 2, 0
-_08089530: .4byte gUnknown_83CD5E8
-_08089534: .4byte gUnknown_20397A4
-_08089538: .4byte 0x000012cc
-_0808953C:
- ldr r0, _08089550 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldr r2, _08089554 @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08089560
- ldr r0, _08089558 @ =gUnknown_8E998CC
- ldr r2, _0808955C @ =0x000018cc
- b _08089582
- .align 2, 0
-_08089550: .4byte gUnknown_20397A4
-_08089554: .4byte 0x00000457
-_08089558: .4byte gUnknown_8E998CC
-_0808955C: .4byte 0x000018cc
-_08089560:
- ldr r0, _08089568 @ =gUnknown_8E991F8
- ldr r2, _0808956C @ =0x000018cc
- b _08089582
- .align 2, 0
-_08089568: .4byte gUnknown_8E991F8
-_0808956C: .4byte 0x000018cc
-_08089570:
- ldr r0, _0808958C @ =gUnknown_20397A4
- ldr r1, [r0]
- ldr r2, _08089590 @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _080895A4
- ldr r0, _08089594 @ =gUnknown_83CC368
- ldr r2, _08089598 @ =0x000016cc
-_08089582:
- adds r1, r2
- bl LZ77UnCompWram
- b _080895A4
- .align 2, 0
-_0808958C: .4byte gUnknown_20397A4
-_08089590: .4byte 0x00000457
-_08089594: .4byte gUnknown_83CC368
-_08089598: .4byte 0x000016cc
-_0808959C:
- movs r0, 0
- strb r0, [r1, 0x2]
- movs r0, 0x1
- b _080895B0
-_080895A4:
- ldr r0, _080895B4 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- movs r0, 0
-_080895B0:
- pop {r1}
- bx r1
- .align 2, 0
-_080895B4: .4byte gUnknown_20397A4
- thumb_func_end sub_8089424
-
- thumb_func_start sub_80895B8
-sub_80895B8: @ 80895B8
- push {lr}
- ldr r1, _080895D8 @ =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r2, r1, 0
- cmp r0, 0xD
- bls _080895CC
- b _0808973A
-_080895CC:
- lsls r0, 2
- ldr r1, _080895DC @ =_080895E0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080895D8: .4byte gMain
-_080895DC: .4byte _080895E0
- .align 2, 0
-_080895E0:
- .4byte _08089618
- .4byte _08089630
- .4byte _08089644
- .4byte _08089658
- .4byte _0808966A
- .4byte _0808967C
- .4byte _08089690
- .4byte _080896A4
- .4byte _080896B8
- .4byte _080896D4
- .4byte _080896E8
- .4byte _080896FC
- .4byte _08089710
- .4byte _0808972C
-_08089618:
- bl sub_8089C3C
- bl sub_8089DA4
- ldr r1, _0808962C @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- b _08089732
- .align 2, 0
-_0808962C: .4byte gMain
-_08089630:
- bl nullsub_51
- ldr r1, _08089640 @ =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _08089732
- .align 2, 0
-_08089640: .4byte gMain
-_08089644:
- bl sub_8089C5C
- ldr r1, _08089654 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- b _08089732
- .align 2, 0
-_08089654: .4byte gMain
-_08089658:
- bl sub_8089C80
- ldr r1, _08089678 @ =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0808966A:
- bl sub_8089CA4
- ldr r1, _08089678 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- b _08089732
- .align 2, 0
-_08089678: .4byte gMain
-_0808967C:
- bl sub_8089D0C
- ldr r1, _0808968C @ =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _08089732
- .align 2, 0
-_0808968C: .4byte gMain
-_08089690:
- bl LoadStdWindowFrameGfx
- ldr r1, _080896A0 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- b _08089732
- .align 2, 0
-_080896A0: .4byte gMain
-_080896A4:
- bl sub_808AB10
- ldr r1, _080896B4 @ =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _08089732
- .align 2, 0
-_080896B4: .4byte gMain
-_080896B8:
- bl sub_8089424
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808973E
- ldr r1, _080896D0 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- b _08089732
- .align 2, 0
-_080896D0: .4byte gMain
-_080896D4:
- bl sub_808AC6C
- ldr r1, _080896E4 @ =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _08089732
- .align 2, 0
-_080896E4: .4byte gMain
-_080896E8:
- bl sub_8089B64
- ldr r1, _080896F8 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- b _08089732
- .align 2, 0
-_080896F8: .4byte gMain
-_080896FC:
- bl sub_8089ECC
- ldr r1, _0808970C @ =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _08089732
- .align 2, 0
-_0808970C: .4byte gMain
-_08089710:
- bl sub_808ACE4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808973E
- ldr r1, _08089728 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- b _08089732
- .align 2, 0
-_08089728: .4byte gMain
-_0808972C:
- movs r0, 0x87
- lsls r0, 3
- adds r1, r2, r0
-_08089732:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808973E
-_0808973A:
- bl sub_8089D8C
-_0808973E:
- pop {r0}
- bx r0
- thumb_func_end sub_80895B8
-
- thumb_func_start sav12_xor_get_clamped_above
-sav12_xor_get_clamped_above: @ 8089744
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- bl GetGameStat
- cmp r0, r4
- bls _08089756
- adds r0, r4, 0
-_08089756:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sav12_xor_get_clamped_above
-
- thumb_func_start sub_808975C
-sub_808975C: @ 808975C
- push {lr}
- adds r1, r0, 0
- movs r2, 0
- ldrh r0, [r1, 0x6]
- cmp r0, 0
- bne _0808976E
- ldr r0, [r1, 0x8]
- cmp r0, 0
- beq _08089770
-_0808976E:
- movs r2, 0x1
-_08089770:
- ldrb r0, [r1, 0x3]
- cmp r0, 0
- beq _0808977C
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_0808977C:
- ldrh r0, [r1, 0x1A]
- cmp r0, 0x31
- bls _08089788
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_08089788:
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _08089794
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_08089794:
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end sub_808975C
-
- thumb_func_start sub_808979C
-sub_808979C: @ 808979C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- ldr r7, _08089888 @ =gSaveBlock2Ptr
- ldr r1, [r7]
- ldrb r0, [r1, 0x8]
- movs r6, 0
- strb r0, [r5]
- ldrh r0, [r1, 0xE]
- strh r0, [r5, 0x10]
- ldrb r0, [r1, 0x10]
- strh r0, [r5, 0x12]
- movs r0, 0x1
- bl GetGameStat
- adds r4, r0, 0
- movs r0, 0xA
- bl GetGameStat
- cmp r0, 0
- bne _080897D0
- movs r4, 0
-_080897D0:
- lsrs r0, r4, 16
- strh r0, [r5, 0x6]
- lsrs r1, r4, 8
- movs r2, 0xFF
- ands r1, r2
- strh r1, [r5, 0x8]
- ands r4, r2
- strh r4, [r5, 0xA]
- ldr r1, _0808988C @ =0x000003e7
- cmp r0, r1
- bls _080897EE
- strh r1, [r5, 0x6]
- movs r0, 0x3B
- strh r0, [r5, 0x8]
- strh r0, [r5, 0xA]
-_080897EE:
- ldr r0, _08089890 @ =0x00000829
- bl FlagGet
- strb r0, [r5, 0x2]
- bl HasAllHoennMons
- strb r0, [r5, 0x3]
- bl sub_808A0E0
- strh r0, [r5, 0xC]
- ldr r0, [r7]
- ldrb r1, [r0, 0xB]
- lsls r1, 8
- ldrb r0, [r0, 0xA]
- orrs r0, r1
- strh r0, [r5, 0xE]
- ldr r4, _08089894 @ =0x0000270f
- movs r0, 0x17
- adds r1, r4, 0
- bl sav12_xor_get_clamped_above
- strh r0, [r5, 0x14]
- movs r0, 0x18
- adds r1, r4, 0
- bl sav12_xor_get_clamped_above
- strh r0, [r5, 0x16]
- ldr r1, _08089898 @ =0x0000ffff
- movs r0, 0x15
- bl sav12_xor_get_clamped_above
- strh r0, [r5, 0x20]
- strh r6, [r5, 0x18]
- strh r6, [r5, 0x1A]
- strh r6, [r5, 0x1C]
- strh r6, [r5, 0x1E]
- movs r0, 0
- strb r0, [r5, 0x4]
- ldr r4, _0808989C @ =gSaveBlock1Ptr
- ldr r0, [r4]
- movs r1, 0xA4
- lsls r1, 2
- adds r0, r1
- bl GetMoney
- str r0, [r5, 0x24]
- movs r2, 0
- adds r7, r5, 0
- adds r7, 0x30
- adds r6, r5, 0
- adds r6, 0x28
- ldr r0, [r4]
- ldr r1, _080898A0 @ =0x00002ca0
- adds r3, r0, r1
-_0808985A:
- lsls r0, r2, 1
- adds r1, r6, r0
- adds r0, r3, r0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _0808985A
- ldr r0, _08089888 @ =gSaveBlock2Ptr
- ldr r1, [r0]
- adds r0, r7, 0
- bl StringCopy
- mov r0, r8
- cmp r0, 0
- bne _080898A4
- adds r0, r5, 0
- bl sub_808975C
- b _080898DC
- .align 2, 0
-_08089888: .4byte gSaveBlock2Ptr
-_0808988C: .4byte 0x000003e7
-_08089890: .4byte 0x00000829
-_08089894: .4byte 0x0000270f
-_08089898: .4byte 0x0000ffff
-_0808989C: .4byte gSaveBlock1Ptr
-_080898A0: .4byte 0x00002ca0
-_080898A4:
- mov r1, r8
- cmp r1, 0x1
- bne _080898DE
- movs r0, 0
- strb r0, [r5, 0x1]
- ldrh r0, [r5, 0x6]
- cmp r0, 0
- bne _080898BA
- ldr r0, [r5, 0x8]
- cmp r0, 0
- beq _080898BE
-_080898BA:
- mov r0, r8
- strb r0, [r5, 0x1]
-_080898BE:
- bl HasAllKantoMons
- lsls r0, 16
- cmp r0, 0
- beq _080898CE
- ldrb r0, [r5, 0x1]
- adds r0, 0x1
- strb r0, [r5, 0x1]
-_080898CE:
- bl HasAllMons
- lsls r0, 16
- cmp r0, 0
- beq _080898DE
- ldrb r0, [r5, 0x1]
- adds r0, 0x1
-_080898DC:
- strb r0, [r5, 0x1]
-_080898DE:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_808979C
-
- thumb_func_start sub_80898E8
-sub_80898E8: @ 80898E8
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r4, 0
- adds r1, r5, 0
- adds r1, 0x38
- movs r0, 0x4
- strb r0, [r1]
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_808979C
- bl sub_808B800
- lsls r0, 24
- cmp r0, 0
- beq _0808990A
- b _08089A60
-_0808990A:
- strb r4, [r5, 0x1]
- ldrh r0, [r5, 0x6]
- cmp r0, 0
- bne _08089918
- ldr r0, [r5, 0x8]
- cmp r0, 0
- beq _0808991C
-_08089918:
- movs r0, 0x1
- strb r0, [r5, 0x1]
-_0808991C:
- bl HasAllKantoMons
- strb r0, [r5, 0x3]
- bl HasAllMons
- adds r6, r5, 0
- adds r6, 0x4D
- strb r0, [r6]
- ldr r0, _0808999C @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r2, _080899A0 @ =0x00000b14
- adds r1, r0, r2
- ldrh r1, [r1]
- str r1, [r5, 0x44]
- movs r1, 0xB0
- lsls r1, 4
- adds r0, r1
- ldrh r0, [r0]
- str r0, [r5, 0x48]
- ldr r4, _080899A4 @ =0x0000ffff
- movs r0, 0x33
- adds r1, r4, 0
- bl sav12_xor_get_clamped_above
- str r0, [r5, 0x3C]
- movs r0, 0x32
- adds r1, r4, 0
- bl sav12_xor_get_clamped_above
- str r0, [r5, 0x40]
- adds r1, r5, 0
- adds r1, 0x4C
- movs r0, 0x1
- strb r0, [r1]
- ldrb r0, [r5, 0x3]
- cmp r0, 0
- beq _0808996C
- ldrb r0, [r5, 0x1]
- adds r0, 0x1
- strb r0, [r5, 0x1]
-_0808996C:
- ldrb r0, [r6]
- cmp r0, 0
- beq _08089978
- ldrb r0, [r5, 0x1]
- adds r0, 0x1
- strb r0, [r5, 0x1]
-_08089978:
- ldr r0, [r5, 0x44]
- cmp r0, 0xC7
- bls _0808998A
- ldr r0, [r5, 0x48]
- cmp r0, 0xC7
- bls _0808998A
- ldrb r0, [r5, 0x1]
- adds r0, 0x1
- strb r0, [r5, 0x1]
-_0808998A:
- ldrh r4, [r5, 0xE]
- movs r0, 0x7
- ands r4, r0
- ldrb r0, [r5]
- cmp r0, 0x1
- bne _080899AC
- ldr r0, _080899A8 @ =gUnknown_83CD8F8
- adds r0, 0x8
- b _080899AE
- .align 2, 0
-_0808999C: .4byte gSaveBlock2Ptr
-_080899A0: .4byte 0x00000b14
-_080899A4: .4byte 0x0000ffff
-_080899A8: .4byte gUnknown_83CD8F8
-_080899AC:
- ldr r0, _08089A68 @ =gUnknown_83CD8F8
-_080899AE:
- adds r0, r4, r0
- ldrb r0, [r0]
- adds r1, r5, 0
- adds r1, 0x4F
- strb r0, [r1]
- ldr r0, _08089A6C @ =0x00004049
- bl VarGet
- adds r1, r5, 0
- adds r1, 0x50
- strb r0, [r1]
- ldr r0, _08089A70 @ =0x0000404a
- bl VarGet
- adds r1, r5, 0
- adds r1, 0x51
- strb r0, [r1]
- ldr r0, _08089A74 @ =0x0000404b
- bl VarGet
- adds r1, r5, 0
- adds r1, 0x52
- strb r0, [r1]
- ldr r0, _08089A78 @ =0x00004042
- bl VarGet
- adds r1, r5, 0
- adds r1, 0x4E
- strb r0, [r1]
- ldr r0, _08089A7C @ =0x00004043
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- bl MailSpeciesToIconSpecies
- adds r1, r5, 0
- adds r1, 0x54
- strh r0, [r1]
- ldr r0, _08089A80 @ =0x00004044
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- bl MailSpeciesToIconSpecies
- adds r1, r5, 0
- adds r1, 0x56
- strh r0, [r1]
- ldr r0, _08089A84 @ =0x00004045
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- bl MailSpeciesToIconSpecies
- adds r1, r5, 0
- adds r1, 0x58
- strh r0, [r1]
- ldr r0, _08089A88 @ =0x00004046
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- bl MailSpeciesToIconSpecies
- adds r1, r5, 0
- adds r1, 0x5A
- strh r0, [r1]
- ldr r0, _08089A8C @ =0x00004047
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- bl MailSpeciesToIconSpecies
- adds r1, r5, 0
- adds r1, 0x5C
- strh r0, [r1]
- ldr r0, _08089A90 @ =0x00004048
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- bl MailSpeciesToIconSpecies
- adds r1, r5, 0
- adds r1, 0x5E
- strh r0, [r1]
-_08089A60:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08089A68: .4byte gUnknown_83CD8F8
-_08089A6C: .4byte 0x00004049
-_08089A70: .4byte 0x0000404a
-_08089A74: .4byte 0x0000404b
-_08089A78: .4byte 0x00004042
-_08089A7C: .4byte 0x00004043
-_08089A80: .4byte 0x00004044
-_08089A84: .4byte 0x00004045
-_08089A88: .4byte 0x00004046
-_08089A8C: .4byte 0x00004047
-_08089A90: .4byte 0x00004048
- thumb_func_end sub_80898E8
-
- thumb_func_start sub_8089A94
-sub_8089A94: @ 8089A94
- push {r4,r5,lr}
- ldr r4, _08089B4C @ =gUnknown_20397A4
- ldr r0, [r4]
- movs r1, 0
- strb r1, [r0, 0xA]
- ldr r0, [r4]
- strb r1, [r0, 0xB]
- ldr r0, [r4]
- strb r1, [r0, 0xC]
- ldr r0, [r4]
- strb r1, [r0, 0xD]
- ldr r0, [r4]
- strb r1, [r0, 0xE]
- ldr r0, [r4]
- strb r1, [r0, 0xF]
- ldr r0, [r4]
- strb r1, [r0, 0x10]
- ldr r0, [r4]
- adds r0, 0x11
- movs r2, 0x8
- bl memset
- ldr r1, [r4]
- ldr r2, _08089B50 @ =0x0000045e
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _08089AD2
- ldrb r0, [r1, 0xA]
- adds r0, 0x1
- strb r0, [r1, 0xA]
-_08089AD2:
- ldr r1, [r4]
- ldr r3, _08089B54 @ =0x00000462
- adds r0, r1, r3
- ldrh r0, [r0]
- cmp r0, 0
- bne _08089AE8
- ldr r2, _08089B58 @ =0x00000464
- adds r0, r1, r2
- ldr r0, [r0]
- cmp r0, 0
- beq _08089AEE
-_08089AE8:
- ldrb r0, [r1, 0xB]
- adds r0, 0x1
- strb r0, [r1, 0xB]
-_08089AEE:
- ldr r2, _08089B4C @ =gUnknown_20397A4
- ldr r1, [r2]
- movs r3, 0x8E
- lsls r3, 3
- adds r0, r1, r3
- ldr r0, [r0]
- cmp r0, 0
- beq _08089B04
- ldrb r0, [r1, 0xC]
- adds r0, 0x1
- strb r0, [r1, 0xC]
-_08089B04:
- ldr r1, [r2]
- ldr r2, _08089B5C @ =0x0000047c
- adds r0, r1, r2
- ldrh r0, [r0]
- cmp r0, 0
- beq _08089B16
- ldrb r0, [r1, 0x10]
- adds r0, 0x1
- strb r0, [r1, 0x10]
-_08089B16:
- movs r5, 0
- movs r4, 0x82
- lsls r4, 4
-_08089B1C:
- lsls r0, r4, 16
- lsrs r0, 16
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _08089B38
- ldr r0, _08089B4C @ =gUnknown_20397A4
- ldr r1, [r0]
- adds r1, 0x11
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08089B38:
- adds r4, 0x1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _08089B60 @ =0x00000827
- cmp r4, r0
- bls _08089B1C
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08089B4C: .4byte gUnknown_20397A4
-_08089B50: .4byte 0x0000045e
-_08089B54: .4byte 0x00000462
-_08089B58: .4byte 0x00000464
-_08089B5C: .4byte 0x0000047c
-_08089B60: .4byte 0x00000827
- thumb_func_end sub_8089A94
-
- thumb_func_start sub_8089B64
-sub_8089B64: @ 8089B64
- push {lr}
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- movs r1, 0xFD
- lsls r1, 6
- movs r0, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0xC1
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x3F
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x1E
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0xA0
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0xF0
- bl SetGpuReg
- ldr r0, _08089BC8 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08089BCC
- movs r0, 0xC7
- bl EnableInterrupts
- b _08089BD2
- .align 2, 0
-_08089BC8: .4byte gReceivedRemoteLinkPlayers
-_08089BCC:
- movs r0, 0x3
- bl EnableInterrupts
-_08089BD2:
- pop {r0}
- bx r0
- thumb_func_end sub_8089B64
-
- thumb_func_start sub_8089BD8
-sub_8089BD8: @ 8089BD8
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- adds r0, 0x28
- movs r1, 0xA
- bl __divsi3
- lsls r0, 24
- lsrs r2, r0, 24
- asrs r0, 24
- cmp r0, 0x4
- bgt _08089BF2
- movs r2, 0
-_08089BF2:
- ldr r4, _08089C30 @ =gUnknown_20397A4
- ldr r0, [r4]
- ldr r1, _08089C34 @ =0x00000456
- adds r0, r1
- strb r2, [r0]
- ldr r0, [r4]
- adds r0, r1
- movs r1, 0
- ldrsb r1, [r0, r1]
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x54
- bl SetGpuReg
- ldr r0, [r4]
- ldr r1, _08089C38 @ =0x00007bcc
- adds r0, r1
- ldrh r2, [r0]
- lsls r1, r2, 8
- movs r0, 0xA0
- subs r0, r2
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x44
- bl SetGpuReg
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08089C30: .4byte gUnknown_20397A4
-_08089C34: .4byte 0x00000456
-_08089C38: .4byte 0x00007bcc
- thumb_func_end sub_8089BD8
-
- thumb_func_start sub_8089C3C
-sub_8089C3C: @ 8089C3C
- push {lr}
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- thumb_func_end sub_8089C3C
-
- thumb_func_start nullsub_51
-nullsub_51: @ 8089C58
- bx lr
- thumb_func_end nullsub_51
-
- thumb_func_start sub_8089C5C
-sub_8089C5C: @ 8089C5C
- sub sp, 0x4
- movs r1, 0xE0
- lsls r1, 19
- movs r0, 0
- str r0, [sp]
- ldr r0, _08089C78 @ =0x040000d4
- mov r2, sp
- str r2, [r0]
- str r1, [r0, 0x4]
- ldr r1, _08089C7C @ =0x85000100
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- add sp, 0x4
- bx lr
- .align 2, 0
-_08089C78: .4byte 0x040000d4
-_08089C7C: .4byte 0x85000100
- thumb_func_end sub_8089C5C
-
- thumb_func_start sub_8089C80
-sub_8089C80: @ 8089C80
- sub sp, 0x4
- movs r2, 0xA0
- lsls r2, 19
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r0, _08089C9C @ =0x040000d4
- str r1, [r0]
- str r2, [r0, 0x4]
- ldr r1, _08089CA0 @ =0x81000200
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- add sp, 0x4
- bx lr
- .align 2, 0
-_08089C9C: .4byte 0x040000d4
-_08089CA0: .4byte 0x81000200
- thumb_func_end sub_8089C80
-
- thumb_func_start sub_8089CA4
-sub_8089CA4: @ 8089CA4
- push {lr}
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xE
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- thumb_func_end sub_8089CA4
-
- thumb_func_start sub_8089D0C
-sub_8089D0C: @ 8089D0C
- push {lr}
- bl ResetSpriteData
- bl ResetPaletteFade
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _08089D84 @ =gUnknown_83CD888
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- 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
- ldr r0, _08089D88 @ =gUnknown_83CD898
- bl InitWindows
- bl DeactivateAllTextPrinters
- pop {r0}
- bx r0
- .align 2, 0
-_08089D84: .4byte gUnknown_83CD888
-_08089D88: .4byte gUnknown_83CD898
- thumb_func_end sub_8089D0C
-
- thumb_func_start sub_8089D8C
-sub_8089D8C: @ 8089D8C
- push {lr}
- ldr r0, _08089DA0 @ =sub_8089070
- bl SetMainCallback2
- movs r0, 0xA
- bl HelpSystem_SetSomeVariable2
- pop {r0}
- bx r0
- .align 2, 0
-_08089DA0: .4byte sub_8089070
- thumb_func_end sub_8089D8C
-
- thumb_func_start sub_8089DA4
-sub_8089DA4: @ 8089DA4
- push {lr}
- bl ResetTasks
- bl ScanlineEffect_Stop
- ldr r0, _08089DC4 @ =sub_80890C0
- movs r1, 0
- bl CreateTask
- bl sub_808B774
- bl sub_8089A94
- pop {r0}
- bx r0
- .align 2, 0
-_08089DC4: .4byte sub_80890C0
- thumb_func_end sub_8089DA4
-
- thumb_func_start sub_8089DC8
-sub_8089DC8: @ 8089DC8
- push {lr}
- ldr r0, _08089DE0 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x5
- bhi _08089E24
- lsls r0, 2
- ldr r1, _08089DE4 @ =_08089DE8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08089DE0: .4byte gUnknown_20397A4
-_08089DE4: .4byte _08089DE8
- .align 2, 0
-_08089DE8:
- .4byte _08089E00
- .4byte _08089E06
- .4byte _08089E0C
- .4byte _08089E12
- .4byte _08089E18
- .4byte _08089E1E
-_08089E00:
- bl sub_8089EEC
- b _08089E2C
-_08089E06:
- bl sub_8089F78
- b _08089E2C
-_08089E0C:
- bl sub_8089FEC
- b _08089E2C
-_08089E12:
- bl sub_808A100
- b _08089E2C
-_08089E18:
- bl sub_808A22C
- b _08089E2C
-_08089E1E:
- bl sub_808A3D0
- b _08089E2C
-_08089E24:
- movs r0, 0
- strb r0, [r1, 0x1]
- movs r0, 0x1
- b _08089E38
-_08089E2C:
- ldr r0, _08089E3C @ =gUnknown_20397A4
- ldr r1, [r0]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- movs r0, 0
-_08089E38:
- pop {r1}
- bx r1
- .align 2, 0
-_08089E3C: .4byte gUnknown_20397A4
- thumb_func_end sub_8089DC8
-
- thumb_func_start sub_8089E40
-sub_8089E40: @ 8089E40
- push {lr}
- ldr r0, _08089E58 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x7
- bhi _08089EB0
- lsls r0, 2
- ldr r1, _08089E5C @ =_08089E60
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08089E58: .4byte gUnknown_20397A4
-_08089E5C: .4byte _08089E60
- .align 2, 0
-_08089E60:
- .4byte _08089E80
- .4byte _08089E86
- .4byte _08089E8C
- .4byte _08089E92
- .4byte _08089E98
- .4byte _08089E9E
- .4byte _08089EA4
- .4byte _08089EAA
-_08089E80:
- bl sub_808A4FC
- b _08089EB8
-_08089E86:
- bl sub_808A654
- b _08089EB8
-_08089E8C:
- bl sub_808A760
- b _08089EB8
-_08089E92:
- bl sub_808A854
- b _08089EB8
-_08089E98:
- bl sub_808A91C
- b _08089EB8
-_08089E9E:
- bl sub_808A9F0
- b _08089EB8
-_08089EA4:
- bl sub_808AA78
- b _08089EB8
-_08089EAA:
- bl sub_808ABE0
- b _08089EB8
-_08089EB0:
- movs r0, 0
- strb r0, [r1, 0x1]
- movs r0, 0x1
- b _08089EC4
-_08089EB8:
- ldr r0, _08089EC8 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- movs r0, 0
-_08089EC4:
- pop {r1}
- bx r1
- .align 2, 0
-_08089EC8: .4byte gUnknown_20397A4
- thumb_func_end sub_8089E40
-
- thumb_func_start sub_8089ECC
-sub_8089ECC: @ 8089ECC
- push {lr}
- bl sub_808A4A8
- bl sub_808A5B8
- bl sub_808A6C8
- bl sub_808A810
- bl sub_808A8D0
- bl sub_808A9A4
- pop {r0}
- bx r0
- thumb_func_end sub_8089ECC
-
- thumb_func_start sub_8089EEC
-sub_8089EEC: @ 8089EEC
- push {r4,r5,lr}
- sub sp, 0x4C
- ldr r1, _08089F54 @ =gUnknown_8419CDA
- add r0, sp, 0xC
- bl StringCopy
- add r4, sp, 0x2C
- ldr r5, _08089F58 @ =gUnknown_20397A4
- ldr r1, [r5]
- ldr r0, _08089F5C @ =0x0000048c
- adds r1, r0
- adds r0, r4, 0
- bl StringCopy
- ldr r0, [r5]
- ldr r1, _08089F60 @ =0x00007bcf
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r4, 0
- bl ConvertInternationalString
- add r0, sp, 0xC
- adds r1, r4, 0
- bl StringAppend
- ldr r0, _08089F64 @ =gUnknown_83CD8E9
- ldrb r1, [r0, 0x1]
- ldr r2, _08089F68 @ =gUnknown_83CD920
- ldr r0, [r5]
- ldr r3, _08089F6C @ =0x00000457
- adds r0, r3
- ldrb r0, [r0]
- adds r2, r0, r2
- ldrb r2, [r2]
- ldr r3, _08089F70 @ =gUnknown_83CD922
- adds r0, r3
- ldrb r3, [r0]
- ldr r0, _08089F74 @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x1
- bl AddTextPrinterParameterized3
- add sp, 0x4C
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08089F54: .4byte gUnknown_8419CDA
-_08089F58: .4byte gUnknown_20397A4
-_08089F5C: .4byte 0x0000048c
-_08089F60: .4byte 0x00007bcf
-_08089F64: .4byte gUnknown_83CD8E9
-_08089F68: .4byte gUnknown_83CD920
-_08089F6C: .4byte 0x00000457
-_08089F70: .4byte gUnknown_83CD922
-_08089F74: .4byte gUnknown_83CD8E0
- thumb_func_end sub_8089EEC
-
- thumb_func_start sub_8089F78
-sub_8089F78: @ 8089F78
- push {r4,lr}
- sub sp, 0x2C
- ldr r1, _08089FCC @ =gUnknown_8419CE1
- add r0, sp, 0xC
- bl StringCopy
- ldr r4, _08089FD0 @ =gUnknown_20397A4
- ldr r1, [r4]
- ldr r2, _08089FD4 @ =0x0000046a
- adds r1, r2
- ldrh r1, [r1]
- movs r2, 0x2
- movs r3, 0x5
- bl ConvertIntToDecimalStringN
- ldr r0, _08089FD8 @ =gUnknown_83CD8E9
- ldrb r1, [r0, 0x1]
- ldr r2, _08089FDC @ =gUnknown_83CD924
- ldr r0, [r4]
- ldr r3, _08089FE0 @ =0x00000457
- adds r0, r3
- ldrb r0, [r0]
- adds r2, r0, r2
- ldrb r2, [r2]
- ldr r3, _08089FE4 @ =gUnknown_83CD926
- adds r0, r3
- ldrb r3, [r0]
- ldr r0, _08089FE8 @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x1
- bl AddTextPrinterParameterized3
- add sp, 0x2C
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08089FCC: .4byte gUnknown_8419CE1
-_08089FD0: .4byte gUnknown_20397A4
-_08089FD4: .4byte 0x0000046a
-_08089FD8: .4byte gUnknown_83CD8E9
-_08089FDC: .4byte gUnknown_83CD924
-_08089FE0: .4byte 0x00000457
-_08089FE4: .4byte gUnknown_83CD926
-_08089FE8: .4byte gUnknown_83CD8E0
- thumb_func_end sub_8089F78
-
- thumb_func_start sub_8089FEC
-sub_8089FEC: @ 8089FEC
- push {r4-r7,lr}
- sub sp, 0x18
- ldr r1, _0808A068 @ =gUnknown_8419CED
- add r0, sp, 0xC
- bl StringCopy
- ldr r4, _0808A06C @ =gUnknown_20397A4
- ldr r1, [r4]
- movs r2, 0x90
- lsls r2, 3
- adds r1, r2
- ldr r1, [r1]
- movs r2, 0
- movs r3, 0x6
- bl ConvertIntToDecimalStringN
- ldr r0, [r4]
- ldr r1, _0808A070 @ =0x00000457
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808A080
- add r0, sp, 0xC
- bl StringLength
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- movs r2, 0x7A
- negs r2, r2
- adds r0, r2, 0
- subs r0, r1
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0808A074 @ =gUnknown_83CD8E9
- ldrb r6, [r0, 0x1]
- ldr r5, _0808A078 @ =gUnknown_83CD8E0
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, _0808A07C @ =gUnknown_8419CE7
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x14
- movs r3, 0x38
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- adds r2, r7, 0
- movs r3, 0x38
- bl AddTextPrinterParameterized3
- b _0808A0CA
- .align 2, 0
-_0808A068: .4byte gUnknown_8419CED
-_0808A06C: .4byte gUnknown_20397A4
-_0808A070: .4byte 0x00000457
-_0808A074: .4byte gUnknown_83CD8E9
-_0808A078: .4byte gUnknown_83CD8E0
-_0808A07C: .4byte gUnknown_8419CE7
-_0808A080:
- add r0, sp, 0xC
- bl StringLength
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- movs r0, 0x76
- subs r0, r1
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0808A0D4 @ =gUnknown_83CD8E9
- ldrb r6, [r0, 0x1]
- ldr r5, _0808A0D8 @ =gUnknown_83CD8E0
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, _0808A0DC @ =gUnknown_8419CE7
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x10
- movs r3, 0x39
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- add r1, sp, 0xC
- str r1, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- adds r2, r7, 0
- movs r3, 0x39
- bl AddTextPrinterParameterized3
-_0808A0CA:
- add sp, 0x18
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A0D4: .4byte gUnknown_83CD8E9
-_0808A0D8: .4byte gUnknown_83CD8E0
-_0808A0DC: .4byte gUnknown_8419CE7
- thumb_func_end sub_8089FEC
-
- thumb_func_start sub_808A0E0
-sub_808A0E0: @ 808A0E0
- push {lr}
- bl IsNationalPokedexEnabled
- cmp r0, 0
- bne _0808A0F2
- movs r0, 0x1
- bl GetKantoPokedexCount
- b _0808A0F8
-_0808A0F2:
- movs r0, 0x1
- bl GetNationalPokedexCount
-_0808A0F8:
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_808A0E0
-
- thumb_func_start sub_808A100
-sub_808A100: @ 808A100
- push {r4-r7,lr}
- sub sp, 0x18
- ldr r0, _0808A198 @ =0x00000829
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _0808A112
- b _0808A212
-_0808A112:
- ldr r4, _0808A19C @ =gUnknown_20397A4
- ldr r0, [r4]
- movs r1, 0x8D
- lsls r1, 3
- adds r0, r1
- ldrh r1, [r0]
- add r0, sp, 0xC
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r0, [r4]
- ldr r2, _0808A1A0 @ =0x00000457
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808A1B4
- add r0, sp, 0xC
- bl StringLength
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- movs r2, 0x78
- negs r2, r2
- adds r0, r2, 0
- subs r0, r1
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0808A1A4 @ =gUnknown_83CD8E9
- ldrb r6, [r0, 0x1]
- ldr r5, _0808A1A8 @ =gUnknown_83CD8E0
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, _0808A1AC @ =gUnknown_8419CEF
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x14
- movs r3, 0x48
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- adds r2, r7, 0
- movs r3, 0x48
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, _0808A1B0 @ =gUnknown_8419CF7
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x8A
- movs r3, 0x48
- bl AddTextPrinterParameterized3
- b _0808A212
- .align 2, 0
-_0808A198: .4byte 0x00000829
-_0808A19C: .4byte gUnknown_20397A4
-_0808A1A0: .4byte 0x00000457
-_0808A1A4: .4byte gUnknown_83CD8E9
-_0808A1A8: .4byte gUnknown_83CD8E0
-_0808A1AC: .4byte gUnknown_8419CEF
-_0808A1B0: .4byte gUnknown_8419CF7
-_0808A1B4:
- add r0, sp, 0xC
- bl StringLength
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- movs r0, 0x78
- subs r0, r1
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0808A21C @ =gUnknown_83CD8E9
- ldrb r6, [r0, 0x1]
- ldr r5, _0808A220 @ =gUnknown_83CD8E0
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, _0808A224 @ =gUnknown_8419CEF
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x10
- movs r3, 0x49
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- add r1, sp, 0xC
- str r1, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- adds r2, r7, 0
- movs r3, 0x49
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, _0808A228 @ =gUnknown_8419CF7
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x8A
- movs r3, 0x49
- bl AddTextPrinterParameterized3
-_0808A212:
- add sp, 0x18
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A21C: .4byte gUnknown_83CD8E9
-_0808A220: .4byte gUnknown_83CD8E0
-_0808A224: .4byte gUnknown_8419CEF
-_0808A228: .4byte gUnknown_8419CF7
- thumb_func_end sub_808A100
-
- thumb_func_start sub_808A22C
-sub_808A22C: @ 808A22C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r0, _0808A2B0 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrh r5, [r0, 0xE]
- ldrb r7, [r0, 0x10]
- ldr r6, _0808A2B4 @ =gUnknown_20397A4
- ldr r2, [r6]
- ldrb r0, [r2, 0x5]
- cmp r0, 0
- beq _0808A256
- ldr r1, _0808A2B8 @ =0x0000046c
- adds r0, r2, r1
- ldrh r5, [r0]
- adds r1, 0x2
- adds r0, r2, r1
- ldrh r7, [r0]
-_0808A256:
- ldr r0, _0808A2BC @ =0x000003e7
- cmp r5, r0
- bls _0808A25E
- adds r5, r0, 0
-_0808A25E:
- cmp r7, 0x3B
- bls _0808A264
- movs r7, 0x3B
-_0808A264:
- ldr r1, _0808A2C0 @ =gUnknown_83CD930
- ldr r4, _0808A2C4 @ =0x00000457
- adds r0, r2, r4
- ldrb r0, [r0]
- adds r1, r0, r1
- ldrb r2, [r1]
- ldr r1, _0808A2C8 @ =gUnknown_83CD936
- adds r0, r1
- ldrb r3, [r0]
- movs r0, 0x32
- str r0, [sp]
- movs r0, 0xC
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelRect
- ldr r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808A2D8
- ldr r0, _0808A2CC @ =gUnknown_83CD8E9
- ldrb r1, [r0, 0x1]
- ldr r0, _0808A2D0 @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r0, _0808A2D4 @ =gUnknown_8419CFD
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x14
- movs r3, 0x58
- bl AddTextPrinterParameterized3
- b _0808A2F4
- .align 2, 0
-_0808A2B0: .4byte gSaveBlock2Ptr
-_0808A2B4: .4byte gUnknown_20397A4
-_0808A2B8: .4byte 0x0000046c
-_0808A2BC: .4byte 0x000003e7
-_0808A2C0: .4byte gUnknown_83CD930
-_0808A2C4: .4byte 0x00000457
-_0808A2C8: .4byte gUnknown_83CD936
-_0808A2CC: .4byte gUnknown_83CD8E9
-_0808A2D0: .4byte gUnknown_83CD8E0
-_0808A2D4: .4byte gUnknown_8419CFD
-_0808A2D8:
- ldr r0, _0808A3A4 @ =gUnknown_83CD8E9
- ldrb r1, [r0, 0x1]
- ldr r0, _0808A3A8 @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r0, _0808A3AC @ =gUnknown_8419CFD
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x10
- movs r3, 0x59
- bl AddTextPrinterParameterized3
-_0808A2F4:
- add r0, sp, 0xC
- adds r1, r5, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r0, _0808A3A4 @ =gUnknown_83CD8E9
- ldrb r0, [r0, 0x1]
- mov r10, r0
- ldr r1, _0808A3B0 @ =gUnknown_83CD930
- ldr r2, _0808A3B4 @ =gUnknown_20397A4
- mov r9, r2
- ldr r0, [r2]
- ldr r2, _0808A3B8 @ =0x00000457
- mov r8, r2
- add r0, r8
- ldrb r0, [r0]
- adds r1, r0, r1
- ldrb r2, [r1]
- ldr r6, _0808A3BC @ =gUnknown_83CD936
- adds r0, r6
- ldrb r3, [r0]
- ldr r0, _0808A3A8 @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r5, 0x1
- negs r5, r5
- str r5, [sp, 0x4]
- add r1, sp, 0xC
- str r1, [sp, 0x8]
- movs r0, 0x1
- mov r1, r10
- bl AddTextPrinterParameterized3
- ldr r1, _0808A3C0 @ =gUnknown_83CD932
- mov r2, r9
- ldr r4, [r2]
- mov r2, r8
- adds r0, r4, r2
- ldrb r0, [r0]
- adds r1, r0, r1
- ldrb r2, [r1]
- adds r0, r6
- ldrb r3, [r0]
- ldr r1, _0808A3C4 @ =gUnknown_83CD928
- ldrb r0, [r4, 0x7]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [sp]
- str r5, [sp, 0x4]
- ldr r0, _0808A3C8 @ =gUnknown_8419CF8
- str r0, [sp, 0x8]
- movs r0, 0x1
- mov r1, r10
- bl AddTextPrinterParameterized3
- add r0, sp, 0xC
- adds r1, r7, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r1, _0808A3CC @ =gUnknown_83CD934
- mov r2, r9
- ldr r0, [r2]
- add r0, r8
- ldrb r0, [r0]
- adds r1, r0, r1
- ldrb r2, [r1]
- adds r0, r6
- ldrb r3, [r0]
- ldr r0, _0808A3A8 @ =gUnknown_83CD8E0
- str r0, [sp]
- str r5, [sp, 0x4]
- add r1, sp, 0xC
- str r1, [sp, 0x8]
- movs r0, 0x1
- mov r1, r10
- bl AddTextPrinterParameterized3
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A3A4: .4byte gUnknown_83CD8E9
-_0808A3A8: .4byte gUnknown_83CD8E0
-_0808A3AC: .4byte gUnknown_8419CFD
-_0808A3B0: .4byte gUnknown_83CD930
-_0808A3B4: .4byte gUnknown_20397A4
-_0808A3B8: .4byte 0x00000457
-_0808A3BC: .4byte gUnknown_83CD936
-_0808A3C0: .4byte gUnknown_83CD932
-_0808A3C4: .4byte gUnknown_83CD928
-_0808A3C8: .4byte gUnknown_8419CF8
-_0808A3CC: .4byte gUnknown_83CD934
- thumb_func_end sub_808A22C
-
- thumb_func_start sub_808A3D0
-sub_808A3D0: @ 808A3D0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- ldr r7, _0808A494 @ =gUnknown_20397A4
- ldr r1, [r7]
- ldrb r0, [r1, 0x5]
- cmp r0, 0
- beq _0808A486
- ldr r0, _0808A498 @ =gUnknown_83CD938
- mov r8, r0
- ldr r4, _0808A49C @ =0x00000457
- adds r0, r1, r4
- ldrb r0, [r0]
- add r0, r8
- ldrb r3, [r0]
- ldr r6, _0808A4A0 @ =gUnknown_83CD8E0
- str r6, [sp]
- movs r5, 0x1
- negs r5, r5
- str r5, [sp, 0x4]
- adds r0, r1, 0
- adds r0, 0x19
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0xA
- bl AddTextPrinterParameterized3
- ldr r1, [r7]
- adds r1, 0x19
- movs r0, 0x2
- movs r2, 0
- bl GetStringWidth
- adds r2, r0, 0
- adds r2, 0x10
- lsls r2, 24
- lsrs r2, 24
- ldr r1, [r7]
- adds r0, r1, r4
- ldrb r0, [r0]
- add r0, r8
- ldrb r3, [r0]
- str r6, [sp]
- str r5, [sp, 0x4]
- adds r1, 0x26
- str r1, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- bl AddTextPrinterParameterized3
- ldr r0, _0808A4A4 @ =gUnknown_83CD93A
- mov r8, r0
- ldr r1, [r7]
- adds r0, r1, r4
- ldrb r0, [r0]
- add r0, r8
- ldrb r3, [r0]
- str r6, [sp]
- str r5, [sp, 0x4]
- adds r1, 0x33
- str r1, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0xA
- bl AddTextPrinterParameterized3
- ldr r1, [r7]
- adds r1, 0x33
- movs r0, 0x2
- movs r2, 0
- bl GetStringWidth
- adds r2, r0, 0
- adds r2, 0x10
- lsls r2, 24
- lsrs r2, 24
- ldr r1, [r7]
- adds r4, r1, r4
- ldrb r0, [r4]
- add r0, r8
- ldrb r3, [r0]
- str r6, [sp]
- str r5, [sp, 0x4]
- adds r1, 0x40
- str r1, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- bl AddTextPrinterParameterized3
-_0808A486:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A494: .4byte gUnknown_20397A4
-_0808A498: .4byte gUnknown_83CD938
-_0808A49C: .4byte 0x00000457
-_0808A4A0: .4byte gUnknown_83CD8E0
-_0808A4A4: .4byte gUnknown_83CD93A
- thumb_func_end sub_808A3D0
-
- thumb_func_start sub_808A4A8
-sub_808A4A8: @ 808A4A8
- push {r4,lr}
- ldr r4, _0808A4E8 @ =gUnknown_20397A4
- ldr r1, [r4]
- adds r0, r1, 0
- adds r0, 0x4D
- ldr r2, _0808A4EC @ =0x0000048c
- adds r1, r2
- bl StringCopy
- ldr r1, [r4]
- adds r0, r1, 0
- adds r0, 0x4D
- ldr r2, _0808A4F0 @ =0x00007bcf
- adds r1, r2
- ldrb r1, [r1]
- bl ConvertInternationalString
- ldr r4, [r4]
- ldr r1, _0808A4F4 @ =0x00000457
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0808A4E0
- adds r0, r4, 0
- adds r0, 0x4D
- ldr r1, _0808A4F8 @ =gUnknown_8419D0A
- bl StringAppend
-_0808A4E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A4E8: .4byte gUnknown_20397A4
-_0808A4EC: .4byte 0x0000048c
-_0808A4F0: .4byte 0x00007bcf
-_0808A4F4: .4byte 0x00000457
-_0808A4F8: .4byte gUnknown_8419D0A
- thumb_func_end sub_808A4A8
-
- thumb_func_start sub_808A4FC
-sub_808A4FC: @ 808A4FC
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r6, _0808A538 @ =gUnknown_20397A4
- ldr r4, [r6]
- ldr r0, _0808A53C @ =0x00000457
- adds r2, r4, r0
- ldrb r0, [r2]
- cmp r0, 0
- bne _0808A550
- ldr r0, _0808A540 @ =gUnknown_83CD8E9
- ldrb r1, [r0, 0x1]
- ldr r0, _0808A544 @ =gUnknown_83CD93C
- ldrb r3, [r2]
- adds r0, r3, r0
- ldrb r2, [r0]
- ldr r0, _0808A548 @ =gUnknown_83CD93E
- adds r3, r0
- ldrb r3, [r3]
- ldr r0, _0808A54C @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- adds r0, r4, 0
- adds r0, 0x4D
- str r0, [sp, 0x8]
- movs r0, 0x1
- bl AddTextPrinterParameterized3
- b _0808A59C
- .align 2, 0
-_0808A538: .4byte gUnknown_20397A4
-_0808A53C: .4byte 0x00000457
-_0808A540: .4byte gUnknown_83CD8E9
-_0808A544: .4byte gUnknown_83CD93C
-_0808A548: .4byte gUnknown_83CD93E
-_0808A54C: .4byte gUnknown_83CD8E0
-_0808A550:
- ldr r0, _0808A5A4 @ =gUnknown_83CD8E9
- ldrb r5, [r0, 0x1]
- adds r4, 0x4D
- adds r0, r5, 0
- movs r1, 0x2
- bl GetFontAttribute
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl GetStringWidth
- ldr r2, _0808A5A8 @ =gUnknown_83CD93C
- ldr r4, [r6]
- ldr r3, _0808A5AC @ =0x00000457
- adds r1, r4, r3
- ldrb r1, [r1]
- adds r2, r1, r2
- ldrb r2, [r2]
- subs r2, r0
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _0808A5B0 @ =gUnknown_83CD93E
- adds r1, r0
- ldrb r3, [r1]
- ldr r0, _0808A5B4 @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- adds r4, 0x4D
- str r4, [sp, 0x8]
- movs r0, 0x1
- adds r1, r5, 0
- bl AddTextPrinterParameterized3
-_0808A59C:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A5A4: .4byte gUnknown_83CD8E9
-_0808A5A8: .4byte gUnknown_83CD93C
-_0808A5AC: .4byte 0x00000457
-_0808A5B0: .4byte gUnknown_83CD93E
-_0808A5B4: .4byte gUnknown_83CD8E0
- thumb_func_end sub_808A4FC
-
- thumb_func_start sub_808A5B8
-sub_808A5B8: @ 808A5B8
- push {r4,r5,lr}
- sub sp, 0xC
- ldr r5, _0808A640 @ =gUnknown_20397A4
- ldr r1, [r5]
- ldrb r0, [r1, 0xB]
- cmp r0, 0
- beq _0808A636
- ldr r2, _0808A644 @ =0x00000462
- adds r0, r1, r2
- ldrh r1, [r0]
- mov r0, sp
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r0, [r5]
- adds r0, 0x93
- mov r1, sp
- bl StringCopy
- ldr r0, [r5]
- adds r0, 0x93
- ldr r4, _0808A648 @ =gUnknown_8419CF8
- adds r1, r4, 0
- movs r2, 0x2
- bl StringAppendN
- ldr r0, [r5]
- ldr r1, _0808A64C @ =0x00000464
- adds r0, r1
- ldrh r1, [r0]
- mov r0, sp
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, [r5]
- adds r0, 0x93
- mov r1, sp
- movs r2, 0x3
- bl StringAppendN
- ldr r0, [r5]
- adds r0, 0x93
- adds r1, r4, 0
- movs r2, 0x2
- bl StringAppendN
- ldr r0, [r5]
- ldr r2, _0808A650 @ =0x00000466
- adds r0, r2
- ldrh r1, [r0]
- mov r0, sp
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, [r5]
- adds r0, 0x93
- mov r1, sp
- movs r2, 0x3
- bl StringAppendN
-_0808A636:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A640: .4byte gUnknown_20397A4
-_0808A644: .4byte 0x00000462
-_0808A648: .4byte gUnknown_8419CF8
-_0808A64C: .4byte 0x00000464
-_0808A650: .4byte 0x00000466
- thumb_func_end sub_808A5B8
-
- thumb_func_start sub_808A654
-sub_808A654: @ 808A654
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r6, _0808A6AC @ =gUnknown_20397A4
- ldr r2, [r6]
- ldrb r0, [r2, 0xB]
- cmp r0, 0
- beq _0808A6A2
- ldr r0, _0808A6B0 @ =gUnknown_83CD8E9
- ldrb r5, [r0, 0x1]
- ldr r1, _0808A6B4 @ =gUnknown_83CD940
- ldr r3, _0808A6B8 @ =0x00000457
- adds r0, r2, r3
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldr r0, _0808A6BC @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, _0808A6C0 @ =gUnknown_8419D1A
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r5, 0
- movs r3, 0x23
- bl AddTextPrinterParameterized3
- ldr r0, _0808A6C4 @ =gUnknown_83CD8E3
- str r0, [sp]
- str r4, [sp, 0x4]
- ldr r0, [r6]
- adds r0, 0x93
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0xA4
- movs r3, 0x23
- bl AddTextPrinterParameterized3
-_0808A6A2:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A6AC: .4byte gUnknown_20397A4
-_0808A6B0: .4byte gUnknown_83CD8E9
-_0808A6B4: .4byte gUnknown_83CD940
-_0808A6B8: .4byte 0x00000457
-_0808A6BC: .4byte gUnknown_83CD8E0
-_0808A6C0: .4byte gUnknown_8419D1A
-_0808A6C4: .4byte gUnknown_83CD8E3
- thumb_func_end sub_808A654
-
- thumb_func_start sub_808A6C8
-sub_808A6C8: @ 808A6C8
- push {r4,lr}
- sub sp, 0x20
- ldr r4, _0808A740 @ =gUnknown_20397A4
- ldr r1, [r4]
- ldrb r0, [r1, 0xC]
- cmp r0, 0
- beq _0808A736
- adds r0, r1, 0
- adds r0, 0xD9
- ldr r2, _0808A744 @ =gUnknown_83CD944
- ldr r3, _0808A748 @ =0x00000457
- adds r1, r3
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _0808A74C @ =0x0000011f
- adds r0, r1
- ldr r1, _0808A750 @ =gUnknown_8419D4F
- bl StringCopy
- ldr r0, [r4]
- movs r3, 0x8E
- lsls r3, 3
- adds r0, r3
- ldrh r1, [r0]
- mov r0, sp
- movs r2, 0x1
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- ldr r0, [r4]
- ldr r1, _0808A754 @ =0x00000165
- adds r0, r1
- mov r1, sp
- bl StringCopy
- ldr r0, [r4]
- ldr r3, _0808A758 @ =0x00000472
- adds r0, r3
- ldrh r1, [r0]
- mov r0, sp
- movs r2, 0x1
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- ldr r0, [r4]
- ldr r1, _0808A75C @ =0x000001ab
- adds r0, r1
- mov r1, sp
- bl StringCopy
-_0808A736:
- add sp, 0x20
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A740: .4byte gUnknown_20397A4
-_0808A744: .4byte gUnknown_83CD944
-_0808A748: .4byte 0x00000457
-_0808A74C: .4byte 0x0000011f
-_0808A750: .4byte gUnknown_8419D4F
-_0808A754: .4byte 0x00000165
-_0808A758: .4byte 0x00000472
-_0808A75C: .4byte 0x000001ab
- thumb_func_end sub_808A6C8
-
- thumb_func_start sub_808A760
-sub_808A760: @ 808A760
- push {r4-r7,lr}
- sub sp, 0xC
- ldr r7, _0808A7EC @ =gUnknown_20397A4
- ldr r3, [r7]
- ldrb r0, [r3, 0xC]
- cmp r0, 0
- beq _0808A7E2
- ldr r0, _0808A7F0 @ =gUnknown_83CD8E9
- ldrb r6, [r0, 0x1]
- ldr r1, _0808A7F4 @ =gUnknown_83CD940
- ldr r2, _0808A7F8 @ =0x00000457
- adds r0, r3, r2
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldr r5, _0808A7FC @ =gUnknown_83CD8E0
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- adds r0, r3, 0
- adds r0, 0xD9
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r3, 0x33
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, [r7]
- ldr r1, _0808A800 @ =0x0000011f
- adds r0, r1
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x82
- movs r3, 0x33
- bl AddTextPrinterParameterized3
- ldr r5, _0808A804 @ =gUnknown_83CD8E3
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, [r7]
- ldr r2, _0808A808 @ =0x00000165
- adds r0, r2
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x90
- movs r3, 0x33
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, [r7]
- ldr r1, _0808A80C @ =0x000001ab
- adds r0, r1
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0xC0
- movs r3, 0x33
- bl AddTextPrinterParameterized3
-_0808A7E2:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A7EC: .4byte gUnknown_20397A4
-_0808A7F0: .4byte gUnknown_83CD8E9
-_0808A7F4: .4byte gUnknown_83CD940
-_0808A7F8: .4byte 0x00000457
-_0808A7FC: .4byte gUnknown_83CD8E0
-_0808A800: .4byte 0x0000011f
-_0808A804: .4byte gUnknown_83CD8E3
-_0808A808: .4byte 0x00000165
-_0808A80C: .4byte 0x000001ab
- thumb_func_end sub_808A760
-
- thumb_func_start sub_808A810
-sub_808A810: @ 808A810
- push {r4,lr}
- ldr r4, _0808A840 @ =gUnknown_20397A4
- ldr r1, [r4]
- ldrb r0, [r1, 0x10]
- cmp r0, 0
- beq _0808A83A
- ldr r2, _0808A844 @ =0x000001f1
- adds r0, r1, r2
- ldr r1, _0808A848 @ =gUnknown_8419D57
- bl StringCopy
- ldr r1, [r4]
- ldr r2, _0808A84C @ =0x00000237
- adds r0, r1, r2
- ldr r2, _0808A850 @ =0x0000047c
- adds r1, r2
- ldrh r1, [r1]
- movs r2, 0x1
- movs r3, 0x5
- bl ConvertIntToDecimalStringN
-_0808A83A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A840: .4byte gUnknown_20397A4
-_0808A844: .4byte 0x000001f1
-_0808A848: .4byte gUnknown_8419D57
-_0808A84C: .4byte 0x00000237
-_0808A850: .4byte 0x0000047c
- thumb_func_end sub_808A810
-
- thumb_func_start sub_808A854
-sub_808A854: @ 808A854
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r6, _0808A8B0 @ =gUnknown_20397A4
- ldr r3, [r6]
- ldrb r0, [r3, 0x10]
- cmp r0, 0
- beq _0808A8A6
- ldr r0, _0808A8B4 @ =gUnknown_83CD8E9
- ldrb r5, [r0, 0x1]
- ldr r1, _0808A8B8 @ =gUnknown_83CD940
- ldr r2, _0808A8BC @ =0x00000457
- adds r0, r3, r2
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldr r0, _0808A8C0 @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r1, _0808A8C4 @ =0x000001f1
- adds r0, r3, r1
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r5, 0
- movs r3, 0x43
- bl AddTextPrinterParameterized3
- ldr r0, _0808A8C8 @ =gUnknown_83CD8E3
- str r0, [sp]
- str r4, [sp, 0x4]
- ldr r0, [r6]
- ldr r2, _0808A8CC @ =0x00000237
- adds r0, r2
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0xBA
- movs r3, 0x43
- bl AddTextPrinterParameterized3
-_0808A8A6:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A8B0: .4byte gUnknown_20397A4
-_0808A8B4: .4byte gUnknown_83CD8E9
-_0808A8B8: .4byte gUnknown_83CD940
-_0808A8BC: .4byte 0x00000457
-_0808A8C0: .4byte gUnknown_83CD8E0
-_0808A8C4: .4byte 0x000001f1
-_0808A8C8: .4byte gUnknown_83CD8E3
-_0808A8CC: .4byte 0x00000237
- thumb_func_end sub_808A854
-
- thumb_func_start sub_808A8D0
-sub_808A8D0: @ 808A8D0
- push {r4,lr}
- ldr r4, _0808A908 @ =gUnknown_20397A4
- ldr r1, [r4]
- ldr r2, _0808A90C @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808A900
- ldr r2, _0808A910 @ =0x0000027d
- adds r0, r1, r2
- ldr r1, _0808A914 @ =gUnknown_8419D7D
- bl StringCopy
- ldr r1, [r4]
- ldr r2, _0808A918 @ =0x000002c3
- adds r0, r1, r2
- movs r2, 0x93
- lsls r2, 3
- adds r1, r2
- ldr r1, [r1]
- movs r2, 0x1
- movs r3, 0x5
- bl ConvertIntToDecimalStringN
-_0808A900:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A908: .4byte gUnknown_20397A4
-_0808A90C: .4byte 0x00000457
-_0808A910: .4byte 0x0000027d
-_0808A914: .4byte gUnknown_8419D7D
-_0808A918: .4byte 0x000002c3
- thumb_func_end sub_808A8D0
-
- thumb_func_start sub_808A91C
-sub_808A91C: @ 808A91C
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r6, _0808A984 @ =gUnknown_20397A4
- ldr r3, [r6]
- ldr r0, _0808A988 @ =0x00000457
- adds r2, r3, r0
- ldrb r0, [r2]
- cmp r0, 0x1
- beq _0808A97A
- movs r1, 0x93
- lsls r1, 3
- adds r0, r3, r1
- ldr r0, [r0]
- cmp r0, 0
- beq _0808A97A
- ldr r0, _0808A98C @ =gUnknown_83CD8E9
- ldrb r5, [r0, 0x1]
- ldr r1, _0808A990 @ =gUnknown_83CD940
- ldrb r0, [r2]
- adds r0, r1
- ldrb r2, [r0]
- ldr r0, _0808A994 @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r1, _0808A998 @ =0x0000027d
- adds r0, r3, r1
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r5, 0
- movs r3, 0x63
- bl AddTextPrinterParameterized3
- ldr r0, _0808A99C @ =gUnknown_83CD8E3
- str r0, [sp]
- str r4, [sp, 0x4]
- ldr r0, [r6]
- ldr r1, _0808A9A0 @ =0x000002c3
- adds r0, r1
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0xBA
- movs r3, 0x63
- bl AddTextPrinterParameterized3
-_0808A97A:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A984: .4byte gUnknown_20397A4
-_0808A988: .4byte 0x00000457
-_0808A98C: .4byte gUnknown_83CD8E9
-_0808A990: .4byte gUnknown_83CD940
-_0808A994: .4byte gUnknown_83CD8E0
-_0808A998: .4byte 0x0000027d
-_0808A99C: .4byte gUnknown_83CD8E3
-_0808A9A0: .4byte 0x000002c3
- thumb_func_end sub_808A91C
-
- thumb_func_start sub_808A9A4
-sub_808A9A4: @ 808A9A4
- push {r4,lr}
- ldr r4, _0808A9D8 @ =gUnknown_20397A4
- ldr r1, [r4]
- ldr r2, _0808A9DC @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808A9D2
- ldr r2, _0808A9E0 @ =0x00000309
- adds r0, r1, r2
- ldr r1, _0808A9E4 @ =gUnknown_8419D66
- bl StringCopy
- ldr r1, [r4]
- ldr r2, _0808A9E8 @ =0x0000034f
- adds r0, r1, r2
- ldr r2, _0808A9EC @ =0x0000049c
- adds r1, r2
- ldr r1, [r1]
- movs r2, 0x1
- movs r3, 0x5
- bl ConvertIntToDecimalStringN
-_0808A9D2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A9D8: .4byte gUnknown_20397A4
-_0808A9DC: .4byte 0x00000457
-_0808A9E0: .4byte 0x00000309
-_0808A9E4: .4byte gUnknown_8419D66
-_0808A9E8: .4byte 0x0000034f
-_0808A9EC: .4byte 0x0000049c
- thumb_func_end sub_808A9A4
-
- thumb_func_start sub_808A9F0
-sub_808A9F0: @ 808A9F0
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r6, _0808AA54 @ =gUnknown_20397A4
- ldr r3, [r6]
- ldr r0, _0808AA58 @ =0x00000457
- adds r2, r3, r0
- ldrb r0, [r2]
- cmp r0, 0x1
- beq _0808AA4C
- ldr r1, _0808AA5C @ =0x0000049c
- adds r0, r3, r1
- ldr r0, [r0]
- cmp r0, 0
- beq _0808AA4C
- ldr r0, _0808AA60 @ =gUnknown_83CD8E9
- ldrb r5, [r0, 0x1]
- ldr r1, _0808AA64 @ =gUnknown_83CD940
- ldrb r0, [r2]
- adds r0, r1
- ldrb r2, [r0]
- ldr r0, _0808AA68 @ =gUnknown_83CD8E0
- str r0, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r1, _0808AA6C @ =0x00000309
- adds r0, r3, r1
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r5, 0
- movs r3, 0x53
- bl AddTextPrinterParameterized3
- ldr r0, _0808AA70 @ =gUnknown_83CD8E3
- str r0, [sp]
- str r4, [sp, 0x4]
- ldr r0, [r6]
- ldr r1, _0808AA74 @ =0x0000034f
- adds r0, r1
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0xBA
- movs r3, 0x53
- bl AddTextPrinterParameterized3
-_0808AA4C:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808AA54: .4byte gUnknown_20397A4
-_0808AA58: .4byte 0x00000457
-_0808AA5C: .4byte 0x0000049c
-_0808AA60: .4byte gUnknown_83CD8E9
-_0808AA64: .4byte gUnknown_83CD940
-_0808AA68: .4byte gUnknown_83CD8E0
-_0808AA6C: .4byte 0x00000309
-_0808AA70: .4byte gUnknown_83CD8E3
-_0808AA74: .4byte 0x0000034f
- thumb_func_end sub_808A9F0
-
- thumb_func_start sub_808AA78
-sub_808AA78: @ 808AA78
- push {r4,r5,lr}
- sub sp, 0x20
- ldr r1, _0808AB00 @ =gUnknown_83CD94C
- add r0, sp, 0x10
- movs r2, 0x6
- bl memcpy
- add r4, sp, 0x18
- ldr r1, _0808AB04 @ =gUnknown_83CD952
- adds r0, r4, 0
- movs r2, 0x6
- bl memcpy
- ldr r0, _0808AB08 @ =gUnknown_20397A4
- ldr r0, [r0]
- ldr r1, _0808AB0C @ =0x00000457
- adds r0, r1
- ldrb r0, [r0]
- adds r5, r4, 0
- cmp r0, 0x1
- beq _0808AAF8
- movs r4, 0
-_0808AAA4:
- ldr r0, _0808AB08 @ =gUnknown_20397A4
- ldr r0, [r0]
- lsls r1, r4, 1
- movs r2, 0x96
- lsls r2, 3
- adds r0, r2
- adds r1, r0, r1
- ldrh r0, [r1]
- cmp r0, 0
- beq _0808AAEE
- bl GetMonIconPaletteIndexFromSpecies
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r4, 20
- movs r2, 0xE0
- lsls r2, 16
- adds r1, r2
- lsrs r1, 16
- adds r2, r5, r4
- ldrb r2, [r2]
- adds r2, 0x3
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0x4
- str r3, [sp]
- str r3, [sp, 0x4]
- add r0, sp
- adds r0, 0x10
- ldrb r0, [r0]
- str r0, [sp, 0x8]
- movs r0, 0x1
- str r0, [sp, 0xC]
- movs r0, 0x3
- movs r3, 0xF
- bl WriteSequenceToBgTilemapBuffer
-_0808AAEE:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _0808AAA4
-_0808AAF8:
- add sp, 0x20
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808AB00: .4byte gUnknown_83CD94C
-_0808AB04: .4byte gUnknown_83CD952
-_0808AB08: .4byte gUnknown_20397A4
-_0808AB0C: .4byte 0x00000457
- thumb_func_end sub_808AA78
-
- thumb_func_start sub_808AB10
-sub_808AB10: @ 808AB10
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, _0808AB40 @ =gMonIconPalettes
- ldr r4, _0808AB44 @ =gUnknown_20397A4
- ldr r1, [r4]
- ldr r5, _0808AB48 @ =0x00000396
- adds r1, r5
- movs r2, 0x60
- bl CpuSet
- ldr r4, [r4]
- ldr r1, _0808AB4C @ =0x000004aa
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808AB50
- cmp r0, 0x1
- ble _0808AB88
- cmp r0, 0x2
- beq _0808AB68
- cmp r0, 0x3
- beq _0808AB80
- b _0808AB88
- .align 2, 0
-_0808AB40: .4byte gMonIconPalettes
-_0808AB44: .4byte gUnknown_20397A4
-_0808AB48: .4byte 0x00000396
-_0808AB4C: .4byte 0x000004aa
-_0808AB50:
- ldr r2, _0808AB64 @ =0x00000396
- adds r0, r4, r2
- movs r1, 0
- str r1, [sp]
- movs r1, 0x60
- movs r2, 0
- movs r3, 0
- bl TintPalette_CustomTone
- b _0808AB88
- .align 2, 0
-_0808AB64: .4byte 0x00000396
-_0808AB68:
- adds r0, r4, r5
- movs r2, 0xFA
- lsls r2, 1
- movs r3, 0xA5
- lsls r3, 1
- movs r1, 0x9B
- lsls r1, 1
- str r1, [sp]
- movs r1, 0x60
- bl TintPalette_CustomTone
- b _0808AB88
-_0808AB80:
- adds r0, r4, r5
- movs r1, 0x60
- bl TintPalette_SepiaTone
-_0808AB88:
- ldr r0, _0808ABD8 @ =gUnknown_20397A4
- ldr r0, [r0]
- ldr r1, _0808ABDC @ =0x00000396
- adds r0, r1
- movs r1, 0x50
- movs r2, 0xC0
- bl LoadPalette
- movs r4, 0
-_0808AB9A:
- ldr r0, _0808ABD8 @ =gUnknown_20397A4
- ldr r0, [r0]
- lsls r1, r4, 1
- movs r2, 0x96
- lsls r2, 3
- adds r0, r2
- adds r0, r1
- ldrh r0, [r0]
- movs r1, 0
- bl GetMonIconTiles
- adds r1, r0, 0
- lsls r3, r4, 20
- movs r0, 0x80
- lsls r0, 14
- adds r3, r0
- lsrs r3, 16
- movs r0, 0x3
- movs r2, 0x80
- lsls r2, 2
- bl LoadBgTiles
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _0808AB9A
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808ABD8: .4byte gUnknown_20397A4
-_0808ABDC: .4byte 0x00000396
- thumb_func_end sub_808AB10
-
- thumb_func_start sub_808ABE0
-sub_808ABE0: @ 808ABE0
- push {r4,lr}
- sub sp, 0x14
- ldr r1, _0808AC5C @ =gUnknown_83CD958
- add r0, sp, 0x10
- movs r2, 0x4
- bl memcpy
- ldr r0, _0808AC60 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldr r2, _0808AC64 @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0808AC52
- adds r2, 0x51
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0808AC52
- movs r4, 0
-_0808AC08:
- ldr r0, _0808AC60 @ =gUnknown_20397A4
- ldr r0, [r0]
- ldr r1, _0808AC68 @ =0x000004ac
- adds r0, r1
- adds r0, r4
- ldrb r3, [r0]
- cmp r3, 0
- beq _0808AC48
- lsls r1, r4, 18
- movs r2, 0xA0
- lsls r2, 17
- adds r1, r2
- lsrs r1, 16
- lsls r2, r4, 1
- adds r2, r4
- adds r2, 0x2
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x2
- str r0, [sp]
- str r0, [sp, 0x4]
- subs r0, r3, 0x1
- add r0, sp
- adds r0, 0x10
- ldrb r0, [r0]
- str r0, [sp, 0x8]
- movs r0, 0x1
- str r0, [sp, 0xC]
- movs r0, 0x3
- movs r3, 0x2
- bl WriteSequenceToBgTilemapBuffer
-_0808AC48:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2
- bls _0808AC08
-_0808AC52:
- add sp, 0x14
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808AC5C: .4byte gUnknown_83CD958
-_0808AC60: .4byte gUnknown_20397A4
-_0808AC64: .4byte 0x00000457
-_0808AC68: .4byte 0x000004ac
- thumb_func_end sub_808ABE0
-
- thumb_func_start sub_808AC6C
-sub_808AC6C: @ 808AC6C
- push {lr}
- ldr r0, _0808ACB0 @ =gUnknown_83CD320
- movs r1, 0xB0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0808ACB4 @ =gUnknown_83CD340
- movs r1, 0xC0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0808ACB8 @ =gUnknown_83CD360
- movs r1, 0xD0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0808ACBC @ =gUnknown_83CD380
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0808ACC0 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldr r0, _0808ACC4 @ =0x000016cc
- adds r1, r0
- movs r2, 0x80
- lsls r2, 3
- movs r0, 0x3
- movs r3, 0x80
- bl LoadBgTiles
- pop {r0}
- bx r0
- .align 2, 0
-_0808ACB0: .4byte gUnknown_83CD320
-_0808ACB4: .4byte gUnknown_83CD340
-_0808ACB8: .4byte gUnknown_83CD360
-_0808ACBC: .4byte gUnknown_83CD380
-_0808ACC0: .4byte gUnknown_20397A4
-_0808ACC4: .4byte 0x000016cc
- thumb_func_end sub_808AC6C
-
- thumb_func_start sub_808ACC8
-sub_808ACC8: @ 808ACC8
- 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_808ACC8
-
- thumb_func_start sub_808ACE4
-sub_808ACE4: @ 808ACE4
- push {r4,lr}
- sub sp, 0x8
- ldr r0, _0808AD00 @ =gUnknown_20397A4
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- cmp r0, 0x6
- bls _0808ACF4
- b _0808AE44
-_0808ACF4:
- lsls r0, 2
- ldr r1, _0808AD04 @ =_0808AD08
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808AD00: .4byte gUnknown_20397A4
-_0808AD04: .4byte _0808AD08
- .align 2, 0
-_0808AD08:
- .4byte _0808AD24
- .4byte _0808AD3C
- .4byte _0808AD58
- .4byte _0808AD98
- .4byte _0808ADC4
- .4byte _0808AE0C
- .4byte _0808AE1C
-_0808AD24:
- ldr r0, _0808AD34 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldr r0, _0808AD38 @ =0x000012cc
- adds r1, r0
- movs r2, 0x80
- lsls r2, 3
- movs r0, 0x3
- b _0808AD48
- .align 2, 0
-_0808AD34: .4byte gUnknown_20397A4
-_0808AD38: .4byte 0x000012cc
-_0808AD3C:
- ldr r0, _0808AD50 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldr r2, _0808AD54 @ =0x000018cc
- adds r1, r2
- subs r2, 0xCC
- movs r0, 0
-_0808AD48:
- movs r3, 0
- bl LoadBgTiles
- b _0808AE7A
- .align 2, 0
-_0808AD50: .4byte gUnknown_20397A4
-_0808AD54: .4byte 0x000018cc
-_0808AD58:
- ldr r0, _0808AD6C @ =gUnknown_20397A4
- ldr r2, [r0]
- ldr r3, _0808AD70 @ =0x00000457
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0808AD78
- ldr r1, _0808AD74 @ =gUnknown_83CD8B8
- adds r3, 0x6
- b _0808AD7C
- .align 2, 0
-_0808AD6C: .4byte gUnknown_20397A4
-_0808AD70: .4byte 0x00000457
-_0808AD74: .4byte gUnknown_83CD8B8
-_0808AD78:
- ldr r1, _0808AD90 @ =gUnknown_83CD8CC
- ldr r3, _0808AD94 @ =0x0000045d
-_0808AD7C:
- adds r0, r2, r3
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0x60
- bl LoadPalette
- b _0808AE7A
- .align 2, 0
-_0808AD90: .4byte gUnknown_83CD8CC
-_0808AD94: .4byte 0x0000045d
-_0808AD98:
- ldr r0, _0808ADAC @ =gUnknown_20397A4
- ldr r0, [r0]
- ldr r1, _0808ADB0 @ =0x00000457
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0808ADB8
- ldr r0, _0808ADB4 @ =gUnknown_83CD2C0
- movs r1, 0x30
- b _0808AE10
- .align 2, 0
-_0808ADAC: .4byte gUnknown_20397A4
-_0808ADB0: .4byte 0x00000457
-_0808ADB4: .4byte gUnknown_83CD2C0
-_0808ADB8:
- ldr r0, _0808ADC0 @ =gUnknown_83CD2E0
- movs r1, 0x30
- b _0808AE10
- .align 2, 0
-_0808ADC0: .4byte gUnknown_83CD2E0
-_0808ADC4:
- ldr r0, _0808ADE4 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldr r2, _0808ADE8 @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0808ADF4
- ldr r3, _0808ADEC @ =0x0000045c
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808AE7A
- ldr r0, _0808ADF0 @ =gUnknown_83CD280
- movs r1, 0x10
- b _0808AE10
- .align 2, 0
-_0808ADE4: .4byte gUnknown_20397A4
-_0808ADE8: .4byte 0x00000457
-_0808ADEC: .4byte 0x0000045c
-_0808ADF0: .4byte gUnknown_83CD280
-_0808ADF4:
- ldr r2, _0808AE04 @ =0x0000045c
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808AE7A
- ldr r0, _0808AE08 @ =gUnknown_83CD2A0
- movs r1, 0x10
- b _0808AE10
- .align 2, 0
-_0808AE04: .4byte 0x0000045c
-_0808AE08: .4byte gUnknown_83CD2A0
-_0808AE0C:
- ldr r0, _0808AE18 @ =gUnknown_83CD300
- movs r1, 0x40
-_0808AE10:
- movs r2, 0x20
- bl LoadPalette
- b _0808AE7A
- .align 2, 0
-_0808AE18: .4byte gUnknown_83CD300
-_0808AE1C:
- ldr r4, _0808AE38 @ =gUnknown_20397A4
- ldr r1, [r4]
- ldr r3, _0808AE3C @ =0x00003bcc
- adds r1, r3
- movs r0, 0
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r0, _0808AE40 @ =0x00005bcc
- adds r1, r0
- movs r0, 0x2
- bl SetBgTilemapBuffer
- b _0808AE7A
- .align 2, 0
-_0808AE38: .4byte gUnknown_20397A4
-_0808AE3C: .4byte 0x00003bcc
-_0808AE40: .4byte 0x00005bcc
-_0808AE44:
- movs r4, 0x20
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0x1
- b _0808AE86
-_0808AE7A:
- ldr r0, _0808AE90 @ =gUnknown_20397A4
- ldr r1, [r0]
- ldrb r0, [r1, 0x3]
- adds r0, 0x1
- strb r0, [r1, 0x3]
- movs r0, 0
-_0808AE86:
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0808AE90: .4byte gUnknown_20397A4
- thumb_func_end sub_808ACE4
-
- thumb_func_start sub_808AE94
-sub_808AE94: @ 808AE94
- push {r4-r7,lr}
- adds r7, r0, 0
- ldr r0, _0808AECC @ =gUnknown_20397A4
- ldr r0, [r0]
- ldr r1, _0808AED0 @ =0x00005bcc
- adds r6, r0, r1
- movs r1, 0
-_0808AEA2:
- movs r2, 0
- lsls r5, r1, 16
- asrs r1, r5, 16
- lsls r3, r1, 5
- lsls r0, r1, 4
- subs r0, r1
- lsls r4, r0, 1
-_0808AEB0:
- lsls r0, r2, 16
- asrs r1, r0, 16
- adds r2, r0, 0
- cmp r1, 0x1D
- bgt _0808AED4
- adds r0, r3, r1
- lsls r0, 1
- adds r0, r6
- adds r1, r4, r1
- lsls r1, 1
- adds r1, r7
- ldrh r1, [r1]
- b _0808AEDC
- .align 2, 0
-_0808AECC: .4byte gUnknown_20397A4
-_0808AED0: .4byte 0x00005bcc
-_0808AED4:
- adds r0, r3, r1
- lsls r0, 1
- adds r0, r6
- ldrh r1, [r7]
-_0808AEDC:
- strh r1, [r0]
- movs r1, 0x80
- lsls r1, 9
- adds r0, r2, r1
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- ble _0808AEB0
- adds r0, r5, r1
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _0808AEA2
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_808AE94
-
- thumb_func_start sub_808AF04
-sub_808AF04: @ 808AF04
- push {r4-r7,lr}
- adds r7, r0, 0
- ldr r0, _0808AF3C @ =gUnknown_20397A4
- ldr r0, [r0]
- ldr r1, _0808AF40 @ =0x00003bcc
- adds r6, r0, r1
- movs r1, 0
-_0808AF12:
- movs r2, 0
- lsls r5, r1, 16
- asrs r1, r5, 16
- lsls r3, r1, 5
- lsls r0, r1, 4
- subs r0, r1
- lsls r4, r0, 1
-_0808AF20:
- lsls r0, r2, 16
- asrs r1, r0, 16
- adds r2, r0, 0
- cmp r1, 0x1D
- bgt _0808AF44
- adds r0, r3, r1
- lsls r0, 1
- adds r0, r6
- adds r1, r4, r1
- lsls r1, 1
- adds r1, r7
- ldrh r1, [r1]
- b _0808AF4C
- .align 2, 0
-_0808AF3C: .4byte gUnknown_20397A4
-_0808AF40: .4byte 0x00003bcc
-_0808AF44:
- adds r0, r3, r1
- lsls r0, 1
- adds r0, r6
- ldrh r1, [r7]
-_0808AF4C:
- strh r1, [r0]
- movs r1, 0x80
- lsls r1, 9
- adds r0, r2, r1
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- ble _0808AF20
- adds r0, r5, r1
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _0808AF12
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_808AF04
-
- thumb_func_start sub_808AF74
-sub_808AF74: @ 808AF74
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- movs r0, 0xC0
- mov r8, r0
- movs r2, 0x3
- mov r10, r2
- ldr r2, _0808B080 @ =gUnknown_83CD95C
- ldr r4, _0808B084 @ =gUnknown_20397A4
- ldr r1, [r4]
- ldr r3, _0808B088 @ =0x00000457
- adds r0, r1, r3
- ldrb r0, [r0]
- adds r0, r2
- ldrb r3, [r0]
- ldr r0, _0808B08C @ =0x0000045d
- adds r1, r0
- ldrb r0, [r1]
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r0, 0x4
- str r0, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x8F
- movs r2, 0xF
- bl FillBgTilemapBufferRect
- ldr r0, [r4]
- ldrb r0, [r0, 0x5]
- cmp r0, 0
- bne _0808B068
- movs r2, 0x4
- mov r9, r2
- movs r2, 0
- movs r6, 0x1
-_0808AFC2:
- ldr r0, _0808B084 @ =gUnknown_20397A4
- ldr r1, [r0]
- lsls r0, r2, 16
- asrs r7, r0, 16
- adds r1, 0x11
- adds r1, r7
- ldrb r0, [r1]
- cmp r0, 0
- beq _0808B044
- mov r3, r9
- lsls r5, r3, 24
- lsrs r5, 24
- str r6, [sp]
- str r6, [sp, 0x4]
- mov r0, r10
- str r0, [sp, 0x8]
- movs r0, 0x3
- mov r1, r8
- adds r2, r5, 0
- movs r3, 0x10
- bl FillBgTilemapBufferRect
- mov r1, r8
- adds r1, 0x1
- lsls r1, 16
- lsrs r1, 16
- mov r4, r9
- adds r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- str r6, [sp]
- str r6, [sp, 0x4]
- mov r2, r10
- str r2, [sp, 0x8]
- movs r0, 0x3
- adds r2, r4, 0
- movs r3, 0x10
- bl FillBgTilemapBufferRect
- mov r1, r8
- adds r1, 0x10
- lsls r1, 16
- lsrs r1, 16
- str r6, [sp]
- str r6, [sp, 0x4]
- mov r3, r10
- str r3, [sp, 0x8]
- movs r0, 0x3
- adds r2, r5, 0
- movs r3, 0x11
- bl FillBgTilemapBufferRect
- mov r1, r8
- adds r1, 0x11
- lsls r1, 16
- lsrs r1, 16
- str r6, [sp]
- str r6, [sp, 0x4]
- mov r0, r10
- str r0, [sp, 0x8]
- movs r0, 0x3
- adds r2, r4, 0
- movs r3, 0x11
- bl FillBgTilemapBufferRect
-_0808B044:
- adds r0, r7, 0x1
- lsls r0, 16
- mov r1, r8
- adds r1, 0x2
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- mov r2, r9
- lsls r1, r2, 16
- movs r3, 0xC0
- lsls r3, 10
- adds r1, r3
- lsrs r1, 16
- mov r9, r1
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _0808AFC2
-_0808B068:
- movs r0, 0x3
- bl CopyBgTilemapBufferToVram
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B080: .4byte gUnknown_83CD95C
-_0808B084: .4byte gUnknown_20397A4
-_0808B088: .4byte 0x00000457
-_0808B08C: .4byte 0x0000045d
- thumb_func_end sub_808AF74
-
- thumb_func_start sub_808B090
-sub_808B090: @ 808B090
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r6, _0808B138 @ =gUnknown_20397A4
- ldr r1, [r6]
- ldr r2, _0808B13C @ =0x00000457
- adds r0, r1, r2
- ldrb r5, [r0]
- cmp r5, 0x1
- beq _0808B144
- ldrb r0, [r1, 0x10]
- cmp r0, 0
- beq _0808B0CE
- movs r4, 0x1
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x8D
- movs r2, 0x1A
- movs r3, 0x9
- bl FillBgTilemapBufferRect
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x9D
- movs r2, 0x1A
- movs r3, 0xA
- bl FillBgTilemapBufferRect
-_0808B0CE:
- ldr r0, [r6]
- movs r1, 0x93
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- beq _0808B102
- movs r4, 0x1
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x8D
- movs r2, 0x15
- movs r3, 0xD
- bl FillBgTilemapBufferRect
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x9D
- movs r2, 0x15
- movs r3, 0xE
- bl FillBgTilemapBufferRect
-_0808B102:
- ldr r0, [r6]
- ldr r2, _0808B140 @ =0x0000049c
- adds r0, r2
- ldr r0, [r0]
- cmp r0, 0
- beq _0808B170
- movs r4, 0x1
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x8D
- movs r2, 0x1B
- movs r3, 0xB
- bl FillBgTilemapBufferRect
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x9D
- movs r2, 0x1B
- movs r3, 0xC
- bl FillBgTilemapBufferRect
- b _0808B170
- .align 2, 0
-_0808B138: .4byte gUnknown_20397A4
-_0808B13C: .4byte 0x00000457
-_0808B140: .4byte 0x0000049c
-_0808B144:
- ldrb r0, [r1, 0x10]
- cmp r0, 0
- beq _0808B170
- str r5, [sp]
- str r5, [sp, 0x4]
- movs r4, 0
- str r4, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x8D
- movs r2, 0x1A
- movs r3, 0x9
- bl FillBgTilemapBufferRect
- str r5, [sp]
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x9D
- movs r2, 0x1A
- movs r3, 0xA
- bl FillBgTilemapBufferRect
-_0808B170:
- movs r0, 0x3
- bl CopyBgTilemapBufferToVram
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_808B090
-
- thumb_func_start sub_808B180
-sub_808B180: @ 808B180
- push {lr}
- ldr r3, _0808B1B4 @ =gUnknown_20397A4
- ldr r1, [r3]
- ldrb r0, [r1, 0x6]
- adds r0, 0x1
- strb r0, [r1, 0x6]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3C
- bls _0808B1AE
- ldr r1, [r3]
- movs r0, 0
- strb r0, [r1, 0x6]
- ldr r2, [r3]
- ldrb r0, [r2, 0x7]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r2, 0x7]
- ldr r0, [r3]
- ldr r1, _0808B1B8 @ =0x00007bce
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0808B1AE:
- pop {r0}
- bx r0
- .align 2, 0
-_0808B1B4: .4byte gUnknown_20397A4
-_0808B1B8: .4byte 0x00007bce
- thumb_func_end sub_808B180
-
- thumb_func_start sub_808B1BC
-sub_808B1BC: @ 808B1BC
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0808B1D0 @ =gTrainerCards
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 5
- adds r1, r2
- ldrb r0, [r1, 0x1]
- bx lr
- .align 2, 0
-_0808B1D0: .4byte gTrainerCards
- thumb_func_end sub_808B1BC
-
- thumb_func_start sub_808B1D4
-sub_808B1D4: @ 808B1D4
- push {r4,lr}
- ldr r4, _0808B1F4 @ =sub_808B21C
- adds r0, r4, 0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r4
- ldr r0, _0808B1F8 @ =sub_8089034
- bl SetHBlankCallback
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B1F4: .4byte sub_808B21C
-_0808B1F8: .4byte sub_8089034
- thumb_func_end sub_808B1D4
-
- thumb_func_start sub_808B1FC
-sub_808B1FC: @ 808B1FC
- push {lr}
- ldr r0, _0808B210 @ =sub_808B21C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _0808B214
- movs r0, 0
- b _0808B216
- .align 2, 0
-_0808B210: .4byte sub_808B21C
-_0808B214:
- movs r0, 0x1
-_0808B216:
- pop {r1}
- bx r1
- thumb_func_end sub_808B1FC
-
- thumb_func_start sub_808B21C
-sub_808B21C: @ 808B21C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0808B24C @ =gUnknown_83CD908
- ldr r2, _0808B250 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0808B22E:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _0808B22E
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B24C: .4byte gUnknown_83CD908
-_0808B250: .4byte gTasks
- thumb_func_end sub_808B21C
-
- thumb_func_start sub_808B254
-sub_808B254: @ 808B254
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x1
- bl HideBg
- movs r0, 0x3
- bl HideBg
- bl ScanlineEffect_Stop
- bl ScanlineEffect_Clear
- movs r1, 0
- ldr r0, _0808B290 @ =gScanlineEffectRegBuffers
- movs r2, 0
- movs r3, 0xF0
- lsls r3, 3
- adds r0, r3
-_0808B278:
- strh r2, [r0]
- adds r0, 0x2
- adds r1, 0x1
- cmp r1, 0x9F
- bls _0808B278
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0808B290: .4byte gScanlineEffectRegBuffers
- thumb_func_end sub_808B254
-
- thumb_func_start sub_808B294
-sub_808B294: @ 808B294
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r0
- ldr r0, _0808B2C0 @ =gUnknown_20397A4
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x9]
- mov r0, r8
- ldrh r1, [r0, 0xA]
- movs r2, 0xA
- ldrsh r0, [r0, r2]
- cmp r0, 0x4C
- ble _0808B2C4
- movs r0, 0x4D
- mov r3, r8
- strh r0, [r3, 0xA]
- b _0808B2CA
- .align 2, 0
-_0808B2C0: .4byte gUnknown_20397A4
-_0808B2C4:
- adds r0, r1, 0x7
- mov r4, r8
- strh r0, [r4, 0xA]
-_0808B2CA:
- ldr r0, _0808B3B4 @ =gUnknown_20397A4
- ldr r0, [r0]
- mov r2, r8
- ldrh r1, [r2, 0xA]
- ldr r3, _0808B3B8 @ =0x00007bcc
- adds r0, r3
- strh r1, [r0]
- ldrh r0, [r2, 0xA]
- bl sub_8089BD8
- mov r4, r8
- movs r0, 0xA
- ldrsh r7, [r4, r0]
- movs r0, 0xA0
- subs r0, r7
- mov r9, r0
- subs r4, r0, r7
- negs r0, r7
- lsls r6, r0, 16
- movs r0, 0xA0
- lsls r0, 16
- adds r1, r4, 0
- bl __udivsi3
- adds r5, r0, 0
- ldr r1, _0808B3BC @ =0xffff0000
- adds r5, r1
- adds r0, r5, 0
- muls r0, r4
- adds r0, r6, r0
- str r0, [sp]
- adds r0, r5, 0
- adds r1, r4, 0
- bl __udivsi3
- mov r10, r0
- lsls r5, 1
- movs r2, 0
- cmp r2, r7
- bcs _0808B334
- ldr r3, _0808B3C0 @ =gScanlineEffectRegBuffers
-_0808B31C:
- lsls r0, r2, 16
- asrs r0, 16
- lsls r1, r0, 1
- adds r1, r3
- negs r2, r0
- strh r2, [r1]
- adds r0, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, r7
- bcc _0808B31C
-_0808B334:
- lsls r1, r2, 16
- mov r3, r9
- lsls r0, r3, 16
- asrs r3, r0, 16
- ldr r4, _0808B3B4 @ =gUnknown_20397A4
- mov r9, r4
- ldr r4, [sp]
- lsrs r7, r4, 16
- cmp r1, r0
- bge _0808B36C
- ldr r0, _0808B3C0 @ =gScanlineEffectRegBuffers
- mov r12, r0
- adds r4, r3, 0
-_0808B34E:
- lsrs r3, r6, 16
- adds r6, r5
- mov r2, r10
- subs r5, r2
- asrs r0, r1, 16
- lsls r1, r0, 1
- add r1, r12
- strh r3, [r1]
- adds r0, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- lsls r1, r2, 16
- asrs r0, r1, 16
- cmp r0, r4
- blt _0808B34E
-_0808B36C:
- adds r3, r7, 0
- lsls r1, r2, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- bgt _0808B38A
- ldr r2, _0808B3C0 @ =gScanlineEffectRegBuffers
-_0808B378:
- asrs r0, r1, 16
- lsls r1, r0, 1
- adds r1, r2
- strh r3, [r1]
- adds r0, 0x1
- lsls r1, r0, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- ble _0808B378
-_0808B38A:
- mov r3, r9
- ldr r0, [r3]
- movs r1, 0x1
- strb r1, [r0, 0x9]
- mov r4, r8
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0x4C
- ble _0808B3A2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0808B3A2:
- movs r0, 0
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0808B3B4: .4byte gUnknown_20397A4
-_0808B3B8: .4byte 0x00007bcc
-_0808B3BC: .4byte 0xffff0000
-_0808B3C0: .4byte gScanlineEffectRegBuffers
- thumb_func_end sub_808B294
-
- thumb_func_start sub_808B3C4
-sub_808B3C4: @ 808B3C4
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- ldr r4, _0808B3F0 @ =gUnknown_20397A4
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1, 0x9]
- bl sub_8058244
- adds r2, r4, 0
- cmp r0, 0x1
- beq _0808B4C4
-_0808B3DC:
- ldr r3, [r2]
- ldrb r0, [r3, 0x4]
- cmp r0, 0x4
- bhi _0808B4A0
- lsls r0, 2
- ldr r1, _0808B3F4 @ =_0808B3F8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808B3F0: .4byte gUnknown_20397A4
-_0808B3F4: .4byte _0808B3F8
- .align 2, 0
-_0808B3F8:
- .4byte _0808B40C
- .4byte _0808B428
- .4byte _0808B448
- .4byte _0808B46C
- .4byte _0808B48A
-_0808B40C:
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- b _0808B4B2
-_0808B428:
- ldr r0, [r2]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _0808B43C
- bl sub_8089E40
- lsls r0, 24
- cmp r0, 0
- bne _0808B4B2
- b _0808B4C4
-_0808B43C:
- bl sub_8089DC8
- lsls r0, 24
- cmp r0, 0
- bne _0808B4B2
- b _0808B4C4
-_0808B448:
- ldr r0, _0808B45C @ =gUnknown_20397A4
- ldr r1, [r0]
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- bne _0808B464
- ldr r2, _0808B460 @ =0x0000096c
- adds r0, r1, r2
- bl sub_808AF04
- b _0808B4B2
- .align 2, 0
-_0808B45C: .4byte gUnknown_20397A4
-_0808B460: .4byte 0x0000096c
-_0808B464:
- movs r0, 0x1
- bl sub_808ACC8
- b _0808B4B2
-_0808B46C:
- ldr r0, _0808B47C @ =gUnknown_20397A4
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _0808B480
- bl sub_808B090
- b _0808B4B2
- .align 2, 0
-_0808B47C: .4byte gUnknown_20397A4
-_0808B480:
- movs r0, 0x2
- movs r1, 0
- bl FillWindowPixelBuffer
- b _0808B4B2
-_0808B48A:
- ldr r0, _0808B49C @ =gUnknown_20397A4
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- beq _0808B4B2
- bl sub_808B838
- b _0808B4B2
- .align 2, 0
-_0808B49C: .4byte gUnknown_20397A4
-_0808B4A0:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r5, 0x8]
- movs r0, 0x1
- strb r0, [r3, 0x9]
- ldr r0, [r2]
- strb r1, [r0, 0x4]
- b _0808B4C4
-_0808B4B2:
- ldr r2, _0808B4D0 @ =gUnknown_20397A4
- ldr r1, [r2]
- ldrb r0, [r1, 0x4]
- adds r0, 0x1
- strb r0, [r1, 0x4]
- ldr r0, _0808B4D4 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808B3DC
-_0808B4C4:
- movs r0, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0808B4D0: .4byte gUnknown_20397A4
-_0808B4D4: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_808B3C4
-
- thumb_func_start sub_808B4D8
-sub_808B4D8: @ 808B4D8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, _0808B534 @ =gUnknown_20397A4
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1, 0x9]
- ldr r0, [r4]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- beq _0808B50A
- movs r0, 0x2
- bl sub_808ACC8
- ldr r0, [r4]
- ldr r1, _0808B538 @ =0x00000e1c
- adds r0, r1
- bl sub_808AE94
- ldr r0, [r4]
- ldr r1, _0808B53C @ =0x000004bc
- adds r0, r1
- bl sub_808AF04
- bl sub_808AF74
-_0808B50A:
- movs r0, 0x1
- bl sub_808ACC8
- ldr r2, [r4]
- ldrb r0, [r2, 0x8]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r2, 0x8]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- ldr r1, [r4]
- movs r0, 0x1
- strb r0, [r1, 0x9]
- movs r0, 0xF3
- bl PlaySE
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0808B534: .4byte gUnknown_20397A4
-_0808B538: .4byte 0x00000e1c
-_0808B53C: .4byte 0x000004bc
- thumb_func_end sub_808B4D8
-
- thumb_func_start sub_808B540
-sub_808B540: @ 808B540
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r0
- ldr r0, _0808B568 @ =gUnknown_20397A4
- ldr r0, [r0]
- movs r2, 0
- strb r2, [r0, 0x9]
- mov r0, r8
- ldrh r1, [r0, 0xA]
- movs r3, 0xA
- ldrsh r0, [r0, r3]
- cmp r0, 0x5
- bgt _0808B56C
- mov r4, r8
- strh r2, [r4, 0xA]
- b _0808B572
- .align 2, 0
-_0808B568: .4byte gUnknown_20397A4
-_0808B56C:
- subs r0, r1, 0x5
- mov r1, r8
- strh r0, [r1, 0xA]
-_0808B572:
- ldr r0, _0808B65C @ =gUnknown_20397A4
- ldr r0, [r0]
- mov r2, r8
- ldrh r1, [r2, 0xA]
- ldr r3, _0808B660 @ =0x00007bcc
- adds r0, r3
- strh r1, [r0]
- ldrh r0, [r2, 0xA]
- bl sub_8089BD8
- mov r4, r8
- movs r0, 0xA
- ldrsh r7, [r4, r0]
- movs r0, 0xA0
- subs r0, r7
- mov r9, r0
- subs r4, r0, r7
- negs r0, r7
- lsls r6, r0, 16
- movs r0, 0xA0
- lsls r0, 16
- adds r1, r4, 0
- bl __udivsi3
- adds r5, r0, 0
- ldr r1, _0808B664 @ =0xffff0000
- adds r5, r1
- adds r0, r5, 0
- muls r0, r4
- adds r0, r6, r0
- str r0, [sp]
- adds r0, r5, 0
- adds r1, r4, 0
- bl __udivsi3
- mov r10, r0
- lsrs r5, 1
- movs r2, 0
- cmp r2, r7
- bcs _0808B5DC
- ldr r3, _0808B668 @ =gScanlineEffectRegBuffers
-_0808B5C4:
- lsls r0, r2, 16
- asrs r0, 16
- lsls r1, r0, 1
- adds r1, r3
- negs r2, r0
- strh r2, [r1]
- adds r0, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, r7
- bcc _0808B5C4
-_0808B5DC:
- lsls r1, r2, 16
- mov r3, r9
- lsls r0, r3, 16
- asrs r3, r0, 16
- ldr r4, _0808B65C @ =gUnknown_20397A4
- mov r9, r4
- ldr r4, [sp]
- lsrs r7, r4, 16
- cmp r1, r0
- bge _0808B612
- ldr r0, _0808B668 @ =gScanlineEffectRegBuffers
- mov r12, r0
- adds r4, r3, 0
-_0808B5F6:
- lsrs r3, r6, 16
- adds r6, r5
- add r5, r10
- asrs r0, r1, 16
- lsls r1, r0, 1
- add r1, r12
- strh r3, [r1]
- adds r0, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- lsls r1, r2, 16
- asrs r0, r1, 16
- cmp r0, r4
- blt _0808B5F6
-_0808B612:
- adds r3, r7, 0
- lsls r1, r2, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- bgt _0808B630
- ldr r2, _0808B668 @ =gScanlineEffectRegBuffers
-_0808B61E:
- asrs r0, r1, 16
- lsls r1, r0, 1
- adds r1, r2
- strh r3, [r1]
- adds r0, 0x1
- lsls r1, r0, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- ble _0808B61E
-_0808B630:
- mov r1, r9
- ldr r0, [r1]
- movs r1, 0x1
- strb r1, [r0, 0x9]
- mov r2, r8
- movs r3, 0xA
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bgt _0808B648
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
-_0808B648:
- movs r0, 0
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0808B65C: .4byte gUnknown_20397A4
-_0808B660: .4byte 0x00007bcc
-_0808B664: .4byte 0xffff0000
-_0808B668: .4byte gScanlineEffectRegBuffers
- thumb_func_end sub_808B540
-
- thumb_func_start sub_808B66C
-sub_808B66C: @ 808B66C
- push {lr}
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- movs r0, 0
- bl SetHBlankCallback
- ldr r0, _0808B694 @ =sub_808B21C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0808B694: .4byte sub_808B21C
- thumb_func_end sub_808B66C
-
- thumb_func_start InitTrainerCard
-InitTrainerCard: @ 808B698
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _0808B6C0 @ =gUnknown_20397A4
- ldr r0, _0808B6C4 @ =0x00007bd0
- bl AllocZeroed
- str r0, [r5]
- movs r1, 0x8B
- lsls r1, 3
- adds r0, r1
- str r4, [r0]
- bl InUnionRoom
- adds r1, r0, 0
- cmp r1, 0x1
- bne _0808B6C8
- ldr r0, [r5]
- strb r1, [r0, 0x5]
- b _0808B6CE
- .align 2, 0
-_0808B6C0: .4byte gUnknown_20397A4
-_0808B6C4: .4byte 0x00007bd0
-_0808B6C8:
- ldr r1, [r5]
- movs r0, 0
- strb r0, [r1, 0x5]
-_0808B6CE:
- ldr r2, _0808B6F0 @ =gUnknown_20397A4
- ldr r0, [r2]
- ldr r1, _0808B6F4 @ =0x00007bcf
- adds r0, r1
- movs r1, 0x2
- strb r1, [r0]
- ldr r0, [r2]
- ldr r1, _0808B6F8 @ =0x0000045c
- adds r0, r1
- bl sub_80898E8
- ldr r0, _0808B6FC @ =sub_80895B8
- bl SetMainCallback2
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B6F0: .4byte gUnknown_20397A4
-_0808B6F4: .4byte 0x00007bcf
-_0808B6F8: .4byte 0x0000045c
-_0808B6FC: .4byte sub_80895B8
- thumb_func_end InitTrainerCard
-
- thumb_func_start InitLinkPartnerTrainerCard
-InitLinkPartnerTrainerCard: @ 808B700
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _0808B758 @ =gUnknown_20397A4
- ldr r0, _0808B75C @ =0x00007bd0
- bl AllocZeroed
- str r0, [r5]
- movs r2, 0x8B
- lsls r2, 3
- adds r1, r0, r2
- str r6, [r1]
- movs r1, 0x1
- strb r1, [r0, 0x5]
- ldr r0, [r5]
- ldr r1, _0808B760 @ =0x0000045c
- adds r0, r1
- ldr r2, _0808B764 @ =gTrainerCards
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 5
- adds r1, r2
- movs r2, 0x60
- bl memcpy
- ldr r1, [r5]
- ldr r2, _0808B768 @ =gLinkPlayers
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x1A]
- ldr r2, _0808B76C @ =0x00007bcf
- adds r1, r2
- strb r0, [r1]
- ldr r0, _0808B770 @ =sub_80895B8
- bl SetMainCallback2
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B758: .4byte gUnknown_20397A4
-_0808B75C: .4byte 0x00007bd0
-_0808B760: .4byte 0x0000045c
-_0808B764: .4byte gTrainerCards
-_0808B768: .4byte gLinkPlayers
-_0808B76C: .4byte 0x00007bcf
-_0808B770: .4byte sub_80895B8
- thumb_func_end InitLinkPartnerTrainerCard
-
- thumb_func_start sub_808B774
-sub_808B774: @ 808B774
- push {r4,r5,lr}
- ldr r4, _0808B7B0 @ =gUnknown_20397A4
- ldr r0, [r4]
- movs r5, 0
- strb r5, [r0]
- ldr r1, [r4]
- ldr r0, _0808B7B4 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x12]
- strb r0, [r1, 0x6]
- ldr r0, [r4]
- strb r5, [r0, 0x7]
- ldr r0, [r4]
- strb r5, [r0, 0x8]
- ldr r0, [r4]
- ldr r1, _0808B7B8 @ =0x00000456
- adds r0, r1
- strb r5, [r0]
- bl sub_808B800
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- bne _0808B7C0
- ldr r0, [r4]
- ldr r2, _0808B7BC @ =0x00000457
- adds r0, r2
- strb r1, [r0]
- b _0808B7C8
- .align 2, 0
-_0808B7B0: .4byte gUnknown_20397A4
-_0808B7B4: .4byte gSaveBlock2Ptr
-_0808B7B8: .4byte 0x00000456
-_0808B7BC: .4byte 0x00000457
-_0808B7C0:
- ldr r0, [r4]
- ldr r3, _0808B7F4 @ =0x00000457
- adds r0, r3
- strb r5, [r0]
-_0808B7C8:
- movs r4, 0
- ldr r5, _0808B7F8 @ =gUnknown_20397A4
-_0808B7CC:
- movs r0, 0xD
- muls r0, r4
- adds r0, 0x19
- ldr r1, [r5]
- adds r0, r1, r0
- lsls r2, r4, 1
- ldr r3, _0808B7FC @ =0x00000484
- adds r1, r3
- adds r1, r2
- ldrh r1, [r1]
- bl CopyEasyChatWord
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0808B7CC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B7F4: .4byte 0x00000457
-_0808B7F8: .4byte gUnknown_20397A4
-_0808B7FC: .4byte 0x00000484
- thumb_func_end sub_808B774
-
- thumb_func_start sub_808B800
-sub_808B800: @ 808B800
- push {lr}
- ldr r0, _0808B810 @ =gUnknown_20397A4
- ldr r0, [r0]
- cmp r0, 0
- bne _0808B818
- ldr r0, _0808B814 @ =gGameVersion
- b _0808B81C
- .align 2, 0
-_0808B810: .4byte gUnknown_20397A4
-_0808B814: .4byte gGameVersion
-_0808B818:
- ldr r1, _0808B82C @ =0x00000494
- adds r0, r1
-_0808B81C:
- ldrb r0, [r0]
- subs r0, 0x4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0808B830
- movs r0, 0x1
- b _0808B832
- .align 2, 0
-_0808B82C: .4byte 0x00000494
-_0808B830:
- movs r0, 0
-_0808B832:
- pop {r1}
- bx r1
- thumb_func_end sub_808B800
-
- thumb_func_start sub_808B838
-sub_808B838: @ 808B838
- push {r4-r7,lr}
- sub sp, 0x8
- ldr r2, _0808B888 @ =gUnknown_83CD8F4
- ldr r5, _0808B88C @ =gUnknown_20397A4
- ldr r0, [r5]
- ldr r6, _0808B890 @ =0x0000045c
- adds r1, r0, r6
- ldr r7, _0808B894 @ =0x00000457
- adds r0, r7
- ldrb r0, [r0]
- lsls r0, 1
- ldrb r1, [r1]
- adds r0, r1
- adds r0, r2
- ldrb r4, [r0]
- bl InUnionRoom
- cmp r0, 0x1
- bne _0808B8A4
- ldr r0, _0808B898 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0808B8A4
- ldr r0, [r5]
- ldr r1, _0808B89C @ =0x000004ab
- adds r0, r1
- ldrb r4, [r0]
- adds r0, r4, 0
- bl FacilityClassToPicIndex
- lsls r0, 16
- lsrs r0, 16
- ldr r4, _0808B8A0 @ =gUnknown_83CD8EC
- ldr r1, [r5]
- adds r2, r1, r6
- ldrb r3, [r2]
- lsls r3, 1
- adds r1, r7
- b _0808B8CC
- .align 2, 0
-_0808B888: .4byte gUnknown_83CD8F4
-_0808B88C: .4byte gUnknown_20397A4
-_0808B890: .4byte 0x0000045c
-_0808B894: .4byte 0x00000457
-_0808B898: .4byte gReceivedRemoteLinkPlayers
-_0808B89C: .4byte 0x000004ab
-_0808B8A0: .4byte gUnknown_83CD8EC
-_0808B8A4:
- ldr r6, _0808B8EC @ =gUnknown_20397A4
- ldr r1, [r6]
- ldr r2, _0808B8F0 @ =0x00000457
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808B8FC
- adds r0, r4, 0
- bl FacilityClassToPicIndex
- lsls r0, 16
- lsrs r0, 16
- ldr r4, _0808B8F4 @ =gUnknown_83CD8EC
- ldr r1, [r6]
- ldr r3, _0808B8F8 @ =0x0000045c
- adds r2, r1, r3
- ldrb r3, [r2]
- lsls r3, 1
- ldr r2, _0808B8F0 @ =0x00000457
- adds r1, r2
-_0808B8CC:
- ldrb r1, [r1]
- lsls r1, 2
- adds r3, r1
- adds r1, r3, r4
- ldrb r2, [r1]
- adds r4, 0x1
- adds r3, r4
- ldrb r3, [r3]
- movs r1, 0x8
- str r1, [sp]
- movs r1, 0x2
- str r1, [sp, 0x4]
- movs r1, 0x1
- bl sub_810C330
- b _0808B938
- .align 2, 0
-_0808B8EC: .4byte gUnknown_20397A4
-_0808B8F0: .4byte 0x00000457
-_0808B8F4: .4byte gUnknown_83CD8EC
-_0808B8F8: .4byte 0x0000045c
-_0808B8FC:
- ldr r4, _0808B940 @ =0x0000045c
- adds r0, r1, r4
- ldrb r0, [r0]
- movs r1, 0x1
- bl PlayerGenderToFrontTrainerPicId_Debug
- lsls r0, 16
- lsrs r0, 16
- ldr r5, _0808B944 @ =gUnknown_83CD8EC
- ldr r1, [r6]
- adds r4, r1, r4
- ldrb r3, [r4]
- lsls r3, 1
- ldr r2, _0808B948 @ =0x00000457
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 2
- adds r3, r1
- adds r1, r3, r5
- ldrb r2, [r1]
- adds r5, 0x1
- adds r3, r5
- ldrb r3, [r3]
- movs r1, 0x8
- str r1, [sp]
- movs r1, 0x2
- str r1, [sp, 0x4]
- movs r1, 0x1
- bl sub_810C330
-_0808B938:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B940: .4byte 0x0000045c
-_0808B944: .4byte gUnknown_83CD8EC
-_0808B948: .4byte 0x00000457
- thumb_func_end sub_808B838
-
- thumb_func_start sub_808B94C
-sub_808B94C: @ 808B94C
- push {lr}
- bl InitTrainerCard
- ldr r0, _0808B95C @ =sub_80895B8
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0808B95C: .4byte sub_80895B8
- thumb_func_end sub_808B94C
-
- thumb_func_start sub_808B960
-sub_808B960: @ 808B960
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0808B984 @ =gTrainerCards
- ldr r1, _0808B988 @ =gUnknown_83CD960
- movs r2, 0x60
- bl memcpy
- movs r0, 0
- adds r1, r4, 0
- bl InitLinkPartnerTrainerCard
- ldr r0, _0808B98C @ =sub_80895B8
- bl SetMainCallback2
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B984: .4byte gTrainerCards
-_0808B988: .4byte gUnknown_83CD960
-_0808B98C: .4byte sub_80895B8
- thumb_func_end sub_808B960
-
- thumb_func_start sub_808B990
-sub_808B990: @ 808B990
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0808B9B4 @ =gTrainerCards
- ldr r1, _0808B9B8 @ =gUnknown_83CD9C0
- movs r2, 0x60
- bl memcpy
- movs r0, 0
- adds r1, r4, 0
- bl InitLinkPartnerTrainerCard
- ldr r0, _0808B9BC @ =sub_80895B8
- bl SetMainCallback2
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B9B4: .4byte gTrainerCards
-_0808B9B8: .4byte gUnknown_83CD9C0
-_0808B9BC: .4byte sub_80895B8
- thumb_func_end sub_808B990
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/graphics.s b/data/graphics.s
index c5eae9753..570b73636 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -16218,16 +16218,16 @@ gUnknown_8E990F8:: @ 8E990F8
gUnknown_8E99118:: @ 8E99118
.incbin "graphics/tm_case/unk_8E99118.4bpp"
-gUnknown_8E99198::
+gFireRedTrainerCard_Pal:: @ 8E99198
.incbin "graphics/trainer_card/0star.gbapal"
-gUnknown_8E991F8:: @ 8E991F8
+gFireRedTrainerCard_Gfx:: @ 8E991F8
.incbin "graphics/trainer_card/card.4bpp.lz"
-gUnknown_8E9986C:: @ 8E9986C
+gEmeraldTrainerCard_Pal:: @ 8E9986C
.incbin "graphics/trainer_card/0star_em.gbapal"
-gUnknown_8E998CC:: @ 8E998CC
+gEmeraldTrainerCard_Gfx:: @ 8E998CC
.incbin "graphics/trainer_card/card_em.4bpp.lz"
gUnknown_8E99D8C:: @ 8E99D8C
diff --git a/data/strings.s b/data/strings.s
index 1725f16e6..710942f58 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -2846,61 +2846,61 @@ gUnknown_8419CB9:: @ 8419CB9
.string "HM moves can't be\n"
.string "forgotten now.$"
-gUnknown_8419CDA:: @ 8419CDA
+gText_TrainerCardName:: @ 8419CDA
.string "NAME: $"
-gUnknown_8419CE1:: @ 8419CE1
+gText_TrainerCardIDNo:: @ 8419CE1
.string "IDNo.$"
-gUnknown_8419CE7:: @ 8419CE7
+gText_TrainerCardMoney:: @ 8419CE7
.string "MONEY$"
-gUnknown_8419CED:: @ 8419CED
+gText_TrainerCardYen:: @ 8419CED
.string "¥$"
-gUnknown_8419CEF:: @ 8419CEF
+gText_TrainerCardPokedex:: @ 8419CEF
.string "POKéDEX$"
-gUnknown_8419CF7:: @ 8419CF7
+gText_TrainerCardNull:: @ 8419CF7
.string "$"
-gUnknown_8419CF8:: @ 8419CF8
+gText_Colon2:: @ 8419CF8
.string ":$"
gUnknown_8419CFA:: @ 0x8419CFA
.string "てん$"
-gUnknown_8419CFD:: @ 8419CFD
+gText_TrainerCardTime:: @ 8419CFD
.string "TIME$"
gUnknown_8419D02:: @ 0x8419D02
.string "ゲ-ムポイント$"
-gUnknown_8419D0A:: @ 8419D0A
+gText_Var1sTrainerCard:: @ 8419D0A
.string "'s TRAINER CARD$"
-gUnknown_8419D1A:: @ 8419D1A
+gText_HallOfFameDebut:: @ 8419D1A
.string "HALL OF FAME DEBUT $"
-gUnknown_8419D2F:: @ 0x8419D2F
+gText_LinkBattles:: @ 0x8419D2F
.string "LINK BATTLES$"
-gUnknown_8419D3C:: @ 0x8419D3C
+gText_LinkCableBattles:: @ 0x8419D3C
.string "LINK CABLE BATTLES$"
-gUnknown_8419D4F:: @ 8419D4F
+gText_WinLossRatio:: @ 8419D4F
.string "W:{CLEAR_TO 0x30}L:$"
-gUnknown_8419D57:: @ 8419D57
+gText_PokemonTrades:: @ 8419D57
.string "POKéMON TRADES$"
-gUnknown_8419D66:: @ 8419D66
+gText_UnionRoomTradesBattles:: @ 8419D66
.string "UNION TRADES & BATTLES$"
-gUnknown_8419D7D:: @ 8419D7D
+gText_BerryCrushes:: @ 8419D7D
.string "BERRY CRUSH$"
-gUnknown_8419D89:: @ 8419D89
+gText_WaitingTrainerFinishReading:: @ 8419D89
.string "Waiting for the other TRAINER to\n"
.string "finish reading your TRAINER CARD.$"
diff --git a/data/trainer_card.s b/data/trainer_card.s
deleted file mode 100644
index de35fa192..000000000
--- a/data/trainer_card.s
+++ /dev/null
@@ -1,192 +0,0 @@
-#include "constants/maps.h"
-#include "constants/species.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnknown_83CC368:: @ 83CC368
- .incbin "baserom.gba", 0x3CC368, 0x174
-
-gUnknown_83CC4DC:: @ 83CC4DC
- .incbin "baserom.gba", 0x3CC4DC, 0x214
-
-gUnknown_83CC6F0:: @ 83CC6F0
- .incbin "baserom.gba", 0x3CC6F0, 0x1B8
-
-gUnknown_83CC8A8:: @ 83CC8A8
- .incbin "baserom.gba", 0x3CC8A8, 0xDC
-
-gUnknown_83CC984:: @ 83CC984
- .incbin "baserom.gba", 0x3CC984, 0x12C
-
-gUnknown_83CCAB0:: @ 83CCAB0
- .incbin "baserom.gba", 0x3CCAB0, 0x1F4
-
-gUnknown_83CCCA4:: @ 83CCCA4
- .incbin "baserom.gba", 0x3CCCA4, 0x18C
-
-gUnknown_83CCE30:: @ 83CCE30
- .incbin "baserom.gba", 0x3CCE30, 0x98
-
-gUnknown_83CCEC8:: @ 83CCEC8
- .incbin "baserom.gba", 0x3CCEC8, 0xB8
-
-gUnknown_83CCF80:: @ 83CCF80
- .incbin "baserom.gba", 0x3CCF80, 0x60
-
-gUnknown_83CCFE0:: @ 83CCFE0
- .incbin "baserom.gba", 0x3CCFE0, 0x60
-
-gUnknown_83CD040:: @ 83CD040
- .incbin "baserom.gba", 0x3CD040, 0x60
-
-gUnknown_83CD0A0:: @ 83CD0A0
- .incbin "baserom.gba", 0x3CD0A0, 0x60
-
-gUnknown_83CD100:: @ 83CD100
- .incbin "baserom.gba", 0x3CD100, 0x60
-
-gUnknown_83CD160:: @ 83CD160
- .incbin "baserom.gba", 0x3CD160, 0x60
-
-gUnknown_83CD1C0:: @ 83CD1C0
- .incbin "baserom.gba", 0x3CD1C0, 0x60
-
-gUnknown_83CD220:: @ 83CD220
- .incbin "baserom.gba", 0x3CD220, 0x60
-
-gUnknown_83CD280:: @ 83CD280
- .incbin "baserom.gba", 0x3CD280, 0x20
-
-gUnknown_83CD2A0:: @ 83CD2A0
- .incbin "baserom.gba", 0x3CD2A0, 0x20
-
-gUnknown_83CD2C0:: @ 83CD2C0
- .incbin "baserom.gba", 0x3CD2C0, 0x20
-
-gUnknown_83CD2E0:: @ 83CD2E0
- .incbin "baserom.gba", 0x3CD2E0, 0x20
-
-gUnknown_83CD300:: @ 83CD300
- .incbin "baserom.gba", 0x3CD300, 0x20
-
-gUnknown_83CD320:: @ 83CD320
- .incbin "baserom.gba", 0x3CD320, 0x20
-
-gUnknown_83CD340:: @ 83CD340
- .incbin "baserom.gba", 0x3CD340, 0x20
-
-gUnknown_83CD360:: @ 83CD360
- .incbin "baserom.gba", 0x3CD360, 0x20
-
-gUnknown_83CD380:: @ 83CD380
- .incbin "baserom.gba", 0x3CD380, 0x268
-
-gUnknown_83CD5E8:: @ 83CD5E8
- .incbin "baserom.gba", 0x3CD5E8, 0x2A0
-
-gUnknown_83CD888:: @ 83CD888
- .incbin "baserom.gba", 0x3CD888, 0x10
-
-gUnknown_83CD898:: @ 83CD898
- .incbin "baserom.gba", 0x3CD898, 0x20
-
-gUnknown_83CD8B8:: @ 83CD8B8
- .word gUnknown_8E9986C
- .word gUnknown_83CCF80
- .word gUnknown_83CD040
- .word gUnknown_83CD100
- .word gUnknown_83CD1C0
-
-gUnknown_83CD8CC:: @ 83CD8CC
- .word gUnknown_8E99198
- .word gUnknown_83CCFE0
- .word gUnknown_83CD0A0
- .word gUnknown_83CD160
- .word gUnknown_83CD220
-
-gUnknown_83CD8E0:: @ 83CD8E0
- .incbin "baserom.gba", 0x3CD8E0, 0x3
-
-gUnknown_83CD8E3:: @ 83CD8E3
- .incbin "baserom.gba", 0x3CD8E3, 0x6
-
-gUnknown_83CD8E9:: @ 83CD8E9
- .incbin "baserom.gba", 0x3CD8E9, 0x3
-
-gUnknown_83CD8EC:: @ 83CD8EC
- .incbin "baserom.gba", 0x3CD8EC, 0x8
-
-gUnknown_83CD8F4:: @ 83CD8F4
- .incbin "baserom.gba", 0x3CD8F4, 0x4
-
-gUnknown_83CD8F8:: @ 83CD8F8
- .incbin "baserom.gba", 0x3CD8F8, 0x10
-
-gUnknown_83CD908:: @ 83CD908
- .incbin "baserom.gba", 0x3CD908, 0x18
-
-gUnknown_83CD920:: @ 83CD920
- .incbin "baserom.gba", 0x3CD920, 0x2
-
-gUnknown_83CD922:: @ 83CD922
- .incbin "baserom.gba", 0x3CD922, 0x2
-
-gUnknown_83CD924:: @ 83CD924
- .incbin "baserom.gba", 0x3CD924, 0x2
-
-gUnknown_83CD926:: @ 83CD926
- .incbin "baserom.gba", 0x3CD926, 0x2
-
-gUnknown_83CD928:: @ 83CD928
- .incbin "baserom.gba", 0x3CD928, 0x8
-
-gUnknown_83CD930:: @ 83CD930
- .incbin "baserom.gba", 0x3CD930, 0x2
-
-gUnknown_83CD932:: @ 83CD932
- .incbin "baserom.gba", 0x3CD932, 0x2
-
-gUnknown_83CD934:: @ 83CD934
- .incbin "baserom.gba", 0x3CD934, 0x2
-
-gUnknown_83CD936:: @ 83CD936
- .incbin "baserom.gba", 0x3CD936, 0x2
-
-gUnknown_83CD938:: @ 83CD938
- .incbin "baserom.gba", 0x3CD938, 0x2
-
-gUnknown_83CD93A:: @ 83CD93A
- .incbin "baserom.gba", 0x3CD93A, 0x2
-
-gUnknown_83CD93C:: @ 83CD93C
- .incbin "baserom.gba", 0x3CD93C, 0x2
-
-gUnknown_83CD93E:: @ 83CD93E
- .incbin "baserom.gba", 0x3CD93E, 0x2
-
-gUnknown_83CD940:: @ 83CD940
- .incbin "baserom.gba", 0x3CD940, 0x4
-
-gUnknown_83CD944:: @ 83CD944
- .incbin "baserom.gba", 0x3CD944, 0x8
-
-gUnknown_83CD94C:: @ 83CD94C
- .incbin "baserom.gba", 0x3CD94C, 0x6
-
-gUnknown_83CD952:: @ 83CD952
- .incbin "baserom.gba", 0x3CD952, 0x6
-
-gUnknown_83CD958:: @ 83CD958
- .incbin "baserom.gba", 0x3CD958, 0x4
-
-gUnknown_83CD95C:: @ 83CD95C
- .incbin "baserom.gba", 0x3CD95C, 0x4
-
-gUnknown_83CD960:: @ 83CD960
- .incbin "baserom.gba", 0x3CD960, 0x60
-
-gUnknown_83CD9C0:: @ 83CD9C0
- .incbin "baserom.gba", 0x3CD9C0, 0x60
diff --git a/graphics/trainer_card/badges.png b/graphics/trainer_card/badges.png
new file mode 100644
index 000000000..e9edda318
--- /dev/null
+++ b/graphics/trainer_card/badges.png
Binary files differ
diff --git a/graphics/trainer_card/em_1stars_pals.pal b/graphics/trainer_card/em_1stars_pals.pal
new file mode 100644
index 000000000..62c51c91f
--- /dev/null
+++ b/graphics/trainer_card/em_1stars_pals.pal
@@ -0,0 +1,51 @@
+JASC-PAL
+0100
+48
+139 98 115
+238 255 246
+213 238 230
+164 164 164
+123 123 123
+98 98 115
+41 57 65
+57 106 139
+65 139 197
+189 213 205
+148 180 164
+106 148 123
+65 115 90
+106 189 255
+205 205 205
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+106 180 213
+41 123 164
+0 0 0
+0 0 0
+98 98 115
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+106 189 255
+205 205 205
+0 0 0
diff --git a/graphics/trainer_card/em_2stars_pals.pal b/graphics/trainer_card/em_2stars_pals.pal
new file mode 100644
index 000000000..bacce54f5
--- /dev/null
+++ b/graphics/trainer_card/em_2stars_pals.pal
@@ -0,0 +1,51 @@
+JASC-PAL
+0100
+48
+139 98 115
+255 246 230
+246 230 213
+205 156 90
+180 131 65
+98 98 115
+41 57 65
+57 106 139
+65 139 197
+230 189 139
+205 156 115
+180 131 82
+156 106 41
+106 189 255
+205 205 205
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+106 180 213
+41 123 164
+0 0 0
+0 0 0
+98 98 115
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+106 189 255
+205 205 205
+0 0 0
diff --git a/graphics/trainer_card/em_3stars_pals.pal b/graphics/trainer_card/em_3stars_pals.pal
new file mode 100644
index 000000000..21f3d83eb
--- /dev/null
+++ b/graphics/trainer_card/em_3stars_pals.pal
@@ -0,0 +1,51 @@
+JASC-PAL
+0100
+48
+139 98 115
+246 246 255
+230 230 238
+189 189 197
+156 156 156
+156 106 41
+41 57 65
+57 106 139
+65 139 197
+230 230 238
+189 189 197
+156 156 156
+123 123 123
+106 189 255
+205 205 205
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+106 180 213
+41 123 164
+0 0 0
+0 0 0
+98 98 115
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+106 189 255
+205 205 205
+0 0 0
diff --git a/graphics/trainer_card/em_4stars_pals.pal b/graphics/trainer_card/em_4stars_pals.pal
new file mode 100644
index 000000000..4e1d56b54
--- /dev/null
+++ b/graphics/trainer_card/em_4stars_pals.pal
@@ -0,0 +1,51 @@
+JASC-PAL
+0100
+48
+139 98 115
+246 246 222
+246 238 172
+164 164 164
+123 123 123
+98 98 115
+41 57 65
+57 106 139
+65 139 197
+246 230 139
+230 213 49
+213 197 57
+156 115 57
+106 189 255
+205 205 205
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+106 180 213
+41 123 164
+0 0 0
+0 0 0
+98 98 115
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+255 255 255
+230 230 238
+164 164 164
+123 123 123
+106 189 255
+205 205 205
+0 0 0
diff --git a/graphics/trainer_card/em_badges.pal b/graphics/trainer_card/em_badges.pal
new file mode 100644
index 000000000..dd9246d9d
--- /dev/null
+++ b/graphics/trainer_card/em_badges.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+139 98 115
+255 255 255
+213 213 213
+180 180 180
+123 123 123
+255 139 57
+222 57 8
+106 189 255
+65 139 197
+255 213 98
+238 180 57
+197 123 197
+148 74 156
+106 189 255
+205 205 205
+0 0 0
diff --git a/graphics/trainer_card/em_badges.png b/graphics/trainer_card/em_badges.png
new file mode 100644
index 000000000..f7013646d
--- /dev/null
+++ b/graphics/trainer_card/em_badges.png
Binary files differ
diff --git a/graphics/trainer_card/em_female_bg.pal b/graphics/trainer_card/em_female_bg.pal
new file mode 100644
index 000000000..9df82c665
--- /dev/null
+++ b/graphics/trainer_card/em_female_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+230 123 139
+164 49 115
+0 0 0
+0 0 0
diff --git a/graphics/trainer_card/fr_1stars_pals.pal b/graphics/trainer_card/fr_1stars_pals.pal
new file mode 100644
index 000000000..9215c7592
--- /dev/null
+++ b/graphics/trainer_card/fr_1stars_pals.pal
@@ -0,0 +1,51 @@
+JASC-PAL
+0100
+48
+139 98 115
+222 255 230
+205 246 222
+197 238 213
+189 230 205
+246 205 148
+164 164 164
+98 98 115
+246 213 139
+180 205 148
+131 180 172
+115 156 156
+82 131 123
+255 246 189
+255 255 255
+156 205 197
+139 98 115
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+189 148 16
+255 213 82
+82 205 180
+65 172 164
+197 197 197
+90 90 90
+0 0 0
+32 65 123
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+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/trainer_card/fr_2stars_pals.pal b/graphics/trainer_card/fr_2stars_pals.pal
new file mode 100644
index 000000000..748e17aa8
--- /dev/null
+++ b/graphics/trainer_card/fr_2stars_pals.pal
@@ -0,0 +1,51 @@
+JASC-PAL
+0100
+48
+139 98 115
+246 246 205
+246 238 197
+238 230 189
+230 222 156
+246 205 148
+164 164 164
+98 98 115
+246 238 139
+222 197 139
+213 189 139
+197 180 123
+164 123 82
+255 255 205
+255 255 255
+230 205 156
+139 98 115
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+189 148 16
+255 213 82
+82 205 180
+65 172 164
+197 197 197
+90 90 90
+0 0 0
+32 65 123
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+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/trainer_card/fr_3stars_pals.pal b/graphics/trainer_card/fr_3stars_pals.pal
new file mode 100644
index 000000000..e984eab42
--- /dev/null
+++ b/graphics/trainer_card/fr_3stars_pals.pal
@@ -0,0 +1,51 @@
+JASC-PAL
+0100
+48
+139 98 115
+238 246 246
+238 246 246
+238 238 238
+230 230 230
+246 205 148
+164 164 164
+98 98 115
+255 238 131
+205 205 164
+197 205 205
+172 180 172
+131 139 156
+246 246 197
+255 255 255
+213 222 222
+139 98 115
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+189 148 16
+255 213 82
+82 205 180
+65 172 164
+197 197 197
+90 90 90
+0 0 0
+32 65 123
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+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/trainer_card/fr_4stars_pals.pal b/graphics/trainer_card/fr_4stars_pals.pal
new file mode 100644
index 000000000..79027f0d8
--- /dev/null
+++ b/graphics/trainer_card/fr_4stars_pals.pal
@@ -0,0 +1,51 @@
+JASC-PAL
+0100
+48
+139 98 115
+255 246 230
+246 238 213
+246 246 197
+246 238 180
+246 222 106
+164 164 164
+98 98 115
+255 255 148
+246 222 49
+246 205 8
+238 189 0
+189 148 57
+255 255 197
+255 255 255
+246 230 82
+139 98 115
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+189 148 16
+255 213 82
+82 205 180
+65 172 164
+197 197 197
+90 90 90
+0 0 0
+32 65 123
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+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/trainer_card/fr_badges.pal b/graphics/trainer_card/fr_badges.pal
new file mode 100644
index 000000000..dd9246d9d
--- /dev/null
+++ b/graphics/trainer_card/fr_badges.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+139 98 115
+255 255 255
+213 213 213
+180 180 180
+123 123 123
+255 139 57
+222 57 8
+106 189 255
+65 139 197
+255 213 98
+238 180 57
+197 123 197
+148 74 156
+106 189 255
+205 205 205
+0 0 0
diff --git a/graphics/trainer_card/fr_female_bg.pal b/graphics/trainer_card/fr_female_bg.pal
new file mode 100644
index 000000000..3e8a3ab52
--- /dev/null
+++ b/graphics/trainer_card/fr_female_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+139 98 115
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+255 0 255
+189 148 16
+255 213 82
+230 148 82
+213 98 41
+197 197 197
+90 90 90
diff --git a/graphics/trainer_card/sticker1.pal b/graphics/trainer_card/sticker1.pal
new file mode 100644
index 000000000..774dbb486
--- /dev/null
+++ b/graphics/trainer_card/sticker1.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 246 189
+255 255 255
+255 197 164
+238 246 246
+222 222 230
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+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/trainer_card/sticker2.pal b/graphics/trainer_card/sticker2.pal
new file mode 100644
index 000000000..9244e4a03
--- /dev/null
+++ b/graphics/trainer_card/sticker2.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 246 189
+255 255 255
+98 197 238
+238 246 246
+222 222 230
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+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/trainer_card/sticker3.pal b/graphics/trainer_card/sticker3.pal
new file mode 100644
index 000000000..abe9e9206
--- /dev/null
+++ b/graphics/trainer_card/sticker3.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 246 189
+255 255 255
+246 230 74
+238 246 246
+222 222 230
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+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/trainer_card/sticker4.pal b/graphics/trainer_card/sticker4.pal
new file mode 100644
index 000000000..422e986b1
--- /dev/null
+++ b/graphics/trainer_card/sticker4.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 246 189
+255 255 255
+106 131 148
+238 246 246
+222 222 230
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+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/trainer_card/stickers.png b/graphics/trainer_card/stickers.png
new file mode 100644
index 000000000..7c1010835
--- /dev/null
+++ b/graphics/trainer_card/stickers.png
Binary files differ
diff --git a/graphics/trainer_card/unk_83CC4DC.bin b/graphics/trainer_card/unk_83CC4DC.bin
new file mode 100644
index 000000000..0f45caec6
--- /dev/null
+++ b/graphics/trainer_card/unk_83CC4DC.bin
Binary files differ
diff --git a/graphics/trainer_card/unk_83CC6F0.bin b/graphics/trainer_card/unk_83CC6F0.bin
new file mode 100644
index 000000000..b83c43942
--- /dev/null
+++ b/graphics/trainer_card/unk_83CC6F0.bin
Binary files differ
diff --git a/graphics/trainer_card/unk_83CC8A8.bin b/graphics/trainer_card/unk_83CC8A8.bin
new file mode 100644
index 000000000..eda105eb2
--- /dev/null
+++ b/graphics/trainer_card/unk_83CC8A8.bin
Binary files differ
diff --git a/graphics/trainer_card/unk_83CC984.bin b/graphics/trainer_card/unk_83CC984.bin
new file mode 100644
index 000000000..dd54ba1c7
--- /dev/null
+++ b/graphics/trainer_card/unk_83CC984.bin
Binary files differ
diff --git a/graphics/trainer_card/unk_83CCAB0.bin b/graphics/trainer_card/unk_83CCAB0.bin
new file mode 100644
index 000000000..46e00f670
--- /dev/null
+++ b/graphics/trainer_card/unk_83CCAB0.bin
Binary files differ
diff --git a/graphics/trainer_card/unk_83CCCA4.bin b/graphics/trainer_card/unk_83CCCA4.bin
new file mode 100644
index 000000000..ef8e65b27
--- /dev/null
+++ b/graphics/trainer_card/unk_83CCCA4.bin
Binary files differ
diff --git a/graphics/trainer_card/unk_83CCE30.bin b/graphics/trainer_card/unk_83CCE30.bin
new file mode 100644
index 000000000..b3994f663
--- /dev/null
+++ b/graphics/trainer_card/unk_83CCE30.bin
Binary files differ
diff --git a/graphics/trainer_card/unk_83CCEC8.bin b/graphics/trainer_card/unk_83CCEC8.bin
new file mode 100644
index 000000000..c1c452262
--- /dev/null
+++ b/graphics/trainer_card/unk_83CCEC8.bin
Binary files differ
diff --git a/graphics/trainer_card/unk_83CD300.pal b/graphics/trainer_card/unk_83CD300.pal
new file mode 100644
index 000000000..ebd175e97
--- /dev/null
+++ b/graphics/trainer_card/unk_83CD300.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+139 98 115
+246 197 0
+205 164 0
+246 197 0
+246 197 0
+246 197 0
+246 197 0
+246 197 0
+0 0 0
+0 0 0
+189 148 16
+255 213 82
+0 0 0
+0 0 0
+189 148 16
+246 197 0
diff --git a/include/constants/game_stat.h b/include/constants/game_stat.h
index b1f3d4197..234091bff 100644
--- a/include/constants/game_stat.h
+++ b/include/constants/game_stat.h
@@ -51,9 +51,10 @@
#define GAME_STAT_USED_DAYCARE 47
#define GAME_STAT_RODE_CABLE_CAR 48
#define GAME_STAT_ENTERED_HOT_SPRINGS 49
+#define GAME_STAT_NUM_UNION_ROOM_BATTLES 50
+#define GAME_STAT_BERRY_CRUSH_POINTS 51
-/*TODO: add new stats added in Emerald*/
-
+#define NUM_USED_GAME_STATS 52
#define NUM_GAME_STATS 64
#endif // GUARD_CONSTANTS_GAME_STAT_H
diff --git a/include/global.h b/include/global.h
index 8e5d90964..219c09c62 100644
--- a/include/global.h
+++ b/include/global.h
@@ -257,7 +257,7 @@ struct BattleTowerData // Leftover from R/S
/*0x04CC, 0x057C*/ u16 currentWinStreaks[2];
/*0x04D0, 0x0580*/ u8 lastStreakLevelType; // 0 = level 50, 1 = level 100. level type of the last streak. Used by tv to report the level mode.
/*0x04D1, 0x0581*/ u8 filler_4D1[0x317];
-};
+}; /* size = 0x7E8 */
struct SaveBlock2
{
diff --git a/include/graphics.h b/include/graphics.h
index bb501ffb0..89541e748 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4848,4 +4848,10 @@ extern const u32 gBuyMenuFrame_Pal[];
// battle_message
extern const u16 gUnknown_8D2FBB4[];
+// trainer card
+extern const u16 gFireRedTrainerCard_Pal[];
+extern const u32 gFireRedTrainerCard_Gfx[];
+extern const u16 gEmeraldTrainerCard_Pal[];
+extern const u32 gEmeraldTrainerCard_Gfx[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/pokedex.h b/include/pokedex.h
index a08d4ed26..c132ae794 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -44,6 +44,9 @@ s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
u16 GetNationalPokedexCount(u8);
u16 sub_80C0844(u8);
u16 GetKantoPokedexCount(u8);
+bool16 HasAllHoennMons(void);
+bool16 HasAllKantoMons(void);
+bool16 HasAllMons(void);
u32 sub_8106B60(u16 species);
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index f0e5c8b9d..5b9876677 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -3,6 +3,8 @@
#include "global.h"
+extern const u16 gMonIconPalettes[][16];
+
const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);
const u8 *GetMonIconTiles(u16 iconSpecies, bool32 extra);
const u16 *GetValidMonIconPalettePtr(u16 speciesId);
@@ -23,5 +25,6 @@ u8 UpdateMonIconFrame(struct Sprite * sprite);
void LoadMonIconPalette(u16 iconId);
void FreeMonIconPalette(u16 iconId);
void SetPartyHPBarSprite(struct Sprite * sprite, u8 animNum);
+u8 GetMonIconPaletteIndexFromSpecies(u16 species);
#endif // GUARD_POKEMON_ICON_H
diff --git a/include/strings.h b/include/strings.h
index 8ad1dc533..498d6802d 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -976,4 +976,23 @@ extern const u8 gUnknown_8415F3D[];
extern const u8 gUnknown_8415F4A[];
extern const u8 gUnknown_8415F66[];
+// trainer card
+extern const u8 gText_WaitingTrainerFinishReading[];
+extern const u8 gText_TrainerCardName[];
+extern const u8 gText_TrainerCardIDNo[];
+extern const u8 gText_TrainerCardMoney[];
+extern const u8 gText_TrainerCardYen[];
+extern const u8 gText_TrainerCardPokedex[];
+extern const u8 gText_TrainerCardNull[];
+extern const u8 gText_Colon2[];
+extern const u8 gText_TrainerCardTime[];
+extern const u8 gText_Var1sTrainerCard[];
+extern const u8 gText_HallOfFameDebut[];
+extern const u8 gText_WinLossRatio[];
+extern const u8 gText_PokemonTrades[];
+extern const u8 gText_BerryCrushes[];
+extern const u8 gText_UnionRoomTradesBattles[];
+extern const u8 gText_LinkBattles[];
+extern const u8 gText_LinkCableBattles[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/trainer_card.h b/include/trainer_card.h
index b38754988..06844dc2e 100644
--- a/include/trainer_card.h
+++ b/include/trainer_card.h
@@ -24,23 +24,26 @@ struct TrainerCard
/*0x20*/ u16 pokemonTrades;
/*0x24*/ u32 money;
/*0x28*/ u16 var_28[4];
- /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
+ /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH];
/*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;
+ /*0x44*/ u32 berriesPicked;
+ /*0x48*/ u32 jumpsInRow;
+ /*0x4C*/ bool8 var_4C;
+ /*0x4D*/ bool8 hasAllMons;
/*0x4E*/ u8 var_4E;
/*0x4F*/ u8 var_4F;
- /*0x50*/ u8 var_50[0x4];
+ /*0x50*/ u8 var_50[4];
/*0x54*/ u16 monSpecies[PARTY_SIZE];
};
extern struct TrainerCard gTrainerCards[4];
-void InitTrainerCard(MainCallback callback);
-void InitLinkPartnerTrainerCard(u8 whoseCard, MainCallback callback);
+void ShowPlayerTrainerCard(void (*callback)(void));
+void ShowTrainerCardInLink(u8 whoseCard, MainCallback callback);
+u8 GetTrainerCardStars(u8 cardId);
+void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard);
#endif //GUARD_TRAINER_CARD_H
diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h
index 3e27f58e4..436a791e9 100644
--- a/include/trainer_pokemon_sprites.h
+++ b/include/trainer_pokemon_sprites.h
@@ -3,13 +3,13 @@
#include "global.h"
+u16 sub_810C330(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId);
bool16 ResetAllPicSprites(void);
u16 sub_818D3E4(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 sub_818D7D8(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 sub_818D820(u16 spriteId);
u16 sub_818D8AC(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 sub_818D8F0(u16 spriteId);
-u16 sub_818D938(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId);
u8 sub_818D97C(u8 a0, u8 a1);
u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 FreeAndDestroyMonPicSprite(u16);
diff --git a/ld_script.txt b/ld_script.txt
index f6da871fb..42fc57437 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -130,7 +130,7 @@ SECTIONS {
src/scanline_effect.o(.text);
src/option_menu.o(.text);
src/pokedex.o(.text);
- asm/trainer_card.o(.text);
+ src/trainer_card.o(.text);
asm/pokemon_storage_system.o(.text);
src/pokemon_icon.o(.text);
asm/script_movement.o(.text);
@@ -435,7 +435,7 @@ SECTIONS {
src/wild_encounter.o(.rodata);
data/field_effect.o(.rodata);
src/option_menu.o(.rodata);
- data/trainer_card.o(.rodata);
+ src/trainer_card.o(.rodata);
data/pokemon_storage_system.o(.rodata);
src/pokemon_icon.o(.rodata);
data/fldeff_cut.o(.rodata);
diff --git a/src/money.c b/src/money.c
index 39e5aaa32..323b2e5f6 100644
--- a/src/money.c
+++ b/src/money.c
@@ -4,9 +4,7 @@
#include "string_util.h"
#include "menu.h"
#include "text_window.h"
-
-extern const u8 gText_PokedollarVar1[];
-extern const u8 gUnknown_8419CE7[];
+#include "strings.h"
#define MAX_MONEY 999999
@@ -110,7 +108,7 @@ void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed)
void PrintMoneyAmountInMoneyBoxWithBorder(u8 windowId, u16 tileStart, u8 pallete, int amount)
{
DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, tileStart, pallete);
- AddTextPrinterParameterized(windowId, 2, gUnknown_8419CE7, 0, 0, 0xFF, 0);
+ AddTextPrinterParameterized(windowId, 2, gText_TrainerCardMoney, 0, 0, 0xFF, 0);
PrintMoneyAmountInMoneyBox(windowId, amount, 0);
}
diff --git a/src/pokedex.c b/src/pokedex.c
index fc9781c48..683b605d4 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -87,7 +87,7 @@ bool16 HasAllHoennMons(void)
return TRUE;
}
-bool8 HasAllKantoMons(void)
+bool16 HasAllKantoMons(void)
{
u16 i;
diff --git a/src/start_menu.c b/src/start_menu.c
index 2a1713902..31bb3beb7 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -504,7 +504,7 @@ static bool8 StartMenuPlayerCallback(void)
PlayRainStoppingSoundEffect();
DestroySafariZoneStatsWindow();
CleanupOverworldWindowsAndTilemaps();
- InitTrainerCard(CB2_ReturnToFieldWithOpenMenu);
+ ShowPlayerTrainerCard(CB2_ReturnToFieldWithOpenMenu);
return TRUE;
}
return FALSE;
@@ -554,7 +554,7 @@ static bool8 StartMenuLinkPlayerCallback(void)
{
PlayRainStoppingSoundEffect();
CleanupOverworldWindowsAndTilemaps();
- InitLinkPartnerTrainerCard(gUnknown_300502C, CB2_ReturnToFieldWithOpenMenu);
+ ShowTrainerCardInLink(gUnknown_300502C, CB2_ReturnToFieldWithOpenMenu);
return TRUE;
}
return FALSE;
diff --git a/src/trainer_card.c b/src/trainer_card.c
new file mode 100644
index 000000000..766935244
--- /dev/null
+++ b/src/trainer_card.c
@@ -0,0 +1,1932 @@
+#include "global.h"
+#include "scanline_effect.h"
+#include "palette.h"
+#include "task.h"
+#include "main.h"
+#include "window.h"
+#include "malloc.h"
+#include "link.h"
+#include "bg.h"
+#include "sound.h"
+#include "overworld.h"
+#include "menu.h"
+#include "text.h"
+#include "event_data.h"
+#include "easy_chat.h"
+#include "money.h"
+#include "window.h"
+#include "strings.h"
+#include "string_util.h"
+#include "trainer_card.h"
+#include "gpu_regs.h"
+#include "pokedex.h"
+#include "pokemon_icon.h"
+#include "graphics.h"
+#include "pokemon_icon.h"
+#include "help_system.h"
+#include "trainer_pokemon_sprites.h"
+#include "new_menu_helpers.h"
+#include "constants/songs.h"
+#include "constants/flags.h"
+#include "constants/game_stat.h"
+#include "constants/vars.h"
+#include "constants/species.h"
+
+#define BADGE_COUNT 8
+
+// Trainer Card Types
+enum
+{
+ CARD_TYPE_FRLG,
+ CARD_TYPE_EMERALD,
+};
+
+// Trainer Card Strings
+enum
+{
+ TRAINER_CARD_STRING_NAME = 0,
+ TRAINER_CARD_STRING_HOF_TIME,
+ TRAINER_CARD_STRING_LINK_RECORD,
+ TRAINER_CARD_STRING_WIN_LOSS,
+ TRAINER_CARD_STRING_LINK_WINS,
+ TRAINER_CARD_STRING_LINK_LOSSES,
+ TRAINER_CARD_STRING_TRADES,
+ TRAINER_CARD_STRING_TRADE_COUNT,
+ TRAINER_CARD_STRING_BERRY_CRUSH,
+ TRAINER_CARD_STRING_BERRY_CRUSH_COUNT,
+ TRAINER_CARD_STRING_UNION_ROOM,
+ TRAINER_CARD_STRING_UNION_ROOM_NUM,
+ TRAINER_CARD_STRING_COUNT,
+};
+
+struct TrainerCardData
+{
+ /*0x0000*/ u8 taskState;
+ /*0x0001*/ u8 printState;
+ /*0x0002*/ u8 gfxLoadState;
+ /*0x0003*/ u8 bgPalLoadState;
+ /*0x0004*/ u8 var_4;
+ /*0x0005*/ bool8 isLink;
+ /*0x0006*/ u8 var_6;
+ /*0x0007*/ u8 var_7;
+ /*0x0008*/ u8 var_8;
+ /*0x0009*/ bool8 allowDMACopy;
+ /*0x000A*/ bool8 hasPokedex;
+ /*0x000B*/ bool8 hasHofResult;
+ /*0x000C*/ bool8 hasLinkResults;
+ /*0x000D*/ bool8 hasBattleTowerWins;
+ /*0x000E*/ u8 var_E;
+ /*0x000F*/ u8 var_F;
+ /*0x0010*/ bool8 hasTrades;
+ /*0x0011*/ bool8 hasBadge[BADGE_COUNT];
+ /*0x0019*/ u8 var_19[4][13];
+ /*0x004D*/ u8 strings[TRAINER_CARD_STRING_COUNT][70];
+ /*0x0395*/ u8 var_395;
+ /*0x0396*/ u16 monIconPals[0x30];
+ /*0x03F6*/ u8 var_3DB[0x60];
+ /*0x0456*/ s8 var_456;
+ /*0x0457*/ u8 cardType;
+ /*0x0458*/ void (*callback2)(void);
+ /*0x045C*/ struct TrainerCard trainerCard;
+ /*0x04BC*/ u16 var_4BC;
+ /*0x04BE*/ u8 var_4BE[0x4AE];
+ /*0x096C*/ u16 var_96C[0x258];
+ /*0x0E1C*/ u16 var_E1C;
+ /*0x0E1E*/ u8 unk_E1E[0x4AE];
+ /*0x12CC*/ u16 cardTiles[0x200];
+ /*0x16CC*/ u16 bgTiles[0x100];
+ /*0x18CC*/ u16 var_18CC[0x1180];
+ /*0x3BCC*/ u16 bgTilemap0[0x1000];
+ /*0x5BCC*/ u16 bgTilemap2[0x1000];
+ /*0x7BCC*/ u16 var_7BCC;
+ /*0x7BCE*/ bool8 var_7BCE;
+ /*0x7BCF*/ u8 language;
+}; /* size = 0x7BD0 */
+
+// RAM
+EWRAM_DATA struct TrainerCard gTrainerCards[4] = {0};
+EWRAM_DATA static struct TrainerCardData *sTrainerCardDataPtr = NULL;
+
+// Function Declaration
+static void VBlankCB_TrainerCard(void);
+static void HBlankCB_TrainerCard(void);
+static void CB2_TrainerCard(void);
+static void CloseTrainerCard(u8 taskId);
+static void Task_TrainerCard(u8 taskId);
+static bool8 LoadCardGfx(void);
+static void CB2_InitTrainerCard(void);
+static u32 GetCappedGameStat(u8 statId, u32 maxValue);
+static u8 GetTrainerStarCount(struct TrainerCard *trainerCard);
+static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType);
+static void SetDataFromTrainerCard(void);
+static void HandleGpuRegs(void);
+static void sub_8089BD8(u16 arg0);
+static void ResetGpuRegs(void);
+static void TrainerCardNull(void);
+static void sub_8089C5C(void);
+static void sub_8089C80(void);
+static void sub_8089CA4(void);
+static void ResetTrainerCard(void);
+static void SetTrainerCardCB2(void);
+static void sub_8089DA4(void);
+static bool8 PrintAllOnCardPage1(void);
+static bool8 PrintStringsOnCardPage2(void);
+static void sub_8089ECC(void);
+static void PrintNameOnCard(void);
+static void PrintIdOnCard(void);
+static void PrintMoneyOnCard(void);
+static u16 GetCaughtMonsCount(void);
+static void PrintPokedexOnCard(void);
+static void PrintTimeOnCard(void);
+static void PrintProfilePhraseOnCard(void);
+static void PrintNameOnCard2(void);
+static void sub_808A4FC(void);
+static void PrintHofTimeOnCard(void);
+static void PrintHofDebutStringOnCard(void);
+static void PrintLinkResultsNumsOnCard(void);
+static void PrintWinsLossesStringOnCard(void);
+static void PrintTradesNumOnCard(void);
+static void PrintTradesStringOnCard(void);
+static void PrintBerryCrushNumOnCard(void);
+static void PrintBerryCrushStringOnCard(void);
+static void PrintUnionNumOnCard(void);
+static void PrintUnionStringOnCard(void);
+static void TrainerCard_PrintPokemonIconsOnCard(void);
+static void sub_808AB10(void);
+static void sub_808ABE0(void);
+static void TrainerCardLoadStickerPals(void);
+static void PutTrainerCardWindow(u8 windowId);
+static bool8 SetTrainerCardBgsAndPals(void);
+static void LoadTrainerCardTilemap2(const u16* ptr);
+static void LoadTrainerCardTilemap0(const u16* ptr);
+static void TrainerCard_PrintStarsAndBadgesOnCard(void);
+static void sub_808B090(void);
+static void sub_808B180(void);
+static void sub_808B1D4(void);
+static bool8 sub_808B1FC(void);
+static void sub_808B21C(u8 taskId);
+static bool8 sub_808B254(struct Task* task);
+static bool8 sub_808B294(struct Task* task);
+static bool8 sub_808B3C4(struct Task* task);
+static bool8 sub_808B4D8(struct Task* task);
+static bool8 sub_808B540(struct Task* task);
+static bool8 sub_808B66C(struct Task *task);
+static void sub_808B774(void);
+static u8 GetCardType(void);
+static void sub_808B838(void);
+
+// Data
+static const u32 sTrainerCardStickers[] = INCBIN_U32("graphics/trainer_card/stickers.4bpp.lz");
+static const u32 sUnknown_83CC4DC[] = INCBIN_U32("graphics/trainer_card/unk_83CC4DC.bin");
+static const u32 sUnknown_83CC6F0[] = INCBIN_U32("graphics/trainer_card/unk_83CC6F0.bin");
+static const u32 sUnknown_83CC8A8[] = INCBIN_U32("graphics/trainer_card/unk_83CC8A8.bin");
+static const u32 sUnknown_83CC984[] = INCBIN_U32("graphics/trainer_card/unk_83CC984.bin");
+static const u32 sUnknown_83CCAB0[] = INCBIN_U32("graphics/trainer_card/unk_83CCAB0.bin");
+static const u32 sUnknown_83CCCA4[] = INCBIN_U32("graphics/trainer_card/unk_83CCCA4.bin");
+static const u32 sUnknown_83CCE30[] = INCBIN_U32("graphics/trainer_card/unk_83CCE30.bin");
+static const u32 sUnknown_83CCEC8[] = INCBIN_U32("graphics/trainer_card/unk_83CCEC8.bin");
+static const u16 sEmeraldTrainerCard1Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_1stars_pals.gbapal");
+static const u16 sFireRedTrainerCard1Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_1stars_pals.gbapal");
+static const u16 sEmeraldTrainerCard2Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_2stars_pals.gbapal");
+static const u16 sFireRedTrainerCard2Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_2stars_pals.gbapal");
+static const u16 sEmeraldTrainerCard3Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_3stars_pals.gbapal");
+static const u16 sFireRedTrainerCard3Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_3stars_pals.gbapal");
+static const u16 sEmeraldTrainerCard4Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_4stars_pals.gbapal");
+static const u16 sFireRedTrainerCard4Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_4stars_pals.gbapal");
+static const u16 sEmeraldTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/em_female_bg.gbapal");
+static const u16 sFireRedTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/fr_female_bg.gbapal");
+static const u16 sEmeraldTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/em_badges.gbapal");
+static const u16 sFireRedTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/fr_badges.gbapal");
+static const u16 sUnknown_83CD300[] = INCBIN_U16("graphics/trainer_card/unk_83CD300.gbapal");
+static const u16 sTrainerCardStickerPal1[] = INCBIN_U16("graphics/trainer_card/sticker1.gbapal");
+static const u16 sTrainerCardStickerPal2[] = INCBIN_U16("graphics/trainer_card/sticker2.gbapal");
+static const u16 sTrainerCardStickerPal3[] = INCBIN_U16("graphics/trainer_card/sticker3.gbapal");
+static const u16 sTrainerCardStickerPal4[] = INCBIN_U16("graphics/trainer_card/sticker4.gbapal");
+static const u32 sEmeraldTrainerCardBadges_Tile[] = INCBIN_U32("graphics/trainer_card/em_badges.4bpp.lz");
+static const u32 sFireRedTrainerCardBadges_Tile[] = INCBIN_U32("graphics/trainer_card/badges.4bpp.lz");
+
+static const struct BgTemplate sTrainerCardBgTemplates[4] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 27,
+ .screenSize = 2,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 29,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 192
+ }
+};
+
+static const struct WindowTemplate sTrainerCardWindowTemplates[4] =
+{
+ {
+ .bg = 1,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 26,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x241
+ },
+ {
+ .bg = 1,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 27,
+ .height = 18,
+ .paletteNum = 15,
+ .baseBlock = 0x1
+ },
+ {
+ .bg = 3,
+ .tilemapLeft = 19,
+ .tilemapTop = 5,
+ .width = 9,
+ .height = 10,
+ .paletteNum = 8,
+ .baseBlock = 0x150
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const u16 *const sEmeraldTrainerCardStarPals[] =
+{
+ gEmeraldTrainerCard_Pal,
+ sEmeraldTrainerCard1Stars_Pals,
+ sEmeraldTrainerCard2Stars_Pals,
+ sEmeraldTrainerCard3Stars_Pals,
+ sEmeraldTrainerCard4Stars_Pals
+};
+
+static const u16 *const sFireRedTrainerCardStarPals[] =
+{
+ gFireRedTrainerCard_Pal,
+ sFireRedTrainerCard1Stars_Pals,
+ sFireRedTrainerCard2Stars_Pals,
+ sFireRedTrainerCard3Stars_Pals,
+ sFireRedTrainerCard4Stars_Pals
+};
+
+static const u8 sFireRedTrainerCardPage1TextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
+static const u8 sTrainerCardPage2TextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED};
+static const u8 sEmeraldTrainerCardPage1TextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_TRANSPARENT};
+static const u8 sTrainerCardFontIds[] = {0, 2, 0};
+
+static const u8 sTrainerCardPicPositions[][2][2] =
+{
+ {{13, 4}, {13, 4}},
+ {{1, 0}, {1, 0}}
+};
+
+static const u8 sLinkTrainerCardFrontPics[][2] =
+{
+ {TRAINER_PIC_RS_MAY_2, TRAINER_PIC_RED},
+ {TRAINER_PIC_PROFESSOR_OAK, TRAINER_PIC_RS_BRENDAN_2},
+};
+
+static const u8 sLinkTrainerCardFacilityClasses[][8] =
+{
+ {0x74, 0x6F, 0x5C, 0x58, 0x6A, 0x59, 0x6D, 0x6C},
+ {0x75, 0x7D, 0x5D, 0x5A, 0x16, 0x30, 0x41, 0x68}
+};
+
+static bool8 (*const sTrainerCardTasks[])(struct Task *) =
+{
+ sub_808B254,
+ sub_808B294,
+ sub_808B3C4,
+ sub_808B4D8,
+ sub_808B540,
+ sub_808B66C
+};
+
+static const u8 sTrainerCardPlayerNameXPositions[] = {0x14, 0x10};
+static const u8 sTrainerCardPlayerNameYPositions[] = {0x1D, 0x21};
+static const u8 sTrainerCardIdXPositions[] = {0x8E, 0x80};
+static const u8 sTrainerCardIdYPositions[] = {0xA, 0x9};
+static const u8 *const sTrainerCardTextColors[] = {sFireRedTrainerCardPage1TextColors, sEmeraldTrainerCardPage1TextColors};
+static const u8 sTrainerCardTimeHoursXPositions[] = {0x65, 0x55};
+static const u8 sTrainerCardTimeHoursYPositions[] = {0x77, 0x67};
+static const u8 sTrainerCardTimeMinutesXPositions[] = {0x7C, 0x6C};
+static const u8 sTrainerCardTimeMinutesYPositions[] = {0x58, 0x59};
+static const u8 sTrainerCardProfilePhraseXPositions[] = {0x73, 0x69};
+static const u8 sTrainerCardProfilePhraseYPositions[] = {0x82, 0x78};
+static const u8 sUnknown_83CD93C[] = {0x8A, 0xD8};
+static const u8 sUnknown_83CD93E[] = {0xB, 0xA};
+static const u8 sTrainerCardHofDebutXPositions[] = {0xA, 0x10, 0x0, 0x0};
+static const u8 *const sLinkTrainerCardRecordStrings[] = {gText_LinkBattles, gText_LinkCableBattles};
+static const u8 sUnknown_83CD94C[] = {5, 6, 7, 8, 9, 10};
+static const u8 sUnknown_83CD952[] = {0, 4, 8, 12, 16, 20};
+static const u8 sUnknown_83CD958[] = {11, 12, 13, 14};
+static const u8 sUnknown_83CD95C[] = {7, 6, 0, 0};
+
+static const struct TrainerCard sLinkPlayerTrainerCardTemplate1 =
+{
+ .gender = MALE,
+ .stars = 4,
+ .hasPokedex = TRUE,
+ .caughtAllHoenn = TRUE,
+ .hasAllPaintings = TRUE,
+ .hofDebutHours = 999,
+ .hofDebutMinutes = 59,
+ .hofDebutSeconds = 59,
+ .caughtMonsCount = 200,
+ .trainerId = 0x6072,
+ .playTimeHours = 999,
+ .playTimeMinutes = 59,
+ .linkBattleWins = 5535,
+ .linkBattleLosses = 5535,
+ .battleTowerWins = 5535,
+ .battleTowerStraightWins = 5535,
+ .contestsWithFriends = 55555,
+ .pokeblocksWithFriends = 44444,
+ .pokemonTrades = 33333,
+ .money = 999999,
+ .var_28 = {0, 0, 0, 0},
+ .playerName = _("あかみ どりお"),
+ .version = VERSION_FIRE_RED,
+ .var_3A = 0,
+ .berryCrushPoints = 5555,
+ .unionRoomNum = 8500,
+ .berriesPicked = 5456,
+ .jumpsInRow = 6300,
+ .var_4C = TRUE,
+ .hasAllMons = TRUE,
+ .var_4E = 2,
+ .var_4F = 0,
+ .var_50 = {1, 2, 3, 0},
+ .monSpecies = {SPECIES_CHARIZARD, SPECIES_DIGLETT, SPECIES_NIDORINA, SPECIES_FEAROW, SPECIES_PARAS, SPECIES_SLOWBRO}
+};
+
+static const struct TrainerCard sLinkPlayerTrainerCardTemplate2 =
+{
+ .gender = FEMALE,
+ .stars = 2,
+ .hasPokedex = TRUE,
+ .caughtAllHoenn = TRUE,
+ .hasAllPaintings = TRUE,
+ .hofDebutHours = 999,
+ .hofDebutMinutes = 59,
+ .hofDebutSeconds = 59,
+ .caughtMonsCount = 200,
+ .trainerId = 0x6072,
+ .playTimeHours = 999,
+ .playTimeMinutes = 59,
+ .linkBattleWins = 5535,
+ .linkBattleLosses = 5535,
+ .battleTowerWins = 65535,
+ .battleTowerStraightWins = 65535,
+ .contestsWithFriends = 55555,
+ .pokeblocksWithFriends = 44444,
+ .pokemonTrades = 33333,
+ .money = 999999,
+ .var_28 = {0, 0, 0, 0},
+ .playerName = _("るびさふぁこ!"),
+ .version = 0,
+ .var_3A = 0,
+ .berryCrushPoints = 555,
+ .unionRoomNum = 500,
+ .berriesPicked = 456,
+ .jumpsInRow = 300,
+ .var_4C = TRUE,
+ .hasAllMons = TRUE,
+ .var_4E = 2,
+ .var_4F = 0,
+ .var_50 = {1, 2, 3, 0},
+ .monSpecies = {SPECIES_CHARIZARD, SPECIES_DIGLETT, SPECIES_NIDORINA, SPECIES_FEAROW, SPECIES_PARAS, SPECIES_SLOWBRO}
+};
+
+// Functions
+static void VBlankCB_TrainerCard(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_808B180();
+ if (sTrainerCardDataPtr->allowDMACopy)
+ DmaCopy16(3, &gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 0x140);
+}
+
+static void HBlankCB_TrainerCard(void)
+{
+ u16 backup;
+ u16 bgVOffset;
+
+ backup = REG_IME;
+ REG_IME = 0;
+ bgVOffset = gScanlineEffectRegBuffers[1][REG_VCOUNT & 0xFF];
+ REG_BG0VOFS = bgVOffset;
+ REG_IME = backup;
+}
+
+static void CB2_TrainerCard(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void CloseTrainerCard(u8 taskId)
+{
+ SetMainCallback2(sTrainerCardDataPtr->callback2);
+ FreeAllWindowBuffers();
+ FREE_AND_SET_NULL(sTrainerCardDataPtr);
+ DestroyTask(taskId);
+}
+
+static void Task_TrainerCard(u8 taskId)
+{
+ switch (sTrainerCardDataPtr->taskState)
+ {
+ case 0:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ sTrainerCardDataPtr->taskState++;
+ }
+ break;
+ case 1:
+ if (PrintAllOnCardPage1())
+ sTrainerCardDataPtr->taskState++;
+ break;
+ case 2:
+ PutTrainerCardWindow(1);
+ sTrainerCardDataPtr->taskState++;
+ break;
+ case 3:
+ FillWindowPixelBuffer(2, PIXEL_FILL(0));
+ sub_808B838();
+ PutTrainerCardWindow(2);
+ sTrainerCardDataPtr->taskState++;
+ break;
+ case 4:
+ LoadTrainerCardTilemap2(&sTrainerCardDataPtr->var_E1C);
+ sTrainerCardDataPtr->taskState++;
+ break;
+ case 5:
+ LoadTrainerCardTilemap0(&sTrainerCardDataPtr->var_4BC);
+ sTrainerCardDataPtr->taskState++;
+ break;
+ case 6:
+ TrainerCard_PrintStarsAndBadgesOnCard();
+ sTrainerCardDataPtr->taskState++;
+ break;
+ case 7:
+ if (gWirelessCommType == 1 && gReceivedRemoteLinkPlayers == TRUE)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(230, 150);
+ }
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ SetVBlankCallback(VBlankCB_TrainerCard);
+ sTrainerCardDataPtr->taskState++;
+ break;
+ case 8:
+ if (!UpdatePaletteFade() && !IsDma3ManagerBusyWithBgCopy())
+ {
+ PlaySE(SE_CARD3);
+ sTrainerCardDataPtr->taskState = 10;
+ }
+ break;
+ case 9:
+ if (!IsSEPlaying())
+ sTrainerCardDataPtr->taskState++;
+ break;
+ case 10:
+ if (!gReceivedRemoteLinkPlayers && sTrainerCardDataPtr->var_7BCE)
+ {
+ PrintTimeOnCard();
+ PutTrainerCardWindow(1);
+ sTrainerCardDataPtr->var_7BCE = FALSE;
+ }
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ HelpSystem_SetSomeVariable2(11);
+ sub_808B1D4();
+ PlaySE(SE_CARD1);
+ sTrainerCardDataPtr->taskState = 12;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ if (gReceivedRemoteLinkPlayers && sTrainerCardDataPtr->isLink && InUnionRoom() == TRUE)
+ {
+ sTrainerCardDataPtr->taskState = 15;
+ }
+ else
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTrainerCardDataPtr->taskState = 14;
+ }
+ }
+ break;
+ case 12:
+ if (sub_808B1FC() && sub_8058244() != TRUE)
+ {
+ PlaySE(SE_CARD3);
+ sTrainerCardDataPtr->taskState = 11;
+ }
+ break;
+ case 11:
+ if (JOY_NEW(B_BUTTON))
+ {
+ if (gReceivedRemoteLinkPlayers && sTrainerCardDataPtr->isLink && InUnionRoom() == TRUE)
+ {
+ sTrainerCardDataPtr->taskState = 15;
+ }
+ else if (gReceivedRemoteLinkPlayers)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTrainerCardDataPtr->taskState = 14;
+ }
+ else
+ {
+ HelpSystem_SetSomeVariable2(10);
+ sub_808B1D4();
+ sTrainerCardDataPtr->taskState = 13;
+ PlaySE(SE_CARD1);
+ }
+ }
+ else if (JOY_NEW(A_BUTTON))
+ {
+ if (gReceivedRemoteLinkPlayers && sTrainerCardDataPtr->isLink && InUnionRoom() == TRUE)
+ {
+ sTrainerCardDataPtr->taskState = 15;
+ }
+ else
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTrainerCardDataPtr->taskState = 14;
+ }
+ }
+ break;
+ case 15:
+ sub_800AAC0();
+ DrawDialogueFrame(0, 1);
+ AddTextPrinterParameterized(0, 2, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SPEED_FF, 0);
+ CopyWindowToVram(0, 3);
+ sTrainerCardDataPtr->taskState = 16;
+ break;
+ case 16:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTrainerCardDataPtr->taskState = 14;
+ }
+ break;
+ case 14:
+ if (!UpdatePaletteFade())
+ CloseTrainerCard(taskId);
+ break;
+ case 13:
+ if (sub_808B1FC() && sub_8058244() != TRUE)
+ {
+ sTrainerCardDataPtr->taskState = 10;
+ PlaySE(SE_CARD3);
+ }
+ break;
+ }
+}
+
+static bool8 LoadCardGfx(void)
+{
+ switch (sTrainerCardDataPtr->gfxLoadState)
+ {
+ case 0:
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD)
+ LZ77UnCompWram(sUnknown_83CCE30, &sTrainerCardDataPtr->var_E1C);
+ else
+ LZ77UnCompWram(sUnknown_83CCEC8, &sTrainerCardDataPtr->var_E1C);
+ break;
+ case 1:
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD)
+ LZ77UnCompWram(sUnknown_83CC8A8, &sTrainerCardDataPtr->var_96C);
+ else
+ LZ77UnCompWram(sUnknown_83CC984, &sTrainerCardDataPtr->var_96C);
+ break;
+ case 2:
+ if (!sTrainerCardDataPtr->isLink)
+ {
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD)
+ LZ77UnCompWram(sUnknown_83CC4DC, &sTrainerCardDataPtr->var_4BC);
+ else
+ LZ77UnCompWram(sUnknown_83CC6F0, &sTrainerCardDataPtr->var_4BC);
+ }
+ else
+ {
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD)
+ LZ77UnCompWram(sUnknown_83CCAB0, &sTrainerCardDataPtr->var_4BC);
+ else
+ LZ77UnCompWram(sUnknown_83CCCA4, &sTrainerCardDataPtr->var_4BC);
+ }
+ break;
+ case 3:
+ LZ77UnCompWram(sFireRedTrainerCardBadges_Tile, &sTrainerCardDataPtr->cardTiles);
+ break;
+ case 4:
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD)
+ LZ77UnCompWram(gEmeraldTrainerCard_Gfx, &sTrainerCardDataPtr->var_18CC);
+ else
+ LZ77UnCompWram(gFireRedTrainerCard_Gfx, &sTrainerCardDataPtr->var_18CC);
+ break;
+ case 5:
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_FRLG)
+ LZ77UnCompWram(sTrainerCardStickers, &sTrainerCardDataPtr->bgTiles);
+ break;
+ default:
+ sTrainerCardDataPtr->gfxLoadState = 0;
+ return TRUE;
+ }
+ sTrainerCardDataPtr->gfxLoadState++;
+ return FALSE;
+}
+
+static void CB2_InitTrainerCard(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ ResetGpuRegs();
+ sub_8089DA4();
+ gMain.state++;
+ break;
+ case 1:
+ TrainerCardNull();
+ gMain.state++;
+ break;
+ case 2:
+ sub_8089C5C();
+ gMain.state++;
+ break;
+ case 3:
+ sub_8089C80();
+ gMain.state++;
+ // fallthrough
+ case 4:
+ sub_8089CA4();
+ gMain.state++;
+ break;
+ case 5:
+ ResetTrainerCard();
+ gMain.state++;
+ break;
+ case 6:
+ LoadStdWindowFrameGfx();
+ gMain.state++;
+ break;
+ case 7:
+ sub_808AB10();
+ gMain.state++;
+ break;
+ case 8:
+ if (LoadCardGfx() == TRUE)
+ gMain.state++;
+ break;
+ case 9:
+ TrainerCardLoadStickerPals();
+ gMain.state++;
+ break;
+ case 10:
+ HandleGpuRegs();
+ gMain.state++;
+ break;
+ case 11:
+ sub_8089ECC();
+ gMain.state++;
+ break;
+ case 12:
+ if (SetTrainerCardBgsAndPals() == TRUE)
+ gMain.state++;
+ break;
+ case 13:
+ gMain.state++;
+ break;
+ default:
+ SetTrainerCardCB2();
+ break;
+ }
+}
+
+static u32 GetCappedGameStat(u8 statId, u32 maxValue)
+{
+ u32 statValue = GetGameStat(statId);
+ return min(maxValue, statValue);
+}
+
+static u8 GetTrainerStarCount(struct TrainerCard *trainerCard)
+{
+ u8 stars = 0;
+
+ if (trainerCard->hofDebutHours != 0 || trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0)
+ stars++;
+
+ if (trainerCard->caughtAllHoenn)
+ stars++;
+
+ if (trainerCard->battleTowerStraightWins > 49)
+ stars++;
+
+ if (trainerCard->hasAllPaintings)
+ stars++;
+
+ return stars;
+}
+
+static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType)
+{
+ u32 playTime;
+ u8 i;
+
+ trainerCard->gender = gSaveBlock2Ptr->playerGender;
+ trainerCard->playTimeHours = gSaveBlock2Ptr->playTimeHours;
+ trainerCard->playTimeMinutes = gSaveBlock2Ptr->playTimeMinutes;
+
+ playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME);
+ if (!GetGameStat(GAME_STAT_ENTERED_HOF))
+ playTime = 0;
+
+ trainerCard->hofDebutHours = playTime >> 16;
+ trainerCard->hofDebutMinutes = (playTime >> 8) & 0xFF;
+ trainerCard->hofDebutSeconds = playTime & 0xFF;
+ if ((playTime >> 16) > 999)
+ {
+ trainerCard->hofDebutHours = 999;
+ trainerCard->hofDebutMinutes = 59;
+ trainerCard->hofDebutSeconds = 59;
+ }
+
+ trainerCard->hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET);
+ trainerCard->caughtAllHoenn = HasAllHoennMons();
+ trainerCard->caughtMonsCount = GetCaughtMonsCount();
+
+ trainerCard->trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0];
+
+ trainerCard->linkBattleWins = GetCappedGameStat(GAME_STAT_LINK_BATTLE_WINS, 9999);
+ trainerCard->linkBattleLosses = GetCappedGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 9999);
+ trainerCard->pokemonTrades = GetCappedGameStat(GAME_STAT_POKEMON_TRADES, 0xFFFF);
+
+ trainerCard->battleTowerWins = 0;
+ trainerCard->battleTowerStraightWins = 0;
+ trainerCard->contestsWithFriends = 0;
+ trainerCard->pokeblocksWithFriends = 0;
+
+ trainerCard->hasAllPaintings = FALSE;
+
+ trainerCard->money = GetMoney(&gSaveBlock1Ptr->money);
+
+ for (i = 0; i < 4; i++)
+ trainerCard->var_28[i] = gSaveBlock1Ptr->easyChatProfile[i];
+
+ StringCopy(trainerCard->playerName, gSaveBlock2Ptr->playerName);
+
+ if (cardType == CARD_TYPE_FRLG)
+ {
+ trainerCard->stars = GetTrainerStarCount(trainerCard);
+ }
+ else if (cardType == CARD_TYPE_EMERALD)
+ {
+ trainerCard->stars = 0;
+ if (trainerCard->hofDebutHours != 0 || (trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0))
+ trainerCard->stars = cardType;
+
+ if (HasAllKantoMons())
+ trainerCard->stars++;
+
+ if (HasAllMons())
+ trainerCard->stars++;
+ }
+}
+
+void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard)
+{
+ u8 id = 0;
+
+ trainerCard->version = VERSION_FIRE_RED;
+ SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD);
+ if (GetCardType() != CARD_TYPE_FRLG)
+ return;
+
+ trainerCard->stars = id;
+ if (trainerCard->hofDebutHours != 0 || trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0)
+ trainerCard->stars = 1;
+
+ trainerCard->caughtAllHoenn = HasAllKantoMons();
+ trainerCard->hasAllMons = HasAllMons();
+ trainerCard->berriesPicked = gSaveBlock2Ptr->berryPick.berriesPicked;
+ trainerCard->jumpsInRow = gSaveBlock2Ptr->pokeJump.jumpsInRow;
+
+ trainerCard->berryCrushPoints = GetCappedGameStat(GAME_STAT_BERRY_CRUSH_POINTS, 0xFFFF);
+ trainerCard->unionRoomNum = GetCappedGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES, 0xFFFF);
+ trainerCard->var_4C = TRUE;
+
+ if (trainerCard->caughtAllHoenn)
+ trainerCard->stars++;
+
+ if (trainerCard->hasAllMons)
+ trainerCard->stars++;
+
+ if (trainerCard->berriesPicked >= 200 && trainerCard->jumpsInRow >= 200)
+ trainerCard->stars++;
+
+ id = ((u16)trainerCard->trainerId) % 8;
+ if (trainerCard->gender == FEMALE)
+ trainerCard->var_4F = sLinkTrainerCardFacilityClasses[1][id];
+ else
+ trainerCard->var_4F = sLinkTrainerCardFacilityClasses[0][id];
+
+ trainerCard->var_50[0] = VarGet(VAR_HOF_BRAG_STATE);
+ trainerCard->var_50[1] = VarGet(VAR_EGG_BRAG_STATE);
+ trainerCard->var_50[2] = VarGet(VAR_LINK_WIN_BRAG_STATE);
+
+ trainerCard->var_4E = VarGet(VAR_TRAINER_CARD_MON_ICON_TINT_IDX);
+
+ trainerCard->monSpecies[0] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_1));
+ trainerCard->monSpecies[1] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_2));
+ trainerCard->monSpecies[2] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_3));
+ trainerCard->monSpecies[3] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_4));
+ trainerCard->monSpecies[4] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_5));
+ trainerCard->monSpecies[5] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_6));
+}
+
+static void SetDataFromTrainerCard(void)
+{
+ u32 badgeFlag;
+ u8 i;
+
+ sTrainerCardDataPtr->hasPokedex = FALSE;
+ sTrainerCardDataPtr->hasHofResult = FALSE;
+ sTrainerCardDataPtr->hasLinkResults = FALSE;
+ sTrainerCardDataPtr->hasBattleTowerWins = FALSE;
+ sTrainerCardDataPtr->var_E = FALSE;
+ sTrainerCardDataPtr->var_F = FALSE;
+ sTrainerCardDataPtr->hasTrades = FALSE;
+
+ memset(&sTrainerCardDataPtr->hasBadge, FALSE, BADGE_COUNT);
+ if (sTrainerCardDataPtr->trainerCard.hasPokedex)
+ sTrainerCardDataPtr->hasPokedex++;
+
+ if (sTrainerCardDataPtr->trainerCard.hofDebutHours != 0
+ || sTrainerCardDataPtr->trainerCard.hofDebutMinutes != 0
+ || sTrainerCardDataPtr->trainerCard.hofDebutSeconds != 0)
+ sTrainerCardDataPtr->hasHofResult++;
+
+ if (sTrainerCardDataPtr->trainerCard.linkBattleWins != 0 || sTrainerCardDataPtr->trainerCard.linkBattleLosses != 0)
+ sTrainerCardDataPtr->hasLinkResults++;
+
+ if (sTrainerCardDataPtr->trainerCard.pokemonTrades != 0)
+ sTrainerCardDataPtr->hasTrades++;
+
+ for (i = 0, badgeFlag = FLAG_BADGE01_GET; badgeFlag <= FLAG_BADGE08_GET; badgeFlag++, i++)
+ {
+ if (FlagGet(badgeFlag))
+ sTrainerCardDataPtr->hasBadge[i]++;
+ }
+}
+
+static void HandleGpuRegs(void)
+{
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_DARKEN);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ);
+ SetGpuReg(REG_OFFSET_WIN0V, WININ_WIN0_CLR | WIN_RANGE(0, 0x80));
+ SetGpuReg(REG_OFFSET_WIN0H, WININ_WIN0_CLR | WININ_WIN0_OBJ | WIN_RANGE(0, 0xC0));
+ if (gReceivedRemoteLinkPlayers)
+ EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
+ else
+ EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK);
+}
+
+static void sub_8089BD8(u16 arg0)
+{
+ s8 quotient = (arg0 + 40) / 10;
+
+ if (quotient <= 4)
+ quotient = 0;
+
+ sTrainerCardDataPtr->var_456 = quotient;
+ SetGpuReg(REG_OFFSET_BLDY, sTrainerCardDataPtr->var_456);
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(sTrainerCardDataPtr->var_7BCC, 160 - sTrainerCardDataPtr->var_7BCC));
+}
+
+static void ResetGpuRegs(void)
+{
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+}
+
+static void TrainerCardNull(void)
+{
+}
+
+static void sub_8089C5C(void)
+{
+ DmaClear32(3, (void *)OAM, OAM_SIZE);
+}
+
+static void sub_8089C80(void)
+{
+ DmaClear16(3, (void *)PLTT, PLTT_SIZE);
+}
+
+static void sub_8089CA4(void)
+{
+ SetGpuReg(REG_OFFSET_BG0CNT, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG1CNT, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG2CNT, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG3CNT, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, DISPCNT_MODE_0);
+}
+
+static void ResetTrainerCard(void)
+{
+ ResetSpriteData();
+ ResetPaletteFade();
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sTrainerCardBgTemplates, NELEMS(sTrainerCardBgTemplates));
+ 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);
+ InitWindows(sTrainerCardWindowTemplates);
+ DeactivateAllTextPrinters();
+}
+
+static void SetTrainerCardCB2(void)
+{
+ SetMainCallback2(CB2_TrainerCard);
+ HelpSystem_SetSomeVariable2(10);
+}
+
+static void sub_8089DA4(void)
+{
+ ResetTasks();
+ ScanlineEffect_Stop();
+ CreateTask(Task_TrainerCard, 0);
+ sub_808B774();
+ SetDataFromTrainerCard();
+}
+
+static bool8 PrintAllOnCardPage1(void)
+{
+ switch (sTrainerCardDataPtr->printState)
+ {
+ case 0:
+ PrintNameOnCard();
+ break;
+ case 1:
+ PrintIdOnCard();
+ break;
+ case 2:
+ PrintMoneyOnCard();
+ break;
+ case 3:
+ PrintPokedexOnCard();
+ break;
+ case 4:
+ PrintTimeOnCard();
+ break;
+ case 5:
+ PrintProfilePhraseOnCard();
+ break;
+ default:
+ sTrainerCardDataPtr->printState = 0;
+ return TRUE;
+ }
+ sTrainerCardDataPtr->printState++;
+ return FALSE;
+}
+
+static bool8 PrintStringsOnCardPage2(void)
+{
+ switch (sTrainerCardDataPtr->printState)
+ {
+ case 0:
+ sub_808A4FC();
+ break;
+ case 1:
+ PrintHofDebutStringOnCard();
+ break;
+ case 2:
+ PrintWinsLossesStringOnCard();
+ break;
+ case 3:
+ PrintTradesStringOnCard();
+ break;
+ case 4:
+ PrintBerryCrushStringOnCard();
+ break;
+ case 5:
+ PrintUnionStringOnCard();
+ break;
+ case 6:
+ TrainerCard_PrintPokemonIconsOnCard();
+ break;
+ case 7:
+ sub_808ABE0();
+ break;
+ default:
+ sTrainerCardDataPtr->printState = 0;
+ return TRUE;
+ }
+ sTrainerCardDataPtr->printState++;
+ return FALSE;
+}
+
+static void sub_8089ECC(void)
+{
+ PrintNameOnCard2();
+ PrintHofTimeOnCard();
+ PrintLinkResultsNumsOnCard();
+ PrintTradesNumOnCard();
+ PrintBerryCrushNumOnCard();
+ PrintUnionNumOnCard();
+}
+
+static void PrintNameOnCard(void)
+{
+ u8 buffer[2][32];
+ u8* txtPtr;
+
+ txtPtr = StringCopy(buffer[0], gText_TrainerCardName);
+ txtPtr = buffer[1];
+ StringCopy(txtPtr, sTrainerCardDataPtr->trainerCard.playerName);
+ ConvertInternationalString(txtPtr, sTrainerCardDataPtr->language);
+ StringAppend(buffer[0], txtPtr);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardPlayerNameXPositions[sTrainerCardDataPtr->cardType], sTrainerCardPlayerNameYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer[0]);
+}
+
+static void PrintIdOnCard(void)
+{
+ u8 buffer[32];
+ u8* txtPtr;
+
+ txtPtr = StringCopy(buffer, gText_TrainerCardIDNo);
+ ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardIdXPositions[sTrainerCardDataPtr->cardType], sTrainerCardIdYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer);
+}
+
+static void PrintMoneyOnCard(void)
+{
+ u8 buffer[10];
+ u8* txtPtr;
+ u8 x;
+
+ txtPtr = StringCopy(buffer, gText_TrainerCardYen);
+ ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6);
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD)
+ {
+ x = -122 - 6 * StringLength(buffer);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 56, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardMoney);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 56, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer);
+ }
+ else
+ {
+ x = 118 - 6 * StringLength(buffer);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 57, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardMoney);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 57, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer);
+ }
+}
+
+static u16 GetCaughtMonsCount(void)
+{
+ if (IsNationalPokedexEnabled())
+ return GetNationalPokedexCount(FLAG_GET_CAUGHT);
+ else
+ return GetKantoPokedexCount(FLAG_GET_CAUGHT);
+}
+
+static void PrintPokedexOnCard(void)
+{
+ u8 buffer[10];
+ u8 x;
+
+ if (FlagGet(FLAG_SYS_POKEDEX_GET))
+ {
+ ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.caughtMonsCount, 0, 3);
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD)
+ {
+ x = -120 - 6 * StringLength(buffer);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 72, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 72, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 138, 72, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardNull);
+ }
+ else
+ {
+ x = 120 - 6 * StringLength(buffer);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 73, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 73, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 138, 73, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardNull);
+ }
+ }
+}
+
+static void PrintTimeOnCard(void)
+{
+ u16 hours;
+ u16 minutes;
+ u8 buffer[6];
+
+ hours = gSaveBlock2Ptr->playTimeHours;
+ minutes = gSaveBlock2Ptr->playTimeMinutes;
+ if (sTrainerCardDataPtr->isLink)
+ {
+ hours = sTrainerCardDataPtr->trainerCard.playTimeHours;
+ minutes = sTrainerCardDataPtr->trainerCard.playTimeMinutes;
+ }
+
+ if (hours > 999)
+ hours = 999;
+
+ if (minutes > 59)
+ minutes = 59;
+
+ FillWindowPixelRect(1, PIXEL_FILL(0), sTrainerCardTimeHoursXPositions[sTrainerCardDataPtr->cardType], sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], 50, 12);
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD)
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 88, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardTime);
+ else
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 89, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardTime);
+
+ ConvertIntToDecimalStringN(buffer, hours, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardTimeHoursXPositions[sTrainerCardDataPtr->cardType],
+ sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardTimeHoursYPositions[sTrainerCardDataPtr->cardType],
+ sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors[sTrainerCardDataPtr->var_7], TEXT_SPEED_FF, gText_Colon2);
+
+ ConvertIntToDecimalStringN(buffer, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardTimeMinutesXPositions[sTrainerCardDataPtr->cardType], sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer);
+}
+
+static void PrintProfilePhraseOnCard(void)
+{
+ if (sTrainerCardDataPtr->isLink)
+ {
+ AddTextPrinterParameterized3(1, 2, 10, sTrainerCardProfilePhraseXPositions[sTrainerCardDataPtr->cardType],
+ sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->var_19[0]);
+
+ AddTextPrinterParameterized3(1, 2, GetStringWidth(2, sTrainerCardDataPtr->var_19[0], 0) + 16, sTrainerCardProfilePhraseXPositions[sTrainerCardDataPtr->cardType],
+ sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->var_19[1]);
+
+ AddTextPrinterParameterized3(1, 2, 10, sTrainerCardProfilePhraseYPositions[sTrainerCardDataPtr->cardType],
+ sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->var_19[2]);
+
+ AddTextPrinterParameterized3(1, 2, GetStringWidth(2, sTrainerCardDataPtr->var_19[2], 0) + 16, sTrainerCardProfilePhraseYPositions[sTrainerCardDataPtr->cardType],
+ sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->var_19[3]);
+ }
+}
+
+static void PrintNameOnCard2(void)
+{
+ StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->trainerCard.playerName);
+ ConvertInternationalString(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->language);
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD)
+ {
+ StringAppend(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], gText_Var1sTrainerCard);
+ }
+}
+
+static void sub_808A4FC(void)
+{
+ u8 x;
+
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_FRLG)
+ {
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sUnknown_83CD93C[sTrainerCardDataPtr->cardType],
+ sUnknown_83CD93E[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME]);
+ }
+ else
+ {
+ x = sUnknown_83CD93C[sTrainerCardDataPtr->cardType] - GetStringWidth(sTrainerCardFontIds[1], sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], GetFontAttribute(sTrainerCardFontIds[1], FONTATTR_LETTER_SPACING));
+
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, sUnknown_83CD93E[sTrainerCardDataPtr->cardType],
+ sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME]);
+ }
+}
+
+static void PrintHofTimeOnCard(void)
+{
+ u8 buffer[10];
+ u8* txtPtr;
+
+ if (sTrainerCardDataPtr->hasHofResult)
+ {
+ ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ txtPtr = StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer);
+ StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], gText_Colon2, 2);
+ ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer, 3);
+ StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], gText_Colon2, 2);
+ ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer, 3);
+ }
+}
+
+static void PrintHofDebutStringOnCard(void)
+{
+ if (sTrainerCardDataPtr->hasHofResult)
+ {
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 35, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_HallOfFameDebut);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 164, 35, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME]);
+ }
+}
+
+static void PrintLinkResultsNumsOnCard(void)
+{
+ u8 buffer[30];
+
+ if (sTrainerCardDataPtr->hasLinkResults)
+ {
+ StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_RECORD], sLinkTrainerCardRecordStrings[sTrainerCardDataPtr->cardType]);
+ StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_WIN_LOSS], gText_WinLossRatio);
+ ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.linkBattleWins, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_WINS], buffer);
+ ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.linkBattleLosses, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_LOSSES], buffer);
+ }
+}
+
+static void PrintWinsLossesStringOnCard(void)
+{
+ if (sTrainerCardDataPtr->hasLinkResults)
+ {
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 51,
+ sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_RECORD]);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 130, 51, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_WIN_LOSS]);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 144, 51, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_WINS]);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 192, 51, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_LOSSES]);
+ }
+}
+
+static void PrintTradesNumOnCard(void)
+{
+ if (sTrainerCardDataPtr->hasTrades)
+ {
+ StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADES], gText_PokemonTrades);
+ ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT], sTrainerCardDataPtr->trainerCard.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ }
+}
+
+static void PrintTradesStringOnCard(void)
+{
+ if (sTrainerCardDataPtr->hasTrades)
+ {
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 67, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADES]);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 67, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT]);
+ }
+}
+
+static void PrintBerryCrushNumOnCard(void)
+{
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD)
+ {
+ StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH], gText_BerryCrushes);
+ ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH_COUNT], sTrainerCardDataPtr->trainerCard.berryCrushPoints, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ }
+}
+
+static void PrintBerryCrushStringOnCard(void)
+{
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.berryCrushPoints)
+ {
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 99, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH]);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 99, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH_COUNT]);
+ }
+}
+
+static void PrintUnionNumOnCard(void)
+{
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD)
+ {
+ StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM], gText_UnionRoomTradesBattles);
+ ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM_NUM], sTrainerCardDataPtr->trainerCard.unionRoomNum, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ }
+}
+
+static void PrintUnionStringOnCard(void)
+{
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.unionRoomNum)
+ {
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 83, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM]);
+ AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 83, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM_NUM]);
+ }
+}
+
+static void TrainerCard_PrintPokemonIconsOnCard(void)
+{
+ u8 i;
+ u8 buffer[6];
+ u8 buffer2[6];
+
+ memcpy(buffer, sUnknown_83CD94C, sizeof(sUnknown_83CD94C));
+ memcpy(buffer2, sUnknown_83CD952, sizeof(sUnknown_83CD952));
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD)
+ {
+ for (i = 0; i < 6; i++)
+ {
+ if (sTrainerCardDataPtr->trainerCard.monSpecies[i])
+ {
+ u8 monSpecies = GetMonIconPaletteIndexFromSpecies(sTrainerCardDataPtr->trainerCard.monSpecies[i]);
+ WriteSequenceToBgTilemapBuffer(3, 16 * i + 224, buffer2[i] + 3, 15, 4, 4, buffer[monSpecies], 1);
+ }
+ }
+ }
+}
+
+
+static void sub_808AB10(void)
+{
+ u8 i;
+
+ CpuSet(gMonIconPalettes, sTrainerCardDataPtr->monIconPals, 32 * 3);
+ switch (sTrainerCardDataPtr->trainerCard.var_4E)
+ {
+ case 0:
+ break;
+ case 1:
+ TintPalette_CustomTone(sTrainerCardDataPtr->monIconPals, 96, 0, 0, 0);
+ break;
+ case 2:
+ TintPalette_CustomTone(sTrainerCardDataPtr->monIconPals, 96, 500, 330, 310);
+ break;
+ case 3:
+ TintPalette_SepiaTone(sTrainerCardDataPtr->monIconPals, 96);
+ break;
+ }
+
+ LoadPalette(sTrainerCardDataPtr->monIconPals, 80, 192);
+ for (i = 0; i < 6; i++)
+ {
+ LoadBgTiles(3, GetMonIconTiles(sTrainerCardDataPtr->trainerCard.monSpecies[i], 0), 512, 16 * i + 32);
+ }
+}
+
+static void sub_808ABE0(void)
+{
+ u8 i;
+ u8 buffer[4];
+
+ memcpy(buffer, sUnknown_83CD958, sizeof(sUnknown_83CD958));
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_FRLG && sTrainerCardDataPtr->trainerCard.var_4C == 1)
+ {
+ for (i = 0; i < 3; i++)
+ {
+ u8 var_50 = sTrainerCardDataPtr->trainerCard.var_50[i];
+ if (sTrainerCardDataPtr->trainerCard.var_50[i])
+ WriteSequenceToBgTilemapBuffer(3, i * 4 + 320, i * 3 + 2, 2, 2, 2, buffer[var_50 - 1], 1);
+ }
+ }
+}
+
+static void TrainerCardLoadStickerPals(void)
+{
+ LoadPalette(sTrainerCardStickerPal1, 176, 32);
+ LoadPalette(sTrainerCardStickerPal2, 192, 32);
+ LoadPalette(sTrainerCardStickerPal3, 208, 32);
+ LoadPalette(sTrainerCardStickerPal4, 224, 32);
+ LoadBgTiles(3, sTrainerCardDataPtr->bgTiles, 1024, 128);
+}
+
+static void PutTrainerCardWindow(u8 windowId)
+{
+ PutWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 3);
+}
+
+static bool8 SetTrainerCardBgsAndPals(void)
+{
+ switch (sTrainerCardDataPtr->bgPalLoadState)
+ {
+ case 0:
+ LoadBgTiles(3, sTrainerCardDataPtr->cardTiles, 1024, 0);
+ break;
+ case 1:
+ LoadBgTiles(0, sTrainerCardDataPtr->var_18CC, 6144, 0);
+ break;
+ case 2:
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD)
+ LoadPalette(sEmeraldTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96);
+ else
+ LoadPalette(sFireRedTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96);
+ break;
+ case 3:
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD)
+ LoadPalette(sEmeraldTrainerCardBadges_Pal, 48, 32);
+ else
+ LoadPalette(sFireRedTrainerCardBadges_Pal, 48, 32);
+ break;
+ case 4:
+ if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.gender != MALE)
+ LoadPalette(sEmeraldTrainerCardFemaleBackground_Pal, 16, 32);
+ else if (sTrainerCardDataPtr->trainerCard.gender != MALE)
+ LoadPalette(sFireRedTrainerCardFemaleBackground_Pal, 16, 32);
+ break;
+ case 5:
+ LoadPalette(sUnknown_83CD300, 64, 32);
+ break;
+ case 6:
+ SetBgTilemapBuffer(0, sTrainerCardDataPtr->bgTilemap0);
+ SetBgTilemapBuffer(2, sTrainerCardDataPtr->bgTilemap2);
+ break;
+ default:
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
+ FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 32, 32);
+ FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32);
+ return TRUE;
+ }
+
+ sTrainerCardDataPtr->bgPalLoadState++;
+ return FALSE;
+}
+
+static void LoadTrainerCardTilemap2(const u16* ptr)
+{
+ s16 i, j;
+ u16 *dst = sTrainerCardDataPtr->bgTilemap2;
+
+ for (i = 0; i < 20; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ if (j < 30)
+ dst[32 * i + j] = ptr[30 * i + j];
+ else
+ dst[32 * i + j] = ptr[0];
+ }
+ }
+
+ CopyBgTilemapBufferToVram(2);
+}
+
+static void LoadTrainerCardTilemap0(const u16* ptr)
+{
+ s16 i, j;
+ u16 *dst = sTrainerCardDataPtr->bgTilemap0;
+
+ for (i = 0; i < 20; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ if (j < 30)
+ dst[32 * i + j] = ptr[30 * i + j];
+ else
+ dst[32 * i + j] = ptr[0];
+ }
+ }
+
+ CopyBgTilemapBufferToVram(0);
+}
+
+static void TrainerCard_PrintStarsAndBadgesOnCard(void)
+{
+ s16 i, x;
+ u16 tileNum = 192;
+ u8 palNum = 3;
+
+ FillBgTilemapBufferRect(3, 143, 15, sUnknown_83CD95C[sTrainerCardDataPtr->cardType], sTrainerCardDataPtr->trainerCard.stars, 1, 4);
+ if (!sTrainerCardDataPtr->isLink)
+ {
+ x = 4;
+ for (i = 0; i < BADGE_COUNT; i++, tileNum += 2, x += 3)
+ {
+ if (sTrainerCardDataPtr->hasBadge[i])
+ {
+ FillBgTilemapBufferRect(3, tileNum, x, 16, 1, 1, palNum);
+ FillBgTilemapBufferRect(3, tileNum + 1, x + 1, 16, 1, 1, palNum);
+ FillBgTilemapBufferRect(3, tileNum + 16, x, 17, 1, 1, palNum);
+ FillBgTilemapBufferRect(3, tileNum + 17, x + 1, 17, 1, 1, palNum);
+ }
+ }
+ }
+
+ CopyBgTilemapBufferToVram(3);
+}
+
+static void sub_808B090(void)
+{
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD)
+ {
+ if (sTrainerCardDataPtr->hasTrades)
+ {
+ FillBgTilemapBufferRect(3, 141, 26, 9, 1, 1, 1);
+ FillBgTilemapBufferRect(3, 157, 26, 10, 1, 1, 1);
+ }
+
+ if (sTrainerCardDataPtr->trainerCard.berryCrushPoints)
+ {
+ FillBgTilemapBufferRect(3, 141, 21, 13, 1, 1, 1);
+ FillBgTilemapBufferRect(3, 157, 21, 14, 1, 1, 1);
+ }
+
+ if (sTrainerCardDataPtr->trainerCard.unionRoomNum)
+ {
+ FillBgTilemapBufferRect(3, 141, 27, 11, 1, 1, 1);
+ FillBgTilemapBufferRect(3, 157, 27, 12, 1, 1, 1);
+ }
+ }
+ else
+ {
+ if (sTrainerCardDataPtr->hasTrades)
+ {
+ FillBgTilemapBufferRect(3, 141, 26, 9, 1, 1, 0);
+ FillBgTilemapBufferRect(3, 157, 26, 10, 1, 1, 0);
+ }
+ }
+
+ CopyBgTilemapBufferToVram(3);
+}
+
+static void sub_808B180(void)
+{
+ if (++sTrainerCardDataPtr->var_6 > 60)
+ {
+ sTrainerCardDataPtr->var_6 = 0;
+ sTrainerCardDataPtr->var_7 ^= 1;
+ sTrainerCardDataPtr->var_7BCE = TRUE;
+ }
+}
+
+u8 GetTrainerCardStars(u8 cardId)
+{
+ return gTrainerCards[cardId].stars;
+}
+
+static void sub_808B1D4(void)
+{
+ u8 taskId = CreateTask(sub_808B21C, 0);
+ sub_808B21C(taskId);
+ SetHBlankCallback(HBlankCB_TrainerCard);
+}
+
+static bool8 sub_808B1FC(void)
+{
+ if (FindTaskIdByFunc(sub_808B21C) == 0xFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void sub_808B21C(u8 taskId)
+{
+ while(sTrainerCardTasks[gTasks[taskId].data[0]](&gTasks[taskId]))
+ ;
+}
+
+static bool8 sub_808B254(struct Task* task)
+{
+ u32 i;
+
+ HideBg(1);
+ HideBg(3);
+ ScanlineEffect_Stop();
+ ScanlineEffect_Clear();
+ for (i = 0; i < 160; i++)
+ {
+ gScanlineEffectRegBuffers[1][i] = 0;
+ }
+
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 sub_808B294(struct Task* task)
+{
+ u32 r4, r5, r10, r7, r6, var_24, r9, var;
+ s16 i;
+
+ sTrainerCardDataPtr->allowDMACopy = FALSE;
+ if (task->data[1] >= 77)
+ task->data[1] = 77;
+ else
+ task->data[1] += 7;
+
+ sTrainerCardDataPtr->var_7BCC = task->data[1];
+ sub_8089BD8(task->data[1]);
+
+ r7 = task->data[1];
+ r9 = 160 - r7;
+ r4 = r9 - r7;
+ r6 = -r7 << 16;
+ r5 = 0xA00000 / r4;
+ r5 += 0xFFFF0000;
+ var_24 = r6;
+ var_24 += r5 * r4;
+ r10 = r5 / r4;
+ r5 *= 2;
+
+ for (i = 0; i < r7; i++)
+ {
+ gScanlineEffectRegBuffers[0][i] = -i;
+ }
+
+ for (; i < (s16)r9; i++)
+ {
+ var = r6 >> 16;
+ r6 += r5;
+ r5 -= r10;
+ gScanlineEffectRegBuffers[0][i] = var;
+ }
+
+ var = var_24 >> 16;
+ for (; i < 160; i++)
+ {
+ gScanlineEffectRegBuffers[0][i] = var;
+ }
+
+ sTrainerCardDataPtr->allowDMACopy = TRUE;
+ if (task->data[1] >= 77)
+ task->data[0]++;
+
+ return FALSE;
+}
+
+static bool8 sub_808B3C4(struct Task* task)
+{
+ sTrainerCardDataPtr->allowDMACopy = FALSE;
+ if (sub_8058244() == TRUE)
+ return FALSE;
+
+ do
+ {
+ switch (sTrainerCardDataPtr->var_4)
+ {
+ case 0:
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32);
+ break;
+ case 1:
+ if (!sTrainerCardDataPtr->var_8)
+ {
+ if (!PrintStringsOnCardPage2())
+ return FALSE;
+ }
+ else
+ {
+ if (!PrintAllOnCardPage1())
+ return FALSE;
+ }
+ break;
+ case 2:
+ if (!sTrainerCardDataPtr->var_8)
+ LoadTrainerCardTilemap0(sTrainerCardDataPtr->var_96C);
+ else
+ PutTrainerCardWindow(1);
+ break;
+ case 3:
+ if (!sTrainerCardDataPtr->var_8)
+ sub_808B090();
+ else
+ FillWindowPixelBuffer(2, PIXEL_FILL(0));
+ break;
+ case 4:
+ if (sTrainerCardDataPtr->var_8)
+ sub_808B838();
+ break;
+ default:
+ task->data[0]++;
+ sTrainerCardDataPtr->allowDMACopy = TRUE;
+ sTrainerCardDataPtr->var_4 = 0;
+ return FALSE;
+ }
+ sTrainerCardDataPtr->var_4++;
+ } while (gReceivedRemoteLinkPlayers == 0);
+
+ return FALSE;
+}
+
+static bool8 sub_808B4D8(struct Task* task)
+{
+ sTrainerCardDataPtr->allowDMACopy = FALSE;
+ if (sTrainerCardDataPtr->var_8)
+ {
+ PutTrainerCardWindow(2);
+ LoadTrainerCardTilemap2(&sTrainerCardDataPtr->var_E1C);
+ LoadTrainerCardTilemap0(&sTrainerCardDataPtr->var_4BC);
+ TrainerCard_PrintStarsAndBadgesOnCard();
+ }
+
+ PutTrainerCardWindow(1);
+ sTrainerCardDataPtr->var_8 ^= 1;
+ task->data[0]++;
+ sTrainerCardDataPtr->allowDMACopy = TRUE;
+ PlaySE(SE_CARD2);
+ return FALSE;
+}
+
+static bool8 sub_808B540(struct Task* task)
+{
+ u32 r4, r5, r10, r7, r6, var_24, r9, var;
+ s16 i;
+
+ sTrainerCardDataPtr->allowDMACopy = FALSE;
+ if (task->data[1] <= 5)
+ task->data[1] = 0;
+ else
+ task->data[1] -= 5;
+
+ sTrainerCardDataPtr->var_7BCC = task->data[1];
+ sub_8089BD8(task->data[1]);
+
+ r7 = task->data[1];
+ r9 = 160 - r7;
+ r4 = r9 - r7;
+ r6 = -r7 << 16;
+ r5 = 0xA00000 / r4;
+ r5 += 0xFFFF0000;
+ var_24 = r6;
+ var_24 += r5 * r4;
+ r10 = r5 / r4;
+ r5 /= 2;
+
+ for (i = 0; i < r7; i++)
+ {
+ gScanlineEffectRegBuffers[0][i] = -i;
+ }
+
+ for (; i < (s16)(r9); i++)
+ {
+ var = r6 >> 16;
+ r6 += r5;
+ r5 += r10;
+ gScanlineEffectRegBuffers[0][i] = var;
+ }
+
+ var = var_24 >> 16;
+ for (; i < 160; i++)
+ {
+ gScanlineEffectRegBuffers[0][i] = var;
+ }
+
+ sTrainerCardDataPtr->allowDMACopy = TRUE;
+ if (task->data[1] <= 0)
+ task->data[0]++;
+
+ return FALSE;
+}
+
+static bool8 sub_808B66C(struct Task *task)
+{
+ ShowBg(1);
+ ShowBg(3);
+ SetHBlankCallback(NULL);
+ DestroyTask(FindTaskIdByFunc(sub_808B21C));
+ return FALSE;
+}
+
+void ShowPlayerTrainerCard(void (*callback)(void))
+{
+ sTrainerCardDataPtr = AllocZeroed(sizeof(*sTrainerCardDataPtr));
+ sTrainerCardDataPtr->callback2 = callback;
+ if (InUnionRoom() == TRUE)
+ sTrainerCardDataPtr->isLink = TRUE;
+ else
+ sTrainerCardDataPtr->isLink = FALSE;
+
+ sTrainerCardDataPtr->language = GAME_LANGUAGE;
+ TrainerCard_GenerateCardForLinkPlayer(&sTrainerCardDataPtr->trainerCard);
+ SetMainCallback2(CB2_InitTrainerCard);
+}
+
+void ShowTrainerCardInLink(u8 cardId, void (*callback)(void))
+{
+ sTrainerCardDataPtr = AllocZeroed(sizeof(*sTrainerCardDataPtr));
+ sTrainerCardDataPtr->callback2 = callback;
+ sTrainerCardDataPtr->isLink = TRUE;
+ sTrainerCardDataPtr->trainerCard = gTrainerCards[cardId];
+ sTrainerCardDataPtr->language = gLinkPlayers[cardId].language;
+ SetMainCallback2(CB2_InitTrainerCard);
+}
+
+static void sub_808B774(void)
+{
+ u8 i;
+
+ sTrainerCardDataPtr->taskState = 0;
+ sTrainerCardDataPtr->var_6 = gSaveBlock2Ptr->playTimeVBlanks;
+ sTrainerCardDataPtr->var_7 = 0;
+ sTrainerCardDataPtr->var_8 = 0;
+ sTrainerCardDataPtr->var_456 = 0;
+ if (GetCardType() == CARD_TYPE_EMERALD)
+ sTrainerCardDataPtr->cardType = CARD_TYPE_EMERALD;
+ else
+ sTrainerCardDataPtr->cardType = CARD_TYPE_FRLG;
+
+ for (i = 0; i < 4; i++)
+ {
+ CopyEasyChatWord(sTrainerCardDataPtr->var_19[i], sTrainerCardDataPtr->trainerCard.var_28[i]);
+ }
+}
+
+static u8 GetCardType(void)
+{
+ if (sTrainerCardDataPtr == NULL)
+ {
+ if (gGameVersion == VERSION_FIRE_RED || gGameVersion == VERSION_LEAF_GREEN)
+ return CARD_TYPE_FRLG;
+ else
+ return CARD_TYPE_EMERALD;
+ }
+ else
+ {
+ if (sTrainerCardDataPtr->trainerCard.version == VERSION_FIRE_RED || sTrainerCardDataPtr->trainerCard.version == VERSION_LEAF_GREEN)
+ return CARD_TYPE_FRLG;
+ else
+ return CARD_TYPE_EMERALD;
+ }
+}
+
+static void sub_808B838(void)
+{
+ u8 val = sLinkTrainerCardFrontPics[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender];
+
+ if (InUnionRoom() == TRUE && gReceivedRemoteLinkPlayers == 1)
+ {
+ val = sTrainerCardDataPtr->trainerCard.var_4F;
+ sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0],
+ sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2);
+ }
+ else
+ {
+ if (sTrainerCardDataPtr->cardType != CARD_TYPE_FRLG)
+ {
+ sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0],
+ sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2);
+ }
+ else
+ {
+ sub_810C330(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.gender, TRUE), TRUE,
+ sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0],
+ sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1],
+ 8, 2);
+ }
+ }
+}
+
+// Unused
+static void Unref_InitTrainerCard(void (*callback)(void))
+{
+ ShowPlayerTrainerCard(callback);
+ SetMainCallback2(CB2_InitTrainerCard);
+}
+
+// Unused
+static void Unref_InitTrainerCardLink(void (*callback)(void))
+{
+ memcpy(gTrainerCards, &sLinkPlayerTrainerCardTemplate1, sizeof(sLinkPlayerTrainerCardTemplate1));
+ ShowTrainerCardInLink(CARD_TYPE_FRLG, callback);
+ SetMainCallback2(CB2_InitTrainerCard);
+}
+
+// Unused
+static void Unref_InitTrainerCardLink2(void (*callback)(void))
+{
+ memcpy(gTrainerCards, &sLinkPlayerTrainerCardTemplate2, sizeof(sLinkPlayerTrainerCardTemplate2));
+ ShowTrainerCardInLink(CARD_TYPE_FRLG, callback);
+ SetMainCallback2(CB2_InitTrainerCard);
+}
+
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 973b74ec4..ba4f765d0 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -158,12 +158,8 @@ gFieldEffectArguments: @ 20386E0
.align 2
.include "src/option_menu.o"
-
-gTrainerCards: @ 2039624
- .space 0x180
-
-gUnknown_20397A4: @ 20397A4
- .space 0x4
+ .align 2
+ .include "src/trainer_card.o"
gUnknown_20397A8: @ 20397A8
.space 0x4