diff options
author | Marcus Huderle <huderlem@gmail.com> | 2017-06-19 14:40:53 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2017-06-19 14:40:53 -0700 |
commit | 9e3e04c007befee68d1cbef303d3dfdd1897e288 (patch) | |
tree | 12adebfde7411217308f85a71130aaf6ed1545cb /engine/options_screen.asm | |
parent | f2f69fdfe13dd92ec986b238e976165ea4c9c8bb (diff) |
Move field select, high scroes, and options screens into separate files
Diffstat (limited to 'engine/options_screen.asm')
-rwxr-xr-x | engine/options_screen.asm | 1087 |
1 files changed, 1087 insertions, 0 deletions
diff --git a/engine/options_screen.asm b/engine/options_screen.asm new file mode 100755 index 0000000..427e6d2 --- /dev/null +++ b/engine/options_screen.asm @@ -0,0 +1,1087 @@ +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
+
+UnusedKeyConfig1: ; 0xca63
+ 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
+
+UnusedKeyConfig2: ; 0xca71
+ 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
|