summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <cameronghall@cox.net>2019-08-04 22:40:08 -0500
committerCameron Hall <cameronghall@cox.net>2019-08-04 22:40:08 -0500
commita6e0483749782133d78058c25300f2036cc3a1cc (patch)
treeccff0e5219b55124de4e5809158281b814297d17
parentd824a2b4266e6cfa885ef08b23c43e38dbbafcd7 (diff)
finish decompiling titlescreen.s
-rwxr-xr-xasm/titlescreen.s681
-rw-r--r--include/functions.h6
-rwxr-xr-xinclude/main.h1
-rwxr-xr-xinclude/titlescreen.h12
-rw-r--r--include/types.h6
-rw-r--r--include/variables.h4
-rwxr-xr-xld_script.txt1
-rwxr-xr-xsrc/titlescreen.c235
8 files changed, 219 insertions, 727 deletions
diff --git a/asm/titlescreen.s b/asm/titlescreen.s
deleted file mode 100755
index 0d127f7..0000000
--- a/asm/titlescreen.s
+++ /dev/null
@@ -1,681 +0,0 @@
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_11640
-sub_11640: @ 0x08011640
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- ldr r4, _08011744 @ =gTitlescreen
- movs r0, #8
- ldrsb r0, [r4, r0]
- movs r1, #0xb8
- muls r0, r1, r0
- ldr r2, _08011748 @ =gUnknown_0200B3B8
- adds r7, r0, r2
- movs r0, #0x10
- ldrsb r0, [r4, r0]
- muls r0, r1, r0
- adds r6, r0, r2
- movs r0, #9
- ldrsb r0, [r4, r0]
- strh r0, [r7]
- movs r0, #0x11
- ldrsb r0, [r4, r0]
- strh r0, [r6]
- ldr r5, _0801174C @ =gUnknown_086A96E4
- adds r0, r5, #0
- movs r1, #5
- bl LoadSpriteSets
- ldrh r0, [r7]
- cmp r0, #1
- bne _080116DC
- movs r0, #0x78
- strh r0, [r7, #2]
- movs r0, #0x66
- strh r0, [r7, #4]
- movs r0, #8
- ldrsb r0, [r4, r0]
- lsls r0, r0, #2
- adds r0, r0, r5
- ldr r0, [r0]
- mov ip, r0
- movs r5, #0
- ldrh r0, [r0]
- cmp r5, r0
- bge _080116DC
- ldr r1, _08011750 @ =gOamBuffer
- mov r8, r1
- ldr r2, _08011754 @ =0xFFFFFE00
- mov sb, r2
- adds r4, r7, #0
- adds r4, #8
-_080116A2:
- ldrh r3, [r4]
- lsls r3, r3, #3
- add r3, r8
- movs r0, #2
- ldrsh r1, [r4, r0]
- movs r2, #2
- ldrsh r0, [r7, r2]
- adds r1, r1, r0
- ldr r2, _08011758 @ =0x000001FF
- adds r0, r2, #0
- ands r1, r0
- ldrh r2, [r3, #2]
- mov r0, sb
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, #2]
- ldrh r1, [r4]
- lsls r1, r1, #3
- add r1, r8
- ldrb r0, [r7, #4]
- ldrb r2, [r4, #4]
- adds r0, r0, r2
- strb r0, [r1]
- adds r4, #8
- adds r5, #1
- mov r0, ip
- ldrh r0, [r0]
- cmp r5, r0
- blt _080116A2
-_080116DC:
- ldrh r0, [r6]
- cmp r0, #1
- bne _08011730
- movs r0, #0x78
- strh r0, [r6, #2]
- movs r0, #0x50
- strh r0, [r6, #4]
- ldr r1, _08011750 @ =gOamBuffer
- mov r8, r1
- ldr r2, _08011754 @ =0xFFFFFE00
- mov sb, r2
- adds r4, r6, #0
- adds r4, #8
- ldr r0, _08011758 @ =0x000001FF
- mov ip, r0
- movs r5, #1
-_080116FC:
- ldrh r3, [r4]
- lsls r3, r3, #3
- add r3, r8
- movs r2, #2
- ldrsh r1, [r4, r2]
- movs r2, #2
- ldrsh r0, [r6, r2]
- adds r1, r1, r0
- mov r0, ip
- ands r1, r0
- ldrh r2, [r3, #2]
- mov r0, sb
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, #2]
- ldrh r1, [r4]
- lsls r1, r1, #3
- add r1, r8
- ldrb r0, [r6, #4]
- ldrb r2, [r4, #4]
- adds r0, r0, r2
- strb r0, [r1]
- adds r4, #8
- subs r5, #1
- cmp r5, #0
- bge _080116FC
-_08011730:
- movs r0, #0
- strh r0, [r7]
- strh r0, [r6]
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08011744: .4byte gTitlescreen
-_08011748: .4byte gUnknown_0200B3B8
-_0801174C: .4byte gUnknown_086A96E4
-_08011750: .4byte gOamBuffer
-_08011754: .4byte 0xFFFFFE00
-_08011758: .4byte 0x000001FF
-
- thumb_func_start sub_1175C
-sub_1175C: @ 0x0801175C
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #4
- ldr r2, _08011810 @ =gMain
- ldrh r0, [r2, #0x38]
- movs r0, #0x84
- lsls r0, r0, #2
- strh r0, [r2, #0x38]
- ldrh r0, [r2, #0x3a]
- ldr r0, _08011814 @ =0x00000808
- strh r0, [r2, #0x3a]
- ldr r1, _08011818 @ =0x04000050
- ldrh r0, [r2, #0x38]
- strh r0, [r1]
- adds r1, #2
- ldrh r0, [r2, #0x3a]
- strh r0, [r1]
- ldr r3, _0801181C @ =gTitlescreen
- movs r0, #0xa
- ldrsb r0, [r3, r0]
- movs r1, #0xb8
- muls r0, r1, r0
- movs r4, #0xbe
- lsls r4, r4, #2
- adds r2, r2, r4
- adds r0, r0, r2
- mov sl, r0
- movs r0, #0xc
- ldrsb r0, [r3, r0]
- muls r0, r1, r0
- adds r0, r0, r2
- mov sb, r0
- movs r0, #0xe
- ldrsb r0, [r3, r0]
- muls r0, r1, r0
- adds r0, r0, r2
- mov r8, r0
- movs r0, #0xb
- ldrsb r0, [r3, r0]
- mov r6, sl
- strh r0, [r6]
- movs r0, #0xd
- ldrsb r0, [r3, r0]
- mov r7, sb
- strh r0, [r7]
- movs r0, #0xf
- ldrsb r0, [r3, r0]
- mov r1, r8
- strh r0, [r1]
- ldr r4, _08011820 @ =gUnknown_0201C190
- adds r0, r4, #0
- movs r1, #7
- bl LoadSpriteSets
- ldrh r0, [r6]
- cmp r0, #1
- bne _0801187C
- movs r0, #0x78
- strh r0, [r6, #2]
- movs r0, #0x66
- strh r0, [r6, #4]
- ldr r4, [r4, #0x18]
- mov ip, r4
- movs r2, #0
- str r2, [sp]
- ldrh r3, [r4]
- cmp r2, r3
- bge _0801187C
- ldr r6, _08011824 @ =gOamBuffer
- mov r4, sl
- adds r4, #8
- mov r5, ip
-_080117F2:
- ldrh r0, [r5, #8]
- cmp r0, #1
- bne _08011828
- ldrh r2, [r4]
- lsls r2, r2, #3
- adds r2, r2, r6
- ldrb r1, [r2, #1]
- movs r0, #0xd
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #4
- orrs r0, r1
- strb r0, [r2, #1]
- b _08011838
- .align 2, 0
-_08011810: .4byte gMain
-_08011814: .4byte 0x00000808
-_08011818: .4byte 0x04000050
-_0801181C: .4byte gTitlescreen
-_08011820: .4byte gUnknown_0201C190
-_08011824: .4byte gOamBuffer
-_08011828:
- ldrh r0, [r4]
- lsls r0, r0, #3
- adds r0, r0, r6
- ldrb r2, [r0, #1]
- movs r1, #0xd
- rsbs r1, r1, #0
- ands r1, r2
- strb r1, [r0, #1]
-_08011838:
- ldrh r3, [r4]
- lsls r3, r3, #3
- adds r3, r3, r6
- movs r7, #2
- ldrsh r1, [r4, r7]
- mov r2, sl
- movs r7, #2
- ldrsh r0, [r2, r7]
- adds r1, r1, r0
- ldr r2, _08011950 @ =0x000001FF
- adds r0, r2, #0
- ands r1, r0
- ldrh r2, [r3, #2]
- ldr r0, _08011954 @ =0xFFFFFE00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, #2]
- ldrh r1, [r4]
- lsls r1, r1, #3
- adds r1, r1, r6
- mov r3, sl
- ldrb r0, [r3, #4]
- ldrb r7, [r4, #4]
- adds r0, r0, r7
- strb r0, [r1]
- adds r4, #8
- adds r5, #8
- ldr r0, [sp]
- adds r0, #1
- str r0, [sp]
- mov r1, ip
- ldrh r1, [r1]
- cmp r0, r1
- blt _080117F2
-_0801187C:
- mov r2, sb
- ldrh r0, [r2]
- cmp r0, #1
- bne _080118D8
- ldr r2, _08011958 @ =gUnknown_086A9684
- ldr r1, _0801195C @ =gTitlescreen
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0]
- mov r3, sb
- strh r0, [r3, #2]
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0, #2]
- strh r0, [r3, #4]
- mov r5, sb
- adds r5, #8
- ldr r4, _08011960 @ =gOamBuffer
- ldrh r2, [r3, #8]
- lsls r2, r2, #3
- adds r2, r2, r4
- movs r6, #2
- ldrsh r1, [r5, r6]
- movs r7, #2
- ldrsh r0, [r3, r7]
- adds r1, r1, r0
- ldr r3, _08011950 @ =0x000001FF
- adds r0, r3, #0
- ands r1, r0
- ldrh r3, [r2, #2]
- ldr r0, _08011954 @ =0xFFFFFE00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, #2]
- mov r6, sb
- ldrh r1, [r6, #8]
- lsls r1, r1, #3
- adds r1, r1, r4
- ldrb r0, [r6, #4]
- ldrb r5, [r5, #4]
- adds r0, r0, r5
- strb r0, [r1]
-_080118D8:
- mov r7, r8
- ldrh r0, [r7]
- cmp r0, #1
- bne _08011930
- ldr r2, _08011964 @ =gUnknown_086A9694
- ldr r1, _0801195C @ =gTitlescreen
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0]
- strh r0, [r7, #2]
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0, #2]
- strh r0, [r7, #4]
- mov r5, r8
- adds r5, #8
- ldr r4, _08011960 @ =gOamBuffer
- ldrh r2, [r7, #8]
- lsls r2, r2, #3
- adds r2, r2, r4
- movs r0, #2
- ldrsh r1, [r5, r0]
- movs r3, #2
- ldrsh r0, [r7, r3]
- adds r1, r1, r0
- ldr r6, _08011950 @ =0x000001FF
- adds r0, r6, #0
- ands r1, r0
- ldrh r3, [r2, #2]
- ldr r0, _08011954 @ =0xFFFFFE00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, #2]
- ldrh r1, [r7, #8]
- lsls r1, r1, #3
- adds r1, r1, r4
- ldrb r0, [r7, #4]
- ldrb r5, [r5, #4]
- adds r0, r0, r5
- strb r0, [r1]
-_08011930:
- movs r0, #0
- mov r7, sl
- strh r0, [r7]
- mov r1, sb
- strh r0, [r1]
- mov r2, r8
- strh r0, [r2]
- add sp, #4
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08011950: .4byte 0x000001FF
-_08011954: .4byte 0xFFFFFE00
-_08011958: .4byte gUnknown_086A9684
-_0801195C: .4byte gTitlescreen
-_08011960: .4byte gOamBuffer
-_08011964: .4byte gUnknown_086A9694
-
- thumb_func_start sub_11968
-sub_11968: @ 0x08011968
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #4
- ldr r2, _08011A1C @ =gMain
- ldrh r0, [r2, #0x38]
- movs r0, #0x84
- lsls r0, r0, #2
- strh r0, [r2, #0x38]
- ldrh r0, [r2, #0x3a]
- ldr r0, _08011A20 @ =0x00000808
- strh r0, [r2, #0x3a]
- ldr r1, _08011A24 @ =0x04000050
- ldrh r0, [r2, #0x38]
- strh r0, [r1]
- adds r1, #2
- ldrh r0, [r2, #0x3a]
- strh r0, [r1]
- ldr r3, _08011A28 @ =gTitlescreen
- movs r0, #0xa
- ldrsb r0, [r3, r0]
- movs r1, #0xb8
- muls r0, r1, r0
- movs r4, #0xbe
- lsls r4, r4, #2
- adds r2, r2, r4
- adds r0, r0, r2
- mov sl, r0
- movs r0, #0xc
- ldrsb r0, [r3, r0]
- muls r0, r1, r0
- adds r0, r0, r2
- mov sb, r0
- movs r0, #0xe
- ldrsb r0, [r3, r0]
- muls r0, r1, r0
- adds r0, r0, r2
- mov r8, r0
- movs r0, #0xb
- ldrsb r0, [r3, r0]
- mov r6, sl
- strh r0, [r6]
- movs r0, #0xd
- ldrsb r0, [r3, r0]
- mov r7, sb
- strh r0, [r7]
- movs r0, #0xf
- ldrsb r0, [r3, r0]
- mov r1, r8
- strh r0, [r1]
- ldr r4, _08011A2C @ =gUnknown_0202BE00
- adds r0, r4, #0
- movs r1, #7
- bl LoadSpriteSets
- ldrh r0, [r6]
- cmp r0, #1
- bne _08011A88
- movs r0, #0x78
- strh r0, [r6, #2]
- movs r0, #0x66
- strh r0, [r6, #4]
- ldr r4, [r4, #0x18]
- mov ip, r4
- movs r2, #0
- str r2, [sp]
- ldrh r3, [r4]
- cmp r2, r3
- bge _08011A88
- ldr r6, _08011A30 @ =gOamBuffer
- mov r4, sl
- adds r4, #8
- mov r5, ip
-_080119FE:
- ldrh r0, [r5, #8]
- cmp r0, #1
- bne _08011A34
- ldrh r2, [r4]
- lsls r2, r2, #3
- adds r2, r2, r6
- ldrb r1, [r2, #1]
- movs r0, #0xd
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #4
- orrs r0, r1
- strb r0, [r2, #1]
- b _08011A44
- .align 2, 0
-_08011A1C: .4byte gMain
-_08011A20: .4byte 0x00000808
-_08011A24: .4byte 0x04000050
-_08011A28: .4byte gTitlescreen
-_08011A2C: .4byte gUnknown_0202BE00
-_08011A30: .4byte gOamBuffer
-_08011A34:
- ldrh r0, [r4]
- lsls r0, r0, #3
- adds r0, r0, r6
- ldrb r2, [r0, #1]
- movs r1, #0xd
- rsbs r1, r1, #0
- ands r1, r2
- strb r1, [r0, #1]
-_08011A44:
- ldrh r3, [r4]
- lsls r3, r3, #3
- adds r3, r3, r6
- movs r7, #2
- ldrsh r1, [r4, r7]
- mov r2, sl
- movs r7, #2
- ldrsh r0, [r2, r7]
- adds r1, r1, r0
- ldr r2, _08011B5C @ =0x000001FF
- adds r0, r2, #0
- ands r1, r0
- ldrh r2, [r3, #2]
- ldr r0, _08011B60 @ =0xFFFFFE00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, #2]
- ldrh r1, [r4]
- lsls r1, r1, #3
- adds r1, r1, r6
- mov r3, sl
- ldrb r0, [r3, #4]
- ldrb r7, [r4, #4]
- adds r0, r0, r7
- strb r0, [r1]
- adds r4, #8
- adds r5, #8
- ldr r0, [sp]
- adds r0, #1
- str r0, [sp]
- mov r1, ip
- ldrh r1, [r1]
- cmp r0, r1
- blt _080119FE
-_08011A88:
- mov r2, sb
- ldrh r0, [r2]
- cmp r0, #1
- bne _08011AE4
- ldr r2, _08011B64 @ =gUnknown_086A96AC
- ldr r1, _08011B68 @ =gTitlescreen
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0]
- mov r3, sb
- strh r0, [r3, #2]
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0, #2]
- strh r0, [r3, #4]
- mov r5, sb
- adds r5, #8
- ldr r4, _08011B6C @ =gOamBuffer
- ldrh r2, [r3, #8]
- lsls r2, r2, #3
- adds r2, r2, r4
- movs r6, #2
- ldrsh r1, [r5, r6]
- movs r7, #2
- ldrsh r0, [r3, r7]
- adds r1, r1, r0
- ldr r3, _08011B5C @ =0x000001FF
- adds r0, r3, #0
- ands r1, r0
- ldrh r3, [r2, #2]
- ldr r0, _08011B60 @ =0xFFFFFE00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, #2]
- mov r6, sb
- ldrh r1, [r6, #8]
- lsls r1, r1, #3
- adds r1, r1, r4
- ldrb r0, [r6, #4]
- ldrb r5, [r5, #4]
- adds r0, r0, r5
- strb r0, [r1]
-_08011AE4:
- mov r7, r8
- ldrh r0, [r7]
- cmp r0, #1
- bne _08011B3C
- ldr r2, _08011B70 @ =gUnknown_086A96C0
- ldr r1, _08011B68 @ =gTitlescreen
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0]
- strh r0, [r7, #2]
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0, #2]
- strh r0, [r7, #4]
- mov r5, r8
- adds r5, #8
- ldr r4, _08011B6C @ =gOamBuffer
- ldrh r2, [r7, #8]
- lsls r2, r2, #3
- adds r2, r2, r4
- movs r0, #2
- ldrsh r1, [r5, r0]
- movs r3, #2
- ldrsh r0, [r7, r3]
- adds r1, r1, r0
- ldr r6, _08011B5C @ =0x000001FF
- adds r0, r6, #0
- ands r1, r0
- ldrh r3, [r2, #2]
- ldr r0, _08011B60 @ =0xFFFFFE00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, #2]
- ldrh r1, [r7, #8]
- lsls r1, r1, #3
- adds r1, r1, r4
- ldrb r0, [r7, #4]
- ldrb r5, [r5, #4]
- adds r0, r0, r5
- strb r0, [r1]
-_08011B3C:
- movs r0, #0
- mov r7, sl
- strh r0, [r7]
- mov r1, sb
- strh r0, [r1]
- mov r2, r8
- strh r0, [r2]
- add sp, #4
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08011B5C: .4byte 0x000001FF
-_08011B60: .4byte 0xFFFFFE00
-_08011B64: .4byte gUnknown_086A96AC
-_08011B68: .4byte gTitlescreen
-_08011B6C: .4byte gOamBuffer
-_08011B70: .4byte gUnknown_086A96C0
-
- thumb_func_start sub_11B74
-sub_11B74: @ 0x08011B74
- push {lr}
- bl sub_52C64
- bl sub_52B30
- ldr r0, _08011B94 @ =gMain
- movs r1, #0
- str r1, [r0, #0x40]
- adds r0, #0x40
- ldr r1, _08011B98 @ =0x0E000544
- movs r2, #4
- bl sub_55654
- pop {r0}
- bx r0
- .align 2, 0
-_08011B94: .4byte gMain
-_08011B98: .4byte 0x0E000544
diff --git a/include/functions.h b/include/functions.h
index 89b93dc..d6e53d8 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -777,10 +777,10 @@ extern void sub_1090C(void);
//extern ? sub_52940();
extern void sub_52A18(void);
//extern ? sub_52A68();
-//extern ? sub_52B30();
+extern void sub_52B30(void);
//extern ? sub_52BB0();
extern void sub_52C44(void);
-//extern ? sub_52C64();
+extern void sub_52C64(void);
// asm/rom_9BC.s
@@ -840,6 +840,6 @@ extern int sub_55A24(u8*); // Rumble Pak?
//extern ? sub_55530();
//extern ? sub_55570();
//extern ? sub_555BC();
-//extern ? sub_55654();
+extern void sub_55654(void *, u32, int);
#endif // GUARD_FUNCTIONS_H \ No newline at end of file
diff --git a/include/main.h b/include/main.h
index 4b97e5e..02f0a5f 100755
--- a/include/main.h
+++ b/include/main.h
@@ -38,6 +38,7 @@ struct Main
/*0x38*/ volatile u16 blendControl;
/*0x3A*/ volatile u16 blendAlpha;
/*0x3C*/ volatile u16 blendBrightness;
+ // may be a sub-struct. possibly save data?
/*0x40*/ int unk40;
/*0x44*/ u8 filler44[0x4];
/*0x48*/ int rngValue;
diff --git a/include/titlescreen.h b/include/titlescreen.h
index d1dd857..6cd6965 100755
--- a/include/titlescreen.h
+++ b/include/titlescreen.h
@@ -10,12 +10,12 @@ struct TitlescreenStruct
/*0x07*/ u8 unk7;
/*0x08*/ s8 unk8;
/*0x09*/ s8 unk9;
- /*0x0A*/ u8 unkA;
- /*0x0B*/ u8 unkB;
- /*0x0C*/ u8 unkC;
- /*0x0D*/ u8 unkD;
- /*0x0E*/ u8 unkE;
- /*0x0F*/ u8 unkF;
+ /*0x0A*/ s8 unkA;
+ /*0x0B*/ s8 unkB;
+ /*0x0C*/ s8 unkC;
+ /*0x0D*/ s8 unkD;
+ /*0x0E*/ s8 unkE;
+ /*0x0F*/ s8 unkF;
/*0x10*/ s8 unk10;
/*0x11*/ s8 unk11;
/*0x12*/ s16 idleFadeoutCounter;
diff --git a/include/types.h b/include/types.h
index af7a749..e43b6dc 100644
--- a/include/types.h
+++ b/include/types.h
@@ -34,4 +34,10 @@ struct SpriteGroup
};
// size: 0xB8
+struct Coord16
+{
+ u16 x;
+ u16 y;
+};
+
#endif // GUARD_TYPES_H
diff --git a/include/variables.h b/include/variables.h
index 6a74cb7..d8efc57 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -163,5 +163,9 @@ extern const u16 gTitlescreenSprites_Pals[];
//extern ? gMonPortraitsGroup11_Pals;
//extern ? gMonPortraitsGroup12_Pals;
//extern ? gMonPortraitsGroup13_Pals;
+extern struct Coord16 gUnknown_086A9684[];
+extern struct Coord16 gUnknown_086A9694[];
+extern struct Coord16 gUnknown_086A96AC[];
+extern struct Coord16 gUnknown_086A96C0[];
#endif // GUARD_VARIABLES_H \ No newline at end of file
diff --git a/ld_script.txt b/ld_script.txt
index 15cf11d..5e3b51a 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -42,7 +42,6 @@ SECTIONS
asm/high_scores.o(.text);
asm/rom_1068C.o(.text);
src/titlescreen.o(.text);
- asm/titlescreen.o(.text);
asm/rom_11B9C.o(.text);
src/rom_3219C.o(.text);
asm/rom_3219C.o(.text);
diff --git a/src/titlescreen.c b/src/titlescreen.c
index b013c2f..a4e75e7 100755
--- a/src/titlescreen.c
+++ b/src/titlescreen.c
@@ -5,7 +5,7 @@
static void sub_114FC(void);
static void sub_1157C(void);
-/*static*/ extern void sub_11640(void);
+static void sub_11640(void);
// If the user doesn't press any buttons at the title screen,
// it will transition to a demo gameplay experience.
@@ -656,38 +656,201 @@ static void sub_1157C(void)
}
}
-// static void sub_11640(void)
-// {
-// int i;
-// const struct SpriteSet *spriteSet;
-// struct SpriteGroup *group1 = &gTitlescreen.unk8[gUnknown_0200B3B8];
-// struct SpriteGroup *group2 = &gTitlescreen.unk10[gUnknown_0200B3B8];
-// group1->available = gTitlescreen.unk9;
-// group2->available = gTitlescreen.unk11;
-// LoadSpriteSets(gUnknown_086A96E4, 5, gUnknown_0200B3B8);
-// if (group1->available == 1)
-// {
-// group1->baseX = 120;
-// group1->baseY = 102;
-// spriteSet = gUnknown_086A96E4[gTitlescreen.unk8];
-// for (i = 0; i < spriteSet->count; i++)
-// {
-// gOamBuffer[group1->oam[i].oamId].x = group1->oam[i].xOffset + group1->baseX;
-// gOamBuffer[group1->oam[i].oamId].y = group1->oam[i].yOffset + group1->baseY;
-// }
-// }
-
-// if (group2->available == 1)
-// {
-// group2->baseX = 120;
-// group2->baseY = 80;
-// for (i = 0; i < 2; i++)
-// {
-// gOamBuffer[group2->oam[i].oamId].x = group2->oam[i].xOffset + group2->baseX;
-// gOamBuffer[group2->oam[i].oamId].y = group2->oam[i].yOffset + group2->baseY;
-// }
-// }
-
-// group1->available = 0;
-// group2->available = 0;
-// }
+static void sub_11640(void)
+{
+ int i;
+ const struct SpriteSet *spriteSet;
+ struct SpriteGroup *group1 = &gTitlescreen.unk8[gUnknown_0200B3B8];
+ struct SpriteGroup *group2 = &gTitlescreen.unk10[gUnknown_0200B3B8];
+
+ group1->available = gTitlescreen.unk9;
+ group2->available = gTitlescreen.unk11;
+
+ LoadSpriteSets(gUnknown_086A96E4, 5, gUnknown_0200B3B8);
+
+ if (group1->available == 1)
+ {
+ group1->baseX = 120;
+ group1->baseY = 102;
+ spriteSet = gUnknown_086A96E4[gTitlescreen.unk8];
+ for (i = 0; i < spriteSet->count; i++)
+ {
+ gOamBuffer[group1->oam[i].oamId].x = group1->oam[i].xOffset + group1->baseX;
+ gOamBuffer[group1->oam[i].oamId].y = group1->oam[i].yOffset + group1->baseY;
+
+ asm(""); // needed to match
+ }
+ }
+
+ if (group2->available == 1)
+ {
+ group2->baseX = 120;
+ group2->baseY = 80;
+ for (i = 0; i < 2; i++)
+ {
+ gOamBuffer[group2->oam[i].oamId].x = group2->oam[i].xOffset + group2->baseX;
+ gOamBuffer[group2->oam[i].oamId].y = group2->oam[i].yOffset + group2->baseY;
+
+ asm(""); // needed to match
+ }
+ }
+
+ group1->available = 0;
+ group2->available = 0;
+}
+
+struct UnknownStruct1
+{
+ u16 count;
+ u8 filler2[6];
+};
+
+void sub_1175C(void)
+{
+ struct SpriteGroup *r10;
+ struct SpriteGroup *r9;
+ struct SpriteGroup *r8;
+ const struct UnknownStruct1 *r12;
+ int sp0;
+
+ gMain.blendControl = 0x210;
+ gMain.blendAlpha = 0x808;
+ REG_BLDCNT = gMain.blendControl;
+ REG_BLDALPHA = gMain.blendAlpha;
+
+ r10 = &gMain.spriteGroups[gTitlescreen.unkA];
+ r9 = &gMain.spriteGroups[gTitlescreen.unkC];
+ r8 = &gMain.spriteGroups[gTitlescreen.unkE];
+
+ r10->available = gTitlescreen.unkB;
+ r9->available = gTitlescreen.unkD;
+ r8->available = gTitlescreen.unkF;
+
+ LoadSpriteSets((const struct SpriteSet *const *)gUnknown_0201C190, 7, gMain.spriteGroups);
+
+ if (r10->available == 1)
+ {
+ r10->baseX = 0x78;
+ r10->baseY = 0x66;
+ r12 = (const struct UnknownStruct1 *)gUnknown_0201C190[6];
+ for (sp0 = 0; sp0 < r12->count; sp0++)
+ {
+ struct OamDataSimple *r4 = &r10->oam[sp0];
+ if (r12[sp0 + 1].count == 1) // dunno. wtf?
+ gOamBuffer[r4->oamId].objMode = 1;
+ else
+ gOamBuffer[r4->oamId].objMode = 0;
+ gOamBuffer[r4->oamId].x = r4->xOffset + r10->baseX;
+ gOamBuffer[r4->oamId].y = r4->yOffset + r10->baseY;
+ }
+ }
+
+ if (r9->available == 1)
+ {
+ struct OamDataSimple *r5;
+
+ r9->baseX = gUnknown_086A9684[gTitlescreen.menuCursorIndex].x;
+ r9->baseY = gUnknown_086A9684[gTitlescreen.menuCursorIndex].y;
+
+ r5 = &r9->oam[0];
+
+ gOamBuffer[r5->oamId].x = r5->xOffset + r9->baseX;
+ gOamBuffer[r5->oamId].y = r5->yOffset + r9->baseY;
+ }
+
+ if (r8->available == 1)
+ {
+ struct OamDataSimple *r5;
+
+ r8->baseX = gUnknown_086A9694[gTitlescreen.menuCursorIndex].x;
+ r8->baseY = gUnknown_086A9694[gTitlescreen.menuCursorIndex].y;
+
+ r5 = &r8->oam[0];
+
+ gOamBuffer[r5->oamId].x = r5->xOffset + r8->baseX;
+ gOamBuffer[r5->oamId].y = r5->yOffset + r8->baseY;
+ }
+
+ r10->available = 0;
+ r9->available = 0;
+ r8->available = 0;
+}
+
+void sub_11968(void)
+{
+ struct SpriteGroup *r10;
+ struct SpriteGroup *r9;
+ struct SpriteGroup *r8;
+ const struct UnknownStruct1 *r12;
+ int sp0;
+
+ gMain.blendControl = 0x210;
+ gMain.blendAlpha = 0x808;
+ REG_BLDCNT = gMain.blendControl;
+ REG_BLDALPHA = gMain.blendAlpha;
+
+ r10 = &gMain.spriteGroups[gTitlescreen.unkA];
+ r9 = &gMain.spriteGroups[gTitlescreen.unkC];
+ r8 = &gMain.spriteGroups[gTitlescreen.unkE];
+
+ r10->available = gTitlescreen.unkB;
+ r9->available = gTitlescreen.unkD;
+ r8->available = gTitlescreen.unkF;
+
+ LoadSpriteSets((const struct SpriteSet *const *)gUnknown_0202BE00, 7, gMain.spriteGroups);
+
+ if (r10->available == 1)
+ {
+ r10->baseX = 0x78;
+ r10->baseY = 0x66;
+ r12 = (const struct UnknownStruct1 *)gUnknown_0202BE00[6];
+ for (sp0 = 0; sp0 < r12->count; sp0++)
+ {
+ struct OamDataSimple *r4 = &r10->oam[sp0];
+ if (r12[sp0 + 1].count == 1) // dunno. wtf?
+ gOamBuffer[r4->oamId].objMode = 1;
+ else
+ gOamBuffer[r4->oamId].objMode = 0;
+ gOamBuffer[r4->oamId].x = r4->xOffset + r10->baseX;
+ gOamBuffer[r4->oamId].y = r4->yOffset + r10->baseY;
+ }
+ }
+
+ if (r9->available == 1)
+ {
+ struct OamDataSimple *r5;
+
+ r9->baseX = gUnknown_086A96AC[gTitlescreen.menuCursorIndex].x;
+ r9->baseY = gUnknown_086A96AC[gTitlescreen.menuCursorIndex].y;
+
+ r5 = &r9->oam[0];
+
+ gOamBuffer[r5->oamId].x = r5->xOffset + r9->baseX;
+ gOamBuffer[r5->oamId].y = r5->yOffset + r9->baseY;
+ }
+
+ if (r8->available == 1)
+ {
+ struct OamDataSimple *r5;
+
+ r8->baseX = gUnknown_086A96C0[gTitlescreen.menuCursorIndex].x;
+ r8->baseY = gUnknown_086A96C0[gTitlescreen.menuCursorIndex].y;
+
+ r5 = &r8->oam[0];
+
+ gOamBuffer[r5->oamId].x = r5->xOffset + r8->baseX;
+ gOamBuffer[r5->oamId].y = r5->yOffset + r8->baseY;
+ }
+
+ r10->available = 0;
+ r9->available = 0;
+ r8->available = 0;
+}
+
+void sub_11B74(void)
+{
+ sub_52C64();
+ sub_52B30();
+ gMain.unk40 = 0;
+ sub_55654(&gMain.unk40, 0x0E000544 /* Possibly SRAM address */, 4);
+}