diff options
Diffstat (limited to 'main.asm')
-rwxr-xr-x | main.asm | 3065 |
1 files changed, 3 insertions, 3062 deletions
@@ -1903,3068 +1903,9 @@ PokedexCharactersGfx: ; 0xa000 SECTION "bank3", ROMX, BANK[$3] INCLUDE "engine/titlescreen.asm" - -HandleOptionsScreen: ; 0xc34a - ld a, [wScreenState] - rst JumpTable ; calls JumpToFuncInTable -OptionsScreenFunctions: ; 0xc34e - dw Func_c35a - dw Func_c400 - dw Func_c483 - dw Func_c493 - dw Func_c506 - dw Func_c691 - -Func_c35a: ; 0xc35a - ld a, $47 - ld [hLCDC], a - ld a, $e4 - ld [wBGP], a - ld [wOBP0], a - ld a, $d2 - ld [wOBP1], a - xor a - ld [hSCX], a - ld [hSCY], a - ld hl, OptionsScreenVideoDataPointers - ld a, [hGameBoyColorFlag] - call LoadVideoData - call ClearOAMBuffer - ld a, $2 - ld [wd921], a - ld [wd91d], a - ld a, $9 - ld [wd91f], a - call Func_c43a - call Func_c948 - call Func_b66 - ld a, $12 - call SetSongBank - ld de, $0002 - call PlaySong - call Func_588 - ld a, [wSoundTestCurrentBackgroundMusic] - hlCoord 7, 11, vBGMap - call RedrawSoundTestID - ld a, [wSoundTextCurrentSoundEffect] - hlCoord 7, 13, vBGMap - call RedrawSoundTestID - call Func_bbe - ld hl, wScreenState - inc [hl] - ret - -OptionsScreenVideoDataPointers: ; 0xc3b9 - dw OptionsScreenVideoData_GameBoy - dw OptionsScreenVideoData_GameBoyColor - -OptionsScreenVideoData_GameBoy: ; 0xc3bd - VIDEO_DATA_TILES OptionMenuAndKeyConfigGfx, vTilesOB, $1400 - VIDEO_DATA_TILEMAP OptionMenuTilemap, vBGMap, $240 - VIDEO_DATA_TILEMAP OptionMenuTilemap2, vBGWin, $240 - db $FF, $FF ; terminators - -OptionsScreenVideoData_GameBoyColor: ; 0xc3d4 - VIDEO_DATA_TILES OptionMenuAndKeyConfigGfx, vTilesOB, $1400 - VIDEO_DATA_TILEMAP OptionMenuTilemap, vBGMap, $240 - VIDEO_DATA_TILEMAP_BANK2 OptionMenuTilemap3, vBGMap, $240 - VIDEO_DATA_TILEMAP OptionMenuTilemap2, vBGWin, $240 - VIDEO_DATA_TILEMAP_BANK2 OptionMenuTilemap4, vBGWin, $240 - VIDEO_DATA_PALETTES OptionMenuPalettes, $80 - db $FF, $FF ; terminators - -Func_c400: ; 0xc400 - call Func_c41a - call Func_c43a - call Func_c447 - ld a, [hNewlyPressedButtons] - bit 1, a - ret z - lb de, $00, $01 - call PlaySoundEffect - ld a, $2 - ld [wScreenState], a - ret - -Func_c41a: ; 0xc41a - ld a, [hPressedButtons] - ld b, a - ld a, [wd916] - bit 6, b - jr z, .asm_c429 - and a - ret z - dec a - jr .asm_c430 - -.asm_c429 - bit 7, b - ret z - cp $2 - ret z - inc a -.asm_c430 - ld [wd916], a - lb de, $00, $03 - call PlaySoundEffect - ret - -Func_c43a: ; 0xc43a - call Func_c7ac - call Func_c80b - call Func_c88a - call Func_c92e - ret - -Func_c447: ; 0xc447 - ld a, [hNewlyPressedButtons] - bit BIT_A_BUTTON, a - ret z - lb de, $00, $01 - call PlaySoundEffect - ld a, [wd916] - and a - jr nz, .asm_c465 - ld a, [hSGBFlag] - and a - ret nz - call Func_c4f4 - ld a, $3 - ld [wScreenState], a - ret - -.asm_c465 - cp $1 - jr nz, .asm_c477 - call ClearOAMBuffer - ld hl, hLCDC - set 3, [hl] - ld a, $4 - ld [wScreenState], a - ret - -.asm_c477 - ld de, $0000 - call PlaySong - ld a, $5 - ld [wScreenState], a - ret - -Func_c483: ; 0xc483 - call Func_cb5 - call Func_576 - ld a, SCREEN_TITLESCREEN - ld [wCurrentScreen], a - xor a - ld [wScreenState], a - ret - -Func_c493: ; 0xc493 - call Func_c4b4 - call Func_c4e6 - call Func_c869 - ld a, [hNewlyPressedButtons] - bit BIT_B_BUTTON, a - ret z - lb de, $00, $01 - call PlaySoundEffect - xor a - ld [wd803], a - ld [wd804], a - ld a, $1 - ld [wScreenState], a - ret - -Func_c4b4: ; 0xc4b4 - ld a, [hNewlyPressedButtons] - ld b, a - ld a, [wd917] - bit BIT_D_LEFT, b - jr z, .asm_c4ce - and a - ret z - dec a - ld [wd917], a - call Func_c4f4 - lb de, $00, $03 - call PlaySoundEffect - ret - -.asm_c4ce - bit BIT_D_RIGHT, b - ret z - cp $1 - ret z - inc a - ld [wd917], a - xor a - ld [wd803], a - ld [wd804], a - lb de, $00, $03 - call PlaySoundEffect - ret - -Func_c4e6: ; 0xc4e6 - call Func_c7ac - call Func_c80b - call Func_c88a - xor a - call Func_c8f1 - ret - -Func_c4f4: ; 0xc4f4 - xor a - ld [wd91c], a - ld [wd91e], a - ld a, $2 - ld [wd91d], a - ld a, $9 - ld [wd91f], a - ret - -Func_c506: ; 0xc506 - call Func_c534 - call Func_c554 - call Func_c55a - ld a, [hNewlyPressedButtons] - bit BIT_B_BUTTON, a - ret z - lb de, $00, $01 - call PlaySoundEffect - call ClearOAMBuffer - ld hl, hLCDC - res 3, [hl] - ld hl, wKeyConfigBallStart - ld de, sKeyConfigs - ld bc, $000e - call SaveData - ld a, $1 - ld [wScreenState], a - ret - -Func_c534: ; 0xc534 - ld a, [hNewlyPressedButtons] - ld b, a - ld a, [wd918] - bit BIT_D_UP, b - jr z, .asm_c543 - and a - ret z - dec a - jr .asm_c54a - -.asm_c543 - bit BIT_D_DOWN, b - ret z - cp $7 - ret z - inc a -.asm_c54a - ld [wd918], a - lb de, $00, $03 - call PlaySoundEffect - ret - -Func_c554: ; 0xc554 - ld a, $1 - call Func_c8f1 - ret - -Func_c55a: ; 0xc55a - ld a, [wd918] - and a - jr nz, .asm_c572 - ld a, [hNewlyPressedButtons] - bit BIT_A_BUTTON, a - ret z - lb de, $00, $01 - call PlaySoundEffect - call SaveDefaultKeyConfigs - call Func_c948 - ret - -.asm_c572 - ld a, [hNewlyPressedButtons] - bit BIT_A_BUTTON, a - ret z - lb de, $00, $01 - call PlaySoundEffect - ld bc, $001e - call AdvanceFrames - ld a, [wd918] - dec a - sla a - ld c, a - ld b, $0 - ld hl, PointerTable_c65f - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [wd918] - dec a - sla a - call Func_c644 - ld bc, $00ff -.asm_c59f - push bc - push hl - ld a, [wd918] - dec a - sla a - call Func_c621 - call Func_c554 - call CleanOAMBuffer - rst AdvanceFrame - pop hl - pop bc - ld a, [hJoypadState] - and a - jr z, .asm_c5c2 - ld c, $0 - call Func_c9be - call Func_c95f - jr .asm_c59f - -.asm_c5c2 - or c - jr nz, .asm_c59f - ld a, [wd918] - dec a - sla a - call Func_c639 - push hl - ld bc, $001e - call AdvanceFrames - pop hl - ld bc, $0020 - add hl, bc - ld a, [wd918] - dec a - sla a - inc a - call Func_c644 - ld bc, $00ff - ld d, $5a -.asm_c5e9 - push bc - push de - push hl - ld a, [wd918] - dec a - sla a - inc a - call Func_c621 - call Func_c554 - call CleanOAMBuffer - rst AdvanceFrame - pop hl - pop de - pop bc - dec d - ret z - ld a, [hJoypadState] - and a - jr z, .asm_c613 - ld d, $ff - ld c, $0 - call Func_c9be - call Func_c95f - jr .asm_c5e9 - -.asm_c613 - or c - jr nz, .asm_c5e9 - ld a, [wd918] - dec a - sla a - inc a - call Func_c639 - ret - -Func_c621: ; 0xc621 - sla a - ld c, a - ld b, $0 - ld hl, OAMPixelOffsetData_c66d - add hl, bc - ld a, [hli] - ld c, a - ld a, [hl] - ld b, a - ld a, [hNumFramesDropped] - bit 2, a - ret z - ld a, $84 - call LoadOAMData - ret - -Func_c639: ; 0xc639 - push hl - ld e, a - ld d, $0 - ld hl, wKeyConfigBallStart - add hl, de - ld [hl], b - pop hl - ret - -Func_c644: ; 0xc644 - push hl - ld c, a - ld b, $0 - ld hl, wKeyConfigBallStart - add hl, bc - ld [hl], $0 - pop hl - push hl - ld d, h - ld e, l - ld hl, Data_c689 - ld a, Bank(Data_c689) - ld bc, $0008 - call LoadVRAMData - pop hl - ret - -PointerTable_c65f: ; 0xc65f - dw $9C6D - dw $9CAD - dw $9CED - dw $9D2D - dw $9D6D - dw $9DAD - dw $9DED - -OAMPixelOffsetData_c66d: ; 0xc66d - dw $6018 - dw $6020 - dw $6028 - dw $6030 - dw $6038 - dw $6040 - dw $6048 - dw $6050 - dw $6058 - dw $6060 - dw $6068 - dw $6070 - dw $6078 - dw $6080 - -Data_c689: ; 0xc689 - db $81, $81, $81, $81, $81, $81, $81, $81 - -Func_c691: ; 0xc91 - call Func_c6bf - call Func_c6d9 - call Func_c6e8 - ld a, [hNewlyPressedButtons] - bit BIT_B_BUTTON, a - ret z - ld de, $0000 - call PlaySong - rst AdvanceFrame - rst AdvanceFrame - rst AdvanceFrame - ld a, $12 - call SetSongBank - ld de, $0002 - call PlaySong - lb de, $00, $01 - call PlaySoundEffect - ld a, $1 - ld [wScreenState], a - ret - -Func_c6bf: ; 0xc6bf - ld a, [hNewlyPressedButtons] - ld b, a - ld a, [wd919] - bit BIT_D_UP, b - jr z, .asm_c6ce - and a - ret z - dec a - jr .asm_c6d5 - -.asm_c6ce - bit BIT_D_DOWN, b - ret z - cp $1 - ret z - inc a -.asm_c6d5 - ld [wd919], a - ret - -Func_c6d9: ; 0xc6d9 - call Func_c7ac - call Func_c80b - call Func_c88a - ld a, $2 - call Func_c8f1 - ret - -Func_c6e8: ; 0xc6e8 - ld a, [wd919] - and a - jr nz, UpdateSoundTestSoundEffectSelection - ld a, [hNewlyPressedButtons] - bit BIT_A_BUTTON, a - jr z, UpdateSoundTestBackgroundMusicSelection - ld de, $0000 - call PlaySong - rst AdvanceFrame - rst AdvanceFrame - rst AdvanceFrame - ld a, [wSoundTestCurrentBackgroundMusic] - sla a - ld c, a - ld b, $0 - ld hl, SongBanks - add hl, bc - ld a, [hli] - ld e, a - ld d, $0 - ld a, [hl] - call SetSongBank - call PlaySong - ret - -UpdateSoundTestBackgroundMusicSelection: ; 0xc715 - ld a, [hPressedButtons] ; joypad state - ld b, a - ld a, [wSoundTestCurrentBackgroundMusic] - bit BIT_D_LEFT, b ; was the left dpad button pressed? - jr z, .checkIfRightPressed - dec a ; decrement background music id - bit 7, a ; did it wrap around to $ff? - jr z, .saveBackgroundMusicID - ld a, NUM_SONGS - 1 - jr .saveBackgroundMusicID - -.checkIfRightPressed - bit BIT_D_RIGHT, b ; was the right dpad button pressed? - ret z - inc a ; increment background music id - cp NUM_SONGS ; should it wrap around to 0? - jr nz, .saveBackgroundMusicID - xor a -.saveBackgroundMusicID - ld [wSoundTestCurrentBackgroundMusic], a - hlCoord 7, 11, vBGMap - jp RedrawSoundTestID - -UpdateSoundTestSoundEffectSelection: ; 0xc73a - ld a, [hNewlyPressedButtons] ; joypad state - bit BIT_A_BUTTON, a - jr z, .didntPressAButton - ld a, [wSoundTextCurrentSoundEffect] - ld e, a - ld d, $0 - call PlaySoundEffect - ret - -.didntPressAButton - ld a, [hPressedButtons] ; joypad state - ld b, a - ld a, [wSoundTextCurrentSoundEffect] - bit BIT_D_LEFT, b ; was the left dpad button pressed? - jr z, .checkIfRightPressed - dec a ; decrement sound effect id - bit 7, a ; did it wrap around to $ff? - jr z, .saveSoundEffectID - ld a, NUM_SOUND_EFFECTS - 1 - jr .saveSoundEffectID - -.checkIfRightPressed - bit BIT_D_RIGHT, b ; was the right dpad button pressed? - ret z - inc a ; increment background music id - cp NUM_SOUND_EFFECTS ; should it wrap around to 0? - jr nz, .saveSoundEffectID - xor a -.saveSoundEffectID - ld [wSoundTextCurrentSoundEffect], a - hlCoord 7, 13, vBGMap - ; fall through - -RedrawSoundTestID: ; 0xc76c -; Redraws the 2-digit id number for the sound test's current background music or sound effect id. -; input: a = id number -; hl = pointer to bg map location where the new 2-digit id should be drawn - push af ; save music or sound effect id number - swap a - and $f ; a contains high nybble of music id - call .drawDigit - pop af - and $f ; a contains low nybble of music id -.drawDigit - add $b7 ; hexadecimal digit tiles start at tile number $b7 - call PutTileInVRAM - inc hl - ret - -SongBanks: ; 0xc77e - db MUSIC_NOTHING_0F,BANK(Music_Nothing0F) - db MUSIC_BLUE_FIELD,BANK(Music_BlueField) - db MUSIC_CATCH_EM_RED,BANK(Music_CatchEmRed) - db MUSIC_HURRY_UP_RED,BANK(Music_HurryUpRed) - db MUSIC_POKEDEX,BANK(Music_Pokedex) - db MUSIC_GASTLY_GRAVEYARD,BANK(Music_GastlyInTheGraveyard) - db MUSIC_HAUNTER_GRAVEYARD,BANK(Music_HaunterInTheGraveyard) - db MUSIC_GENGAR_GRAVEYARD,BANK(Music_GengarInTheGraveyard) - db MUSIC_RED_FIELD,BANK(Music_RedField) - db MUSIC_CATCH_EM_BLUE,BANK(Music_CatchEmBlue) - db MUSIC_HURRY_UP_BLUE,BANK(Music_HurryUpBlue) - db MUSIC_HI_SCORE,BANK(Music_HiScore) - db MUSIC_GAME_OVER,BANK(Music_GameOver) - db MUSIC_WHACK_DIGLETT,BANK(Music_WhackTheDiglett) - db MUSIC_WHACK_DUGTRIO,BANK(Music_WhackTheDugtrio) - db MUSIC_SEEL_STAGE,BANK(Music_SeelStage) - db MUSIC_TITLE_SCREEN,BANK(Music_Title) - db MUSIC_MEWTWO_STAGE,BANK(Music_MewtwoStage) - db MUSIC_OPTIONS,BANK(Music_Options) - db MUSIC_FIELD_SELECT,BANK(Music_FieldSelect) - db MUSIC_MEOWTH_STAGE,BANK(Music_MeowthStage) - db MUSIC_END_CREDITS,BANK(Music_EndCredits) - db MUSIC_NAME_ENTRY,BANK(Music_NameEntry) - -Func_c7ac: ; 0xc7ac - ld c, $0 - ld a, [wScreenState] - cp $1 - jr z, .asm_c7cc - ld a, [wd916] - and a - jr nz, .asm_c7cc - ld a, [wd917] - and a - jr nz, .asm_c7cc - ld a, [wd91e] - cp $4 - jr nz, .asm_c7cc - ld a, [wd91c] - ld c, a -.asm_c7cc - sla c - ld b, $0 - ld hl, Data_c806 - add hl, bc - ld a, [hl] - ld bc, $5050 - call LoadOAMData - ld a, [wd91d] - dec a - jr nz, .asm_c802 - ld a, [wd91c] - sla a - ld c, a - ld b, $0 - ld hl, Data_c806 + 2 - add hl, bc - ld a, [hl] - and a - jr z, .asm_c7f5 - ld a, [wd91c] - inc a -.asm_c7f5 - ld [wd91c], a - sla a - ld c, a - ld b, $0 - ld hl, Data_c806 + 1 - add hl, bc - ld a, [hl] -.asm_c802 - ld [wd91d], a - ret - -Data_c806: ; 0xc806 - db $7B, $02, $7C, $02, $00 - -Func_c80b: ; 0xc80b - ld c, $0 - ld a, [wScreenState] - cp $1 - jr z, .asm_c824 - ld a, [wd916] - and a - jr nz, .asm_c824 - ld a, [wd917] - and a - jr nz, .asm_c824 - ld a, [wd91e] - ld c, a -.asm_c824 - sla c - ld b, $0 - ld hl, Data_c85e - add hl, bc - ld bc, $7870 - ld a, [hl] - call LoadOAMData - ld a, [wd91f] - dec a - jr nz, .asm_c85a - ld a, [wd91e] - sla a - ld c, a - ld b, $0 - ld hl, Data_c85e + 2 - add hl, bc - ld a, [hl] - and a - ld a, [wd91e] - jr z, .asm_c850 - inc a - ld [wd91e], a -.asm_c850 - sla a - ld c, a - ld b, $0 - ld hl, Data_c85e + 1 - add hl, bc - ld a, [hl] -.asm_c85a - ld [wd91f], a - ret - -Data_c85e: ; 0xc85e - db $77, $09, $78, $09, $79, $09, $7A, $0D, $7A, $01, $00 - -Func_c869: ; 0xc869 - ld a, [wd916] - and a - ret nz - ld a, [wd917] - and a - ret nz - ld a, [wd91e] - cp $3 - ret nz - ld a, [wd91f] - cp $1 - ret nz - ld a, $55 - ld [wd803], a - ld a, $40 - ld [wd804], a - ret - -Func_c88a: ; 0xc88a - ld a, [wd916] - sla a - ld c, a - ld b, $0 - ld hl, Data_c8eb - add hl, bc - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld e, $0 - ld a, [wScreenState] - cp $1 - jr nz, .asm_c8a9 - ld a, [wd920] - sla a - ld e, a -.asm_c8a9 - ld d, $0 - ld hl, Data_c8de - add hl, de - ld a, [hl] - call LoadOAMData - ld a, [wd921] - dec a - jr nz, .asm_c8da - ld a, [wd920] - sla a - ld c, a - ld b, $0 - ld hl, Data_c8de + 2 - add hl, bc - ld a, [hl] - and a - jr z, .asm_c8cd - ld a, [wd920] - inc a -.asm_c8cd - ld [wd920], a - sla a - ld c, a - ld b, $0 - ld hl, Data_c8de + 1 - add hl, bc - ld a, [hl] -.asm_c8da - ld [wd921], a - ret - -Data_c8de: ; 0xc8de - db $7D, $02, $7E, $06, $7F, $02, $80, $04, $81, $06, $7F, $04, $00 - -Data_c8eb: ; 0xc8eb - db $18, $08, $30, $08, $48, $08 - -Func_c8f1: ; 0xc8f1 - ld c, a - ld b, $0 - ld hl, wd917 - add hl, bc - ld e, [hl] - sla c - ld hl, PointerTable_c910 - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld c, e - sla c - add hl, bc - ld a, [hli] - ld c, a - ld a, [hl] - ld b, a - ld a, $82 - call LoadOAMData - ret - -PointerTable_c910: ; 0xc910 - dw OAMPixelOffsetData_c916 - dw OAMPixelOffsetData_c91a - dw OAMPixelOffsetData_c92a - -OAMPixelOffsetData_c916: ; 0xc916 - dw $5018 - dw $7018 - -OAMPixelOffsetData_c91a: ; 0xc91a - dw $0808 - dw $0818 - dw $0828 - dw $0838 - dw $0848 - dw $0858 - dw $0868 - dw $0878 - -OAMPixelOffsetData_c92a: ; 0xc92a - dw $1058 - dw $1068 - -Func_c92e: ; 0xc92e - ld a, [wd917] - sla a - ld c, a - ld b, $0 - ld hl, OAMPixelOffsetData_c944 - add hl, bc - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, $85 - call LoadOAMData - ret - -OAMPixelOffsetData_c944: ; 0xc944 - dw $5018 - dw $7018 - -Func_c948: ; 0xc948 - hlCoord 13, 3, vBGWin - ld de, wKeyConfigBallStart - ld b, $e -.asm_c950 - push bc - ld a, [de] - call Func_c95f - inc de - ld bc, $0020 - add hl, bc - pop bc - dec b - jr nz, .asm_c950 - ret - -Func_c95f: ; 0xc95f - push bc - push de - push hl - push hl - push af - ld hl, wd922 - ld a, $81 - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - pop af - ld hl, wd922 - ld de, Data_c9ae - ld b, $8 -.asm_c979 - srl a - push af - jr nc, .asm_c994 - ld a, [de] - inc de - call Func_c9aa - ld a, [de] - inc de - call Func_c9aa - pop af - push af - and a - jr z, .asm_c996 - ld a, $1a - call Func_c9aa - jr .asm_c996 - -.asm_c994 - inc de - inc de -.asm_c996 - pop af - dec b - jr nz, .asm_c979 - pop de - ld hl, wd922 - ld a, $0 - ld bc, $0008 - call LoadOrCopyVRAMData - pop hl - pop de - pop bc - ret - -Func_c9aa: ; 0xc9aa - and a - ret z - ld [hli], a - ret - -Data_c9ae: ; 0xc9ae - db $14, $00, $15, $00, $18, $19, $16, $17, $13, $00, $12, $00, $10, $00, $11, $00 - -Func_c9be: ; 0xc9be - push af - push bc - push hl - ld c, a - xor b - and c - ld hl, wd936 - call Func_c9ff - ld a, b - ld hl, wd93f - call Func_c9ff - ld a, [wd947] - cp $3 - jr nc, .asm_c9f3 - ld hl, wd93e - add [hl] - sub $4 - ld hl, wd936 - call nc, Func_ca15 - ld de, wd936 - ld hl, wd93f - ld b, $8 -.asm_c9ec - ld a, [de] - or [hl] - ld [hli], a - inc de - dec b - jr nz, .asm_c9ec -.asm_c9f3 - ld hl, wd93f - call Func_ca29 - pop hl - pop bc - ld b, a - pop af - ld a, b - ret - -Func_c9ff: ; 0xc9ff - push bc - ld bc, $0800 -.asm_ca03 - sla a - jr nc, .asm_ca0c - ld [hl], $ff - inc c - jr .asm_ca0e - -.asm_ca0c - ld [hl], $0 -.asm_ca0e - inc hl - dec b - jr nz, .asm_ca03 - ld [hl], c - pop bc - ret - -Func_ca15: ; 0xca15 - push bc - inc a - ld c, a - ld b, $8 -.asm_ca1a - ld a, [hl] - and a - jr z, .asm_ca23 - ld [hl], $0 - dec c - jr z, .asm_ca27 -.asm_ca23 - inc hl - dec b - jr nz, .asm_ca1a -.asm_ca27 - pop bc - ret - -Func_ca29: ; 0ca29 - push bc - ld bc, $0800 -.asm_ca2d - ld a, [hli] - and a - jr z, .asm_ca32 - scf -.asm_ca32 - rl c - dec b - jr nz, .asm_ca2d - ld a, c - pop bc - ret - -SaveDefaultKeyConfigs: ; 0ca3a - ld hl, DefaultKeyConfigs - ld de, wKeyConfigs - ld b, $e -.loop - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .loop - ld hl, wKeyConfigs - ld de, sKeyConfigs - ld bc, $000e - call SaveData - ret - -DefaultKeyConfigs: ; 0xca55 - db A_BUTTON, $00 ; wKeyConfigBallStart - db D_LEFT, $00 ; wKeyConfigLeftFlipper - db A_BUTTON, $00 ; wKeyConfigRightFlipper - db D_DOWN, $00 ; wKeyConfigLeftTilt - db B_BUTTON, $00 ; wKeyConfigRightTilt - db SELECT, $00 ; wKeyConfigUpperTilt - db START, $00 ; wKeyConfigMenu - -Data_ca63: - db A_BUTTON, $00 ; wKeyConfigBallStart - db D_LEFT, $00 ; wKeyConfigLeftFlipper - db A_BUTTON, $00 ; wKeyConfigRightFlipper - db D_DOWN, $00 ; wKeyConfigLeftTilt - db B_BUTTON, $00 ; wKeyConfigRightTilt - db START, $04 ; wKeyConfigUpperTilt - db D_UP | D_RIGHT, $00 ; wKeyConfigMenu - -Data_ca71: - db A_BUTTON, $00 ; wKeyConfigBallStart - db D_LEFT, $00 ; wKeyConfigLeftFlipper - db A_BUTTON, $00 ; wKeyConfigRightFlipper - db D_DOWN, $00 ; wKeyConfigLeftTilt - db B_BUTTON, $00 ; wKeyConfigRightTilt - db START, $00 ; wKeyConfigUpperTilt - db D_UP | START | SELECT, $00 ; wKeyConfigMenu - -HandleHighScoresScreen: ; 0xca7f - ld a, [wScreenState] - rst JumpTable ; calls JumpToFuncInTable -HighScoresScreenFunctions: ; 0xca83 - dw Func_ca8f - dw Func_cb14 - dw Func_ccac - dw Func_ccb6 - dw Func_cd6c - dw ExitHighScoresScreen - -Func_ca8f: ; 0xca8f - ld hl, wd473 - call GenRandom - ld [hli], a - call GenRandom - ld [hli], a - call GenRandom - ld [hli], a - call GenRandom - ld [hli], a - ld hl, wRedHighScore5Points + $5 - ld a, [wHighScoresStage] - and a - jr z, .asm_caae - ld hl, wBlueHighScore5Points + $5 -.asm_caae - ld b, $5 -.asm_cab0 - ld de, wScore + $5 - ld c, $6 -.asm_cab5 - ld a, [de] - cp [hl] - jr c, .asm_cad0 - jr nz, .asm_cac2 - dec de - dec hl - dec c - jr nz, .asm_cab5 - jr .asm_cad0 - -.asm_cac2 - dec hl - dec c - jr nz, .asm_cac2 - ld a, l - sub $7 - ld l, a - jr nc, .asm_cacd - dec h -.asm_cacd - dec b - jr nz, .asm_cab0 -.asm_cad0 - ld a, b - ld [wda81], a - xor a - ld [wda80], a - inc b - ld hl, wRedHighScore4Unknown0x09 + 3 - ld de, wRedHighScore5Unknown0x09 + 3 - ld a, [wHighScoresStage] - and a - jr z, .asm_caeb - ld hl, wBlueHighScore4Unknown0x09 + 3 - ld de, wBlueHighScore5Unknown0x09 + 3 -.asm_caeb - ld a, $5 -.asm_caed - cp b - jr c, .asm_cb02 - push af - jr nz, .asm_caf6 - ld hl, wd473 + $3 -.asm_caf6 - ld c, $d -.asm_caf8 - ld a, [hld] - ld [de], a - dec de - dec c - jr nz, .asm_caf8 - pop af - dec a - jr nz, .asm_caed -.asm_cb02 - ld a, [wda81] - cp $5 - ld a, $1 - jr nz, .asm_cb0c - xor a -.asm_cb0c - ld [wda7f], a - ld hl, wScreenState - inc [hl] - ret - -Func_cb14: ; 0xcb14 - ld a, $43 - ld [hLCDC], a - ld a, $e0 - ld [wBGP], a - ld a, $e1 - ld [wOBP0], a - ld [wOBP1], a - xor a - ld [hSCX], a - ld [hNextFrameHBlankSCX], a - ld [hSCY], a - ld [hNextFrameHBlankSCY], a - ld a, $e - ld [hLYC], a - ld [hLastLYC], a - ld a, $82 - ld [hNextLYCSub], a - ld [hLYCSub], a - ld hl, hSTAT - set 6, [hl] - ld hl, rIE - set 1, [hl] - ld a, $3 - ld [hHBlankRoutine], a - ld a, [hGameBoyColorFlag] - and a - jr z, .asm_cb51 - ld a, [wHighScoresStage] - inc a -.asm_cb51 - ld hl, HighScoresVideoDataPointers - call LoadVideoData - call ClearOAMBuffer - ld a, $20 - ld [wda82], a - call Func_d211 - hlCoord 0, 14, vBGMap - ld de, wRedHighScore5Unknown0x09 + $3 - call Func_d2cb - hlCoord 0, 14, vBGWin - ld de, wBlueHighScore5Unknown0x09 + $3 - call Func_d2cb - ld a, [wHighScoresStage] - and a - jr z, .asm_cb7f - ld hl, hLCDC - set 3, [hl] -.asm_cb7f - call Func_b66 - ld a, [wda7f] - and a - jr z, .asm_cbbd - ld a, [wda81] - and a - jr nz, .asm_cb9b - ld a, $13 - call SetSongBank - ld de, $0001 - call PlaySong - jr .asm_cba6 - -.asm_cb9b - ld a, $13 - call SetSongBank - ld de, $0002 - call PlaySong -.asm_cba6 - call Func_588 - ld bc, $0009 - call Func_d68a - ld bc, $03c9 - call Func_d68a - call Func_bbe - ld hl, wScreenState - inc [hl] - ret - -.asm_cbbd - ld a, $10 - call SetSongBank - ld de, $0004 - call PlaySong - call Func_588 - ld bc, $0009 - call Func_d68a - ld bc, $03c9 - call Func_d68a - call Func_bbe - ld hl, wScreenState - inc [hl] - ld hl, wScreenState - inc [hl] - ret - -HighScoresVideoDataPointers: ; 0xcbe3 - dw HighScoresVideoData_GameBoy - dw HighScoresRedStageVideoData_GameBoyColor - dw HighScoresBlueStageVideoData_GameBoyColor - -HighScoresVideoData_GameBoy: ; 0xcbe9 - VIDEO_DATA_TILES HighScoresBaseGameBoyGfx, vTilesOB, $1800 - VIDEO_DATA_TILEMAP HighScoresTilemap, vBGMap, $400 - VIDEO_DATA_TILEMAP HighScoresTilemap2, vBGWin, $400 - dw HighScoresTilemap + $3c0 - db Bank(HighScoresTilemap) - dw vBGMap - dw ($40 << 2) - dw HighScoresTilemap + $280 - db Bank(HighScoresTilemap) - dw vBGMap + $200 - dw ($40 << 2) - dw HighScoresTilemap2 + $3c0 - db Bank(HighScoresTilemap2) - dw vBGWin - dw ($40 << 2) - dw HighScoresTilemap2 + $280 - db Bank(HighScoresTilemap2) - dw vBGWin + $200 - dw ($40 << 2) - db $FF, $FF ; terminators - -HighScoresRedStageVideoData_GameBoyColor: ; 0xcc1c - VIDEO_DATA_TILES HighScoresBaseGameBoyGfx, vTilesOB, $1800 - VIDEO_DATA_TILEMAP HighScoresTilemap, vBGMap, $400 - VIDEO_DATA_TILEMAP HighScoresTilemap2, vBGWin, $400 - VIDEO_DATA_TILEMAP_BANK2 HighScoresTilemap4, vBGMap, $400 - VIDEO_DATA_TILEMAP_BANK2 HighScoresTilemap5, vBGWin, $400 - dw HighScoresTilemap + $3c0 - db Bank(HighScoresTilemap) - dw vBGMap - dw ($40 << 2) - dw HighScoresTilemap + $280 - db Bank(HighScoresTilemap) - dw vBGMap + $200 - dw ($40 << 2) - dw HighScoresTilemap2 + $3c0 - db Bank(HighScoresTilemap2) - dw vBGWin - dw ($40 << 2) - dw HighScoresTilemap2 + $280 - db Bank(HighScoresTilemap2) - dw vBGWin + $200 - dw ($40 << 2) - VIDEO_DATA_PALETTES HighScoresRedStagePalettes, $80 - db $FF, $FF - -HighScoresBlueStageVideoData_GameBoyColor: ; 0xcc64 - VIDEO_DATA_TILES HighScoresBaseGameBoyGfx, vTilesOB, $1800 - VIDEO_DATA_TILEMAP HighScoresTilemap, vBGMap, $400 - VIDEO_DATA_TILEMAP HighScoresTilemap2, vBGWin, $400 - VIDEO_DATA_TILEMAP_BANK2 HighScoresTilemap4, vBGMap, $400 - VIDEO_DATA_TILEMAP_BANK2 HighScoresTilemap5, vBGWin, $400 - dw HighScoresTilemap + $3c0 - db Bank(HighScoresTilemap) - dw vBGMap - dw ($40 << 2) - dw HighScoresTilemap + $280 - db Bank(HighScoresTilemap) - dw vBGMap + $200 - dw ($40 << 2) - dw HighScoresTilemap2 + $3c0 - db Bank(HighScoresTilemap2) - dw vBGWin - dw ($40 << 2) - dw HighScoresTilemap2 + $280 - db Bank(HighScoresTilemap2) - dw vBGWin + $200 - dw ($40 << 2) - VIDEO_DATA_PALETTES HighScoresBlueStagePalettes, $80 - db $FF, $FF ; terminators - -Func_ccac: ; 0xccac - call Func_d18b - call Func_d1d2 - call Func_d211 - ret - -Func_ccb6: ; 0xccb6 - call Func_d4cf - call AnimateHighScoresArrow - ld a, [hNewlyPressedButtons] - bit BIT_A_BUTTON, a - jr z, .asm_ccd1 - lb de, $00, $01 - call PlaySoundEffect - ld hl, wScreenState - inc [hl] - ld hl, wScreenState - inc [hl] - ret - -.asm_ccd1 - bit 1, a - jr z, .asm_cce4 - lb de, $00, $01 - call PlaySoundEffect - ld hl, wScreenState - inc [hl] - ld hl, wScreenState - inc [hl] - ret - -.asm_cce4 - bit 3, a - jr z, .asm_ccfb - call Func_1a43 - ld a, [hGameBoyColorFlag] - ld [wd8f0], a - lb de, $00, $01 - call PlaySoundEffect - ld hl, wScreenState - inc [hl] - ret - -.asm_ccfb - ld a, [hJoypadState] - cp (SELECT | D_UP) - ret nz - ld a, [hNewlyPressedButtons] - and (SELECT | D_UP) - ret z - lb de, $00, $01 - call PlaySoundEffect - call ClearOAMBuffer - ld bc, $473b - ld a, $94 - call LoadOAMData -.asm_cd16 - rst AdvanceFrame - ld a, [hNewlyPressedButtons] - bit BIT_B_BUTTON, a - jr z, .asm_cd24 - lb de, $00, $01 - call PlaySoundEffect - ret - -.asm_cd24 - bit 0, a - jr z, .asm_cd16 - lb de, $00, $01 - call PlaySoundEffect - call CopyInitialHighScores - ld a, BANK(HighScoresTilemap) - ld hl, HighScoresTilemap + $40 - deCoord 0, 2, vBGMap - ld bc, $01c0 - call LoadVRAMData - ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 + $40 - deCoord 0, 2, vBGWin - ld bc, $01c0 - call LoadVRAMData - hlCoord 0, 14, vBGMap - ld de, wRedHighScore5Unknown0x09 + $3 - call Func_d361 - hlCoord 0, 14, vBGWin - ld de, wBlueHighScore5Unknown0x09 + $3 - call Func_d361 - ld hl, wRedHighScore1Points - ld de, $a000 - ld bc, $0082 - call SaveData - ret - -Func_cd6c: ; 0xcd6c - ld a, [hNumFramesDropped] - and $1f - call z, Func_1a43 - call Func_cf7d - call Func_cfa6 - ld a, [hNewlyPressedButtons] - bit BIT_A_BUTTON, a - jr z, .asm_cdbb - lb de, $00, $01 - call PlaySoundEffect - ld a, [wda85] - and a - jr nz, .asm_cda1 - ld a, [wd86e] - and a - jr z, .asm_cdbb - call ClearOAMBuffer - ld bc, $473b - ld a, $8e - call LoadOAMData - call Func_d042 - jr .asm_cdc6 - -.asm_cda1 - ld a, [wd8f0] - and a - jr z, .asm_cdbb - ld de, $0000 - call PlaySong - rst AdvanceFrame - call Func_cdce - push af - ld de, $0004 - call PlaySong - pop af - jr nc, .asm_cdc6 -.asm_cdbb - ld a, [hNewlyPressedButtons] - bit BIT_B_BUTTON, a - ret z - lb de, $00, $01 - call PlaySoundEffect -.asm_cdc6 - xor a - ld [rRP], a - ld hl, wScreenState - dec [hl] - ret - -Func_cdce: ; 0xcdce - push af - ld a, $0 - ld [$abf6], a - pop af - call ClearOAMBuffer - call Func_1be3 - call SendHighScores - push af - ld a, $1 - ld [$abf6], a - pop af - di - ld a, [wd8ea] - cp $0 - jp nz, .asm_ceb6 - ld a, [wd8e9] - cp $1 - jr z, .asm_ce23 - push af - ld a, $2 - ld [$abf6], a - pop af - ld b, $82 - ld hl, wRedHighScore1Points - call Func_1cf8 - ld a, [wd8ea] - cp $0 - jp nz, .asm_ceb6 - push af - ld a, $3 - ld [$abf6], a - pop af - ld hl, wc4c0 - call Func_1dda - ld a, [wd8ea] - cp $0 - jp nz, .asm_ceb6 - jr .asm_ce4d - -.asm_ce23 - push af - ld a, $4 - ld [$abf6], a - pop af - ld hl, wc4c0 - call Func_1dda - ld a, [wd8ea] - cp $0 - jr nz, .asm_ceb6 - push af - ld a, $5 - ld [$abf6], a - pop af - ld b, $82 - ld hl, wRedHighScore1Points - call Func_1cf8 - ld a, [wd8ea] - cp $0 - jr nz, .asm_ceb6 -.asm_ce4d - push af - ld a, $6 - ld [$abf6], a - pop af - call Func_ceca - rst AdvanceFrame - ld hl, wc4cc - ld b, $5 -.asm_ce5d - push bc - push hl - ld d, h - ld e, l - ld hl, wRedHighScore5Unknown0x09 + $3 - call Func_cfcb - pop hl - pop bc - ld de, $000d - add hl, de - dec b - jr nz, .asm_ce5d - push af - ld a, $7 - ld [$abf6], a - pop af - ld hl, wBottomMessageText + $0d - ld b, $5 -.asm_ce7c - push bc - push hl - ld d, h - ld e, l - ld hl, wBlueHighScore5Unknown0x09 + $3 - call Func_cfcb - pop hl - pop bc - ld de, $000d - add hl, de - dec b - jr nz, .asm_ce7c - push af - ld a, $8 - ld [$abf6], a - pop af - hlCoord 0, 14, vBGMap - ld de, wRedHighScore5Unknown0x09 + $3 - call Func_d361 - hlCoord 0, 14, vBGWin - ld de, wBlueHighScore5Unknown0x09 + $3 - call Func_d361 - ld hl, wRedHighScore1Points - ld de, $a000 - ld bc, $0082 - call SaveData - and a - ret - -.asm_ceb6 - push af - ld a, $9 - ld [$abf6], a - pop af - call Func_ceca - rst AdvanceFrame - push af - ld a, $a - ld [$abf6], a - pop af - scf - ret - -Func_ceca: ; 0xceca - ld a, [rLY] - and a - jr nz, Func_ceca - ei - ret - -SendHighScores: ; 0xced1 -; Sends high scores, and plays the animation for sending the high scores. - ld hl, SendHighScoresAnimationData - ld de, wSendHighScoresAnimationFrameCounter - call CopyHLToDE - ld bc, $4800 - ld a, [wSendHighScoresAnimationFrame] - call LoadOAMData - ld bc, $473b - ld a, $8f - call LoadOAMData - call CleanOAMBuffer - rst AdvanceFrame - ld a, $1 - ld [wd8e9], a - ld b, $b4 ; maximum attempts to send high scores -.attemptToSendHighScoresLoop - push bc - xor a - ld [hNumFramesSinceLastVBlank], a -.asm_cefa - ld b, $2 - ld c, $56 - ld a, [$ff00+c] - and b - jr z, .asm_cf09 - ld a, [hNumFramesSinceLastVBlank] - and a - jr z, .asm_cefa - jr .asm_cf0e - -.asm_cf09 - call Func_1c50 - jr .continueAttempts - -.asm_cf0e - ld hl, SendHighScoresAnimationData - ld de, wSendHighScoresAnimationFrameCounter - call UpdateAnimation - jr nc, .continueAttempts - ld bc, $4800 - ld a, [wSendHighScoresAnimationFrame] - call LoadOAMData - ld bc, $473b - ld a, $8f - call LoadOAMData - call CleanOAMBuffer - call Func_1ca1 - ld a, [wSendHighScoresAnimationFrameIndex] - cp $6 - jr nz, .continueAttempts - ld hl, SendHighScoresAnimationData - ld de, wSendHighScoresAnimationFrameCounter - call CopyHLToDE -.continueAttempts - pop bc - ld a, [wd8ea] - cp $0 - ret z - dec b - jr nz, .attemptToSendHighScoresLoop - ret - -SendHighScoresAnimationData: ; 0xcf4b -; Each entry is [OAM id][duration] - db $0C, $98 - db $06, $99 - db $0A, $9A - db $0C, $9B - db $0A, $9C - db $06, $9D - db $00 ; terminator - -Func_cf58: ; 0xcf58 - cp $5 - ret z - push af - lb de, $00, $02 - call PlaySoundEffect - call ClearOAMBuffer - rst AdvanceFrame - pop af - ld bc, $473b - add $8f - call LoadOAMData -.asm_cf6f - rst AdvanceFrame - ld a, [hNewlyPressedButtons] - bit BIT_A_BUTTON, a - jr z, .asm_cf6f - lb de, $00, $01 - call PlaySoundEffect - ret - -Func_cf7d: ; 0xcf7d - ld a, [wd809] - ld b, a - ld a, [wda85] - bit 6, b - jr z, .asm_cf95 - and a - ret z - dec a - ld [wda85], a - lb de, $00, $03 - call PlaySoundEffect - ret - -.asm_cf95 - bit 7, b - ret z - cp $1 - ret z - inc a - ld [wda85], a - lb de, $00, $03 - call PlaySoundEffect - ret - -Func_cfa6: ; 0xcfa6 - ld bc, $473b - ld a, $87 - call LoadOAMData - ld a, [wd8f0] - and a - jr z, .asm_cfb6 - ld a, $2 -.asm_cfb6 - ld e, a - ld a, [wd86e] - add e - xor $3 - add $8a - call LoadOAMData - ld a, [wda85] - add $88 - call LoadOAMData - ret - -Func_cfcb: ; 0xcfcb - ld a, e - ld [$ff8c], a - ld a, d - ld [$ff8d], a - push hl - ld b, $5 -.asm_cfd4 - ld a, [$ff8c] - ld e, a - ld a, [$ff8d] - ld d, a - call Func_d005 - call Func_d017 - jr c, .asm_cfe5 - dec b - jr nz, .asm_cfd4 -.asm_cfe5 - inc b - pop de - ld hl, $fff3 - add hl, de - ld a, $5 -.asm_cfed - cp b - ret c - push af - jr nz, .asm_cff8 - ld a, [$ff8c] - ld l, a - ld a, [$ff8d] - ld h, a -.asm_cff8 - ld c, $d -.asm_cffa - ld a, [hld] - ld [de], a - dec de - dec c - jr nz, .asm_cffa - pop af - dec a - jr nz, .asm_cfed - ret - -Func_d005: ; 0xd005 - ld c, $7 -.asm_d007 - ld a, [de] - cp [hl] - jr nz, .asm_d010 - dec de - dec hl - dec c - jr nz, .asm_d007 -.asm_d010 - ld a, c - ld [$ff8e], a - call Func_d035 - ret - -Func_d017: ; 0xd017 - ld c, $6 -.asm_d019 - ld a, [de] - cp [hl] - jr c, .asm_d02b - jr nz, .asm_d030 - dec de - dec hl - dec c - jr nz, .asm_d019 - ld a, [$ff8e] - and a - jr nz, .asm_d02b - ld b, $5 -.asm_d02b - call Func_d035 - scf - ret - -.asm_d030 - call Func_d035 - and a - ret - -Func_d035: ; 0xd035 - ld a, e - sub c - ld e, a - jr nc, .asm_d03b - dec d -.asm_d03b - ld a, l - sub c - ld l, a - jr nc, .asm_d041 - dec h -.asm_d041 - ret - -Func_d042: ; 0xd042 - ld a, [hJoypadState] - ld [wda86], a - ld b, a - ld a, $80 - bit BIT_D_LEFT, b - jr z, .asm_d052 - ld a, $7f - jr .asm_d058 - -.asm_d052 - bit BIT_D_RIGHT, b - jr z, .asm_d058 - ld a, $10 -.asm_d058 - ld [wd8a7], a - ld a, $e0 - ld [wd8aa], a - ld a, BANK(HighScoresTilemap) - ld hl, HighScoresTilemap + $3c0 - ld de, wc280 - ld bc, $0040 - call FarCopyData - ld a, $0 - hlCoord 0, 2, vBGMap - ld de, wc2c0 - ld bc, $01c0 - call LoadVRAMData - ld a, BANK(HighScoresTilemap) - ld hl, HighScoresTilemap + $280 - ld de, wc480 - ld bc, $0040 - call FarCopyData - call Func_d6b6 - call Func_d0e3 - ret c - ld a, [wda86] - bit 2, a - jr z, .asm_d0a2 - ld de, wRedHighScore1Unknown0x09 - call Func_d107 - call Func_d0f5 - ret c -.asm_d0a2 - ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 + $3c0 - ld de, wc280 - ld bc, $0040 - call FarCopyData - ld a, $0 - hlCoord 0, 2, vBGWin - ld de, wc2c0 - ld bc, $01c0 - call LoadVRAMData - ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 + $280 - ld de, wc480 - ld bc, $0040 - call FarCopyData - call Func_d6b6 - call Func_d0e3 - ret c - ld a, [wda86] - bit 2, a - ret z - ld de, wBlueHighScore1Unknown0x09 - call Func_d107 - call Func_d0f5 - ret - -Func_d0e3: ; 0xd0e3 - ld a, BANK(HighScoresBaseGameBoyGfx) - ld hl, HighScoresBaseGameBoyGfx + $800 - call Func_1a21 - ld a, [wd86d] - and a - ret z - call Func_cf58 - scf - ret - -Func_d0f5: ; 0xd0f5 - ld a, BANK(HighScoresHexadecimalCharsGfx) - ld hl, HighScoresHexadecimalCharsGfx - call Func_1a21 - ld a, [wd86d] - and a - ret z - call Func_cf58 - scf - ret - -Func_d107: ; 0xd107 - ld hl, wc280 - ld a, $c0 - ld b, $20 -.clear -rept 32 - ld [hli], a -endr - dec b - jr nz, .clear - ld hl, wc280 - ld b, $5 -.loop - ld c, $4 -.inner - ld a, [de] - swap a - call Func_d159 - ld a, [de] - call Func_d159 - inc de - inc hl - dec c - jr nz, .inner - ld a, l - add $4c - ld l, a - jr nc, .no_carry_1 - inc h -.no_carry_1 - ld a, e - add $9 - ld e, a - jr nc, .no_carry_2 - inc d -.no_carry_2 - dec b - jr nz, .loop - ret - -Func_d159: ; 0xd159 - and $f - sla a - sla a - xor $80 - ld [hli], a - inc a - ld [hli], a - inc a - push bc - push hl - ld bc, $001e - add hl, bc - ld [hli], a - inc a - ld [hli], a - pop hl - pop bc - ret - -ExitHighScoresScreen: ; 0xd171 - call Func_cb5 - call Func_576 - ld hl, hSTAT - res 6, [hl] - ld hl, rIE - res 1, [hl] - ld a, SCREEN_TITLESCREEN - ld [wCurrentScreen], a - xor a - ld [wScreenState], a - ret - -Func_d18b: ; 0xd18b - ld a, [hPressedButtons] - ld b, a - ld a, [wda81] - ld e, a - sla e - sla e - add e - sla e - add e - ld e, a - ld a, [wda80] - add e - ld e, a - ld d, $0 - ld hl, wRedHighScore1Name - ld a, [wHighScoresStage] - and a - jr z, .asm_d1ae - ld hl, wBlueHighScore1Name -.asm_d1ae - add hl, de - ld a, [hl] - bit 4, b - jr z, .asm_d1bd - inc a - cp $38 - jr nz, .asm_d1c7 - ld a, $a - jr .asm_d1c7 - -.asm_d1bd - bit 5, b - ret z - dec a - cp $9 - jr nz, .asm_d1c7 - ld a, $37 -.asm_d1c7 - ld [hl], a - call Func_d46f - lb de, $00, $03 - call PlaySoundEffect - ret - -Func_d1d2: ; 0xd1d2 - ld a, [hNewlyPressedButtons] - ld b, a - ld a, [wda80] - bit BIT_A_BUTTON, b - jr z, .asm_d1fc - inc a - cp $3 - jr nz, .asm_d202 - lb de, $07, $45 - call PlaySoundEffect - xor a - ld [wda7f], a - ld hl, wScreenState - inc [hl] - ld hl, wRedHighScore1Points - ld de, $a000 - ld bc, $0082 - call SaveData - ret - -.asm_d1fc - bit 1, b - ret z - and a - ret z - dec a -.asm_d202 - ld [wda80], a - ld a, $20 - ld [wda82], a - lb de, $00, $01 - call PlaySoundEffect - ret - -Func_d211: ; 0xd211 -; related to high scores name entry? - ld a, [wda7f] - and a - ret z - ld a, [hJoypadState] - and (D_RIGHT | D_LEFT) - jr z, .asm_d221 - xor a - ld [wda82], a - ret - -.asm_d221 - ld a, [wda82] - inc a - ld [wda82], a - bit 5, a - ret z - ld a, [wda81] - ld e, a - ld d, $0 - ld hl, OAMPixelYOffsets_d247 - add hl, de - ld c, [hl] - ld a, [wda80] - ld e, a - ld d, $0 - ld hl, OAMPixelXOffsets_d24c - add hl, de - ld b, [hl] - ld a, $86 - call LoadOAMData - ret - -OAMPixelYOffsets_d247: ; 0xd247 - db $10, $28, $40, $58, $70 - -OAMPixelXOffsets_d24c: ; 0xd24c - db $18, $20, $28 - -AnimateHighScoresArrow: ; 0xd24f -; Handles the animation of the arrow in the bottom -; corner of the high scores screens. - ld a, [wHighScoresArrowAnimationCounter] - inc a - cp $28 - jr c, .noOverflow - xor a -.noOverflow - ld [wHighScoresArrowAnimationCounter], a - ld a, [wHighScoresStage] - and a - ld c, $77 - ld a, $95 - ld hl, HighScoresRightArrowOAMPixelXOffsets - jr z, .asm_d26d - ld a, $96 - ld hl, HighScoresLeftArrowOAMPixelXOffsets -.asm_d26d - push af - ld a, [wHighScoresArrowAnimationCounter] - ld e, a - ld d, $0 - add hl, de - ld b, [hl] - pop af - call LoadOAMData - ret - -HighScoresRightArrowOAMPixelXOffsets: ; 0xd27b -; Controls the animation of the right-arrow in the bottom corner of the -; high scores screen. - db $87, $87, $8A, $8A, $8A, $8A, $8A, $8A - db $89, $89, $88, $88, $88, $88, $88, $88 - db $88, $88, $88, $88, $88, $88, $88, $88 - db $88, $88, $88, $88, $88, $88, $88, $88 - db $88, $88, $88, $88, $88, $88, $88, $88 - -HighScoresLeftArrowOAMPixelXOffsets: ; 0xd2a3 - db $02, $02, $FF, $FF, $FF, $FF, $FF, $FF - db $00, $00, $01, $01, $01, $01, $01, $01 - db $01, $01, $01, $01, $01, $01, $01, $01 - db $01, $01, $01, $01, $01, $01, $01, $01 - db $01, $01, $01, $01, $01, $01, $01, $01 - -Func_d2cb: ; 0xd2cb - ld b, $5 -.asm_d2cd - push bc - push hl - dec de - dec de - dec de - dec de - ld a, l - add $5 - ld l, a - ld b, $3 -.asm_d2d9 - ld a, [de] - call Func_d348 - dec de - dec hl - dec b - jr nz, .asm_d2d9 - pop hl - push hl - ld a, l - add $6 - ld l, a - ld bc, $0c01 -.asm_d2eb - ld a, [de] - swap a - and $f - call Func_d30e - inc hl - dec b - ld a, [de] - and $f - call Func_d30e - dec de - inc hl - dec b - jr nz, .asm_d2eb - xor a - call Func_d317 - pop hl - ld bc, hSCY - add hl, bc - pop bc - dec b - jr nz, .asm_d2cd - ret - -Func_d30e: ; 0xd30e - jr nz, Func_d317 - ld a, b - dec a - jr z, Func_d317 - ld a, c - and a - ret nz - ; fall through -Func_d317: ; 0xd317 - push de - push af - call Func_d336 - pop af - ld c, $0 - sla a - add e - ld [hl], a - cp $fe - jr z, .asm_d328 - inc a -.asm_d328 - push hl - push af - ld a, l - add $20 - ld l, a - jr nc, .asm_d331 - inc h -.asm_d331 - pop af - ld [hl], a - pop hl - pop de - ret - -Func_d336: ; 0xd336 - ld e, $6c - ld a, b - cp $3 - ret z - cp $6 - ret z - cp $9 - ret z - cp $c - ret z - ld e, $58 - ret - -Func_d348: ; 0xd348 - ld c, $0 - sla a - add $90 - ld [hl], a - cp $fe - jr z, .asm_d354 - inc a -.asm_d354 - push hl - push af - ld a, l - add $20 - ld l, a - jr nc, .asm_d35d - inc h -.asm_d35d - pop af - ld [hl], a - pop hl - ret - -Func_d361: ; 0xd361 - ld b, $5 -.asm_d363 - push bc - push hl - dec de - dec de - dec de - dec de - ld a, l - add $5 - ld l, a - ld b, $3 -.asm_d36f - ld a, [de] - call Func_d3e2 - dec de - dec hl - dec b - jr nz, .asm_d36f - pop hl - push hl - ld a, l - add $6 - ld l, a - ld bc, $0c01 -.asm_d381 - ld a, [de] - swap a - and $f - call Func_d3a4 - inc hl - dec b - ld a, [de] - and $f - call Func_d3a4 - dec de - inc hl - dec b - jr nz, .asm_d381 - xor a - call Func_d3ad - pop hl - ld bc, hSCY - add hl, bc - pop bc - dec b - jr nz, .asm_d363 - ret - -Func_d3a4: ; 0xd3a4 - jr nz, Func_d3ad - ld a, b - dec a - jr z, Func_d3ad - ld a, c - and a - ret nz - ; fall through -Func_d3ad: ; 0xd3ad - push de - push af - call Func_d3d0 - pop af - ld c, $0 - sla a - add e - call PutTileInVRAM - cp $fe - jr z, .asm_d3c0 - inc a -.asm_d3c0 - push hl - push af - ld a, l - add $20 - ld l, a - jr nc, .asm_d3c9 - inc h -.asm_d3c9 - pop af - call PutTileInVRAM - pop hl - pop de - ret - -Func_d3d0: ; 0xd3d0 - ld e, $6c - ld a, b - cp $3 - ret z - cp $6 - ret z - cp $9 - ret z - cp $c - ret z - ld e, $58 - ret - -Func_d3e2: ; 0xd3e2 - ld c, $0 - sla a - add $90 - call PutTileInVRAM - cp $fe - jr z, .asm_d3f0 - inc a -.asm_d3f0 - push hl - push af - ld a, l - add $20 - ld l, a - jr nc, .asm_d3f9 - inc h -.asm_d3f9 - pop af - call PutTileInVRAM - pop hl - ret - -CopyInitialHighScores: ; 0xd3ff - ld hl, InitialHighScores - ld de, wRedHighScore1Points - call CopyInitialHighScoresForStage - ld hl, InitialHighScores - ld de, wBlueHighScore1Points - -CopyInitialHighScoresForStage: ; 0xd40e -; input: hl = address of high score entries -; de = destination address for high score entries to be copied - ld b, $5 ; 5 high score entries to copy -.copyHighScoreEntry - ld c, $6 ; high score points are 6 bytes long -.copyPoints - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .copyPoints - ld c, $3 ; name is 3 bytes -.copyName - ld a, [hli] - sub $37 - ld [de], a - inc de - dec c - jr nz, .copyName - ld c, $4 -.asm_d424 ; TODO: what are these 4 bytes used for? - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_d424 - dec b - jr nz, .copyHighScoreEntry - ret - -INCLUDE "data/initial_high_scores.asm" ; 0xd42e - -Func_d46f: ; 0xd46f - ld a, [wda81] - ld d, a - sla a - add d - ld d, a - ld e, $0 - srl d - rr e - srl d - rr e - srl d - rr e - ld a, [wda80] - add e - ld e, a - hlCoord 3, 2, vBGMap - ld a, [wHighScoresStage] - and a - jr z, .asm_d496 - hlCoord 3, 2, vBGWin -.asm_d496 - add hl, de - push hl - ld a, [wda81] - ld e, a - sla e - sla e - add e - sla e - add e - ld e, a - ld a, [wda80] - add e - ld e, a - ld d, $0 - ld hl, wRedHighScore1Name - ld a, [wHighScoresStage] - and a - jr z, .asm_d4b8 - ld hl, wBlueHighScore1Name -.asm_d4b8 - add hl, de - ld a, [hl] - sla a - add $90 - pop hl - call PutTileInVRAM - ld de, $0020 - add hl, de - cp $fe - jr z, .asm_d4cb - inc a -.asm_d4cb - call PutTileInVRAM - ret - -Func_d4cf: ; 0xd4cf - ld a, [hNewlyPressedButtons] - ld b, a - ld a, [wHighScoresStage] - bit 4, b - jr z, .asm_d4e3 - and a - ret nz - lb de, $00, $03 - call PlaySoundEffect - jr .asm_d4f0 - -.asm_d4e3 - bit 5, b - ret z - and a - ret z - lb de, $00, $03 - call PlaySoundEffect - jr .asm_d537 - -.asm_d4f0 - call ClearOAMBuffer - call Func_d57b - ld a, $a5 - ld [hWX], a - xor a - ld [hWY], a - ld a, $2 - ld [hSCX], a - ld hl, hLCDC - set 5, [hl] - ld b, $27 -.asm_d508 - push bc - ld a, $27 - sub b - bit 0, b - call nz, TransitionHighScoresPalettes - ld hl, hWX - dec [hl] - dec [hl] - dec [hl] - dec [hl] - ld hl, hSCX - inc [hl] - inc [hl] - inc [hl] - inc [hl] - rst AdvanceFrame - pop bc - dec b - jr nz, .asm_d508 - xor a - ld [hSCX], a - ld hl, hLCDC - res 5, [hl] - set 3, [hl] - ld a, $1 - ld [wHighScoresStage], a - call Func_d5d0 - ret - -.asm_d537 - call ClearOAMBuffer - call Func_d57b - ld a, $7 - ld [hWX], a - xor a - ld [hWY], a - ld a, $a0 - ld [hSCX], a - ld hl, hLCDC - set 5, [hl] - res 3, [hl] - ld b, $27 -.asm_d551 - push bc - ld a, b - bit 0, b - call nz, TransitionHighScoresPalettes - ld hl, hWX - inc [hl] - inc [hl] - inc [hl] - inc [hl] - ld hl, hSCX - dec [hl] - dec [hl] - dec [hl] - dec [hl] - rst AdvanceFrame - pop bc - dec b - jr nz, .asm_d551 - xor a - ld [hSCX], a - ld hl, hLCDC - res 5, [hl] - xor a - ld [wHighScoresStage], a - call Func_d5d0 - ret - -Func_d57b: ; 0xd57b - ld a, $f0 - ld [hSCY], a - xor a - ld [hNextFrameHBlankSCX], a - ld a, $10 - ld [hNextFrameHBlankSCY], a - rst AdvanceFrame - ld a, BANK(HighScoresTilemap) - ld hl, HighScoresTilemap - deCoord 0, 0, vBGMap - ld bc, $0040 - call LoadVRAMData - ld a, BANK(HighScoresTilemap) - ld hl, HighScoresTilemap + $200 - deCoord 0, 16, vBGMap - ld bc, $0040 - call LoadVRAMData - ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 - deCoord 0, 0, vBGWin - ld bc, $0040 - call LoadVRAMData - ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 + $200 - deCoord 0, 16, vBGWin - ld bc, $0040 - call LoadVRAMData - ld b, $10 -.asm_d5c1 - push bc - ld hl, hSCY - inc [hl] - ld hl, hNextFrameHBlankSCY - dec [hl] - rst AdvanceFrame - pop bc - dec b - jr nz, .asm_d5c1 - ret - -Func_d5d0: ; 0xd5d0 - ld b, $10 -.asm_d5d2 - push bc - ld hl, hSCY - dec [hl] - ld hl, hNextFrameHBlankSCY - inc [hl] - rst AdvanceFrame - pop bc - dec b - jr nz, .asm_d5d2 - ld a, BANK(HighScoresTilemap) - ld hl, HighScoresTilemap + $3c0 - deCoord 0, 0, vBGMap - ld bc, $0040 - call LoadVRAMData - ld a, BANK(HighScoresTilemap) - ld hl, HighScoresTilemap + $280 - deCoord 0, 16, vBGMap - ld bc, $0040 - call LoadVRAMData - ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 + $3c0 - deCoord 0, 0, vBGWin - ld bc, $0040 - call LoadVRAMData - ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 + $280 - deCoord 0, 16, vBGWin - ld bc, $0040 - call LoadVRAMData - ld bc, $0009 - call Func_d68a - xor a - ld [hSCY], a - ld [hNextFrameHBlankSCX], a - ld [hNextFrameHBlankSCY], a - ret - -TransitionHighScoresPalettes: ; 0xd626 -; When switching between the Red and Blue field high scores, the palettes -; of the rows smoothly transition between red and blue. - ld c, a - ld a, [hGameBoyColorFlag] - and a - ret z - ld a, c - srl a - sub $2 - cp $10 - ret nc - ld c, a - ld b, $0 - sla c - add c - ld c, a - ld hl, HighScoresPalettesTransition - add hl, bc - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, [hl] - ld h, b - ld l, c - ld de, $0008 - ld bc, $0038 - push af - call Func_7dc - pop af - ld de, $0040 - ld bc, $0008 - call Func_7dc - ret - -HighScoresPalettesTransition: ; 0xd65a -; When switching between the Red and Blue field high scores, the palette -; of the rows fades between red and blue. This table defines the transition -; of those palettes. - dwb HighScoresTransitionPalettes1, Bank(HighScoresTransitionPalettes1) - dwb HighScoresTransitionPalettes2, Bank(HighScoresTransitionPalettes2) - dwb HighScoresTransitionPalettes3, Bank(HighScoresTransitionPalettes3) - dwb HighScoresTransitionPalettes4, Bank(HighScoresTransitionPalettes4) - dwb HighScoresTransitionPalettes5, Bank(HighScoresTransitionPalettes5) - dwb HighScoresTransitionPalettes6, Bank(HighScoresTransitionPalettes6) - dwb HighScoresTransitionPalettes7, Bank(HighScoresTransitionPalettes7) - dwb HighScoresTransitionPalettes8, Bank(HighScoresTransitionPalettes8) - dwb HighScoresTransitionPalettes9, Bank(HighScoresTransitionPalettes9) - dwb HighScoresTransitionPalettes10, Bank(HighScoresTransitionPalettes10) - dwb HighScoresTransitionPalettes11, Bank(HighScoresTransitionPalettes11) - dwb HighScoresTransitionPalettes12, Bank(HighScoresTransitionPalettes12) - dwb HighScoresTransitionPalettes13, Bank(HighScoresTransitionPalettes13) - dwb HighScoresTransitionPalettes14, Bank(HighScoresTransitionPalettes14) - dwb HighScoresTransitionPalettes15, Bank(HighScoresTransitionPalettes15) - dwb HighScoresTransitionPalettes16, Bank(HighScoresTransitionPalettes16) - -Func_d68a: ; 0xd68a - push bc - ld hl, wPokedexFlags - ld bc, (NUM_POKEMON << 8) -.asm_d691 - bit 1, [hl] - jr z, .asm_d696 - inc c -.asm_d696 - inc hl - dec b - jr nz, .asm_d691 - ld a, c - pop bc - cp NUM_POKEMON - ret nz - ld hl, vBGMap - add hl, bc - call Func_d6aa - ld hl, vBGWin - add hl, bc - ; fall through -Func_d6aa: ; 0xd6aa - ld a, $56 - call PutTileInVRAM - inc hl - ld a, $57 - call PutTileInVRAM - ret - -Func_d6b6: ; 0xd6b6 - ld hl, wPokedexFlags - ld bc, (NUM_POKEMON << 8) -.asm_d6bc - bit 1, [hl] - jr z, .asm_d6c1 - inc c -.asm_d6c1 - inc hl - dec b - jr nz, .asm_d6bc - ld a, c - cp NUM_POKEMON - ret nz - ld hl, wc289 - ld a, $56 - ld [hli], a - ld a, $57 - ld [hli], a - ret - -HandleFieldSelectScreen: ; 0xd6d3 - ld a, [wScreenState] - rst JumpTable ; calls JumpToFuncInTable -FieldSelectScreenFunctions: ; 0xd6d7 - dw LoadFieldSelectScreen - dw ChooseFieldToPlay - dw ExitFieldSelectScreen - -LoadFieldSelectScreen: ; 0xd6dd - ld a, $43 - ld [hLCDC], a - ld a, $e4 - ld [wBGP], a - ld a, $d2 - ld [wOBP0], a - ld [wOBP1], a - xor a - ld [hSCX], a - ld [hSCY], a - ld hl, FieldSelectGfxPointers - ld a, [hGameBoyColorFlag] - call LoadVideoData - call ClearOAMBuffer - ld a, $8 - ld [wFieldSelectBlinkingBorderFrame], a - call Func_b66 - ld a, $12 - call SetSongBank - ld de, $0003 - call PlaySong - call Func_588 - call Func_bbe - ld hl, wScreenState - inc [hl] - ret - -FieldSelectGfxPointers: ; 0xd71c - dw FieldSelectGfx_GameBoy - dw FieldSelectGfx_GameBoyColor - -FieldSelectGfx_GameBoy: ; 0xd720 - VIDEO_DATA_TILES FieldSelectScreenGfx, vTilesSH - $100, $d00 - VIDEO_DATA_TILEMAP FieldSelectTilemap, vBGMap, $240 - db $FF, $FF ; terminators - -FieldSelectGfx_GameBoyColor: ; 0xd730 - VIDEO_DATA_TILES FieldSelectScreenGfx, vTilesSH - $100, $d00 - VIDEO_DATA_TILEMAP FieldSelectTilemap, vBGMap, $240 - VIDEO_DATA_BGATTR FieldSelectBGAttributes, vBGMap, $240 - VIDEO_DATA_PALETTES FieldSelectScreenPalettes, $48 - db $FF, $FF ; terminators - -ChooseFieldToPlay: ; 0xd74e - call MoveFieldSelectCursor - ld hl, FieldSelectBorderAnimationData - call AnimateBlinkingFieldSelectBorder - ld a, [hNewlyPressedButtons] - and (A_BUTTON | B_BUTTON) - ret z - ld [wd8f6], a - ld a, $18 ; number of frames to blink the border after selecting the Field - ld [wFieldSelectBlinkingBorderTimer], a - ld a, $1 - ld [wFieldSelectBlinkingBorderFrame], a - lb de, $00, $01 - call PlaySoundEffect - ld hl, wScreenState - inc [hl] - ret - -ExitFieldSelectScreen: ; 0xd774 - ld a, [wd8f6] ; this holds the button that was pressed (A or B) - bit BIT_A_BUTTON, a - jr z, .didntPressA - ld hl, FieldSelectConfirmationAnimationData - call AnimateBlinkingFieldSelectBorder - ld a, [wFieldSelectBlinkingBorderTimer] - dec a - ld [wFieldSelectBlinkingBorderTimer], a - ret nz -.didntPressA - ld a, [hJoypadState] - push af - call Func_cb5 - call Func_576 - ld a, [wd8f6] - bit BIT_A_BUTTON, a - jr z, .pressedB - ld a, [wSelectedFieldIndex] - ld c, a - ld b, $0 - ld hl, StartingStages - add hl, bc - ld a, [hl] - ld [wCurrentStage], a - pop af - xor a - ld [wd7c2], a - ld hl, wPartyMons - ld de, sSaveGame - ld bc, $04c3 - call SaveData - xor a - ld [wd7c1], a - ; Start a round of Pinball! Yayy - ld a, SCREEN_PINBALL_GAME - ld [wCurrentScreen], a - xor a - ld [wScreenState], a - ret - -.pressedB - pop af - ld a, SCREEN_TITLESCREEN - ld [wCurrentScreen], a - xor a - ld [wScreenState], a - ret - -StartingStages: ; 0xd7d1 -; wSelectedFieldIndex is used to index this array - db STAGE_RED_FIELD_BOTTOM, STAGE_BLUE_FIELD_BOTTOM - -MoveFieldSelectCursor: ; 0xd7d3 -; When the player presses Right or Left, the stage is -; illuminated with a blinking border. This function keeps tracks -; of which field is currently selected. - ld a, [hPressedButtons] - ld b, a - ld a, [wSelectedFieldIndex] - bit BIT_D_LEFT, b - jr z, .didntPressLeft - and a - ret z ; if cursor is already hovering over Red stage, don't do anything - dec a ; move cursor over Red stage - ld [wSelectedFieldIndex], a - lb de, $00, $3c - call PlaySoundEffect - ret - -.didntPressLeft - bit BIT_D_RIGHT, b - ret z - cp $1 - ret z ; if cursor is already hovering over Blue stage, don't do anything - inc a ; move cursor over Red stage - ld [wSelectedFieldIndex], a - lb de, $00, $3d - call PlaySoundEffect - ret - -AnimateBlinkingFieldSelectBorder: ; 0xd7fb -; This makes the border of the currently-selected Field blink in the Field Select screen. - push hl - ld a, [wSelectedFieldIndex] - sla a - ld c, a - ld b, $0 - ld hl, FieldSelectBorderOAMPixelOffsetData - add hl, bc - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, [wd915] - sla a - ld e, a - ld d, $0 - pop hl - push hl - add hl, de - ld a, [hl] - call LoadOAMData - ld a, [wFieldSelectBlinkingBorderFrame] - dec a - jr nz, .asm_d838 - inc hl - inc hl - ld a, [hl] - and a - jr z, .asm_d82b - ld a, [wd915] - inc a -.asm_d82b - ld [wd915], a - sla a - ld c, a - ld b, $0 - pop hl - push hl - inc hl - add hl, bc - ld a, [hl] -.asm_d838 - ld [wFieldSelectBlinkingBorderFrame], a - pop hl - ret - -FieldSelectBorderAnimationData: -; [OAM id][duration] - db $9e, $08 - db $9f, $08 - db $9e, $08 - db $a0, $08 - db $00 ; terminator - -FieldSelectConfirmationAnimationData: -; [OAM id][duration] - db $9F, $03 - db $A0, $03 - db $9F, $03 - db $A0, $03 - db $00 ; terminator - -FieldSelectBorderOAMPixelOffsetData: - dw $2A42 - dw $7242 +INCLUDE "engine/options_screen.asm" +INCLUDE "engine/high_scores_screen.asm" +INCLUDE "engine/field_select_screen.asm" HandlePinballGame: ; 0xd853 ld a, [wScreenState] |