diff --git a/asm/intro.s b/asm/intro.s index 738b94e..2f9a9ed 100644 --- a/asm/intro.s +++ b/asm/intro.s @@ -4,590 +4,6 @@ .text - thumb_func_start IntroMain -IntroMain: @ 0x0800927C - push {lr} - ldr r1, _08009294 @ =gIntroStateFuncs - ldr r0, _08009298 @ =gMain - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r0} - bx r0 - .align 2, 0 -_08009294: .4byte gIntroStateFuncs -_08009298: .4byte gMain - - thumb_func_start sub_929C -sub_929C: @ 0x0800929C - push {r4, lr} - bl ResetSomeGraphicsRelatedStuff - movs r3, #0x80 - lsls r3, r3, #0x13 - movs r0, #0x80 - strh r0, [r3] - ldr r1, _08009318 @ =0x0400000A - movs r0, #5 - strh r0, [r1] - ldrh r0, [r3] - movs r2, #0x80 - lsls r2, r2, #2 - adds r1, r2, #0 - orrs r0, r1 - strh r0, [r3] - ldr r1, _0800931C @ =0x040000D4 - ldr r0, _08009320 @ =gUnknown_080798C0 - str r0, [r1] - movs r0, #0xc0 - lsls r0, r0, #0x13 - str r0, [r1, #4] - ldr r2, _08009324 @ =0x80000400 - str r2, [r1, #8] - ldr r0, [r1, #8] - ldr r0, _08009328 @ =gIntroCopyright_Gfx - str r0, [r1] - ldr r0, _0800932C @ =0x06004000 - str r0, [r1, #4] - str r2, [r1, #8] - ldr r0, [r1, #8] - ldr r0, _08009330 @ =gIntroCopyright_Pal - str r0, [r1] - movs r0, #0xa0 - lsls r0, r0, #0x13 - str r0, [r1, #4] - ldr r0, _08009334 @ =0x80000100 - str r0, [r1, #8] - ldr r0, [r1, #8] - ldr r4, _08009338 @ =gMain - ldrh r0, [r3] - movs r2, #0 - movs r1, #0 - strh r0, [r4, #0x16] - ldr r0, _0800933C @ =gUnknown_0202BF10 - strh r1, [r0] - ldr r0, _08009340 @ =gUnknown_0202C790 - strb r2, [r0] - ldr r0, _08009344 @ =sub_93F8 + 1 - bl SetMainCallback - bl sub_0CBC - bl sub_024C - ldrb r0, [r4, #3] - adds r0, #1 - strb r0, [r4, #3] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08009318: .4byte 0x0400000A -_0800931C: .4byte 0x040000D4 -_08009320: .4byte gUnknown_080798C0 -_08009324: .4byte 0x80000400 -_08009328: .4byte gIntroCopyright_Gfx -_0800932C: .4byte 0x06004000 -_08009330: .4byte gIntroCopyright_Pal -_08009334: .4byte 0x80000100 -_08009338: .4byte gMain -_0800933C: .4byte gUnknown_0202BF10 -_08009340: .4byte gUnknown_0202C790 -_08009344: .4byte sub_93F8 + 1 - - thumb_func_start sub_9348 -sub_9348: @ 0x08009348 - ldr r1, _08009368 @ =gUnknown_0202BF10 - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x78 - ble _08009364 - movs r0, #0 - strh r0, [r1] - ldr r1, _0800936C @ =gMain - ldrb r0, [r1, #3] - adds r0, #1 - strb r0, [r1, #3] -_08009364: - bx lr - .align 2, 0 -_08009368: .4byte gUnknown_0202BF10 -_0800936C: .4byte gMain - - thumb_func_start sub_9370 -sub_9370: @ 0x08009370 - push {lr} - movs r0, #0 - bl sub_FF74 - bl sub_0D10 - ldr r1, _08009388 @ =gMain - ldrb r0, [r1, #3] - adds r0, #1 - strb r0, [r1, #3] - pop {r0} - bx r0 - .align 2, 0 -_08009388: .4byte gMain - - thumb_func_start sub_938C -sub_938C: @ 0x0800938C - push {lr} - ldr r1, _080093C0 @ =gUnknown_080792E0 - ldr r0, _080093C4 @ =gUnknown_0202C790 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldr r1, _080093C8 @ =gUnknown_0202BF10 - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] - ldr r2, _080093CC @ =gMain - ldrh r1, [r2, #0x18] - movs r0, #9 - ands r0, r1 - cmp r0, #0 - beq _080093BA - movs r0, #4 - strb r0, [r2, #3] -_080093BA: - pop {r0} - bx r0 - .align 2, 0 -_080093C0: .4byte gUnknown_080792E0 -_080093C4: .4byte gUnknown_0202C790 -_080093C8: .4byte gUnknown_0202BF10 -_080093CC: .4byte gMain - - thumb_func_start sub_93D0 -sub_93D0: @ 0x080093D0 - push {lr} - bl sub_02B4 - bl m4aMPlayAllStop - bl sub_0D10 - bl ResetMainCallback - ldr r1, _080093F4 @ =gAutoDisplayTitlescreenMenu - movs r0, #0 - strb r0, [r1] - movs r0, #1 - bl SetMainGameState - pop {r0} - bx r0 - .align 2, 0 -_080093F4: .4byte gAutoDisplayTitlescreenMenu - - thumb_func_start sub_93F8 -sub_93F8: @ 0x080093F8 - push {lr} - ldr r0, _08009480 @ =0x04000004 - ldrh r1, [r0] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _0800947C - bl m4aSoundMain - bl VBlankIntrWait - ldr r1, _08009484 @ =0x040000D4 - ldr r0, _08009488 @ =gOamBuffer - str r0, [r1] - movs r0, #0xe0 - lsls r0, r0, #0x13 - str r0, [r1, #4] - ldr r0, _0800948C @ =0x84000100 - str r0, [r1, #8] - ldr r0, [r1, #8] - movs r2, #0x80 - lsls r2, r2, #0x13 - ldr r1, _08009490 @ =gMain - ldrh r0, [r1, #0x16] - strh r0, [r2] - adds r2, #0x10 - movs r3, #0xba - lsls r3, r3, #2 - adds r0, r1, r3 - ldrh r0, [r0] - strh r0, [r2] - adds r2, #2 - adds r3, #2 - adds r0, r1, r3 - ldrh r0, [r0] - strh r0, [r2] - adds r2, #2 - adds r3, #2 - adds r0, r1, r3 - ldrh r0, [r0] - strh r0, [r2] - adds r2, #2 - adds r3, #2 - adds r0, r1, r3 - ldrh r0, [r0] - strh r0, [r2] - adds r2, #2 - adds r3, #2 - adds r0, r1, r3 - ldrh r0, [r0] - strh r0, [r2] - adds r2, #2 - adds r3, #2 - adds r0, r1, r3 - ldrh r0, [r0] - strh r0, [r2] - adds r2, #2 - adds r3, #2 - adds r0, r1, r3 - ldrh r0, [r0] - strh r0, [r2] - adds r2, #2 - ldr r0, _08009494 @ =0x000002F6 - adds r1, r1, r0 - ldrh r0, [r1] - strh r0, [r2] -_0800947C: - pop {r0} - bx r0 - .align 2, 0 -_08009480: .4byte 0x04000004 -_08009484: .4byte 0x040000D4 -_08009488: .4byte gOamBuffer -_0800948C: .4byte 0x84000100 -_08009490: .4byte gMain -_08009494: .4byte 0x000002F6 - - thumb_func_start sub_9498 -sub_9498: @ 0x08009498 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - bl ClearGraphicsMemory - bl sub_0518 - bl ClearSprites - movs r2, #0x80 - lsls r2, r2, #0x13 - movs r1, #0x80 - lsls r1, r1, #5 - adds r0, r1, #0 - strh r0, [r2] - ldr r1, _0800961C @ =0x04000008 - movs r3, #0xd0 - lsls r3, r3, #5 - adds r0, r3, #0 - strh r0, [r1] - ldrh r0, [r2] - movs r7, #0x80 - lsls r7, r7, #1 - adds r1, r7, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _08009620 @ =0x0400000A - ldr r3, _08009624 @ =0x00005B01 - adds r0, r3, #0 - strh r0, [r1] - ldrh r0, [r2] - movs r7, #0x80 - lsls r7, r7, #2 - adds r1, r7, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _08009628 @ =0x0400000C - ldr r3, _0800962C @ =0x00005D02 - adds r0, r3, #0 - strh r0, [r1] - ldrh r0, [r2] - movs r7, #0x80 - lsls r7, r7, #3 - adds r1, r7, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _08009630 @ =0x0400000E - ldr r3, _08009634 @ =0x00001F03 - adds r0, r3, #0 - strh r0, [r1] - ldrh r0, [r2] - movs r7, #0x80 - lsls r7, r7, #4 - adds r1, r7, #0 - orrs r0, r1 - strh r0, [r2] - ldr r4, _08009638 @ =0x040000D4 - ldr r0, _0800963C @ =gUnknown_080B9CC0 - str r0, [r4] - ldr r0, _08009640 @ =0x0600D000 - str r0, [r4, #4] - ldr r2, _08009644 @ =0x80000400 - str r2, [r4, #8] - ldr r0, [r4, #8] - ldr r0, _08009648 @ =gUnknown_080BC4C0 - str r0, [r4] - ldr r0, _0800964C @ =0x0600D800 - str r0, [r4, #4] - ldr r1, _08009650 @ =0x80000800 - str r1, [r4, #8] - ldr r0, [r4, #8] - ldr r0, _08009654 @ =gUnknown_080BB4C0 - str r0, [r4] - ldr r0, _08009658 @ =0x0600E800 - str r0, [r4, #4] - str r1, [r4, #8] - ldr r0, [r4, #8] - ldr r0, _0800965C @ =gUnknown_080B3CA0 - str r0, [r4] - ldr r0, _08009660 @ =0x0600F800 - str r0, [r4, #4] - str r2, [r4, #8] - ldr r0, [r4, #8] - ldr r0, _08009664 @ =gUnknown_080B44A0 - str r0, [r4] - movs r0, #0xc0 - lsls r0, r0, #0x13 - str r0, [r4, #4] - ldr r0, _08009668 @ =0x80002C00 - str r0, [r4, #8] - ldr r0, [r4, #8] - ldr r0, _0800966C @ =gUnknown_080BD4C0 - str r0, [r4] - ldr r0, _08009670 @ =gUnknown_0201C1C0 - str r0, [r4, #4] - ldr r0, _08009674 @ =0x80003400 - str r0, [r4, #8] - ldr r0, [r4, #8] - ldr r6, _08009678 @ =gIntroScene1Sprites_Pals - movs r0, #0xa0 - lsls r0, r0, #0x13 - mov sl, r0 - movs r2, #0x80 - lsls r2, r2, #2 - adds r0, r6, #0 - mov r1, sl - movs r3, #0x20 - bl sub_10170 - ldr r0, _0800967C @ =gIntroScene1Sprites_Gfx - str r0, [r4] - ldr r0, _08009680 @ =0x06010000 - str r0, [r4, #4] - ldr r0, _08009684 @ =0x80004000 - str r0, [r4, #8] - ldr r0, [r4, #8] - str r6, [r4] - ldr r5, _08009688 @ =0x05000200 - str r5, [r4, #4] - ldr r1, _0800968C @ =0x80000100 - mov r8, r1 - str r1, [r4, #8] - ldr r0, [r4, #8] - bl sub_96A8 - ldr r1, _08009690 @ =gMain - ldr r2, _08009694 @ =gUnknown_0202ADA0 - ldrh r3, [r2] - movs r7, #0xba - lsls r7, r7, #2 - adds r0, r1, r7 - movs r7, #0 - mov sb, r7 - strh r3, [r0] - ldrh r3, [r2, #2] - ldr r7, _08009698 @ =0x000002EA - adds r0, r1, r7 - strh r3, [r0] - ldrh r3, [r2, #0x24] - adds r7, #2 - adds r0, r1, r7 - strh r3, [r0] - ldrh r3, [r2, #0x26] - adds r7, #2 - adds r0, r1, r7 - strh r3, [r0] - ldrh r3, [r2, #0xc] - adds r7, #2 - adds r0, r1, r7 - strh r3, [r0] - ldrh r3, [r2, #0xe] - adds r7, #2 - adds r0, r1, r7 - strh r3, [r0] - ldrh r3, [r2, #0x18] - adds r7, #2 - adds r0, r1, r7 - strh r3, [r0] - ldrh r0, [r2, #0x1a] - ldr r2, _0800969C @ =0x000002F6 - adds r1, r1, r2 - strh r0, [r1] - bl sub_0CBC - mov r0, sl - adds r1, r6, #0 - movs r2, #0 - bl sub_FEB8 - str r6, [r4] - str r5, [r4, #4] - mov r3, r8 - str r3, [r4, #8] - ldr r0, [r4, #8] - mov r7, sb - str r7, [r4] - str r5, [r4, #4] - ldr r0, _080096A0 @ =0x80000010 - str r0, [r4, #8] - ldr r0, [r4, #8] - ldr r1, _080096A4 @ =gUnknown_0202C790 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - 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 -_0800961C: .4byte 0x04000008 -_08009620: .4byte 0x0400000A -_08009624: .4byte 0x00005B01 -_08009628: .4byte 0x0400000C -_0800962C: .4byte 0x00005D02 -_08009630: .4byte 0x0400000E -_08009634: .4byte 0x00001F03 -_08009638: .4byte 0x040000D4 -_0800963C: .4byte gUnknown_080B9CC0 -_08009640: .4byte 0x0600D000 -_08009644: .4byte 0x80000400 -_08009648: .4byte gUnknown_080BC4C0 -_0800964C: .4byte 0x0600D800 -_08009650: .4byte 0x80000800 -_08009654: .4byte gUnknown_080BB4C0 -_08009658: .4byte 0x0600E800 -_0800965C: .4byte gUnknown_080B3CA0 -_08009660: .4byte 0x0600F800 -_08009664: .4byte gUnknown_080B44A0 -_08009668: .4byte 0x80002C00 -_0800966C: .4byte gUnknown_080BD4C0 -_08009670: .4byte gUnknown_0201C1C0 -_08009674: .4byte 0x80003400 -_08009678: .4byte gIntroScene1Sprites_Pals -_0800967C: .4byte gIntroScene1Sprites_Gfx -_08009680: .4byte 0x06010000 -_08009684: .4byte 0x80004000 -_08009688: .4byte 0x05000200 -_0800968C: .4byte 0x80000100 -_08009690: .4byte gMain -_08009694: .4byte gUnknown_0202ADA0 -_08009698: .4byte 0x000002EA -_0800969C: .4byte 0x000002F6 -_080096A0: .4byte 0x80000010 -_080096A4: .4byte gUnknown_0202C790 - - thumb_func_start sub_96A8 -sub_96A8: @ 0x080096A8 - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - ldr r0, _0800975C @ =gUnknown_0201A450 - mov ip, r0 - movs r5, #0 - movs r2, #0 - movs r1, #0x78 - mov r8, r1 - mov r1, r8 - strh r1, [r0, #0x10] - movs r6, #0x50 - strh r6, [r0, #0x12] - strh r2, [r0, #0x18] - movs r4, #1 - strb r4, [r0, #0x1c] - movs r0, #0x9c - mov r1, ip - strh r0, [r1, #0x30] - movs r0, #0x92 - strh r0, [r1, #0x32] - mov r0, ip - adds r0, #0x3c - strb r5, [r0] - strh r2, [r1, #0x3a] - movs r0, #0x9d - strh r0, [r1, #0x20] - movs r0, #0x93 - strh r0, [r1, #0x22] - mov r0, ip - adds r0, #0x2c - strb r5, [r0] - adds r0, #0x14 - movs r1, #0x80 - strh r1, [r0] - adds r0, #2 - strh r1, [r0] - adds r0, #0xa - strb r4, [r0] - ldr r0, _08009760 @ =gUnknown_0202ADA0 - ldr r1, _08009764 @ =0x0000FFA8 - strh r1, [r0] - adds r1, #0x22 - strh r1, [r0, #2] - strh r2, [r0, #8] - strh r2, [r0, #0xa] - movs r3, #0x80 - lsls r3, r3, #1 - strh r3, [r0, #0xc] - strh r2, [r0, #0xe] - strh r2, [r0, #0x14] - movs r1, #0xfb - strh r1, [r0, #0x24] - strh r2, [r0, #0x26] - strh r2, [r0, #0x2c] - strh r2, [r0, #0x18] - strh r2, [r0, #0x1a] - mov r1, r8 - mov r0, ip - strh r1, [r0] - strh r6, [r0, #2] - strh r2, [r0, #8] - strh r2, [r0, #0xa] - strb r4, [r0, #0xc] - ldr r0, _08009768 @ =gUnknown_0201C1B8 - strb r5, [r0] - ldr r1, _0800976C @ =gUnknown_0202ADD4 - movs r0, #0x10 - strb r0, [r1] - ldr r0, _08009770 @ =gUnknown_0202C594 - strh r2, [r0] - ldr r0, _08009774 @ =gUnknown_02019C30 - str r3, [r0] - ldr r0, _08009778 @ =gUnknown_0201C188 - str r3, [r0] - ldr r0, _0800977C @ =gUnknown_0202BF10 - strh r2, [r0] - ldr r0, _08009780 @ =gUnknown_0202A578 - strh r2, [r0] - ldr r1, _08009784 @ =gUnknown_0202BEF0 - movs r0, #0x20 - str r0, [r1] - ldr r1, _08009788 @ =gUnknown_0202C5A8 - movs r0, #8 - strb r0, [r1] - pop {r3} - mov r8, r3 - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_0800975C: .4byte gUnknown_0201A450 -_08009760: .4byte gUnknown_0202ADA0 -_08009764: .4byte 0x0000FFA8 -_08009768: .4byte gUnknown_0201C1B8 -_0800976C: .4byte gUnknown_0202ADD4 -_08009770: .4byte gUnknown_0202C594 -_08009774: .4byte gUnknown_02019C30 -_08009778: .4byte gUnknown_0201C188 -_0800977C: .4byte gUnknown_0202BF10 -_08009780: .4byte gUnknown_0202A578 -_08009784: .4byte gUnknown_0202BEF0 -_08009788: .4byte gUnknown_0202C5A8 - thumb_func_start sub_978C sub_978C: @ 0x0800978C push {r4, r5, r6, lr} diff --git a/include/functions.h b/include/functions.h index f031217..c246e50 100644 --- a/include/functions.h +++ b/include/functions.h @@ -168,7 +168,7 @@ extern s8 sub_FD20(void); extern void sub_FD5C(void (*func)(void)); extern void sub_FE04(void (*func)(void)); //extern ? sub_FEB8(); -//extern ? sub_FF74(); +extern void sub_FF74(void (*func)(void)); extern void sub_1001C(int); //extern ? sub_10170(); //extern ? sub_102A8(); @@ -179,25 +179,27 @@ extern void sub_1050C(void); //extern ? sub_10544(); //extern ? sub_105A0(); +// src/intro.c +extern void IntroMain(void); +extern void sub_929C(void); +extern void sub_9348(void); +extern void sub_9370(void); +extern void sub_938C(void); +extern void sub_93D0(void); +extern void sub_93F8(void); +extern void sub_9498(void); +extern void sub_96A8(void); + // asm/intro.s -//extern ? IntroMain(); -//extern ? sub_929C(); -//extern ? sub_9348(); -//extern ? sub_9370(); -//extern ? sub_938C(); -//extern ? sub_93D0(); -//extern ? sub_93F8(); -//extern ? sub_9498(); -//extern ? sub_96A8(); -//extern ? sub_978C(); -//extern ? sub_9830(); -//extern ? sub_9878(); -//extern ? sub_98B4(); -//extern ? sub_9920(); -//extern ? sub_999C(); -//extern ? sub_9AB8(); -//extern ? nullsub_4(); +extern void sub_978C(void); +extern void sub_9830(void); +extern void sub_9878(void); +extern void sub_98B4(void); +extern void sub_9920(void); +extern void sub_999C(void); +extern void sub_9AB8(void); +extern void nullsub_4(void); //extern ? sub_9C10(); //extern ? nullsub_5(); //extern ? nullsub_17(); diff --git a/ld_script.txt b/ld_script.txt index a634bdc..dae6249 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -41,6 +41,7 @@ SECTIONS asm/pokedex.o(.text); src/pokedex_end.o(.text); src/field_select.o(.text); + src/intro.o(.text); asm/intro.o(.text); src/high_scores.o(.text); asm/high_scores.o(.text); diff --git a/src/intro.c b/src/intro.c new file mode 100644 index 0000000..3f1a62b --- /dev/null +++ b/src/intro.c @@ -0,0 +1,231 @@ +#include "global.h" +#include "functions.h" +#include "main.h" +#include "m4a.h" +#include "titlescreen.h" + +extern void sub_10170(u8 *, u32, u32, u32); +void sub_FEB8(u32, u8 *, u32); + +extern StateFunc gIntroStateFuncs[15]; +extern u8 gUnknown_080798C0[]; + +extern u8 gIntroCopyright_Gfx[]; +extern u8 gIntroCopyright_Pal[]; +extern u8 gIntroScene1Sprites_Gfx[]; +extern u8 gIntroScene1Sprites_Pals[]; + +extern u8 gUnknown_080B9CC0[]; +extern u8 gUnknown_080BC4C0[]; +extern u8 gUnknown_080BB4C0[]; +extern u8 gUnknown_080B3CA0[]; +extern u8 gUnknown_080B44A0[]; +extern u8 gUnknown_080BD4C0[]; + +extern u8 gUnknown_0201C1C0[]; +extern u16 gUnknown_0202ADA0[]; +extern s16 gUnknown_0202BF10; +extern u8 gUnknown_0201C1B8; +extern u8 gUnknown_0202ADD4; +extern u16 gUnknown_0202C594; +extern u32 gUnknown_02019C30; +extern u32 gUnknown_0201C188; +extern s16 gUnknown_0202A578; +extern u32 gUnknown_0202BEF0; +extern s8 gUnknown_0202C5A8; +extern s8 gUnknown_0202C790; + +typedef void (*OtherFunc)(void); +extern OtherFunc gUnknown_080792E0[10]; + +struct unkStruct_201A450 +{ + u16 unk0; + u16 unk2; + u8 fill4[0x8 - 4]; + s16 unk8; + u16 unkA; + u8 unkC; + u8 fillD[0x10 - 0xD]; + u16 unk10; + u16 unk12; + u8 fill14[0x18 - 0x14]; + u16 unk18; + u16 fill1A; + u8 unk1C; + u8 fill1D[0x20 - 0x1D]; + u16 unk20; + u16 unk22; + u8 fill24[0x2C - 0x24]; + u8 unk2C; + u8 fill2D[0x30 - 0x2D]; + u16 unk30; + u16 unk32; + u8 fill34[0x3A - 0x34]; + u16 unk3A; + u8 unk3C; + u8 fill3D[0x40 - 0x3D]; + u16 unk40; + u16 unk42; + u8 fill44[0x4C - 0x44]; + u8 unk4C; +}; + +extern struct unkStruct_201A450 gUnknown_0201A450; + +void IntroMain(void) { + gIntroStateFuncs[gMain.subState](); +} + +void sub_929C(void) { + ResetSomeGraphicsRelatedStuff(); + REG_DISPCNT = 0x80; + REG_BG1CNT = 5; + REG_DISPCNT |= DISPCNT_BG1_ON; + + DmaCopy16(3, gUnknown_080798C0, BG_CHAR_ADDR(0), BG_SCREEN_SIZE); + DmaCopy16(3, gIntroCopyright_Gfx, BG_CHAR_ADDR(1), BG_SCREEN_SIZE); + DmaCopy16(3, gIntroCopyright_Pal, BG_PLTT, BG_PLTT_SIZE); + + gMain.unk16 = REG_DISPCNT; + gUnknown_0202BF10 = 0; + gUnknown_0202C790 = 0; + + SetMainCallback(sub_93F8 + 1); + sub_0CBC(); + sub_024C(); + gMain.subState++; +} + +void sub_9348(void) { + gUnknown_0202BF10++; + if(gUnknown_0202BF10 > 0x78) + { + gUnknown_0202BF10 = 0; + gMain.subState++; + } +} + +void sub_9370(void) { + sub_FF74(NULL); + sub_0D10(); + gMain.subState++; +} + +void sub_938C(void) { + gUnknown_080792E0[gUnknown_0202C790](); + gUnknown_0202BF10++; + if(gMain.newKeys & (A_BUTTON | START_BUTTON)) + gMain.subState = 4; +} + +void sub_93D0(void) { + sub_02B4(); + m4aMPlayAllStop(); + sub_0D10(); + ResetMainCallback(); + gAutoDisplayTitlescreenMenu = 0; + SetMainGameState(STATE_TITLE); +} + +void sub_93F8(void) { + if(REG_DISPSTAT & DISPSTAT_VBLANK_INTR) + { + m4aSoundMain(); + VBlankIntrWait(); + DmaCopy16(3, gOamBuffer , OAM, 0x8000200); + REG_DISPCNT = gMain.unk16; + REG_BG0HOFS = gMain.unk2E8[0].unk0; + REG_BG0VOFS = gMain.unk2E8[0].unk2; + REG_BG1HOFS = gMain.unk2E8[1].unk0; + REG_BG1VOFS = gMain.unk2E8[1].unk2; + REG_BG2HOFS = gMain.unk2E8[2].unk0; + REG_BG2VOFS = gMain.unk2E8[2].unk2; + REG_BG3HOFS = gMain.unk2E8[3].unk0; + REG_BG3VOFS = gMain.unk2E8[3].unk2; + } +} + +void sub_9498(void) { + ClearGraphicsMemory(); + sub_0518(); + ClearSprites(); + + REG_DISPCNT = DISPCNT_OBJ_ON; + REG_BG0CNT = 0xD0 << 5; + REG_DISPCNT |= (DISPCNT_BG0_ON); + REG_BG1CNT = 0x5B01; + REG_DISPCNT |= (DISPCNT_BG1_ON); + REG_BG2CNT = 0x5d02; + REG_DISPCNT |= (DISPCNT_BG2_ON); + REG_BG3CNT = 0x1f03; + REG_DISPCNT |= (DISPCNT_BG3_ON); + + DmaCopy16(3, gUnknown_080B9CC0, 0x0600d000, BG_SCREEN_SIZE); + DmaCopy16(3, gUnknown_080BC4C0, 0x0600d800, 0x1000); + DmaCopy16(3, gUnknown_080BB4C0, 0x0600e800 , 0x1000); + DmaCopy16(3, gUnknown_080B3CA0, 0x0600f800 , BG_SCREEN_SIZE); + DmaCopy16(3, gUnknown_080B44A0, BG_CHAR_ADDR(0), 0x5800); + DmaCopy16(3, gUnknown_080BD4C0, gUnknown_0201C1C0, 0x6800); + sub_10170(gIntroScene1Sprites_Pals, BG_PLTT, BG_PLTT_SIZE, 0x20); + DmaCopy16(3, gIntroScene1Sprites_Gfx, BG_CHAR_ADDR(4), 0x8000); + DmaCopy16(3, gIntroScene1Sprites_Pals, 0x05000200, BG_PLTT_SIZE); + sub_96A8(); + gMain.unk2E8[0].unk0 = gUnknown_0202ADA0[0]; + gMain.unk2E8[0].unk2 = gUnknown_0202ADA0[1]; + gMain.unk2E8[1].unk0 = gUnknown_0202ADA0[18]; + gMain.unk2E8[1].unk2 = gUnknown_0202ADA0[19]; + gMain.unk2E8[2].unk0 = gUnknown_0202ADA0[6]; + gMain.unk2E8[2].unk2 = gUnknown_0202ADA0[7]; + gMain.unk2E8[3].unk0 = gUnknown_0202ADA0[12]; + gMain.unk2E8[3].unk2 = gUnknown_0202ADA0[13]; + sub_0CBC(); + sub_FEB8(BG_PLTT, gIntroScene1Sprites_Pals, 0); + DmaCopy16(3, gIntroScene1Sprites_Pals, 0x05000200, BG_PLTT_SIZE); + DmaCopy16(3, 0, 0x05000200, 0x20); + gUnknown_0202C790++; +} + +void sub_96A8(void) +{ + gUnknown_0201A450.unk10 = 0x78; + gUnknown_0201A450.unk12 = 0x50; + gUnknown_0201A450.unk18 = 0; + gUnknown_0201A450.unk1C = 1; + gUnknown_0201A450.unk30 = 0x9c; + gUnknown_0201A450.unk32 = 0x92; + gUnknown_0201A450.unk3C = 0; + gUnknown_0201A450.unk3A = 0; + gUnknown_0201A450.unk20 = 0x9d; + gUnknown_0201A450.unk22 = 0x93; + gUnknown_0201A450.unk2C = 0; + gUnknown_0201A450.unk40 = 0x80; + gUnknown_0201A450.unk42 = 0x80; + gUnknown_0201A450.unk4C = 1; + gUnknown_0202ADA0[0] = 0xffa8; + gUnknown_0202ADA0[1] = 0xffca; + gUnknown_0202ADA0[4] = 0; + gUnknown_0202ADA0[5] = 0; + gUnknown_0202ADA0[6] = 0x100; + gUnknown_0202ADA0[7] = 0; + gUnknown_0202ADA0[10] = 0; + gUnknown_0202ADA0[18] = 0xfb; + gUnknown_0202ADA0[19] = 0; + gUnknown_0202ADA0[22] = 0; + gUnknown_0202ADA0[12] = 0; + gUnknown_0202ADA0[13] = 0; + gUnknown_0201A450.unk0 = 0x78; + gUnknown_0201A450.unk2 = 0x50; + gUnknown_0201A450.unk8 = 0; + gUnknown_0201A450.unkA = 0; + gUnknown_0201A450.unkC = 1; + gUnknown_0201C1B8 = 0; + gUnknown_0202ADD4 = 0x10; + gUnknown_0202C594 = 0; + gUnknown_02019C30 = 0x100; + gUnknown_0201C188 = 0x100; + gUnknown_0202BF10 = 0; + gUnknown_0202A578 = 0; + gUnknown_0202BEF0 = 0x20; + gUnknown_0202C5A8 = 8; +}