shithub: pokecrystal

ref: e88c88ff2015a55ff0d04f9ac1dc55d7f0567f7c
dir: /home/menu.asm/

View raw version
; Functions used in displaying and handling menus.


LoadMenuDataHeader::
	call CopyMenuDataHeader
	call BackUpTiles
	ret

CopyMenuDataHeader::
	ld de, wMenuDataHeader
	ld bc, wMenuDataHeaderEnd - wMenuDataHeader
	call CopyBytes
	ld a, [hROMBank]
	ld [wMenuDataBank], a
	ret
; 0x1d4b

Function1d4b:: ; 1d4b
	ld [wMenuCursorBuffer], a
	ret
; 1d4f


MenuTextBox:: ; 1d4f
	push hl
	call LoadMenuTextBox
	pop hl
	jp PrintText
; 1d57

Function1d57:: ; 1d57
	ret
; 1d58

LoadMenuTextBox:: ; 1d58
	ld hl, MenuDataHeader_0x1d5f
	call LoadMenuDataHeader
	ret
; 1d5f

MenuDataHeader_0x1d5f:: ; 1d5f
	db $40 ; tile backup
	db 12, 0 ; start coords
	db 17, 19 ; end coords
	dw VTiles0
	db 0 ; default option
; 1d67

MenuTextBoxBackup:: ; 1d67
	call MenuTextBox
	call WriteBackup
	ret
; 1d6e

LoadStandardMenuDataHeader:: ; 1d6e
	ld hl, MenuDataHeader_0x1d75
	call LoadMenuDataHeader
	ret
; 1d75

MenuDataHeader_0x1d75:: ; 1d75
	db $40 ; tile backup
	db 0, 0 ; start coords
	db 17, 19 ; end coords
	dw 0
	db 1 ; default option
; 1d7d

Call_ExitMenu:: ; 1d7d
	call ExitMenu
	ret
; 1d81

InterpretMenu2::
	xor a
	ld [hBGMapMode], a
	call MenuBox
	call UpdateSprites
	call Function1c89
	call Function321c
	call CopyMenuData2
	ld a, [wMenuData2Flags]
	bit 7, a
	jr z, .cancel
	call Function1c10
	call Function1bc9
	call Function1ff8
	bit 1, a
	jr z, .okay
.cancel
	scf
	ret
.okay
	and a
	ret
; 0x1dab

GetMenu2:: ; 1dab
	call LoadMenuDataHeader
	call InterpretMenu2
	call WriteBackup
	ld a, [MenuSelection2]
	ret
; 1db8

CopyNameFromMenu::
	push hl
	push bc
	push af
	ld hl, wMenuData2Pointer
	ld a, [hli]
	ld h, [hl]
	ld l, a
rept 2
	inc hl
endr
	pop af
	call GetNthString
	ld d, h
	ld e, l
	call CopyName1
	pop bc
	pop hl
	ret
; 0x1dcf


YesNoBox:: ; 1dcf
	lb bc, SCREEN_WIDTH - 6, 7

PlaceYesNoBox:: ; 1dd2
	jr _YesNoBox

PlaceGenericTwoOptionBox:: ; 1dd4
	call LoadMenuDataHeader
	jr InterpretTwoOptionMenu

_YesNoBox:: ; 1dd9
; Return nc (yes) or c (no).
	push bc
	ld hl, YesNoMenuDataHeader
	call CopyMenuDataHeader
	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 BackUpTiles

InterpretTwoOptionMenu:: ; 1dfe
	call InterpretMenu2
	push af
	ld c, $f
	call DelayFrames
	call WriteBackup
	pop af
	jr c, .no
	ld a, [MenuSelection2]
	cp 2 ; no
	jr z, .no
	and a
	ret

.no
	ld a, 2
	ld [MenuSelection2], a
	scf
	ret
; 1e1d

YesNoMenuDataHeader:: ; 1e1d
	db $40 ; tile backup
	db 5, 10 ; start coords
	db 9, 15 ; end coords
	dw YesNoMenuData2
	db 1 ; default option
; 1e25

YesNoMenuData2:: ; 1e25
	db $c0 ; flags
	db 2
	db "YES@"
	db "NO@"
; 1e2e

Function1e2e:: ; 1e2e
	call Function1e35
	call BackUpTiles
	ret
; 1e35

Function1e35:: ; 1e35
	push de
	call CopyMenuDataHeader
	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
; 1e5d

DoNthMenu:: ; 1e5d
	call MenuFunc_1e7f
	call MenuWriteText
	call Function1eff
	call Function1f23
	call Function1bdd
	call Function1ff8
	ret
; 1e70

SetUpMenu:: ; 1e70
	call MenuFunc_1e7f ; ???
	call MenuWriteText
	call Function1eff ; set up selection pointer
	ld hl, wcfa5
	set 7, [hl]
	ret

MenuFunc_1e7f::
	call CopyMenuData2
	call Function1ebd
	call Function1ea6
	call MenuBox
	ret

MenuWriteText::
	xor a
	ld [hBGMapMode], a
	call Function1ebd ; sort out the text
	call Function1eda ; actually write it
	call Function2e31
	ld a, [hOAMUpdate]
	push af
	ld a, $1
	ld [hOAMUpdate], a
	call Function321c
	pop af
	ld [hOAMUpdate], a
	ret
; 0x1ea6

Function1ea6:: ; 1ea6
	ld a, [wMenuBorderLeftCoord]
	ld c, a
	ld a, [wMenuBorderRightCoord]
	sub c
	ld c, a
	ld a, [wMenuData2Items]
	add a
	inc a
	ld b, a
	ld a, [wMenuBorderTopCoord]
	add b
	ld [wMenuBorderBottomCoord], a
	ret
; 1ebd

Function1ebd:: ; 1ebd
	ld hl, wcf93
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, [wcf76]
	and a
	jr z, .asm_1ed3
	ld b, a
	ld c, $ff
.asm_1ecc
	ld a, [hli]
	cp c
	jr nz, .asm_1ecc
	dec b
	jr nz, .asm_1ecc

.asm_1ed3
	ld d, h
	ld e, l
	ld a, [hl]
	ld [wMenuData2Items], a
	ret
; 1eda

Function1eda:: ; 1eda
	call MenuBoxCoord2Tile
	ld bc, $002a
	add hl, bc
.asm_1ee1
	inc de
	ld a, [de]
	cp $ff
	ret z
	ld [MenuSelection], a
	push de
	push hl
	ld d, h
	ld e, l
	ld hl, wcf95
	call Function1efb
	pop hl
	ld de, $0028
	add hl, de
	pop de
	jr .asm_1ee1
; 1efb

Function1efb:: ; 1efb
	ld a, [hli]
	ld h, [hl]
	ld l, a
	jp [hl]
; 1eff

Function1eff:: ; 1eff
	call Function1c10
	ld hl, wcfa8
	ld a, [wMenuData2Flags]
	bit 3, a
	jr z, .asm_1f0e
	set 3, [hl]

.asm_1f0e
	ld a, [wMenuData2Flags]
	bit 2, a
	jr z, .asm_1f19
	set 5, [hl]
	set 4, [hl]

.asm_1f19
	ret
; 1f1a


Function1f1a:: ; 1f1a
	call Function1bd3
	ld hl, wcfa8
	and [hl]
	jr Function1f2a
; 1f23

Function1f23:: ; 1f23
	xor a
	ld [wcf73], a
	call Function1bc9
; 1f2a

Function1f2a:: ; 1f2a
	bit 0, a
	jr nz, .asm_1f52
	bit 1, a
	jr nz, .asm_1f6d
	bit 3, a
	jr nz, .asm_1f6d
	bit 4, a
	jr nz, .asm_1f44
	bit 5, a
	jr nz, .asm_1f4b
	xor a
	ld [wcf73], a
	jr .asm_1f57

.asm_1f44
	ld a, $10
	ld [wcf73], a
	jr .asm_1f57

.asm_1f4b
	ld a, $20
	ld [wcf73], a
	jr .asm_1f57

.asm_1f52
	ld a, $1
	ld [wcf73], a

.asm_1f57
	call Function1ebd
	ld a, [MenuSelection2]
	ld l, a
	ld h, $0
	add hl, de
	ld a, [hl]
	ld [MenuSelection], a
	ld a, [MenuSelection2]
	ld [wMenuCursorBuffer], a
	and a
	ret

.asm_1f6d
	ld a, $2
	ld [wcf73], a
	ld a, $ff
	ld [MenuSelection], a
	scf
	ret
; 1f79

Function1f79:: ; 1f79
	push de
	ld hl, wcf97
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, [MenuSelection]
	call GetNthString
	ld d, h
	ld e, l
	pop hl
	call PlaceString
	ret
; 1f8d

PlaceNthMenuStrings:: ; 1f8d
	push de
	ld a, [MenuSelection]
	call Function1fb1
rept 2
	inc hl
endr
	ld a, [hli]
	ld d, [hl]
	ld e, a
	pop hl
	call PlaceString
	ret
; 1f9e

Function1f9e:: ; 1f9e
	call Function1fb1
rept 2
	inc hl
endr
	ld a, [hli]
	ld d, [hl]
	ld e, a
	ret
; 1fa7

MenuJumptable:: ; 1fa7
	ld a, [MenuSelection]
	call Function1fb1
	ld a, [hli]
	ld h, [hl]
	ld l, a
	jp [hl]
; 1fb1

Function1fb1:: ; 1fb1
	ld e, a
	ld d, $0
	ld hl, wcf97
	ld a, [hli]
	ld h, [hl]
	ld l, a
rept 4
	add hl, de
endr
	ret
; 1fbf

ResetTextRelatedRAM:: ; 1fbf
	ld hl, wcf71
	call .bytefill
	ld hl, wMenuDataHeader
	call .bytefill
	ld hl, wMenuData2Flags
	call .bytefill
	ld hl, wcfa1
	call .bytefill

	ld a, [rSVBK]
	push af
	ld a, $7
	ld [rSVBK], a

	xor a
	ld hl, w7_dfff
rept 2
	ld [hld], a
endr
	ld a, l
	ld [wcf71], a
	ld a, h
	ld [wcf72], a

	pop af
	ld [rSVBK], a
	ret
; 1ff0

.bytefill: ; 1ff0
	ld bc, $0010
	xor a
	call ByteFill
	ret
; 1ff8

Function1ff8:: ; 1ff8
	push af
	and $3
	jr z, .nosound
	ld hl, wMenuFlags
	bit 3, [hl]
	jr nz, .nosound
	call PlayClickSFX

.nosound
	pop af
	ret
; 2009


PlayClickSFX:: ; 2009
	push de
	ld de, SFX_READ_TEXT_2
	call PlaySFX
	pop de
	ret
; 0x2012

Function2012:: ; 2012
	call MenuTextBox
	call CloseText
	call ExitMenu
	ret
; 201c

Function201c:: ; 201c
	ld [hBuffer], a
	ld a, [hROMBank]
	push af
	ld a, [hBuffer]
	rst Bankswitch

	call PlaceString
	pop af
	rst Bankswitch

	ret
; 202a

InterpretMenu:: ; 202a
	ld a, [hROMBank]
	ld [wcf94], a
	callba Function2400e
	ld a, [wMenuCursorBuffer]
	ret
; 2039

Function2039:: ; 2039
	ld a, [hROMBank]
	ld [wcf94], a
	callba Function24022
	ld a, [wMenuCursorBuffer]
	ret
; 2048

Function2048:: ; 2048
	ld a, [hROMBank]
	ld [wcf94], a
	callba Function2403c
	ld a, [wMenuCursorBuffer]
	ret
; 2057

Function2057:: ; 2057
	ld a, [hROMBank]
	push af
	ld a, BANK(Function842db)
	rst Bankswitch

	call Function842db
	pop af
	rst Bankswitch

	ret
; 2063