mirror of
https://github.com/pret/pokepinball.git
synced 2026-09-28 13:49:29 -04:00
Move titlescreen routines into their own file
This commit is contained in:
Executable
+468
@@ -0,0 +1,468 @@
|
||||
HandleTitlescreen: ; 0xc000
|
||||
ld a, [wScreenState]
|
||||
rst JumpTable ; calls JumpToFuncInTable
|
||||
TitlescreenFunctions: ; 0xc004
|
||||
dw FadeInTitlescreen
|
||||
dw TitlescreenLoop ; titlescreen loop
|
||||
dw Func_c10e ; previously saved game menu
|
||||
dw Func_c1cb ; game start, pokedex, option
|
||||
dw GoToHighScoresFromTitlescreen ; go to high scores
|
||||
|
||||
FadeInTitlescreen: ; 0xc00e
|
||||
ld a, $43
|
||||
ld [hLCDC], a
|
||||
ld a, $e4
|
||||
ld [wBGP], a
|
||||
ld a, $d2
|
||||
ld [wOBP0], a
|
||||
ld a, $e1
|
||||
ld [wOBP1], a
|
||||
xor a
|
||||
ld [hSCX], a
|
||||
ld [hSCY], a
|
||||
ld hl, TitlescreenFadeInGfxPointers
|
||||
ld a, [hGameBoyColorFlag]
|
||||
call LoadVideoData
|
||||
ld a, $1
|
||||
ld [wTitleScreenGameStartCursorSelection], a
|
||||
call ClearOAMBuffer
|
||||
ld a, $2
|
||||
ld [wTitleScreenPokeballAnimationCounter], a
|
||||
call HandleTitlescreenAnimations
|
||||
call Func_b66
|
||||
ld a, $11
|
||||
call SetSongBank
|
||||
ld de, $0004
|
||||
call PlaySong
|
||||
call Func_588
|
||||
call Func_bbe ; this does the fading
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
TitlescreenFadeInGfxPointers: ; 0xc057
|
||||
dw TitlescreenFadeInGfx_GameBoy
|
||||
dw TitlescreenFadeInGfx_GameBoyColor
|
||||
|
||||
TitlescreenFadeInGfx_GameBoy: ; 0xc05b
|
||||
VIDEO_DATA_TILES TitlescreenGfx, vTilesOB, $1800
|
||||
VIDEO_DATA_TILEMAP TitlescreenTilemap, vBGMap, $240
|
||||
db $FF, $FF ; terminators
|
||||
|
||||
TitlescreenFadeInGfx_GameBoyColor: ; 0xc06b
|
||||
VIDEO_DATA_TILES TitlescreenFadeInGfx, vTilesOB, $1800
|
||||
VIDEO_DATA_TILEMAP TitlescreenTilemap, vBGMap, $240
|
||||
VIDEO_DATA_BGATTR TitlescreenBGAttributes, vBGMap, $240
|
||||
VIDEO_DATA_PALETTES TitlescreenPalettes, $80
|
||||
db $FF, $FF ; terminators
|
||||
|
||||
TitlescreenLoop: ; 0xc089
|
||||
call Func_c0ee
|
||||
call HandleTitlescreenAnimations
|
||||
ld a, [hNewlyPressedButtons]
|
||||
bit BIT_A_BUTTON, a ; was A button pressed?
|
||||
jr z, .AButtonNotPressed
|
||||
ld a, [wTitleScreenCursorSelection]
|
||||
and a
|
||||
jr nz, .asm_c0d3
|
||||
; player chose "Game Start"
|
||||
ld a, [wd7c2] ; if this is non-zero, the main menu will prompt for "continue or new game?".
|
||||
and a
|
||||
jr z, .noPreviouslySavedGame
|
||||
lb de, $00, $01
|
||||
call PlaySoundEffect
|
||||
xor a
|
||||
ld [wd910], a
|
||||
ld a, $2
|
||||
ld [wd911], a
|
||||
ld a, $1
|
||||
ld [wTitleScreenGameStartCursorSelection], a
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
.noPreviouslySavedGame
|
||||
ld de, $0000
|
||||
call PlaySong
|
||||
rst AdvanceFrame
|
||||
lb de, $00, $27
|
||||
call PlaySoundEffect
|
||||
ld bc, $0037
|
||||
call AdvanceFrames
|
||||
ld a, $3
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
.asm_c0d3
|
||||
lb de, $00, $01
|
||||
call PlaySoundEffect
|
||||
ld a, $3
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
.AButtonNotPressed
|
||||
bit BIT_B_BUTTON, a ; was B button pressed?
|
||||
ret z
|
||||
lb de, $00, $01
|
||||
call PlaySoundEffect
|
||||
ld a, $4
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
Func_c0ee: ; 0xc0ee
|
||||
ld hl, wTitleScreenCursorSelection
|
||||
ld c, $2
|
||||
call Func_c1fc
|
||||
ret
|
||||
|
||||
HandleTitlescreenAnimations: ; 0xc0f7
|
||||
ld a, [hGameBoyColorFlag]
|
||||
and a
|
||||
jr z, .asm_c104
|
||||
ld bc, $2040
|
||||
ld a, $62 ; seemingly-unused OAM data for titlescreen. It's just blank tiles.
|
||||
call LoadOAMData
|
||||
.asm_c104
|
||||
call Func_c21d ; does nothing...
|
||||
call HandleTitlescreenPikachuBlinkingAnimation
|
||||
call HandleTitlescreenPokeballAnimation
|
||||
ret
|
||||
|
||||
Func_c10e: ; 0xc10e
|
||||
call Func_c1a2
|
||||
call Func_c1b1
|
||||
ld a, [wd910]
|
||||
cp $6
|
||||
ret nz
|
||||
ld a, [hNewlyPressedButtons]
|
||||
bit 0, a
|
||||
jr z, .asm_c17c
|
||||
ld de, $0000
|
||||
call PlaySong
|
||||
rst AdvanceFrame
|
||||
lb de, $00, $27
|
||||
call PlaySoundEffect
|
||||
ld bc, $0041
|
||||
call AdvanceFrames
|
||||
ld a, [wTitleScreenGameStartCursorSelection]
|
||||
and a
|
||||
jr z, .asm_c177
|
||||
call Func_cb5
|
||||
call Func_576
|
||||
ld a, [wd7c2]
|
||||
and a
|
||||
jr z, .asm_c173
|
||||
ld hl, sSaveGame
|
||||
ld de, wPartyMons
|
||||
ld bc, $04c3
|
||||
call LoadSavedData
|
||||
jr nc, .asm_c173
|
||||
xor a
|
||||
ld [wd7c2], a
|
||||
ld hl, wPartyMons
|
||||
ld de, sSaveGame
|
||||
ld bc, $04c3
|
||||
call SaveData
|
||||
ld a, $1
|
||||
ld [wd7c1], a
|
||||
ld a, SCREEN_PINBALL_GAME
|
||||
ld [wCurrentScreen], a
|
||||
ld a, $0
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
.asm_c173
|
||||
xor a
|
||||
ld [wd7c1], a
|
||||
.asm_c177
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
.asm_c17c
|
||||
bit 1, a
|
||||
ret z
|
||||
lb de, $00, $01
|
||||
call PlaySoundEffect
|
||||
ld a, $8
|
||||
ld [wd910], a
|
||||
ld a, $2
|
||||
ld [wd911], a
|
||||
.asm_c18f
|
||||
call CleanOAMBuffer
|
||||
rst AdvanceFrame
|
||||
call Func_c1b1
|
||||
ld a, [wd910]
|
||||
cp $e
|
||||
jr nz, .asm_c18f
|
||||
ld hl, wScreenState
|
||||
dec [hl]
|
||||
ret
|
||||
|
||||
Func_c1a2: ; 0xc1a2
|
||||
ld a, [wd910]
|
||||
cp $6
|
||||
ret nz
|
||||
ld hl, wTitleScreenGameStartCursorSelection
|
||||
ld c, $1
|
||||
call Func_c1fc
|
||||
ret
|
||||
|
||||
Func_c1b1: ; 0xc1b1
|
||||
call Func_c2df
|
||||
ld a, [hGameBoyColorFlag]
|
||||
and a
|
||||
jr z, .asm_c1c1
|
||||
ld bc, $2040
|
||||
ld a, $62
|
||||
call LoadOAMData
|
||||
.asm_c1c1
|
||||
call Func_c21d
|
||||
call HandleTitlescreenPikachuBlinkingAnimation
|
||||
call HandleTitlescreenPokeballAnimation
|
||||
ret
|
||||
|
||||
Func_c1cb: ; 0c1cb
|
||||
call Func_cb5
|
||||
call Func_576
|
||||
ld a, [wTitleScreenCursorSelection]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, Data_c1e4
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wCurrentScreen], a
|
||||
xor a
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
Data_c1e4: ; 0xc1e4
|
||||
db SCREEN_FIELD_SELECT
|
||||
db SCREEN_POKEDEX
|
||||
db SCREEN_OPTIONS
|
||||
|
||||
GoToHighScoresFromTitlescreen: ; 0xc1e7
|
||||
call Func_cb5
|
||||
call Func_576
|
||||
ld a, SCREEN_HIGH_SCORES
|
||||
ld [wCurrentScreen], a
|
||||
ld a, $1
|
||||
ld [wScreenState], a
|
||||
xor a
|
||||
ld [wda7f], a
|
||||
ret
|
||||
|
||||
Func_c1fc: ; 0xc1fc
|
||||
ld a, [hPressedButtons]
|
||||
ld b, a
|
||||
ld a, [hl]
|
||||
bit 6, b
|
||||
jr z, .asm_c20f
|
||||
and a
|
||||
ret z
|
||||
dec a
|
||||
ld [hl], a
|
||||
lb de, $00, $03
|
||||
call PlaySoundEffect
|
||||
ret
|
||||
|
||||
.asm_c20f
|
||||
bit 7, b
|
||||
ret z
|
||||
cp c
|
||||
ret z
|
||||
inc a
|
||||
ld [hl], a
|
||||
lb de, $00, $03
|
||||
call PlaySoundEffect
|
||||
ret
|
||||
|
||||
Func_c21d: ; 0xc21d
|
||||
; World's greatest function.
|
||||
ret
|
||||
|
||||
HandleTitlescreenPikachuBlinkingAnimation: ; 0xc21e
|
||||
ld a, [wTitleScreenBlinkAnimationFrame]
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, TitleScreenBlinkAnimation
|
||||
add hl, bc
|
||||
lb bc, $38, $10
|
||||
ld a, [hl]
|
||||
cp $5a ; blink animation frame 1 OAM id
|
||||
call nz, LoadOAMData
|
||||
ld a, [wTitleScreenBlinkAnimationCounter]
|
||||
dec a
|
||||
jr nz, .done
|
||||
inc hl
|
||||
inc hl ; hl points to next frame in TitleScreenBlinkAnimation array
|
||||
ld a, [hl]
|
||||
and a ; reached the end of the animation frames?
|
||||
jr z, .saveAnimationFrame
|
||||
ld a, [wTitleScreenBlinkAnimationFrame]
|
||||
inc a
|
||||
.saveAnimationFrame
|
||||
ld [wTitleScreenBlinkAnimationFrame], a
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, (TitleScreenBlinkAnimation + 1)
|
||||
add hl, bc
|
||||
ld a, [hl] ; a contains second byte in the current animation frame data
|
||||
cp $3c ; is this a long-duration animation frame?
|
||||
jr c, .done
|
||||
ld c, a
|
||||
call GenRandom
|
||||
and $1f
|
||||
add c
|
||||
.done
|
||||
ld [wTitleScreenBlinkAnimationCounter], a
|
||||
ret
|
||||
|
||||
TitleScreenBlinkAnimation: ; 0xc25f
|
||||
; Array of animation frames. The animation is looped when it finishes.
|
||||
; first byte = OAM data id to load
|
||||
; second byte = number of frames to show this animation.
|
||||
db $5a, $c8
|
||||
db $5b, $04
|
||||
db $5c, $04
|
||||
db $5b, $04
|
||||
db $5a, $3c
|
||||
db $5b, $03
|
||||
db $5c, $03
|
||||
db $5b, $03
|
||||
db $5a, $03
|
||||
db $5b, $03
|
||||
db $5c, $03
|
||||
db $5b, $03
|
||||
db $00 ; terminator
|
||||
|
||||
HandleTitlescreenPokeballAnimation: ; 0xc278
|
||||
ld a, [wTitleScreenCursorSelection]
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, TitleScreenPokeballCoordOffsets
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld e, $0
|
||||
ld a, [wScreenState] ; TODO: I think this is the "titlescreen state" byte.
|
||||
cp $1
|
||||
jr nz, .loadOAM ; skip getting the correct animation frame
|
||||
ld a, [wTitleScreenBouncingBallAnimationFrame]
|
||||
sla a
|
||||
ld e, a
|
||||
.loadOAM
|
||||
ld d, $0
|
||||
ld hl, TitleScreenPokeballAnimation
|
||||
add hl, de
|
||||
ld a, [hl] ; a contains OAM id
|
||||
call LoadOAMData
|
||||
ld a, [wTitleScreenPokeballAnimationCounter]
|
||||
dec a
|
||||
jr nz, .done
|
||||
ld a, [wTitleScreenBouncingBallAnimationFrame]
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, (TitleScreenPokeballAnimation + 2) ; first frame of actual animation
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .saveAnimationFrame ; end of list?
|
||||
ld a, [wTitleScreenBouncingBallAnimationFrame]
|
||||
inc a
|
||||
.saveAnimationFrame
|
||||
ld [wTitleScreenBouncingBallAnimationFrame], a
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, (TitleScreenPokeballAnimation + 1) ; first duration
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
.done
|
||||
ld [wTitleScreenPokeballAnimationCounter], a
|
||||
ret
|
||||
|
||||
TitleScreenPokeballAnimation: ; 0xc2cc
|
||||
; first byte = OAM id
|
||||
; second byte = animation frame duration
|
||||
db $5D, $02
|
||||
db $5E, $06
|
||||
db $5F, $02
|
||||
db $60, $04
|
||||
db $61, $06
|
||||
db $5F, $04
|
||||
db $00 ; terminator
|
||||
|
||||
TitleScreenPokeballCoordOffsets: ; 0xc2d9
|
||||
db $67, $15
|
||||
db $73, $15
|
||||
db $7F, $15
|
||||
|
||||
Func_c2df: ; 0xc2df
|
||||
ld bc, $4446 ; pixel offsets, not data
|
||||
ld a, [wd910]
|
||||
cp $6
|
||||
jr nz, .asm_c2f0
|
||||
ld a, [wTitleScreenGameStartCursorSelection]
|
||||
add $58
|
||||
jr .asm_c2fd
|
||||
|
||||
.asm_c2f0
|
||||
ld a, [wd910]
|
||||
sla a
|
||||
ld e, a
|
||||
ld d, $0
|
||||
ld hl, Data_c32b
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
.asm_c2fd
|
||||
call LoadOAMData
|
||||
ld a, [wd911]
|
||||
dec a
|
||||
jr nz, .asm_c327
|
||||
ld a, [wd910]
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, Data_c32b + 2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
ld a, [wd910]
|
||||
jr z, .asm_c31d
|
||||
inc a
|
||||
ld [wd910], a
|
||||
.asm_c31d
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, Data_c32b + 1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
.asm_c327
|
||||
ld [wd911], a
|
||||
ret
|
||||
|
||||
Data_c32b: ; 0xc32b
|
||||
db $52, $02
|
||||
db $53, $02
|
||||
db $54, $02
|
||||
db $55, $02
|
||||
db $56, $02
|
||||
db $57, $02
|
||||
db $57, $02
|
||||
db $00, $00
|
||||
db $57, $02
|
||||
db $56, $02
|
||||
db $55, $02
|
||||
db $54, $02
|
||||
db $53, $02
|
||||
db $52, $02
|
||||
db $52, $02
|
||||
db $00
|
||||
@@ -1902,472 +1902,7 @@ PokedexCharactersGfx: ; 0xa000
|
||||
|
||||
SECTION "bank3", ROMX, BANK[$3]
|
||||
|
||||
HandleTitlescreen: ; 0xc000
|
||||
ld a, [wScreenState]
|
||||
rst JumpTable ; calls JumpToFuncInTable
|
||||
TitlescreenFunctions: ; 0xc004
|
||||
dw FadeInTitlescreen
|
||||
dw TitlescreenLoop ; titlescreen loop
|
||||
dw Func_c10e ; previously saved game menu
|
||||
dw Func_c1cb ; game start, pokedex, option
|
||||
dw GoToHighScoresFromTitlescreen ; go to high scores
|
||||
|
||||
FadeInTitlescreen: ; 0xc00e
|
||||
ld a, $43
|
||||
ld [hLCDC], a
|
||||
ld a, $e4
|
||||
ld [wBGP], a
|
||||
ld a, $d2
|
||||
ld [wOBP0], a
|
||||
ld a, $e1
|
||||
ld [wOBP1], a
|
||||
xor a
|
||||
ld [hSCX], a
|
||||
ld [hSCY], a
|
||||
ld hl, TitlescreenFadeInGfxPointers
|
||||
ld a, [hGameBoyColorFlag]
|
||||
call LoadVideoData
|
||||
ld a, $1
|
||||
ld [wTitleScreenGameStartCursorSelection], a
|
||||
call ClearOAMBuffer
|
||||
ld a, $2
|
||||
ld [wTitleScreenPokeballAnimationCounter], a
|
||||
call HandleTitlescreenAnimations
|
||||
call Func_b66
|
||||
ld a, $11
|
||||
call SetSongBank
|
||||
ld de, $0004
|
||||
call PlaySong
|
||||
call Func_588
|
||||
call Func_bbe ; this does the fading
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
TitlescreenFadeInGfxPointers: ; 0xc057
|
||||
dw TitlescreenFadeInGfx_GameBoy
|
||||
dw TitlescreenFadeInGfx_GameBoyColor
|
||||
|
||||
TitlescreenFadeInGfx_GameBoy: ; 0xc05b
|
||||
VIDEO_DATA_TILES TitlescreenGfx, vTilesOB, $1800
|
||||
VIDEO_DATA_TILEMAP TitlescreenTilemap, vBGMap, $240
|
||||
db $FF, $FF ; terminators
|
||||
|
||||
TitlescreenFadeInGfx_GameBoyColor: ; 0xc06b
|
||||
VIDEO_DATA_TILES TitlescreenFadeInGfx, vTilesOB, $1800
|
||||
VIDEO_DATA_TILEMAP TitlescreenTilemap, vBGMap, $240
|
||||
VIDEO_DATA_BGATTR TitlescreenBGAttributes, vBGMap, $240
|
||||
VIDEO_DATA_PALETTES TitlescreenPalettes, $80
|
||||
db $FF, $FF ; terminators
|
||||
|
||||
TitlescreenLoop: ; 0xc089
|
||||
call Func_c0ee
|
||||
call HandleTitlescreenAnimations
|
||||
ld a, [hNewlyPressedButtons]
|
||||
bit BIT_A_BUTTON, a ; was A button pressed?
|
||||
jr z, .AButtonNotPressed
|
||||
ld a, [wTitleScreenCursorSelection]
|
||||
and a
|
||||
jr nz, .asm_c0d3
|
||||
; player chose "Game Start"
|
||||
ld a, [wd7c2] ; if this is non-zero, the main menu will prompt for "continue or new game?".
|
||||
and a
|
||||
jr z, .noPreviouslySavedGame
|
||||
lb de, $00, $01
|
||||
call PlaySoundEffect
|
||||
xor a
|
||||
ld [wd910], a
|
||||
ld a, $2
|
||||
ld [wd911], a
|
||||
ld a, $1
|
||||
ld [wTitleScreenGameStartCursorSelection], a
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
.noPreviouslySavedGame
|
||||
ld de, $0000
|
||||
call PlaySong
|
||||
rst AdvanceFrame
|
||||
lb de, $00, $27
|
||||
call PlaySoundEffect
|
||||
ld bc, $0037
|
||||
call AdvanceFrames
|
||||
ld a, $3
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
.asm_c0d3
|
||||
lb de, $00, $01
|
||||
call PlaySoundEffect
|
||||
ld a, $3
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
.AButtonNotPressed
|
||||
bit BIT_B_BUTTON, a ; was B button pressed?
|
||||
ret z
|
||||
lb de, $00, $01
|
||||
call PlaySoundEffect
|
||||
ld a, $4
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
Func_c0ee: ; 0xc0ee
|
||||
ld hl, wTitleScreenCursorSelection
|
||||
ld c, $2
|
||||
call Func_c1fc
|
||||
ret
|
||||
|
||||
HandleTitlescreenAnimations: ; 0xc0f7
|
||||
ld a, [hGameBoyColorFlag]
|
||||
and a
|
||||
jr z, .asm_c104
|
||||
ld bc, $2040
|
||||
ld a, $62 ; seemingly-unused OAM data for titlescreen. It's just blank tiles.
|
||||
call LoadOAMData
|
||||
.asm_c104
|
||||
call Func_c21d ; does nothing...
|
||||
call HandleTitlescreenPikachuBlinkingAnimation
|
||||
call HandleTitlescreenPokeballAnimation
|
||||
ret
|
||||
|
||||
Func_c10e: ; 0xc10e
|
||||
call Func_c1a2
|
||||
call Func_c1b1
|
||||
ld a, [wd910]
|
||||
cp $6
|
||||
ret nz
|
||||
ld a, [hNewlyPressedButtons]
|
||||
bit 0, a
|
||||
jr z, .asm_c17c
|
||||
ld de, $0000
|
||||
call PlaySong
|
||||
rst AdvanceFrame
|
||||
lb de, $00, $27
|
||||
call PlaySoundEffect
|
||||
ld bc, $0041
|
||||
call AdvanceFrames
|
||||
ld a, [wTitleScreenGameStartCursorSelection]
|
||||
and a
|
||||
jr z, .asm_c177
|
||||
call Func_cb5
|
||||
call Func_576
|
||||
ld a, [wd7c2]
|
||||
and a
|
||||
jr z, .asm_c173
|
||||
ld hl, sSaveGame
|
||||
ld de, wPartyMons
|
||||
ld bc, $04c3
|
||||
call LoadSavedData
|
||||
jr nc, .asm_c173
|
||||
xor a
|
||||
ld [wd7c2], a
|
||||
ld hl, wPartyMons
|
||||
ld de, sSaveGame
|
||||
ld bc, $04c3
|
||||
call SaveData
|
||||
ld a, $1
|
||||
ld [wd7c1], a
|
||||
ld a, SCREEN_PINBALL_GAME
|
||||
ld [wCurrentScreen], a
|
||||
ld a, $0
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
.asm_c173
|
||||
xor a
|
||||
ld [wd7c1], a
|
||||
.asm_c177
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
.asm_c17c
|
||||
bit 1, a
|
||||
ret z
|
||||
lb de, $00, $01
|
||||
call PlaySoundEffect
|
||||
ld a, $8
|
||||
ld [wd910], a
|
||||
ld a, $2
|
||||
ld [wd911], a
|
||||
.asm_c18f
|
||||
call CleanOAMBuffer
|
||||
rst AdvanceFrame
|
||||
call Func_c1b1
|
||||
ld a, [wd910]
|
||||
cp $e
|
||||
jr nz, .asm_c18f
|
||||
ld hl, wScreenState
|
||||
dec [hl]
|
||||
ret
|
||||
|
||||
Func_c1a2: ; 0xc1a2
|
||||
ld a, [wd910]
|
||||
cp $6
|
||||
ret nz
|
||||
ld hl, wTitleScreenGameStartCursorSelection
|
||||
ld c, $1
|
||||
call Func_c1fc
|
||||
ret
|
||||
|
||||
Func_c1b1: ; 0xc1b1
|
||||
call Func_c2df
|
||||
ld a, [hGameBoyColorFlag]
|
||||
and a
|
||||
jr z, .asm_c1c1
|
||||
ld bc, $2040
|
||||
ld a, $62
|
||||
call LoadOAMData
|
||||
.asm_c1c1
|
||||
call Func_c21d
|
||||
call HandleTitlescreenPikachuBlinkingAnimation
|
||||
call HandleTitlescreenPokeballAnimation
|
||||
ret
|
||||
|
||||
Func_c1cb: ; 0c1cb
|
||||
call Func_cb5
|
||||
call Func_576
|
||||
ld a, [wTitleScreenCursorSelection]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, Data_c1e4
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wCurrentScreen], a
|
||||
xor a
|
||||
ld [wScreenState], a
|
||||
ret
|
||||
|
||||
Data_c1e4: ; 0xc1e4
|
||||
db SCREEN_FIELD_SELECT, SCREEN_POKEDEX, SCREEN_OPTIONS
|
||||
|
||||
GoToHighScoresFromTitlescreen: ; 0xc1e7
|
||||
call Func_cb5
|
||||
call Func_576
|
||||
ld a, SCREEN_HIGH_SCORES
|
||||
ld [wCurrentScreen], a
|
||||
ld a, $1
|
||||
ld [wScreenState], a
|
||||
xor a
|
||||
ld [wda7f], a
|
||||
ret
|
||||
|
||||
Func_c1fc: ; 0xc1fc
|
||||
ld a, [hPressedButtons]
|
||||
ld b, a
|
||||
ld a, [hl]
|
||||
bit 6, b
|
||||
jr z, .asm_c20f
|
||||
and a
|
||||
ret z
|
||||
dec a
|
||||
ld [hl], a
|
||||
lb de, $00, $03
|
||||
call PlaySoundEffect
|
||||
ret
|
||||
|
||||
.asm_c20f
|
||||
bit 7, b
|
||||
ret z
|
||||
cp c
|
||||
ret z
|
||||
inc a
|
||||
ld [hl], a
|
||||
lb de, $00, $03
|
||||
call PlaySoundEffect
|
||||
ret
|
||||
|
||||
Func_c21d: ; 0xc21d
|
||||
; World's greatest function.
|
||||
ret
|
||||
|
||||
HandleTitlescreenPikachuBlinkingAnimation: ; 0xc21e
|
||||
ld a, [wTitleScreenBlinkAnimationFrame]
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, TitleScreenBlinkAnimation
|
||||
add hl, bc
|
||||
lb bc, $38, $10
|
||||
ld a, [hl]
|
||||
cp $5a ; blink animation frame 1 OAM id
|
||||
call nz, LoadOAMData
|
||||
ld a, [wTitleScreenBlinkAnimationCounter]
|
||||
dec a
|
||||
jr nz, .done
|
||||
inc hl
|
||||
inc hl ; hl points to next frame in TitleScreenBlinkAnimation array
|
||||
ld a, [hl]
|
||||
and a ; reached the end of the animation frames?
|
||||
jr z, .saveAnimationFrame
|
||||
ld a, [wTitleScreenBlinkAnimationFrame]
|
||||
inc a
|
||||
.saveAnimationFrame
|
||||
ld [wTitleScreenBlinkAnimationFrame], a
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, (TitleScreenBlinkAnimation + 1)
|
||||
add hl, bc
|
||||
ld a, [hl] ; a contains second byte in the current animation frame data
|
||||
cp $3c ; is this a long-duration animation frame?
|
||||
jr c, .done
|
||||
ld c, a
|
||||
call GenRandom
|
||||
and $1f
|
||||
add c
|
||||
.done
|
||||
ld [wTitleScreenBlinkAnimationCounter], a
|
||||
ret
|
||||
|
||||
TitleScreenBlinkAnimation: ; 0xc25f
|
||||
; Array of animation frames. The animation is looped when it finishes.
|
||||
; first byte = OAM data id to load
|
||||
; second byte = number of frames to show this animation.
|
||||
db $5a, $c8
|
||||
db $5b, $04
|
||||
db $5c, $04
|
||||
db $5b, $04
|
||||
db $5a, $3c
|
||||
db $5b, $03
|
||||
db $5c, $03
|
||||
db $5b, $03
|
||||
db $5a, $03
|
||||
db $5b, $03
|
||||
db $5c, $03
|
||||
db $5b, $03
|
||||
db $00 ; terminator
|
||||
|
||||
HandleTitlescreenPokeballAnimation: ; 0xc278
|
||||
ld a, [wTitleScreenCursorSelection]
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, TitleScreenPokeballCoordOffsets
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld e, $0
|
||||
ld a, [wScreenState] ; TODO: I think this is the "titlescreen state" byte.
|
||||
cp $1
|
||||
jr nz, .loadOAM ; skip getting the correct animation frame
|
||||
ld a, [wTitleScreenBouncingBallAnimationFrame]
|
||||
sla a
|
||||
ld e, a
|
||||
.loadOAM
|
||||
ld d, $0
|
||||
ld hl, TitleScreenPokeballAnimation
|
||||
add hl, de
|
||||
ld a, [hl] ; a contains OAM id
|
||||
call LoadOAMData
|
||||
ld a, [wTitleScreenPokeballAnimationCounter]
|
||||
dec a
|
||||
jr nz, .done
|
||||
ld a, [wTitleScreenBouncingBallAnimationFrame]
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, (TitleScreenPokeballAnimation + 2) ; first frame of actual animation
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .saveAnimationFrame ; end of list?
|
||||
ld a, [wTitleScreenBouncingBallAnimationFrame]
|
||||
inc a
|
||||
.saveAnimationFrame
|
||||
ld [wTitleScreenBouncingBallAnimationFrame], a
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, (TitleScreenPokeballAnimation + 1) ; first duration
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
.done
|
||||
ld [wTitleScreenPokeballAnimationCounter], a
|
||||
ret
|
||||
|
||||
TitleScreenPokeballAnimation: ; 0xc2cc
|
||||
; first byte = OAM id
|
||||
; second byte = animation frame duration
|
||||
db $5D, $02
|
||||
db $5E, $06
|
||||
db $5F, $02
|
||||
db $60, $04
|
||||
db $61, $06
|
||||
db $5F, $04
|
||||
db $00 ; terminator
|
||||
|
||||
TitleScreenPokeballCoordOffsets: ; 0xc2d9
|
||||
db $67, $15
|
||||
db $73, $15
|
||||
db $7F, $15
|
||||
|
||||
Func_c2df: ; 0xc2df
|
||||
ld bc, $4446 ; pixel offsets, not data
|
||||
ld a, [wd910]
|
||||
cp $6
|
||||
jr nz, .asm_c2f0
|
||||
ld a, [wTitleScreenGameStartCursorSelection]
|
||||
add $58
|
||||
jr .asm_c2fd
|
||||
|
||||
.asm_c2f0
|
||||
ld a, [wd910]
|
||||
sla a
|
||||
ld e, a
|
||||
ld d, $0
|
||||
ld hl, Data_c32b
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
.asm_c2fd
|
||||
call LoadOAMData
|
||||
ld a, [wd911]
|
||||
dec a
|
||||
jr nz, .asm_c327
|
||||
ld a, [wd910]
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, Data_c32b + 2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
ld a, [wd910]
|
||||
jr z, .asm_c31d
|
||||
inc a
|
||||
ld [wd910], a
|
||||
.asm_c31d
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, Data_c32b + 1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
.asm_c327
|
||||
ld [wd911], a
|
||||
ret
|
||||
|
||||
Data_c32b: ; 0xc32b
|
||||
db $52, $02
|
||||
db $53, $02
|
||||
db $54, $02
|
||||
db $55, $02
|
||||
db $56, $02
|
||||
db $57, $02
|
||||
db $57, $02
|
||||
db $00, $00
|
||||
db $57, $02
|
||||
db $56, $02
|
||||
db $55, $02
|
||||
db $54, $02
|
||||
db $53, $02
|
||||
db $52, $02
|
||||
db $52, $02
|
||||
db $00
|
||||
INCLUDE "engine/titlescreen.asm"
|
||||
|
||||
HandleOptionsScreen: ; 0xc34a
|
||||
ld a, [wScreenState]
|
||||
|
||||
Reference in New Issue
Block a user