mirror of
https://github.com/pret/pokepinball.git
synced 2026-03-21 17:55:03 -05:00
226 lines
4.0 KiB
NASM
226 lines
4.0 KiB
NASM
HandleSelectGameboyTargetMenu: ; 0x8000
|
|
; This is an unreachable debug menu, which allowed developers to choose to run the game
|
|
; in either DMG or Game Boy Color mode.
|
|
; If you want to access this menu, you must set the initial screen to
|
|
; SCREEN_SELECT_GAMEBOY_TARGET, instead of SCREEN_ERASE_ALL_DATA.
|
|
; Additionally, you must hold UP when booting the game.
|
|
ld a, [wScreenState]
|
|
rst JumpTable ; calls JumpToFuncInTable
|
|
SelectGameboyTargetMenuFunctions: ; 0x8004
|
|
dw InitSelectGameboyTargetMenu
|
|
dw SelectCGBOrDMG
|
|
dw EndSelectGameboyTargetMenu
|
|
|
|
InitSelectGameboyTargetMenu: ; 0x800a
|
|
xor a
|
|
ldh [hFFC4], a
|
|
ldh a, [hJoypadState]
|
|
cp D_UP
|
|
jr nz, .skipDebugMenu
|
|
ldh a, [hGameBoyColorFlag]
|
|
and a
|
|
jr nz, .showMenu
|
|
.skipDebugMenu
|
|
ld hl, wCurrentScreen
|
|
inc [hl] ; set to SCREEN_ERASE_ALL_DATA
|
|
xor a
|
|
ld [wScreenState], a
|
|
ret
|
|
|
|
.showMenu
|
|
ld a, $45
|
|
ldh [hLCDC], a
|
|
ld a, $e4
|
|
ld [wBGP], a
|
|
ld [wOBP0], a
|
|
ld [wOBP1], a
|
|
xor a
|
|
ldh [hSCX], a
|
|
ldh [hSCY], a
|
|
call LoadGameboyTargetMenuGfx
|
|
call ClearSpriteBuffer
|
|
call SetAllPalettesWhite
|
|
call EnableLCD
|
|
call FadeIn
|
|
ld hl, wScreenState
|
|
inc [hl]
|
|
ret
|
|
|
|
LoadGameboyTargetMenuGfx: ; 0x8049
|
|
ld a, $1
|
|
ldh [rVBK], a
|
|
ld c, $ff
|
|
call FillTilesVRAM
|
|
call FillBackgroundsVRAM
|
|
xor a
|
|
ldh [rVBK], a
|
|
ld c, $0
|
|
call FillTilesVRAM
|
|
call FillBackgroundsVRAM
|
|
; This code makes no sense.
|
|
; It first fills 33 bytes at $ff68, then refills at rOBPI
|
|
ld a, $80
|
|
ld de, rBGPI
|
|
ld hl, Data_80e4
|
|
call FillPalette
|
|
ld a, $80
|
|
ld de, rOBPI
|
|
ld hl, Data_80f4
|
|
call FillPalette
|
|
ld hl, SelectGameboyTargetGfxPointers
|
|
xor a
|
|
call LoadVideoData
|
|
ld a, Bank(SelectGameboyTarget_TileData)
|
|
ld bc, SelectGameboyTarget_TileData
|
|
ld de, LoadTileLists
|
|
call QueueGraphicsToLoadWithFunc
|
|
ret
|
|
|
|
SelectGameboyTargetGfxPointers: ; 0x8089
|
|
dw SelectGameboyTarget_VideoData
|
|
|
|
SelectGameboyTarget_VideoData: ; 0x808b
|
|
VIDEO_DATA_TILES SelectGameboyTargetTextGfx, vTilesSH + $200, $400
|
|
db $FF, $FF ; terminators
|
|
|
|
SelectGameboyTarget_TileData: ; 0x8094
|
|
db $13
|
|
dbw $06, vBGMap + $a3
|
|
db $BC, $AF, $B6, $AF, $AD, $BD
|
|
dbw $06, $98AA
|
|
db $BD, $AB, $BB, $B1, $AF, $BD
|
|
dbw $04, $98E3
|
|
db $D0, $AD, $B1, $AC
|
|
dbw $03, $9924
|
|
db $AE, $B7, $B1
|
|
db $00 ; terminator
|
|
|
|
FillBackgroundsVRAM: ; 0x80b5
|
|
ld hl, vBGMap
|
|
.fillLoop
|
|
xor a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld a, h
|
|
cp $a0 ; end of VRAM
|
|
jr nz, .fillLoop
|
|
ret
|
|
|
|
FillTilesVRAM: ; 0x80c3
|
|
ld hl, vTilesOB
|
|
.fillLoop
|
|
ld a, c
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld a, h
|
|
cp (vBGMap >> 8)
|
|
jr nz, .fillLoop
|
|
ret
|
|
|
|
FillPalette: ; 0x80d1
|
|
; First places a in [de].
|
|
; Then, reads 32 bytes from hl and places them in order at de + 1
|
|
ld [de], a
|
|
inc de
|
|
ld b, $4
|
|
.outerLoop
|
|
ld c, $8
|
|
push hl
|
|
.innerLoop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
ld a, [hli]
|
|
ld [de], a
|
|
dec c
|
|
jr nz, .innerLoop
|
|
pop hl
|
|
dec b
|
|
jr nz, .outerLoop
|
|
ret
|
|
|
|
Data_80e4: ; 0x80e4
|
|
RGB 31, 31, 31
|
|
RGB 21, 21, 21
|
|
RGB 11, 11, 11
|
|
RGB 00, 00, 00
|
|
|
|
RGB 31, 31, 31
|
|
RGB 21, 21, 21
|
|
RGB 11, 11, 11
|
|
RGB 00, 00, 00
|
|
|
|
Data_80f4: ; 0x80f4
|
|
RGB 21, 21, 21
|
|
RGB 31, 31, 31
|
|
RGB 11, 11, 11
|
|
RGB 00, 00, 00
|
|
|
|
RGB 31, 31, 31
|
|
RGB 21, 21, 21
|
|
RGB 11, 11, 11
|
|
RGB 00, 00, 00
|
|
|
|
SelectCGBOrDMG: ; 0x8104
|
|
ldh a, [hNewlyPressedButtons]
|
|
ld b, a
|
|
and (D_DOWN | D_UP)
|
|
jr z, .directionNotPressed
|
|
ldh a, [hGameBoyColorFlag]
|
|
ldh [hFFC4], a
|
|
xor $1
|
|
ldh [hGameBoyColorFlag], a
|
|
jr .moveCursor
|
|
|
|
.directionNotPressed
|
|
bit BIT_A_BUTTON, b
|
|
ret z
|
|
ld hl, wScreenState
|
|
inc [hl]
|
|
ret
|
|
|
|
.moveCursor
|
|
ldh a, [hGameBoyColorFlag]
|
|
and a
|
|
jr nz, .cgb
|
|
ld a, Bank(DMGSelected_TileData)
|
|
ld bc, DMGSelected_TileData
|
|
ld de, LoadTileLists
|
|
call QueueGraphicsToLoadWithFunc
|
|
ret
|
|
|
|
.cgb
|
|
ld a, Bank(CGBSelected_TileData)
|
|
ld bc, CGBSelected_TileData
|
|
ld de, LoadTileLists
|
|
call QueueGraphicsToLoadWithFunc
|
|
ret
|
|
|
|
DMGSelected_TileData: ; 0x813a
|
|
db $02
|
|
dbw $01, $98E3
|
|
db $D1
|
|
dbw $01, $9923
|
|
db $D0
|
|
db $00 ; terminator
|
|
|
|
CGBSelected_TileData: ; 0x8144
|
|
db $02
|
|
dbw $01, $98E3
|
|
db $D0
|
|
dbw $01, $9923
|
|
db $D1
|
|
db $00 ; terminator
|
|
|
|
EndSelectGameboyTargetMenu: ; 0x414e
|
|
call FadeOut
|
|
call DisableLCD
|
|
ld hl, wCurrentScreen
|
|
inc [hl] ; set to SCREEN_ERASE_ALL_DATA
|
|
xor a
|
|
ld [wScreenState], a
|
|
ret
|