mirror of
https://github.com/pret/pokepinball.git
synced 2026-04-25 07:19:49 -05:00
166 lines
3.1 KiB
NASM
Executable File
166 lines
3.1 KiB
NASM
Executable File
HandleInGameMenu: ; 0x86d7
|
|
; Routine responsible for the "SAVE"/"CANCEL" menu.
|
|
ld a, [wd917]
|
|
push af
|
|
ld a, $1
|
|
ld [wd917], a
|
|
call FillBottomMessageBufferWithBlackTile
|
|
xor a
|
|
ld [wDrawBottomMessageBox], a
|
|
ld hl, wBottomMessageText
|
|
ld a, $81
|
|
ld b, $30
|
|
.clearLoop
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
dec b
|
|
jr nz, .clearLoop
|
|
ld de, wBottomMessageText + $24
|
|
ld hl, SaveText
|
|
call Func_8797
|
|
ld de, wBottomMessageText + $64
|
|
ld hl, CancelText
|
|
call Func_8797
|
|
ld a, Bank(InGameMenuSymbolsGfx)
|
|
ld hl, InGameMenuSymbolsGfx + $50
|
|
ld de, vTilesSH + $60
|
|
ld bc, $0010
|
|
call LoadVRAMData
|
|
ld a, $0
|
|
ld hl, wBottomMessageText
|
|
ld de, vBGWin
|
|
ld bc, $00c0
|
|
call LoadVRAMData
|
|
ld a, $60
|
|
ld [hWY], a
|
|
dec a
|
|
ld [hLYC], a
|
|
ld a, $fd
|
|
ld [hLCDCMask], a
|
|
call HandleInGameMenuSelection
|
|
ld a, [wInGameMenuIndex]
|
|
and a
|
|
jr nz, .pickedCancel
|
|
ld a, $1
|
|
ld [wd7c2], a
|
|
ld hl, wPartyMons
|
|
ld de, sSaveGame
|
|
ld bc, $04c3
|
|
call SaveData
|
|
xor a
|
|
ld [wd803], a
|
|
ld [wd804], a
|
|
.pickedCancel
|
|
ld bc, $003c
|
|
call AdvanceFrames
|
|
ld a, $86
|
|
ld [hWY], a
|
|
ld a, $83
|
|
ld [hLYC], a
|
|
ld [hLastLYC], a
|
|
ld a, $ff
|
|
ld [hLCDCMask], a
|
|
ld a, [hGameBoyColorFlag]
|
|
and a
|
|
jr nz, .asm_8778
|
|
ld a, Bank(StageRedFieldTopStatusBarSymbolsGfx_GameBoy)
|
|
ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoy + $60
|
|
ld de, vTilesSH + $60
|
|
ld bc, $0010
|
|
call LoadVRAMData
|
|
jr .asm_8786
|
|
|
|
.asm_8778
|
|
ld a, Bank(StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor)
|
|
ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor + $60
|
|
ld de, vTilesSH + $60
|
|
ld bc, $0010
|
|
call LoadVRAMData
|
|
.asm_8786
|
|
call FillBottomMessageBufferWithBlackTile
|
|
pop af
|
|
ld [wd917], a
|
|
ld a, $1
|
|
ld [wDrawBottomMessageBox], a
|
|
ld a, [wInGameMenuIndex]
|
|
and a
|
|
ret
|
|
|
|
Func_8797: ; 0x8797
|
|
ld a, [hli]
|
|
and a
|
|
ret z
|
|
add $bf
|
|
ld [de], a
|
|
inc de
|
|
jr Func_8797
|
|
|
|
SaveText: ; 0x87a0
|
|
db "SAVE@"
|
|
|
|
CancelText: ; 0x87a5
|
|
db "CANCEL@"
|
|
|
|
HandleInGameMenuSelection: ; 0x87ac
|
|
ld a, $1
|
|
ld [wInGameMenuIndex], a
|
|
.waitForAButton
|
|
call MoveInGameMenuCursor
|
|
call DrawInGameMenu
|
|
rst AdvanceFrame
|
|
ld a, [hNewlyPressedButtons]
|
|
bit BIT_A_BUTTON, a
|
|
jr z, .waitForAButton
|
|
lb de, $00, $01
|
|
call PlaySoundEffect
|
|
ret
|
|
|
|
MoveInGameMenuCursor: ; 0x87c5
|
|
; Moves the cursor up or down in the "SAVE"/"CANCEL" in-game menu
|
|
ld a, [hNewlyPressedButtons]
|
|
ld b, a
|
|
ld a, [wInGameMenuIndex]
|
|
bit BIT_D_UP, b
|
|
jr z, .didntPressUp
|
|
and a ; is the cursor already on "SAVE"?
|
|
ret z
|
|
dec a
|
|
ld [wInGameMenuIndex], a
|
|
lb de, $00, $03
|
|
call PlaySoundEffect
|
|
ret
|
|
|
|
.didntPressUp
|
|
bit BIT_D_DOWN, b
|
|
ret z
|
|
cp $1 ; is the cursor already on "CANCEL"?
|
|
ret z
|
|
inc a
|
|
ld [wInGameMenuIndex], a
|
|
lb de, $00, $03
|
|
call PlaySoundEffect
|
|
ret
|
|
|
|
DrawInGameMenu: ; 0x87ed
|
|
ld a, $81
|
|
ld [wBottomMessageText + $23], a
|
|
ld [wBottomMessageText + $63], a
|
|
ld a, [wInGameMenuIndex]
|
|
ld c, a
|
|
swap c
|
|
sla c
|
|
sla c
|
|
ld b, $0
|
|
ld hl, wBottomMessageText + $23
|
|
add hl, bc
|
|
ld a, $86
|
|
ld [hl], a
|
|
ld a, $0
|
|
ld hl, wBottomMessageText
|
|
ld de, vBGWin
|
|
ld bc, $00c0
|
|
call LoadVRAMData
|
|
ret
|