summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <cameronghall@cox.net>2019-08-11 13:11:32 -0500
committerCameron Hall <cameronghall@cox.net>2019-08-11 13:11:32 -0500
commitb0870ee7fbf34fe4fa8bf6a622a3c46aa326f1fb (patch)
treed460bab4119ca6326b0e71787c63794b52835fbd
parent4c8669a3aad601f1381ca9c67c78040ce80157df (diff)
decompile through sub_51C3C
-rwxr-xr-x.gitignore2
-rwxr-xr-xasm/options.s1257
-rw-r--r--include/functions.h14
-rwxr-xr-xinclude/main.h7
-rw-r--r--include/variables.h3
-rwxr-xr-xld_script.txt1
-rwxr-xr-xsrc/gbplayer.c3
-rw-r--r--src/options.c501
8 files changed, 517 insertions, 1271 deletions
diff --git a/.gitignore b/.gitignore
index bf28bd3..725d77c 100755
--- a/.gitignore
+++ b/.gitignore
@@ -29,4 +29,4 @@ build/
*.ddump
baserom.*
*.swp
-
+*.swo
diff --git a/asm/options.s b/asm/options.s
index 438dee1..d2938b9 100755
--- a/asm/options.s
+++ b/asm/options.s
@@ -4,1263 +4,6 @@
.text
- thumb_func_start OptionsMain
-OptionsMain: @ 0x08051220
- push {lr}
- ldr r1, _08051238 @ =gUnknown_08527F08
- ldr r0, _0805123C @ =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
-_08051238: .4byte gUnknown_08527F08
-_0805123C: .4byte gMain
-
- thumb_func_start sub_51240
-sub_51240: @ 0x08051240
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- sub sp, #4
- bl sub_438
- movs r2, #0x80
- lsls r2, r2, #0x13
- movs r1, #0x84
- lsls r1, r1, #5
- adds r0, r1, #0
- strh r0, [r2]
- ldr r1, _08051358 @ =0x04000008
- movs r0, #4
- strh r0, [r1]
- ldrh r0, [r2]
- movs r3, #0x80
- lsls r3, r3, #1
- adds r1, r3, #0
- orrs r0, r1
- strh r0, [r2]
- ldr r1, _0805135C @ =0x0400000A
- adds r3, #9
- adds r0, r3, #0
- strh r0, [r1]
- ldrh r0, [r2]
- adds r3, #0xf7
- adds r1, r3, #0
- orrs r0, r1
- strh r0, [r2]
- ldr r0, _08051360 @ =gMain
- mov sb, r0
- ldrh r0, [r2]
- mov r1, sb
- strh r0, [r1, #0x16]
- ldr r5, _08051364 @ =0x040000D4
- ldr r0, _08051368 @ =gUnknown_0852B468
- str r0, [r5]
- movs r0, #0xa0
- lsls r0, r0, #0x13
- str r0, [r5, #4]
- ldr r0, _0805136C @ =0x80000100
- str r0, [r5, #8]
- ldr r0, [r5, #8]
- ldr r0, _08051370 @ =gUnknown_08528828
- str r0, [r5]
- ldr r0, _08051374 @ =0x06004000
- str r0, [r5, #4]
- ldr r0, _08051378 @ =0x80000C00
- str r0, [r5, #8]
- ldr r0, [r5, #8]
- ldr r0, _0805137C @ =gUnknown_0852A848
- str r0, [r5]
- ldr r0, _08051380 @ =0x06008000
- str r0, [r5, #4]
- ldr r0, _08051384 @ =0x80000600
- str r0, [r5, #8]
- ldr r0, [r5, #8]
- ldr r0, _08051388 @ =gUnknown_08528028
- str r0, [r5]
- ldr r7, _0805138C @ =gUnknown_03005C00
- str r7, [r5, #4]
- ldr r6, _08051390 @ =0x80000400
- str r6, [r5, #8]
- ldr r0, [r5, #8]
- str r7, [r5]
- movs r3, #0xc0
- lsls r3, r3, #0x13
- mov r8, r3
- str r3, [r5, #4]
- str r6, [r5, #8]
- ldr r0, [r5, #8]
- ldr r0, _08051394 @ =gGameBoyPlayerEnabled
- ldr r0, [r0]
- cmp r0, #1
- beq _080512F8
- movs r4, #2
- str r4, [sp]
- movs r0, #0x12
- movs r1, #4
- movs r2, #2
- movs r3, #1
- bl sub_1068C
- str r4, [sp]
- movs r0, #0x12
- movs r1, #5
- movs r2, #3
- movs r3, #2
- bl sub_1068C
-_080512F8:
- str r7, [r5]
- mov r0, r8
- str r0, [r5, #4]
- str r6, [r5, #8]
- ldr r0, [r5, #8]
- ldr r0, _08051398 @ =gUnknown_0852A048
- str r0, [r5]
- ldr r0, _0805139C @ =0x06000800
- str r0, [r5, #4]
- str r6, [r5, #8]
- ldr r0, [r5, #8]
- ldr r0, _080513A0 @ =gGBAButtonIcons_Pals
- str r0, [r5]
- ldr r0, _080513A4 @ =0x05000200
- str r0, [r5, #4]
- ldr r0, _080513A8 @ =0x80000030
- str r0, [r5, #8]
- ldr r0, [r5, #8]
- ldr r0, _080513AC @ =gOptionsSprites_Gfx
- str r0, [r5]
- ldr r0, _080513B0 @ =0x06010000
- str r0, [r5, #4]
- ldr r0, _080513B4 @ =0x80001010
- str r0, [r5, #8]
- ldr r0, [r5, #8]
- bl sub_513B8
- bl sub_51C9C
- bl m4aMPlayAllStop
- bl sub_CBC
- bl sub_24C
- bl sub_10C0
- mov r1, sb
- ldrb r0, [r1, #3]
- adds r0, #1
- strb r0, [r1, #3]
- add sp, #4
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08051358: .4byte 0x04000008
-_0805135C: .4byte 0x0400000A
-_08051360: .4byte gMain
-_08051364: .4byte 0x040000D4
-_08051368: .4byte gUnknown_0852B468
-_0805136C: .4byte 0x80000100
-_08051370: .4byte gUnknown_08528828
-_08051374: .4byte 0x06004000
-_08051378: .4byte 0x80000C00
-_0805137C: .4byte gUnknown_0852A848
-_08051380: .4byte 0x06008000
-_08051384: .4byte 0x80000600
-_08051388: .4byte gUnknown_08528028
-_0805138C: .4byte gUnknown_03005C00
-_08051390: .4byte 0x80000400
-_08051394: .4byte gGameBoyPlayerEnabled
-_08051398: .4byte gUnknown_0852A048
-_0805139C: .4byte 0x06000800
-_080513A0: .4byte gGBAButtonIcons_Pals
-_080513A4: .4byte 0x05000200
-_080513A8: .4byte 0x80000030
-_080513AC: .4byte gOptionsSprites_Gfx
-_080513B0: .4byte 0x06010000
-_080513B4: .4byte 0x80001010
-
- thumb_func_start sub_513B8
-sub_513B8: @ 0x080513B8
- push {r4, r5, r6, lr}
- ldr r0, _08051468 @ =gUnknown_02002920
- mov ip, r0
- movs r2, #0
- movs r1, #0
- strh r1, [r0]
- strh r1, [r0, #2]
- strh r1, [r0, #4]
- movs r3, #1
- movs r0, #1
- mov r4, ip
- strh r0, [r4, #6]
- strh r1, [r4, #8]
- strh r1, [r4, #0xa]
- ldr r0, _0805146C @ =gMain+0x74
- adds r0, #0xcf
- ldrb r0, [r0]
- strh r0, [r4, #0xc]
- strh r1, [r4, #0xe]
- strh r1, [r4, #0x10]
- strb r2, [r4, #0x12]
- strb r2, [r4, #0x13]
- strb r3, [r4, #0x14]
- strb r2, [r4, #0x15]
- strb r2, [r4, #0x16]
- strb r3, [r4, #0x17]
- strh r1, [r4, #0x18]
- mov r2, ip
- movs r3, #0
- movs r1, #5
- adds r0, r2, #0
- adds r0, #0x1f
-_080513F8:
- strb r3, [r0]
- subs r0, #1
- subs r1, #1
- cmp r1, #0
- bge _080513F8
- movs r0, #0
- strh r0, [r2, #0x20]
- strh r0, [r2, #0x22]
- movs r3, #0xa
- movs r1, #1
- adds r0, r2, #0
- adds r0, #0x26
-_08051410:
- strh r3, [r0]
- subs r0, #2
- subs r1, #1
- cmp r1, #0
- bge _08051410
- movs r0, #0
- strh r0, [r2, #0x28]
- movs r1, #0
- ldr r6, _08051470 @ =gUnknown_02031AF0
- ldr r5, _08051474 @ =gUnknown_08527ED6
-_08051424:
- adds r4, r1, #1
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #1
- adds r2, r0, r5
- adds r1, r0, r6
- movs r3, #9
-_08051432:
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, #1
- adds r1, #1
- subs r3, #1
- cmp r3, #0
- bge _08051432
- adds r1, r4, #0
- cmp r1, #3
- ble _08051424
- bl sub_52528
- ldr r0, _08051478 @ =gGameBoyPlayerEnabled
- ldr r4, [r0]
- cmp r4, #1
- bne _0805147C
- ldr r3, _08051468 @ =gUnknown_02002920
- ldr r0, _0805146C @ =gMain+0x74
- adds r0, #0xcd
- ldrb r1, [r0]
- adds r2, r3, #0
- adds r2, #0x2a
- strb r1, [r2]
- strb r4, [r0]
- adds r2, r3, #0
- b _0805148C
- .align 2, 0
-_08051468: .4byte gUnknown_02002920
-_0805146C: .4byte gMain+0x74
-_08051470: .4byte gUnknown_02031AF0
-_08051474: .4byte gUnknown_08527ED6
-_08051478: .4byte gGameBoyPlayerEnabled
-_0805147C:
- ldr r2, _080514B0 @ =gUnknown_02002920
- adds r0, r2, #0
- adds r0, #0x2a
- movs r1, #0
- strb r1, [r0]
- ldr r0, _080514B4 @ =gMain+0x74
- adds r0, #0xcd
- strb r1, [r0]
-_0805148C:
- adds r1, r2, #0
- adds r1, #0x2e
- movs r0, #0
- strb r0, [r1]
- subs r1, #3
- strb r0, [r1]
- adds r1, #1
- strb r0, [r1]
- adds r1, #1
- strb r0, [r1]
- adds r1, #2
- strb r0, [r1]
- adds r1, #1
- strb r0, [r1]
- pop {r4, r5, r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080514B0: .4byte gUnknown_02002920
-_080514B4: .4byte gMain+0x74
-
- thumb_func_start sub_514B8
-sub_514B8: @ 0x080514B8
- push {r4, r5, r6, r7, lr}
- bl sub_51C9C
- ldr r0, _080514D4 @ =gUnknown_02002920
- movs r1, #0
- ldrsh r0, [r0, r1]
- cmp r0, #4
- bls _080514CA
- b _08051B98
-_080514CA:
- lsls r0, r0, #2
- ldr r1, _080514D8 @ =_080514DC
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080514D4: .4byte gUnknown_02002920
-_080514D8: .4byte _080514DC
-_080514DC: @ jump table
- .4byte _080514F0 @ case 0
- .4byte _080517A8 @ case 1
- .4byte _080518D4 @ case 2
- .4byte _08051A08 @ case 3
- .4byte _08051AB8 @ case 4
-_080514F0:
- ldr r0, _08051514 @ =gMain
- ldrh r1, [r0, #0x18]
- movs r0, #0x40
- ands r0, r1
- cmp r0, #0
- beq _0805152C
- ldr r4, _08051518 @ =gUnknown_02002920
- movs r2, #0xa
- ldrsh r0, [r4, r2]
- cmp r0, #0xd
- beq _0805156C
- cmp r0, #0xe
- bne _0805151C
- movs r0, #0x67
- bl m4aSongNumStart
- movs r0, #0xd
- b _0805156A
- .align 2, 0
-_08051514: .4byte gMain
-_08051518: .4byte gUnknown_02002920
-_0805151C:
- cmp r0, #0
- ble _0805156C
- movs r0, #0x67
- bl m4aSongNumStart
- ldrh r0, [r4, #0xa]
- subs r0, #1
- b _0805156A
-_0805152C:
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _0805156C
- ldr r4, _0805154C @ =gUnknown_02002920
- movs r3, #0xa
- ldrsh r0, [r4, r3]
- cmp r0, #5
- bgt _08051550
- movs r0, #0x67
- bl m4aSongNumStart
- ldrh r0, [r4, #0xa]
- adds r0, #1
- b _0805156A
- .align 2, 0
-_0805154C: .4byte gUnknown_02002920
-_08051550:
- cmp r0, #0xd
- bne _0805155E
- movs r0, #0x67
- bl m4aSongNumStart
- movs r0, #0xe
- b _0805156A
-_0805155E:
- cmp r0, #0xe
- bne _0805156C
- movs r0, #0x67
- bl m4aSongNumStart
- movs r0, #2
-_0805156A:
- strh r0, [r4, #0xa]
-_0805156C:
- ldr r0, _080515E8 @ =gMain
- ldrh r1, [r0, #0x18]
- movs r0, #0x10
- ands r0, r1
- cmp r0, #0
- beq _08051594
- ldr r0, _080515EC @ =gGameBoyPlayerEnabled
- ldr r0, [r0]
- cmp r0, #1
- bne _08051594
- ldr r4, _080515F0 @ =gUnknown_02002920
- ldrh r0, [r4, #0xa]
- cmp r0, #1
- bhi _08051594
- movs r0, #0x67
- bl m4aSongNumStart
- ldrh r0, [r4, #0xa]
- adds r0, #0xd
- strh r0, [r4, #0xa]
-_08051594:
- ldr r0, _080515E8 @ =gMain
- ldrh r1, [r0, #0x18]
- movs r0, #0x20
- ands r0, r1
- cmp r0, #0
- beq _080515C2
- ldr r0, _080515EC @ =gGameBoyPlayerEnabled
- ldr r0, [r0]
- cmp r0, #1
- bne _080515C2
- ldr r4, _080515F0 @ =gUnknown_02002920
- ldrh r0, [r4, #0xa]
- subs r0, #0xd
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- cmp r0, #1
- bhi _080515C2
- movs r0, #0x67
- bl m4aSongNumStart
- ldrh r0, [r4, #0xa]
- subs r0, #0xd
- strh r0, [r4, #0xa]
-_080515C2:
- ldr r4, _080515E8 @ =gMain
- ldrh r1, [r4, #0x18]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _080515D0
- b _0805177C
-_080515D0:
- ldr r0, _080515F0 @ =gUnknown_02002920
- movs r6, #0xa
- ldrsh r0, [r0, r6]
- cmp r0, #0xe
- bls _080515DC
- b _08051A96
-_080515DC:
- lsls r0, r0, #2
- ldr r1, _080515F4 @ =_080515F8
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080515E8: .4byte gMain
-_080515EC: .4byte gGameBoyPlayerEnabled
-_080515F0: .4byte gUnknown_02002920
-_080515F4: .4byte _080515F8
-_080515F8: @ jump table
- .4byte _08051634 @ case 0
- .4byte _08051674 @ case 1
- .4byte _080516B0 @ case 2
- .4byte _080516B0 @ case 3
- .4byte _080516B0 @ case 4
- .4byte _080516B0 @ case 5
- .4byte _080516D0 @ case 6
- .4byte _08051A96 @ case 7
- .4byte _08051A96 @ case 8
- .4byte _08051A96 @ case 9
- .4byte _08051A96 @ case 10
- .4byte _08051A96 @ case 11
- .4byte _08051A96 @ case 12
- .4byte _08051738 @ case 13
- .4byte _080516F8 @ case 14
-_08051634:
- movs r0, #0x65
- bl m4aSongNumStart
- ldr r3, _08051670 @ =gUnknown_02002920
- movs r4, #0
- movs r1, #0
- movs r2, #1
- movs r0, #1
- strh r0, [r3]
- strh r1, [r3, #0x18]
- adds r0, r3, #0
- adds r0, #0x30
- strb r2, [r0]
- adds r1, r3, #0
- adds r1, #0x2e
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #1
- beq _0805165C
- b _08051A96
-_0805165C:
- adds r0, r3, #0
- adds r0, #0x2b
- strb r4, [r0]
- adds r0, #2
- strb r4, [r0]
- subs r0, #1
- strb r4, [r0]
- strb r4, [r1]
- b _08051A96
- .align 2, 0
-_08051670: .4byte gUnknown_02002920
-_08051674:
- movs r0, #0x65
- bl m4aSongNumStart
- ldr r2, _080516AC @ =gUnknown_02002920
- movs r3, #0
- movs r1, #0
- movs r0, #2
- strh r0, [r2]
- strh r1, [r2, #0x18]
- adds r1, r2, #0
- adds r1, #0x30
- movs r0, #1
- strb r0, [r1]
- subs r1, #2
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #1
- beq _0805169A
- b _08051A96
-_0805169A:
- adds r0, r2, #0
- adds r0, #0x2b
- strb r3, [r0]
- adds r0, #2
- strb r3, [r0]
- subs r0, #1
- strb r3, [r0]
- strb r3, [r1]
- b _08051A96
- .align 2, 0
-_080516AC: .4byte gUnknown_02002920
-_080516B0:
- movs r0, #0x65
- bl m4aSongNumStart
- ldr r0, _080516C8 @ =gUnknown_02002920
- ldrh r1, [r0, #0xa]
- subs r1, #2
- strh r1, [r0, #0xc]
- ldr r0, _080516CC @ =gMain+0x74
- adds r0, #0xcf
- strb r1, [r0]
- b _08051A96
- .align 2, 0
-_080516C8: .4byte gUnknown_02002920
-_080516CC: .4byte gMain+0x74
-_080516D0:
- movs r0, #0x65
- bl m4aSongNumStart
- ldr r2, _080516F0 @ =gUnknown_02002920
- ldrh r1, [r2, #0xa]
- subs r1, #2
- strh r1, [r2, #0xc]
- ldr r0, _080516F4 @ =gMain+0x74
- adds r0, #0xcf
- strb r1, [r0]
- movs r0, #7
- strh r0, [r2, #0xa]
- movs r0, #3
- strh r0, [r2]
- b _08051A96
- .align 2, 0
-_080516F0: .4byte gUnknown_02002920
-_080516F4: .4byte gMain+0x74
-_080516F8:
- ldr r0, _08051730 @ =gGameBoyPlayerEnabled
- ldr r0, [r0]
- cmp r0, #1
- beq _08051702
- b _08051A96
-_08051702:
- movs r0, #0x65
- bl m4aSongNumStart
- ldr r1, _08051734 @ =gUnknown_02002920
- adds r0, r1, #0
- adds r0, #0x2d
- movs r2, #0
- strb r2, [r0]
- adds r3, r1, #0
- adds r3, #0x2e
- movs r0, #0
- ldrsb r0, [r3, r0]
- cmp r0, #1
- bne _08051720
- strb r2, [r3]
-_08051720:
- adds r0, r1, #0
- adds r0, #0x2b
- strb r2, [r0]
- adds r0, #1
- strb r2, [r0]
- subs r0, #2
- strb r2, [r0]
- b _08051A96
- .align 2, 0
-_08051730: .4byte gGameBoyPlayerEnabled
-_08051734: .4byte gUnknown_02002920
-_08051738:
- ldr r0, _08051774 @ =gGameBoyPlayerEnabled
- ldr r4, [r0]
- cmp r4, #1
- beq _08051742
- b _08051A96
-_08051742:
- movs r0, #0x65
- bl m4aSongNumStart
- movs r0, #0xb
- bl sub_11B0
- ldr r2, _08051778 @ =gUnknown_02002920
- adds r1, r2, #0
- adds r1, #0x2e
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #0
- bne _0805175E
- strb r4, [r1]
-_0805175E:
- adds r1, r2, #0
- adds r1, #0x2b
- movs r0, #0
- strb r0, [r1]
- adds r1, #1
- strb r0, [r1]
- adds r0, r2, #0
- adds r0, #0x2a
- strb r4, [r0]
- b _08051A96
- .align 2, 0
-_08051774: .4byte gGameBoyPlayerEnabled
-_08051778: .4byte gUnknown_02002920
-_0805177C:
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- bne _08051786
- b _08051A96
-_08051786:
- movs r0, #0x66
- bl m4aSongNumStart
- ldrb r0, [r4, #3]
- adds r0, #1
- strb r0, [r4, #3]
- ldr r7, _080517A4 @ =0x00000143
- adds r0, r4, r7
- ldrb r0, [r0]
- lsls r0, r0, #0x18
- asrs r0, r0, #0x18
- bl sub_525CC
- b _08051A96
- .align 2, 0
-_080517A4: .4byte 0x00000143
-_080517A8:
- ldr r1, _080517C8 @ =gMain
- ldrh r2, [r1, #0x1c]
- movs r0, #0x20
- ands r0, r2
- adds r3, r1, #0
- cmp r0, #0
- beq _080517D0
- ldr r0, _080517CC @ =gUnknown_02002920
- movs r2, #0x18
- ldrsh r1, [r0, r2]
- adds r4, r0, #0
- cmp r1, #0
- bne _080517EC
- ldrh r0, [r4, #0xe]
- subs r0, #1
- b _080517E6
- .align 2, 0
-_080517C8: .4byte gMain
-_080517CC: .4byte gUnknown_02002920
-_080517D0:
- movs r0, #0x10
- ands r0, r2
- ldr r4, _080517FC @ =gUnknown_02002920
- cmp r0, #0
- beq _080517EC
- movs r6, #0x18
- ldrsh r0, [r4, r6]
- cmp r0, #0
- bne _080517EC
- ldrh r0, [r4, #0xe]
- adds r0, #1
-_080517E6:
- strh r0, [r4, #0xe]
- movs r0, #0xa
- strh r0, [r4, #0x18]
-_080517EC:
- ldrh r1, [r3, #0x18]
- movs r0, #0x40
- ands r0, r1
- cmp r0, #0
- beq _08051800
- ldrh r0, [r4, #0xe]
- adds r0, #0xa
- b _0805180C
- .align 2, 0
-_080517FC: .4byte gUnknown_02002920
-_08051800:
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _0805180E
- ldrh r0, [r4, #0xe]
- subs r0, #0xa
-_0805180C:
- strh r0, [r4, #0xe]
-_0805180E:
- ldr r5, _08051880 @ =gUnknown_02002920
- movs r7, #0xe
- ldrsh r0, [r5, r7]
- cmp r0, #0
- bge _0805181C
- movs r0, #0x21
- strh r0, [r5, #0xe]
-_0805181C:
- movs r1, #0xe
- ldrsh r0, [r5, r1]
- cmp r0, #0x21
- ble _08051828
- movs r0, #0
- strh r0, [r5, #0xe]
-_08051828:
- ldrh r4, [r5, #0xe]
- adds r4, #1
- lsls r4, r4, #0x10
- asrs r4, r4, #0x10
- adds r0, r4, #0
- movs r1, #0x64
- bl __divsi3
- strb r0, [r5, #0x12]
- adds r0, r4, #0
- movs r1, #0x64
- bl __modsi3
- adds r4, r0, #0
- lsls r4, r4, #0x10
- asrs r4, r4, #0x10
- adds r0, r4, #0
- movs r1, #0xa
- bl __divsi3
- strb r0, [r5, #0x13]
- adds r0, r4, #0
- movs r1, #0xa
- bl __modsi3
- strb r0, [r5, #0x14]
- ldr r0, _08051884 @ =gMain
- ldrh r1, [r0, #0x18]
- movs r4, #1
- ands r4, r1
- cmp r4, #0
- beq _0805188C
- bl m4aMPlayAllStop
- ldr r0, _08051888 @ =gUnknown_08527D22
- movs r2, #0xe
- ldrsh r1, [r5, r2]
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- bl m4aSongNumStart
- b _080518AA
- .align 2, 0
-_08051880: .4byte gUnknown_02002920
-_08051884: .4byte gMain
-_08051888: .4byte gUnknown_08527D22
-_0805188C:
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- beq _080518AA
- bl m4aMPlayAllStop
- movs r0, #0x66
- bl m4aSongNumStart
- movs r1, #0
- strh r4, [r5, #4]
- adds r0, r5, #0
- adds r0, #0x30
- strb r1, [r0]
- strh r4, [r5]
-_080518AA:
- ldr r0, _080518CC @ =gMain
- ldr r0, [r0, #0x4c]
- movs r1, #7
- ands r0, r1
- cmp r0, #0
- bne _080518C0
- ldr r2, _080518D0 @ =gUnknown_02002920
- ldrh r1, [r2, #4]
- movs r0, #1
- subs r0, r0, r1
- strh r0, [r2, #4]
-_080518C0:
- ldr r1, _080518D0 @ =gUnknown_02002920
- ldrh r2, [r1, #0x18]
- movs r3, #0x18
- ldrsh r0, [r1, r3]
- b _080519F4
- .align 2, 0
-_080518CC: .4byte gMain
-_080518D0: .4byte gUnknown_02002920
-_080518D4:
- ldr r1, _080518F4 @ =gMain
- ldrh r2, [r1, #0x1c]
- movs r0, #0x20
- ands r0, r2
- adds r3, r1, #0
- cmp r0, #0
- beq _080518FC
- ldr r0, _080518F8 @ =gUnknown_02002920
- movs r6, #0x18
- ldrsh r1, [r0, r6]
- adds r4, r0, #0
- cmp r1, #0
- bne _08051918
- ldrh r0, [r4, #0x10]
- subs r0, #1
- b _08051912
- .align 2, 0
-_080518F4: .4byte gMain
-_080518F8: .4byte gUnknown_02002920
-_080518FC:
- movs r0, #0x10
- ands r0, r2
- ldr r4, _08051928 @ =gUnknown_02002920
- cmp r0, #0
- beq _08051918
- movs r7, #0x18
- ldrsh r0, [r4, r7]
- cmp r0, #0
- bne _08051918
- ldrh r0, [r4, #0x10]
- adds r0, #1
-_08051912:
- strh r0, [r4, #0x10]
- movs r0, #0xa
- strh r0, [r4, #0x18]
-_08051918:
- ldrh r1, [r3, #0x18]
- movs r0, #0x40
- ands r0, r1
- cmp r0, #0
- beq _0805192C
- ldrh r0, [r4, #0x10]
- adds r0, #0xa
- b _08051938
- .align 2, 0
-_08051928: .4byte gUnknown_02002920
-_0805192C:
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _0805193A
- ldrh r0, [r4, #0x10]
- subs r0, #0xa
-_08051938:
- strh r0, [r4, #0x10]
-_0805193A:
- ldr r5, _080519AC @ =gUnknown_02002920
- movs r1, #0x10
- ldrsh r0, [r5, r1]
- cmp r0, #0
- bge _08051948
- movs r0, #0xb7
- strh r0, [r5, #0x10]
-_08051948:
- movs r2, #0x10
- ldrsh r0, [r5, r2]
- cmp r0, #0xb7
- ble _08051954
- movs r0, #0
- strh r0, [r5, #0x10]
-_08051954:
- ldrh r4, [r5, #0x10]
- adds r4, #1
- lsls r4, r4, #0x10
- asrs r4, r4, #0x10
- adds r0, r4, #0
- movs r1, #0x64
- bl __divsi3
- strb r0, [r5, #0x15]
- adds r0, r4, #0
- movs r1, #0x64
- bl __modsi3
- adds r4, r0, #0
- lsls r4, r4, #0x10
- asrs r4, r4, #0x10
- adds r0, r4, #0
- movs r1, #0xa
- bl __divsi3
- strb r0, [r5, #0x16]
- adds r0, r4, #0
- movs r1, #0xa
- bl __modsi3
- strb r0, [r5, #0x17]
- ldr r0, _080519B0 @ =gMain
- ldrh r1, [r0, #0x18]
- movs r4, #1
- ands r4, r1
- cmp r4, #0
- beq _080519B8
- bl m4aMPlayAllStop
- ldr r0, _080519B4 @ =gUnknown_08527D66
- movs r3, #0x10
- ldrsh r1, [r5, r3]
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- bl m4aSongNumStart
- b _080519D6
- .align 2, 0
-_080519AC: .4byte gUnknown_02002920
-_080519B0: .4byte gMain
-_080519B4: .4byte gUnknown_08527D66
-_080519B8:
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- beq _080519D6
- bl m4aMPlayAllStop
- movs r0, #0x66
- bl m4aSongNumStart
- movs r1, #0
- strh r4, [r5, #4]
- adds r0, r5, #0
- adds r0, #0x30
- strb r1, [r0]
- strh r4, [r5]
-_080519D6:
- ldr r0, _08051A00 @ =gMain
- ldr r0, [r0, #0x4c]
- movs r1, #7
- ands r0, r1
- cmp r0, #0
- bne _080519EC
- ldr r2, _08051A04 @ =gUnknown_02002920
- ldrh r1, [r2, #4]
- movs r0, #1
- subs r0, r0, r1
- strh r0, [r2, #4]
-_080519EC:
- ldr r1, _08051A04 @ =gUnknown_02002920
- ldrh r2, [r1, #0x18]
- movs r6, #0x18
- ldrsh r0, [r1, r6]
-_080519F4:
- cmp r0, #0
- bgt _080519FA
- b _08051B98
-_080519FA:
- subs r0, r2, #1
- strh r0, [r1, #0x18]
- b _08051B98
- .align 2, 0
-_08051A00: .4byte gMain
-_08051A04: .4byte gUnknown_02002920
-_08051A08:
- ldr r0, _08051A2C @ =gMain
- ldrh r1, [r0, #0x18]
- movs r0, #0x40
- ands r0, r1
- cmp r0, #0
- beq _08051A34
- ldr r4, _08051A30 @ =gUnknown_02002920
- movs r7, #0xa
- ldrsh r0, [r4, r7]
- cmp r0, #7
- ble _08051A52
- movs r0, #0x67
- bl m4aSongNumStart
- ldrh r0, [r4, #0xa]
- subs r0, #1
- b _08051A50
- .align 2, 0
-_08051A2C: .4byte gMain
-_08051A30: .4byte gUnknown_02002920
-_08051A34:
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08051A52
- ldr r4, _08051A78 @ =gUnknown_02002920
- movs r1, #0xa
- ldrsh r0, [r4, r1]
- cmp r0, #0xa
- bgt _08051A52
- movs r0, #0x67
- bl m4aSongNumStart
- ldrh r0, [r4, #0xa]
- adds r0, #1
-_08051A50:
- strh r0, [r4, #0xa]
-_08051A52:
- ldr r0, _08051A7C @ =gMain
- ldrh r1, [r0, #0x18]
- movs r4, #1
- ands r4, r1
- cmp r4, #0
- beq _08051A80
- movs r0, #0x65
- bl m4aSongNumStart
- ldr r0, _08051A78 @ =gUnknown_02002920
- movs r1, #4
- strh r1, [r0]
- movs r2, #0xa
- ldrsh r1, [r0, r2]
- adds r0, r0, r1
- movs r1, #1
- strb r1, [r0, #0x13]
- b _08051A96
- .align 2, 0
-_08051A78: .4byte gUnknown_02002920
-_08051A7C: .4byte gMain
-_08051A80:
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- beq _08051A96
- movs r0, #0x66
- bl m4aSongNumStart
- ldr r1, _08051AB0 @ =gUnknown_02002920
- movs r0, #6
- strh r0, [r1, #0xa]
- strh r4, [r1]
-_08051A96:
- ldr r0, _08051AB4 @ =gMain
- ldr r0, [r0, #0x4c]
- movs r1, #7
- ands r0, r1
- cmp r0, #0
- bne _08051B98
- ldr r2, _08051AB0 @ =gUnknown_02002920
- ldrh r1, [r2, #2]
- movs r0, #1
- subs r0, r0, r1
- strh r0, [r2, #2]
- b _08051B98
- .align 2, 0
-_08051AB0: .4byte gUnknown_02002920
-_08051AB4: .4byte gMain
-_08051AB8:
- ldr r4, _08051BF4 @ =gUnknown_02002920
- ldrh r0, [r4, #8]
- adds r0, #1
- movs r5, #0
- strh r0, [r4, #8]
- lsls r0, r0, #0x10
- asrs r0, r0, #0x10
- cmp r0, #0x18
- ble _08051AD4
- strh r5, [r4, #8]
- ldrh r1, [r4, #6]
- movs r0, #1
- subs r0, r0, r1
- strh r0, [r4, #6]
-_08051AD4:
- ldr r0, _08051BF8 @ =gMain
- ldrh r1, [r0, #0x18]
- ldr r0, _08051BFC @ =0x000003F7
- ands r0, r1
- cmp r0, #0
- beq _08051B0E
- movs r0, #0x65
- bl m4aSongNumStart
- movs r0, #0xa
- strh r0, [r4, #0x20]
- strh r5, [r4, #0x22]
- movs r0, #0
- adds r3, r4, #0
- adds r3, #0x24
- movs r2, #0xa
-_08051AF4:
- lsls r1, r0, #0x10
- asrs r1, r1, #0x10
- lsls r0, r1, #1
- adds r0, r0, r3
- strh r2, [r0]
- adds r1, #1
- lsls r1, r1, #0x10
- lsrs r0, r1, #0x10
- asrs r1, r1, #0x10
- cmp r1, #1
- ble _08051AF4
- movs r0, #0
- strh r0, [r4, #0x28]
-_08051B0E:
- ldr r4, _08051BF4 @ =gUnknown_02002920
- movs r3, #0x20
- ldrsh r0, [r4, r3]
- cmp r0, #0
- ble _08051B98
- bl sub_524BC
- ldrh r0, [r4, #0x20]
- subs r0, #1
- strh r0, [r4, #0x20]
- lsls r0, r0, #0x10
- asrs r5, r0, #0x10
- cmp r5, #0
- bne _08051B98
- ldr r2, _08051C00 @ =gUnknown_02031AF0
- movs r6, #0xa
- ldrsh r0, [r4, r6]
- subs r0, #7
- lsls r0, r0, #1
- adds r2, #0x28
- adds r0, r0, r2
- ldrh r1, [r4, #0x24]
- strb r1, [r0]
- movs r7, #0xa
- ldrsh r0, [r4, r7]
- subs r0, #7
- lsls r0, r0, #1
- adds r0, #1
- adds r0, r0, r2
- ldrh r1, [r4, #0x26]
- strb r1, [r0]
- ldr r2, _08051C04 @ =gMain+0x74
- movs r0, #0xa
- ldrsh r1, [r4, r0]
- subs r1, #7
- lsls r1, r1, #2
- adds r0, r2, #0
- adds r0, #0xd0
- adds r1, r1, r0
- ldr r3, _08051C08 @ =gUnknown_086BB910
- movs r6, #0x24
- ldrsh r0, [r4, r6]
- lsls r0, r0, #3
- adds r0, r0, r3
- ldrh r0, [r0]
- strh r0, [r1]
- movs r7, #0xa
- ldrsh r1, [r4, r7]
- subs r1, #7
- lsls r1, r1, #2
- adds r2, #0xd2
- adds r1, r1, r2
- movs r2, #0x26
- ldrsh r0, [r4, r2]
- lsls r0, r0, #3
- adds r0, r0, r3
- ldrh r0, [r0]
- strh r0, [r1]
- movs r0, #3
- strh r0, [r4]
- movs r3, #0xa
- ldrsh r0, [r4, r3]
- adds r0, r4, r0
- adds r0, #0x13
- movs r1, #0
- strb r1, [r0]
- strh r5, [r4, #8]
- movs r0, #1
- strh r0, [r4, #6]
-_08051B98:
- ldr r2, _08051BF4 @ =gUnknown_02002920
- movs r6, #0x2e
- adds r6, r6, r2
- mov ip, r6
- movs r0, #0
- ldrsb r0, [r6, r0]
- cmp r0, #1
- bne _08051C10
- adds r4, r2, #0
- adds r4, #0x2b
- ldrb r0, [r4]
- adds r0, #1
- movs r5, #0
- strb r0, [r4]
- lsls r0, r0, #0x18
- ldr r6, _08051C0C @ =gUnknown_086BB9B4
- adds r3, r2, #0
- adds r3, #0x2c
- movs r1, #0
- ldrsb r1, [r3, r1]
- lsls r1, r1, #2
- adds r1, r1, r6
- asrs r0, r0, #0x18
- movs r7, #2
- ldrsh r1, [r1, r7]
- cmp r0, r1
- ble _08051C30
- strb r5, [r4]
- ldrb r0, [r3]
- adds r0, #1
- strb r0, [r3]
- lsls r0, r0, #0x18
- asrs r0, r0, #0x18
- adds r2, #0x2d
- cmp r0, #0xc
- ble _08051BE8
- strb r5, [r3]
- strb r5, [r2]
- mov r0, ip
- strb r5, [r0]
-_08051BE8:
- movs r0, #0
- ldrsb r0, [r3, r0]
- lsls r0, r0, #2
- adds r0, r0, r6
- ldrb r0, [r0]
- b _08051C2E
- .align 2, 0
-_08051BF4: .4byte gUnknown_02002920
-_08051BF8: .4byte gMain
-_08051BFC: .4byte 0x000003F7
-_08051C00: .4byte gUnknown_02031AF0
-_08051C04: .4byte gMain+0x74
-_08051C08: .4byte gUnknown_086BB910
-_08051C0C: .4byte gUnknown_086BB9B4
-_08051C10:
- adds r1, r2, #0
- adds r1, #0x2b
- ldrb r0, [r1]
- adds r0, #1
- strb r0, [r1]
- lsls r0, r0, #0x18
- asrs r0, r0, #0x18
- cmp r0, #0x12
- ble _08051C30
- movs r0, #0
- strb r0, [r1]
- adds r2, #0x2d
- ldrb r1, [r2]
- movs r0, #1
- subs r0, r0, r1
-_08051C2E:
- strb r0, [r2]
-_08051C30:
- bl sub_11FC
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
-
- thumb_func_start sub_51C3C
-sub_51C3C: @ 0x08051C3C
- push {lr}
- bl sub_111C
- bl sub_1170
- cmp r0, #0
- beq _08051C56
- bl sub_1198
- ldr r1, _08051C5C @ =gMain
- ldrb r0, [r1, #3]
- adds r0, #1
- strb r0, [r1, #3]
-_08051C56:
- pop {r0}
- bx r0
- .align 2, 0
-_08051C5C: .4byte gMain
-
thumb_func_start sub_51C60
sub_51C60: @ 0x08051C60
push {lr}
diff --git a/include/functions.h b/include/functions.h
index 0606057..7d843c5 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -330,14 +330,14 @@ extern void sub_1050C(void);
//extern ? OptionsMain();
//extern ? sub_51240();
-//extern ? sub_513B8();
+extern void sub_513B8(void);
//extern ? sub_514B8();
//extern ? sub_51C3C();
//extern ? sub_51C60();
-//extern ? sub_51C9C();
-//extern ? sub_524BC();
-//extern ? sub_52528();
-//extern ? sub_525CC();
+extern void sub_51C9C(void);
+extern void sub_524BC(void);
+extern void sub_52528(void);
+extern void sub_525CC(s8);
// asm/pokedex.s
@@ -388,7 +388,7 @@ extern void sub_8ABC(void);
// asm/rom_1068C.s
-//extern ? sub_1068C();
+void sub_1068C(int, int, int, int, u16);
extern void sub_10708(void *volatile, void *volatile, s16, s16);
//extern ? sub_10750();
//extern ? sub_10798();
@@ -830,4 +830,4 @@ extern void sub_1175C(void);
extern void sub_11968(void);
extern void sub_11B74(void);
-#endif // GUARD_FUNCTIONS_H \ No newline at end of file
+#endif // GUARD_FUNCTIONS_H
diff --git a/include/main.h b/include/main.h
index 3e0c744..6415742 100755
--- a/include/main.h
+++ b/include/main.h
@@ -11,8 +11,9 @@ struct SaveData
/*0x141*/ u8 unk141;
/*0x142*/ u8 unk142;
/*0x143*/ u8 unk143;
- /*0x144*/ u8 filler144[0x2D8-0x144];
- s8 signature[10];
+ /*0x144*/ //u8 filler144[0x2D8-0x144];
+ u16 unk144[0x65][2];
+ /*0x2D8*/ s8 signature[10];
u16 unk2E2;
u32 unk2E4;
};
@@ -67,7 +68,7 @@ struct Main
extern struct Main gMain;
-extern u8 gUnknown_0200B134[];
+extern struct SaveData gUnknown_0200B134;
extern struct SpriteGroup gUnknown_0200B3B8[];
extern u32 IntrMain_Buffer[0x200];
extern u32 IntrMain[];
diff --git a/include/variables.h b/include/variables.h
index 590ae00..a2112e1 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -3,6 +3,7 @@
// Place all external variable declarations in this file
+extern void (*const gUnknown_08527F08[])(void);
extern u16 gUnknown_0201A520[];
extern u16 gUnknown_0201AD20[];
extern u32 gUnknown_0201A500[];
@@ -172,4 +173,4 @@ 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
+#endif // GUARD_VARIABLES_H
diff --git a/ld_script.txt b/ld_script.txt
index 56aef78..f07c1bd 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -45,6 +45,7 @@ SECTIONS
asm/rom_11B9C.o(.text);
src/rom_3219C.o(.text);
asm/rom_3219C.o(.text);
+ src/options.o(.text);
asm/options.o(.text);
src/rom_528AC.o(.text);
asm/m4a_1.o(.text);
diff --git a/src/gbplayer.c b/src/gbplayer.c
index c0d9655..e2c1cea 100755
--- a/src/gbplayer.c
+++ b/src/gbplayer.c
@@ -291,8 +291,7 @@ void sub_1198(void)
void sub_11B0(int arg0)
{
- if (gUnknown_0200B134[0xCD])
- //if (gMain.saveData.unk141)
+ if (gUnknown_0200B134.unk141)
{
gUnknown_02019BF8 = arg0;
gUnknown_02019BFC = 0;
diff --git a/src/options.c b/src/options.c
new file mode 100644
index 0000000..ef31b58
--- /dev/null
+++ b/src/options.c
@@ -0,0 +1,501 @@
+#include "global.h"
+#include "m4a.h"
+#include "main.h"
+
+struct OptionsData
+{
+ s16 unk0;
+ u16 unk2;
+ u16 unk4;
+ u16 unk6;
+ s16 unk8;
+ s16 unkA;
+ u16 unkC;
+ s16 unkE;
+ s16 unk10;
+ u8 unk12;
+ u8 unk13;
+ u8 unk14;
+ u8 unk15;
+ u8 unk16;
+ u8 unk17;
+ s16 unk18;
+ u8 unk1A[6];
+ s16 unk20;
+ u16 unk22;
+ s16 unk24[2];
+ u16 unk28;
+ u8 unk2A;
+ s8 unk2B;
+ s8 unk2C;
+ u8 unk2D;
+ s8 unk2E;
+ u8 unk2F;
+ u8 unk30;
+};
+
+extern struct OptionsData gUnknown_02002920;
+
+void OptionsMain(void)
+{
+ gUnknown_08527F08[gMain.subState]();
+}
+
+extern const u16 gUnknown_0852B468[];
+extern const u8 gUnknown_08528828[];
+extern const u8 gUnknown_0852A848[];
+extern const u8 gUnknown_08528028[];
+extern const u8 gUnknown_0852A048[];
+
+void sub_51240(void)
+{
+ sub_438();
+
+ REG_DISPCNT = 0x1080;
+ REG_BG0CNT = 4;
+ REG_DISPCNT |= 0x100;
+ REG_BG1CNT = 0x109;
+ REG_DISPCNT |= 0x200;
+
+ gMain.unk16 = REG_DISPCNT;
+
+ DmaCopy16(3, gUnknown_0852B468, (void *)PLTT, 0x200);
+ DmaCopy16(3, gUnknown_08528828, (void *)(VRAM + 0x4000), 0x1800);
+ DmaCopy16(3, gUnknown_0852A848, (void *)(VRAM + 0x8000), 0xC00);
+ DmaCopy16(3, gUnknown_08528028, gUnknown_03005C00, 0x800);
+ DmaCopy16(3, gUnknown_03005C00, (void *)VRAM, 0x800);
+
+ if (gGameBoyPlayerEnabled != 1)
+ {
+ sub_1068C(0x12, 4, 2, 1, 2);
+ sub_1068C(0x12, 5, 3, 2, 2);
+ }
+
+ DmaCopy16(3, gUnknown_03005C00, (void *)VRAM, 0x800);
+ DmaCopy16(3, gUnknown_0852A048, (void *)(VRAM + 0x800), 0x800);
+ DmaCopy16(3, gGBAButtonIcons_Pals, (void *)(PLTT + 0x200), 0x60);
+ DmaCopy16(3, gOptionsSprites_Gfx, (void *)(VRAM + 0x10000), 0x2020);
+ sub_513B8();
+ sub_51C9C();
+ m4aMPlayAllStop();
+ sub_CBC();
+ sub_24C();
+ sub_10C0();
+
+ gMain.subState++;
+}
+
+extern u8 gUnknown_02031AF0[][10];
+extern u8 gUnknown_08527ED6[][10];
+
+void sub_513B8(void)
+{
+ int i;
+ int j;
+
+ gUnknown_02002920.unk0 = 0;
+ gUnknown_02002920.unk2 = 0;
+ gUnknown_02002920.unk4 = 0;
+ gUnknown_02002920.unk6 = 1;
+ gUnknown_02002920.unk8 = 0;
+ gUnknown_02002920.unkA = 0;
+ gUnknown_02002920.unkC = gUnknown_0200B134.unk143;
+ gUnknown_02002920.unkE = 0;
+ gUnknown_02002920.unk10 = 0;
+ gUnknown_02002920.unk12 = 0;
+ gUnknown_02002920.unk13 = 0;
+ gUnknown_02002920.unk14 = 1;
+ gUnknown_02002920.unk15 = 0;
+ gUnknown_02002920.unk16 = 0;
+ gUnknown_02002920.unk17 = 1;
+ gUnknown_02002920.unk18 = 0;
+ for (i = 0; i < 6; i++)
+ gUnknown_02002920.unk1A[i] = 0;
+ gUnknown_02002920.unk20 = 0;
+ gUnknown_02002920.unk22 = 0;
+ for (i = 0; i < 2; i++)
+ gUnknown_02002920.unk24[i] = 10;
+ gUnknown_02002920.unk28 = 0;
+ for (i = 0; i < 4; i++)
+ {
+ for (j = 0; j < 10; j++)
+ gUnknown_02031AF0[i][j] = gUnknown_08527ED6[i][j];
+ }
+ sub_52528();
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ gUnknown_02002920.unk2A = gUnknown_0200B134.unk141;
+ gUnknown_0200B134.unk141 = 1;
+ }
+ else
+ {
+ gUnknown_02002920.unk2A = 0;
+ gUnknown_0200B134.unk141 = 0;
+ }
+ gUnknown_02002920.unk2E = 0;
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2D = 0;
+ gUnknown_02002920.unk2F = 0;
+ gUnknown_02002920.unk30 = 0;
+}
+
+extern u16 gUnknown_08527D22[];
+extern u16 gUnknown_086BB910[][4];
+extern struct {u8 unk0; s16 unk2;} gUnknown_086BB9B4[];
+extern u16 gUnknown_08527D66[];
+
+void sub_514B8(void)
+{
+ s16 r4;
+
+ sub_51C9C();
+ switch (gUnknown_02002920.unk0)
+ {
+ case 0:
+ if (gMain.newKeys & 0x40)
+ {
+ if (gUnknown_02002920.unkA != 0xD)
+ {
+ if (gUnknown_02002920.unkA == 0xE)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA = 0xD;
+ }
+ else if (gUnknown_02002920.unkA > 0)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA--;
+ }
+ }
+ }
+ //_0805152C
+ else if (gMain.newKeys & 0x80)
+ {
+ if (gUnknown_02002920.unkA < 6)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA++;
+ }
+ else if (gUnknown_02002920.unkA == 0xD)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA = 0xE;
+ }
+ //_0805155E
+ else if (gUnknown_02002920.unkA == 0xE)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA = 2;
+ }
+ // _0805156A
+ }
+ //_0805156C
+ if ((gMain.newKeys & 0x10) && gGameBoyPlayerEnabled == 1 && (u16)gUnknown_02002920.unkA < 2)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA += 0xD;
+ }
+ if ((gMain.newKeys & 0x20) && gGameBoyPlayerEnabled == 1 && (u16)(gUnknown_02002920.unkA - 13) < 2)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA -= 0xD;
+ }
+ //_080515C2
+ if (gMain.newKeys & 1)
+ {
+ switch (gUnknown_02002920.unkA)
+ {
+ case 0:
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk0 = 1;
+ gUnknown_02002920.unk18 = 0;
+ gUnknown_02002920.unk30 = 1;
+ if (gUnknown_02002920.unk2E == 1)
+ {
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2D = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2E = 0;
+ }
+ break;
+ case 1:
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk0 = 2;
+ gUnknown_02002920.unk18 = 0;
+ gUnknown_02002920.unk30 = 1;
+ if (gUnknown_02002920.unk2E == 1)
+ {
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2D = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2E = 0;
+ }
+ break;
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unkC = gUnknown_02002920.unkA - 2;
+ gUnknown_0200B134.unk143 = gUnknown_02002920.unkC;
+ break;
+ case 6:
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unkC = gUnknown_02002920.unkA - 2;
+ gUnknown_0200B134.unk143 = gUnknown_02002920.unkC;
+ gUnknown_02002920.unkA = 7;
+ gUnknown_02002920.unk0 = 3;
+ break;
+ case 14:
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk2D = 0;
+ if (gUnknown_02002920.unk2E == 1)
+ gUnknown_02002920.unk2E = 0;
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2A = 0;
+ }
+ break;
+ case 13:
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ m4aSongNumStart(0x65);
+ sub_11B0(11);
+ if (gUnknown_02002920.unk2E == 0)
+ gUnknown_02002920.unk2E = 1;
+
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2A = 1;
+ }
+ break;
+ }
+ }
+ //_0805177C
+ else if (gMain.newKeys & 2)
+ {
+ m4aSongNumStart(0x66);
+ gMain.subState++;
+ sub_525CC(gMain.saveData.unk143);
+
+ }
+ if (!(gMain.unk4C & 7))
+ gUnknown_02002920.unk2 = 1 - gUnknown_02002920.unk2;
+ break;
+ case 1: // _080517A8
+ if (gMain.heldKeys & 0x20)
+ {
+ if (gUnknown_02002920.unk18 == 0)
+ {
+ gUnknown_02002920.unkE--;
+ gUnknown_02002920.unk18 = 10;
+ }
+ }
+ else if (gMain.heldKeys & 0x10)
+ {
+ if (gUnknown_02002920.unk18 == 0)
+ {
+ gUnknown_02002920.unkE++;
+ gUnknown_02002920.unk18 = 10;
+ }
+ }
+ if (gMain.newKeys & 0x40)
+ gUnknown_02002920.unkE += 10;
+ else if (gMain.newKeys & 0x80)
+ gUnknown_02002920.unkE -= 10;
+ if (gUnknown_02002920.unkE < 0)
+ gUnknown_02002920.unkE = 33;
+ if (gUnknown_02002920.unkE > 33)
+ gUnknown_02002920.unkE = 0;
+
+ r4 = gUnknown_02002920.unkE + 1;
+ gUnknown_02002920.unk12 = r4 / 100;
+ r4 %= 100;
+ gUnknown_02002920.unk13 = r4 / 10;
+ gUnknown_02002920.unk14 = r4 % 10;
+ if (gMain.newKeys & 1)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(gUnknown_08527D22[gUnknown_02002920.unkE]);
+ }
+ else if (gMain.newKeys & 2)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(0x66);
+ gUnknown_02002920.unk4 = 0;
+ gUnknown_02002920.unk30 = 0;
+ gUnknown_02002920.unk0 = 0;
+ }
+ //_080518AA
+ if (!(gMain.unk4C & 7))
+ gUnknown_02002920.unk4 = 1 - gUnknown_02002920.unk4;
+ if (gUnknown_02002920.unk18 > 0)
+ gUnknown_02002920.unk18--;
+ break;
+ case 2:
+ if (gMain.heldKeys & 0x20)
+ {
+ if (gUnknown_02002920.unk18 == 0)
+ {
+ gUnknown_02002920.unk10--;
+ gUnknown_02002920.unk18 = 10;
+ }
+ }
+ else if (gMain.heldKeys & 0x10)
+ {
+ if (gUnknown_02002920.unk18 == 0)
+ {
+ gUnknown_02002920.unk10++;
+ gUnknown_02002920.unk18 = 10;
+ }
+ }
+ //_08051918
+ if (gMain.newKeys & 0x40)
+ gUnknown_02002920.unk10 += 10;
+ else if (gMain.newKeys & 0x80)
+ gUnknown_02002920.unk10 -= 10;
+ if (gUnknown_02002920.unk10 < 0)
+ gUnknown_02002920.unk10 = 0xB7;
+ if (gUnknown_02002920.unk10 > 0xB7)
+ gUnknown_02002920.unk10 = 0;
+
+ r4 = gUnknown_02002920.unk10 + 1;
+ gUnknown_02002920.unk15 = r4 / 100;
+ r4 %= 100;
+ gUnknown_02002920.unk16 = r4 / 10;
+ gUnknown_02002920.unk17 = r4 % 10;
+ if (gMain.newKeys & 0x1)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(gUnknown_08527D66[gUnknown_02002920.unk10]);
+ }
+ else if (gMain.newKeys & 0x2)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(0x66);
+ gUnknown_02002920.unk4 = 0;
+ gUnknown_02002920.unk30 = 0;
+ gUnknown_02002920.unk0 = 0;
+ }
+ if (!(gMain.unk4C & 7))
+ gUnknown_02002920.unk4 = 1 - gUnknown_02002920.unk4;
+ if (gUnknown_02002920.unk18 > 0)
+ gUnknown_02002920.unk18--;
+ break;
+ case 3: //_08051A08
+ if (gMain.newKeys & 0x40)
+ {
+ if (gUnknown_02002920.unkA > 7)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA--;
+ }
+ }
+ //_08051A34
+ else if (gMain.newKeys & 0x80)
+ {
+ if (gUnknown_02002920.unkA <= 10)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA++;
+ }
+ }
+ //_08051A52
+ if (gMain.newKeys & 1)
+ {
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk0 = 4;
+ gUnknown_02002920.unk1A[gUnknown_02002920.unkA - 7] = 1;
+ }
+ //_08051A80
+ else if (gMain.newKeys & 2)
+ {
+ m4aSongNumStart(0x66);
+ gUnknown_02002920.unkA = 6;
+ gUnknown_02002920.unk0 = 0;
+ }
+ //_08051A96
+ if (!(gMain.unk4C & 7))
+ gUnknown_02002920.unk2 = 1 - gUnknown_02002920.unk2;
+ break;
+ case 4:
+ gUnknown_02002920.unk8++;
+ if (gUnknown_02002920.unk8 > 24)
+ {
+ gUnknown_02002920.unk8 = 0;
+ gUnknown_02002920.unk6 = 1 - gUnknown_02002920.unk6;
+ }
+ if (gMain.newKeys & 0x3F7)
+ {
+ s16 i;
+
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk20 = 10;
+ gUnknown_02002920.unk22 = 0;
+ for (i = 0; i < 2; i++)
+ gUnknown_02002920.unk24[i] = 10;
+ gUnknown_02002920.unk28 = 0;
+ }
+ //_08051B0E
+ if (gUnknown_02002920.unk20 > 0)
+ {
+ sub_524BC();
+ gUnknown_02002920.unk20--;
+ if (gUnknown_02002920.unk20 == 0)
+ {
+ gUnknown_02031AF0[4][(gUnknown_02002920.unkA - 7) * 2 + 0] = gUnknown_02002920.unk24[0];
+ gUnknown_02031AF0[4][(gUnknown_02002920.unkA - 7) * 2 + 1] = gUnknown_02002920.unk24[1];
+ gUnknown_0200B134.unk144[(gUnknown_02002920.unkA - 7)][0] = gUnknown_086BB910[gUnknown_02002920.unk24[0]][0];
+ gUnknown_0200B134.unk144[(gUnknown_02002920.unkA - 7)][1] = gUnknown_086BB910[gUnknown_02002920.unk24[1]][0];
+ gUnknown_02002920.unk0 = 3;
+ gUnknown_02002920.unk1A[gUnknown_02002920.unkA - 7] = 0;
+ gUnknown_02002920.unk8 = 0;
+ gUnknown_02002920.unk6 = 1;
+ }
+ }
+ break;
+ }
+ //_08051B98
+ if (gUnknown_02002920.unk2E == 1)
+ {
+ //gUnknown_02002920.unk2B++;
+ if (++gUnknown_02002920.unk2B > gUnknown_086BB9B4[gUnknown_02002920.unk2C].unk2)
+ {
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2C++;
+ if (gUnknown_02002920.unk2C > 12)
+ {
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2D = 0;
+ gUnknown_02002920.unk2E = 0;
+ }
+ //_08051BE8
+ gUnknown_02002920.unk2D = gUnknown_086BB9B4[gUnknown_02002920.unk2C].unk0;
+ }
+ // _08051C30
+ }
+ else
+ //_08051C10
+ {
+ gUnknown_02002920.unk2B++;
+ if (gUnknown_02002920.unk2B > 18)
+ {
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2D = 1 - gUnknown_02002920.unk2D;
+ }
+ }
+ sub_11FC();
+}
+
+void sub_51C3C(void)
+{
+ sub_111C();
+ if (sub_1170() != 0)
+ {
+ sub_1198();
+ gMain.subState++;
+ }
+}