diff options
author | Cameron Hall <cameronghall@cox.net> | 2019-08-04 22:40:08 -0500 |
---|---|---|
committer | Cameron Hall <cameronghall@cox.net> | 2019-08-04 22:40:08 -0500 |
commit | a6e0483749782133d78058c25300f2036cc3a1cc (patch) | |
tree | ccff0e5219b55124de4e5809158281b814297d17 | |
parent | d824a2b4266e6cfa885ef08b23c43e38dbbafcd7 (diff) |
finish decompiling titlescreen.s
-rwxr-xr-x | asm/titlescreen.s | 681 | ||||
-rw-r--r-- | include/functions.h | 6 | ||||
-rwxr-xr-x | include/main.h | 1 | ||||
-rwxr-xr-x | include/titlescreen.h | 12 | ||||
-rw-r--r-- | include/types.h | 6 | ||||
-rw-r--r-- | include/variables.h | 4 | ||||
-rwxr-xr-x | ld_script.txt | 1 | ||||
-rwxr-xr-x | src/titlescreen.c | 235 |
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); +} |