summaryrefslogtreecommitdiff
path: root/engine/menu.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/menu.asm')
-rwxr-xr-xengine/menu.asm754
1 files changed, 505 insertions, 249 deletions
diff --git a/engine/menu.asm b/engine/menu.asm
index 6978a0e54..074b2a28c 100755
--- a/engine/menu.asm
+++ b/engine/menu.asm
@@ -1,54 +1,57 @@
-Function2400e:: ; 2400e
+_2DMenu_:: ; 2400e
ld hl, CopyMenuData2
- ld a, [wcf94]
+ ld a, [wMenuData2_2DMenuItemStringsBank]
rst FarCall
- call Function24085
+
+ call Draw2DMenu
call UpdateSprites
call ApplyTilemap
- call Function2408f
+ call Get2DMenuSelection
ret
; 24022
-Function24022:: ; 24022
+_InterpretBattleMenu:: ; 24022
ld hl, CopyMenuData2
- ld a, [wcf94]
+ ld a, [wMenuData2_2DMenuItemStringsBank]
rst FarCall
- call Function24085
+
+ call Draw2DMenu
callba MobileTextBorder
call UpdateSprites
call ApplyTilemap
- call Function2408f
+ call Get2DMenuSelection
ret
; 2403c
-Function2403c:: ; 2403c
+_InterpretMobileMenu:: ; 2403c
ld hl, CopyMenuData2
- ld a, [wcf94]
+ ld a, [wMenuData2_2DMenuItemStringsBank]
rst FarCall
- call Function24085
+
+ call Draw2DMenu
callba MobileTextBorder
call UpdateSprites
call ApplyTilemap
- call Function2411a
- ld hl, wcfa5
+ call Init2DMenuCursorPosition
+ ld hl, w2DMenuFlags1
set 7, [hl]
-.asm_2405a
+.loop
call DelayFrame
callba Function10032e
ld a, [wcd2b]
and a
- jr nz, .asm_24076
- call Function241ba
- ld a, [wcfa8]
+ jr nz, .quit
+ call MobileMenuJoypad
+ ld a, [wMenuJoypadFilter]
and c
- jr z, .asm_2405a
- call Function24098
+ jr z, .loop
+ call Mobile_GetMenuSelection
ret
-.asm_24076
- ld a, [wcfa4]
+.quit
+ ld a, [w2DMenuNumCols]
ld c, a
- ld a, [wcfa3]
+ ld a, [w2DMenuNumRows]
call SimpleMultiply
ld [wMenuCursorBuffer], a
and a
@@ -57,174 +60,173 @@ Function2403c:: ; 2403c
-Function24085: ; 24085
+Draw2DMenu: ; 24085
xor a
ld [hBGMapMode], a
call MenuBox
- call Function240db
+ call Place2DMenuItemStrings
ret
; 2408f
-Function2408f: ; 2408f
- call Function2411a
- call Function1bc9
- call Function1ff8
-
-Function24098: ; 24098
+Get2DMenuSelection: ; 2408f
+ call Init2DMenuCursorPosition
+ call StaticMenuJoypad
+ call MenuClickSound
+Mobile_GetMenuSelection: ; 24098
ld a, [wMenuData2Flags]
bit 1, a
- jr z, .asm_240a6
- call Function1bdd
- bit 2, a
- jr nz, .asm_240c9
+ jr z, .skip
+ call GetMenuJoypad
+ bit SELECT_F, a
+ jr nz, .quit1
-.asm_240a6
+.skip
ld a, [wMenuData2Flags]
bit 0, a
- jr nz, .asm_240b4
- call Function1bdd
- bit 1, a
- jr nz, .asm_240cb
+ jr nz, .skip2
+ call GetMenuJoypad
+ bit B_BUTTON_F, a
+ jr nz, .quit2
-.asm_240b4
- ld a, [wcfa4]
+.skip2
+ ld a, [w2DMenuNumCols]
ld c, a
- ld a, [MenuSelection2]
+ ld a, [wMenuCursorY]
dec a
call SimpleMultiply
ld c, a
- ld a, [wcfaa]
+ ld a, [wMenuCursorX]
add c
ld [wMenuCursorBuffer], a
and a
ret
-.asm_240c9
+.quit1
scf
ret
-.asm_240cb
+.quit2
scf
ret
; 240cd
-Function240cd: ; 240cd
+GetMenuNumberOfColumns: ; 240cd
ld a, [wMenuData2Items]
and $f
ret
; 240d3
-Function240d3: ; 240d3
+GetMenuNumberOfRows: ; 240d3
ld a, [wMenuData2Items]
swap a
and $f
ret
; 240db
-Function240db: ; 240db
- ld hl, wcf95
+Place2DMenuItemStrings: ; 240db
+ ld hl, wMenuData2_2DMenuItemStringsAddr
ld e, [hl]
inc hl
ld d, [hl]
call GetMenuTextStartCoord
call Coord2Tile
- call Function240d3
+ call GetMenuNumberOfRows
ld b, a
-.asm_240eb
+.row
push bc
push hl
- call Function240cd
+ call GetMenuNumberOfColumns
ld c, a
-.asm_240f1
+.col
push bc
- ld a, [wcf94]
- call Function201c
+ ld a, [wMenuData2_2DMenuItemStringsBank]
+ call Place2DMenuItemName
inc de
- ld a, [wcf93]
+ ld a, [wMenuData2Spacing]
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
pop bc
dec c
- jr nz, .asm_240f1
+ jr nz, .col
pop hl
- ld bc, $28
+ ld bc, 2 * SCREEN_WIDTH
add hl, bc
pop bc
dec b
- jr nz, .asm_240eb
- ld hl, wcf98
+ jr nz, .row
+ ld hl, wMenuData2_2DMenuFunctionAddr
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
- ld a, [wcf97]
+ ld a, [wMenuData2_2DMenuFunctionBank]
rst FarCall
ret
; 2411a
-Function2411a: ; 2411a (9:411a)
+Init2DMenuCursorPosition: ; 2411a (9:411a)
call GetMenuTextStartCoord
ld a, b
- ld [wcfa1], a
+ ld [w2DMenuCursorInitY], a
dec c
ld a, c
- ld [wcfa2], a
- call Function240d3
- ld [wcfa3], a
- call Function240cd
- ld [wcfa4], a
- call Function24179
- call Function2418a
- call Function24193
- ld a, [wcfa4]
+ ld [w2DMenuCursorInitX], a
+ call GetMenuNumberOfRows
+ ld [w2DMenuNumRows], a
+ call GetMenuNumberOfColumns
+ ld [w2DMenuNumCols], a
+ call .InitFlags_a
+ call .InitFlags_b
+ call .InitFlags_c
+ ld a, [w2DMenuNumCols]
ld e, a
ld a, [wMenuCursorBuffer]
ld b, a
xor a
- ld d, $0
-.asm_24146
+ ld d, 0
+.loop
inc d
add e
cp b
- jr c, .asm_24146
+ jr c, .loop
sub e
ld c, a
ld a, b
sub c
and a
- jr z, .asm_24157
+ jr z, .reset1
cp e
- jr z, .asm_24159
- jr c, .asm_24159
-.asm_24157
- ld a, $1
-.asm_24159
- ld [wcfaa], a
- ld a, [wcfa3]
+ jr z, .okay1
+ jr c, .okay1
+.reset1
+ ld a, 1
+.okay1
+ ld [wMenuCursorX], a
+ ld a, [w2DMenuNumRows]
ld e, a
ld a, d
and a
- jr z, .asm_24169
+ jr z, .reset2
cp e
- jr z, .asm_2416b
- jr c, .asm_2416b
-.asm_24169
- ld a, $1
-.asm_2416b
- ld [MenuSelection2], a
+ jr z, .okay2
+ jr c, .okay2
+.reset2
+ ld a, 1
+.okay2
+ ld [wMenuCursorY], a
xor a
- ld [wcfab], a
- ld [wcfac], a
- ld [wcfad], a
+ ld [wCursorOffCharacter], a
+ ld [wCursorCurrentTile], a
+ ld [wCursorCurrentTile + 1], a
ret
; 24179
-Function24179: ; 24179
+.InitFlags_a: ; 24179
xor a
- ld hl, wcfa5
+ ld hl, w2DMenuFlags1
ld [hli], a
ld [hld], a
ld a, [wMenuData2Flags]
@@ -235,89 +237,85 @@ Function24179: ; 24179
ret
; 2418a
-Function2418a: ; 2418a
- ld a, [wcf93]
+.InitFlags_b: ; 2418a
+ ld a, [wMenuData2Spacing]
or $20
- ld [wcfa7], a
+ ld [w2DMenuCursorOffsets], a
ret
; 24193
-Function24193: ; 24193
+.InitFlags_c: ; 24193
ld hl, wMenuData2Flags
- ld a, $1
+ ld a, A_BUTTON
bit 0, [hl]
- jr nz, .asm_2419e
- or $2
-
-.asm_2419e
+ jr nz, .skip
+ or B_BUTTON
+.skip
bit 1, [hl]
- jr z, .asm_241a4
- or $4
-
-.asm_241a4
- ld [wcfa8], a
+ jr z, .skip2
+ or SELECT
+.skip2
+ ld [wMenuJoypadFilter], a
ret
; 241a8
-Function241a8:: ; 241a8
- call Function24329
-Function241ab:: ; 241ab
- ld hl, wcfa6
+_StaticMenuJoypad:: ; 241a8
+ call Place2DMenuCursor
+_ScrollingMenuJoypad:: ; 241ab
+ ld hl, w2DMenuFlags2
res 7, [hl]
ld a, [hBGMapMode]
push af
- call Function24216
+ call MenuJoypadLoop
pop af
ld [hBGMapMode], a
ret
; 241ba
-Function241ba: ; 241ba
- ld hl, wcfa6
+MobileMenuJoypad: ; 241ba
+ ld hl, w2DMenuFlags2
res 7, [hl]
ld a, [hBGMapMode]
push af
- call Function2431a
- call Function24249
- jr nc, .asm_241cd
- call Function24270
-
-.asm_241cd
+ call Move2DMenuCursor
+ call Do2DMenuRTCJoypad
+ jr nc, .skip_joypad
+ call _2DMenuInterpretJoypad
+.skip_joypad
pop af
ld [hBGMapMode], a
- call Function1bdd
+ call GetMenuJoypad
ld c, a
ret
; 241d5
Function241d5: ; 241d5
- call Function24329
+; Unreferenced
+ call Place2DMenuCursor
.loop
- call Function2431a
+ call Move2DMenuCursor
call Function10402d ; BUG: This function is in another bank.
; Pointer in current bank (9) is bogus.
- call Function241fa
+ call .loop2
jr nc, .done
- call Function24270
+ call _2DMenuInterpretJoypad
jr c, .done
- ld a, [wcfa5]
+ ld a, [w2DMenuFlags1]
bit 7, a
jr nz, .done
- call Function1bdd
+ call GetMenuJoypad
ld c, a
- ld a, [wcfa8]
+ ld a, [wMenuJoypadFilter]
and c
jr z, .loop
.done
ret
-; 241fa
-Function241fa: ; 241fa
-.loop
- call Function24259
+.loop2
+ call Menu_WasButtonPressed
ret c
ld c, 1
ld b, 3
@@ -326,36 +324,36 @@ Function241fa: ; 241fa
ret c
callba Function100337
ret c
- ld a, [wcfa5]
+ ld a, [w2DMenuFlags1]
bit 7, a
- jr z, .loop
+ jr z, .loop2
and a
ret
; 24216
-Function24216: ; 24216
-.asm_24216
- call Function2431a
- call Function24238
- call Function24249
- jr nc, .asm_24237
- call Function24270
- jr c, .asm_24237
- ld a, [wcfa5]
+MenuJoypadLoop: ; 24216
+.loop
+ call Move2DMenuCursor
+ call .BGMap_OAM
+ call Do2DMenuRTCJoypad
+ jr nc, .done
+ call _2DMenuInterpretJoypad
+ jr c, .done
+ ld a, [w2DMenuFlags1]
bit 7, a
- jr nz, .asm_24237
- call Function1bdd
+ jr nz, .done
+ call GetMenuJoypad
ld b, a
- ld a, [wcfa8]
+ ld a, [wMenuJoypadFilter]
and b
- jr z, .asm_24216
+ jr z, .loop
-.asm_24237
+.done
ret
; 24238
-Function24238: ; 24238
+.BGMap_OAM: ; 24238
ld a, [hOAMUpdate]
push af
ld a, $1
@@ -368,220 +366,478 @@ Function24238: ; 24238
ret
; 24249
-Function24249: ; 24249
-.asm_24249
+Do2DMenuRTCJoypad: ; 24249
+.loopRTC
call RTC
- call Function24259
+ call Menu_WasButtonPressed
ret c
- ld a, [wcfa5]
+ ld a, [w2DMenuFlags1]
bit 7, a
- jr z, .asm_24249
+ jr z, .loopRTC
and a
ret
; 24259
-Function24259: ; 24259
- ld a, [wcfa5]
+Menu_WasButtonPressed: ; 24259
+ ld a, [w2DMenuFlags1]
bit 6, a
- jr z, .asm_24266
- callab Function8cf62
+ jr z, .skip_to_joypad
+ callab PlaySpriteAnimationsAndDelayFrame
-.asm_24266
+.skip_to_joypad
call JoyTextDelay
- call Function1bdd
+ call GetMenuJoypad
and a
ret z
scf
ret
; 24270
-Function24270: ; 24270
- call Function1bdd
- bit 0, a
- jp nz, Function24318
- bit 1, a
- jp nz, Function24318
- bit 2, a
- jp nz, Function24318
- bit 3, a
- jp nz, Function24318
- bit 4, a
- jr nz, .asm_242fa
- bit 5, a
- jr nz, .asm_242dc
- bit 6, a
- jr nz, .asm_242be
- bit 7, a
- jr nz, .asm_242a0
+_2DMenuInterpretJoypad: ; 24270
+ call GetMenuJoypad
+ bit A_BUTTON_F, a
+ jp nz, .a_b_start_select
+ bit B_BUTTON_F, a
+ jp nz, .a_b_start_select
+ bit SELECT_F, a
+ jp nz, .a_b_start_select
+ bit START_F, a
+ jp nz, .a_b_start_select
+ bit D_RIGHT_F, a
+ jr nz, .d_right
+ bit D_LEFT_F, a
+ jr nz, .d_left
+ bit D_UP_F, a
+ jr nz, .d_up
+ bit D_DOWN_F, a
+ jr nz, .d_down
and a
ret
-.asm_24299: ; 24299
- ld hl, wcfa6
+.set_bit_7: ; 24299
+ ld hl, w2DMenuFlags2
set 7, [hl]
scf
ret
-.asm_242a0
- ld hl, MenuSelection2
- ld a, [wcfa3]
+.d_down
+ ld hl, wMenuCursorY
+ ld a, [w2DMenuNumRows]
cp [hl]
- jr z, .asm_242ac
+ jr z, .check_wrap_around_down
inc [hl]
xor a
ret
-.asm_242ac
- ld a, [wcfa5]
+.check_wrap_around_down
+ ld a, [w2DMenuFlags1]
bit 5, a
- jr nz, .asm_242ba
+ jr nz, .wrap_around_down
bit 3, a
- jp nz, .asm_24299
+ jp nz, .set_bit_7
xor a
ret
-.asm_242ba
+.wrap_around_down
ld [hl], $1
xor a
ret
-.asm_242be
- ld hl, MenuSelection2
+.d_up
+ ld hl, wMenuCursorY
ld a, [hl]
dec a
- jr z, .asm_242c8
+ jr z, .check_wrap_around_up
ld [hl], a
xor a
ret
-.asm_242c8
- ld a, [wcfa5]
+.check_wrap_around_up
+ ld a, [w2DMenuFlags1]
bit 5, a
- jr nz, .asm_242d6
+ jr nz, .wrap_around_up
bit 2, a
- jp nz, .asm_24299
+ jp nz, .set_bit_7
xor a
ret
-.asm_242d6
- ld a, [wcfa3]
+.wrap_around_up
+ ld a, [w2DMenuNumRows]
ld [hl], a
xor a
ret
-.asm_242dc
- ld hl, wcfaa
+.d_left
+ ld hl, wMenuCursorX
ld a, [hl]
dec a
- jr z, .asm_242e6
+ jr z, .check_wrap_around_left
ld [hl], a
xor a
ret
-.asm_242e6
- ld a, [wcfa5]
+.check_wrap_around_left
+ ld a, [w2DMenuFlags1]
bit 4, a
- jr nz, .asm_242f4
+ jr nz, .wrap_around_left
bit 1, a
- jp nz, .asm_24299
+ jp nz, .set_bit_7
xor a
ret
-.asm_242f4
- ld a, [wcfa4]
+.wrap_around_left
+ ld a, [w2DMenuNumCols]
ld [hl], a
xor a
ret
-.asm_242fa
- ld hl, wcfaa
- ld a, [wcfa4]
+.d_right
+ ld hl, wMenuCursorX
+ ld a, [w2DMenuNumCols]
cp [hl]
- jr z, .asm_24306
+ jr z, .check_wrap_around_right
inc [hl]
xor a
ret
-.asm_24306
- ld a, [wcfa5]
+.check_wrap_around_right
+ ld a, [w2DMenuFlags1]
bit 4, a
- jr nz, .asm_24314
+ jr nz, .wrap_around_right
bit 0, a
- jp nz, .asm_24299
+ jp nz, .set_bit_7
xor a
ret
-.asm_24314
+.wrap_around_right
ld [hl], $1
xor a
ret
; 24318
-Function24318: ; 24318
+.a_b_start_select: ; 24318
xor a
ret
; 2431a
-Function2431a: ; 2431a
- ld hl, wcfac
+Move2DMenuCursor: ; 2431a
+ ld hl, wCursorCurrentTile
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [hl]
- cp $ed
- jr nz, Function24329
- ld a, [wcfab]
+ cp "▶"
+ jr nz, Place2DMenuCursor
+ ld a, [wCursorOffCharacter]
ld [hl], a
-
-Function24329: ; 24329
- ld a, [wcfa1]
+Place2DMenuCursor: ; 24329
+ ld a, [w2DMenuCursorInitY]
ld b, a
- ld a, [wcfa2]
+ ld a, [w2DMenuCursorInitX]
ld c, a
call Coord2Tile
- ld a, [wcfa7]
+ ld a, [w2DMenuCursorOffsets]
swap a
and $f
ld c, a
- ld a, [MenuSelection2]
+ ld a, [wMenuCursorY]
ld b, a
xor a
dec b
- jr z, .asm_24348
-.asm_24344
+ jr z, .got_row
+.row_loop
add c
dec b
- jr nz, .asm_24344
+ jr nz, .row_loop
-.asm_24348
- ld c, $14
+.got_row
+ ld c, SCREEN_WIDTH
call AddNTimes
- ld a, [wcfa7]
+ ld a, [w2DMenuCursorOffsets]
and $f
ld c, a
- ld a, [wcfaa]
+ ld a, [wMenuCursorX]
ld b, a
xor a
dec b
- jr z, .asm_2435f
-.asm_2435b
+ jr z, .got_col
+.col_loop
add c
dec b
- jr nz, .asm_2435b
+ jr nz, .col_loop
-.asm_2435f
+.got_col
ld c, a
add hl, bc
ld a, [hl]
- cp $ed
- jr z, .asm_2436b
- ld [wcfab], a
- ld [hl], $ed
+ cp "▶"
+ jr z, .cursor_on
+ ld [wCursorOffCharacter], a
+ ld [hl], "▶"
-.asm_2436b
+.cursor_on
ld a, l
- ld [wcfac], a
+ ld [wCursorCurrentTile], a
ld a, h
- ld [wcfad], a
+ ld [wCursorCurrentTile + 1], a
ret
; 24374
+
+_PushWindow:: ; 24374
+ ld a, [rSVBK]
+ push af
+ ld a, $7
+ ld [rSVBK], a
+
+ ld hl, wWindowStackPointer
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ push de
+
+ ld b, $10
+ ld hl, wMenuFlags
+.loop
+ ld a, [hli]
+ ld [de], a
+ dec de
+ dec b
+ jr nz, .loop
+
+; If bit 6 or 7 of the menu flags is set, set bit 0 of the address
+; at 7:[wWindowStackPointer], and draw the menu using the coordinates from the header.
+; Otherwise, reset bit 0 of 7:[wWindowStackPointer].
+ ld a, [wMenuFlags]
+ bit 6, a
+ jr nz, .bit_6
+ bit 7, a
+ jr z, .not_bit_7
+
+.bit_6
+ ld hl, wWindowStackPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ set 0, [hl]
+ call MenuBoxCoord2Tile
+ call .copy
+ call MenuBoxCoord2Attr
+ call .copy
+ jr .done
+
+.not_bit_7
+ pop hl ; last-pushed register was de
+ push hl
+ ld a, [hld]
+ ld l, [hl]
+ ld h, a
+ res 0, [hl]
+
+.done
+ pop hl
+ call .ret ; empty function
+ ld a, h
+ ld [de], a
+ dec de
+ ld a, l
+ ld [de], a
+ dec de
+ ld hl, wWindowStackPointer
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ pop af
+ ld [rSVBK], a
+ ld hl, wWindowStackSize
+ inc [hl]
+ ret
+; 243cd
+
+.copy: ; 243cd
+ call GetMenuBoxDims
+ inc b
+ inc c
+ call .ret ; empty function
+
+.row
+ push bc
+ push hl
+
+.col
+ ld a, [hli]
+ ld [de], a
+ dec de
+ dec c
+ jr nz, .col
+
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+
+ ret
+; 243e7
+
+.ret: ; 243e7
+ ret
+; 243e8
+
+_ExitMenu:: ; 243e8
+ xor a
+ ld [hBGMapMode], a
+
+ ld a, [rSVBK]
+ push af
+ ld a, $7
+ ld [rSVBK], a
+
+ call GetWindowStackTop
+ ld a, l
+ or h
+ jp z, Error_Cant_ExitMenu
+ ld a, l
+ ld [wWindowStackPointer], a
+ ld a, h
+ ld [wWindowStackPointer + 1], a
+ call PopWindow
+ ld a, [wMenuFlags]
+ bit 0, a
+ jr z, .loop
+ ld d, h
+ ld e, l
+ call RestoreTileBackup
+
+.loop
+ call GetWindowStackTop
+ ld a, h
+ or l
+ jr z, .done
+ call PopWindow
+
+.done
+ pop af
+ ld [rSVBK], a
+ ld hl, wWindowStackSize
+ dec [hl]
+ ret
+; 24423
+
+Function24423: ; 24423
+; Unreferenced
+ ld a, [VramState]
+ bit 0, a
+ ret z
+ xor a
+ call GetSRAMBank
+ hlcoord 0, 0
+ ld de, sScratch
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ call CopyBytes
+ call CloseSRAM
+ call OverworldTextModeSwitch
+ xor a
+ call GetSRAMBank
+ ld hl, sScratch
+ decoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+.loop
+ ld a, [hl]
+ cp $61
+ jr c, .next
+ ld [de], a
+.next
+ inc hl
+ inc de
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
+ call CloseSRAM
+ ret
+; 2445d
+
+Error_Cant_ExitMenu: ; 2445d
+ ld hl, .Text_NoWindowsAvailableForPopping
+ call PrintText
+ call WaitBGMap
+.InfiniteLoop
+ jr .InfiniteLoop
+; 24468
+
+.Text_NoWindowsAvailableForPopping: ; 24468
+ text_jump UnknownText_0x1c46b7
+ db "@"
+; 2446d
+
+_InitVerticalMenuCursor:: ; 2446d
+ ld a, [wMenuData2Flags]
+ ld b, a
+ ld hl, w2DMenuCursorInitY
+ ld a, [wMenuBorderTopCoord]
+ inc a
+ bit 6, b
+ jr nz, .skip_offset
+ inc a
+.skip_offset
+ ld [hli], a
+; w2DMenuCursorInitX
+ ld a, [wMenuBorderLeftCoord]
+ inc a
+ ld [hli], a
+; w2DMenuNumRows
+ ld a, [wMenuData2Items]
+ ld [hli], a
+; w2DMenuNumCols
+ ld a, 1
+ ld [hli], a
+; w2DMenuFlags1
+ ld [hl], $0
+ bit 5, b
+ jr z, .skip_bit_5
+ set 5, [hl]
+.skip_bit_5
+ ld a, [wMenuFlags]
+ bit 4, a
+ jr z, .skip_bit_6
+ set 6, [hl]
+.skip_bit_6
+ inc hl
+; w2DMenuFlags2
+ xor a
+ ld [hli], a
+; w2DMenuCursorOffsets
+ ln a, 2, 0
+ ld [hli], a
+; wMenuJoypadFilter
+ ld a, A_BUTTON
+ bit 0, b
+ jr nz, .skip_bit_1
+ add B_BUTTON
+.skip_bit_1
+ ld [hli], a
+; wMenuCursorY
+ ld a, [wMenuCursorBuffer]
+ and a
+ jr z, .load_at_the_top
+ ld c, a
+ ld a, [wMenuData2Items]
+ cp c
+ jr nc, .load_position
+.load_at_the_top
+ ld c, 1
+.load_position
+ ld [hl], c
+ inc hl
+; wMenuCursorX
+ ld a, 1
+ ld [hli], a
+; wCursorOffCharacter, wCursorCurrentTile
+ xor a
+rept 3
+ ld [hli], a
+endr
+ ret
+; 244c3