2015-12-15 15:59:49 -08:00
|
|
|
_2DMenu_:: ; 2400e
|
2015-11-10 13:53:37 -08:00
|
|
|
ld hl, CopyMenuData2
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuData2_2DMenuItemStringsBank]
|
2015-11-04 11:02:11 -08:00
|
|
|
rst FarCall
|
2015-12-15 15:59:49 -08:00
|
|
|
|
|
|
|
call Draw2DMenu
|
2015-11-04 11:02:11 -08:00
|
|
|
call UpdateSprites
|
2015-11-25 07:16:29 -08:00
|
|
|
call ApplyTilemap
|
2015-12-15 15:59:49 -08:00
|
|
|
call Get2DMenuSelection
|
2015-11-04 11:02:11 -08:00
|
|
|
ret
|
|
|
|
; 24022
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
_InterpretBattleMenu:: ; 24022
|
2015-11-10 13:53:37 -08:00
|
|
|
ld hl, CopyMenuData2
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuData2_2DMenuItemStringsBank]
|
2015-11-04 11:02:11 -08:00
|
|
|
rst FarCall
|
2015-12-15 15:59:49 -08:00
|
|
|
|
|
|
|
call Draw2DMenu
|
2015-11-04 11:02:11 -08:00
|
|
|
callba MobileTextBorder
|
|
|
|
call UpdateSprites
|
2015-11-25 07:16:29 -08:00
|
|
|
call ApplyTilemap
|
2015-12-15 15:59:49 -08:00
|
|
|
call Get2DMenuSelection
|
2015-11-04 11:02:11 -08:00
|
|
|
ret
|
|
|
|
; 2403c
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
_InterpretMobileMenu:: ; 2403c
|
2015-11-10 13:53:37 -08:00
|
|
|
ld hl, CopyMenuData2
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuData2_2DMenuItemStringsBank]
|
2015-11-04 11:02:11 -08:00
|
|
|
rst FarCall
|
2015-12-15 15:59:49 -08:00
|
|
|
|
|
|
|
call Draw2DMenu
|
2015-11-04 11:02:11 -08:00
|
|
|
callba MobileTextBorder
|
|
|
|
call UpdateSprites
|
2015-11-25 07:16:29 -08:00
|
|
|
call ApplyTilemap
|
2015-12-15 15:59:49 -08:00
|
|
|
call Init2DMenuCursorPosition
|
|
|
|
ld hl, w2DMenuFlags1
|
2015-11-04 11:02:11 -08:00
|
|
|
set 7, [hl]
|
2015-12-15 15:59:49 -08:00
|
|
|
.loop
|
2015-11-04 11:02:11 -08:00
|
|
|
call DelayFrame
|
|
|
|
callba Function10032e
|
|
|
|
ld a, [wcd2b]
|
|
|
|
and a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .quit
|
|
|
|
call MobileMenuJoypad
|
2015-12-20 09:54:08 -08:00
|
|
|
ld a, [wMenuJoypadFilter]
|
2015-11-04 11:02:11 -08:00
|
|
|
and c
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .loop
|
|
|
|
call Mobile_GetMenuSelection
|
2015-11-04 11:02:11 -08:00
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.quit
|
|
|
|
ld a, [w2DMenuNumCols]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld c, a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [w2DMenuNumRows]
|
2015-11-04 11:02:11 -08:00
|
|
|
call SimpleMultiply
|
|
|
|
ld [wMenuCursorBuffer], a
|
|
|
|
and a
|
|
|
|
ret
|
|
|
|
; 24085
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
Draw2DMenu: ; 24085
|
2015-11-04 11:02:11 -08:00
|
|
|
xor a
|
|
|
|
ld [hBGMapMode], a
|
|
|
|
call MenuBox
|
2015-12-15 15:59:49 -08:00
|
|
|
call Place2DMenuItemStrings
|
2015-11-04 11:02:11 -08:00
|
|
|
ret
|
|
|
|
; 2408f
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
Get2DMenuSelection: ; 2408f
|
|
|
|
call Init2DMenuCursorPosition
|
|
|
|
call StaticMenuJoypad
|
|
|
|
call MenuClickSound
|
|
|
|
Mobile_GetMenuSelection: ; 24098
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, [wMenuData2Flags]
|
|
|
|
bit 1, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .skip
|
|
|
|
call GetMenuJoypad
|
|
|
|
bit SELECT_F, a
|
|
|
|
jr nz, .quit1
|
2015-11-04 11:02:11 -08:00
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.skip
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, [wMenuData2Flags]
|
|
|
|
bit 0, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .skip2
|
|
|
|
call GetMenuJoypad
|
|
|
|
bit B_BUTTON_F, a
|
|
|
|
jr nz, .quit2
|
2015-11-04 11:02:11 -08:00
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.skip2
|
|
|
|
ld a, [w2DMenuNumCols]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld c, a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuCursorY]
|
2015-11-04 11:02:11 -08:00
|
|
|
dec a
|
|
|
|
call SimpleMultiply
|
|
|
|
ld c, a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuCursorX]
|
2015-11-04 11:02:11 -08:00
|
|
|
add c
|
|
|
|
ld [wMenuCursorBuffer], a
|
|
|
|
and a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.quit1
|
2015-11-04 11:02:11 -08:00
|
|
|
scf
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.quit2
|
2015-11-04 11:02:11 -08:00
|
|
|
scf
|
|
|
|
ret
|
|
|
|
; 240cd
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
GetMenuNumberOfColumns: ; 240cd
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, [wMenuData2Items]
|
|
|
|
and $f
|
|
|
|
ret
|
|
|
|
; 240d3
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
GetMenuNumberOfRows: ; 240d3
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, [wMenuData2Items]
|
|
|
|
swap a
|
|
|
|
and $f
|
|
|
|
ret
|
|
|
|
; 240db
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
Place2DMenuItemStrings: ; 240db
|
|
|
|
ld hl, wMenuData2_2DMenuItemStringsAddr
|
2015-11-04 11:02:11 -08:00
|
|
|
ld e, [hl]
|
|
|
|
inc hl
|
|
|
|
ld d, [hl]
|
2015-11-10 13:53:37 -08:00
|
|
|
call GetMenuTextStartCoord
|
|
|
|
call Coord2Tile
|
2015-12-15 15:59:49 -08:00
|
|
|
call GetMenuNumberOfRows
|
2015-11-04 11:02:11 -08:00
|
|
|
ld b, a
|
2015-12-15 15:59:49 -08:00
|
|
|
.row
|
2015-11-04 11:02:11 -08:00
|
|
|
push bc
|
|
|
|
push hl
|
2015-12-15 15:59:49 -08:00
|
|
|
call GetMenuNumberOfColumns
|
2015-11-04 11:02:11 -08:00
|
|
|
ld c, a
|
2015-12-15 15:59:49 -08:00
|
|
|
.col
|
2015-11-04 11:02:11 -08:00
|
|
|
push bc
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuData2_2DMenuItemStringsBank]
|
|
|
|
call Place2DMenuItemName
|
2015-11-04 11:02:11 -08:00
|
|
|
inc de
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuData2Spacing]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld c, a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld b, 0
|
2015-11-04 11:02:11 -08:00
|
|
|
add hl, bc
|
|
|
|
pop bc
|
|
|
|
dec c
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .col
|
2015-11-04 11:02:11 -08:00
|
|
|
pop hl
|
2015-12-15 15:59:49 -08:00
|
|
|
ld bc, 2 * SCREEN_WIDTH
|
2015-11-04 11:02:11 -08:00
|
|
|
add hl, bc
|
|
|
|
pop bc
|
|
|
|
dec b
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .row
|
|
|
|
ld hl, wMenuData2_2DMenuFunctionAddr
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, [hli]
|
|
|
|
ld h, [hl]
|
|
|
|
ld l, a
|
|
|
|
or h
|
|
|
|
ret z
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuData2_2DMenuFunctionBank]
|
2015-11-04 11:02:11 -08:00
|
|
|
rst FarCall
|
|
|
|
ret
|
|
|
|
; 2411a
|
|
|
|
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
Init2DMenuCursorPosition: ; 2411a (9:411a)
|
2015-11-10 13:53:37 -08:00
|
|
|
call GetMenuTextStartCoord
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, b
|
2015-12-15 15:59:49 -08:00
|
|
|
ld [w2DMenuCursorInitY], a
|
2015-11-04 11:02:11 -08:00
|
|
|
dec c
|
|
|
|
ld a, c
|
2015-12-15 15:59:49 -08:00
|
|
|
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]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld e, a
|
|
|
|
ld a, [wMenuCursorBuffer]
|
|
|
|
ld b, a
|
|
|
|
xor a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld d, 0
|
|
|
|
.loop
|
2015-11-04 11:02:11 -08:00
|
|
|
inc d
|
|
|
|
add e
|
|
|
|
cp b
|
2015-12-15 15:59:49 -08:00
|
|
|
jr c, .loop
|
2015-11-04 11:02:11 -08:00
|
|
|
sub e
|
|
|
|
ld c, a
|
|
|
|
ld a, b
|
|
|
|
sub c
|
|
|
|
and a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .reset1
|
2015-11-04 11:02:11 -08:00
|
|
|
cp e
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .okay1
|
|
|
|
jr c, .okay1
|
|
|
|
.reset1
|
|
|
|
ld a, 1
|
|
|
|
.okay1
|
|
|
|
ld [wMenuCursorX], a
|
|
|
|
ld a, [w2DMenuNumRows]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld e, a
|
|
|
|
ld a, d
|
|
|
|
and a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .reset2
|
2015-11-04 11:02:11 -08:00
|
|
|
cp e
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .okay2
|
|
|
|
jr c, .okay2
|
|
|
|
.reset2
|
|
|
|
ld a, 1
|
|
|
|
.okay2
|
|
|
|
ld [wMenuCursorY], a
|
2015-11-04 11:02:11 -08:00
|
|
|
xor a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld [wCursorOffCharacter], a
|
|
|
|
ld [wCursorCurrentTile], a
|
|
|
|
ld [wCursorCurrentTile + 1], a
|
2015-11-04 11:02:11 -08:00
|
|
|
ret
|
|
|
|
; 24179
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.InitFlags_a: ; 24179
|
2015-11-04 11:02:11 -08:00
|
|
|
xor a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld hl, w2DMenuFlags1
|
2015-11-04 11:02:11 -08:00
|
|
|
ld [hli], a
|
|
|
|
ld [hld], a
|
|
|
|
ld a, [wMenuData2Flags]
|
|
|
|
bit 5, a
|
|
|
|
ret z
|
|
|
|
set 5, [hl]
|
|
|
|
set 4, [hl]
|
|
|
|
ret
|
|
|
|
; 2418a
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.InitFlags_b: ; 2418a
|
|
|
|
ld a, [wMenuData2Spacing]
|
2015-12-21 11:10:16 -08:00
|
|
|
or $20
|
|
|
|
ld [w2DMenuCursorOffsets], a
|
2015-11-04 11:02:11 -08:00
|
|
|
ret
|
|
|
|
; 24193
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.InitFlags_c: ; 24193
|
2015-11-04 11:02:11 -08:00
|
|
|
ld hl, wMenuData2Flags
|
2015-12-20 09:54:08 -08:00
|
|
|
ld a, A_BUTTON
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 0, [hl]
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .skip
|
2015-12-20 09:54:08 -08:00
|
|
|
or B_BUTTON
|
2015-12-15 15:59:49 -08:00
|
|
|
.skip
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 1, [hl]
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .skip2
|
2015-12-20 09:54:08 -08:00
|
|
|
or SELECT
|
2015-12-15 15:59:49 -08:00
|
|
|
.skip2
|
2015-12-20 09:54:08 -08:00
|
|
|
ld [wMenuJoypadFilter], a
|
2015-11-04 11:02:11 -08:00
|
|
|
ret
|
|
|
|
; 241a8
|
|
|
|
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
_StaticMenuJoypad:: ; 241a8
|
|
|
|
call Place2DMenuCursor
|
|
|
|
_ScrollingMenuJoypad:: ; 241ab
|
|
|
|
ld hl, w2DMenuFlags2
|
2015-11-04 11:02:11 -08:00
|
|
|
res 7, [hl]
|
|
|
|
ld a, [hBGMapMode]
|
|
|
|
push af
|
2015-12-15 15:59:49 -08:00
|
|
|
call MenuJoypadLoop
|
2015-11-04 11:02:11 -08:00
|
|
|
pop af
|
|
|
|
ld [hBGMapMode], a
|
|
|
|
ret
|
|
|
|
; 241ba
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
MobileMenuJoypad: ; 241ba
|
|
|
|
ld hl, w2DMenuFlags2
|
2015-11-04 11:02:11 -08:00
|
|
|
res 7, [hl]
|
|
|
|
ld a, [hBGMapMode]
|
|
|
|
push af
|
2015-12-15 15:59:49 -08:00
|
|
|
call Move2DMenuCursor
|
|
|
|
call Do2DMenuRTCJoypad
|
|
|
|
jr nc, .skip_joypad
|
|
|
|
call _2DMenuInterpretJoypad
|
|
|
|
.skip_joypad
|
2015-11-04 11:02:11 -08:00
|
|
|
pop af
|
|
|
|
ld [hBGMapMode], a
|
2015-12-15 15:59:49 -08:00
|
|
|
call GetMenuJoypad
|
2015-11-04 11:02:11 -08:00
|
|
|
ld c, a
|
|
|
|
ret
|
|
|
|
; 241d5
|
|
|
|
|
|
|
|
|
|
|
|
Function241d5: ; 241d5
|
2015-12-15 15:59:49 -08:00
|
|
|
; Unreferenced
|
|
|
|
call Place2DMenuCursor
|
2015-11-04 11:02:11 -08:00
|
|
|
.loop
|
2015-12-15 15:59:49 -08:00
|
|
|
call Move2DMenuCursor
|
2015-11-04 11:02:11 -08:00
|
|
|
call Function10402d ; BUG: This function is in another bank.
|
|
|
|
; Pointer in current bank (9) is bogus.
|
2015-12-15 15:59:49 -08:00
|
|
|
call .loop2
|
2015-11-04 11:02:11 -08:00
|
|
|
jr nc, .done
|
2015-12-15 15:59:49 -08:00
|
|
|
call _2DMenuInterpretJoypad
|
2015-11-04 11:02:11 -08:00
|
|
|
jr c, .done
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [w2DMenuFlags1]
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 7, a
|
|
|
|
jr nz, .done
|
2015-12-15 15:59:49 -08:00
|
|
|
call GetMenuJoypad
|
2015-11-04 11:02:11 -08:00
|
|
|
ld c, a
|
2015-12-20 09:54:08 -08:00
|
|
|
ld a, [wMenuJoypadFilter]
|
2015-11-04 11:02:11 -08:00
|
|
|
and c
|
|
|
|
jr z, .loop
|
|
|
|
|
|
|
|
.done
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.loop2
|
|
|
|
call Menu_WasButtonPressed
|
2015-11-04 11:02:11 -08:00
|
|
|
ret c
|
|
|
|
ld c, 1
|
|
|
|
ld b, 3
|
|
|
|
call Function10062d ; BUG: This function is in another bank.
|
|
|
|
; Pointer in current bank (9) is bogus.
|
|
|
|
ret c
|
|
|
|
callba Function100337
|
|
|
|
ret c
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [w2DMenuFlags1]
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 7, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .loop2
|
2015-11-04 11:02:11 -08:00
|
|
|
and a
|
|
|
|
ret
|
|
|
|
; 24216
|
|
|
|
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
MenuJoypadLoop: ; 24216
|
|
|
|
.loop
|
|
|
|
call Move2DMenuCursor
|
|
|
|
call .BGMap_OAM
|
|
|
|
call Do2DMenuRTCJoypad
|
|
|
|
jr nc, .done
|
|
|
|
call _2DMenuInterpretJoypad
|
|
|
|
jr c, .done
|
|
|
|
ld a, [w2DMenuFlags1]
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 7, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .done
|
|
|
|
call GetMenuJoypad
|
2015-11-04 11:02:11 -08:00
|
|
|
ld b, a
|
2015-12-20 09:54:08 -08:00
|
|
|
ld a, [wMenuJoypadFilter]
|
2015-11-04 11:02:11 -08:00
|
|
|
and b
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .loop
|
2015-11-04 11:02:11 -08:00
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.done
|
2015-11-04 11:02:11 -08:00
|
|
|
ret
|
|
|
|
; 24238
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.BGMap_OAM: ; 24238
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, [hOAMUpdate]
|
|
|
|
push af
|
|
|
|
ld a, $1
|
|
|
|
ld [hOAMUpdate], a
|
|
|
|
call WaitBGMap
|
|
|
|
pop af
|
|
|
|
ld [hOAMUpdate], a
|
|
|
|
xor a
|
|
|
|
ld [hBGMapMode], a
|
|
|
|
ret
|
|
|
|
; 24249
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
Do2DMenuRTCJoypad: ; 24249
|
|
|
|
.loopRTC
|
2015-11-04 11:02:11 -08:00
|
|
|
call RTC
|
2015-12-15 15:59:49 -08:00
|
|
|
call Menu_WasButtonPressed
|
2015-11-04 11:02:11 -08:00
|
|
|
ret c
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [w2DMenuFlags1]
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 7, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .loopRTC
|
2015-11-04 11:02:11 -08:00
|
|
|
and a
|
|
|
|
ret
|
|
|
|
; 24259
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
Menu_WasButtonPressed: ; 24259
|
|
|
|
ld a, [w2DMenuFlags1]
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 6, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .skip_to_joypad
|
2015-12-10 19:26:31 -08:00
|
|
|
callab PlaySpriteAnimationsAndDelayFrame
|
2015-11-04 11:02:11 -08:00
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.skip_to_joypad
|
2015-11-04 11:02:11 -08:00
|
|
|
call JoyTextDelay
|
2015-12-15 15:59:49 -08:00
|
|
|
call GetMenuJoypad
|
2015-11-04 11:02:11 -08:00
|
|
|
and a
|
|
|
|
ret z
|
|
|
|
scf
|
|
|
|
ret
|
|
|
|
; 24270
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
_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
|
2015-11-04 11:02:11 -08:00
|
|
|
and a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.set_bit_7: ; 24299
|
|
|
|
ld hl, w2DMenuFlags2
|
2015-11-04 11:02:11 -08:00
|
|
|
set 7, [hl]
|
|
|
|
scf
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.d_down
|
|
|
|
ld hl, wMenuCursorY
|
|
|
|
ld a, [w2DMenuNumRows]
|
2015-11-04 11:02:11 -08:00
|
|
|
cp [hl]
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .check_wrap_around_down
|
2015-11-04 11:02:11 -08:00
|
|
|
inc [hl]
|
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.check_wrap_around_down
|
|
|
|
ld a, [w2DMenuFlags1]
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 5, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .wrap_around_down
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 3, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jp nz, .set_bit_7
|
2015-11-04 11:02:11 -08:00
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.wrap_around_down
|
2015-11-04 11:02:11 -08:00
|
|
|
ld [hl], $1
|
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.d_up
|
|
|
|
ld hl, wMenuCursorY
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, [hl]
|
|
|
|
dec a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .check_wrap_around_up
|
2015-11-04 11:02:11 -08:00
|
|
|
ld [hl], a
|
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.check_wrap_around_up
|
|
|
|
ld a, [w2DMenuFlags1]
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 5, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .wrap_around_up
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 2, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jp nz, .set_bit_7
|
2015-11-04 11:02:11 -08:00
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.wrap_around_up
|
|
|
|
ld a, [w2DMenuNumRows]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld [hl], a
|
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.d_left
|
|
|
|
ld hl, wMenuCursorX
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, [hl]
|
|
|
|
dec a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .check_wrap_around_left
|
2015-11-04 11:02:11 -08:00
|
|
|
ld [hl], a
|
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.check_wrap_around_left
|
|
|
|
ld a, [w2DMenuFlags1]
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 4, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .wrap_around_left
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 1, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jp nz, .set_bit_7
|
2015-11-04 11:02:11 -08:00
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.wrap_around_left
|
|
|
|
ld a, [w2DMenuNumCols]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld [hl], a
|
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.d_right
|
|
|
|
ld hl, wMenuCursorX
|
|
|
|
ld a, [w2DMenuNumCols]
|
2015-11-04 11:02:11 -08:00
|
|
|
cp [hl]
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .check_wrap_around_right
|
2015-11-04 11:02:11 -08:00
|
|
|
inc [hl]
|
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.check_wrap_around_right
|
|
|
|
ld a, [w2DMenuFlags1]
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 4, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .wrap_around_right
|
2015-11-04 11:02:11 -08:00
|
|
|
bit 0, a
|
2015-12-15 15:59:49 -08:00
|
|
|
jp nz, .set_bit_7
|
2015-11-04 11:02:11 -08:00
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.wrap_around_right
|
2015-11-04 11:02:11 -08:00
|
|
|
ld [hl], $1
|
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
; 24318
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.a_b_start_select: ; 24318
|
2015-11-04 11:02:11 -08:00
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
; 2431a
|
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
Move2DMenuCursor: ; 2431a
|
|
|
|
ld hl, wCursorCurrentTile
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, [hli]
|
|
|
|
ld h, [hl]
|
|
|
|
ld l, a
|
|
|
|
ld a, [hl]
|
2015-12-15 15:59:49 -08:00
|
|
|
cp "â–¶"
|
|
|
|
jr nz, Place2DMenuCursor
|
|
|
|
ld a, [wCursorOffCharacter]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld [hl], a
|
2015-12-15 15:59:49 -08:00
|
|
|
Place2DMenuCursor: ; 24329
|
|
|
|
ld a, [w2DMenuCursorInitY]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld b, a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [w2DMenuCursorInitX]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld c, a
|
2015-11-10 13:53:37 -08:00
|
|
|
call Coord2Tile
|
2015-12-21 11:10:16 -08:00
|
|
|
ld a, [w2DMenuCursorOffsets]
|
2015-11-04 11:02:11 -08:00
|
|
|
swap a
|
|
|
|
and $f
|
|
|
|
ld c, a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuCursorY]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld b, a
|
|
|
|
xor a
|
|
|
|
dec b
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .got_row
|
|
|
|
.row_loop
|
2015-11-04 11:02:11 -08:00
|
|
|
add c
|
|
|
|
dec b
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .row_loop
|
2015-11-04 11:02:11 -08:00
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.got_row
|
|
|
|
ld c, SCREEN_WIDTH
|
2015-11-04 11:02:11 -08:00
|
|
|
call AddNTimes
|
2015-12-21 11:10:16 -08:00
|
|
|
ld a, [w2DMenuCursorOffsets]
|
2015-11-04 11:02:11 -08:00
|
|
|
and $f
|
|
|
|
ld c, a
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [wMenuCursorX]
|
2015-11-04 11:02:11 -08:00
|
|
|
ld b, a
|
|
|
|
xor a
|
|
|
|
dec b
|
2015-12-15 15:59:49 -08:00
|
|
|
jr z, .got_col
|
|
|
|
.col_loop
|
2015-11-04 11:02:11 -08:00
|
|
|
add c
|
|
|
|
dec b
|
2015-12-15 15:59:49 -08:00
|
|
|
jr nz, .col_loop
|
2015-11-04 11:02:11 -08:00
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.got_col
|
2015-11-04 11:02:11 -08:00
|
|
|
ld c, a
|
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
2015-12-15 15:59:49 -08:00
|
|
|
cp "â–¶"
|
|
|
|
jr z, .cursor_on
|
|
|
|
ld [wCursorOffCharacter], a
|
|
|
|
ld [hl], "â–¶"
|
2015-11-04 11:02:11 -08:00
|
|
|
|
2015-12-15 15:59:49 -08:00
|
|
|
.cursor_on
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, l
|
2015-12-15 15:59:49 -08:00
|
|
|
ld [wCursorCurrentTile], a
|
2015-11-04 11:02:11 -08:00
|
|
|
ld a, h
|
2015-12-15 15:59:49 -08:00
|
|
|
ld [wCursorCurrentTile + 1], a
|
2015-11-04 11:02:11 -08:00
|
|
|
ret
|
|
|
|
; 24374
|
2015-12-15 15:59:49 -08:00
|
|
|
|
2015-12-22 19:19:33 -08:00
|
|
|
_PushWindow:: ; 24374
|
2015-12-15 15:59:49 -08:00
|
|
|
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
|
2015-12-16 09:32:08 -08:00
|
|
|
jr z, .loop
|
2015-12-15 15:59:49 -08:00
|
|
|
ld d, h
|
|
|
|
ld e, l
|
|
|
|
call RestoreTileBackup
|
|
|
|
|
2015-12-16 09:32:08 -08:00
|
|
|
.loop
|
2015-12-15 15:59:49 -08:00
|
|
|
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
|
2015-12-16 09:32:08 -08:00
|
|
|
; Unreferenced
|
2015-12-15 15:59:49 -08:00
|
|
|
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
|
2015-12-16 09:32:08 -08:00
|
|
|
.loop
|
2015-12-15 15:59:49 -08:00
|
|
|
ld a, [hl]
|
|
|
|
cp $61
|
2015-12-16 09:32:08 -08:00
|
|
|
jr c, .next
|
2015-12-15 15:59:49 -08:00
|
|
|
ld [de], a
|
2015-12-16 09:32:08 -08:00
|
|
|
.next
|
2015-12-15 15:59:49 -08:00
|
|
|
inc hl
|
|
|
|
inc de
|
|
|
|
dec bc
|
|
|
|
ld a, c
|
|
|
|
or b
|
2015-12-16 09:32:08 -08:00
|
|
|
jr nz, .loop
|
2015-12-15 15:59:49 -08:00
|
|
|
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
|
2015-12-21 11:10:16 -08:00
|
|
|
; w2DMenuCursorOffsets
|
|
|
|
ln a, 2, 0
|
2015-12-15 15:59:49 -08:00
|
|
|
ld [hli], a
|
2015-12-20 09:54:08 -08:00
|
|
|
; wMenuJoypadFilter
|
|
|
|
ld a, A_BUTTON
|
2015-12-15 15:59:49 -08:00
|
|
|
bit 0, b
|
|
|
|
jr nz, .skip_bit_1
|
2015-12-20 09:54:08 -08:00
|
|
|
add B_BUTTON
|
2015-12-15 15:59:49 -08:00
|
|
|
.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
|