summaryrefslogtreecommitdiff
path: root/home/menu.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/menu.asm')
-rw-r--r--home/menu.asm551
1 files changed, 37 insertions, 514 deletions
diff --git a/home/menu.asm b/home/menu.asm
index 4debb11ad..412955b28 100644
--- a/home/menu.asm
+++ b/home/menu.asm
@@ -1,539 +1,62 @@
-; Functions used in displaying and handling menus.
-
-LoadMenuHeader::
- call CopyMenuHeader
- call PushWindow
- ret
-
-CopyMenuHeader::
- ld de, wMenuHeader
- ld bc, wMenuHeaderEnd - wMenuHeader
- call CopyBytes
- ldh a, [hROMBank]
- ld [wMenuDataBank], a
- ret
-
-StoreTo_wMenuCursorBuffer::
- ld [wMenuCursorBuffer], a
- ret
-
-MenuTextbox::
- push hl
- call LoadMenuTextbox
- pop hl
- jp PrintText
-
-; unused
- ret
-
-LoadMenuTextbox::
- ld hl, .MenuHeader
- call LoadMenuHeader
- ret
-
-.MenuHeader:
- db MENU_BACKUP_TILES ; flags
- menu_coords 0, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
- dw vTiles0
- db 0 ; default option
-
-MenuTextboxBackup::
- call MenuTextbox
- call CloseWindow
- ret
-
-LoadStandardMenuHeader::
- ld hl, .MenuHeader
- call LoadMenuHeader
- ret
-
-.MenuHeader:
- db MENU_BACKUP_TILES ; flags
- menu_coords 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
- dw 0
- db 1 ; default option
-
-Call_ExitMenu::
- call ExitMenu
- ret
-
-VerticalMenu::
- xor a
- ldh [hBGMapMode], a
- call MenuBox
- call UpdateSprites
- call PlaceVerticalMenuItems
- call ApplyTilemap
- call CopyMenuData
- ld a, [wMenuDataFlags]
- bit 7, a
- jr z, .cancel
- call InitVerticalMenuCursor
- call StaticMenuJoypad
- call MenuClickSound
- bit 1, a
- jr z, .okay
-.cancel
- scf
- ret
-
-.okay
- and a
- ret
-
-GetMenu2::
- call LoadMenuHeader
- call VerticalMenu
- call CloseWindow
- ld a, [wMenuCursorY]
- ret
-
-CopyNameFromMenu::
+SetMenuAttributes::
push hl
push bc
- push af
- ld hl, wMenuDataPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- inc hl
- inc hl
- pop af
- call GetNthString
- ld d, h
- ld e, l
- call CopyName1
+ ld hl, w2DMenuCursorInitY
+ ld b, $8
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ ld a, $1
+ ld [hli], a
+ ld [hli], a
+ xor a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
pop bc
pop hl
ret
-YesNoBox::
- lb bc, SCREEN_WIDTH - 6, 7
-
-PlaceYesNoBox::
- jr _YesNoBox
-
-PlaceGenericTwoOptionBox::
- call LoadMenuHeader
- jr InterpretTwoOptionMenu
-
-_YesNoBox::
-; Return nc (yes) or c (no).
- push bc
- ld hl, YesNoMenuHeader
- call CopyMenuHeader
- pop bc
-; This seems to be an overflow prevention, but
-; it was coded wrong.
- ld a, b
- cp SCREEN_WIDTH - 6
- jr nz, .okay ; should this be "jr nc"?
- ld a, SCREEN_WIDTH - 6
- ld b, a
-
-.okay
- ld a, b
- ld [wMenuBorderLeftCoord], a
- add 5
- ld [wMenuBorderRightCoord], a
- ld a, c
- ld [wMenuBorderTopCoord], a
- add 4
- ld [wMenuBorderBottomCoord], a
- call PushWindow
-
-InterpretTwoOptionMenu::
- call VerticalMenu
- push af
- ld c, $f
- call DelayFrames
- call CloseWindow
- pop af
- jr c, .no
- ld a, [wMenuCursorY]
- cp 2 ; no
- jr z, .no
- and a
- ret
-
-.no
- ld a, 2
- ld [wMenuCursorY], a
- scf
- ret
-
-YesNoMenuHeader::
- db MENU_BACKUP_TILES ; flags
- menu_coords 10, 5, 15, 9
- dw .MenuData
- db 1 ; default option
-
-.MenuData:
- db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
- db 2
- db "YES@"
- db "NO@"
-
-OffsetMenuHeader::
- call _OffsetMenuHeader
- call PushWindow
- ret
-
-_OffsetMenuHeader::
- push de
- call CopyMenuHeader
- pop de
- ld a, [wMenuBorderLeftCoord]
- ld h, a
- ld a, [wMenuBorderRightCoord]
- sub h
- ld h, a
- ld a, d
- ld [wMenuBorderLeftCoord], a
- add h
- ld [wMenuBorderRightCoord], a
- ld a, [wMenuBorderTopCoord]
- ld l, a
- ld a, [wMenuBorderBottomCoord]
- sub l
- ld l, a
- ld a, e
- ld [wMenuBorderTopCoord], a
- add l
- ld [wMenuBorderBottomCoord], a
- ret
-
-DoNthMenu::
- call DrawVariableLengthMenuBox
- call MenuWriteText
- call InitMenuCursorAndButtonPermissions
- call GetStaticMenuJoypad
+StaticMenuJoypad::
+ callfar _StaticMenuJoypad
call GetMenuJoypad
- call MenuClickSound
- ret
-
-SetUpMenu::
- call DrawVariableLengthMenuBox ; ???
- call MenuWriteText
- call InitMenuCursorAndButtonPermissions ; set up selection pointer
- ld hl, w2DMenuFlags1
- set 7, [hl]
ret
-DrawVariableLengthMenuBox::
- call CopyMenuData
- call GetMenuIndexSet
- call AutomaticGetMenuBottomCoord
- call MenuBox
+ScrollingMenuJoypad::
+ callfar _ScrollingMenuJoypad
+ call GetMenuJoypad
ret
-MenuWriteText::
- xor a
- ldh [hBGMapMode], a
- call GetMenuIndexSet ; sort out the text
- call RunMenuItemPrintingFunction ; actually write it
- call SafeUpdateSprites
- ldh a, [hOAMUpdate]
+GetMenuJoypad::
+ push bc
push af
- ld a, $1
- ldh [hOAMUpdate], a
- call ApplyTilemap
- pop af
- ldh [hOAMUpdate], a
- ret
-
-AutomaticGetMenuBottomCoord::
- ld a, [wMenuBorderLeftCoord]
- ld c, a
- ld a, [wMenuBorderRightCoord]
- sub c
- ld c, a
- ld a, [wMenuDataItems]
- add a
- inc a
+ ldh a, [hJoyLast]
+ and D_PAD
ld b, a
- ld a, [wMenuBorderTopCoord]
- add b
- ld [wMenuBorderBottomCoord], a
- ret
-
-GetMenuIndexSet::
- ld hl, wMenuDataIndicesPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wWhichIndexSet]
- and a
- jr z, .skip
+ ldh a, [hJoyPressed]
+ and BUTTONS
+ or b
ld b, a
- ld c, -1
-.loop
- ld a, [hli]
- cp c
- jr nz, .loop
- dec b
- jr nz, .loop
-
-.skip
- ld d, h
- ld e, l
- ld a, [hl]
- ld [wMenuDataItems], a
- ret
-
-RunMenuItemPrintingFunction::
- call MenuBoxCoord2Tile
- ld bc, 2 * SCREEN_WIDTH + 2
- add hl, bc
-.loop
- inc de
- ld a, [de]
- cp -1
- ret z
- ld [wMenuSelection], a
- push de
- push hl
- ld d, h
- ld e, l
- ld hl, wMenuDataDisplayFunctionPointer
- call ._hl_
- pop hl
- ld de, 2 * SCREEN_WIDTH
- add hl, de
- pop de
- jr .loop
-
-._hl_
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp hl
-
-InitMenuCursorAndButtonPermissions::
- call InitVerticalMenuCursor
- ld hl, wMenuJoypadFilter
- ld a, [wMenuDataFlags]
- bit 3, a
- jr z, .disallow_select
- set START_F, [hl]
-
-.disallow_select
- ld a, [wMenuDataFlags]
- bit 2, a
- jr z, .disallow_left_right
- set D_LEFT_F, [hl]
- set D_RIGHT_F, [hl]
-
-.disallow_left_right
- ret
-
-GetScrollingMenuJoypad::
- call ScrollingMenuJoypad
- ld hl, wMenuJoypadFilter
- and [hl]
- jr ContinueGettingMenuJoypad
-
-GetStaticMenuJoypad::
- xor a
- ld [wMenuJoypad], a
- call StaticMenuJoypad
-
-ContinueGettingMenuJoypad:
- bit A_BUTTON_F, a
- jr nz, .a_button
- bit B_BUTTON_F, a
- jr nz, .b_start
- bit START_F, a
- jr nz, .b_start
- bit D_RIGHT_F, a
- jr nz, .d_right
- bit D_LEFT_F, a
- jr nz, .d_left
- xor a
- ld [wMenuJoypad], a
- jr .done
-
-.d_right
- ld a, D_RIGHT
- ld [wMenuJoypad], a
- jr .done
-
-.d_left
- ld a, D_LEFT
- ld [wMenuJoypad], a
- jr .done
-
-.a_button
- ld a, A_BUTTON
- ld [wMenuJoypad], a
-
-.done
- call GetMenuIndexSet
- ld a, [wMenuCursorY]
- ld l, a
- ld h, $0
- add hl, de
- ld a, [hl]
- ld [wMenuSelection], a
- ld a, [wMenuCursorY]
- ld [wMenuCursorBuffer], a
- and a
- ret
-
-.b_start
- ld a, B_BUTTON
- ld [wMenuJoypad], a
- ld a, -1
- ld [wMenuSelection], a
- scf
+ pop af
+ ld a, b
+ pop bc
ret
-PlaceMenuStrings::
- push de
- ld hl, wMenuDataPointerTableAddr
+PlaceHollowCursor::
+ ld hl, wCursorCurrentTile
ld a, [hli]
ld h, [hl]
ld l, a
- ld a, [wMenuSelection]
- call GetNthString
- ld d, h
- ld e, l
- pop hl
- call PlaceString
- ret
-
-PlaceNthMenuStrings::
- push de
- ld a, [wMenuSelection]
- call GetMenuDataPointerTableEntry
- inc hl
- inc hl
- ld a, [hli]
- ld d, [hl]
- ld e, a
- pop hl
- call PlaceString
+ ld [hl], "▷"
ret
-Unreferenced_Function1f9e::
- call GetMenuDataPointerTableEntry
- inc hl
- inc hl
- ld a, [hli]
- ld d, [hl]
- ld e, a
- ret
-
-MenuJumptable::
- ld a, [wMenuSelection]
- call GetMenuDataPointerTableEntry
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp hl
-
-GetMenuDataPointerTableEntry::
- ld e, a
- ld d, $0
- ld hl, wMenuDataPointerTableAddr
+HideCursor::
+ ld hl, wCursorCurrentTile
ld a, [hli]
ld h, [hl]
ld l, a
- add hl, de
- add hl, de
- add hl, de
- add hl, de
- ret
-
-ClearWindowData::
- ld hl, wWindowStackPointer
- call .bytefill
- ld hl, wMenuHeader
- call .bytefill
- ld hl, wMenuDataFlags
- call .bytefill
- ld hl, w2DMenuCursorInitY
- call .bytefill
-
- ldh a, [rSVBK]
- push af
- ld a, BANK(wWindowStack)
- ldh [rSVBK], a
-
- xor a
- ld hl, wWindowStackBottom
- ld [hld], a
- ld [hld], a
- ld a, l
- ld [wWindowStackPointer], a
- ld a, h
- ld [wWindowStackPointer + 1], a
-
- pop af
- ldh [rSVBK], a
- ret
-
-.bytefill
- ld bc, $10
- xor a
- call ByteFill
- ret
-
-MenuClickSound::
- push af
- and A_BUTTON | B_BUTTON
- jr z, .nosound
- ld hl, wMenuFlags
- bit 3, [hl]
- jr nz, .nosound
- call PlayClickSFX
-.nosound
- pop af
- ret
-
-PlayClickSFX::
- push de
- ld de, SFX_READ_TEXT_2
- call PlaySFX
- pop de
- ret
-
-MenuTextboxWaitButton::
- call MenuTextbox
- call WaitButton
- call ExitMenu
- ret
-
-Place2DMenuItemName::
- ldh [hBuffer], a
- ldh a, [hROMBank]
- push af
- ldh a, [hBuffer]
- rst Bankswitch
-
- call PlaceString
- pop af
- rst Bankswitch
-
- ret
-
-_2DMenu::
- ldh a, [hROMBank]
- ld [wMenuData_2DMenuItemStringsBank], a
- farcall _2DMenu_
- ld a, [wMenuCursorBuffer]
- ret
-
-InterpretBattleMenu::
- ldh a, [hROMBank]
- ld [wMenuData_2DMenuItemStringsBank], a
- farcall _InterpretBattleMenu
- ld a, [wMenuCursorBuffer]
- ret
-
-InterpretMobileMenu::
- ldh a, [hROMBank]
- ld [wMenuData_2DMenuItemStringsBank], a
- farcall _InterpretMobileMenu
- ld a, [wMenuCursorBuffer]
+ ld [hl], " "
ret