pokegold-spaceworld/home/menu_window.asm
luckytyphlosion e1659ecd41 Introduce linkerscript.
Addresses of sections will now be added to the linkerscript via `org`, and the section name will be the path/to/file. If there is more than one section in the file, then add a @SectionName after the path/to/file to describe the section.
2018-07-03 17:07:05 -04:00

521 lines
7.1 KiB
NASM

include "constants.asm"
SECTION "home/menu_window.asm", ROM0
SetMenuAttributes::
push hl
push bc
ld hl, wMenuData3
ld b, $8
.asm_1a6b: ; 00:1a6b
ld a, [de]
inc de
ld [hli], a
dec b
jr nz, .asm_1a6b
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
Get2DMenuJoypad:: ; 00:1a7c
call Place2DMenuCursor
ld hl, w2DMenuFlags + 1
res 7, [hl]
.loop: ; 00:1a84
call Move2DMenuCursor
call WaitBGMap
.asm_1a8a: ; 00:1a8a
call UpdateTime
call UpdateTimeOfDayPalettes
call Menu_WasButtonPressed
jr c, .asm_1a9f
ld a, [w2DMenuFlags]
bit 7, a
jp nz, .done
jr .asm_1a8a
.asm_1a9f: ; 00:1a9f
call _2DMenuInterpretJoypad
jp c, .done
ld a, [w2DMenuFlags]
bit 7, a
jr nz, .done
ldh a, [hJoySum]
ld b, a
ld a, [wMenuJoypadFilter]
and b
jp z, .loop
.done: ; 00:1ab6
ldh a, [hJoyDown]
and A_BUTTON | B_BUTTON
jr z, .asm_1ac4
push de
ld de, SE_SELECT
call PlaySFX
pop de
.asm_1ac4: ; 00:1ac4
ldh a, [hJoySum]
ret
Menu_WasButtonPressed:: ; 00:1ac7
ld a, [w2DMenuFlags]
bit 6, a
jr z, .asm_1ad6
callba PlaySpriteAnimationsAndDelayFrame
.asm_1ad6: ; 00:1ad6
call GetJoypadDebounced
ldh a, [hJoySum]
and a
ret z
scf
ret
_2DMenuInterpretJoypad:: ; 00:1adf
ldh a, [hJoySum]
bit A_BUTTON_F, a
jp nz, .PressedABStartOrSelect
bit B_BUTTON_F, a
jp nz, .PressedABStartOrSelect
bit SELECT_F, a
jp nz, .PressedABStartOrSelect
bit START_F, a
jp nz, .PressedABStartOrSelect
bit D_RIGHT_F, a
jr nz, .PressedRight
bit D_LEFT_F, a
jr nz, .PressedLeft
bit D_UP_F, a
jr nz, .PressedUp
bit D_DOWN_F, a
jr nz, .PressedDown
and a
ret
.SetFlag15AndCarry: ; 00:1b07
ld hl, w2DMenuFlags + 1
set 7, [hl]
scf
ret
.PressedDown: ; 00:1b0e
ld hl, wMenuCursorY
ld a, [w2DMenuNumRows]
cp [hl]
jr z, .asm_1b1a
inc [hl]
xor a
ret
.asm_1b1a: ; 00:1b1a
ld a, [w2DMenuFlags]
bit 5, a
jr nz, .asm_1b28
bit 3, a
jp nz, .SetFlag15AndCarry
xor a
ret
.asm_1b28: ; 00:1b28
ld [hl], $1
xor a
ret
.PressedUp: ; 00:1b2c
ld hl, wMenuCursorY
ld a, [hl]
dec a
jr z, .asm_1b36
ld [hl], a
xor a
ret
.asm_1b36: ; 00:1b36
ld a, [w2DMenuFlags]
bit 5, a
jr nz, .asm_1b44
bit 2, a
jp nz, .SetFlag15AndCarry
xor a
ret
.asm_1b44: ; 00:1b44
ld a, [w2DMenuNumRows]
ld [hl], a
xor a
ret
.PressedLeft: ; 00:1b4a
ld hl, wMenuCursorX
ld a, [hl]
dec a
jr z, .asm_1b54
ld [hl], a
xor a
ret
.asm_1b54: ; 00:1b54
ld a, [w2DMenuFlags]
bit 4, a
jr nz, .asm_1b62
bit 1, a
jp nz, .SetFlag15AndCarry
xor a
ret
.asm_1b62: ; 00:1b62
ld a, [w2DMenuNumCols]
ld [hl], a
xor a
ret
.PressedRight: ; 00:1b68
ld hl, wMenuCursorX
ld a, [w2DMenuNumCols]
cp [hl]
jr z, .asm_1b74
inc [hl]
xor a
ret
.asm_1b74: ; 00:1b74
ld a, [w2DMenuFlags]
bit 4, a
jr nz, .asm_1b82
bit 0, a
jp nz, .SetFlag15AndCarry
xor a
ret
.asm_1b82: ; 00:1b82
ld [hl], $1
xor a
ret
.PressedABStartOrSelect: ; 00:1b86
xor a
ret
Move2DMenuCursor:: ; 00:1b88
ld hl, wCursorCurrentTile
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [hl]
cp $ed
jr nz, Place2DMenuCursor
ld a, [wCursorOffCharacter]
ld [hl], a
Place2DMenuCursor:: ; 00:1b97
ld a, [w2DMenuCursorInitY]
ld b, a
ld a, [w2DMenuCursorInitX]
ld c, a
call Coord2Tile
ld a, [w2DMenuCursorOffsets]
swap a
and $f
ld c, a
ld a, [wMenuCursorY]
ld b, a
xor a
dec b
jr z, .asm_1bb6
.asm_1bb2: ; 00:1bb2
add c
dec b
jr nz, .asm_1bb2
.asm_1bb6: ; 00:1bb6
ld c, SCREEN_WIDTH
call AddNTimes
ld a, [w2DMenuCursorOffsets]
and $f
ld c, a
ld a, [wMenuCursorX]
ld b, a
xor a
dec b
jr z, .asm_1bcd
.asm_1bc9: ; 00:1bc9
add c
dec b
jr nz, .asm_1bc9
.asm_1bcd: ; 00:1bcd
ld c, a
add hl, bc
ld a, [hl]
cp $ed
jr z, .asm_1bd9
ld [wCursorOffCharacter], a
ld [hl], $ed
.asm_1bd9: ; 00:1bd9
ld a, l
ld [wCursorCurrentTile], a
ld a, h
ld [wCursorCurrentTile + 1], a
ret
PlaceHollowCursor::
ld hl, wCursorCurrentTile
ld a, [hli]
ld h, [hl]
ld l, a
ld [hl], $ec
ret
HideCursor::
ld hl, wCursorCurrentTile
ld a, [hli]
ld h, [hl]
ld l, a
ld [hl], $7f
ret
PushWindow:: ; 00:1bf4
ld hl, PlaceWaitingText
ld a, $9
jp FarCall_hl
ExitMenu:: ; 00:1bfc
push af
callab _ExitMenu
call Function1c0a
pop af
ret
Function1c0a:: ; 00:1c0a
ld a, [wVramState]
bit 0, a
ret z
xor a
call OpenSRAM
hlcoord 0, 0
ld de, sSpriteBuffer0
ld bc, $168
call CopyBytes
call CloseSRAM
call LoadMapPart
xor a
call OpenSRAM
ld hl, sSpriteBuffer0
decoord 0, 0
ld bc, $168
.asm_1c33: ; 00:1c33
ld a, [hl]
cp $61
jr c, .asm_1c39
ld [de], a
.asm_1c39: ; 00:1c39
inc hl
inc de
dec bc
ld a, c
or b
jr nz, .asm_1c33
call CloseSRAM
ret
InitVerticalMenuCursor:: ; 00:1c44
jpab _InitVerticalMenuCursor
CloseWindow:: ; 00:1c4c
push af
call ExitMenu
call WaitBGMap
call UpdateSprites
pop af
ret
Function1c58::
jpab Function24185
RestoreTileBackup:: ; 00:1c60
call MenuBoxCoord2Tile
call GetMenuBoxDims
inc b
inc c
.asm_1c68: ; 00:1c68
push bc
push hl
.asm_1c6a: ; 00:1c6a
ld a, [de]
ld [hli], a
dec de
dec c
jr nz, .asm_1c6a
pop hl
ld bc, SCREEN_WIDTH
add hl, bc
pop bc
dec b
jr nz, .asm_1c68
ret
PopWindow:: ; 00:1c7a
ld b, $10
ld de, wMenuDataHeader
.asm_1c7f: ; 00:1c7f
ld a, [hld]
ld [de], a
inc de
dec b
jr nz, .asm_1c7f
ret
GetMenuBoxDims:: ; 00:1c86
push hl
ld hl, wMenuBorderTopCoord
ld a, [hli]
ld b, a
ld a, [hli]
ld c, a
ld a, [hli]
sub b
ld b, a
ld a, [hli]
sub c
ld c, a
pop hl
ret
CopyMenuData:: ; 00:1c96
push hl
push de
push bc
push af
ld hl, wMenuDataPointer
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wMenuDataFlags
ld bc, $10
call CopyBytes
pop af
pop bc
pop de
pop hl
ret
GetWindowStackTop:: ; 00:1cae
ld hl, wWindowStackPointer
ld a, [hli]
ld h, [hl]
ld l, a
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
ret
PlaceVerticalMenuItems:: ; 00:1cb9
call CopyMenuData
ld hl, wMenuDataPointer
ld e, [hl]
inc hl
ld d, [hl]
call GetMenuTextStartCoord
call Coord2Tile ; hl now contains the tilemap address where we will start printing text.
inc de
ld a, [de]
inc de
ld b, a
.asm_1ccc: ; 00:1ccc
push bc
call PlaceString
inc de
ld bc, 2 * SCREEN_WIDTH
add hl, bc
pop bc
dec b
jr nz, .asm_1ccc
ld a, [wMenuDataFlags]
bit 4, a
ret z
call MenuBoxCoord2Tile
ld a, [de]
ld c, a
inc de
ld b, $0
add hl, bc
jp PlaceString
MenuBox:: ; 00:1ceb
call MenuBoxCoord2Tile
call GetMenuBoxDims
dec b
dec c
jp DrawTextBox
GetMenuTextStartCoord:: ; 00:1cf6
ld a, [wMenuBorderTopCoord]
ld b, a
inc b
ld a, [wMenuBorderLeftCoord]
ld c, a
inc c
ld a, [wMenuDataFlags]
bit 6, a
jr nz, .asm_1d08
inc b
.asm_1d08: ; 00:1d08
ld a, [wMenuDataFlags]
bit 7, a
jr z, .asm_1d10
inc c
.asm_1d10: ; 00:1d10
ret
ClearMenuBoxInterior::
call MenuBoxCoord2Tile
ld bc, SCREEN_WIDTH + 1
add hl, bc
call GetMenuBoxDims
dec b
dec c
call ClearBox
ret
ClearWholeMenuBox::
call MenuBoxCoord2Tile
call GetMenuBoxDims
inc c
inc b
call ClearBox
ret
MenuBoxCoord2Tile:: ; 00:1d2d
ld a, [wMenuBorderLeftCoord]
ld c, a
ld a, [wMenuBorderTopCoord]
ld b, a
Coord2Tile:: ; 00:1d35
xor a
ld h, a
ld l, b
ld a, c
ld b, h
ld c, l
add hl, hl
add hl, hl
add hl, bc
add hl, hl
add hl, hl
ld c, a
xor a
ld b, a
add hl, bc
bccoord 0, 0
add hl, bc
ret