diff options
| -rw-r--r-- | asm/trainer_card.s | 2180 | ||||
| -rw-r--r-- | include/asm.inc.h | 4 | ||||
| -rw-r--r-- | include/menu.h | 2 | ||||
| -rw-r--r-- | include/text.h | 4 | ||||
| -rw-r--r-- | include/trainer_card.h | 91 | ||||
| -rw-r--r-- | ld_script.txt | 1 | ||||
| -rw-r--r-- | src/menu.c | 2 | ||||
| -rw-r--r-- | src/text.c | 4 | ||||
| -rw-r--r-- | src/trainer_card.c | 1756 | 
9 files changed, 1767 insertions, 2277 deletions
| diff --git a/asm/trainer_card.s b/asm/trainer_card.s deleted file mode 100644 index beddfde18..000000000 --- a/asm/trainer_card.s +++ /dev/null @@ -1,2180 +0,0 @@ -	.include "constants/gba_constants.inc" -	.include "constants/species_constants.inc" -	.include "asm/macros.inc" - -	.syntax unified - -	.text - -	thumb_func_start sub_8093598 -sub_8093598: @ 8093598 -	push {r4-r7,lr} -	sub sp, 0x4 -	movs r2, 0xC0 -	lsls r2, 19 -	movs r3, 0x80 -	lsls r3, 9 -	mov r4, sp -	movs r6, 0 -	ldr r1, _080935E4 @ =0x040000d4 -	movs r5, 0x80 -	lsls r5, 5 -	ldr r7, _080935E8 @ =0x81000800 -	movs r0, 0x81 -	lsls r0, 24 -	mov r12, r0 -_080935B6: -	strh r6, [r4] -	mov r0, sp -	str r0, [r1] -	str r2, [r1, 0x4] -	str r7, [r1, 0x8] -	ldr r0, [r1, 0x8] -	adds r2, r5 -	subs r3, r5 -	cmp r3, r5 -	bhi _080935B6 -	strh r6, [r4] -	mov r0, sp -	str r0, [r1] -	str r2, [r1, 0x4] -	lsrs r0, r3, 1 -	mov r2, r12 -	orrs r0, r2 -	str r0, [r1, 0x8] -	ldr r0, [r1, 0x8] -	add sp, 0x4 -	pop {r4-r7} -	pop {r0} -	bx r0 -	.align 2, 0 -_080935E4: .4byte 0x040000d4 -_080935E8: .4byte 0x81000800 -	thumb_func_end sub_8093598 - -	thumb_func_start sub_80935EC -sub_80935EC: @ 80935EC -	sub sp, 0x4 -	movs r2, 0xE0 -	lsls r2, 19 -	mov r1, sp -	movs r0, 0 -	strh r0, [r1] -	ldr r0, _08093608 @ =0x040000d4 -	str r1, [r0] -	str r2, [r0, 0x4] -	ldr r1, _0809360C @ =0x81000200 -	str r1, [r0, 0x8] -	ldr r0, [r0, 0x8] -	add sp, 0x4 -	bx lr -	.align 2, 0 -_08093608: .4byte 0x040000d4 -_0809360C: .4byte 0x81000200 -	thumb_func_end sub_80935EC - -	thumb_func_start sub_8093610 -sub_8093610: @ 8093610 -	push {r4,r5,lr} -	ldr r5, _08093664 @ =REG_BG0CNT -	movs r1, 0 -	strh r1, [r5] -	ldr r2, _08093668 @ =REG_BG1CNT -	strh r1, [r2] -	ldr r3, _0809366C @ =REG_BG2CNT -	strh r1, [r3] -	ldr r4, _08093670 @ =REG_BG3CNT -	strh r1, [r4] -	ldr r0, _08093674 @ =REG_BG0HOFS -	strh r1, [r0] -	adds r0, 0x2 -	strh r1, [r0] -	adds r0, 0x2 -	strh r1, [r0] -	adds r0, 0x2 -	strh r1, [r0] -	adds r0, 0x2 -	strh r1, [r0] -	adds r0, 0x2 -	strh r1, [r0] -	adds r0, 0x2 -	strh r1, [r0] -	adds r0, 0x2 -	strh r1, [r0] -	ldr r1, _08093678 @ =0x00001e08 -	adds r0, r1, 0 -	strh r0, [r5] -	ldr r1, _0809367C @ =0x00000801 -	adds r0, r1, 0 -	strh r0, [r2] -	ldr r1, _08093680 @ =0x00000902 -	adds r0, r1, 0 -	strh r0, [r3] -	ldr r1, _08093684 @ =0x00000a03 -	adds r0, r1, 0 -	strh r0, [r4] -	pop {r4,r5} -	pop {r0} -	bx r0 -	.align 2, 0 -_08093664: .4byte REG_BG0CNT -_08093668: .4byte REG_BG1CNT -_0809366C: .4byte REG_BG2CNT -_08093670: .4byte REG_BG3CNT -_08093674: .4byte REG_BG0HOFS -_08093678: .4byte 0x00001e08 -_0809367C: .4byte 0x00000801 -_08093680: .4byte 0x00000902 -_08093684: .4byte 0x00000a03 -	thumb_func_end sub_8093610 - -	thumb_func_start sub_8093688 -sub_8093688: @ 8093688 -	push {r4-r6,lr} -	bl sub_8093324 -	ldr r2, _080936D0 @ =0x02000000 -	movs r1, 0 -	strb r1, [r2] -	strb r1, [r2, 0x3] -	strb r1, [r2, 0x4] -	adds r0, r2, 0 -	adds r0, 0x65 -	ldrb r0, [r0] -	strb r0, [r2, 0x2] -	strb r1, [r2, 0x5] -	strb r1, [r2, 0x6] -	movs r4, 0 -	adds r6, r2, 0 -	adds r6, 0x20 -	adds r5, r2, 0 -	adds r5, 0x8C -_080936AE: -	lsls r0, r4, 4 -	adds r0, r6 -	lsls r1, r4, 1 -	adds r1, r5, r1 -	ldrh r1, [r1] -	bl sub_80EB3FC -	adds r0, r4, 0x1 -	lsls r0, 24 -	lsrs r4, r0, 24 -	cmp r4, 0x3 -	bls _080936AE -	bl sub_80936D4 -	pop {r4-r6} -	pop {r0} -	bx r0 -	.align 2, 0 -_080936D0: .4byte 0x02000000 -	thumb_func_end sub_8093688 - -	thumb_func_start sub_80936D4 -sub_80936D4: @ 80936D4 -	push {r4-r6,lr} -	ldr r4, _08093798 @ =0x02000000 -	movs r0, 0 -	strb r0, [r4, 0x7] -	strb r0, [r4, 0x8] -	strb r0, [r4, 0x9] -	strb r0, [r4, 0xA] -	strb r0, [r4, 0xB] -	strb r0, [r4, 0xC] -	strb r0, [r4, 0xD] -	adds r0, r4, 0 -	adds r0, 0xE -	movs r1, 0 -	movs r2, 0x8 -	bl memset -	adds r0, r4, 0 -	adds r0, 0x66 -	ldrb r0, [r0] -	cmp r0, 0 -	beq _08093704 -	ldrb r0, [r4, 0x7] -	adds r0, 0x1 -	strb r0, [r4, 0x7] -_08093704: -	adds r0, r4, 0 -	adds r0, 0x6A -	ldrh r0, [r0] -	cmp r0, 0 -	bne _08093714 -	ldr r0, [r4, 0x6C] -	cmp r0, 0 -	beq _0809371A -_08093714: -	ldrb r0, [r4, 0x8] -	adds r0, 0x1 -	strb r0, [r4, 0x8] -_0809371A: -	ldr r1, _08093798 @ =0x02000000 -	ldr r0, [r1, 0x78] -	cmp r0, 0 -	beq _08093728 -	ldrb r0, [r1, 0x9] -	adds r0, 0x1 -	strb r0, [r1, 0x9] -_08093728: -	ldr r0, [r1, 0x7C] -	cmp r0, 0 -	beq _08093734 -	ldrb r0, [r1, 0xA] -	adds r0, 0x1 -	strb r0, [r1, 0xA] -_08093734: -	adds r0, r1, 0 -	adds r0, 0x80 -	ldrh r0, [r0] -	cmp r0, 0 -	beq _08093744 -	ldrb r0, [r1, 0xB] -	adds r0, 0x1 -	strb r0, [r1, 0xB] -_08093744: -	adds r0, r1, 0 -	adds r0, 0x82 -	ldrh r0, [r0] -	cmp r0, 0 -	beq _08093754 -	ldrb r0, [r1, 0xC] -	adds r0, 0x1 -	strb r0, [r1, 0xC] -_08093754: -	adds r0, r1, 0 -	adds r0, 0x84 -	ldrh r0, [r0] -	cmp r0, 0 -	beq _08093764 -	ldrb r0, [r1, 0xD] -	adds r0, 0x1 -	strb r0, [r1, 0xD] -_08093764: -	ldrb r0, [r1, 0x1] -	cmp r0, 0 -	bne _08093792 -	movs r5, 0 -	ldr r4, _0809379C @ =0x00000807 -	adds r6, r1, 0 -	adds r6, 0xE -_08093772: -	lsls r0, r4, 16 -	lsrs r0, 16 -	bl FlagGet -	lsls r0, 24 -	cmp r0, 0 -	beq _08093788 -	adds r1, r5, r6 -	ldrb r0, [r1] -	adds r0, 0x1 -	strb r0, [r1] -_08093788: -	adds r4, 0x1 -	adds r5, 0x1 -	ldr r0, _080937A0 @ =0x0000080e -	cmp r4, r0 -	bls _08093772 -_08093792: -	pop {r4-r6} -	pop {r0} -	bx r0 -	.align 2, 0 -_08093798: .4byte 0x02000000 -_0809379C: .4byte 0x00000807 -_080937A0: .4byte 0x0000080e -	thumb_func_end sub_80936D4 - -	thumb_func_start sub_80937A4 -sub_80937A4: @ 80937A4 -	push {lr} -	bl ResetPaletteFade -	bl ResetSpriteData -	bl FreeAllSpritePalettes -	bl ResetTasks -	pop {r0} -	bx r0 -	thumb_func_end sub_80937A4 - -	thumb_func_start sub_80937BC -sub_80937BC: @ 80937BC -	push {r4,lr} -	ldr r4, _080937D4 @ =gWindowConfig_81E6DC4 -	adds r0, r4, 0 -	bl SetUpWindowConfig -	adds r0, r4, 0 -	bl MultistepInitMenuWindowBegin -	pop {r4} -	pop {r0} -	bx r0 -	.align 2, 0 -_080937D4: .4byte gWindowConfig_81E6DC4 -	thumb_func_end sub_80937BC - -	thumb_func_start sub_80937D8 -sub_80937D8: @ 80937D8 -	push {lr} -	bl sub_8093E04 -	bl sub_8093E28 -	bl sub_8093F64 -	bl sub_8093DAC -	pop {r0} -	bx r0 -	thumb_func_end sub_80937D8 - -	thumb_func_start sub_80937F0 -sub_80937F0: @ 80937F0 -	push {lr} -	bl sub_8093EF8 -	pop {r0} -	bx r0 -	thumb_func_end sub_80937F0 - -	thumb_func_start nullsub_15 -nullsub_15: @ 80937FC -	bx lr -	thumb_func_end nullsub_15 - -	thumb_func_start sub_8093800 -sub_8093800: @ 8093800 -	push {lr} -	bl sub_809380C -	pop {r0} -	bx r0 -	thumb_func_end sub_8093800 - -	thumb_func_start sub_809380C -sub_809380C: @ 809380C -	push {r4,lr} -	ldr r4, _08093828 @ =sub_809382C -	adds r0, r4, 0 -	movs r1, 0 -	bl CreateTask -	lsls r0, 24 -	lsrs r0, 24 -	bl _call_via_r4 -	pop {r4} -	pop {r0} -	bx r0 -	.align 2, 0 -_08093828: .4byte sub_809382C -	thumb_func_end sub_809380C - -	thumb_func_start sub_809382C -sub_809382C: @ 809382C -	push {r4-r7,lr} -	lsls r0, 24 -	lsrs r0, 24 -	ldr r7, _08093858 @ =gUnknown_083B5EBC -	lsls r1, r0, 2 -	adds r1, r0 -	lsls r4, r1, 3 -	ldr r6, _0809385C @ =0x02000000 -	ldr r5, _08093860 @ =gTasks -_0809383E: -	ldrb r0, [r6] -	lsls r0, 2 -	adds r0, r7 -	ldr r1, [r0] -	adds r0, r4, r5 -	bl _call_via_r1 -	lsls r0, 24 -	cmp r0, 0 -	bne _0809383E -	pop {r4-r7} -	pop {r0} -	bx r0 -	.align 2, 0 -_08093858: .4byte gUnknown_083B5EBC -_0809385C: .4byte 0x02000000 -_08093860: .4byte gTasks -	thumb_func_end sub_809382C - -	thumb_func_start sub_8093864 -sub_8093864: @ 8093864 -	push {r4,r5,lr} -	sub sp, 0x4 -	ldr r4, _080938A0 @ =0x02000000 -	ldr r2, _080938A4 @ =gSaveBlock2 -	ldrb r1, [r2, 0x11] -	movs r0, 0x1 -	ands r0, r1 -	movs r5, 0 -	strb r0, [r4, 0x5] -	ldrb r0, [r2, 0x12] -	strb r0, [r4, 0x6] -	bl sub_80939A4 -	movs r0, 0x1 -	negs r0, r0 -	str r5, [sp] -	movs r1, 0 -	movs r2, 0x10 -	movs r3, 0 -	bl BeginNormalPaletteFade -	ldrb r0, [r4] -	adds r0, 0x1 -	strb r0, [r4] -	movs r0, 0 -	add sp, 0x4 -	pop {r4,r5} -	pop {r1} -	bx r1 -	.align 2, 0 -_080938A0: .4byte 0x02000000 -_080938A4: .4byte gSaveBlock2 -	thumb_func_end sub_8093864 - -	thumb_func_start sub_80938A8 -sub_80938A8: @ 80938A8 -	push {lr} -	ldr r0, _080938C4 @ =gPaletteFade -	ldrb r1, [r0, 0x7] -	movs r0, 0x80 -	ands r0, r1 -	cmp r0, 0 -	bne _080938BE -	ldr r1, _080938C8 @ =0x02000000 -	ldrb r0, [r1] -	adds r0, 0x1 -	strb r0, [r1] -_080938BE: -	movs r0, 0 -	pop {r1} -	bx r1 -	.align 2, 0 -_080938C4: .4byte gPaletteFade -_080938C8: .4byte 0x02000000 -	thumb_func_end sub_80938A8 - -	thumb_func_start sub_80938CC -sub_80938CC: @ 80938CC -	push {lr} -	ldr r0, _080938E4 @ =gMain -	ldrh r1, [r0, 0x2E] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _080938EC -	ldr r1, _080938E8 @ =0x02000000 -	movs r0, 0x5 -	strb r0, [r1] -	movs r0, 0x1 -	b _08093914 -	.align 2, 0 -_080938E4: .4byte gMain -_080938E8: .4byte 0x02000000 -_080938EC: -	movs r0, 0x1 -	ands r0, r1 -	cmp r0, 0 -	beq _08093912 -	ldr r2, _08093900 @ =0x02000000 -	ldrb r1, [r2, 0x3] -	cmp r1, 0 -	beq _08093904 -	movs r0, 0x5 -	b _0809390C -	.align 2, 0 -_08093900: .4byte 0x02000000 -_08093904: -	movs r0, 0x1 -	eors r0, r1 -	strb r0, [r2, 0x3] -	movs r0, 0x3 -_0809390C: -	strb r0, [r2] -	movs r0, 0x1 -	b _08093914 -_08093912: -	movs r0, 0 -_08093914: -	pop {r1} -	bx r1 -	thumb_func_end sub_80938CC - -	thumb_func_start sub_8093918 -sub_8093918: @ 8093918 -	push {lr} -	bl sub_8093A28 -	movs r0, 0x36 -	bl PlaySE -	ldr r1, _08093934 @ =0x02000000 -	ldrb r0, [r1] -	adds r0, 0x1 -	strb r0, [r1] -	movs r0, 0 -	pop {r1} -	bx r1 -	.align 2, 0 -_08093934: .4byte 0x02000000 -	thumb_func_end sub_8093918 - -	thumb_func_start sub_8093938 -sub_8093938: @ 8093938 -	push {lr} -	bl sub_8093A48 -	lsls r0, 24 -	cmp r0, 0 -	beq _0809394A -	ldr r1, _08093950 @ =0x02000000 -	movs r0, 0x2 -	strb r0, [r1] -_0809394A: -	movs r0, 0 -	pop {r1} -	bx r1 -	.align 2, 0 -_08093950: .4byte 0x02000000 -	thumb_func_end sub_8093938 - -	thumb_func_start sub_8093954 -sub_8093954: @ 8093954 -	push {lr} -	sub sp, 0x4 -	bl sub_80939C0 -	movs r0, 0x1 -	negs r0, r0 -	movs r1, 0 -	str r1, [sp] -	movs r2, 0 -	movs r3, 0x10 -	bl BeginNormalPaletteFade -	ldr r1, _0809397C @ =0x02000000 -	ldrb r0, [r1] -	adds r0, 0x1 -	strb r0, [r1] -	movs r0, 0 -	add sp, 0x4 -	pop {r1} -	bx r1 -	.align 2, 0 -_0809397C: .4byte 0x02000000 -	thumb_func_end sub_8093954 - -	thumb_func_start sub_8093980 -sub_8093980: @ 8093980 -	push {lr} -	ldr r0, _0809399C @ =gPaletteFade -	ldrb r1, [r0, 0x7] -	movs r0, 0x80 -	ands r0, r1 -	cmp r0, 0 -	bne _08093996 -	ldr r0, _080939A0 @ =0x02000000 -	ldr r0, [r0, 0x60] -	bl SetMainCallback2 -_08093996: -	movs r0, 0 -	pop {r1} -	bx r1 -	.align 2, 0 -_0809399C: .4byte gPaletteFade -_080939A0: .4byte 0x02000000 -	thumb_func_end sub_8093980 - -	thumb_func_start sub_80939A4 -sub_80939A4: @ 80939A4 -	push {lr} -	ldr r0, _080939B8 @ =sub_80939DC -	movs r1, 0 -	bl CreateTask -	ldr r0, _080939BC @ =gWindowConfig_81E6DC4 -	bl BasicInitMenuWindow -	pop {r0} -	bx r0 -	.align 2, 0 -_080939B8: .4byte sub_80939DC -_080939BC: .4byte gWindowConfig_81E6DC4 -	thumb_func_end sub_80939A4 - -	thumb_func_start sub_80939C0 -sub_80939C0: @ 80939C0 -	push {lr} -	ldr r0, _080939D8 @ =sub_80939DC -	bl FindTaskIdByFunc -	lsls r0, 24 -	lsrs r0, 24 -	cmp r0, 0xFF -	beq _080939D4 -	bl DestroyTask -_080939D4: -	pop {r0} -	bx r0 -	.align 2, 0 -_080939D8: .4byte sub_80939DC -	thumb_func_end sub_80939C0 - -	thumb_func_start sub_80939DC -sub_80939DC: @ 80939DC -	push {lr} -	sub sp, 0x20 -	lsls r0, 24 -	lsrs r0, 24 -	lsls r1, r0, 2 -	adds r1, r0 -	lsls r1, 3 -	ldr r0, _08093A20 @ =gTasks -	adds r2, r1, r0 -	ldr r0, _08093A24 @ =0x02000000 -	ldrb r1, [r0, 0x5] -	movs r3, 0xA -	ldrsh r0, [r2, r3] -	cmp r1, r0 -	beq _08093A04 -	strh r1, [r2, 0xA] -	ldrh r0, [r2, 0x8] -	movs r1, 0x1 -	eors r0, r1 -	strh r0, [r2, 0x8] -_08093A04: -	movs r0, 0x8 -	ldrsh r1, [r2, r0] -	mov r0, sp -	bl sub_8094250 -	mov r0, sp -	movs r1, 0xA -	movs r2, 0xC -	bl MenuPrint -	add sp, 0x20 -	pop {r0} -	bx r0 -	.align 2, 0 -_08093A20: .4byte gTasks -_08093A24: .4byte 0x02000000 -	thumb_func_end sub_80939DC - -	thumb_func_start sub_8093A28 -sub_8093A28: @ 8093A28 -	push {r4,lr} -	ldr r4, _08093A44 @ =sub_8093A68 -	adds r0, r4, 0 -	movs r1, 0 -	bl CreateTask -	lsls r0, 24 -	lsrs r0, 24 -	bl _call_via_r4 -	pop {r4} -	pop {r0} -	bx r0 -	.align 2, 0 -_08093A44: .4byte sub_8093A68 -	thumb_func_end sub_8093A28 - -	thumb_func_start sub_8093A48 -sub_8093A48: @ 8093A48 -	push {lr} -	ldr r0, _08093A5C @ =sub_8093A68 -	bl FindTaskIdByFunc -	lsls r0, 24 -	lsrs r0, 24 -	cmp r0, 0xFF -	beq _08093A60 -	movs r0, 0 -	b _08093A62 -	.align 2, 0 -_08093A5C: .4byte sub_8093A68 -_08093A60: -	movs r0, 0x1 -_08093A62: -	pop {r1} -	bx r1 -	thumb_func_end sub_8093A48 - -	thumb_func_start sub_8093A68 -sub_8093A68: @ 8093A68 -	push {r4,r5,lr} -	lsls r0, 24 -	lsrs r0, 24 -	ldr r5, _08093A98 @ =gUnknown_083B5ED8 -	ldr r2, _08093A9C @ =gTasks -	lsls r1, r0, 2 -	adds r1, r0 -	lsls r1, 3 -	adds r4, r1, r2 -_08093A7A: -	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 _08093A7A -	pop {r4,r5} -	pop {r0} -	bx r0 -	.align 2, 0 -_08093A98: .4byte gUnknown_083B5ED8 -_08093A9C: .4byte gTasks -	thumb_func_end sub_8093A68 - -	thumb_func_start sub_8093AA0 -sub_8093AA0: @ 8093AA0 -	push {r4,lr} -	adds r4, r0, 0 -	ldr r0, _08093AE0 @ =0x02000000 -	movs r1, 0 -	strb r1, [r0, 0x4] -	bl dp12_8087EA4 -	movs r1, 0 -	ldr r0, _08093AE4 @ =gUnknown_03004DE0 -	ldr r2, _08093AE8 @ =0x0000fffc -	movs r3, 0xF0 -	lsls r3, 3 -	adds r0, r3 -_08093ABA: -	strh r2, [r0] -	adds r0, 0x2 -	adds r1, 0x1 -	cmp r1, 0x9F -	bls _08093ABA -	ldr r0, _08093AEC @ =sub_8093D7C -	bl SetHBlankCallback -	ldr r1, _08093AE0 @ =0x02000000 -	movs r0, 0x1 -	strb r0, [r1, 0x4] -	ldrh r0, [r4, 0x8] -	adds r0, 0x1 -	strh r0, [r4, 0x8] -	movs r0, 0 -	pop {r4} -	pop {r1} -	bx r1 -	.align 2, 0 -_08093AE0: .4byte 0x02000000 -_08093AE4: .4byte gUnknown_03004DE0 -_08093AE8: .4byte 0x0000fffc -_08093AEC: .4byte sub_8093D7C -	thumb_func_end sub_8093AA0 - -	thumb_func_start sub_8093AF0 -sub_8093AF0: @ 8093AF0 -	push {r4-r7,lr} -	mov r7, r10 -	mov r6, r9 -	mov r5, r8 -	push {r5-r7} -	sub sp, 0x4 -	mov r8, r0 -	ldr r1, _08093BFC @ =0x02000000 -	movs r0, 0 -	strb r0, [r1, 0x4] -	mov r2, r8 -	ldrh r0, [r2, 0xA] -	adds r0, 0x3 -	strh r0, [r2, 0xA] -	lsls r0, 16 -	asrs r0, 16 -	cmp r0, 0x4F -	ble _08093B18 -	movs r0, 0x4F -	strh r0, [r2, 0xA] -_08093B18: -	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, _08093C00 @ =0xffff0000 -	adds r5, r1 -	adds r0, r5, 0 -	muls r0, r4 -	adds r0, r6 -	mov r10, r0 -	adds r0, r5, 0 -	adds r1, r4, 0 -	bl __udivsi3 -	str r0, [sp] -	lsls r5, 1 -	movs r3, 0 -	cmp r3, r7 -	bcs _08093B74 -	ldr r2, _08093C04 @ =gUnknown_03004DE0 -	mov r12, r2 -	ldr r0, _08093C08 @ =0x0000fffc -	adds r4, r0, 0 -_08093B5C: -	lsls r0, r3, 16 -	asrs r0, 16 -	lsls r1, r0, 1 -	add r1, r12 -	subs r2, r4, r0 -	strh r2, [r1] -	adds r0, 0x1 -	lsls r0, 16 -	lsrs r3, r0, 16 -	asrs r0, 16 -	cmp r0, r7 -	bcc _08093B5C -_08093B74: -	lsls r2, r3, 16 -	mov r1, r9 -	lsls r0, r1, 16 -	asrs r1, r0, 16 -	mov r4, r10 -	lsrs r7, r4, 16 -	cmp r2, r0 -	bge _08093BAE -	ldr r0, _08093C04 @ =gUnknown_03004DE0 -	mov r9, r0 -	ldr r4, _08093C08 @ =0x0000fffc -	mov r12, r4 -	adds r4, r1, 0 -_08093B8E: -	lsrs r1, r6, 16 -	adds r6, r5 -	ldr r0, [sp] -	subs r5, r0 -	asrs r2, 16 -	lsls r0, r2, 1 -	add r0, r9 -	add r1, r12 -	strh r1, [r0] -	adds r2, 0x1 -	lsls r2, 16 -	lsrs r3, r2, 16 -	lsls r2, r3, 16 -	asrs r0, r2, 16 -	cmp r0, r4 -	blt _08093B8E -_08093BAE: -	adds r1, r7, 0 -	lsls r0, r3, 16 -	asrs r0, 16 -	cmp r0, 0x9F -	bgt _08093BD4 -	ldr r4, _08093C04 @ =gUnknown_03004DE0 -	ldr r0, _08093C08 @ =0x0000fffc -	adds r2, r1, r0 -_08093BBE: -	lsls r1, r3, 16 -	asrs r1, 16 -	lsls r0, r1, 1 -	adds r0, r4 -	strh r2, [r0] -	adds r1, 0x1 -	lsls r1, 16 -	lsrs r3, r1, 16 -	asrs r1, 16 -	cmp r1, 0x9F -	ble _08093BBE -_08093BD4: -	movs r0, 0x1 -	ldr r1, _08093BFC @ =0x02000000 -	strb r0, [r1, 0x4] -	mov r2, r8 -	movs r4, 0xA -	ldrsh r0, [r2, r4] -	cmp r0, 0x4A -	ble _08093BEA -	ldrh r0, [r2, 0x8] -	adds r0, 0x1 -	strh r0, [r2, 0x8] -_08093BEA: -	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 -_08093BFC: .4byte 0x02000000 -_08093C00: .4byte 0xffff0000 -_08093C04: .4byte gUnknown_03004DE0 -_08093C08: .4byte 0x0000fffc -	thumb_func_end sub_8093AF0 - -	thumb_func_start sub_8093C0C -sub_8093C0C: @ 8093C0C -	push {r4,lr} -	adds r4, r0, 0 -	bl sub_80939C0 -	bl sub_8093DAC -	ldr r0, _08093C34 @ =0x02000000 -	ldrb r0, [r0, 0x3] -	cmp r0, 0 -	bne _08093C24 -	bl sub_80939A4 -_08093C24: -	ldrh r0, [r4, 0x8] -	adds r0, 0x1 -	strh r0, [r4, 0x8] -	movs r0, 0x1 -	pop {r4} -	pop {r1} -	bx r1 -	.align 2, 0 -_08093C34: .4byte 0x02000000 -	thumb_func_end sub_8093C0C - -	thumb_func_start sub_8093C38 -sub_8093C38: @ 8093C38 -	push {r4-r7,lr} -	mov r7, r10 -	mov r6, r9 -	mov r5, r8 -	push {r5-r7} -	sub sp, 0x4 -	mov r8, r0 -	ldr r1, _08093D40 @ =0x02000000 -	movs r2, 0 -	strb r2, [r1, 0x4] -	ldrh r0, [r0, 0xA] -	subs r0, 0x3 -	mov r3, r8 -	strh r0, [r3, 0xA] -	lsls r0, 16 -	cmp r0, 0 -	bgt _08093C5C -	strh r2, [r3, 0xA] -_08093C5C: -	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, _08093D44 @ =0xffff0000 -	adds r5, r1 -	adds r0, r5, 0 -	muls r0, r4 -	adds r0, r6 -	mov r10, r0 -	adds r0, r5, 0 -	adds r1, r4, 0 -	bl __udivsi3 -	str r0, [sp] -	lsrs r5, 1 -	movs r3, 0 -	cmp r3, r7 -	bcs _08093CB8 -	ldr r2, _08093D48 @ =gUnknown_03004DE0 -	mov r12, r2 -	ldr r0, _08093D4C @ =0x0000fffc -	adds r4, r0, 0 -_08093CA0: -	lsls r0, r3, 16 -	asrs r0, 16 -	lsls r1, r0, 1 -	add r1, r12 -	subs r2, r4, r0 -	strh r2, [r1] -	adds r0, 0x1 -	lsls r0, 16 -	lsrs r3, r0, 16 -	asrs r0, 16 -	cmp r0, r7 -	bcc _08093CA0 -_08093CB8: -	lsls r2, r3, 16 -	mov r1, r9 -	lsls r0, r1, 16 -	asrs r1, r0, 16 -	mov r4, r10 -	lsrs r7, r4, 16 -	cmp r2, r0 -	bge _08093CF2 -	ldr r0, _08093D48 @ =gUnknown_03004DE0 -	mov r9, r0 -	ldr r3, _08093D4C @ =0x0000fffc -	mov r12, r3 -	adds r4, r1, 0 -_08093CD2: -	lsrs r1, r6, 16 -	adds r6, r5 -	ldr r0, [sp] -	adds r5, r0 -	asrs r2, 16 -	lsls r0, r2, 1 -	add r0, r9 -	add r1, r12 -	strh r1, [r0] -	adds r2, 0x1 -	lsls r2, 16 -	lsrs r3, r2, 16 -	lsls r2, r3, 16 -	asrs r0, r2, 16 -	cmp r0, r4 -	blt _08093CD2 -_08093CF2: -	adds r1, r7, 0 -	lsls r0, r3, 16 -	asrs r0, 16 -	cmp r0, 0x9F -	bgt _08093D18 -	ldr r4, _08093D48 @ =gUnknown_03004DE0 -	ldr r0, _08093D4C @ =0x0000fffc -	adds r2, r1, r0 -_08093D02: -	lsls r1, r3, 16 -	asrs r1, 16 -	lsls r0, r1, 1 -	adds r0, r4 -	strh r2, [r0] -	adds r1, 0x1 -	lsls r1, 16 -	lsrs r3, r1, 16 -	asrs r1, 16 -	cmp r1, 0x9F -	ble _08093D02 -_08093D18: -	movs r0, 0x1 -	ldr r1, _08093D40 @ =0x02000000 -	strb r0, [r1, 0x4] -	mov r2, r8 -	movs r3, 0xA -	ldrsh r0, [r2, r3] -	cmp r0, 0 -	bgt _08093D2E -	ldrh r0, [r2, 0x8] -	adds r0, 0x1 -	strh r0, [r2, 0x8] -_08093D2E: -	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 -_08093D40: .4byte 0x02000000 -_08093D44: .4byte 0xffff0000 -_08093D48: .4byte gUnknown_03004DE0 -_08093D4C: .4byte 0x0000fffc -	thumb_func_end sub_8093C38 - -	thumb_func_start sub_8093D50 -sub_8093D50: @ 8093D50 -	push {lr} -	ldr r1, _08093D74 @ =0x02000000 -	movs r0, 0 -	strb r0, [r1, 0x4] -	bl SetHBlankCallback -	bl sub_8093E04 -	ldr r0, _08093D78 @ =sub_8093A68 -	bl FindTaskIdByFunc -	lsls r0, 24 -	lsrs r0, 24 -	bl DestroyTask -	movs r0, 0 -	pop {r1} -	bx r1 -	.align 2, 0 -_08093D74: .4byte 0x02000000 -_08093D78: .4byte sub_8093A68 -	thumb_func_end sub_8093D50 - -	thumb_func_start sub_8093D7C -sub_8093D7C: @ 8093D7C -	ldr r1, _08093DA0 @ =gUnknown_03004DE0 -	ldr r0, _08093DA4 @ =REG_VCOUNT -	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, _08093DA8 @ =REG_BG0VOFS -	strh r1, [r0] -	adds r0, 0x4 -	strh r1, [r0] -	adds r0, 0x4 -	strh r1, [r0] -	bx lr -	.align 2, 0 -_08093DA0: .4byte gUnknown_03004DE0 -_08093DA4: .4byte REG_VCOUNT -_08093DA8: .4byte REG_BG0VOFS -	thumb_func_end sub_8093D7C - -	thumb_func_start sub_8093DAC -sub_8093DAC: @ 8093DAC -	push {lr} -	ldr r0, _08093DBC @ =0x02000000 -	ldrb r0, [r0, 0x3] -	cmp r0, 0 -	beq _08093DC0 -	bl sub_8093DEC -	b _08093DC4 -	.align 2, 0 -_08093DBC: .4byte 0x02000000 -_08093DC0: -	bl sub_8093DC8 -_08093DC4: -	pop {r0} -	bx r0 -	thumb_func_end sub_8093DAC - -	thumb_func_start sub_8093DC8 -sub_8093DC8: @ 8093DC8 -	push {lr} -	bl MenuZeroFillScreen -	bl sub_80940E4 -	bl sub_8093F14 -	bl sub_8093F80 -	bl sub_8093FD0 -	bl sub_8094038 -	bl sub_8094140 -	pop {r0} -	bx r0 -	thumb_func_end sub_8093DC8 - -	thumb_func_start sub_8093DEC -sub_8093DEC: @ 8093DEC -	push {lr} -	bl MenuZeroFillScreen -	bl sub_80940E4 -	bl sub_8093F48 -	bl sub_8094188 -	pop {r0} -	bx r0 -	thumb_func_end sub_8093DEC - -	thumb_func_start sub_8093E04 -sub_8093E04: @ 8093E04 -	ldr r0, _08093E20 @ =REG_BG0VOFS -	ldr r2, _08093E24 @ =0x0000fffc -	adds r1, r2, 0 -	strh r1, [r0] -	adds r0, 0x2 -	movs r2, 0 -	strh r2, [r0] -	adds r0, 0x2 -	strh r1, [r0] -	adds r0, 0x2 -	strh r2, [r0] -	adds r0, 0x2 -	strh r1, [r0] -	bx lr -	.align 2, 0 -_08093E20: .4byte REG_BG0VOFS -_08093E24: .4byte 0x0000fffc -	thumb_func_end sub_8093E04 - -	thumb_func_start sub_8093E28 -sub_8093E28: @ 8093E28 -	push {r4-r7,lr} -	bl sub_8093EA0 -	ldr r0, _08093E84 @ =gUnknown_083B5F6C -	movs r1, 0xE0 -	movs r2, 0x20 -	bl LoadPalette -	ldr r3, _08093E88 @ =gMenuTrainerCard_Gfx -	movs r4, 0xC0 -	lsls r4, 19 -	movs r5, 0xA4 -	lsls r5, 5 -	ldr r1, _08093E8C @ =0x040000d4 -	ldr r6, _08093E90 @ =0x80000800 -	movs r2, 0x80 -	lsls r2, 5 -	movs r7, 0x80 -	lsls r7, 24 -_08093E4E: -	str r3, [r1] -	str r4, [r1, 0x4] -	str r6, [r1, 0x8] -	ldr r0, [r1, 0x8] -	adds r3, r2 -	adds r4, r2 -	subs r5, r2 -	cmp r5, r2 -	bhi _08093E4E -	str r3, [r1] -	str r4, [r1, 0x4] -	lsrs r0, r5, 1 -	orrs r0, r7 -	str r0, [r1, 0x8] -	ldr r0, [r1, 0x8] -	ldr r1, _08093E94 @ =gBadgesTiles -	ldr r2, _08093E98 @ =0x06001480 -	ldr r0, _08093E8C @ =0x040000d4 -	str r1, [r0] -	str r2, [r0, 0x4] -	ldr r1, _08093E9C @ =0x80000200 -	str r1, [r0, 0x8] -	ldr r0, [r0, 0x8] -	pop {r4-r7} -	pop {r0} -	bx r0 -	.align 2, 0 -_08093E84: .4byte gUnknown_083B5F6C -_08093E88: .4byte gMenuTrainerCard_Gfx -_08093E8C: .4byte 0x040000d4 -_08093E90: .4byte 0x80000800 -_08093E94: .4byte gBadgesTiles -_08093E98: .4byte 0x06001480 -_08093E9C: .4byte 0x80000200 -	thumb_func_end sub_8093E28 - -	thumb_func_start sub_8093EA0 -sub_8093EA0: @ 8093EA0 -	push {r4,lr} -	ldr r1, _08093EE4 @ =gUnknown_083B5EF8 -	ldr r4, _08093EE8 @ =0x02000000 -	ldrb r0, [r4, 0x2] -	lsls r0, 2 -	adds r0, r1 -	ldr r0, [r0] -	movs r1, 0 -	movs r2, 0x60 -	bl LoadPalette -	ldr r0, _08093EEC @ =gBadgesPalette -	movs r1, 0x30 -	movs r2, 0x20 -	bl LoadPalette -	ldr r0, _08093EF0 @ =gUnknown_083B5F4C -	movs r1, 0x40 -	movs r2, 0x20 -	bl LoadPalette -	adds r4, 0x64 -	ldrb r0, [r4] -	cmp r0, 0 -	beq _08093EDC -	ldr r0, _08093EF4 @ =gUnknown_083B5F0C -	movs r1, 0x10 -	movs r2, 0x20 -	bl LoadPalette -_08093EDC: -	pop {r4} -	pop {r0} -	bx r0 -	.align 2, 0 -_08093EE4: .4byte gUnknown_083B5EF8 -_08093EE8: .4byte 0x02000000 -_08093EEC: .4byte gBadgesPalette -_08093EF0: .4byte gUnknown_083B5F4C -_08093EF4: .4byte gUnknown_083B5F0C -	thumb_func_end sub_8093EA0 - -	thumb_func_start sub_8093EF8 -sub_8093EF8: @ 8093EF8 -	push {lr} -	ldr r0, _08093F0C @ =0x02000000 -	adds r0, 0x64 -	ldrb r0, [r0] -	ldr r2, _08093F10 @ =0x06001880 -	movs r1, 0x50 -	bl LoadTrainerGfx_TrainerCard -	pop {r0} -	bx r0 -	.align 2, 0 -_08093F0C: .4byte 0x02000000 -_08093F10: .4byte 0x06001880 -	thumb_func_end sub_8093EF8 - -	thumb_func_start sub_8093F14 -sub_8093F14: @ 8093F14 -	push {lr} -	sub sp, 0x8 -	ldr r0, _08093F3C @ =gUnknown_083B5EEC -	ldr r1, [r0, 0x4] -	ldr r0, [r0] -	str r0, [sp] -	str r1, [sp, 0x4] -	ldr r0, _08093F40 @ =0x02000000 -	ldrb r0, [r0, 0x1] -	lsls r0, 2 -	add r0, sp -	ldr r0, [r0] -	ldr r1, _08093F44 @ =0x06004800 -	movs r2, 0xA0 -	lsls r2, 1 -	bl CpuFastSet -	add sp, 0x8 -	pop {r0} -	bx r0 -	.align 2, 0 -_08093F3C: .4byte gUnknown_083B5EEC -_08093F40: .4byte 0x02000000 -_08093F44: .4byte 0x06004800 -	thumb_func_end sub_8093F14 - -	thumb_func_start sub_8093F48 -sub_8093F48: @ 8093F48 -	push {lr} -	ldr r0, _08093F5C @ =gUnknown_08E8CFC0 -	ldr r1, _08093F60 @ =0x06004800 -	movs r2, 0xA0 -	lsls r2, 1 -	bl CpuFastSet -	pop {r0} -	bx r0 -	.align 2, 0 -_08093F5C: .4byte gUnknown_08E8CFC0 -_08093F60: .4byte 0x06004800 -	thumb_func_end sub_8093F48 - -	thumb_func_start sub_8093F64 -sub_8093F64: @ 8093F64 -	push {lr} -	ldr r0, _08093F78 @ =gUnknown_08E8D9C0 -	ldr r1, _08093F7C @ =0x06005000 -	movs r2, 0xA0 -	lsls r2, 1 -	bl CpuFastSet -	pop {r0} -	bx r0 -	.align 2, 0 -_08093F78: .4byte gUnknown_08E8D9C0 -_08093F7C: .4byte 0x06005000 -	thumb_func_end sub_8093F64 - -	thumb_func_start sub_8093F80 -sub_8093F80: @ 8093F80 -	push {r4-r7,lr} -	movs r5, 0xC4 -	ldr r7, _08093FCC @ =0x06004000 -	movs r1, 0x5 -	movs r0, 0xA0 -	lsls r0, 7 -	adds r6, r0, 0 -_08093F8E: -	movs r0, 0x13 -	lsls r3, r1, 16 -	asrs r4, r3, 11 -_08093F94: -	lsls r2, r0, 16 -	asrs r2, 16 -	adds r1, r4, r2 -	lsls r1, 1 -	adds r1, r7 -	adds r0, r5, 0 -	orrs r0, r6 -	strh r0, [r1] -	adds r2, 0x1 -	lsls r2, 16 -	adds r0, r5, 0x1 -	lsls r0, 16 -	lsrs r5, r0, 16 -	lsrs r0, r2, 16 -	asrs r2, 16 -	cmp r2, 0x1A -	ble _08093F94 -	movs r1, 0x80 -	lsls r1, 9 -	adds r0, r3, r1 -	lsrs r1, r0, 16 -	asrs r0, 16 -	cmp r0, 0xC -	ble _08093F8E -	pop {r4-r7} -	pop {r0} -	bx r0 -	.align 2, 0 -_08093FCC: .4byte 0x06004000 -	thumb_func_end sub_8093F80 - -	thumb_func_start sub_8093FD0 -sub_8093FD0: @ 8093FD0 -	push {r4-r6,lr} -	ldr r4, _0809402C @ =0x06004000 -	movs r2, 0xF -	ldr r0, _08094030 @ =0x02000000 -	ldrb r0, [r0, 0x2] -	adds r0, 0xF -	cmp r2, r0 -	bge _08094002 -	movs r6, 0xC0 -	lsls r6, 1 -	ldr r1, _08094034 @ =0x0000408f -	adds r5, r1, 0 -	adds r3, r0, 0 -_08093FEA: -	lsls r1, r2, 16 -	asrs r1, 16 -	lsls r0, r1, 1 -	adds r0, r4 -	adds r0, r6 -	strh r5, [r0] -	adds r1, 0x1 -	lsls r1, 16 -	lsrs r2, r1, 16 -	asrs r1, 16 -	cmp r1, r3 -	blt _08093FEA -_08094002: -	lsls r1, r2, 16 -	asrs r0, r1, 16 -	cmp r0, 0x12 -	bgt _08094024 -	movs r3, 0xC0 -	lsls r3, 1 -	movs r2, 0 -_08094010: -	asrs r0, r1, 16 -	lsls r1, r0, 1 -	adds r1, r4 -	adds r1, r3 -	strh r2, [r1] -	adds r0, 0x1 -	lsls r1, r0, 16 -	asrs r0, r1, 16 -	cmp r0, 0x12 -	ble _08094010 -_08094024: -	pop {r4-r6} -	pop {r0} -	bx r0 -	.align 2, 0 -_0809402C: .4byte 0x06004000 -_08094030: .4byte 0x02000000 -_08094034: .4byte 0x0000408f -	thumb_func_end sub_8093FD0 - -	thumb_func_start sub_8094038 -sub_8094038: @ 8094038 -	push {r4-r7,lr} -	mov r7, r9 -	mov r6, r8 -	push {r6,r7} -	ldr r1, _080940D0 @ =0x02000000 -	ldrb r0, [r1, 0x1] -	cmp r0, 0 -	bne _080940C2 -	ldr r0, _080940D4 @ =0x06004000 -	mov r9, r0 -	movs r0, 0 -	movs r2, 0x4 -	adds r1, 0xE -	mov r8, r1 -	ldr r7, _080940D8 @ =gUnknown_083B5F8C -	movs r1, 0xC0 -	lsls r1, 6 -	adds r6, r1, 0 -	adds r1, r7, 0x6 -	mov r12, r1 -_08094060: -	lsls r0, 16 -	asrs r4, r0, 16 -	mov r1, r8 -	adds r0, r4, r1 -	ldrb r0, [r0] -	lsls r5, r2, 16 -	cmp r0, 0 -	beq _080940AE -	asrs r1, r5, 15 -	add r1, r9 -	movs r2, 0xF0 -	lsls r2, 2 -	adds r3, r1, r2 -	lsls r2, r4, 3 -	adds r0, r2, r7 -	ldrh r0, [r0] -	orrs r0, r6 -	strh r0, [r3] -	ldr r0, _080940DC @ =0x000003c2 -	adds r3, r1, r0 -	adds r0, r7, 0x2 -	adds r0, r2, r0 -	ldrh r0, [r0] -	orrs r0, r6 -	strh r0, [r3] -	movs r0, 0x80 -	lsls r0, 3 -	adds r3, r1, r0 -	adds r0, r7, 0x4 -	adds r0, r2, r0 -	ldrh r0, [r0] -	orrs r0, r6 -	strh r0, [r3] -	ldr r0, _080940E0 @ =0x00000402 -	adds r1, r0 -	add r2, r12 -	ldrh r0, [r2] -	orrs r0, r6 -	strh r0, [r1] -_080940AE: -	adds r1, r4, 0x1 -	lsls r1, 16 -	movs r2, 0xC0 -	lsls r2, 10 -	adds r0, r5, r2 -	lsrs r2, r0, 16 -	lsrs r0, r1, 16 -	asrs r1, 16 -	cmp r1, 0x7 -	ble _08094060 -_080940C2: -	pop {r3,r4} -	mov r8, r3 -	mov r9, r4 -	pop {r4-r7} -	pop {r0} -	bx r0 -	.align 2, 0 -_080940D0: .4byte 0x02000000 -_080940D4: .4byte 0x06004000 -_080940D8: .4byte gUnknown_083B5F8C -_080940DC: .4byte 0x000003c2 -_080940E0: .4byte 0x00000402 -	thumb_func_end sub_8094038 - -	thumb_func_start sub_80940E4 -sub_80940E4: @ 80940E4 -	push {r4,lr} -	movs r2, 0 -	ldr r1, _08094108 @ =0x06004000 -	movs r4, 0 -	ldr r3, _0809410C @ =0x000003ff -_080940EE: -	strh r4, [r1] -	lsls r0, r2, 16 -	movs r2, 0x80 -	lsls r2, 9 -	adds r0, r2 -	adds r1, 0x2 -	lsrs r2, r0, 16 -	asrs r0, 16 -	cmp r0, r3 -	ble _080940EE -	pop {r4} -	pop {r0} -	bx r0 -	.align 2, 0 -_08094108: .4byte 0x06004000 -_0809410C: .4byte 0x000003ff -	thumb_func_end sub_80940E4 - -	thumb_func_start sub_8094110 -sub_8094110: @ 8094110 -	push {r4-r6,lr} -	ldr r6, _0809413C @ =0x06004800 -	movs r2, 0x3 -	movs r5, 0xA0 -	lsls r5, 2 -	movs r3, 0x1 -	movs r4, 0xB0 -	lsls r4, 2 -_08094120: -	lsls r0, r2, 1 -	adds r0, r6 -	adds r1, r0, r5 -	strh r3, [r1] -	adds r0, r4 -	strh r3, [r0] -	adds r0, r2, 0x1 -	lsls r0, 16 -	lsrs r2, r0, 16 -	cmp r2, 0x10 -	bls _08094120 -	pop {r4-r6} -	pop {r0} -	bx r0 -	.align 2, 0 -_0809413C: .4byte 0x06004800 -	thumb_func_end sub_8094110 - -	thumb_func_start sub_8094140 -sub_8094140: @ 8094140 -	push {r4,r5,lr} -	ldr r0, _0809417C @ =gWindowConfig_81E6DC4 -	bl BasicInitMenuWindow -	ldr r4, _08094180 @ =gStringVar1 -	ldr r5, _08094184 @ =0x02000094 -	adds r0, r4, 0 -	adds r1, r5, 0 -	bl StringCopy -	ldrb r1, [r5, 0x8] -	adds r0, r4, 0 -	bl ConvertInternationalString -	adds r0, r4, 0 -	movs r1, 0x7 -	movs r2, 0x5 -	bl MenuPrint -	bl sub_80941D8 -	bl sub_8094200 -	bl sub_8094218 -	bl sub_809429C -	pop {r4,r5} -	pop {r0} -	bx r0 -	.align 2, 0 -_0809417C: .4byte gWindowConfig_81E6DC4 -_08094180: .4byte gStringVar1 -_08094184: .4byte 0x02000094 -	thumb_func_end sub_8094140 - -	thumb_func_start sub_8094188 -sub_8094188: @ 8094188 -	push {lr} -	ldr r0, _080941D0 @ =gWindowConfig_81E6DC4 -	bl BasicInitMenuWindow -	bl sub_80942F8 -	bl sub_8094334 -	bl sub_80943C4 -	bl sub_8094428 -	bl sub_8094498 -	bl sub_80944E8 -	bl sub_8094538 -	ldr r0, _080941D4 @ =gWindowConfig_81E6DE0 -	bl BasicInitMenuWindow -	bl sub_8094354 -	bl sub_80943E4 -	bl sub_8094448 -	bl sub_80944B8 -	bl sub_8094508 -	bl sub_8094558 -	pop {r0} -	bx r0 -	.align 2, 0 -_080941D0: .4byte gWindowConfig_81E6DC4 -_080941D4: .4byte gWindowConfig_81E6DE0 -	thumb_func_end sub_8094188 - -	thumb_func_start sub_80941D8 -sub_80941D8: @ 80941D8 -	push {lr} -	sub sp, 0x8 -	ldr r0, _080941FC @ =0x02000000 -	adds r0, 0x72 -	ldrh r1, [r0] -	mov r0, sp -	movs r2, 0x2 -	movs r3, 0x5 -	bl ConvertIntToDecimalStringN -	mov r0, sp -	movs r1, 0x14 -	movs r2, 0x2 -	bl MenuPrint -	add sp, 0x8 -	pop {r0} -	bx r0 -	.align 2, 0 -_080941FC: .4byte 0x02000000 -	thumb_func_end sub_80941D8 - -	thumb_func_start sub_8094200 -sub_8094200: @ 8094200 -	push {lr} -	ldr r0, _08094214 @ =0x02000000 -	adds r0, 0x88 -	ldr r0, [r0] -	movs r1, 0x10 -	movs r2, 0x8 -	bl sub_80B7AEC -	pop {r0} -	bx r0 -	.align 2, 0 -_08094214: .4byte 0x02000000 -	thumb_func_end sub_8094200 - -	thumb_func_start sub_8094218 -sub_8094218: @ 8094218 -	push {lr} -	sub sp, 0x10 -	ldr r1, _0809422C @ =0x02000000 -	ldrb r0, [r1, 0x7] -	cmp r0, 0 -	bne _08094230 -	bl sub_8094110 -	b _0809424A -	.align 2, 0 -_0809422C: .4byte 0x02000000 -_08094230: -	adds r0, r1, 0 -	adds r0, 0x70 -	ldrh r1, [r0] -	mov r0, sp -	movs r2, 0 -	movs r3, 0x3 -	bl ConvertIntToDecimalStringN -	mov r0, sp -	movs r1, 0x10 -	movs r2, 0xA -	bl MenuPrint_RightAligned -_0809424A: -	add sp, 0x10 -	pop {r0} -	bx r0 -	thumb_func_end sub_8094218 - -	thumb_func_start sub_8094250 -sub_8094250: @ 8094250 -	push {r4,r5,lr} -	sub sp, 0x10 -	adds r5, r0, 0 -	lsls r1, 16 -	lsrs r3, r1, 16 -	ldr r0, _08094294 @ =gSaveBlock2 -	ldrh r4, [r0, 0xE] -	ldrb r2, [r0, 0x10] -	ldr r1, _08094298 @ =0x02000000 -	ldrb r0, [r1, 0x1] -	cmp r0, 0 -	beq _08094272 -	adds r0, r1, 0 -	adds r0, 0x74 -	ldrh r4, [r0] -	adds r0, 0x2 -	ldrh r2, [r0] -_08094272: -	lsls r3, 16 -	asrs r3, 16 -	mov r0, sp -	adds r1, r4, 0 -	bl FormatPlayTime -	adds r0, r5, 0 -	mov r1, sp -	movs r2, 0x30 -	movs r3, 0x1 -	bl sub_8072C74 -	add sp, 0x10 -	pop {r4,r5} -	pop {r0} -	bx r0 -	.align 2, 0 -_08094294: .4byte gSaveBlock2 -_08094298: .4byte 0x02000000 -	thumb_func_end sub_8094250 - -	thumb_func_start sub_809429C -sub_809429C: @ 809429C -	push {r4-r6,lr} -	ldr r6, _080942F0 @ =0x02000000 -	ldrb r0, [r6, 0x1] -	cmp r0, 0 -	beq _080942EA -	ldr r0, _080942F4 @ =gStringVar1 -	adds r1, r6, 0 -	adds r1, 0x20 -	bl StringCopy -	movs r5, 0 -	strb r5, [r0] -	adds r0, 0x1 -	adds r1, r6, 0 -	adds r1, 0x30 -	bl StringCopy -	ldr r4, _080942F4 @ =gStringVar1 -	adds r0, r4, 0 -	movs r1, 0x2 -	movs r2, 0xE -	bl MenuPrint -	adds r1, r6, 0 -	adds r1, 0x40 -	adds r0, r4, 0 -	bl StringCopy -	strb r5, [r0] -	adds r0, 0x1 -	adds r1, r6, 0 -	adds r1, 0x50 -	bl StringCopy -	adds r0, r4, 0 -	movs r1, 0x2 -	movs r2, 0x10 -	bl MenuPrint -_080942EA: -	pop {r4-r6} -	pop {r0} -	bx r0 -	.align 2, 0 -_080942F0: .4byte 0x02000000 -_080942F4: .4byte gStringVar1 -	thumb_func_end sub_809429C - -	thumb_func_start sub_80942F8 -sub_80942F8: @ 80942F8 -	push {r4,r5,lr} -	ldr r4, _08094328 @ =gStringVar1 -	ldr r5, _0809432C @ =0x02000094 -	adds r0, r4, 0 -	adds r1, r5, 0 -	bl StringCopy -	ldrb r1, [r5, 0x8] -	adds r0, r4, 0 -	bl ConvertInternationalString -	ldr r1, _08094330 @ =gOtherText_TrainersTrainerCard -	adds r0, r4, 0 -	bl StringAppend -	adds r0, r4, 0 -	movs r1, 0x1C -	movs r2, 0x2 -	bl MenuPrint_RightAligned -	pop {r4,r5} -	pop {r0} -	bx r0 -	.align 2, 0 -_08094328: .4byte gStringVar1 -_0809432C: .4byte 0x02000094 -_08094330: .4byte gOtherText_TrainersTrainerCard -	thumb_func_end sub_80942F8 - -	thumb_func_start sub_8094334 -sub_8094334: @ 8094334 -	push {lr} -	ldr r0, _0809434C @ =0x02000000 -	ldrb r0, [r0, 0x8] -	cmp r0, 0 -	beq _08094348 -	ldr r0, _08094350 @ =gOtherText_FirstHOF -	movs r1, 0x3 -	movs r2, 0x5 -	bl MenuPrint -_08094348: -	pop {r0} -	bx r0 -	.align 2, 0 -_0809434C: .4byte 0x02000000 -_08094350: .4byte gOtherText_FirstHOF -	thumb_func_end sub_8094334 - -	thumb_func_start sub_8094354 -sub_8094354: @ 8094354 -	push {r4,r5,lr} -	ldr r5, _080943B8 @ =0x02000000 -	ldrb r0, [r5, 0x8] -	cmp r0, 0 -	beq _080943B0 -	ldr r2, _080943BC @ =gStringVar1 -	adds r0, r5, 0 -	adds r0, 0x6A -	ldrh r1, [r0] -	adds r0, r2, 0 -	movs r2, 0x1 -	movs r3, 0x3 -	bl ConvertIntToDecimalStringN -	adds r2, r0, 0 -	ldr r4, _080943C0 @ =gUnknown_083B5EF4 -	adds r1, r4, 0 -	bl StringCopy -	adds r2, r0, 0 -	adds r0, r5, 0 -	adds r0, 0x6C -	ldrh r1, [r0] -	adds r0, r2, 0 -	movs r2, 0x2 -	movs r3, 0x2 -	bl ConvertIntToDecimalStringN -	adds r2, r0, 0 -	adds r1, r4, 0 -	bl StringCopy -	adds r2, r0, 0 -	adds r0, r5, 0 -	adds r0, 0x6E -	ldrh r1, [r0] -	adds r0, r2, 0 -	movs r2, 0x2 -	movs r3, 0x2 -	bl ConvertIntToDecimalStringN -	ldr r0, _080943BC @ =gStringVar1 -	movs r1, 0x1C -	movs r2, 0x5 -	bl MenuPrint_RightAligned -_080943B0: -	pop {r4,r5} -	pop {r0} -	bx r0 -	.align 2, 0 -_080943B8: .4byte 0x02000000 -_080943BC: .4byte gStringVar1 -_080943C0: .4byte gUnknown_083B5EF4 -	thumb_func_end sub_8094354 - -	thumb_func_start sub_80943C4 -sub_80943C4: @ 80943C4 -	push {lr} -	ldr r0, _080943DC @ =0x02000000 -	ldrb r0, [r0, 0x9] -	cmp r0, 0 -	beq _080943D8 -	ldr r0, _080943E0 @ =gOtherText_LinkCableBattles -	movs r1, 0x3 -	movs r2, 0x7 -	bl MenuPrint -_080943D8: -	pop {r0} -	bx r0 -	.align 2, 0 -_080943DC: .4byte 0x02000000 -_080943E0: .4byte gOtherText_LinkCableBattles -	thumb_func_end sub_80943C4 - -	thumb_func_start sub_80943E4 -sub_80943E4: @ 80943E4 -	push {r4,lr} -	sub sp, 0x10 -	ldr r4, _08094424 @ =0x02000000 -	ldrb r0, [r4, 0x9] -	cmp r0, 0 -	beq _0809441C -	adds r0, r4, 0 -	adds r0, 0x78 -	ldrh r1, [r0] -	mov r0, sp -	bl ConvertIntToDecimalString -	mov r0, sp -	movs r1, 0x16 -	movs r2, 0x7 -	bl MenuPrint_RightAligned -	adds r0, r4, 0 -	adds r0, 0x7A -	ldrh r1, [r0] -	mov r0, sp -	bl ConvertIntToDecimalString -	mov r0, sp -	movs r1, 0x1C -	movs r2, 0x7 -	bl MenuPrint_RightAligned -_0809441C: -	add sp, 0x10 -	pop {r4} -	pop {r0} -	bx r0 -	.align 2, 0 -_08094424: .4byte 0x02000000 -	thumb_func_end sub_80943E4 - -	thumb_func_start sub_8094428 -sub_8094428: @ 8094428 -	push {lr} -	ldr r0, _08094440 @ =0x02000000 -	ldrb r0, [r0, 0xA] -	cmp r0, 0 -	beq _0809443C -	ldr r0, _08094444 @ =gOtherText_BattleTowerWinRecord -	movs r1, 0x3 -	movs r2, 0xF -	bl MenuPrint -_0809443C: -	pop {r0} -	bx r0 -	.align 2, 0 -_08094440: .4byte 0x02000000 -_08094444: .4byte gOtherText_BattleTowerWinRecord -	thumb_func_end sub_8094428 - -	thumb_func_start sub_8094448 -sub_8094448: @ 8094448 -	push {r4,lr} -	sub sp, 0x10 -	ldr r4, _08094494 @ =0x02000000 -	ldrb r0, [r4, 0xA] -	cmp r0, 0 -	beq _0809448C -	adds r0, r4, 0 -	adds r0, 0x7C -	ldrh r1, [r0] -	mov r0, sp -	movs r2, 0x18 -	movs r3, 0x1 -	bl sub_8072C44 -	mov r0, sp -	movs r1, 0x70 -	movs r2, 0x78 -	movs r3, 0 -	bl MenuPrint_PixelCoords -	adds r0, r4, 0 -	adds r0, 0x7E -	ldrh r1, [r0] -	mov r0, sp -	movs r2, 0x18 -	movs r3, 0x1 -	bl sub_8072C44 -	mov r0, sp -	movs r1, 0x95 -	movs r2, 0x78 -	movs r3, 0 -	bl MenuPrint_PixelCoords -_0809448C: -	add sp, 0x10 -	pop {r4} -	pop {r0} -	bx r0 -	.align 2, 0 -_08094494: .4byte 0x02000000 -	thumb_func_end sub_8094448 - -	thumb_func_start sub_8094498 -sub_8094498: @ 8094498 -	push {lr} -	ldr r0, _080944B0 @ =0x02000000 -	ldrb r0, [r0, 0xB] -	cmp r0, 0 -	beq _080944AC -	ldr r0, _080944B4 @ =gOtherText_ContestRecord -	movs r1, 0x3 -	movs r2, 0xD -	bl MenuPrint -_080944AC: -	pop {r0} -	bx r0 -	.align 2, 0 -_080944B0: .4byte 0x02000000 -_080944B4: .4byte gOtherText_ContestRecord -	thumb_func_end sub_8094498 - -	thumb_func_start sub_80944B8 -sub_80944B8: @ 80944B8 -	push {lr} -	sub sp, 0x8 -	ldr r1, _080944E4 @ =0x02000000 -	ldrb r0, [r1, 0xB] -	cmp r0, 0 -	beq _080944DE -	adds r0, r1, 0 -	adds r0, 0x80 -	ldrh r1, [r0] -	mov r0, sp -	movs r2, 0x1 -	movs r3, 0x3 -	bl ConvertIntToDecimalStringN -	mov r0, sp -	movs r1, 0x1C -	movs r2, 0xD -	bl MenuPrint_RightAligned -_080944DE: -	add sp, 0x8 -	pop {r0} -	bx r0 -	.align 2, 0 -_080944E4: .4byte 0x02000000 -	thumb_func_end sub_80944B8 - -	thumb_func_start sub_80944E8 -sub_80944E8: @ 80944E8 -	push {lr} -	ldr r0, _08094500 @ =0x02000000 -	ldrb r0, [r0, 0xC] -	cmp r0, 0 -	beq _080944FC -	ldr r0, _08094504 @ =gOtherText_MixingRecord -	movs r1, 0x3 -	movs r2, 0xB -	bl MenuPrint -_080944FC: -	pop {r0} -	bx r0 -	.align 2, 0 -_08094500: .4byte 0x02000000 -_08094504: .4byte gOtherText_MixingRecord -	thumb_func_end sub_80944E8 - -	thumb_func_start sub_8094508 -sub_8094508: @ 8094508 -	push {lr} -	sub sp, 0x8 -	ldr r1, _08094534 @ =0x02000000 -	ldrb r0, [r1, 0xC] -	cmp r0, 0 -	beq _0809452E -	adds r0, r1, 0 -	adds r0, 0x82 -	ldrh r1, [r0] -	mov r0, sp -	movs r2, 0x1 -	movs r3, 0x5 -	bl ConvertIntToDecimalStringN -	mov r0, sp -	movs r1, 0x1C -	movs r2, 0xB -	bl MenuPrint_RightAligned -_0809452E: -	add sp, 0x8 -	pop {r0} -	bx r0 -	.align 2, 0 -_08094534: .4byte 0x02000000 -	thumb_func_end sub_8094508 - -	thumb_func_start sub_8094538 -sub_8094538: @ 8094538 -	push {lr} -	ldr r0, _08094550 @ =0x02000000 -	ldrb r0, [r0, 0xD] -	cmp r0, 0 -	beq _0809454C -	ldr r0, _08094554 @ =gOtherText_TradeRecord -	movs r1, 0x3 -	movs r2, 0x9 -	bl MenuPrint -_0809454C: -	pop {r0} -	bx r0 -	.align 2, 0 -_08094550: .4byte 0x02000000 -_08094554: .4byte gOtherText_TradeRecord -	thumb_func_end sub_8094538 - -	thumb_func_start sub_8094558 -sub_8094558: @ 8094558 -	push {lr} -	sub sp, 0x8 -	ldr r1, _08094584 @ =0x02000000 -	ldrb r0, [r1, 0xD] -	cmp r0, 0 -	beq _0809457E -	adds r0, r1, 0 -	adds r0, 0x84 -	ldrh r1, [r0] -	mov r0, sp -	movs r2, 0x1 -	movs r3, 0x5 -	bl ConvertIntToDecimalStringN -	mov r0, sp -	movs r1, 0x1C -	movs r2, 0x9 -	bl MenuPrint_RightAligned -_0809457E: -	add sp, 0x8 -	pop {r0} -	bx r0 -	.align 2, 0 -_08094584: .4byte 0x02000000 -	thumb_func_end sub_8094558 - -	thumb_func_start unref_sub_8094588 -unref_sub_8094588: @ 8094588 -	push {r4,lr} -	lsls r0, 16 -	lsrs r3, r0, 16 -	lsls r1, 16 -	lsrs r2, r1, 16 -	ldr r4, _080945B4 @ =gOtherText_Boy -	ldr r0, _080945B8 @ =gSaveBlock2 -	ldrb r0, [r0, 0x8] -	cmp r0, 0x1 -	bne _0809459E -	ldr r4, _080945BC @ =gOtherText_Girl -_0809459E: -	lsls r1, r3, 24 -	lsrs r1, 24 -	lsls r2, 24 -	lsrs r2, 24 -	adds r0, r4, 0 -	bl MenuPrint -	pop {r4} -	pop {r0} -	bx r0 -	.align 2, 0 -_080945B4: .4byte gOtherText_Boy -_080945B8: .4byte gSaveBlock2 -_080945BC: .4byte gOtherText_Girl -	thumb_func_end unref_sub_8094588 - -	.align 2, 0 @ Don't pad with nop. diff --git a/include/asm.inc.h b/include/asm.inc.h index 2f9b511b6..f533d8729 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -237,6 +237,7 @@ void objc_exclamation_mark_probably(struct Sprite *sprite);  // asm/rom_80859BC.o  u8 CreateTrainerSprite_BirchSpeech(u8, u16, u16, u8, void *); +void LoadTrainerGfx_TrainerCard(u8 gender, int, void *);  u8 CreateBirchSprite(u8, u8, u8);  void remove_some_task(void);  void dp12_8087EA4(void); @@ -292,6 +293,7 @@ void DoNamingScreen(u8 r0, struct SaveBlock2 *r1, u16 r2, u16 r3, u8 s0, MainCal  bool8 IsEnoughMoney(u32, u32);  void sub_80B79B8(u32 *, u32);  void sub_80B79E0(u32 *, u32); +void sub_80B7AEC(u32, u8 left, u8 top);  void sub_80B7BEC(u32, u8, u8);  void sub_80B7C14(u32, u8, u8);  void RemoveMoneyLabelObject(u8, u8); @@ -360,6 +362,7 @@ void sub_80E6084();  // asm/easy_chat.o  void sub_80E6764(void); +void sub_80EB3FC(u8 *, u16);  u8 ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16);  u16 sub_80EB72C(u16); @@ -394,7 +397,6 @@ void sub_8106630(u32);  // asm/rom6.o  bool8 npc_before_player_of_type(u8);  u8 oei_task_add(void); -  void sub_810C994(void);  void sub_810CA6C(s32);  s16 sub_810CAE4(u8, struct Pokeblock *); diff --git a/include/menu.h b/include/menu.h index 28710b7b9..9592fc291 100644 --- a/include/menu.h +++ b/include/menu.h @@ -15,7 +15,7 @@ bool32 MultistepInitMenuWindowContinue(void);  void unref_sub_8071DA4(struct WindowConfig *, u16);  void MenuLoadTextWindowGraphics_OverrideFrameType(u8);  void MenuLoadTextWindowGraphics(void); -void BasicInitMenuWindow(struct WindowConfig *); +void BasicInitMenuWindow(const struct WindowConfig *);  void MenuPrint(u8 *, u8, u8);  void MenuZeroFillWindowRect(u8, u8, u8, u8);  void MenuFillWindowRectWithBlankTile(u8, u8, u8, u8); diff --git a/include/text.h b/include/text.h index ad5313eed..d0d418eab 100644 --- a/include/text.h +++ b/include/text.h @@ -86,8 +86,8 @@ extern const struct WindowConfig gWindowConfig_81E6D54;  extern const struct WindowConfig gWindowConfig_81E6D70;  extern const struct WindowConfig gWindowConfig_81E6D8C;  extern const struct WindowConfig gWindowConfig_81E6DA8; -extern const struct WindowConfig gWindowConfig_81E6DC4; -extern const struct WindowConfig gWindowConfig_81E6DE0; +extern const struct WindowConfig WindowConfig_TrainerCard_Back_Values; +extern const struct WindowConfig WindowConfig_TrainerCard_Back_Labels;  extern const struct WindowConfig gWindowConfig_81E6DFC;  extern const struct WindowConfig gWindowConfig_81E6E18;  extern const struct WindowConfig gWindowConfig_81E6E34; diff --git a/include/trainer_card.h b/include/trainer_card.h index aca964151..7269c0b20 100644 --- a/include/trainer_card.h +++ b/include/trainer_card.h @@ -3,7 +3,7 @@  struct TrainerCard {  	/*0x00*/ u8 gender; -	/*0x01*/ u8 var_1; +	/*0x01*/ u8 stars;  	/*0x02*/ bool8 hasPokedex;  	/*0x03*/ bool8 var_3;  	/*0x04*/ bool8 var_4; @@ -17,8 +17,8 @@ struct TrainerCard {  	/*0x12*/ u16 playTimeMinutes;  	/*0x14*/ u16 linkBattleWins;  	/*0x16*/ u16 linkBattleLosses; -	/*0x18*/ u16 var_18; -	/*0x1A*/ u16 var_1A; +	/*0x18*/ u16 battleTowerWins; +	/*0x1A*/ u16 battleTowerLosses;  	/*0x1C*/ u16 contestsWithFriends;  	/*0x1E*/ u16 pokeblocksWithFriends;  	/*0x20*/ u16 pokemonTrades; @@ -30,76 +30,23 @@ struct TrainerCard {  void sub_8093110(void (*)(void));  void sub_8093130(u8, void (*)(void)); -void sub_8093324(void);  void sub_8093390(struct TrainerCard *);  u8 sub_80934C4(u8 id); -void sub_8093598(void); -void sub_80935EC(void); -void sub_8093610(void); -void sub_8093688(void); -// sub_80936D4 -void sub_80937A4(void); -void sub_80937BC(void); -void sub_80937D8(void); -void sub_80937F0(void); -void nullsub_15(void); -void sub_8093800(void); -// sub_809380C -// sub_809382C -// sub_8093864 -// sub_80938A8 -// sub_80938CC -// sub_8093918 -// sub_8093938 -// sub_8093954 -// sub_8093980 -// sub_80939A4 -// sub_80939C0 -// sub_80939DC -// sub_8093A28 -// sub_8093A48 -// sub_8093A68 -// sub_8093AA0 -// sub_8093AF0 -// sub_8093C0C -// sub_8093C38 -// sub_8093D50 -// sub_8093D7C -// sub_8093DAC -// sub_8093DC8 -// sub_8093DEC -// sub_8093E04 -// sub_8093E28 -// sub_8093EA0 -// sub_8093EF8 -// sub_8093F14 -// sub_8093F48 -// sub_8093F64 -// sub_8093F80 -// sub_8093FD0 -// sub_8094038 -// sub_80940E4 -// sub_8094110 -// sub_8094140 -// sub_8094188 -// sub_80941D8 -// sub_8094200 -// sub_8094218 -// sub_8094250 -// sub_809429C -// sub_80942F8 -// sub_8094334 -// sub_8094354 -// sub_80943C4 -// sub_80943E4 -// sub_8094428 -// sub_8094448 -// sub_8094498 -// sub_80944B8 -// sub_80944E8 -// sub_8094508 -// sub_8094538 -// sub_8094558 -// unref_sub_8094588 + +// gUnknown_083B5EBC:: @ 83B5EBC +bool8 sub_8093864(); +bool8 sub_80938A8(); +bool8 sub_80938CC(); +bool8 sub_8093918(); +bool8 sub_8093938(); +bool8 sub_8093954(); +bool8 sub_8093980(); + +// gUnknown_083B5ED8:: @ 83B5ED8 +bool8 sub_8093AA0(); +bool8 sub_8093AF0(); +bool8 sub_8093C0C(struct TrainerCard *trainerCard); +bool8 sub_8093C38(); +bool8 sub_8093D50(void);  #endif // GUARD_TRAINER_CARD_H diff --git a/ld_script.txt b/ld_script.txt index ceb6126c3..1a3878824 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -110,7 +110,6 @@ SECTIONS {          src/pokedex.o(.text);          asm/pokedex.o(.text);          src/trainer_card.o(.text); -        asm/trainer_card.o(.text);          src/save_menu_util.o(.text);          asm/rom_8094928.o(.text);          asm/item_menu.o(.text); diff --git a/src/menu.c b/src/menu.c index ae0dca058..0b5eab831 100644 --- a/src/menu.c +++ b/src/menu.c @@ -120,7 +120,7 @@ void MenuLoadTextWindowGraphics(void)      LoadTextWindowGraphics(gMenuWindowPtr);  } -void BasicInitMenuWindow(struct WindowConfig *winConfig) +void BasicInitMenuWindow(const struct WindowConfig *winConfig)  {      InitWindowFromConfig(gMenuWindowPtr, winConfig);      gMenuWindowPtr->tileDataStartOffset = gMenuTextTileOffset; diff --git a/src/text.c b/src/text.c index d64d5db15..c632a4fa6 100644 --- a/src/text.c +++ b/src/text.c @@ -770,7 +770,7 @@ const struct WindowConfig gWindowConfig_81E6DA8 =      (u16 *)BG_SCREEN_ADDR(11), // tilemap  }; -const struct WindowConfig gWindowConfig_81E6DC4 = +const struct WindowConfig WindowConfig_TrainerCard_Back_Values =  {      0, // BG number      2, // BG character base block @@ -791,7 +791,7 @@ const struct WindowConfig gWindowConfig_81E6DC4 =      (u16 *)BG_SCREEN_ADDR(30), // tilemap  }; -const struct WindowConfig gWindowConfig_81E6DE0 = +const struct WindowConfig WindowConfig_TrainerCard_Back_Labels =  {      0, // BG number      2, // BG character base block diff --git a/src/trainer_card.c b/src/trainer_card.c index 84f2d561f..516f5191d 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -9,22 +9,33 @@  #include "palette.h"  #include "pokedex.h"  #include "rom4.h" -#include "save_menu_util.h" +#include "songs.h" +#include "sound.h"  #include "sprite.h" +#include "string_util.h"  #include "task.h"  typedef void (*Callback)(void); -struct Struct2000000 -{ -    /*0x00*/ u8 filer0[1]; +struct Struct2000000 { +    /*0x00*/ u8 var_0;      /*0x01*/ bool8 var_1; -    /*0x02*/ u8 filer1[2]; +    /*0x02*/ u8 var_2; +    /*0x03*/ bool8 var_3;      /*0x04*/ u8 var_4;      /*0x05*/ u8 var_5;      /*0x06*/ u8 var_6; -    /*0x07*/ u8 filler2[0x59]; -    /*0x60*/ Callback * var_60; +    /*0x07*/ bool8 var_7; +    /*0x08*/ bool8 var_8; +    /*0x09*/ bool8 var_9; +    /*0x0A*/ bool8 var_a; +    /*0x0B*/ bool8 var_b; +    /*0x0C*/ bool8 var_c; +    /*0x0D*/ bool8 var_d; +    /*0x0E*/ u8 var_e[8]; +    /*0x16*/ u8 filler_16[10]; +    /*0x20*/ u8 var_20[4][0x10]; +    /*0x60*/ Callback *var_60;      /*0x64*/ struct TrainerCard var_64;      /*0x9C*/ u8 language; // 0x9C  }; @@ -33,6 +44,30 @@ extern struct Struct2000000 unk_2000000;  extern struct LinkPlayerMapObject gLinkPlayerMapObjects[];  extern struct TrainerCard gTrainerCards[4]; +extern u8 gUnknown_083B5EF4[]; +extern u16 *gUnknown_083B5EF8[5]; +extern u16 gUnknown_083B5F0C[]; +extern u16 gBadgesPalette[]; +extern u16 gUnknown_083B5F4C[]; + +extern u16 gUnknown_08E8CFC0[]; +extern u16 gUnknown_08E8D9C0[]; + +extern u8 gOtherText_TrainersTrainerCard[]; +extern u8 gOtherText_FirstHOF[]; +extern u8 gOtherText_LinkCableBattles[]; +extern u8 gOtherText_BattleTowerWinRecord[]; +extern u8 gOtherText_ContestRecord[]; +extern u8 gOtherText_MixingRecord[]; +extern u8 gOtherText_TradeRecord[]; +extern u8 gOtherText_Boy[]; +extern u8 gOtherText_Girl[]; + +// Other signature than on save_menu_util.h +void FormatPlayTime(u8 *playtime, u16 hours, u16 minutes, s16 colon); + +u16 GetPokedexSeenCount(void); +  enum {      TD_0,      TD_1, @@ -44,11 +79,68 @@ static void sub_809323C(void);  static void sub_8093254(void);  static void sub_80932AC(Callback callBack);  static void sub_80932E4(u8 arg1, Callback callBack); +static void sub_8093324(void);  static void nullsub_60(u8);  static u32 sav12_xor_get_clamped_above(u8 index, u32 maxVal);  static u8 sub_80934F4(struct TrainerCard *);  static void sub_8093534(void);  static void sub_8093550(void); +static void sub_8093598(void); +static void sub_80935EC(void); +static void sub_8093610(void); +static void sub_8093688(void); +static void sub_80936D4(void); +static void sub_80937A4(void); +static void sub_80937BC(void); +static void sub_80937D8(void); +static void sub_80937F0(void); +static void nullsub_15(void); +static void sub_8093800(void); +static void sub_809380C(); +static void sub_809382C(u8 taskId); +static void sub_80939A4(void); +static void sub_80939C0(void); +static void sub_80939DC(u8 taskId); +static void sub_8093A28(void); +static u8 sub_8093A48(void); +static void sub_8093A68(u8 taskId); +static void sub_8093D7C(void); +static void sub_8093DAC(void); +static void sub_8093DC8(void); +static void sub_8093DEC(void); +static void sub_8093E04(void); +static void sub_8093E28(void); +static void sub_8093EA0(void); +static void sub_8093EF8(void); +static void sub_8093F14(void); +static void sub_8093F48(void); +static void sub_8093F64(void); +static void sub_8093F80(void); +static void sub_8093FD0(void); +static void sub_8094038(void); +static void sub_80940E4(void); +static void sub_8094110(void); +static void sub_8094140(void); +static void sub_8094188(void); +static void TrainerCard_Front_PrintTrainerID(void); +static void TrainerCard_Front_PrintMoney(void); +static void TrainerCard_Front_PrintPokedexCount(void); +static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon); +static void sub_809429C(void); +static void TrainerCard_Back_PrintName(void); +static void TrainerCard_Back_PrintHallOfFameTime_Label(void); +static void TrainerCard_Back_PrintHallOfFameTime(void); +static void TrainerCard_Back_PrintLinkBattlesLabel(void); +static void TrainerCard_Back_PrintLinkBattles(void); +static void TrainerCard_Back_PrintBattleTower_Label(void); +static void TrainerCard_Back_PrintBattleTower(void); +static void TrainerCard_Back_PrintLinkContests_Label(void); +static void TrainerCard_Back_PrintLinkContests(void); +static void TrainerCard_Back_PrintLinkPokeblocks_Label(void); +static void TrainerCard_Back_PrintLinkPokeblocks(void); +static void TrainerCard_Back_PrintPokemonTrades_Label(void); +static void TrainerCard_Back_PrintPokemonTrades(void); +static void unref_sub_8094588(u16 left, u16 top);  void sub_8093110(Callback arg1) {      sub_80932AC(arg1); @@ -191,7 +283,7 @@ static void sub_80932E4(u8 arg1, Callback callBack) {      StoreWordInTwoHalfwords(&task->data[TD_CALLBACK], (u32) callBack);  } -void sub_8093324(void) { +static void sub_8093324(void) {      u8 taskId = FindTaskIdByFunc(nullsub_60);      struct Task *task = &gTasks[taskId];      unk_2000000.var_1 = task->data[TD_0]; @@ -250,13 +342,13 @@ void sub_8093390(struct TrainerCard *arg1) {      arg1->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF);      // Battle tower? -    arg1->var_18 = gSaveBlock2.filler_A8.var_4C8; -    arg1->var_1A = gSaveBlock2.filler_A8.var_4CA; -    if (arg1->var_18 > 9999) { -        arg1->var_18 = 9999; +    arg1->battleTowerWins = gSaveBlock2.filler_A8.var_4C8; +    arg1->battleTowerLosses = gSaveBlock2.filler_A8.var_4CA; +    if (arg1->battleTowerWins > 9999) { +        arg1->battleTowerWins = 9999;      } -    if (arg1->var_1A > 9999) { -        arg1->var_1A = 9999; +    if (arg1->battleTowerLosses > 9999) { +        arg1->battleTowerLosses = 9999;      }      r4 = FALSE; @@ -275,11 +367,11 @@ void sub_8093390(struct TrainerCard *arg1) {          arg1->playerName[i] = gSaveBlock2.playerName[i];      } -    arg1->var_1 = sub_80934F4(arg1); +    arg1->stars = sub_80934F4(arg1);  }  u8 sub_80934C4(u8 id) { -    return gTrainerCards[id].var_1; +    return gTrainerCards[id].stars;  }   static u32 sav12_xor_get_clamped_above(u8 index, u32 maxVal) { @@ -303,7 +395,7 @@ static u8 sub_80934F4(struct TrainerCard *trainerCard) {          value += 1;      } -    if (trainerCard->var_1A > 49) { +    if (trainerCard->battleTowerLosses > 49) {          value += 1;      } @@ -333,3 +425,1633 @@ static void sub_8093550(void) {      REG_DISPSTAT |= DISPSTAT_VBLANK_INTR | DISPSTAT_HBLANK_INTR;      REG_DISPCNT = 0x1f40;  } + +__attribute__((naked)) +void sub_8093598() { +    asm(".syntax unified\n\ +	push {r4-r7,lr}\n\ +	sub sp, 0x4\n\ +	movs r2, 0xC0\n\ +	lsls r2, 19\n\ +	movs r3, 0x80\n\ +	lsls r3, 9\n\ +	mov r4, sp\n\ +	movs r6, 0\n\ +	ldr r1, _080935E4 @ =0x040000d4\n\ +	movs r5, 0x80\n\ +	lsls r5, 5\n\ +	ldr r7, _080935E8 @ =0x81000800\n\ +	movs r0, 0x81\n\ +	lsls r0, 24\n\ +	mov r12, r0\n\ +_080935B6:\n\ +	strh r6, [r4]\n\ +	mov r0, sp\n\ +	str r0, [r1]\n\ +	str r2, [r1, 0x4]\n\ +	str r7, [r1, 0x8]\n\ +	ldr r0, [r1, 0x8]\n\ +	adds r2, r5\n\ +	subs r3, r5\n\ +	cmp r3, r5\n\ +	bhi _080935B6\n\ +	strh r6, [r4]\n\ +	mov r0, sp\n\ +	str r0, [r1]\n\ +	str r2, [r1, 0x4]\n\ +	lsrs r0, r3, 1\n\ +	mov r2, r12\n\ +	orrs r0, r2\n\ +	str r0, [r1, 0x8]\n\ +	ldr r0, [r1, 0x8]\n\ +	add sp, 0x4\n\ +	pop {r4-r7}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_080935E4: .4byte 0x040000d4\n\ +_080935E8: .4byte 0x81000800\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +void sub_80935EC() { +    asm(".syntax unified\n\ +	sub sp, 0x4\n\ +	movs r2, 0xE0\n\ +	lsls r2, 19\n\ +	mov r1, sp\n\ +	movs r0, 0\n\ +	strh r0, [r1]\n\ +	ldr r0, _08093608 @ =0x040000d4\n\ +	str r1, [r0]\n\ +	str r2, [r0, 0x4]\n\ +	ldr r1, _0809360C @ =0x81000200\n\ +	str r1, [r0, 0x8]\n\ +	ldr r0, [r0, 0x8]\n\ +	add sp, 0x4\n\ +	bx lr\n\ +	.align 2, 0\n\ +_08093608: .4byte 0x040000d4\n\ +_0809360C: .4byte 0x81000200\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +void sub_8093610() { +    asm(".syntax unified\n\ +	push {r4,r5,lr}\n\ +	ldr r5, _08093664 @ =REG_BG0CNT\n\ +	movs r1, 0\n\ +	strh r1, [r5]\n\ +	ldr r2, _08093668 @ =REG_BG1CNT\n\ +	strh r1, [r2]\n\ +	ldr r3, _0809366C @ =REG_BG2CNT\n\ +	strh r1, [r3]\n\ +	ldr r4, _08093670 @ =REG_BG3CNT\n\ +	strh r1, [r4]\n\ +	ldr r0, _08093674 @ =REG_BG0HOFS\n\ +	strh r1, [r0]\n\ +	adds r0, 0x2\n\ +	strh r1, [r0]\n\ +	adds r0, 0x2\n\ +	strh r1, [r0]\n\ +	adds r0, 0x2\n\ +	strh r1, [r0]\n\ +	adds r0, 0x2\n\ +	strh r1, [r0]\n\ +	adds r0, 0x2\n\ +	strh r1, [r0]\n\ +	adds r0, 0x2\n\ +	strh r1, [r0]\n\ +	adds r0, 0x2\n\ +	strh r1, [r0]\n\ +	ldr r1, _08093678 @ =0x00001e08\n\ +	adds r0, r1, 0\n\ +	strh r0, [r5]\n\ +	ldr r1, _0809367C @ =0x00000801\n\ +	adds r0, r1, 0\n\ +	strh r0, [r2]\n\ +	ldr r1, _08093680 @ =0x00000902\n\ +	adds r0, r1, 0\n\ +	strh r0, [r3]\n\ +	ldr r1, _08093684 @ =0x00000a03\n\ +	adds r0, r1, 0\n\ +	strh r0, [r4]\n\ +	pop {r4,r5}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_08093664: .4byte 0x4000008 @ REG_BG0CNT\n\ +_08093668: .4byte 0x400000A @ REG_BG1CNT\n\ +_0809366C: .4byte 0x400000C @ REG_BG2CNT\n\ +_08093670: .4byte 0x400000E @ REG_BG3CNT\n\ +_08093674: .4byte 0x4000010 @ REG_BG0HOFS\n\ +_08093678: .4byte 0x00001e08\n\ +_0809367C: .4byte 0x00000801\n\ +_08093680: .4byte 0x00000902\n\ +_08093684: .4byte 0x00000a03\n\ +    .syntax divided\n"); +} + +#ifdef NONMATCHING +static void sub_8093688(void) { +    int i; + +    asm_comment("WIP"); +    sub_8093324(); + +    unk_2000000.var_0 = FALSE; +    unk_2000000.var_3 = FALSE; +    unk_2000000.var_4 = FALSE; + +    unk_2000000.var_2 = unk_2000000.var_64.stars; + +    unk_2000000.var_5 = FALSE; +    unk_2000000.var_6 = FALSE; + +    for (i = 0; i < 4; i++) { +        sub_80EB3FC(unk_2000000.var_20[i], unk_2000000.var_64.var_28[i]); +    } + +    sub_80936D4(); +} +#else + +__attribute__((naked)) +static void sub_8093688(void) { +    asm(".syntax unified\n\ +	push {r4-r6,lr}\n\ +	bl sub_8093324\n\ +	ldr r2, _080936D0 @ =0x02000000\n\ +	movs r1, 0\n\ +	strb r1, [r2]\n\ +	strb r1, [r2, 0x3]\n\ +	strb r1, [r2, 0x4]\n\ +	adds r0, r2, 0\n\ +	adds r0, 0x65\n\ +	ldrb r0, [r0]\n\ +	strb r0, [r2, 0x2]\n\ +	strb r1, [r2, 0x5]\n\ +	strb r1, [r2, 0x6]\n\ +	movs r4, 0\n\ +	adds r6, r2, 0\n\ +	adds r6, 0x20\n\ +	adds r5, r2, 0\n\ +	adds r5, 0x8C\n\ +_080936AE:\n\ +	lsls r0, r4, 4\n\ +	adds r0, r6\n\ +	lsls r1, r4, 1\n\ +	adds r1, r5, r1\n\ +	ldrh r1, [r1]\n\ +	bl sub_80EB3FC\n\ +	adds r0, r4, 0x1\n\ +	lsls r0, 24\n\ +	lsrs r4, r0, 24\n\ +	cmp r4, 0x3\n\ +	bls _080936AE\n\ +	bl sub_80936D4\n\ +	pop {r4-r6}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_080936D0: .4byte 0x02000000\n\ +    .syntax divided\n"); +} + +#endif + +static void sub_80936D4(void) { +    unk_2000000.var_7 = FALSE; +    unk_2000000.var_8 = FALSE; +    unk_2000000.var_9 = FALSE; +    unk_2000000.var_a = FALSE; +    unk_2000000.var_b = FALSE; +    unk_2000000.var_c = FALSE; +    unk_2000000.var_d = FALSE; + +    memset(unk_2000000.var_e, 0, sizeof(unk_2000000.var_e)); + +    if (unk_2000000.var_64.hasPokedex) { +        unk_2000000.var_7 += TRUE; +    } + +    if (unk_2000000.var_64.firstHallOfFameA != 0 || unk_2000000.var_64.firstHallOfFameB != 0 || +        unk_2000000.var_64.firstHallOfFameC != 0) { +        unk_2000000.var_8 += TRUE; +    } + +    if (unk_2000000.var_64.linkBattleWins != 0 || unk_2000000.var_64.linkBattleLosses != 0) { +        unk_2000000.var_9 += TRUE; +    } + +    if (unk_2000000.var_64.battleTowerWins != 0 || unk_2000000.var_64.battleTowerLosses != 0) { +        unk_2000000.var_a += TRUE; +    } + +    if (unk_2000000.var_64.contestsWithFriends != 0) { +        unk_2000000.var_b += TRUE; +    } + +    if (unk_2000000.var_64.pokeblocksWithFriends != 0) { +        unk_2000000.var_c += TRUE; +    } + +    if (unk_2000000.var_64.pokemonTrades != 0) { +        unk_2000000.var_d += TRUE; +    } + +    if (!unk_2000000.var_1) { +        u32 badgeFlag; +        int i; + +        i = 0; +        badgeFlag = BADGE01_GET; +        while (TRUE) { +            if (FlagGet(badgeFlag)) { +                unk_2000000.var_e[i] += TRUE; +            } + +            badgeFlag += 1; +            i += 1; +            if (badgeFlag > BADGE08_GET) { +                break; +            } +        } +    } +} + +void sub_80937A4() { +    ResetPaletteFade(); +    ResetSpriteData(); +    FreeAllSpritePalettes(); +    ResetTasks(); +} + +void sub_80937BC() { +    SetUpWindowConfig(&WindowConfig_TrainerCard_Back_Values); +    MultistepInitMenuWindowBegin(&WindowConfig_TrainerCard_Back_Values); +} + +static void sub_80937D8() { +    sub_8093E04(); +    sub_8093E28(); +    sub_8093F64(); +    sub_8093DAC(); +} + +static void sub_80937F0() { +    sub_8093EF8(); +} + +static void nullsub_15(void) { +} + +static void sub_8093800() { +    sub_809380C(); +} + +static void sub_809380C() { +    u8 taskId; + +    taskId = CreateTask(sub_809382C, 0); +    sub_809382C(taskId); +} + +__attribute__((naked)) +static void sub_809382C(u8 taskId) { +    asm(".syntax unified\n\ +	push {r4-r7,lr}\n\ +	lsls r0, 24\n\ +	lsrs r0, 24\n\ +	ldr r7, _08093858 @ =gUnknown_083B5EBC\n\ +	lsls r1, r0, 2\n\ +	adds r1, r0\n\ +	lsls r4, r1, 3\n\ +	ldr r6, _0809385C @ =0x02000000\n\ +	ldr r5, _08093860 @ =gTasks\n\ +_0809383E:\n\ +	ldrb r0, [r6]\n\ +	lsls r0, 2\n\ +	adds r0, r7\n\ +	ldr r1, [r0]\n\ +	adds r0, r4, r5\n\ +	bl _call_via_r1\n\ +	lsls r0, 24\n\ +	cmp r0, 0\n\ +	bne _0809383E\n\ +	pop {r4-r7}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_08093858: .4byte gUnknown_083B5EBC\n\ +_0809385C: .4byte 0x02000000\n\ +_08093860: .4byte gTasks\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +bool8 sub_8093864() { +    asm(".syntax unified\n\ +	push {r4,r5,lr}\n\ +	sub sp, 0x4\n\ +	ldr r4, _080938A0 @ =0x02000000\n\ +	ldr r2, _080938A4 @ =gSaveBlock2\n\ +	ldrb r1, [r2, 0x11]\n\ +	movs r0, 0x1\n\ +	ands r0, r1\n\ +	movs r5, 0\n\ +	strb r0, [r4, 0x5]\n\ +	ldrb r0, [r2, 0x12]\n\ +	strb r0, [r4, 0x6]\n\ +	bl sub_80939A4\n\ +	movs r0, 0x1\n\ +	negs r0, r0\n\ +	str r5, [sp]\n\ +	movs r1, 0\n\ +	movs r2, 0x10\n\ +	movs r3, 0\n\ +	bl BeginNormalPaletteFade\n\ +	ldrb r0, [r4]\n\ +	adds r0, 0x1\n\ +	strb r0, [r4]\n\ +	movs r0, 0\n\ +	add sp, 0x4\n\ +	pop {r4,r5}\n\ +	pop {r1}\n\ +	bx r1\n\ +	.align 2, 0\n\ +_080938A0: .4byte 0x02000000\n\ +_080938A4: .4byte gSaveBlock2\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +bool8 sub_80938A8() { +    asm(".syntax unified\n\ +	push {lr}\n\ +	ldr r0, _080938C4 @ =gPaletteFade\n\ +	ldrb r1, [r0, 0x7]\n\ +	movs r0, 0x80\n\ +	ands r0, r1\n\ +	cmp r0, 0\n\ +	bne _080938BE\n\ +	ldr r1, _080938C8 @ =0x02000000\n\ +	ldrb r0, [r1]\n\ +	adds r0, 0x1\n\ +	strb r0, [r1]\n\ +_080938BE:\n\ +	movs r0, 0\n\ +	pop {r1}\n\ +	bx r1\n\ +	.align 2, 0\n\ +_080938C4: .4byte gPaletteFade\n\ +_080938C8: .4byte 0x02000000\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +bool8 sub_80938CC() { +    asm(".syntax unified\n\ +	push {lr}\n\ +	ldr r0, _080938E4 @ =gMain\n\ +	ldrh r1, [r0, 0x2E]\n\ +	movs r0, 0x2\n\ +	ands r0, r1\n\ +	cmp r0, 0\n\ +	beq _080938EC\n\ +	ldr r1, _080938E8 @ =0x02000000\n\ +	movs r0, 0x5\n\ +	strb r0, [r1]\n\ +	movs r0, 0x1\n\ +	b _08093914\n\ +	.align 2, 0\n\ +_080938E4: .4byte gMain\n\ +_080938E8: .4byte 0x02000000\n\ +_080938EC:\n\ +	movs r0, 0x1\n\ +	ands r0, r1\n\ +	cmp r0, 0\n\ +	beq _08093912\n\ +	ldr r2, _08093900 @ =0x02000000\n\ +	ldrb r1, [r2, 0x3]\n\ +	cmp r1, 0\n\ +	beq _08093904\n\ +	movs r0, 0x5\n\ +	b _0809390C\n\ +	.align 2, 0\n\ +_08093900: .4byte 0x02000000\n\ +_08093904:\n\ +	movs r0, 0x1\n\ +	eors r0, r1\n\ +	strb r0, [r2, 0x3]\n\ +	movs r0, 0x3\n\ +_0809390C:\n\ +	strb r0, [r2]\n\ +	movs r0, 0x1\n\ +	b _08093914\n\ +_08093912:\n\ +	movs r0, 0\n\ +_08093914:\n\ +	pop {r1}\n\ +	bx r1\n\ +    .syntax divided\n"); +} + +bool8 sub_8093918() { +    sub_8093A28(); +    PlaySE(SE_CARD); + +    unk_2000000.var_0 += TRUE; + +    return FALSE; +} + +bool8 sub_8093938() { +    if (sub_8093A48()) { +        unk_2000000.var_0 = 2; +    } + +    return FALSE; +} + +__attribute__((naked)) +bool8 sub_8093954() { +    asm(".syntax unified\n\ +	push {lr}\n\ +	sub sp, 0x4\n\ +	bl sub_80939C0\n\ +	movs r0, 0x1\n\ +	negs r0, r0\n\ +	movs r1, 0\n\ +	str r1, [sp]\n\ +	movs r2, 0\n\ +	movs r3, 0x10\n\ +	bl BeginNormalPaletteFade\n\ +	ldr r1, _0809397C @ =0x02000000\n\ +	ldrb r0, [r1]\n\ +	adds r0, 0x1\n\ +	strb r0, [r1]\n\ +	movs r0, 0\n\ +	add sp, 0x4\n\ +	pop {r1}\n\ +	bx r1\n\ +	.align 2, 0\n\ +_0809397C: .4byte 0x02000000\n\ +    .syntax divided\n"); +} + +bool8 sub_8093980() { +    if (!gPaletteFade.active) { +        SetMainCallback2((MainCallback) unk_2000000.var_60); +    } + +    return FALSE; +} + +static void sub_80939A4(void) { +    CreateTask(sub_80939DC, 0); +    BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); +} + +static void sub_80939C0(void) { +    u8 taskId; + +    taskId = FindTaskIdByFunc(sub_80939DC); + +    if (taskId != 0xFF) { +        DestroyTask(taskId); +    } +} + +static void sub_80939DC(u8 taskId) { +    u8 buffer[32]; +    struct Task *task; +    task = &gTasks[taskId]; + +    if (unk_2000000.var_5 != task->data[TD_1]) { +        task->data[TD_1] = unk_2000000.var_5; +        task->data[TD_0] ^= TRUE; +    } + +    TrainerCard_Front_PrintPlayTime(buffer, task->data[TD_0]); +    MenuPrint(buffer, 10, 12); +} + +static void sub_8093A28(void) { +    u8 taskId; + +    taskId = CreateTask(sub_8093A68, 0); +    sub_8093A68(taskId); +} + +__attribute__((naked)) +static u8 sub_8093A48() { +    asm(".syntax unified\n\ +	push {lr}\n\ +	ldr r0, _08093A5C @ =sub_8093A68\n\ +	bl FindTaskIdByFunc\n\ +	lsls r0, 24\n\ +	lsrs r0, 24\n\ +	cmp r0, 0xFF\n\ +	beq _08093A60\n\ +	movs r0, 0\n\ +	b _08093A62\n\ +	.align 2, 0\n\ +_08093A5C: .4byte sub_8093A68\n\ +_08093A60:\n\ +	movs r0, 0x1\n\ +_08093A62:\n\ +	pop {r1}\n\ +	bx r1\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +static void sub_8093A68(u8 taskId) { +    asm(".syntax unified\n\ +	push {r4,r5,lr}\n\ +	lsls r0, 24\n\ +	lsrs r0, 24\n\ +	ldr r5, _08093A98 @ =gUnknown_083B5ED8\n\ +	ldr r2, _08093A9C @ =gTasks\n\ +	lsls r1, r0, 2\n\ +	adds r1, r0\n\ +	lsls r1, 3\n\ +	adds r4, r1, r2\n\ +_08093A7A:\n\ +	movs r1, 0x8\n\ +	ldrsh r0, [r4, r1]\n\ +	lsls r0, 2\n\ +	adds r0, r5\n\ +	ldr r1, [r0]\n\ +	adds r0, r4, 0\n\ +	bl _call_via_r1\n\ +	lsls r0, 24\n\ +	cmp r0, 0\n\ +	bne _08093A7A\n\ +	pop {r4,r5}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_08093A98: .4byte gUnknown_083B5ED8\n\ +_08093A9C: .4byte gTasks\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +bool8 sub_8093AA0() { +    asm(".syntax unified\n\ +	push {r4,lr}\n\ +	adds r4, r0, 0\n\ +	ldr r0, _08093AE0 @ =0x02000000\n\ +	movs r1, 0\n\ +	strb r1, [r0, 0x4]\n\ +	bl dp12_8087EA4\n\ +	movs r1, 0\n\ +	ldr r0, _08093AE4 @ =gUnknown_03004DE0\n\ +	ldr r2, _08093AE8 @ =0x0000fffc\n\ +	movs r3, 0xF0\n\ +	lsls r3, 3\n\ +	adds r0, r3\n\ +_08093ABA:\n\ +	strh r2, [r0]\n\ +	adds r0, 0x2\n\ +	adds r1, 0x1\n\ +	cmp r1, 0x9F\n\ +	bls _08093ABA\n\ +	ldr r0, _08093AEC @ =sub_8093D7C\n\ +	bl SetHBlankCallback\n\ +	ldr r1, _08093AE0 @ =0x02000000\n\ +	movs r0, 0x1\n\ +	strb r0, [r1, 0x4]\n\ +	ldrh r0, [r4, 0x8]\n\ +	adds r0, 0x1\n\ +	strh r0, [r4, 0x8]\n\ +	movs r0, 0\n\ +	pop {r4}\n\ +	pop {r1}\n\ +	bx r1\n\ +	.align 2, 0\n\ +_08093AE0: .4byte 0x02000000\n\ +_08093AE4: .4byte gUnknown_03004DE0\n\ +_08093AE8: .4byte 0x0000fffc\n\ +_08093AEC: .4byte sub_8093D7C\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +bool8 sub_8093AF0() { +    asm(".syntax unified\n\ +	push {r4-r7,lr}\n\ +	mov r7, r10\n\ +	mov r6, r9\n\ +	mov r5, r8\n\ +	push {r5-r7}\n\ +	sub sp, 0x4\n\ +	mov r8, r0\n\ +	ldr r1, _08093BFC @ =0x02000000\n\ +	movs r0, 0\n\ +	strb r0, [r1, 0x4]\n\ +	mov r2, r8\n\ +	ldrh r0, [r2, 0xA]\n\ +	adds r0, 0x3\n\ +	strh r0, [r2, 0xA]\n\ +	lsls r0, 16\n\ +	asrs r0, 16\n\ +	cmp r0, 0x4F\n\ +	ble _08093B18\n\ +	movs r0, 0x4F\n\ +	strh r0, [r2, 0xA]\n\ +_08093B18:\n\ +	mov r4, r8\n\ +	movs r0, 0xA\n\ +	ldrsh r7, [r4, r0]\n\ +	movs r0, 0xA0\n\ +	subs r0, r7\n\ +	mov r9, r0\n\ +	subs r4, r0, r7\n\ +	negs r0, r7\n\ +	lsls r6, r0, 16\n\ +	movs r0, 0xA0\n\ +	lsls r0, 16\n\ +	adds r1, r4, 0\n\ +	bl __udivsi3\n\ +	adds r5, r0, 0\n\ +	ldr r1, _08093C00 @ =0xffff0000\n\ +	adds r5, r1\n\ +	adds r0, r5, 0\n\ +	muls r0, r4\n\ +	adds r0, r6\n\ +	mov r10, r0\n\ +	adds r0, r5, 0\n\ +	adds r1, r4, 0\n\ +	bl __udivsi3\n\ +	str r0, [sp]\n\ +	lsls r5, 1\n\ +	movs r3, 0\n\ +	cmp r3, r7\n\ +	bcs _08093B74\n\ +	ldr r2, _08093C04 @ =gUnknown_03004DE0\n\ +	mov r12, r2\n\ +	ldr r0, _08093C08 @ =0x0000fffc\n\ +	adds r4, r0, 0\n\ +_08093B5C:\n\ +	lsls r0, r3, 16\n\ +	asrs r0, 16\n\ +	lsls r1, r0, 1\n\ +	add r1, r12\n\ +	subs r2, r4, r0\n\ +	strh r2, [r1]\n\ +	adds r0, 0x1\n\ +	lsls r0, 16\n\ +	lsrs r3, r0, 16\n\ +	asrs r0, 16\n\ +	cmp r0, r7\n\ +	bcc _08093B5C\n\ +_08093B74:\n\ +	lsls r2, r3, 16\n\ +	mov r1, r9\n\ +	lsls r0, r1, 16\n\ +	asrs r1, r0, 16\n\ +	mov r4, r10\n\ +	lsrs r7, r4, 16\n\ +	cmp r2, r0\n\ +	bge _08093BAE\n\ +	ldr r0, _08093C04 @ =gUnknown_03004DE0\n\ +	mov r9, r0\n\ +	ldr r4, _08093C08 @ =0x0000fffc\n\ +	mov r12, r4\n\ +	adds r4, r1, 0\n\ +_08093B8E:\n\ +	lsrs r1, r6, 16\n\ +	adds r6, r5\n\ +	ldr r0, [sp]\n\ +	subs r5, r0\n\ +	asrs r2, 16\n\ +	lsls r0, r2, 1\n\ +	add r0, r9\n\ +	add r1, r12\n\ +	strh r1, [r0]\n\ +	adds r2, 0x1\n\ +	lsls r2, 16\n\ +	lsrs r3, r2, 16\n\ +	lsls r2, r3, 16\n\ +	asrs r0, r2, 16\n\ +	cmp r0, r4\n\ +	blt _08093B8E\n\ +_08093BAE:\n\ +	adds r1, r7, 0\n\ +	lsls r0, r3, 16\n\ +	asrs r0, 16\n\ +	cmp r0, 0x9F\n\ +	bgt _08093BD4\n\ +	ldr r4, _08093C04 @ =gUnknown_03004DE0\n\ +	ldr r0, _08093C08 @ =0x0000fffc\n\ +	adds r2, r1, r0\n\ +_08093BBE:\n\ +	lsls r1, r3, 16\n\ +	asrs r1, 16\n\ +	lsls r0, r1, 1\n\ +	adds r0, r4\n\ +	strh r2, [r0]\n\ +	adds r1, 0x1\n\ +	lsls r1, 16\n\ +	lsrs r3, r1, 16\n\ +	asrs r1, 16\n\ +	cmp r1, 0x9F\n\ +	ble _08093BBE\n\ +_08093BD4:\n\ +	movs r0, 0x1\n\ +	ldr r1, _08093BFC @ =0x02000000\n\ +	strb r0, [r1, 0x4]\n\ +	mov r2, r8\n\ +	movs r4, 0xA\n\ +	ldrsh r0, [r2, r4]\n\ +	cmp r0, 0x4A\n\ +	ble _08093BEA\n\ +	ldrh r0, [r2, 0x8]\n\ +	adds r0, 0x1\n\ +	strh r0, [r2, 0x8]\n\ +_08093BEA:\n\ +	movs r0, 0\n\ +	add sp, 0x4\n\ +	pop {r3-r5}\n\ +	mov r8, r3\n\ +	mov r9, r4\n\ +	mov r10, r5\n\ +	pop {r4-r7}\n\ +	pop {r1}\n\ +	bx r1\n\ +	.align 2, 0\n\ +_08093BFC: .4byte 0x02000000\n\ +_08093C00: .4byte 0xffff0000\n\ +_08093C04: .4byte gUnknown_03004DE0\n\ +_08093C08: .4byte 0x0000fffc\n\ +    .syntax divided\n"); +} + +bool8 sub_8093C0C(struct TrainerCard *trainerCard) { +    sub_80939C0(); +    sub_8093DAC(); + +    if (!unk_2000000.var_3) { +        sub_80939A4(); +    } + +    trainerCard->firstHallOfFameB += 1; + +    return TRUE; +} + +__attribute__((naked)) +bool8 sub_8093C38() { +    asm(".syntax unified\n\ +	push {r4-r7,lr}\n\ +	mov r7, r10\n\ +	mov r6, r9\n\ +	mov r5, r8\n\ +	push {r5-r7}\n\ +	sub sp, 0x4\n\ +	mov r8, r0\n\ +	ldr r1, _08093D40 @ =0x02000000\n\ +	movs r2, 0\n\ +	strb r2, [r1, 0x4]\n\ +	ldrh r0, [r0, 0xA]\n\ +	subs r0, 0x3\n\ +	mov r3, r8\n\ +	strh r0, [r3, 0xA]\n\ +	lsls r0, 16\n\ +	cmp r0, 0\n\ +	bgt _08093C5C\n\ +	strh r2, [r3, 0xA]\n\ +_08093C5C:\n\ +	mov r4, r8\n\ +	movs r0, 0xA\n\ +	ldrsh r7, [r4, r0]\n\ +	movs r0, 0xA0\n\ +	subs r0, r7\n\ +	mov r9, r0\n\ +	subs r4, r0, r7\n\ +	negs r0, r7\n\ +	lsls r6, r0, 16\n\ +	movs r0, 0xA0\n\ +	lsls r0, 16\n\ +	adds r1, r4, 0\n\ +	bl __udivsi3\n\ +	adds r5, r0, 0\n\ +	ldr r1, _08093D44 @ =0xffff0000\n\ +	adds r5, r1\n\ +	adds r0, r5, 0\n\ +	muls r0, r4\n\ +	adds r0, r6\n\ +	mov r10, r0\n\ +	adds r0, r5, 0\n\ +	adds r1, r4, 0\n\ +	bl __udivsi3\n\ +	str r0, [sp]\n\ +	lsrs r5, 1\n\ +	movs r3, 0\n\ +	cmp r3, r7\n\ +	bcs _08093CB8\n\ +	ldr r2, _08093D48 @ =gUnknown_03004DE0\n\ +	mov r12, r2\n\ +	ldr r0, _08093D4C @ =0x0000fffc\n\ +	adds r4, r0, 0\n\ +_08093CA0:\n\ +	lsls r0, r3, 16\n\ +	asrs r0, 16\n\ +	lsls r1, r0, 1\n\ +	add r1, r12\n\ +	subs r2, r4, r0\n\ +	strh r2, [r1]\n\ +	adds r0, 0x1\n\ +	lsls r0, 16\n\ +	lsrs r3, r0, 16\n\ +	asrs r0, 16\n\ +	cmp r0, r7\n\ +	bcc _08093CA0\n\ +_08093CB8:\n\ +	lsls r2, r3, 16\n\ +	mov r1, r9\n\ +	lsls r0, r1, 16\n\ +	asrs r1, r0, 16\n\ +	mov r4, r10\n\ +	lsrs r7, r4, 16\n\ +	cmp r2, r0\n\ +	bge _08093CF2\n\ +	ldr r0, _08093D48 @ =gUnknown_03004DE0\n\ +	mov r9, r0\n\ +	ldr r3, _08093D4C @ =0x0000fffc\n\ +	mov r12, r3\n\ +	adds r4, r1, 0\n\ +_08093CD2:\n\ +	lsrs r1, r6, 16\n\ +	adds r6, r5\n\ +	ldr r0, [sp]\n\ +	adds r5, r0\n\ +	asrs r2, 16\n\ +	lsls r0, r2, 1\n\ +	add r0, r9\n\ +	add r1, r12\n\ +	strh r1, [r0]\n\ +	adds r2, 0x1\n\ +	lsls r2, 16\n\ +	lsrs r3, r2, 16\n\ +	lsls r2, r3, 16\n\ +	asrs r0, r2, 16\n\ +	cmp r0, r4\n\ +	blt _08093CD2\n\ +_08093CF2:\n\ +	adds r1, r7, 0\n\ +	lsls r0, r3, 16\n\ +	asrs r0, 16\n\ +	cmp r0, 0x9F\n\ +	bgt _08093D18\n\ +	ldr r4, _08093D48 @ =gUnknown_03004DE0\n\ +	ldr r0, _08093D4C @ =0x0000fffc\n\ +	adds r2, r1, r0\n\ +_08093D02:\n\ +	lsls r1, r3, 16\n\ +	asrs r1, 16\n\ +	lsls r0, r1, 1\n\ +	adds r0, r4\n\ +	strh r2, [r0]\n\ +	adds r1, 0x1\n\ +	lsls r1, 16\n\ +	lsrs r3, r1, 16\n\ +	asrs r1, 16\n\ +	cmp r1, 0x9F\n\ +	ble _08093D02\n\ +_08093D18:\n\ +	movs r0, 0x1\n\ +	ldr r1, _08093D40 @ =0x02000000\n\ +	strb r0, [r1, 0x4]\n\ +	mov r2, r8\n\ +	movs r3, 0xA\n\ +	ldrsh r0, [r2, r3]\n\ +	cmp r0, 0\n\ +	bgt _08093D2E\n\ +	ldrh r0, [r2, 0x8]\n\ +	adds r0, 0x1\n\ +	strh r0, [r2, 0x8]\n\ +_08093D2E:\n\ +	movs r0, 0\n\ +	add sp, 0x4\n\ +	pop {r3-r5}\n\ +	mov r8, r3\n\ +	mov r9, r4\n\ +	mov r10, r5\n\ +	pop {r4-r7}\n\ +	pop {r1}\n\ +	bx r1\n\ +	.align 2, 0\n\ +_08093D40: .4byte 0x02000000\n\ +_08093D44: .4byte 0xffff0000\n\ +_08093D48: .4byte gUnknown_03004DE0\n\ +_08093D4C: .4byte 0x0000fffc\n\ +    .syntax divided\n"); +} + +bool8 sub_8093D50(void) { +    u8 taskId; + +    unk_2000000.var_4 = FALSE; +    SetHBlankCallback(NULL); +    sub_8093E04(); + +    taskId = FindTaskIdByFunc(sub_8093A68); +    DestroyTask(taskId); + +    return FALSE; +} + +__attribute__((naked)) +static void sub_8093D7C(void) { +    asm(".syntax unified\n\ +	ldr r1, _08093DA0 @ =gUnknown_03004DE0\n\ +	ldr r0, _08093DA4 @ =REG_VCOUNT\n\ +	ldrh r2, [r0]\n\ +	movs r0, 0xFF\n\ +	ands r0, r2\n\ +	lsls r0, 1\n\ +	movs r2, 0xF0\n\ +	lsls r2, 3\n\ +	adds r1, r2\n\ +	adds r0, r1\n\ +	ldrh r1, [r0]\n\ +	ldr r0, _08093DA8 @ =REG_BG0VOFS\n\ +	strh r1, [r0]\n\ +	adds r0, 0x4\n\ +	strh r1, [r0]\n\ +	adds r0, 0x4\n\ +	strh r1, [r0]\n\ +	bx lr\n\ +	.align 2, 0\n\ +_08093DA0: .4byte gUnknown_03004DE0\n\ +_08093DA4: .4byte 0x4000006 @ REG_VCOUNT\n\ +_08093DA8: .4byte 0x4000012 @ REG_BG0VOFS\n\ +    .syntax divided\n"); +} + +static void sub_8093DAC(void) { +    if (unk_2000000.var_3) { +        sub_8093DEC(); +    } else { +        sub_8093DC8(); +    } +} + +static void sub_8093DC8(void) { +    MenuZeroFillScreen(); +    sub_80940E4(); +    sub_8093F14(); +    sub_8093F80(); +    sub_8093FD0(); +    sub_8094038(); +    sub_8094140(); +} + +static void sub_8093DEC(void) { +    MenuZeroFillScreen(); +    sub_80940E4(); +    sub_8093F48(); +    sub_8094188(); +} + +__attribute__((naked)) +static void sub_8093E04() { +    asm(".syntax unified\n\ +	ldr r0, _08093E20 @ =REG_BG0VOFS\n\ +	ldr r2, _08093E24 @ =0x0000fffc\n\ +	adds r1, r2, 0\n\ +	strh r1, [r0]\n\ +	adds r0, 0x2\n\ +	movs r2, 0\n\ +	strh r2, [r0]\n\ +	adds r0, 0x2\n\ +	strh r1, [r0]\n\ +	adds r0, 0x2\n\ +	strh r2, [r0]\n\ +	adds r0, 0x2\n\ +	strh r1, [r0]\n\ +	bx lr\n\ +	.align 2, 0\n\ +_08093E20: .4byte 0x4000012 @ REG_BG0VOFS\n\ +_08093E24: .4byte 0x0000fffc\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +static void sub_8093E28(void) { +    asm(".syntax unified\n\ +	push {r4-r7,lr}\n\ +	bl sub_8093EA0\n\ +	ldr r0, _08093E84 @ =gUnknown_083B5F6C\n\ +	movs r1, 0xE0\n\ +	movs r2, 0x20\n\ +	bl LoadPalette\n\ +	ldr r3, _08093E88 @ =gMenuTrainerCard_Gfx\n\ +	movs r4, 0xC0\n\ +	lsls r4, 19\n\ +	movs r5, 0xA4\n\ +	lsls r5, 5\n\ +	ldr r1, _08093E8C @ =0x040000d4\n\ +	ldr r6, _08093E90 @ =0x80000800\n\ +	movs r2, 0x80\n\ +	lsls r2, 5\n\ +	movs r7, 0x80\n\ +	lsls r7, 24\n\ +_08093E4E:\n\ +	str r3, [r1]\n\ +	str r4, [r1, 0x4]\n\ +	str r6, [r1, 0x8]\n\ +	ldr r0, [r1, 0x8]\n\ +	adds r3, r2\n\ +	adds r4, r2\n\ +	subs r5, r2\n\ +	cmp r5, r2\n\ +	bhi _08093E4E\n\ +	str r3, [r1]\n\ +	str r4, [r1, 0x4]\n\ +	lsrs r0, r5, 1\n\ +	orrs r0, r7\n\ +	str r0, [r1, 0x8]\n\ +	ldr r0, [r1, 0x8]\n\ +	ldr r1, _08093E94 @ =gBadgesTiles\n\ +	ldr r2, _08093E98 @ =0x06001480\n\ +	ldr r0, _08093E8C @ =0x040000d4\n\ +	str r1, [r0]\n\ +	str r2, [r0, 0x4]\n\ +	ldr r1, _08093E9C @ =0x80000200\n\ +	str r1, [r0, 0x8]\n\ +	ldr r0, [r0, 0x8]\n\ +	pop {r4-r7}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_08093E84: .4byte gUnknown_083B5F6C\n\ +_08093E88: .4byte gMenuTrainerCard_Gfx\n\ +_08093E8C: .4byte 0x040000d4\n\ +_08093E90: .4byte 0x80000800\n\ +_08093E94: .4byte gBadgesTiles\n\ +_08093E98: .4byte 0x06001480\n\ +_08093E9C: .4byte 0x80000200\n\ +    .syntax divided\n"); +} + +static void sub_8093EA0(void) { +    LoadPalette(gUnknown_083B5EF8[unk_2000000.var_2], 0, 48 * 2); +    LoadPalette(gBadgesPalette, 48, 16 * 2); +    LoadPalette(gUnknown_083B5F4C, 64, 16 * 2); + +    if (unk_2000000.var_64.gender != MALE) { +        LoadPalette(gUnknown_083B5F0C, 16, 16 * 2); +    } +} + +static void sub_8093EF8(void) { +    LoadTrainerGfx_TrainerCard(unk_2000000.var_64.gender, 80, (void *) (VRAM + 0x1880)); +} + +__attribute__((naked)) +static void sub_8093F14(void) { +    asm(".syntax unified\n\ +	push {lr}\n\ +	sub sp, 0x8\n\ +	ldr r0, _08093F3C @ =gUnknown_083B5EEC\n\ +	ldr r1, [r0, 0x4]\n\ +	ldr r0, [r0]\n\ +	str r0, [sp]\n\ +	str r1, [sp, 0x4]\n\ +	ldr r0, _08093F40 @ =0x02000000\n\ +	ldrb r0, [r0, 0x1]\n\ +	lsls r0, 2\n\ +	add r0, sp\n\ +	ldr r0, [r0]\n\ +	ldr r1, _08093F44 @ =0x06004800\n\ +	movs r2, 0xA0\n\ +	lsls r2, 1\n\ +	bl CpuFastSet\n\ +	add sp, 0x8\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_08093F3C: .4byte gUnknown_083B5EEC\n\ +_08093F40: .4byte 0x02000000\n\ +_08093F44: .4byte 0x06004800\n\ +    .syntax divided\n"); +} + +static void sub_8093F48(void) { +    CpuFastSet(gUnknown_08E8CFC0, (void *) (VRAM + 0x4800), 320); +} + +static void sub_8093F64(void) { +    CpuFastSet(gUnknown_08E8D9C0, (void *) (VRAM + 0x5000), 320); +} + +__attribute__((naked)) +static void sub_8093F80(void) { +    asm(".syntax unified\n\ +	push {r4-r7,lr}\n\ +	movs r5, 0xC4\n\ +	ldr r7, _08093FCC @ =0x06004000\n\ +	movs r1, 0x5\n\ +	movs r0, 0xA0\n\ +	lsls r0, 7\n\ +	adds r6, r0, 0\n\ +_08093F8E:\n\ +	movs r0, 0x13\n\ +	lsls r3, r1, 16\n\ +	asrs r4, r3, 11\n\ +_08093F94:\n\ +	lsls r2, r0, 16\n\ +	asrs r2, 16\n\ +	adds r1, r4, r2\n\ +	lsls r1, 1\n\ +	adds r1, r7\n\ +	adds r0, r5, 0\n\ +	orrs r0, r6\n\ +	strh r0, [r1]\n\ +	adds r2, 0x1\n\ +	lsls r2, 16\n\ +	adds r0, r5, 0x1\n\ +	lsls r0, 16\n\ +	lsrs r5, r0, 16\n\ +	lsrs r0, r2, 16\n\ +	asrs r2, 16\n\ +	cmp r2, 0x1A\n\ +	ble _08093F94\n\ +	movs r1, 0x80\n\ +	lsls r1, 9\n\ +	adds r0, r3, r1\n\ +	lsrs r1, r0, 16\n\ +	asrs r0, 16\n\ +	cmp r0, 0xC\n\ +	ble _08093F8E\n\ +	pop {r4-r7}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_08093FCC: .4byte 0x06004000\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +static void sub_8093FD0(void) { +    asm(".syntax unified\n\ +	push {r4-r6,lr}\n\ +	ldr r4, _0809402C @ =0x06004000\n\ +	movs r2, 0xF\n\ +	ldr r0, _08094030 @ =0x02000000\n\ +	ldrb r0, [r0, 0x2]\n\ +	adds r0, 0xF\n\ +	cmp r2, r0\n\ +	bge _08094002\n\ +	movs r6, 0xC0\n\ +	lsls r6, 1\n\ +	ldr r1, _08094034 @ =0x0000408f\n\ +	adds r5, r1, 0\n\ +	adds r3, r0, 0\n\ +_08093FEA:\n\ +	lsls r1, r2, 16\n\ +	asrs r1, 16\n\ +	lsls r0, r1, 1\n\ +	adds r0, r4\n\ +	adds r0, r6\n\ +	strh r5, [r0]\n\ +	adds r1, 0x1\n\ +	lsls r1, 16\n\ +	lsrs r2, r1, 16\n\ +	asrs r1, 16\n\ +	cmp r1, r3\n\ +	blt _08093FEA\n\ +_08094002:\n\ +	lsls r1, r2, 16\n\ +	asrs r0, r1, 16\n\ +	cmp r0, 0x12\n\ +	bgt _08094024\n\ +	movs r3, 0xC0\n\ +	lsls r3, 1\n\ +	movs r2, 0\n\ +_08094010:\n\ +	asrs r0, r1, 16\n\ +	lsls r1, r0, 1\n\ +	adds r1, r4\n\ +	adds r1, r3\n\ +	strh r2, [r1]\n\ +	adds r0, 0x1\n\ +	lsls r1, r0, 16\n\ +	asrs r0, r1, 16\n\ +	cmp r0, 0x12\n\ +	ble _08094010\n\ +_08094024:\n\ +	pop {r4-r6}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_0809402C: .4byte 0x06004000\n\ +_08094030: .4byte 0x02000000\n\ +_08094034: .4byte 0x0000408f\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +static void sub_8094038(void) { +    asm(".syntax unified\n\ +	push {r4-r7,lr}\n\ +	mov r7, r9\n\ +	mov r6, r8\n\ +	push {r6,r7}\n\ +	ldr r1, _080940D0 @ =0x02000000\n\ +	ldrb r0, [r1, 0x1]\n\ +	cmp r0, 0\n\ +	bne _080940C2\n\ +	ldr r0, _080940D4 @ =0x06004000\n\ +	mov r9, r0\n\ +	movs r0, 0\n\ +	movs r2, 0x4\n\ +	adds r1, 0xE\n\ +	mov r8, r1\n\ +	ldr r7, _080940D8 @ =gUnknown_083B5F8C\n\ +	movs r1, 0xC0\n\ +	lsls r1, 6\n\ +	adds r6, r1, 0\n\ +	adds r1, r7, 0x6\n\ +	mov r12, r1\n\ +_08094060:\n\ +	lsls r0, 16\n\ +	asrs r4, r0, 16\n\ +	mov r1, r8\n\ +	adds r0, r4, r1\n\ +	ldrb r0, [r0]\n\ +	lsls r5, r2, 16\n\ +	cmp r0, 0\n\ +	beq _080940AE\n\ +	asrs r1, r5, 15\n\ +	add r1, r9\n\ +	movs r2, 0xF0\n\ +	lsls r2, 2\n\ +	adds r3, r1, r2\n\ +	lsls r2, r4, 3\n\ +	adds r0, r2, r7\n\ +	ldrh r0, [r0]\n\ +	orrs r0, r6\n\ +	strh r0, [r3]\n\ +	ldr r0, _080940DC @ =0x000003c2\n\ +	adds r3, r1, r0\n\ +	adds r0, r7, 0x2\n\ +	adds r0, r2, r0\n\ +	ldrh r0, [r0]\n\ +	orrs r0, r6\n\ +	strh r0, [r3]\n\ +	movs r0, 0x80\n\ +	lsls r0, 3\n\ +	adds r3, r1, r0\n\ +	adds r0, r7, 0x4\n\ +	adds r0, r2, r0\n\ +	ldrh r0, [r0]\n\ +	orrs r0, r6\n\ +	strh r0, [r3]\n\ +	ldr r0, _080940E0 @ =0x00000402\n\ +	adds r1, r0\n\ +	add r2, r12\n\ +	ldrh r0, [r2]\n\ +	orrs r0, r6\n\ +	strh r0, [r1]\n\ +_080940AE:\n\ +	adds r1, r4, 0x1\n\ +	lsls r1, 16\n\ +	movs r2, 0xC0\n\ +	lsls r2, 10\n\ +	adds r0, r5, r2\n\ +	lsrs r2, r0, 16\n\ +	lsrs r0, r1, 16\n\ +	asrs r1, 16\n\ +	cmp r1, 0x7\n\ +	ble _08094060\n\ +_080940C2:\n\ +	pop {r3,r4}\n\ +	mov r8, r3\n\ +	mov r9, r4\n\ +	pop {r4-r7}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_080940D0: .4byte 0x02000000\n\ +_080940D4: .4byte 0x06004000\n\ +_080940D8: .4byte gUnknown_083B5F8C\n\ +_080940DC: .4byte 0x000003c2\n\ +_080940E0: .4byte 0x00000402\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +static void sub_80940E4() { +    asm(".syntax unified\n\ +	push {r4,lr}\n\ +	movs r2, 0\n\ +	ldr r1, _08094108 @ =0x06004000\n\ +	movs r4, 0\n\ +	ldr r3, _0809410C @ =0x000003ff\n\ +_080940EE:\n\ +	strh r4, [r1]\n\ +	lsls r0, r2, 16\n\ +	movs r2, 0x80\n\ +	lsls r2, 9\n\ +	adds r0, r2\n\ +	adds r1, 0x2\n\ +	lsrs r2, r0, 16\n\ +	asrs r0, 16\n\ +	cmp r0, r3\n\ +	ble _080940EE\n\ +	pop {r4}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_08094108: .4byte 0x06004000\n\ +_0809410C: .4byte 0x000003ff\n\ +    .syntax divided\n"); +} + +__attribute__((naked)) +static void sub_8094110() { +    asm(".syntax unified\n\ +	push {r4-r6,lr}\n\ +	ldr r6, _0809413C @ =0x06004800\n\ +	movs r2, 0x3\n\ +	movs r5, 0xA0\n\ +	lsls r5, 2\n\ +	movs r3, 0x1\n\ +	movs r4, 0xB0\n\ +	lsls r4, 2\n\ +_08094120:\n\ +	lsls r0, r2, 1\n\ +	adds r0, r6\n\ +	adds r1, r0, r5\n\ +	strh r3, [r1]\n\ +	adds r0, r4\n\ +	strh r3, [r0]\n\ +	adds r0, r2, 0x1\n\ +	lsls r0, 16\n\ +	lsrs r2, r0, 16\n\ +	cmp r2, 0x10\n\ +	bls _08094120\n\ +	pop {r4-r6}\n\ +	pop {r0}\n\ +	bx r0\n\ +	.align 2, 0\n\ +_0809413C: .4byte 0x06004800\n\ +    .syntax divided\n"); +} + + +static void sub_8094140(void) { +    u8 *buffer; + +    BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); + +    buffer = gStringVar1; +    StringCopy(buffer, unk_2000000.var_64.playerName); +    ConvertInternationalString(buffer, unk_2000000.language); +    MenuPrint(buffer, 7, 5); + +    TrainerCard_Front_PrintTrainerID(); +    TrainerCard_Front_PrintMoney(); +    TrainerCard_Front_PrintPokedexCount(); +    sub_809429C(); +} + +static void sub_8094188(void) { +    BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); +    TrainerCard_Back_PrintName(); +    TrainerCard_Back_PrintHallOfFameTime_Label(); +    TrainerCard_Back_PrintLinkBattlesLabel(); +    TrainerCard_Back_PrintBattleTower_Label(); +    TrainerCard_Back_PrintLinkContests_Label(); +    TrainerCard_Back_PrintLinkPokeblocks_Label(); +    TrainerCard_Back_PrintPokemonTrades_Label(); + +    BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Labels); +    TrainerCard_Back_PrintHallOfFameTime(); +    TrainerCard_Back_PrintLinkBattles(); +    TrainerCard_Back_PrintBattleTower(); +    TrainerCard_Back_PrintLinkContests(); +    TrainerCard_Back_PrintLinkPokeblocks(); +    TrainerCard_Back_PrintPokemonTrades(); +} + +static void TrainerCard_Front_PrintTrainerID(void) { +    u8 buffer[8]; + +    ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); +    MenuPrint(buffer, 20, 2); +} + +static void TrainerCard_Front_PrintMoney(void) { +    sub_80B7AEC(unk_2000000.var_64.money, 16, 8); +} + +static void TrainerCard_Front_PrintPokedexCount(void) { +    u8 buffer[16]; + +    if (unk_2000000.var_7 == FALSE) { +        sub_8094110(); +        return; +    } + +    ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3); +    MenuPrint_RightAligned(buffer, 16, 10); +} + +static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon) { +    u8 buffer[16]; +    u16 playTimeHours; +    u16 playTimeMinutes; + +    playTimeHours = gSaveBlock2.playTimeHours; +    playTimeMinutes = gSaveBlock2.playTimeMinutes; + +    if (unk_2000000.var_1 != 0) { +        playTimeHours = unk_2000000.var_64.playTimeHours; +        playTimeMinutes = unk_2000000.var_64.playTimeMinutes; +    } + +    FormatPlayTime(buffer, playTimeHours, playTimeMinutes, colon); +    sub_8072C74(arg1, buffer, 48, 1); +} + +static void sub_809429C(void) { +    u8 *bufferPtr; + +    if (unk_2000000.var_1 == FALSE) { +        return; +    } + +    bufferPtr = gStringVar1; +    bufferPtr = StringCopy(bufferPtr, unk_2000000.var_20[0]); +    bufferPtr[0] = 00; +    bufferPtr++; +    bufferPtr = StringCopy(bufferPtr, unk_2000000.var_20[1]); +    MenuPrint(gStringVar1, 2, 14); + +    bufferPtr = gStringVar1; +    bufferPtr = StringCopy(bufferPtr, unk_2000000.var_20[2]); +    bufferPtr[0] = 00; +    bufferPtr++; +    bufferPtr = StringCopy(bufferPtr, unk_2000000.var_20[3]); +    MenuPrint(gStringVar1, 2, 16); +} + +static void TrainerCard_Back_PrintName(void) { +    u8 *bufferPtr; + +    bufferPtr = gStringVar1; +    StringCopy(bufferPtr, unk_2000000.var_64.playerName); +    ConvertInternationalString(bufferPtr, unk_2000000.language); + +    StringAppend(bufferPtr, gOtherText_TrainersTrainerCard); + +    MenuPrint_RightAligned(gStringVar1, 28, 2); +} + +static void TrainerCard_Back_PrintHallOfFameTime_Label(void) { +    if (unk_2000000.var_8 == FALSE) { +        return; +    } + +    MenuPrint(gOtherText_FirstHOF, 3, 5); +} + +static void TrainerCard_Back_PrintHallOfFameTime(void) { +    u8 *bufferPtr; + +    if (unk_2000000.var_8 == FALSE) { +        return; +    } + +    bufferPtr = gStringVar1; +    bufferPtr = ConvertIntToDecimalStringN(bufferPtr, unk_2000000.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, +                                           3); +    bufferPtr = StringCopy(bufferPtr, gUnknown_083B5EF4); +    bufferPtr = ConvertIntToDecimalStringN(bufferPtr, unk_2000000.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, +                                           2); +    bufferPtr = StringCopy(bufferPtr, gUnknown_083B5EF4); +    bufferPtr = ConvertIntToDecimalStringN(bufferPtr, unk_2000000.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, +                                           2); + +    MenuPrint_RightAligned(gStringVar1, 28, 5); +} + +static void TrainerCard_Back_PrintLinkBattlesLabel(void) { +    if (unk_2000000.var_9 == FALSE) { +        return; +    } + +    MenuPrint(gOtherText_LinkCableBattles, 3, 7); +} + +static void TrainerCard_Back_PrintLinkBattles(void) { +    u8 buffer[16]; + +    if (unk_2000000.var_9 == FALSE) { +        return; +    } + +    ConvertIntToDecimalString(buffer, unk_2000000.var_64.linkBattleWins); +    MenuPrint_RightAligned(buffer, 22, 7); + +    ConvertIntToDecimalString(buffer, unk_2000000.var_64.linkBattleLosses); +    MenuPrint_RightAligned(buffer, 28, 7); +} + +static void TrainerCard_Back_PrintBattleTower_Label(void) { +    if (unk_2000000.var_a == FALSE) { +        return; +    } + +    MenuPrint(gOtherText_BattleTowerWinRecord, 3, 15); +} + +static void TrainerCard_Back_PrintBattleTower(void) { +    u8 buffer[16]; + +    if (unk_2000000.var_a == FALSE) { +        return; +    } + +    sub_8072C44(buffer, unk_2000000.var_64.battleTowerWins, 24, 1); +    MenuPrint_PixelCoords(buffer, 112, 120, 0); + +    sub_8072C44(buffer, unk_2000000.var_64.battleTowerLosses, 24, 1); +    MenuPrint_PixelCoords(buffer, 149, 120, 0); +} + +static void TrainerCard_Back_PrintLinkContests_Label(void) { +    if (unk_2000000.var_b == FALSE) { +        return; +    } + +    MenuPrint(gOtherText_ContestRecord, 3, 13); +} + +static void TrainerCard_Back_PrintLinkContests(void) { +    u8 buffer[8]; + +    if (unk_2000000.var_b == FALSE) { +        return; +    } + +    ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3); +    MenuPrint_RightAligned(buffer, 28, 13); +} + +static void TrainerCard_Back_PrintLinkPokeblocks_Label(void) { +    if (unk_2000000.var_c == FALSE) { +        return; +    } + +    MenuPrint(gOtherText_MixingRecord, 3, 11); +} + +static void TrainerCard_Back_PrintLinkPokeblocks(void) { +    u8 buffer[8]; + +    if (unk_2000000.var_c == FALSE) { +        return; +    } + +    ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5); +    MenuPrint_RightAligned(buffer, 28, 11); +} + +static void TrainerCard_Back_PrintPokemonTrades_Label(void) { +    if (unk_2000000.var_d == FALSE) { +        return; +    } + +    MenuPrint(gOtherText_TradeRecord, 3, 9); +} + +static void TrainerCard_Back_PrintPokemonTrades(void) { +    u8 buffer[8]; + +    if (unk_2000000.var_d == FALSE) { +        return; +    } + +    ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); +    MenuPrint_RightAligned(buffer, 28, 9); +} + +static void unref_sub_8094588(u16 left, u16 top) { +    u8 *text = gOtherText_Boy; + +    if (gSaveBlock2.playerGender == FEMALE) { +        text = gOtherText_Girl; +    } + +    MenuPrint(text, (u8) left, (u8) top); +} | 
