summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan <eroelke@gmail.com>2019-11-16 19:45:55 -0700
committerEvan <eroelke@gmail.com>2019-11-16 19:45:55 -0700
commit46602859cd1cf7b3ecbc3f0730eebe2e60ef3845 (patch)
tree570d164eb403ace2476c2f55094350f5d6426bb5
parent83cba310335678aa8ecac24b58708b3c924b581a (diff)
remove compile errors
-rw-r--r--asm/option_menu.s1337
-rw-r--r--data/strings.s14
-rw-r--r--include/global.h10
-rw-r--r--include/strings.h11
-rw-r--r--ld_script.txt2
-rw-r--r--src/option_menu.c594
-rw-r--r--sym_ewram.txt2
7 files changed, 619 insertions, 1351 deletions
diff --git a/asm/option_menu.s b/asm/option_menu.s
deleted file mode 100644
index 3b08810c5..000000000
--- a/asm/option_menu.s
+++ /dev/null
@@ -1,1337 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_808835C
-sub_808835C: @ 808835C
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_808835C
-
- thumb_func_start sub_8088374
-sub_8088374: @ 8088374
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_8088374
-
- thumb_func_start CB2_OptionsMenuFromStartMenu
-CB2_OptionsMenuFromStartMenu: @ 8088388
- push {r4-r6,lr}
- ldr r1, _08088418 @ =gMain
- ldr r0, [r1, 0x8]
- cmp r0, 0
- bne _08088396
- ldr r0, _0808841C @ =CB2_ReturnToStartMenu
- str r0, [r1, 0x8]
-_08088396:
- ldr r4, _08088420 @ =gUnknown_2039620
- movs r0, 0x14
- bl AllocZeroed
- str r0, [r4]
- movs r1, 0
- strb r1, [r0, 0x10]
- ldr r0, [r4]
- strb r1, [r0, 0x12]
- ldr r0, [r4]
- strb r1, [r0, 0x11]
- ldr r2, [r4]
- strh r1, [r2, 0xE]
- ldr r0, _08088424 @ =gSaveBlock2Ptr
- ldr r1, [r0]
- ldrb r0, [r1, 0x14]
- lsls r0, 29
- lsrs r0, 29
- strh r0, [r2]
- ldrb r0, [r1, 0x15]
- lsls r0, 29
- lsrs r0, 31
- strh r0, [r2, 0x2]
- ldrb r0, [r1, 0x15]
- lsls r0, 30
- lsrs r0, 31
- strh r0, [r2, 0x4]
- ldrb r0, [r1, 0x15]
- lsls r0, 31
- lsrs r0, 31
- strh r0, [r2, 0x6]
- ldrb r0, [r1, 0x13]
- strh r0, [r2, 0x8]
- ldrb r0, [r1, 0x14]
- lsrs r0, 3
- strh r0, [r2, 0xA]
- movs r3, 0
- adds r6, r4, 0
- ldr r5, _08088428 @ =gUnknown_83CC304
- movs r4, 0
-_080883E6:
- ldr r1, [r6]
- lsls r0, r3, 1
- adds r2, r1, r0
- ldrh r1, [r2]
- adds r0, r5
- ldrh r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- ble _080883FA
- strh r4, [r2]
-_080883FA:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x5
- bls _080883E6
- movs r0, 0xD
- bl HelpSystem_SetSomeVariable2
- ldr r0, _0808842C @ =sub_8088454
- bl SetMainCallback2
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08088418: .4byte gMain
-_0808841C: .4byte CB2_ReturnToStartMenu
-_08088420: .4byte gUnknown_2039620
-_08088424: .4byte gSaveBlock2Ptr
-_08088428: .4byte gUnknown_83CC304
-_0808842C: .4byte sub_8088454
- thumb_func_end CB2_OptionsMenuFromStartMenu
-
- thumb_func_start sub_8088430
-sub_8088430: @ 8088430
- push {lr}
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- pop {r0}
- bx r0
- thumb_func_end sub_8088430
-
- thumb_func_start sub_8088444
-sub_8088444: @ 8088444
- push {lr}
- ldr r0, _08088450 @ =sub_8088374
- bl SetVBlankCallback
- pop {r0}
- bx r0
- .align 2, 0
-_08088450: .4byte sub_8088374
- thumb_func_end sub_8088444
-
- thumb_func_start sub_8088454
-sub_8088454: @ 8088454
- push {r4,lr}
- ldr r0, _0808846C @ =gUnknown_2039620
- ldr r0, [r0]
- ldrb r0, [r0, 0x11]
- cmp r0, 0x9
- bhi _080884FA
- lsls r0, 2
- ldr r1, _08088470 @ =_08088474
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808846C: .4byte gUnknown_2039620
-_08088470: .4byte _08088474
- .align 2, 0
-_08088474:
- .4byte _0808849C
- .4byte _080884A2
- .4byte _080884A8
- .4byte _080884AE
- .4byte _080884BC
- .4byte _080884C2
- .4byte _080884C8
- .4byte _080884CE
- .4byte _080884E2
- .4byte _080884F4
-_0808849C:
- bl sub_8088430
- b _080884FE
-_080884A2:
- bl sub_8088530
- b _080884FE
-_080884A8:
- bl sub_80886D4
- b _080884FE
-_080884AE:
- bl sub_80886F0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08088508
- b _080884FE
-_080884BC:
- bl sub_8088BD0
- b _080884FE
-_080884C2:
- bl sub_8088C0C
- b _080884FE
-_080884C8:
- bl sub_8088D8C
- b _080884FE
-_080884CE:
- movs r4, 0
-_080884D0:
- adds r0, r4, 0
- bl sub_80889A8
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x6
- bls _080884D0
- b _080884FE
-_080884E2:
- ldr r0, _080884F0 @ =gUnknown_2039620
- ldr r0, [r0]
- ldrh r0, [r0, 0xE]
- bl sub_8088DE0
- b _080884FE
- .align 2, 0
-_080884F0: .4byte gUnknown_2039620
-_080884F4:
- bl sub_8088680
- b _080884FE
-_080884FA:
- bl sub_8088514
-_080884FE:
- ldr r0, _08088510 @ =gUnknown_2039620
- ldr r1, [r0]
- ldrb r0, [r1, 0x11]
- adds r0, 0x1
- strb r0, [r1, 0x11]
-_08088508:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088510: .4byte gUnknown_2039620
- thumb_func_end sub_8088454
-
- thumb_func_start sub_8088514
-sub_8088514: @ 8088514
- push {lr}
- ldr r0, _08088528 @ =sub_8088780
- movs r1, 0
- bl CreateTask
- ldr r0, _0808852C @ =sub_808835C
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08088528: .4byte sub_8088780
-_0808852C: .4byte sub_808835C
- thumb_func_end sub_8088514
-
- thumb_func_start sub_8088530
-sub_8088530: @ 8088530
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r3, 0xC0
- lsls r3, 19
- movs r4, 0xC0
- lsls r4, 9
- add r0, sp, 0x4
- mov r8, r0
- mov r2, sp
- movs r6, 0
- ldr r1, _08088670 @ =0x040000d4
- movs r5, 0x80
- lsls r5, 5
- ldr r7, _08088674 @ =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_08088556:
- strh r6, [r2]
- mov r0, sp
- str r0, [r1]
- str r3, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r3, r5
- subs r4, r5
- cmp r4, r5
- bhi _08088556
- strh r6, [r2]
- mov r2, sp
- str r2, [r1]
- str r3, [r1, 0x4]
- lsrs r0, r4, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0xE0
- lsls r0, 19
- movs r3, 0x80
- lsls r3, 3
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r2, _08088670 @ =0x040000d4
- mov r1, r8
- str r1, [r2]
- str r0, [r2, 0x4]
- lsrs r0, r3, 2
- movs r1, 0x85
- lsls r1, 24
- orrs r0, r1
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r1, 0xA0
- lsls r1, 19
- mov r0, sp
- strh r4, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- lsrs r3, 1
- movs r0, 0x81
- lsls r0, 24
- orrs r3, r0
- str r3, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _08088678 @ =gUnknown_83CC2D8
- movs r0, 0
- movs r2, 0x3
- bl InitBgsFromTemplates
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- ldr r0, _0808867C @ =gUnknown_83CC2B8
- bl InitWindows
- bl DeactivateAllTextPrinters
- movs r0, 0x50
- movs r1, 0xC1
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0x2
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x1
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x27
- bl SetGpuReg
- movs r1, 0xC1
- lsls r1, 6
- movs r0, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08088670: .4byte 0x040000d4
-_08088674: .4byte 0x81000800
-_08088678: .4byte gUnknown_83CC2D8
-_0808867C: .4byte gUnknown_83CC2B8
- thumb_func_end sub_8088530
-
- thumb_func_start sub_8088680
-sub_8088680: @ 8088680
- push {r4,r5,lr}
- sub sp, 0xC
- ldr r5, _080886CC @ =gUnknown_8419E57
- movs r0, 0
- adds r1, r5, 0
- movs r2, 0
- bl GetStringWidth
- movs r4, 0xE4
- subs r4, r0
- movs r0, 0x2
- movs r1, 0xFF
- bl FillWindowPixelBuffer
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080886D0 @ =gUnknown_83CC360
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- adds r2, r4, 0
- movs r3, 0
- bl AddTextPrinterParameterized3
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0x2
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080886CC: .4byte gUnknown_8419E57
-_080886D0: .4byte gUnknown_83CC360
- thumb_func_end sub_8088680
-
- thumb_func_start sub_80886D4
-sub_80886D4: @ 80886D4
- push {lr}
- bl ResetSpriteData
- bl ResetPaletteFade
- bl FreeAllSpritePalettes
- bl ResetTasks
- bl ScanlineEffect_Stop
- pop {r0}
- bx r0
- thumb_func_end sub_80886D4
-
- thumb_func_start sub_80886F0
-sub_80886F0: @ 80886F0
- push {lr}
- ldr r0, _08088708 @ =gUnknown_2039620
- ldr r0, [r0]
- ldrb r1, [r0, 0x12]
- cmp r1, 0x1
- beq _0808872E
- cmp r1, 0x1
- bgt _0808870C
- cmp r1, 0
- beq _08088716
- b _08088768
- .align 2, 0
-_08088708: .4byte gUnknown_2039620
-_0808870C:
- cmp r1, 0x2
- beq _0808873A
- cmp r1, 0x3
- beq _08088758
- b _08088768
-_08088716:
- ldrb r0, [r0, 0xA]
- bl GetUserFrameGraphicsInfo
- ldr r1, [r0]
- movs r2, 0x90
- lsls r2, 1
- movs r3, 0xD5
- lsls r3, 1
- movs r0, 0x1
- bl LoadBgTiles
- b _0808876C
-_0808872E:
- ldrb r0, [r0, 0xA]
- bl GetUserFrameGraphicsInfo
- ldr r0, [r0, 0x4]
- movs r1, 0x20
- b _0808874C
-_0808873A:
- ldr r0, _08088754 @ =gUnknown_83CC2E4
- movs r1, 0x10
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0x2
- bl stdpal_get
- movs r1, 0xF0
-_0808874C:
- movs r2, 0x20
- bl LoadPalette
- b _0808876C
- .align 2, 0
-_08088754: .4byte gUnknown_83CC2E4
-_08088758:
- ldr r1, _08088764 @ =0x000001b3
- movs r0, 0x1
- movs r2, 0x30
- bl sub_814FDA0
- b _0808876C
- .align 2, 0
-_08088764: .4byte 0x000001b3
-_08088768:
- movs r0, 0x1
- b _08088778
-_0808876C:
- ldr r0, _0808877C @ =gUnknown_2039620
- ldr r1, [r0]
- ldrb r0, [r1, 0x12]
- adds r0, 0x1
- strb r0, [r1, 0x12]
- movs r0, 0
-_08088778:
- pop {r1}
- bx r1
- .align 2, 0
-_0808877C: .4byte gUnknown_2039620
- thumb_func_end sub_80886F0
-
- thumb_func_start sub_8088780
-sub_8088780: @ 8088780
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _080887A0 @ =gUnknown_2039620
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- adds r3, r1, 0
- cmp r0, 0x5
- bls _08088796
- b _080888B6
-_08088796:
- lsls r0, 2
- ldr r1, _080887A4 @ =_080887A8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080887A0: .4byte gUnknown_2039620
-_080887A4: .4byte _080887A8
- .align 2, 0
-_080887A8:
- .4byte _080887C0
- .4byte _08088894
- .4byte _080887E0
- .4byte _08088878
- .4byte _08088894
- .4byte _080888B0
-_080887C0:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- bl sub_8088444
- ldr r0, _080887DC @ =gUnknown_2039620
- ldr r1, [r0]
- b _080888A2
- .align 2, 0
-_080887DC: .4byte gUnknown_2039620
-_080887E0:
- bl sub_80BF72C
- cmp r0, 0x1
- beq _080888B6
- bl sub_80888C0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _080888B6
- lsls r0, 2
- ldr r1, _08088800 @ =_08088804
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08088800: .4byte _08088804
- .align 2, 0
-_08088804:
- .4byte _080888B6
- .4byte _08088818
- .4byte _08088824
- .4byte _08088858
- .4byte _08088868
-_08088818:
- ldr r0, _08088820 @ =gUnknown_2039620
- ldr r1, [r0]
- b _080888A2
- .align 2, 0
-_08088820: .4byte gUnknown_2039620
-_08088824:
- ldr r4, _08088854 @ =gUnknown_2039620
- ldr r0, [r4]
- ldrb r0, [r0, 0xA]
- bl GetUserFrameGraphicsInfo
- ldr r1, [r0]
- movs r2, 0x90
- lsls r2, 1
- movs r3, 0xD5
- lsls r3, 1
- movs r0, 0x1
- bl LoadBgTiles
- ldr r0, [r4]
- ldrb r0, [r0, 0xA]
- bl GetUserFrameGraphicsInfo
- ldr r0, [r0, 0x4]
- movs r1, 0x20
- movs r2, 0x20
- bl LoadPalette
- ldr r0, [r4]
- b _0808886C
- .align 2, 0
-_08088854: .4byte gUnknown_2039620
-_08088858:
- ldr r0, _08088864 @ =gUnknown_2039620
- ldr r0, [r0]
- ldrh r0, [r0, 0xE]
- bl sub_8088DE0
- b _080888B6
- .align 2, 0
-_08088864: .4byte gUnknown_2039620
-_08088868:
- ldr r0, _08088874 @ =gUnknown_2039620
- ldr r0, [r0]
-_0808886C:
- ldrb r0, [r0, 0xE]
- bl sub_80889A8
- b _080888B6
- .align 2, 0
-_08088874: .4byte gUnknown_2039620
-_08088878:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _08088890 @ =gUnknown_2039620
- ldr r1, [r0]
- b _080888A2
- .align 2, 0
-_08088890: .4byte gUnknown_2039620
-_08088894:
- ldr r0, _080888AC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080888B6
- ldr r1, [r3]
-_080888A2:
- ldrb r0, [r1, 0x10]
- adds r0, 0x1
- strb r0, [r1, 0x10]
- b _080888B6
- .align 2, 0
-_080888AC: .4byte gPaletteFade
-_080888B0:
- adds r0, r2, 0
- bl sub_8088B00
-_080888B6:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8088780
-
- thumb_func_start sub_80888C0
-sub_80888C0: @ 80888C0
- push {r4,lr}
- ldr r3, _080888EC @ =gMain
- ldrh r1, [r3, 0x30]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08088906
- ldr r2, _080888F0 @ =gUnknown_2039620
- ldr r1, [r2]
- ldrh r0, [r1, 0xE]
- lsls r0, 1
- adds r3, r1, r0
- ldrh r4, [r3]
- ldr r1, _080888F4 @ =gUnknown_83CC304
- adds r0, r1
- ldrh r0, [r0]
- subs r0, 0x1
- cmp r4, r0
- bne _080888F8
- movs r0, 0
- b _080888FA
- .align 2, 0
-_080888EC: .4byte gMain
-_080888F0: .4byte gUnknown_2039620
-_080888F4: .4byte gUnknown_83CC304
-_080888F8:
- adds r0, r4, 0x1
-_080888FA:
- strh r0, [r3]
- ldr r0, [r2]
- ldrh r0, [r0, 0xE]
- cmp r0, 0x5
- beq _08088930
- b _0808893C
-_08088906:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08088940
- ldr r2, _08088934 @ =gUnknown_2039620
- ldr r1, [r2]
- ldrh r0, [r1, 0xE]
- lsls r3, r0, 1
- adds r1, r3
- ldrh r0, [r1]
- cmp r0, 0
- bne _08088924
- ldr r0, _08088938 @ =gUnknown_83CC304
- adds r0, r3, r0
- ldrh r0, [r0]
-_08088924:
- subs r0, 0x1
- strh r0, [r1]
- ldr r0, [r2]
- ldrh r0, [r0, 0xE]
- cmp r0, 0x5
- bne _0808893C
-_08088930:
- movs r0, 0x2
- b _080889A0
- .align 2, 0
-_08088934: .4byte gUnknown_2039620
-_08088938: .4byte gUnknown_83CC304
-_0808893C:
- movs r0, 0x4
- b _080889A0
-_08088940:
- movs r0, 0x40
- ands r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0
- beq _08088964
- ldr r0, _0808895C @ =gUnknown_2039620
- ldr r1, [r0]
- ldrh r0, [r1, 0xE]
- cmp r0, 0
- bne _08088960
- movs r0, 0x6
- b _08088982
- .align 2, 0
-_0808895C: .4byte gUnknown_2039620
-_08088960:
- subs r0, 0x1
- b _08088982
-_08088964:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08088988
- ldr r0, _0808897C @ =gUnknown_2039620
- ldr r1, [r0]
- ldrh r0, [r1, 0xE]
- cmp r0, 0x6
- bne _08088980
- strh r2, [r1, 0xE]
- b _08088984
- .align 2, 0
-_0808897C: .4byte gUnknown_2039620
-_08088980:
- adds r0, 0x1
-_08088982:
- strh r0, [r1, 0xE]
-_08088984:
- movs r0, 0x3
- b _080889A0
-_08088988:
- ldrh r1, [r3, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0808899A
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0808899E
-_0808899A:
- movs r0, 0x1
- b _080889A0
-_0808899E:
- movs r0, 0
-_080889A0:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80888C0
-
- thumb_func_start sub_80889A8
-sub_80889A8: @ 80889A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x30
- lsls r0, 24
- lsrs r5, r0, 24
- add r4, sp, 0x2C
- ldr r1, _08088A08 @ =gUnknown_83CC363
- adds r0, r4, 0
- movs r2, 0x3
- bl memcpy
- movs r0, 0x82
- mov r8, r0
- movs r0, 0x2
- movs r1, 0x1
- bl GetFontAttribute
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- muls r0, r5
- adds r0, 0x2
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x2
- movs r1, 0x1
- bl GetFontAttribute
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x46
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0x82
- adds r3, r7, 0
- bl FillWindowPixelRect
- adds r6, r4, 0
- cmp r5, 0x5
- bhi _08088ADE
- lsls r0, r5, 2
- ldr r1, _08088A0C @ =_08088A10
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08088A08: .4byte gUnknown_83CC363
-_08088A0C: .4byte _08088A10
- .align 2, 0
-_08088A10:
- .4byte _08088A28
- .4byte _08088A38
- .4byte _08088A48
- .4byte _08088A58
- .4byte _08088A68
- .4byte _08088A9C
-_08088A28:
- str r6, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r2, _08088A34 @ =gUnknown_83CC330
- b _08088A72
- .align 2, 0
-_08088A34: .4byte gUnknown_83CC330
-_08088A38:
- str r6, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r2, _08088A44 @ =gUnknown_83CC33C
- b _08088A72
- .align 2, 0
-_08088A44: .4byte gUnknown_83CC33C
-_08088A48:
- str r6, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r2, _08088A54 @ =gUnknown_83CC344
- b _08088A72
- .align 2, 0
-_08088A54: .4byte gUnknown_83CC344
-_08088A58:
- str r6, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r2, _08088A64 @ =gUnknown_83CC34C
- b _08088A72
- .align 2, 0
-_08088A64: .4byte gUnknown_83CC34C
-_08088A68:
- str r6, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r2, _08088A94 @ =gUnknown_83CC354
-_08088A72:
- ldr r0, _08088A98 @ =gUnknown_2039620
- ldr r0, [r0]
- lsls r1, r5, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- mov r2, r8
- adds r3, r7, 0
- bl AddTextPrinterParameterized3
- b _08088ADE
- .align 2, 0
-_08088A94: .4byte gUnknown_83CC354
-_08088A98: .4byte gUnknown_2039620
-_08088A9C:
- ldr r1, _08088AF8 @ =gUnknown_8419E52
- add r0, sp, 0xC
- bl StringCopy
- add r4, sp, 0x20
- ldr r0, _08088AFC @ =gUnknown_2039620
- ldr r0, [r0]
- lsls r1, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r0, r4, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- add r0, sp, 0xC
- adds r1, r4, 0
- movs r2, 0x3
- bl StringAppendN
- str r6, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- mov r2, r8
- adds r3, r7, 0
- bl AddTextPrinterParameterized3
-_08088ADE:
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0x30
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08088AF8: .4byte gUnknown_8419E52
-_08088AFC: .4byte gUnknown_2039620
- thumb_func_end sub_80889A8
-
- thumb_func_start sub_8088B00
-sub_8088B00: @ 8088B00
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _08088BBC @ =gFieldCallback
- ldr r0, _08088BC0 @ =sub_807DF64
- str r0, [r1]
- ldr r0, _08088BC4 @ =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
- bl FreeAllWindowBuffers
- ldr r3, _08088BC8 @ =gSaveBlock2Ptr
- ldr r5, [r3]
- ldr r4, _08088BCC @ =gUnknown_2039620
- ldr r0, [r4]
- movs r2, 0x7
- ldrb r1, [r0]
- ands r1, r2
- ldrb r2, [r5, 0x14]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x14]
- ldr r5, [r3]
- ldr r0, [r4]
- movs r6, 0x1
- ldrb r1, [r0, 0x2]
- ands r1, r6
- lsls r1, 2
- ldrb r2, [r5, 0x15]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x15]
- ldr r5, [r3]
- ldr r0, [r4]
- ldrb r1, [r0, 0x4]
- ands r1, r6
- lsls r1, 1
- ldrb r2, [r5, 0x15]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x15]
- ldr r5, [r3]
- ldr r0, [r4]
- ldrb r1, [r0, 0x6]
- ands r1, r6
- ldrb r2, [r5, 0x15]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x15]
- ldr r1, [r3]
- ldr r0, [r4]
- ldrh r0, [r0, 0x8]
- movs r6, 0
- strb r0, [r1, 0x13]
- ldr r5, [r3]
- ldr r0, [r4]
- ldrb r1, [r0, 0xA]
- lsls r1, 3
- ldrb r2, [r5, 0x14]
- movs r0, 0x7
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x14]
- ldr r0, [r3]
- ldrb r0, [r0, 0x15]
- lsls r0, 31
- lsrs r0, 31
- bl SetPokemonCryStereo
- ldr r0, [r4]
- bl Free
- str r6, [r4]
- mov r0, r8
- bl DestroyTask
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08088BBC: .4byte gFieldCallback
-_08088BC0: .4byte sub_807DF64
-_08088BC4: .4byte gMain
-_08088BC8: .4byte gSaveBlock2Ptr
-_08088BCC: .4byte gUnknown_2039620
- thumb_func_end sub_8088B00
-
- thumb_func_start sub_8088BD0
-sub_8088BD0: @ 8088BD0
- push {lr}
- sub sp, 0xC
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, _08088C08 @ =gUnknown_8419DCC
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r1, 0x2
- movs r3, 0x8
- bl AddTextPrinterParameterized
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08088C08: .4byte gUnknown_8419DCC
- thumb_func_end sub_8088BD0
-
- thumb_func_start sub_8088C0C
-sub_8088C0C: @ 8088C0C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0xC
- movs r6, 0x2
- ldr r1, _08088D6C @ =0x000001b3
- movs r4, 0x1
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r5, 0x3
- str r5, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1
- movs r3, 0x2
- bl FillBgTilemapBufferRect
- movs r1, 0xDA
- lsls r1, 1
- movs r0, 0x1B
- mov r8, r0
- str r0, [sp]
- str r4, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x2
- movs r3, 0x2
- bl FillBgTilemapBufferRect
- ldr r1, _08088D70 @ =0x000001b5
- str r4, [sp]
- str r4, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1C
- movs r3, 0x2
- bl FillBgTilemapBufferRect
- movs r1, 0xDB
- lsls r1, 1
- str r4, [sp]
- str r6, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1
- movs r3, 0x3
- bl FillBgTilemapBufferRect
- movs r1, 0xDC
- lsls r1, 1
- str r4, [sp]
- str r6, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1C
- movs r3, 0x3
- bl FillBgTilemapBufferRect
- ldr r1, _08088D74 @ =0x000001b9
- str r4, [sp]
- str r4, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1
- movs r3, 0x5
- bl FillBgTilemapBufferRect
- movs r1, 0xDD
- lsls r1, 1
- mov r0, r8
- str r0, [sp]
- str r4, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x2
- movs r3, 0x5
- bl FillBgTilemapBufferRect
- ldr r1, _08088D78 @ =0x000001bb
- str r4, [sp]
- str r4, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1C
- movs r3, 0x5
- bl FillBgTilemapBufferRect
- movs r1, 0xD5
- lsls r1, 1
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1
- movs r3, 0x6
- bl FillBgTilemapBufferRect
- ldr r1, _08088D7C @ =0x000001ab
- movs r0, 0x1A
- mov r8, r0
- str r0, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x2
- movs r3, 0x6
- bl FillBgTilemapBufferRect
- movs r1, 0xD6
- lsls r1, 1
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1C
- movs r3, 0x6
- bl FillBgTilemapBufferRect
- ldr r1, _08088D80 @ =0x000001ad
- str r4, [sp]
- movs r5, 0x10
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1
- movs r3, 0x7
- bl FillBgTilemapBufferRect
- ldr r1, _08088D84 @ =0x000001af
- str r4, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1C
- movs r3, 0x7
- bl FillBgTilemapBufferRect
- movs r1, 0xD8
- lsls r1, 1
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1
- movs r3, 0x13
- bl FillBgTilemapBufferRect
- ldr r1, _08088D88 @ =0x000001b1
- mov r0, r8
- str r0, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x2
- movs r3, 0x13
- bl FillBgTilemapBufferRect
- movs r1, 0xD9
- lsls r1, 1
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x1C
- movs r3, 0x13
- bl FillBgTilemapBufferRect
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08088D6C: .4byte 0x000001b3
-_08088D70: .4byte 0x000001b5
-_08088D74: .4byte 0x000001b9
-_08088D78: .4byte 0x000001bb
-_08088D7C: .4byte 0x000001ab
-_08088D80: .4byte 0x000001ad
-_08088D84: .4byte 0x000001af
-_08088D88: .4byte 0x000001b1
- thumb_func_end sub_8088C0C
-
- thumb_func_start sub_8088D8C
-sub_8088D8C: @ 8088D8C
- push {r4,lr}
- sub sp, 0xC
- movs r0, 0x1
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r4, 0
-_08088D9A:
- movs r0, 0x2
- movs r1, 0x1
- bl GetFontAttribute
- adds r1, r4, 0
- muls r1, r0
- adds r1, 0x2
- subs r1, r4
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _08088DDC @ =gUnknown_83CC314
- lsls r0, r4, 2
- adds r0, r2
- ldr r2, [r0]
- str r1, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r3, 0x8
- bl AddTextPrinterParameterized
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x6
- bls _08088D9A
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088DDC: .4byte gUnknown_83CC314
- thumb_func_end sub_8088D8C
-
- thumb_func_start sub_8088DE0
-sub_8088DE0: @ 8088DE0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x2
- movs r1, 0x1
- bl GetFontAttribute
- lsls r0, 24
- lsrs r0, 24
- subs r1, r0, 0x1
- adds r2, r4, 0
- muls r2, r1
- adds r2, 0x3A
- lsls r2, 16
- lsrs r2, 16
- lsls r1, r2, 8
- adds r2, r0
- orrs r1, r2
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x44
- bl SetGpuReg
- movs r1, 0x87
- lsls r1, 5
- movs r0, 0x40
- bl SetGpuReg
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8088DE0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/strings.s b/data/strings.s
index 101946475..14a4472e3 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -2907,25 +2907,25 @@ gUnknown_8419D89:: @ 8419D89
gUnknown_8419DCC:: @ 8419DCC
.string "OPTION$"
-gUnknown_8419DD3:: @ 0x8419DD3
+gText_TextSpeed:: @ 0x8419DD3
.string "TEXT SPEED$"
-gUnknown_8419DDE:: @ 0x8419DDE
+gText_BattleScene:: @ 0x8419DDE
.string "BATTLE SCENE$"
-gUnknown_8419DEB:: @ 0x8419DEB
+gText_BattleStyle:: @ 0x8419DEB
.string "BATTLE STYLE$"
-gUnknown_8419DF8:: @ 0x8419DF8
+gText_Sound:: @ 0x8419DF8
.string "SOUND$"
-gUnknown_8419DFE:: @ 0x8419DFE
+gText_ButtonMode:: @ 0x8419DFE
.string "BUTTON MODE$"
-gUnknown_8419E0A:: @ 0x8419E0A
+gText_Frame:: @ 0x8419E0A
.string "FRAME$"
-gUnknown_8419E10:: @ 0x8419E10
+gText_OptionMenuCancel:: @ 0x8419E10
.string "CANCEL$"
gUnknown_8419E17:: @ 0x8419E17
diff --git a/include/global.h b/include/global.h
index 2f34de1a0..63c6923bd 100644
--- a/include/global.h
+++ b/include/global.h
@@ -291,11 +291,11 @@ struct SaveBlock2
/*0x012*/ u8 playTimeVBlanks;
/*0x013*/ u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A]
/*0x014*/ u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST]
- u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes
- u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO]
- u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET]
- u16 optionsBattleSceneOff:1; // whether battle animations are disabled
- u16 regionMapZoom:1; // whether the map is zoomed in
+ u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes
+ /*0x15*/ u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO]
+ u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET]
+ u16 optionsBattleSceneOff:1; // whether battle animations are disabled
+ u16 regionMapZoom:1; // whether the map is zoomed in
/*0x018*/ struct Pokedex pokedex;
/*0x090*/ u8 filler_90[0x8];
/*0x098*/ struct Time localTimeOffset;
diff --git a/include/strings.h b/include/strings.h
index 6ad76e2fa..bdef1b956 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -741,4 +741,15 @@ extern const u8 gText_DecimalPoint[];
// map_name_popup
extern const u8 gUnknown_841D18D[];
+// options menu
+extern const u8 gText_TextSpeed[];
+extern const u8 gText_BattleScene[];
+extern const u8 gText_BattleStyle[];
+extern const u8 gText_Sound[];
+extern const u8 gText_ButtonMode[];
+extern const u8 gText_Frame[];
+extern const u8 gText_OptionMenuCancel[];
+extern const u8 gText_PickSwitchCancel[];
+
+
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index d84a70c7a..5a98f75cc 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -128,7 +128,7 @@ SECTIONS {
src/wild_encounter.o(.text);
asm/field_effect.o(.text);
src/scanline_effect.o(.text);
- asm/option_menu.o(.text);
+ src/option_menu.o(.text);
src/pokedex.o(.text);
asm/trainer_card.o(.text);
asm/pokemon_storage_system.o(.text);
diff --git a/src/option_menu.c b/src/option_menu.c
new file mode 100644
index 000000000..57de35f11
--- /dev/null
+++ b/src/option_menu.c
@@ -0,0 +1,594 @@
+#include "global.h"
+#include "gpu_regs.h"
+#include "scanline_effect.h"
+#include "text_window_graphics.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "task.h"
+#include "palette.h"
+#include "overworld.h"
+#include "malloc.h"
+#include "help_system.h"
+#include "main.h"
+#include "bg.h"
+#include "window.h"
+#include "text.h"
+#include "text_window.h"
+#include "string_util.h"
+#include "strings.h"
+#include "field_fadetransition.h"
+#include "gba/m4a_internal.h"
+
+
+// Menu items
+enum
+{
+ MENUITEM_TEXTSPEED = 0,
+ MENUITEM_BATTLESCENE,
+ MENUITEM_BATTLESTYLE,
+ MENUITEM_SOUND,
+ MENUITEM_BUTTONMODE,
+ MENUITEM_FRAMETYPE,
+ MENUITEM_CANCEL,
+ MENUITEM_COUNT,
+};
+// Window Ids
+enum
+{
+ WIN_TEXT_OPTION,
+ WIN_OPTIONS
+};
+
+//This file's functions
+static void sub_808835C(void);
+static void sub_8088374(void);
+static void sub_8088430(void);
+static void sub_8088444(void);
+static void sub_8088454(void);
+static void sub_8088514(void);
+static void sub_8088530(void);
+static void sub_8088680(void);
+static void sub_80886D4(void);
+static bool8 sub_80886F0(void);
+static void sub_8088780(u8 taskId);
+static u8 sub_80888C0(void);
+static void sub_80889A8(u8 selection);
+static void sub_8088B00(u8 taskId);
+static void sub_8088BD0(void);
+static void sub_8088C0C(void);
+static void sub_8088D8C(void);
+static void sub_8088DE0(u8 selection);
+
+extern const u16 gUnknown_83CC304[]; //sOptionsMenuItemCounts
+extern const struct BgTemplate gUnknown_83CC2D8[];
+extern const u8 gUnknown_83CC360[];
+extern const u16 gUnknown_83CC2E4[];
+extern const struct WindowTemplate gUnknown_83CC2B8[];
+extern const u8 gUnknown_83CC363[];
+extern const u8 gUnknown_83CC330[];
+extern const u8 gUnknown_83CC33C[];
+extern const u8 gUnknown_83CC344[];
+extern const u8 gUnknown_83CC34C[];
+extern const u8 gUnknown_83CC354[];
+extern const u8 gUnknown_8419E52[];
+extern const u8 gUnknown_8419DCC[];
+extern const u8* gUnknown_83CC314[MENUITEM_COUNT];
+extern const u8 gUnknown_8419E57[];
+
+struct OptionsMenu
+{
+ /*0x00*/ u16 option[7];
+ /*0x0E*/ u16 unkE;
+ /*0x10*/ u8 state3;
+ /*0x11*/ u8 state;
+ /*0x12*/ u8 state2;
+ /*0x13*/ u8 unk13;
+};
+
+EWRAM_DATA struct OptionsMenu *sOptionsMenu = {0};
+
+
+//CB2_InitOptionsMenu
+static void sub_808835C(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+
+//VBlankCB_OptionsMenu
+static void sub_8088374(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+
+//sub_8088388
+void CB2_OptionsMenuFromStartMenu(void)
+{
+ int i;
+
+ if (gMain.savedCallback == NULL)
+ gMain.savedCallback = CB2_ReturnToStartMenu;
+ sOptionsMenu = AllocZeroed(sizeof(struct OptionsMenu));
+ sOptionsMenu->state3 = 0;
+ sOptionsMenu->state2 = 0;
+ sOptionsMenu->state = 0;
+ sOptionsMenu->unkE = 0;
+ sOptionsMenu->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed;
+ sOptionsMenu->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff;
+ sOptionsMenu->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle;
+ sOptionsMenu->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound;
+ sOptionsMenu->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode;
+ sOptionsMenu->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType;
+
+ for (i = 0; i < MENUITEM_COUNT-2; i++)
+ {
+ if (sOptionsMenu->option[i] > gUnknown_83CC304[i]-1)
+ sOptionsMenu->option[i] = 0;
+ }
+ HelpSystem_SetSomeVariable2(0xD);
+ SetMainCallback2(sub_8088454);
+}
+
+
+//sub_8088430
+static void sub_8088430(void)
+{
+ SetVBlankCallback(0);
+ SetHBlankCallback(0);
+}
+
+
+//sub_8088444
+static void sub_8088444(void)
+{
+ SetVBlankCallback(sub_8088374);
+}
+
+//sub_8088454
+static void sub_8088454(void)
+{
+ int i;
+ switch (sOptionsMenu->state)
+ {
+ case 0:
+ sub_8088430();
+ sOptionsMenu->state++;
+ break;
+ case 1:
+ sub_8088530();
+ sOptionsMenu->state++;
+ break;
+ case 2:
+ sub_80886D4();
+ sOptionsMenu->state++;
+ break;
+ case 3:
+ if (!(sub_80886F0()));
+ return;
+ sOptionsMenu->state++;
+ break;
+ case 4:
+ sub_8088BD0();
+ sOptionsMenu->state++;
+ break;
+ case 5:
+ sub_8088C0C();
+ sOptionsMenu->state++;
+ break;
+ case 6:
+ sub_8088D8C();
+ sOptionsMenu->state++;
+ break;
+ case 7:
+ for (i = 0; i < MENUITEM_COUNT; i++)
+ sub_80889A8(i);
+ sOptionsMenu->state++;
+ break;
+ case 8:
+ sub_8088DE0(sOptionsMenu->unkE);
+ sOptionsMenu->state++;
+ break;
+ case 9:
+ sub_8088680();
+ sOptionsMenu->state++;
+ break;
+ default:
+ sub_8088514();
+ return;
+ }
+}
+
+//sub_8088514
+static void sub_8088514(void)
+{
+ CreateTask(sub_8088780, 0);
+ SetMainCallback2(sub_808835C);
+}
+
+
+//sub_8088530
+static void sub_8088530(void)
+{
+ void * dest = (void *) VRAM;
+ DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000);
+
+ DmaClear32(3, (void *)OAM, OAM_SIZE);
+ DmaClear16(3, (void *)PLTT, PLTT_SIZE);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8)
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+ InitWindows(gUnknown_83CC2B8);
+ DeactivateAllTextPrinters();
+ SetGpuReg(REG_OFFSET_BLDCNT, 193);
+ SetGpuReg(REG_OFFSET_BLDY, 2);
+ SetGpuReg(REG_OFFSET_WININ, 1);
+ SetGpuReg(REG_OFFSET_WINOUT, 27);
+ SetGpuReg(0, 0x3040);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+};
+
+//sub_8088680
+static void sub_8088680(void)
+{
+ s32 x;
+ x = 0xE4 - GetStringWidth(0, gUnknown_8419E57, 0);
+ FillWindowPixelBuffer(WIN_OPTIONS, 0xFF);
+ AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gUnknown_8419E57);
+ PutWindowTilemap(2);
+ CopyWindowToVram(2, 3);
+}
+
+
+//sub_80886D4
+static void sub_80886D4(void)
+{
+ ResetSpriteData();
+ ResetPaletteFade();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ ScanlineEffect_Stop();
+}
+
+//sub_80886F0
+static bool8 sub_80886F0(void)
+{
+ switch (sOptionsMenu->state2)
+ {
+ case 0:
+ LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA);
+ break;
+ case 1:
+ LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20);
+ break;
+ case 2:
+ LoadPalette(gUnknown_83CC2E4, 0x10, 0x20);
+ LoadPalette(stdpal_get(2), 0xF0, 0x20);
+ break;
+ case 3:
+ sub_814FDA0(1, 0x1B3, 0x30);
+ break;
+ default:
+ return TRUE;
+ }
+ sOptionsMenu->state2++;
+ return FALSE;
+}
+
+
+//sub_8088780
+static void sub_8088780(u8 taskId)
+{
+ switch (sOptionsMenu->state3)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ sub_8088444();
+ sOptionsMenu->state3++;
+ break;
+ case 2:
+ if (sub_80BF72C)
+ return;
+ switch (sub_80888C0())
+ {
+ case 0:
+ return;
+ case 1:
+ sOptionsMenu->state3++;
+ break;
+ case 2:
+ LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA);
+ LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20);
+ sub_80889A8(sOptionsMenu->unkE);
+ return;
+ case 3:
+ sub_8088DE0(sOptionsMenu->unkE);
+ return;
+ case 4:
+ sub_80889A8(sOptionsMenu->unkE);
+ return;
+ default:
+ return;
+ }
+ case 3:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ sOptionsMenu->state3++;
+ break;
+ case 1:
+ case 4:
+ if (gPaletteFade.active)
+ return;
+ sOptionsMenu->state3++;
+ return;
+ case 5:
+ sub_8088B00(taskId);
+ return;
+ default:
+ return;
+ }
+}
+
+
+//OptionsMenu_ProcessInput
+static u8 sub_80888C0(void)
+{
+ u16 current, selection;
+ if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ {
+ selection = 2 * sOptionsMenu->unkE;
+ current = sOptionsMenu->option[selection];
+
+ if (current == gUnknown_83CC304[selection] - 1)
+ sOptionsMenu->option[selection] = 0;
+ else
+ sOptionsMenu->option[selection] = current + 1;
+ if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE)
+ return 2;
+ else
+ return 4;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ {
+ selection = 2*sOptionsMenu->unkE;
+ current = sOptionsMenu->option[selection];
+ if (current == 0)
+ sOptionsMenu->option[selection] = gUnknown_83CC304[selection] - 1;
+ else
+ sOptionsMenu->option[selection] = current - 1;
+ if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE)
+ return 2;
+ else
+ return 4;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ selection = sOptionsMenu->unkE;
+ if (selection == MENUITEM_TEXTSPEED)
+ sOptionsMenu->unkE = MENUITEM_CANCEL;
+ else
+ sOptionsMenu->unkE = selection - 1;
+ return 3;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ selection = sOptionsMenu->unkE;
+ if (selection == MENUITEM_CANCEL)
+ sOptionsMenu->unkE = MENUITEM_TEXTSPEED;
+ else
+ sOptionsMenu->unkE = selection + 1;
+ return 3;
+ }
+ else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON))
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+/*
+// must match with goto :(
+bool sub_80888C0()
+{
+ int v0; // r0@2
+ _WORD *v1; // r3@2
+ int v2; // r4@2
+ __int16 v3; // r0@3
+ int v4; // r3@8
+ __int16 v5; // r0@8
+ int v7; // r1@14
+ signed __int16 v8; // r0@15
+ int v9; // r0@18
+
+ if (gMain.buttons4_new_and_keyrepeat & DPAD_RIGHT)
+ {
+ v0 = 2 * *(_WORD *)(sOptionsMenu + 14);
+ v1 = (_WORD *)(sOptionsMenu + v0);
+ v2 = *(_WORD *)(sOptionsMenu + v0);
+ if ( v2 == *(_WORD *)((char *)&sOptionsMenuItemCounts + v0) - 1 )
+ v3 = 0;
+ else
+ v3 = v2 + 1;
+ *v1 = v3;
+ if ( *(_WORD *)(sOptionsMenu + 14) != 5 )
+ return 4;
+ return 2;
+ }
+ if ( gMain.buttons4_new_and_keyrepeat & DPAD_LEFT )
+ {
+ v4 = 2 * *(_WORD *)(sOptionsMenu + 14);
+ v5 = *(_WORD *)(sOptionsMenu + v4);
+ if ( !*(_WORD *)(sOptionsMenu + v4) )
+ v5 = *(_WORD *)((char *)&sOptionsMenuItemCounts + v4);
+ *(_WORD *)(sOptionsMenu + v4) = v5 - 1;
+ if ( *(_WORD *)(sOptionsMenu + 14) != 5 )
+ return 4;
+ return 2;
+ }
+ if ( gMain.buttons4_new_and_keyrepeat & 0x40 )
+ {
+ v7 = sOptionsMenu;
+ if ( *(_WORD *)(sOptionsMenu + 14) )
+ v8 = *(_WORD *)(sOptionsMenu + 14) - 1;
+ else
+ v8 = 6;
+ goto LABEL_21;
+ }
+ if ( gMain.buttons4_new_and_keyrepeat & 0x80 )
+ {
+ v7 = sOptionsMenu;
+ v9 = *(_WORD *)(sOptionsMenu + 14);
+ if ( v9 == 6 )
+ {
+ *(_WORD *)(sOptionsMenu + 14) = 0;
+ return 3;
+ }
+ v8 = v9 + 1;
+LABEL_21:
+ *(_WORD *)(v7 + 14) = v8;
+ return 3;
+ }
+ return gMain.buttons3_new_remapped & 2 || gMain.buttons3_new_remapped & 1;
+}
+*/
+
+
+//sub_80889A8
+static void sub_80889A8(u8 selection)
+{
+ u8* dst;
+ u8* str;
+ u8* v8;
+ u8 x, y;
+
+ x = 0x82;
+ memcpy(dst, gUnknown_83CC363, 3);
+ y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2;
+ FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT));
+ switch (selection)
+ {
+ case MENUITEM_TEXTSPEED:
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC330);
+ break;
+ case MENUITEM_BATTLESCENE:
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC33C);
+ break;
+ case MENUITEM_BATTLESTYLE:
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC344);
+ break;
+ case MENUITEM_SOUND:
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC34C);
+ break;
+ case MENUITEM_BUTTONMODE:
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC354);
+ break;
+ case MENUITEM_FRAMETYPE:
+ StringCopy(str, gUnknown_8419E52);
+ ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2);
+ StringAppendN(str, v8, 3);
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str);
+ break;
+ default:
+ break;
+ }
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 3);
+}
+
+
+//sub_8088B00
+static void sub_8088B00(u8 taskId)
+{
+ gFieldCallback = sub_807DF64;
+ SetMainCallback2(gMain.savedCallback);
+ FreeAllWindowBuffers();
+
+ gSaveBlock2Ptr->optionsTextSpeed = sOptionsMenu->option[MENUITEM_TEXTSPEED] & 0x7;
+ gSaveBlock2Ptr->optionsBattleSceneOff = sOptionsMenu->option[MENUITEM_BATTLESCENE] & 0x1;
+ gSaveBlock2Ptr->optionsBattleStyle = sOptionsMenu->option[MENUITEM_BATTLESTYLE] & 0x1;
+ gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND] & 0x1;
+ gSaveBlock2Ptr->optionsButtonMode = sOptionsMenu->option[MENUITEM_BUTTONMODE];
+ gSaveBlock2Ptr->optionsWindowFrameType = sOptionsMenu->option[MENUITEM_FRAMETYPE];
+
+ SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
+ Free(sOptionsMenu);
+ sOptionsMenu = NULL;
+ DestroyTask(taskId);
+}
+
+
+//sub_8088BD0
+static void sub_8088BD0(void)
+{
+ FillWindowPixelBuffer(0, 0x11);
+ AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gUnknown_8419DCC, 8, 1, TEXT_SPEED_FF, NULL);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+}
+
+
+//sub_8088C0C
+static void sub_8088C0C(void)
+{
+ FillBgTilemapBufferRect(1, 0x1B3, 1, 2, 1, 1, 3);
+ FillBgTilemapBufferRect(1, 0x1B4, 2, 2, 0x1B, 1, 3);
+ FillBgTilemapBufferRect(1, 0x1B5, 0x1C, 2, 1, 1, 3);
+ FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, 2, 3);
+ FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, 2, 3);
+ FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3);
+ FillBgTilemapBufferRect(1, 0x1BA, 2, 5, 0x1B, 1, 3);
+ FillBgTilemapBufferRect(1, 0x1BB, 0x1C, 5, 1, 1, 3);
+ FillBgTilemapBufferRect(1, 0x1AA, 1, 6, 1, 1, 2);
+ FillBgTilemapBufferRect(1, 0x1AB, 2, 6, 0x1A, 1, 2);
+ FillBgTilemapBufferRect(1, 0x1AC, 0x1C, 6, 1, 1, 2);
+ FillBgTilemapBufferRect(1, 0x1AD, 1, 7, 1, 0x10, 2);
+ FillBgTilemapBufferRect(1, 0x1AF, 0x1C, 7, 1, 0x10, 2);
+ FillBgTilemapBufferRect(1, 0x1B0, 1, 0x13, 1, 1, 2);
+ FillBgTilemapBufferRect(1, 0x1B1, 2, 0x13, 0x1A, 1, 2);
+ FillBgTilemapBufferRect(1, 0x1B2, 0x1C, 0x13, 1, 1, 2);
+ CopyBgTilemapBufferToVram(1);
+}
+
+
+//sub_8088D8C
+static void sub_8088D8C(void)
+{
+ int i;
+ u8 attr;
+
+ FillWindowPixelBuffer(1, 0x11);
+
+ for (i = 0; i < MENUITEM_COUNT; i++)
+ {
+ attr = (((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))*i) + 2) - i;
+ AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, attr, 0xFF, 0);
+ }
+}
+
+
+//sub_8088DE0
+static void sub_8088DE0(u8 selection)
+{
+ u8 attr;
+ attr = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT);
+ SetGpuReg(0x44, ((selection * (attr - 1) + 58) << 8) | (selection * (attr - 1) + 58 + attr));
+ SetGpuReg(0x40, 4320);
+}
+
diff --git a/sym_ewram.txt b/sym_ewram.txt
index a892eb532..cec65b59c 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -226,7 +226,7 @@ gFieldEffectArguments: @ 20386E0
.include "src/scanline_effect.o"
.align 2
-gUnknown_2039620: @ 2039620
+sOptionsMenu: @ 2039620
.space 0x4
gTrainerCards: @ 2039624