diff options
author | Marcus Huderle <huderlem@gmail.com> | 2017-06-19 14:25:38 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2017-06-19 14:25:38 -0700 |
commit | f2f69fdfe13dd92ec986b238e976165ea4c9c8bb (patch) | |
tree | 3cd0fa3a58fc4c33cefb2d038cb5ccfad70bd7d9 | |
parent | dab06603a1c4e647eac9c75a62782e4b9a4dc170 (diff) |
Move titlescreen routines into their own file
-rwxr-xr-x | engine/titlescreen.asm | 468 | ||||
-rwxr-xr-x | main.asm | 467 |
2 files changed, 469 insertions, 466 deletions
diff --git a/engine/titlescreen.asm b/engine/titlescreen.asm new file mode 100755 index 0000000..63c8ce8 --- /dev/null +++ b/engine/titlescreen.asm @@ -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] |