Files
pokepinball/main.asm
T
2017-04-30 10:03:26 -07:00

35355 lines
534 KiB
NASM
Executable File

INCLUDE "charmap.asm"
INCLUDE "macros.asm"
INCLUDE "constants.asm"
INCLUDE "home.asm"
SECTION "bank1", ROMX, BANK[$1]
INCLUDE "data/oam_frames.asm"
SECTION "bank2", ROMX, BANK[$2]
Func_8000: ; 0x8000
ld a, [wScreenState]
rst JumpTable ; calls JumpToFuncInTable
CallTable_8004: ; 0x8004
dw Func_800a
dw Func_8104
dw Func_814e
Func_800a: ; 0x800a
xor a
ld [hFFC4], a
ld a, [hJoypadState]
cp D_UP
jr nz, .asm_8018
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_8021
.asm_8018
ld hl, wCurrentScreen
inc [hl]
xor a
ld [wScreenState], a
ret
.asm_8021
ld a, $45
ld [hLCDC], a
ld a, $e4
ld [wBGP], a
ld [wOBP0], a
ld [wOBP1], a
xor a
ld [hSCX], a
ld [hSCY], a
call Func_8049
call ClearOAMBuffer
call Func_b66
call Func_588
call Func_bbe
ld hl, wScreenState
inc [hl]
ret
Func_8049: ; 0x8049
; This function is unused?
ld a, $1
ld [rVBK], a
ld c, $ff
call FillTilesVRAM
call FillBackgroundsVRAM
xor a
ld [rVBK], a
ld c, $0
call FillTilesVRAM
call FillBackgroundsVRAM
; This code makes no sense.
; It first fills 33 bytes at $ff68, then refills at rOBPI
ld a, $80
ld de, rBGPI
ld hl, Data_80e4
call Fill33Bytes
ld a, $80
ld de, rOBPI
ld hl, Data_80f4
call Fill33Bytes
ld hl, PointerTable_8089
xor a
call LoadVideoData
ld a, Bank(UnusedTileListData_8094)
ld bc, UnusedTileListData_8094
ld de, LoadTileLists
call Func_10c5
ret
PointerTable_8089: ; 0x8089
dw UnusedTextVideoData
UnusedTextVideoData: ; 0x808b
VIDEO_DATA_TILES UnusedTextGfx, vTilesSH + $200, $400
db $FF, $FF ; terminators
UnusedTileListData_8094: ; 0x8094
db $13
dbw $06, $98A3
db $BC, $AF, $B6, $AF, $AD, $BD
dbw $06, $98AA
db $BD, $AB, $BB, $B1, $AF, $BD
dbw $04, $98E3
db $D0, $AD, $B1, $AC
dbw $03, $9924
db $AE, $B7, $B1
db $00 ; terminator
FillBackgroundsVRAM: ; 0x80b5
ld hl, vBGMap
.fillLoop
xor a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld a, h
cp $a0 ; end of VRAM
jr nz, .fillLoop
ret
FillTilesVRAM: ; 0x80c3
ld hl, vTilesOB
.fillLoop
ld a, c
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld a, h
cp (vBGMap >> 8)
jr nz, .fillLoop
ret
Fill33Bytes: ; 0x80d1
; First places a in [de].
; Then, reads 32 bytes from hl and places them in order at de + 1
ld [de], a
inc de
ld b, $4
.outerLoop
ld c, $8
push hl
.innerLoop
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
dec c
jr nz, .innerLoop
pop hl
dec b
jr nz, .outerLoop
ret
Data_80e4: ; 0x80e4
db $FF
db $7F
db $B5
db $56
db $6B
db $2D
db $00
db $00
db $FF
db $7F
db $B5
db $56
db $6B
db $2D
db $00
db $00
Data_80f4: ; 0x80f4
db $B5
db $56
db $FF
db $7F
db $6B
db $2D
db $00
db $00
db $FF
db $7F
db $B5
db $56
db $6B
db $2D
db $00
db $00
Func_8104: ; 0x8104
ld a, [hNewlyPressedButtons]
ld b, a
and (D_DOWN | D_UP)
jr z, .asm_8115
ld a, [hGameBoyColorFlag]
ld [hFFC4], a
xor $1
ld [hGameBoyColorFlag], a
jr .asm_811d
.asm_8115
bit BIT_A_BUTTON, b
ret z
ld hl, wScreenState
inc [hl]
ret
.asm_811d
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_812e
ld a, Bank(Data_813a)
ld bc, Data_813a
ld de, LoadTileLists
call Func_10c5
ret
.asm_812e
ld a, Bank(Data_8144)
ld bc, Data_8144
ld de, LoadTileLists
call Func_10c5
ret
Data_813a: ; 0x813a
db $02
dbw $01, $98E3
db $D1
dbw $01, $9923
db $D0
db $00 ; terminator
Data_8144: ; 0x8144
db $02
dbw $01, $98E3
db $D0
dbw $01, $9923
db $D1
db $00 ; terminator
Func_814e: ; 0x414e
call Func_cb5
call Func_576
ld hl, wCurrentScreen
inc [hl]
xor a
ld [wScreenState], a
ret
HandleEraseAllDataMenu: ; 0x815d
ld a, [wScreenState]
rst JumpTable ; calls JumpToFuncInTable
EraseAllDataMenuFunctions: ; 0x8161
dw CheckForResetButtonCombo
dw HandleEraseAllDataInput
dw ExitEraseAllDataMenu
CheckForResetButtonCombo: ; 0x8167
ld a, [hJoypadState]
cp (D_UP | D_RIGHT | START | SELECT)
jr z, .heldCorrectButtons
ld hl, wCurrentScreen
inc [hl]
ret
.heldCorrectButtons
ld a, $41
ld [hLCDC], a
ld a, $e4
ld [wBGP], a
xor a
ld [wOBP0], a
ld [wOBP1], a
ld [hSCX], a
ld [hSCY], a
ld a, [hGameBoyColorFlag]
ld hl, EraseAllDataGfxPointers
call LoadVideoData
call ClearOAMBuffer
call Func_b66
call Func_588
call SGBNormal
call Func_bbe
ld hl, wScreenState
inc [hl]
ret
EraseAllDataGfxPointers: ; 0x81a2
dw EraseAllDataGfx_GameBoy
dw EraseAllDataGfx_GameBoyColor
EraseAllDataGfx_GameBoy: ; 0x81a6
VIDEO_DATA_TILES EraseAllDataGfx, vTilesBG, $300
VIDEO_DATA_TILEMAP EraseAllDataTilemap, vBGMap, $400
db $FF, $FF ; terminators
EraseAllDataGfx_GameBoyColor: ; 0x81b6
VIDEO_DATA_TILES EraseAllDataGfx, vTilesBG, $300
VIDEO_DATA_TILEMAP EraseAllDataTilemap, vBGMap, $400
VIDEO_DATA_BGATTR EraseAllDataBGAttributes, vBGMap, $400
VIDEO_DATA_PALETTES HighScoresRedStagePalettes, $80
db $FF, $FF ; terminators
HandleEraseAllDataInput: ; 0x81d4
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .checkForBButton
ld hl, $a000
xor a
ld b, a
.eraseSavedDataLoop
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
dec b
jr nz, .eraseSavedDataLoop
ld hl, wScreenState
inc [hl]
ret
.checkForBButton
bit BIT_B_BUTTON, a
ret z
ld hl, wScreenState
inc [hl]
ret
ExitEraseAllDataMenu: ; 0x820f
call Func_cb5
call Func_576
ld hl, wCurrentScreen
inc [hl]
xor a
ld [wScreenState], a
ret
HandleCopyrightScreen: ; 0x821e
ld a, [wScreenState]
rst JumpTable ; calls JumpToFuncInTable
CopyrightScreenFunctions: ; 0x8222
dw FadeInCopyrightScreen
dw DisplayCopyrightScreen
dw FadeOutCopyrightScreenAndLoadData
FadeInCopyrightScreen: ; 0x8228
ld a, $41
ld [hLCDC], a
ld a, $e4
ld [wBGP], a
xor a
ld [wOBP0], a
ld [wOBP1], a
ld [hSCX], a
ld [hSCY], a
ld a, [hGameBoyColorFlag]
ld hl, CopyrightTextGfxPointers
call LoadVideoData
call ClearOAMBuffer
call Func_b66
call Func_588
call SGBNormal
ld bc, $0050
call AdvanceFrames
call Func_bbe
ld hl, wScreenState
inc [hl]
ret
CopyrightTextGfxPointers: ; 0x825e
dw CopyrightTextGfx_GameBoy
dw CopyrightTextGfx_GameBoyColor
CopyrightTextGfx_GameBoy: ; 0x8262
VIDEO_DATA_TILES CopyrightTextGfx, vTilesSH, $400
VIDEO_DATA_TILEMAP CopyrightScreenTilemap, vBGMap, $400
db $FF, $FF ; terminators
CopyrightTextGfx_GameBoyColor: ; 0x8272
VIDEO_DATA_TILES CopyrightTextGfx, vTilesSH, $400
VIDEO_DATA_TILEMAP CopyrightScreenTilemap, vBGMap, $400
VIDEO_DATA_BGATTR CopyrightScreenBGAttributes, vBGMap, $400
VIDEO_DATA_PALETTES CopyrightScreenPalettes, $80
db $FF, $FF ; terminators
DisplayCopyrightScreen: ; 0x8290
ld b, $5a ; number of frames to show the copyright screen
.delayLoop
push bc
rst AdvanceFrame ; wait for next frame
pop bc
ld a, b
cp $2d ; player can press A button to skip copyright screen once counter is below $2d
jr nc, .decrementCounter
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr nz, .done
.decrementCounter
dec b
jr nz, .delayLoop
.done
ld hl, wScreenState
inc [hl]
ret
FadeOutCopyrightScreenAndLoadData: ; 0x82a8
call Func_cb5
call Func_576
ld hl, sHighScores
ld de, wRedHighScore1Points
ld bc, $0082
call LoadSavedData
jr c, .loadedHighScores
callba CopyInitialHighScores
.loadedHighScores
ld hl, sPokedexFlags
ld de, wPokedexFlags
ld bc, $0098
call LoadSavedData
jr c, .asm_82de
callba ClearPokedexData
.asm_82de
ld hl, sKeyConfigs
ld de, wKeyConfigs
ld bc, $000e
call LoadSavedData
jr c, .asm_82f6
callba SaveDefaultKeyConfigs
.asm_82f6
ld hl, sSaveGame
ld de, wPartyMons
ld bc, $04c3 ; This is saved game data from when the player saves in the middle of a game.
call LoadSavedData
jr c, .asm_8308
xor a
ld [wd7c2], a ; if this is non-zero, the main menu will prompt for "continue or new game?".
.asm_8308
ld hl, wCurrentScreen
inc [hl]
xor a
ld [wScreenState], a
ret
InitializeStage: ; 0x8311
ld hl, wc000
ld bc, $0a00
call ClearData
ld a, $1
ld [rVBK], a
ld a, [wd805]
and a
jr nz, .asm_8331
ld hl, vBGWin
ld bc, $0400
ld a, $0
call Func_63e
jr .asm_833c
.asm_8331
ld hl, vBGWin
ld bc, $0400
ld a, $8
call Func_63e
.asm_833c
xor a
ld [rVBK], a
call Func_8388
ld a, [wCurrentStage]
call CallInFollowingTable
CallTable_8348: ; 0x8348
; STAGE_RED_FIELD_TOP
padded_dab InitRedField
; STAGE_RED_FIELD_BOTTOM
padded_dab InitRedField
padded_dab Func_18000
padded_dab Func_18000
; STAGE_BLUE_FIELD_TOP
padded_dab InitBlueField
; STAGE_BLUE_FIELD_BOTTOM
padded_dab InitBlueField
; STAGE_GENGAR_BONUS
padded_dab InitGengarBonusStage
; STAGE_GENGAR_BONUS
padded_dab InitGengarBonusStage
; STAGE_MEWTWO_BONUS
padded_dab InitMewtwoBonusStage
; STAGE_MEWTWO_BONUS
padded_dab InitMewtwoBonusStage
; STAGE_MEOWTH_BONUS
padded_dab InitMeowthBonusStage
; STAGE_MEOWTH_BONUS
padded_dab InitMeowthBonusStage
; STAGE_DIGLETT_BONUS
padded_dab InitDiglettBonusStage
; STAGE_DIGLETT_BONUS
padded_dab InitDiglettBonusStage
; STAGE_SEEL_BONUS
padded_dab InitSeelBonusStage
; STAGE_SEEL_BONUS
padded_dab InitSeelBonusStage
Func_8388: ; 0x8388
ld a, [wd7c1]
and a
jr z, .asm_8398
ld hl, wSubTileBallXPos
ld bc, $0037
call ClearData
ret
.asm_8398
ld a, [wCurrentStage]
cp $6
ret nc
ld hl, wPartyMons
ld bc, $0170
call ClearData
ld hl, wd473
ld bc, $0039
call ClearData
ld hl, wd4ad
ld bc, $034d
call ClearData
ret
StartBallForStage: ; 0x83ba
ld a, [wd7c1]
and a
jr z, .asm_83c7
call Func_8444
call RestartStageMusic
ret
.asm_83c7
xor a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
ld [wd7ae], a
ld [wd7af], a
ld [wd7b2], a
ld [wd7b3], a
ld [wd7b0], a
ld [wd7b1], a
ld [wd7b4], a
ld [wd7b5], a
ld [wBallSpin], a
ld [wBallRotation], a
inc a
ld [wd548], a
ld [wd549], a
ld a, $20
ld [wSCX], a
ld a, [wCurrentStage]
call CallInFollowingTable
CallTable_8404: ; 0x8404
; STAGE_RED_FIELD_TOP
padded_dab StartBallRedField
; STAGE_RED_FIELD_BOTTOM
padded_dab StartBallRedField
padded_dab Func_1804a
padded_dab Func_1804a
; STAGE_BLUE_FIELD_TOP
padded_dab StartBallBlueField
; STAGE_BLUE_FIELD_BOTTOM
padded_dab StartBallBlueField
; STAGE_GENGAR_BONUS
padded_dab StartBallGengarBonusStage
; STAGE_GENGAR_BONUS
padded_dab StartBallGengarBonusStage
; STAGE_MEWTWO_BONUS
padded_dab StartBallMewtwoBonusStage
; STAGE_MEWTWO_BONUS
padded_dab StartBallMewtwoBonusStage
; STAGE_MEOWTH_BONUS
padded_dab StartBallMeowthBonusStage
; STAGE_MEOWTH_BONUS
padded_dab StartBallMeowthBonusStage
; STAGE_DIGLETT_BONUS
padded_dab StartBallDiglettBonusStage
; STAGE_DIGLETT_BONUS
padded_dab StartBallDiglettBonusStage
; STAGE_SEEL_BONUS
padded_dab StartBallSeelBonusStage
; STAGE_SEEL_BONUS
padded_dab StartBallSeelBonusStage
Func_8444: ; 0x8444
ld a, [wInSpecialMode]
and a
jr z, .asm_8460
ld a, [wSpecialMode]
and a
jr nz, .asm_8460
ld a, [wWildMonIsHittable]
and a
jr z, .asm_8460
callba Func_10464
.asm_8460
ret
RestartStageMusic: ; 0x8461
ld a, [wStageSongBank]
call SetSongBank
ld a, [wStageSong]
ld e, a
ld d, $0
call PlaySong
ret
Func_8471: ; 0x8471
ld a, [wCurrentStage]
call CallInFollowingTable
CallTable_8477: ; 0x8477
; STAGE_RED_FIELD_TOP
padded_dab Func_14000
; STAGE_RED_FIELD_BOTTOM
padded_dab Func_1401c
padded_dab DoNothing_1805f
padded_dab DoNothing_18060
; STAGE_BLUE_FIELD_TOP
padded_dab Func_1c165
; STAGE_BLUE_FIELD_BOTTOM
padded_dab Func_1c191
; STAGE_GENGAR_BONUS
padded_dab Func_1818b
; STAGE_GENGAR_BONUS
padded_dab Func_1818b
; STAGE_MEWTWO_BONUS
padded_dab Func_19310
; STAGE_MEWTWO_BONUS
padded_dab Func_19310
; STAGE_MEOWTH_BONUS
padded_dab Func_24128
; STAGE_MEOWTH_BONUS
padded_dab Func_24128
; STAGE_DIGLETT_BONUS
padded_dab Func_19a76
; STAGE_DIGLETT_BONUS
padded_dab Func_19a76
; STAGE_SEEL_BONUS
padded_dab Func_25b97
; STAGE_SEEL_BONUS
padded_dab Func_25b97
Func_84b7: ; 0x84b7
ld a, [wCurrentStage]
call CallInFollowingTable
PointerTable_84bd: ; 0x84bd
; STAGE_RED_FIELD_TOP
padded_dab Func_1755c
; STAGE_RED_FIELD_BOTTOM
padded_dab Func_1757e
padded_dab Func_18079
padded_dab Func_18084
; STAGE_BLUE_FIELD_TOP
padded_dab Func_1f330
; STAGE_BLUE_FIELD_BOTTOM
padded_dab Func_1f35a
; STAGE_GENGAR_BONUS
padded_dab Func_18faf
; STAGE_GENGAR_BONUS
padded_dab Func_18faf
; STAGE_MEWTWO_BONUS
padded_dab Func_1994e
; STAGE_MEWTWO_BONUS
padded_dab Func_1994e
; STAGE_MEOWTH_BONUS
padded_dab Func_2583b
; STAGE_MEOWTH_BONUS
padded_dab Func_2583b
; STAGE_DIGLETT_BONUS
padded_dab Func_1ac98
; STAGE_DIGLETT_BONUS
padded_dab Func_1ac98
; STAGE_SEEL_BONUS
padded_dab Func_26b7e
; STAGE_SEEL_BONUS
padded_dab Func_26b7e
Func_84fd:
ld a, [hGameBoyColorFlag]
and a
jr z, .not_cgb
ld a, $1
ld [rVBK], a
xor a
call .FillAttrsOrBGMap
xor a
ld [rVBK], a
.not_cgb
ld a, $81
call .FillAttrsOrBGMap
ld de, wBottomMessageBuffer + $47
call Func_8524
ret
.FillAttrsOrBGMap: ; 8519 (2:4519)
hlCoord 0, 0, vBGWin
ld b, $20
.loop
ld [hli], a
ld [hli], a
dec b
jr nz, .loop
ret
Func_8524: ; 0x8524
ld hl, wScore + $5
lb bc, $0c, $01
.loop
ld a, [hl]
swap a
and $f
call .GetDigit
inc de
dec b
ld a, [hld]
and $f
call .GetDigit
inc de
dec b
jr nz, .loop
ld a, $86
ld [de], a
inc de
ret
.GetDigit: ; 0x8543
jr nz, .okay
ld a, b
dec a
jr z, .okay
ld a, c
and a
ret nz
.okay
add $86 ; 0
ld [de], a
ld c, $0
ld a, b
cp $c
jr z, .load_tile_82
cp $9
jr z, .load_tile_82
cp $6
jr z, .load_tile_82
cp $3
ret nz
.load_tile_82
set 7, e
ld a, $82 ; ,
ld [de], a
res 7, e
ret
Func_8569:
xor a
ld hl, wAddScoreQueue
ld b, $31
.asm_856f
ld [hli], a
ld [hli], a
dec b
jr nz, .asm_856f
ld [hli], a
ret
AddBigBCD6FromQueueWithBallMultiplier: ; 0x8576
ld h, b
ld l, c
ld a, [wAddScoreQueueOffset]
ld e, a
ld d, wAddScoreQueue / $100
ld a, [wBallType]
and a
jr nz, .asm_8585
inc a
.asm_8585
ld b, a
jr asm_8592
AddBigBCD6FromQueue: ; 0x8588
; bc - Points to BCD buffer
ld h, b
ld l, c
ld a, [wAddScoreQueueOffset]
ld e, a
ld d, wAddScoreQueue / $100
ld b, $1
asm_8592:
push hl
x = 0
rept 6
ld a, [de]
if x == 0
add [hl]
else
adc [hl]
endc
daa
ld [de], a
inc de
inc hl
x = x + 1
endr
ld a, e
cp wAddScoreQueueEnd % $100
jr nz, .okay
ld e, wAddScoreQueue % $100
.okay
pop hl
dec b
jr nz, asm_8592
ld a, e
ld [wAddScoreQueueOffset], a
ret
Func_85c7: ; 0x85c7
ld a, [hNumFramesDropped]
and $3
ret nz
ld a, [wd478]
ld l, a
ld h, wAddScoreQueue / $100
ld de, wScore
ld a, [wAddScoreQueueOffset]
cp l
jr nz, .asm_85de
ld [wd479], a
.asm_85de
push hl
ld a, [hli]
or [hl]
inc hl
or [hl]
inc hl
or [hl]
inc hl
or [hl]
inc hl
or [hl]
pop hl
jr nz, .value_is_nonzero
ld a, [wd479]
ld [wd478], a
ret
.value_is_nonzero
ld a, [de]
add [hl]
daa
ld [de], a
ld [hl], $0
inc de
inc hl
ld a, [de]
adc [hl]
daa
ld [de], a
ld [hl], $0
inc de
inc hl
ld a, [de]
adc [hl]
daa
ld [de], a
ld [hl], $0
inc de
inc hl
ld a, [de]
adc [hl]
daa
ld [de], a
ld [hl], $0
inc de
inc hl
ld a, [de]
adc [hl]
daa
ld [de], a
ld [hl], $0
inc de
inc hl
ld a, [de]
adc [hl]
daa
ld [de], a
ld [hl], $0
call c, SetMaxScore
inc de
inc hl
ld a, l
cp $60
jr nz, .asm_862d
ld l, $0
.asm_862d
ld a, l
ld [wd478], a
ld a, $1
ld [wd49f], a
ret
SetMaxScore: ; 0x8637
push hl
ld hl, wScore
ld a, $99
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
pop hl
ret
Func_8645: ; 0x8645
xor a
ld [wd49f], a
ld de, wBottomMessageBuffer + $47
call Func_8524
ret
Func_8650: ; 0x8650
ld a, [wCurrentStage]
bit 0, a
jr nz, .bottomStage
ld a, $86
ld [hWY], a
ret
.bottomStage
ld a, [wBallYPos + 1]
cp $84
jr nc, .asm_8670
ld a, [hWY]
sub $3
cp $86
jr nc, .asm_866d
ld a, $86
.asm_866d
ld [hWY], a
ret
.asm_8670
ld a, [hWY]
add $3
cp $90
jr c, .asm_867a
ld a, $90
.asm_867a
ld [hWY], a
ret
StartTimer: ; 0x867d
; Starts the timer that counts down with the specified starting time when things
; like CatchEm Mode starts.
; input: b = minutes
; c = seconds
ld a, c
ld [wTimerSeconds], a
ld a, b
ld [wTimerMinutes], a
xor a
ld [wTimerFrames], a
ld [wd57e], a
ld [wd57f], a
ld a, $1
ld [wd57d], a
ld a, $1
ld [wd580], a
callba Func_1404a
ret
Func_86a4: ; 0x86a4
ld a, [wd57f]
and a
ret nz
ld a, [wTimerFrames]
inc a
cp $3c
jr c, .asm_86b2
xor a
.asm_86b2
ld [wTimerFrames], a
ret c
ld hl, wTimerMinutes
ld a, [hld]
or [hl]
jr nz, .asm_86c3
ld a, $1
ld [wd57e], a
ret
.asm_86c3
ld a, [hl]
sub $1
daa
jr nc, .asm_86cb
ld a, $59
.asm_86cb
ld [hli], a
ld a, [hl]
sbc $0
daa
ld [hl], a
ret
Func_86d2: ; 0x86d2
xor a
ld [wd57d], a
ret
HandleInGameMenu: ; 0x86d7
; Routine responsible for the "SAVE"/"CANCEL" menu.
ld a, [wd917]
push af
ld a, $1
ld [wd917], a
call FillBottomMessageBufferWithBlackTile
xor a
ld [wd4aa], a
ld hl, wBottomMessageText
ld a, $81
ld b, $30
.clearLoop
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
dec b
jr nz, .clearLoop
ld de, wBottomMessageText + $24
ld hl, SaveText
call Func_8797
ld de, wBottomMessageText + $64
ld hl, CancelText
call Func_8797
ld a, Bank(InGameMenuSymbolsGfx)
ld hl, InGameMenuSymbolsGfx
ld de, vTilesSH + $60
ld bc, $0010
call LoadVRAMData
ld a, $0
ld hl, wBottomMessageText
ld de, vBGWin
ld bc, $00c0
call LoadVRAMData
ld a, $60
ld [hWY], a
dec a
ld [hLYC], a
ld a, $fd
ld [hLCDCMask], a
call HandleInGameMenuSelection
ld a, [wInGameMenuIndex]
and a
jr nz, .pickedCancel
ld a, $1
ld [wd7c2], a
ld hl, wPartyMons
ld de, sSaveGame
ld bc, $04c3
call SaveData
xor a
ld [wd803], a
ld [wd804], a
.pickedCancel
ld bc, $003c
call AdvanceFrames
ld a, $86
ld [hWY], a
ld a, $83
ld [hLYC], a
ld [hLastLYC], a
ld a, $ff
ld [hLCDCMask], a
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_8778
ld a, Bank(StageRedFieldTopStatusBarSymbolsGfx_GameBoy)
ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoy + $60
ld de, vTilesSH + $60
ld bc, $0010
call LoadVRAMData
jr .asm_8786
.asm_8778
ld a, Bank(StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor)
ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor + $60
ld de, vTilesSH + $60
ld bc, $0010
call LoadVRAMData
.asm_8786
call FillBottomMessageBufferWithBlackTile
pop af
ld [wd917], a
ld a, $1
ld [wd4aa], a
ld a, [wInGameMenuIndex]
and a
ret
Func_8797: ; 0x8797
ld a, [hli]
and a
ret z
add $bf
ld [de], a
inc de
jr Func_8797
SaveText: ; 0x87a0
db "SAVE@"
CancelText: ; 0x87a5
db "CANCEL@"
HandleInGameMenuSelection: ; 0x87ac
ld a, $1
ld [wInGameMenuIndex], a
.waitForAButton
call MoveInGameMenuCursor
call DrawInGameMenu
rst AdvanceFrame
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .waitForAButton
lb de, $00, $01
call PlaySoundEffect
ret
MoveInGameMenuCursor: ; 0x87c5
; Moves the cursor up or down in the "SAVE"/"CANCEL" in-game menu
ld a, [hNewlyPressedButtons]
ld b, a
ld a, [wInGameMenuIndex]
bit BIT_D_UP, b
jr z, .didntPressUp
and a ; is the cursor already on "SAVE"?
ret z
dec a
ld [wInGameMenuIndex], a
lb de, $00, $03
call PlaySoundEffect
ret
.didntPressUp
bit BIT_D_DOWN, b
ret z
cp $1 ; is the cursor already on "CANCEL"?
ret z
inc a
ld [wInGameMenuIndex], a
lb de, $00, $03
call PlaySoundEffect
ret
DrawInGameMenu: ; 0x87ed
ld a, $81
ld [wBottomMessageText + $23], a
ld [wBottomMessageText + $63], a
ld a, [wInGameMenuIndex]
ld c, a
swap c
sla c
sla c
ld b, $0
ld hl, wBottomMessageText + $23
add hl, bc
ld a, $86
ld [hl], a
ld a, $0
ld hl, wBottomMessageText
ld de, vBGWin
ld bc, $00c0
call LoadVRAMData
ret
CollisionForceAngles: ; 0x8817
; This data has something to do with collisions.
db $C0
db $C5
db $D0
db $DB
db $E0
db $E5
db $F0
db $FB
db $00
db $05
db $10
db $1B
db $20
db $25
db $30
db $3B
db $45
db $CA
db $D5
db $E0
db $E5
db $EA
db $F5
db $00
db $05
db $0A
db $15
db $20
db $25
db $2A
db $35
db $40
db $50
db $55
db $E0
db $EB
db $F0
db $F5
db $00
db $0B
db $10
db $15
db $20
db $2B
db $30
db $35
db $40
db $4B
db $5B
db $60
db $6B
db $F6
db $FB
db $00
db $0B
db $16
db $1B
db $20
db $2B
db $36
db $3B
db $40
db $4B
db $56
db $60
db $65
db $70
db $7B
db $00
db $05
db $10
db $1B
db $20
db $25
db $30
db $3B
db $40
db $45
db $50
db $5B
db $65
db $6A
db $75
db $80
db $85
db $0A
db $15
db $20
db $25
db $2A
db $35
db $40
db $45
db $4A
db $55
db $60
db $70
db $75
db $80
db $8B
db $90
db $95
db $20
db $2B
db $30
db $35
db $40
db $4B
db $50
db $55
db $60
db $6B
db $7B
db $80
db $8B
db $96
db $9B
db $A0
db $AB
db $36
db $3B
db $40
db $4B
db $56
db $5B
db $60
db $6B
db $76
db $80
db $85
db $90
db $9B
db $A0
db $A5
db $B0
db $BB
db $40
db $45
db $50
db $5B
db $60
db $65
db $70
db $7B
db $85
db $8A
db $95
db $A0
db $A5
db $AA
db $B5
db $C0
db $C5
db $4A
db $55
db $60
db $65
db $6A
db $75
db $80
db $90
db $95
db $A0
db $AB
db $B0
db $B5
db $C0
db $CB
db $D0
db $D5
db $60
db $6B
db $70
db $75
db $80
db $8B
db $9B
db $A0
db $AB
db $B6
db $BB
db $C0
db $CB
db $D6
db $DB
db $E0
db $EB
db $76
db $7B
db $80
db $8B
db $96
db $A0
db $A5
db $B0
db $BB
db $C0
db $C5
db $D0
db $DB
db $E0
db $E5
db $F0
db $FB
db $80
db $85
db $90
db $9B
db $A5
db $AA
db $B5
db $C0
db $C5
db $CA
db $D5
db $E0
db $E5
db $EA
db $F5
db $00
db $05
db $8A
db $95
db $A0
db $B0
db $B5
db $C0
db $CB
db $D0
db $D5
db $E0
db $EB
db $F0
db $F5
db $00
db $0B
db $10
db $15
db $A0
db $AB
db $BB
db $C0
db $CB
db $D6
db $DB
db $E0
db $EB
db $F6
db $FB
db $00
db $0B
db $16
db $1B
db $20
db $2B
db $B6
CollisionYDeltas: ; 0x8917
; This has to do with y-collision data
dw $0000
dw $FFE0
dw $FF81
dw $FEDE
dw $FE77
dw $FE00
dw $FCCC
dw $FB87
dw $FB01
dw $FA8E
dw $F9F8
dw $FA1F
dw $FA77
dw $FAFC
dw $FCAD
dw $FEE7
dw $0119
dw $FFC2
dw $FF70
dw $FEE4
dw $FE8C
dw $FE24
dw $FD15
dw $FBF9
dw $FB87
dw $FB27
dw $FAB9
dw $FB03
dw $FB69
dw $FBFA
dw $FDBD
dw $0000
dw $0353
dw $045D
dw $FF4B
dw $FF01
dw $FECC
dw $FE8A
dw $FDD5
dw $FD15
dw $FCCC
dw $FC94
dw $FC77
dw $FD03
dw $FD81
dw $FE24
dw $0000
dw $0243
dw $0504
dw $05F6
dw $07B4
dw $FF08
dw $FEFB
dw $FEE2
dw $FE8A
dw $FE24
dw $FE00
dw $FDEC
dw $FE10
dw $FEC9
dw $FF54
dw $0000
dw $01DC
dw $0406
dw $0589
dw $066D
dw $0808
dw $08E7
dw $FF00
dw $FEFB
dw $FECC
dw $FE8C
dw $FE77
dw $FE71
dw $FEAD
dw $FF73
dw $0000
dw $00AC
dw $027F
dw $0497
dw $05E1
dw $06B6
dw $082C
dw $08E1
dw $08E7
dw $FF08
dw $FF01
dw $FEE4
dw $FEDE
dw $FEE3
dw $FF32
dw $0000
dw $008D
dw $0137
dw $02FD
dw $04FD
dw $0608
dw $06B8
dw $07D4
dw $082C
dw $0808
dw $07B4
dw $FF4B
dw $FF70
dw $FF81
dw $FF99
dw $0000
dw $00CE
dw $0153
dw $01F0
dw $0389
dw $0547
dw $0572
dw $05F8
dw $06B8
dw $06B6
dw $066D
dw $05F6
dw $045D
dw $FFC2
dw $FFE0
dw $0000
dw $0067
dw $011D
dw $018F
dw $0214
dw $036C
dw $04D9
dw $04FF
dw $0572
dw $0608
dw $05E1
dw $0589
dw $0504
dw $0353
dw $0119
dw $0000
dw $0020
dw $007F
dw $0122
dw $0189
dw $0200
dw $0334
dw $0479
dw $0479
dw $04D9
dw $0547
dw $04FD
dw $0497
dw $0406
dw $0243
dw $0000
dw $FEE7
dw $003E
dw $0090
dw $011C
dw $0174
dw $01DC
dw $02EB
dw $0407
dw $0334
dw $036C
dw $0389
dw $02FD
dw $027F
dw $01DC
dw $0000
dw $FDBD
dw $FCAD
dw $FBA3
dw $00B5
dw $00FF
dw $0134
dw $0176
dw $022B
dw $02EB
dw $0200
dw $0214
dw $01F0
dw $0137
dw $00AC
dw $0000
dw $FE24
dw $FBFA
dw $FAFC
dw $FA0A
dw $F84C
dw $00F8
dw $0105
dw $011E
dw $0176
dw $01DC
dw $0189
dw $018F
dw $0153
dw $008D
dw $0000
dw $FF54
dw $FD81
dw $FB69
dw $FA77
dw $F993
dw $F7F8
dw $F719
dw $0100
dw $0105
dw $0134
dw $0174
dw $0122
dw $011D
dw $00CE
dw $0000
dw $FF73
dw $FEC9
dw $FD03
dw $FB03
dw $FA1F
dw $F94A
dw $F7D4
dw $F71F
dw $F719
dw $00F8
dw $00FF
dw $011C
dw $007F
dw $0067
dw $0000
dw $FF32
dw $FEAD
dw $FE10
dw $FC77
dw $FAB9
dw $F9F8
dw $F948
dw $F82C
dw $F7D4
dw $F7F8
dw $F84C
dw $00B5
dw $0090
dw $0020
dw $0000
dw $FF99
dw $FEE3
dw $FE71
dw $FDEC
dw $FC94
dw $FB27
dw $FA8E
dw $FA08
dw $F948
dw $F94A
dw $F993
dw $FA0A
dw $FBA3
dw $003E
CollisionXDeltas: ; 0x8b17
; This data has to do with x-collision data
dw $FF00
dw $FEFB
dw $FECC
dw $FE8C
dw $FE77
dw $FE71
dw $FEAD
dw $FF73
dw $0000
dw $00AC
dw $027F
dw $0497
dw $0589
dw $066D
dw $0808
dw $08E7
dw $08E7
dw $FF08
dw $FF01
dw $FEE4
dw $FEDE
dw $FEE3
dw $FF32
dw $0000
dw $008D
dw $0137
dw $02FD
dw $04FD
dw $05E1
dw $06B6
dw $082C
dw $08E1
dw $0808
dw $07B4
dw $FF4B
dw $FF70
dw $FF81
dw $FF99
dw $0000
dw $00CE
dw $0153
dw $01F0
dw $0389
dw $0547
dw $0608
dw $06B8
dw $07D4
dw $082C
dw $066D
dw $05F6
dw $045D
dw $FFC2
dw $FFE0
dw $0000
dw $0067
dw $011D
dw $018F
dw $0214
dw $036C
dw $04D9
dw $0572
dw $05F8
dw $06B8
dw $06B6
dw $0589
dw $0504
dw $0353
dw $0119
dw $0000
dw $0020
dw $007F
dw $0122
dw $0189
dw $0200
dw $0334
dw $0479
dw $04FF
dw $0572
dw $0608
dw $05E1
dw $0497
dw $0406
dw $0243
dw $0000
dw $FEE7
dw $003E
dw $0090
dw $011C
dw $0174
dw $01DC
dw $02EB
dw $0407
dw $0479
dw $04D9
dw $0547
dw $04FD
dw $027F
dw $01DC
dw $0000
dw $FDBD
dw $FCAD
dw $FBA3
dw $00B5
dw $00FF
dw $0134
dw $0176
dw $022B
dw $02EB
dw $0334
dw $036C
dw $0389
dw $02FD
dw $00AC
dw $0000
dw $FE24
dw $FBFA
dw $FAFC
dw $FA0A
dw $F84C
dw $00F8
dw $0105
dw $011E
dw $0176
dw $01DC
dw $0200
dw $0214
dw $01F0
dw $0137
dw $0000
dw $FF54
dw $FD81
dw $FB69
dw $FA77
dw $F993
dw $F7F8
dw $F719
dw $0100
dw $0105
dw $0134
dw $0174
dw $0189
dw $018F
dw $0153
dw $008D
dw $FF73
dw $FEC9
dw $FD03
dw $FB03
dw $FA1F
dw $F94A
dw $F7D4
dw $F71F
dw $F719
dw $00F8
dw $00FF
dw $011C
dw $0122
dw $011D
dw $00CE
dw $0000
dw $FEAD
dw $FE10
dw $FC77
dw $FAB9
dw $F9F8
dw $F948
dw $F82C
dw $F7D4
dw $F7F8
dw $F84C
dw $00B5
dw $0090
dw $007F
dw $0067
dw $0000
dw $FF32
dw $FE71
dw $FDEC
dw $FC94
dw $FB27
dw $FA8E
dw $FA08
dw $F948
dw $F94A
dw $F993
dw $FA0A
dw $FBA3
dw $003E
dw $0020
dw $0000
dw $FF99
dw $FEE3
dw $FE77
dw $FE00
dw $FCCC
dw $FB87
dw $FB01
dw $FA8E
dw $F9F8
dw $FA1F
dw $FA77
dw $FAFC
dw $FCAD
dw $FEE7
dw $0000
dw $FFE0
dw $FF81
dw $FEDE
dw $FE8C
dw $FE24
dw $FD15
dw $FBF9
dw $FB87
dw $FB27
dw $FAB9
dw $FB03
dw $FB69
dw $FBFA
dw $FDBD
dw $0000
dw $0119
dw $FFC2
dw $FF70
dw $FEE4
dw $FECC
dw $FE8A
dw $FDD5
dw $FD15
dw $FCCC
dw $FC94
dw $FC77
dw $FD03
dw $FD81
dw $FE24
dw $0000
dw $0243
dw $0353
dw $045D
dw $FF4B
dw $FF01
dw $FEFB
dw $FEE2
dw $FE8A
dw $FE24
dw $FE00
dw $FDEC
dw $FE10
dw $FEC9
dw $FF54
dw $0000
dw $01DC
dw $0406
dw $0504
dw $05F6
dw $07B4
dw $FF08
LoadDexVWFCharacter_: ; 0x8d17
; Loads a single variable-width-font character used in various parts of the Pokedex screen.
ld a, [$ff92]
cp $80
jp c, Func_8e01
ld a, [$ff90]
ld c, a
ld a, [$ff91]
ld b, a
ld a, [$ff93]
ld l, a
ld h, $0
add hl, bc
ld a, [$ff8e]
cp h
jr nz, .asm_8d32
ld a, [$ff8d]
cp l
.asm_8d32
jr nc, .asm_8d5c
ld a, [$ff8d]
ld [$ff90], a
ld a, [$ff8e]
ld [$ff91], a
ld a, [$ff8d]
ld c, a
ld a, [$ff8e]
ld b, a
ld a, [$ff8c]
ld l, a
ld h, $0
add hl, bc
ld a, l
ld [$ff8d], a
ld a, h
ld [$ff8e], a
srl h
rr l
srl h
rr l
ld a, [$ff8f]
cp l
jp c, Func_8df7
.asm_8d5c
ld a, [$ff90]
and $f8
ld c, a
ld a, [$ff91]
ld b, a
sla c
rl b
sla c
rl b
ld hl, wc010
add hl, bc
ld d, h
ld e, l
ld a, [$ff92]
swap a
ld c, a
and $f
ld b, a
ld a, c
and $f0
ld c, a
sla c
rl b
ld hl, PokedexCharactersGfx
add hl, bc
push hl
ld a, [$ff90]
and $7
ld c, a
ld b, $0
ld hl, Data_8df9
add hl, bc
ld a, [hl]
ld [wd85e], a
cpl
ld [wd85f], a
ld a, c
add $58
ld b, a
pop hl
push hl
ld c, $10
.asm_8da2
push bc
ld a, [hli]
ld c, a
ld a, [bc]
ld c, a
ld a, [wd85e]
and c
ld c, a
ld a, [wd860]
ld b, a
ld a, [de]
xor b
or c
xor b
ld [de], a
inc de
ld a, [de]
xor b
or c
xor b
ld [de], a
inc de
inc hl
pop bc
dec c
jr nz, .asm_8da2
pop hl
ld c, $10
.asm_8dc4
push bc
ld a, [hli]
ld c, a
ld a, [bc]
ld c, a
ld a, [wd85f]
and c
ld c, a
ld a, [wd860]
ld b, a
ld a, [de]
xor b
or c
xor b
ld [de], a
inc de
ld a, [de]
xor b
or c
xor b
ld [de], a
inc de
inc hl
pop bc
dec c
jr nz, .asm_8dc4
ld a, [$ff90]
ld c, a
ld a, [$ff91]
ld b, a
ld a, [$ff93]
ld l, a
ld h, $0
add hl, bc
ld a, l
ld [$ff90], a
ld a, h
ld [$ff91], a
and a
ret
Func_8df7: ; 0x8df7
scf
ret
Data_8df9: ; 0x8df9
db $FF, $7F, $3F, $1F, $0F, $07, $03, $01
Func_8e01: ; 0x8e01
ld a, [$ff90]
ld c, a
ld a, [$ff91]
ld b, a
ld a, [$ff93]
ld l, a
ld h, $0
add hl, bc
ld a, [$ff8e]
cp h
jr nz, .asm_8e15
ld a, [$ff8d]
cp l
.asm_8e15
jr nc, .asm_8e3f
ld a, [$ff8d]
ld [$ff90], a
ld a, [$ff8e]
ld [$ff91], a
ld a, [$ff8d]
ld c, a
ld a, [$ff8e]
ld b, a
ld a, [$ff8c]
ld l, a
ld h, $0
add hl, bc
ld a, l
ld [$ff8d], a
ld a, h
ld [$ff8e], a
srl h
rr l
srl h
rr l
ld a, [$ff8f]
cp l
jp c, Func_8ed6
.asm_8e3f
ld a, [$ff90]
and $f8
ld c, a
ld a, [$ff91]
ld b, a
sla c
rl b
ld hl, wc010
add hl, bc
ld d, h
ld e, l
ld a, [$ff92]
swap a
ld c, a
and $f
ld b, a
ld a, c
and $f0
ld c, a
sla c
rl b
ld hl, PokedexCharactersGfx + $8
add hl, bc
push hl
ld a, [$ff90]
and $7
ld c, a
ld b, $0
ld hl, Data_8ed8
add hl, bc
ld a, [hl]
ld [wd85e], a
cpl
ld [wd85f], a
ld a, c
add $58
ld b, a
pop hl
push hl
ld c, $8
.asm_8e81
push bc
ld a, [hli]
ld c, a
ld a, [bc]
ld c, a
ld a, [wd85e]
and c
ld c, a
ld a, [wd860]
ld b, a
ld a, [de]
xor b
or c
xor b
ld [de], a
inc de
ld a, [de]
xor b
or c
xor b
ld [de], a
inc de
inc hl
pop bc
dec c
jr nz, .asm_8e81
pop hl
ld c, $8
.asm_8ea3
push bc
ld a, [hli]
ld c, a
ld a, [bc]
ld c, a
ld a, [wd85f]
and c
ld c, a
ld a, [wd860]
ld b, a
ld a, [de]
xor b
or c
xor b
ld [de], a
inc de
ld a, [de]
xor b
or c
xor b
ld [de], a
inc de
inc hl
pop bc
dec c
jr nz, .asm_8ea3
ld a, [$ff90]
ld c, a
ld a, [$ff91]
ld b, a
ld a, [$ff93]
ld l, a
ld h, $0
add hl, bc
ld a, l
ld [$ff90], a
ld a, h
ld [$ff91], a
and a
ret
Func_8ed6: ; 0x8ed6
scf
ret
Data_8ed8: ; 0x8ed8
db $FF, $7F, $3F, $1F, $0F, $07, $03, $01
Func_8ee0: ; 0x8ee0
ld a, [$ff8d]
ld [$ff90], a
ld a, [$ff8e]
ld [$ff91], a
ld a, [$ff8d]
ld c, a
ld a, [$ff8e]
ld b, a
ld a, [$ff8c]
ld l, a
ld h, $0
add hl, bc
ld a, l
ld [$ff8d], a
ld a, h
ld [$ff8e], a
srl h
rr l
srl h
rr l
ld a, [$ff8f]
cp l
ret
Data_8f06:
SECTION "bank2.2", ROMX [$5800], BANK[$2]
Data_9800:
macro_9800: MACRO
x = 0
rept \1
y = 0
rept $100 / \1
db (x + y) & $ff
y = y + \1
endr
x = x + 1
endr
endm
w = $100
rept 8
macro_9800 w
w = w >> 1
endr
PokedexCharactersGfx: ; 0xa000
INCBIN "gfx/pokedex/characters.interleave.2bpp"
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
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(GFX_a7b00)
ld hl, GFX_a7b00
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
HandlePinballGame: ; 0xd853
ld a, [wScreenState]
rst JumpTable ; calls JumpToFuncInTable
PinballGameScreenFunctions: ; 0xd857
dw GameScreenFunction_LoadGFX
dw GameScreenFunction_StartBall
dw GameScreenFunction_HandleBallPhysics
dw GameScreenFunction_HandleBallLoss
dw GameScreenFunction_EndBall
GameScreenFunction_LoadGFX: ; 0xd861
xor a
ld [wd908], a
callba InitializeStage
call FillBottomMessageBufferWithBlackTile
ld a, $1
ld [wd85d], a
ld [wd4aa], a
ld hl, wScreenState
inc [hl]
ret
GameScreenFunction_StartBall: ; 0xd87f
ld a, $67
ld [hLCDC], a
ld a, $e4
ld [wBGP], a
ld a, $e1
ld [wOBP0], a
ld a, $e4
ld [wOBP1], a
ld a, [wSCX]
ld [hSCX], a
xor a
ld [hSCY], a
ld a, $7
ld [hWX], a
ld a, $83
ld [hLYC], a
ld [hLastLYC], a
ld a, $ff
ld [hLCDCMask], a
ld hl, hSTAT
set 6, [hl]
ld hl, rIE
set 1, [hl]
ld a, $1
ld [hHBlankRoutine], a
callba StartBallForStage
callba LoadStageCollisionAttributes
callba Func_e6c2
callba Func_ed5e
call ClearOAMBuffer
callba Func_84b7
ld a, [wd849]
and a
call nz, Func_e5d
ld a, $1
ld [wd4aa], a
xor a
ld [wd7c1], a
call Func_b66
call Func_588
call Func_bbe
ld hl, wScreenState
inc [hl]
ret
GameScreenFunction_HandleBallPhysics: ; 0xd909
; main loop for stage logic
xor a
ld [wFlipperCollision], a
ld [wd7eb], a
call ApplyGravityToBall
call LimitBallVelocity
xor a
ld [wd7e9], a
call HandleTilts
ld a, [wCurrentStage]
bit 0, a
callba nz, HandleFlippers ; only perform flipper routines on the lower-half of stages
ld a, [wFlipperCollision]
and a
ld a, [wCollisionForceAngle]
push af
call CheckObjectCollision ; collision stuff
pop af
jr z, .noFlipperCollision
ld [wCollisionForceAngle], a
.noFlipperCollision
call CheckGameObjectCollisions
call Func_281c ; not collision-related
ld hl, wKeyConfigMenu
call IsKeyPressed
jr z, .didntPressMenuKey
lb de, $03, $4c
call PlaySoundEffect
callba HandleInGameMenu
jp z, SaveGame
.didntPressMenuKey
ld a, [wd7e9] ; check for collision flag
and a
jr z, .skip_collision
call ApplyTiltForces
call LoadBallVelocity ; bc = x velocity, de = y velocity
ld a, [wCollisionForceAngle]
call ApplyCollisionForce
call ApplyTorque
ld a, [wFlipperCollision]
and a
jr z, .not_flippers_2
; de -= *wFlipperYForce
ld hl, wFlipperYForce
ld a, [hli]
ld h, [hl]
ld l, a
ld a, e
sub l
ld e, a
ld a, d
sbc h
ld d, a
; bc += *wFlipperXForce
ld hl, wFlipperXForce
ld a, [hli]
ld h, [hl]
ld l, a
ld a, c
add l
ld c, a
ld a, b
adc h
ld b, a
jr .next
.not_flippers_2
ld a, [wd7f8]
and a
jr nz, .skip_collision
.next
ld a, [wCollisionForceAngle]
call NegateAngleAndApplyCollisionForce
call SetBallVelocity
.skip_collision
call MoveBallPosition
callba CheckStageTransition
callba Func_84b7
call Func_33e3
ld a, [wd5cb]
and a
jr nz, .asm_d9e9
callba Func_85c7
callba Func_8650
callba Func_8645
call Func_dba9
call Func_dc7c
call Func_dcb4
.asm_d9e9
ld a, [wd57d]
and a
callba nz, Func_86a4
ld a, [wd4ae]
and a
ret z
xor a
ld [wd4ae], a
ld hl, wScreenState
inc [hl]
ret
SaveGame: ; 0xda05
ld de, $0000
call PlaySong
ld bc, $0004
call AdvanceFrames
call Func_cb5
ld a, [wd849]
and a
call nz, Func_e5d
call Func_576
ld hl, hSTAT
res 6, [hl]
ld hl, rIE
res 1, [hl]
xor a
ld [wd4aa], a
ld a, SCREEN_TITLESCREEN
ld [wCurrentScreen], a
xor a
ld [wScreenState], a
ret
GameScreenFunction_HandleBallLoss: ; 0xda36
xor a
ld [hJoypadState], a
ld [hNewlyPressedButtons], a
ld [hPressedButtons], a
ld [wFlipperCollision], a
ld [wd7eb], a
xor a
ld [wd7e9], a
ld [wd548], a
ld [wd549], a
call HandleTilts
ld a, [wCurrentStage]
bit 0, a
callba nz, HandleFlippers
callba Func_84b7
call Func_33e3
callba Func_85c7
ld a, [wd5ca]
and a
ret nz
ld a, [wd4c9]
and a
jr z, .asm_daa9
ld a, [wd49c]
cp $2
jr z, .asm_daa9
call Func_f533
ld a, [wd49c]
and a
jr z, .asm_daa9
ld a, $2
ld [wd49c], a
ld [wd4aa], a
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, ShootAgainText
call LoadTextHeader
ret
.asm_daa9
xor a
ld [wd49c], a
ld hl, wScreenState
inc [hl]
ret
GameScreenFunction_EndBall: ; 0xdab2
xor a
ld [wd803], a
ld a, [wGameOver]
and a
jp nz, TransitionToHighScoresScreen
ld a, [wd495]
and a
jr nz, .asm_dae6
ld a, [wd496]
and a
jr nz, .asm_db28
call Func_cb5
ld a, [wd849]
and a
call z, Func_e5d
call Func_576
ld hl, hSTAT
res 6, [hl]
ld hl, rIE
res 1, [hl]
ld a, $1
ld [wScreenState], a
ret
.asm_dae6
ld de, $0000
call PlaySong
ld bc, $0004
call AdvanceFrames
call Func_cb5
ld a, [wd849]
and a
call nz, Func_e5d
call Func_576
ld hl, hSTAT
res 6, [hl]
ld hl, rIE
res 1, [hl]
ld a, [wCurrentStage]
ld [wd4ad], a
ld a, [wStageCollisionState]
ld [wd4b0], a
ld a, [wd497]
ld [wCurrentStage], a
xor a
ld [wd496], a
ld [wd495], a
ld a, $0
ld [wScreenState], a
ret
.asm_db28
ld de, $0000
call PlaySong
ld bc, $0004
call AdvanceFrames
call Func_cb5
ld a, [wd849]
and a
call nz, Func_e5d
call Func_576
ld hl, hSTAT
res 6, [hl]
ld hl, rIE
res 1, [hl]
ld a, [wd4ad]
ld [wCurrentStage], a
ld a, [wd4b0]
ld [wStageCollisionState], a
ld a, $1
ld [wScreenState], a
ret
TransitionToHighScoresScreen: ; 0xdb5d
xor a
ld [wGameOver], a
ld de, $0000
call PlaySong
ld bc, $0004
call AdvanceFrames
call Func_cb5
call Func_576
ld hl, hSTAT
res 6, [hl]
ld hl, rIE
res 1, [hl]
xor a
ld [wd4aa], a
ld a, [wCurrentStage]
ld c, a
ld b, $0
ld hl, HighScoresStageMapping
add hl, bc
ld a, [hl]
ld [wHighScoresStage], a
ld a, SCREEN_HIGH_SCORES
ld [wCurrentScreen], a
xor a
ld [wScreenState], a
ret
HighScoresStageMapping: ; 0xdb99
; Determines which stage the high scores screen will start in,
; based on the map the player ended in.
; See wHighScoresStage for more info.
db $00 ; STAGE_RED_FIELD_TOP
db $00 ; STAGE_RED_FIELD_BOTTOM
db $00
db $00
db $01 ; STAGE_BLUE_FIELD_TOP
db $01 ; STAGE_BLUE_FIELD_BOTTOM
db $00 ; STAGE_GENGAR_BONUS
db $00 ; STAGE_GENGAR_BONUS
db $00 ; STAGE_MEWTWO_BONUS
db $00 ; STAGE_MEWTWO_BONUS
db $00 ; STAGE_MEOWTH_BONUS
db $00 ; STAGE_MEOWTH_BONUS
db $00 ; STAGE_DIGLETT_BONUS
db $00 ; STAGE_DIGLETT_BONUS
db $00 ; STAGE_SEEL_BONUS
db $00 ; STAGE_SEEL_BONUS
Func_dba9: ; 0xdba9
ld a, $85
ld [wBottomMessageBuffer + $44], a
ld a, [wd49d]
xor $3
inc a
add $86
ld [wBottomMessageBuffer + $45], a
ret
Start20SecondSaverTimer: ; 0xdbba
ld a, $1
ld [wBallSaverIconOn], a
ld a, $ff
ld [wd4a2], a
ld a, 59
ld [wBallSaverTimerFrames], a
ld a, 20
ld [wBallSaverTimerSeconds], a
ld a, $2
ld [wNumTimesBallSavedTextWillDisplay], a
ret
InitBallSaverForCatchEmMode: ; 0xdbd4
ld a, [wBallSaverTimerFrames]
ld [wBallSaverTimerFramesBackup], a
ld a, [wBallSaverTimerSeconds]
ld [wBallSaverTimerSecondsBackup], a
ld a, [wNumTimesBallSavedTextWillDisplay]
ld [wd4a8], a
ld a, $0
ld [wBallSaverIconOn], a
ld a, $ff
ld [wd4a2], a
ld a, 59
ld [wBallSaverTimerFrames], a
ld a, 60
ld [wBallSaverTimerSeconds], a
ld a, $ff
ld [wNumTimesBallSavedTextWillDisplay], a
ret
RestoreBallSaverAfterCatchEmMode: ; 0xdc00
ld a, [wBallSaverTimerFramesBackup]
ld [wBallSaverTimerFrames], a
ld a, [wBallSaverTimerSecondsBackup]
ld [wBallSaverTimerSeconds], a
ld a, [wd4a8]
ld [wNumTimesBallSavedTextWillDisplay], a
ld a, [wBallSaverTimerSeconds]
and a
jr z, .asm_dc1a
ld a, $1
.asm_dc1a
ld [wBallSaverIconOn], a
ld a, [wBallSaverTimerSeconds]
ld c, $0
cp $2
jr c, .asm_dc34
ld c, $4
cp $6
jr c, .asm_dc34
ld c, $10
cp $b
jr c, .asm_dc34
ld c, $ff
.asm_dc34
ld a, c
ld [wd4a2], a
ld a, [wCurrentStage]
bit 0, a
ret z
callba Func_14707
ret
HandleBallLoss: ; 0xdc49
ld a, [wCurrentStage]
rst JumpTable ; calls JumpToFuncInTable
CallTable_dc4d: ; 0xdc4d
; STAGE_RED_FIELD_TOP
dw RedField_HandleBallLoss
; STAGE_RED_FIELD_BOTTOM
dw RedField_HandleBallLoss
dw Func_de4e
dw Func_de4e
; STAGE_BLUE_FIELD_TOP
dw BlueField_HandleBallLoss
; STAGE_BLUE_FIELD_TOP
dw BlueField_HandleBallLoss
; STAGE_GENGAR_BONUS
dw Func_df1a
; STAGE_GENGAR_BONUS
dw Func_df1a
; STAGE_MEWTWO_BONUS
dw Func_df7e
; STAGE_MEWTWO_BONUS
dw Func_df7e
; STAGE_MEOWTH_BONUS
dw Func_dfe2
; STAGE_MEOWTH_BONUS
dw Func_dfe2
; STAGE_DIGLETT_BONUS
dw Func_e056
; STAGE_DIGLETT_BONUS
dw Func_e056
; STAGE_SEEL_BONUS
dw Func_e08b
; STAGE_SEEL_BONUS
dw Func_e08b
Func_dc6d: ; 0xdc6d
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
pop de
call LoadTextHeader
ret
Func_dc7c: ; 0xdc7c
ld hl, wBottomMessageBuffer + $40
ld a, $83
ld [hli], a
ld a, $81
ld [hli], a
ld a, $81
ld [hl], a
ld a, [wNumPartyMons]
call ConvertHexByteToDecWord
ld hl, wBottomMessageBuffer + $41
ld c, $1
ld a, d
call .asm_dca0
ld a, e
swap a
call .asm_dca0
ld a, e
ld c, $0
.asm_dca0
and $f
jr nz, .asm_dca7
ld a, c
and a
ret nz
.asm_dca7
ld c, $0
add $86
ld [hli], a
ret
Data_dcad:
; BCD powers of 2
db $01, $02, $04, $08, $16, $32, $64
Func_dcb4: ; 0xdcb4
ld a, [wd517]
cp $f
ld a, $81
jr nz, .asm_dcbf
ld a, $84
.asm_dcbf
ld [wBottomMessageBuffer + $46], a
ret
LoadBallGfx: ; 0xdcc3
xor a
ld [wd4c8], a
ld a, [wBallType]
cp GREAT_BALL
jr nc, .notPokeBall
ld a, Bank(PinballPokeballGfx)
ld hl, PinballPokeballGfx
ld de, vTilesOB tile $40
ld bc, $0200
call LoadOrCopyVRAMData
ret
.notPokeBall
cp ULTRA_BALL
jr nc, .notGreatBall
ld a, Bank(PinballGreatballGfx)
ld hl, PinballGreatballGfx
ld de, vTilesOB tile $40
ld bc, $0200
call LoadOrCopyVRAMData
ret
.notGreatBall
cp MASTER_BALL
jr nc, .notUltraBall
ld a, Bank(PinballUltraballGfx)
ld hl, PinballUltraballGfx
ld de, vTilesOB tile $40
ld bc, $0200
call LoadOrCopyVRAMData
ret
.notUltraBall
ld a, Bank(PinballMasterballGfx)
ld hl, PinballMasterballGfx
ld de, vTilesOB tile $40
ld bc, $0200
call LoadOrCopyVRAMData
ret
LoadMiniBallGfx: ; 0xdd12
ld a, $1
ld [wd4c8], a
ld a, [wBallType]
cp GREAT_BALL
jr nc, .notPokeBall
ld a, Bank(PinballPokeballMiniGfx)
ld hl, PinballPokeballMiniGfx
ld de, vTilesOB tile $40
ld bc, $0200
call LoadOrCopyVRAMData
ret
.notPokeBall
cp ULTRA_BALL
jr nc, .notGreatBall
ld a, Bank(PinballGreatballMiniGfx)
ld hl, PinballGreatballMiniGfx
ld de, vTilesOB tile $40
ld bc, $0200
call LoadOrCopyVRAMData
ret
.notGreatBall
cp MASTER_BALL
jr nc, .notUltraBall
ld a, Bank(PinballUltraballMiniGfx)
ld hl, PinballUltraballMiniGfx
ld de, vTilesOB tile $40
ld bc, $0200
call LoadOrCopyVRAMData
ret
.notUltraBall
ld a, Bank(PinballMasterballMiniGfx)
ld hl, PinballMasterballMiniGfx
ld de, vTilesOB tile $40
ld bc, $0200
call LoadOrCopyVRAMData
ret
Func_dd62: ; 0xdd62
ld a, $2
ld [wd4c8], a
ld a, $2a
ld hl, PinballBallMiniGfx
ld de, vTilesOB tile $40
ld bc, $0200
call LoadOrCopyVRAMData
ret
RedField_HandleBallLoss: ; 0xdd76
ld a, [wBallSaverTimerFrames]
ld hl, wBallSaverTimerSeconds
or [hl]
jr z, .rip
ld a, [wNumTimesBallSavedTextWillDisplay]
bit 7, a
jr nz, .skip_save_text
dec a
ld [wNumTimesBallSavedTextWillDisplay], a
push af
ld de, BallSavedText
call Func_dc6d
pop af
jr nz, .skip_save_text
ld a, $1
ld [wBallSaverTimerFrames], a
ld [wBallSaverTimerSeconds], a
.skip_save_text
lb de, $15, $02
call PlaySoundEffect
ret
.rip
ld de, $0000
call PlaySong
ld bc, $001e
call AdvanceFrames
lb de, $25, $24
call PlaySoundEffect
call Start20SecondSaverTimer
ld a, $1
ld [wd4c9], a
xor a
ld [wd4de], a
ld [wd4df], a
call Func_ddfd
ld a, [wd49b]
and a
jr z, .asm_dddd
dec a
ld [wd49b], a
ld a, $1
ld [wd49c], a
ld de, EndOfBallBonusText
call Func_dc6d
ret
.asm_dddd
ld a, [wd49d]
ld hl, wd49e
cp [hl]
jr z, .asm_ddf1
inc a
ld [wd49d], a
ld de, EndOfBallBonusText
call Func_dc6d
ret
.asm_ddf1
ld de, EndOfBallBonusText
call Func_dc6d
ld a, $1
ld [wGameOver], a
ret
Func_ddfd: ; 0xddfd
ld a, [wInSpecialMode]
and a
ret z
ld a, [wSpecialMode]
and a
jr nz, .asm_de14
callba Func_10157
jr .asm_de40
.asm_de14
cp $1
jr nz, .asm_de2d
xor a
ld [wd604], a
ld a, $1e
ld [wd607], a
callba Func_10ac8
jr .asm_de40
.asm_de2d
xor a
ld [wd604], a
ld a, $1e
ld [wd607], a
callba Func_3022b
.asm_de40
ld a, [wd7ad]
ld c, a
ld a, [wStageCollisionState]
and $1
or c
ld [wStageCollisionState], a
ret
Func_de4e: ; 0xde4e
ret
BlueField_HandleBallLoss: ; 0xde4f
ld a, [wBallSaverTimerFrames]
ld hl, wBallSaverTimerSeconds
or [hl]
jr z, .rip
ld a, [wNumTimesBallSavedTextWillDisplay]
bit 7, a
jr nz, .skip_save_text
dec a
ld [wNumTimesBallSavedTextWillDisplay], a
push af
ld de, BallSavedText
call Func_dc6d
pop af
jr nz, .skip_save_text
ld a, $1
ld [wBallSaverTimerFrames], a
ld [wBallSaverTimerSeconds], a
.skip_save_text
lb de, $15, $02
call PlaySoundEffect
ret
.rip
ld de, $0000
call PlaySong
ld bc, $001e
call AdvanceFrames
lb de, $25, $24
call PlaySoundEffect
call Start20SecondSaverTimer
ld a, $1
ld [wd4c9], a
xor a
ld [wd4de], a
ld [wd4df], a
call Func_ded6
ld a, [wd49b]
and a
jr z, .asm_deb6
dec a
ld [wd49b], a
ld a, $1
ld [wd49c], a
ld de, EndOfBallBonusText
call Func_dc6d
ret
.asm_deb6
ld a, [wd49d]
ld hl, wd49e
cp [hl]
jr z, .asm_deca
inc a
ld [wd49d], a
ld de, EndOfBallBonusText
call Func_dc6d
ret
.asm_deca
ld de, EndOfBallBonusText
call Func_dc6d
ld a, $1
ld [wGameOver], a
ret
Func_ded6: ; 0xded6
ld a, [wInSpecialMode]
and a
ret z
ld a, [wSpecialMode]
and a
jr nz, .asm_deec
callba Func_10157
ret
.asm_deec
cp $1
jr nz, .asm_df05
ld a, $0
ld [wd604], a
ld a, $1e
ld [wd607], a
callba Func_10ac8
ret
.asm_df05
ld a, $0
ld [wd604], a
ld a, $1e
ld [wd607], a
callba Func_3022b
ret
Func_df1a: ; 0xdf1a
ld a, [wd4ad]
ld hl, wCurrentStage
cp [hl]
ret z
ld a, [wd6a8]
and a
jr nz, .asm_df57
ld a, [wd6a2]
cp $5
jr c, .asm_df50
xor a
ld [wd4ae], a
ld a, [wd6a7]
and a
ret nz
ld [wd548], a
ld [wd549], a
ld [wBallSpin], a
ld [wBallRotation], a
ld hl, wBallXVelocity
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld a, $1
ld [wd6a7], a
.asm_df50
lb de, $00, $02
call PlaySoundEffect
ret
.asm_df57
xor a
ld [wd495], a
ld a, $1
ld [wd496], a
ld a, $2
ld [wd4c8], a
xor a
ld [wd7ac], a
ld a, [wd49a]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, EndGengarStageText
call LoadTextHeader
ret
Func_df7e: ; 0xdf7e
ld a, [wd4ad]
ld hl, wCurrentStage
cp [hl]
ret z
ld a, [wd6b3]
and a
jr nz, .asm_dfbb
ld a, [wd6b1]
cp $8
jr c, .asm_dfb4
xor a
ld [wd4ae], a
ld a, [wd6b2]
and a
ret nz
ld [wd548], a
ld [wd549], a
ld [wBallSpin], a
ld [wBallRotation], a
ld hl, wBallXVelocity
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld a, $1
ld [wd6b2], a
.asm_dfb4
lb de, $00, $0b
call PlaySoundEffect
ret
.asm_dfbb
xor a
ld [wd495], a
ld a, $1
ld [wd496], a
ld a, $2
ld [wd4c8], a
xor a
ld [wd7ac], a
ld a, [wd49a]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, EndMewtwoStageText
call LoadTextHeader
ret
Func_dfe2: ; 0xdfe2
xor a
ld [wd64e], a
ld a, [wd7be]
and a
jr z, .asm_dff2
ld a, [wd49a]
and a
jr z, .asm_e00f
.asm_dff2
ld a, [wMeowthStageScore]
cp $14
jr nc, .asm_e00f
cp $5
jr c, .asm_e001
sub $4
jr .asm_e002
.asm_e001
xor a
.asm_e002
ld [wMeowthStageScore], a
callba Func_24fa3
.asm_e00f
ld a, [wd4ad]
ld hl, wCurrentStage
cp [hl]
ret z
ld a, [wd712]
cp $0
jr nz, .asm_e025
lb de, $00, $02
call PlaySoundEffect
ret
.asm_e025
xor a
ld [wd57e], a
ld [wd57d], a
xor a
ld [wd495], a
ld a, $1
ld [wd496], a
ld a, $2
ld [wd4c8], a
xor a
ld [wd7ac], a
ld [wd712], a
ld a, [wd49a]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, EndMeowthStageText
call LoadTextHeader
ret
Func_e056: ; 0xe056
ld a, [wd4ad]
ld hl, wCurrentStage
cp [hl]
ret z
lb de, $00, $0b
call PlaySoundEffect
xor a
ld [wd495], a
ld a, $1
ld [wd496], a
ld a, $2
ld [wd4c8], a
xor a
ld [wd7ac], a
ld a, [wd49a]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, EndDiglettStageText
call LoadTextHeader
ret
Func_e08b: ; 0xe08b
xor a
ld [wd64e], a
ld a, [wd7be]
and a
jr z, .asm_e09b
ld a, [wd49a]
and a
jr z, .asm_e0b8
.asm_e09b
ld a, [wd793]
cp $14
jr nc, .asm_e0b8
cp $5
jr c, .asm_e0aa
sub $4
jr .asm_e0ab
.asm_e0aa
xor a
.asm_e0ab
ld [wd793], a
callba Func_262f4
.asm_e0b8
ld a, [wd4ad]
ld hl, wCurrentStage
cp [hl]
ret z
ld a, [wd794]
cp $0
jr nz, .asm_e0c8
ret
.asm_e0c8
lb de, $00, $02
call PlaySoundEffect
xor a
ld [wd57d], a
ld [wd57d], a
ld [wd495], a
ld a, $1
ld [wd496], a
ld a, $2
ld [wd4c8], a
xor a
ld [wd7ac], a
ld [wd794], a
ld a, [wd49a]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, EndSeelStageText
call LoadTextHeader
ret
HandleFlippers: ; 0xe0fe
xor a
ld [wFlipperCollision], a
ld [hFlipperYCollisionAttribute], a
ld [wFlipperXForce], a
ld [wFlipperXForce + 1], a
call Func_e118
call CheckFlipperCollision
ld a, [wFlipperCollision]
and a
call nz, HandleFlipperCollision
ret
Func_e118: ; 0xe118
call PlayFlipperSoundIfPressed
ld a, [wd7af]
ld [wLeftFlipperAnimationState], a
ld a, [wd7b3]
ld [wRightFlipperAnimationState], a
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed2
ld hl, -$0333
jr z, .asm_e13b
ld a, [wd7be]
and a
jr nz, .asm_e13b
ld hl, $0333
.asm_e13b
ld a, [wd7af]
and a
jr nz, .asm_e145
bit 7, h
jr nz, .asm_e14d
.asm_e145
cp $f
jr nz, .asm_e150
bit 7, h
jr nz, .asm_e150
.asm_e14d
ld hl, $0000
.asm_e150
ld a, l
ld [wd7b0], a
ld a, h
ld [wd7b1], a
ld a, [wd7ae]
ld c, a
ld a, [wd7af]
ld b, a
add hl, bc
bit 7, h
jr nz, .asm_e16f
ld a, h
cp $10
jr c, .asm_e172
ld hl, $0f00
jr .asm_e172
.asm_e16f
ld hl, $0000
.asm_e172
ld a, l
ld [wd7ae], a
ld a, h
ld [wd7af], a
ld hl, wKeyConfigRightFlipper
call IsKeyPressed2
ld hl, -$0333
jr z, .asm_e18e
ld a, [wd7be]
and a
jr nz, .asm_e18e
ld hl, $0333
.asm_e18e
ld a, [wd7b3]
and a
jr nz, .asm_e198
bit 7, h
jr nz, .asm_e1a0
.asm_e198
cp $f
jr nz, .asm_e1a3
bit 7, h
jr nz, .asm_e1a3
.asm_e1a0
ld hl, $0000
.asm_e1a3
ld a, l
ld [wd7b4], a
ld a, h
ld [wd7b5], a
ld a, [wd7b2]
ld c, a
ld a, [wd7b3]
ld b, a
add hl, bc
bit 7, h
jr nz, .asm_e1c2
ld a, h
cp $10
jr c, .asm_e1c5
ld hl, $0f00
jr .asm_e1c5
.asm_e1c2
ld hl, $0000
.asm_e1c5
ld a, l
ld [wd7b2], a
ld a, h
ld [wd7b3], a
ret
PlayFlipperSoundIfPressed: ; 0xe1ce
ld a, [wd7be]
and a
ret nz
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed
jr z, .asm_e1e2
lb de, $00, $0c
call PlaySoundEffect
ret
.asm_e1e2
ld hl, wKeyConfigRightFlipper
call IsKeyPressed
ret z
lb de, $00, $0c
call PlaySoundEffect
ret
CheckFlipperCollision: ; 0xe1f0
ld a, [wBallXPos + 1]
cp $50 ; which half of the screen is the ball in?
jp nc, CheckRightFlipperCollision ; right half of screen
; fall through
CheckLeftFlipperCollision:
ld hl, wBallXPos
ld c, $ba
ld a, [hli]
ld [$ff00+c], a
inc c
ld a, [hli]
ld [$ff00+c], a
inc c
ld a, [hli]
ld [$ff00+c], a
inc c
ld a, [hli]
ld [$ff00+c], a
inc c
ld a, [wLeftFlipperAnimationState]
ld [$ffc2], a
ld a, [wd7af]
ld [$ffc3], a
call ReadFlipperCollisionAttributes
ld a, [wFlipperCollision]
and a
ret z
ld a, [wd7b0]
ld [$ffc0], a
ld a, [wd7b1]
ld [$ffc1], a
ret
CheckRightFlipperCollision: ; 0xe226
; ball is in right half of screen
ld hl, wBallXPos
ld c, $ba
ld a, [hli]
sub $1
cpl
ld [$ff00+c], a
inc c
ld a, [hli]
sbc $a0
cpl
ld [$ff00+c], a
inc c
ld a, [hli]
ld [$ff00+c], a
inc c
ld a, [hli]
ld [$ff00+c], a
inc c
ld a, [wRightFlipperAnimationState]
ld [$ffc2], a
ld a, [wd7b3]
ld [$ffc3], a
call ReadFlipperCollisionAttributes
ld a, [wFlipperCollision]
and a
ret z
; collision with flipper occurred
ld a, [wd7b4]
ld [$ffc0], a
ld a, [wd7b5]
ld [$ffc1], a
ret
ReadFlipperCollisionAttributes: ; 0xe25a
ld a, [$ffbb] ; ball x-position high byte
sub $2b ; check if ball is in x-position range of flippers
ret c
cp $30
ret nc
; ball is in x-position range of flippers
ld [$ffbb], a ; x offset of flipper horizontal range
ld a, [$ffbd] ; ball y-position high byte
sub $7b ; check if ball is in y-position range of flippers
ret c
cp $20
ret nc
; ball is in potential collision with flippers
ld [$ffbd], a ; y offset of flipper vertical range
ld a, [$ffc2] ; flipper animation state
.asm_e270
push af
ld l, $0
ld h, a ; multiply a by 0x600
sla a
sla h
sla h
add h
ld h, a ; hl = a * 0x600 (this is the length of the flipper collision attributes)
ld a, [$ffbb] ; x offset of flipper horizontal range
ld c, a
ld b, $0
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b ; bc = (x offset of flipper horizontal range) * 32
; Each row of the flipper collision attributes is 32 bytes long.
add hl, bc ; hl points to the start of the row in the flipper collisoin attributes
ld a, [$ffbd] ; y offset of flipper vertical range
ld c, a
ld b, $0
add hl, bc ; hl points to the attribute byte in the flipper collision attributes
ld d, h
ld e, l ; de points to the attribute byte in the flipper collision attributes
ld a, h
cp $40
jr nc, .secondBank
add $40
ld h, a
ld a, Bank(FlipperHorizontalCollisionAttributes)
jr .readAttributeByte
.secondBank
ld a, Bank(FlipperHorizontalCollisionAttributes2)
.readAttributeByte
call ReadByteFromBank
ld b, a
and a
jr nz, .collision
; no collision
pop af ; a = flipper animation state(?)
ld hl, $ffc3
cp [hl]
ret z
jr c, .asm_e2be
dec a
jr .asm_e270
.asm_e2be
inc a
jr .asm_e270
.collision
pop af ; a = flipper animation state(?)
ld a, b ; a = collision attribute
ld [hFlipperYCollisionAttribute], a
ld h, d
ld l, e
ld a, h
cp $20
jr nc, .asm_e2d3
add $60
ld h, a
ld a, Bank(FlipperVerticalCollisionAttributes)
jr .asm_e2d8
.asm_e2d3
add $20
ld h, a
ld a, Bank(FlipperVerticalCollisionAttributes2)
.asm_e2d8
call ReadByteFromBank
ld [wFlipperXCollisionAttribute], a
ld a, $1
ld [wFlipperCollision], a
ret
Func_e2e4:
ld a, c
or b
or l
or h
or e
or d
jr nz, .asm_e2f3
ld a, [$ffba]
ld e, a
ld a, [$ffbb]
ld d, a
ret
.asm_e2f3
ld a, d
xor h
push af
bit 7, d
jr z, .asm_e301
ld a, e
cpl
ld e, a
ld a, d
cpl
ld d, a
inc de
.asm_e301
bit 7, h
jr z, .asm_e317
ld a, c
cpl
ld c, a
ld a, b
cpl
ld b, a
ld a, l
cpl
ld l, a
ld a, h
cpl
ld h, a
inc bc
ld a, b
or c
jr nz, .asm_e317
inc hl
.asm_e317
push bc
ld c, $11
ld a, d
or e
jr nz, .asm_e324
pop bc
ld de, $7fff
jr .asm_e36a
.asm_e324
bit 7, d
jr nz, .asm_e32f
sla e
rl d
inc c
jr .asm_e324
.asm_e32f
ld a, c
ld [$ff8c], a
pop bc
xor a
ld [$ff8d], a
ld [$ff8e], a
.asm_e338
jr c, .asm_e344
ld a, d
cp h
jr nz, .asm_e342
ld a, e
cp l
jr z, .asm_e344
.asm_e342
jr nc, .asm_e34b
.asm_e344
ld a, l
sub e
ld l, a
ld a, h
sbc d
ld h, a
scf
.asm_e34b
ld a, [$ff8d]
rla
ld [$ff8d], a
ld a, [$ff8e]
rla
ld [$ff8e], a
sla c
rl b
rl l
rl h
ld a, [$ff8c]
dec a
ld [$ff8c], a
jr nz, .asm_e338
ld a, [$ff8d]
ld e, a
ld a, [$ff8e]
ld d, a
.asm_e36a
pop af
bit 7, a
ret z
ld a, e
sub $1
cpl
ld e, a
ld a, d
sbc $0
cpl
ld d, a
ret
Func_e379: ; 0xe379
ld a, b
xor d
ld [$ffbe], a
bit 7, b
jr z, .asm_e388
ld a, c
cpl
ld c, a
ld a, b
cpl
ld b, a
inc bc
.asm_e388
bit 7, d
jr z, .asm_e393
ld a, e
cpl
ld e, a
ld a, d
cpl
ld d, a
inc de
.asm_e393
push bc
push de
ld c, d
call Func_e410
pop de
pop bc
push hl
push bc
push de
ld c, e
call Func_e410
pop de
pop bc
push hl
push bc
push de
ld b, d
call Func_e410
pop de
pop bc
push hl
ld b, e
call Func_e410
ld c, l
ld l, h
xor a
ld h, a
pop de
add hl, de
rl a
pop de
add hl, de
jr nc, .asm_e3bf
inc a
.asm_e3bf
ld b, l
Data_e3c0:
ld l, h
ld h, a
pop de
add hl, de
ld a, [$ffbe]
bit 7, a
ret z
ld a, c
sub $1
cpl
ld c, a
ld a, b
sbc $0
cpl
ld b, a
ld a, l
sbc $0
cpl
ld l, a
ld a, h
sbc $0
cpl
ld h, a
ret
Func_e3de:
push bc
push de
ld c, d
call Func_e410
pop de
pop bc
push hl
push bc
push de
ld c, e
call Func_e410
pop de
pop bc
push hl
push bc
push de
ld b, d
call Func_e410
pop de
pop bc
push hl
ld b, e
call Func_e410
ld c, l
ld l, h
xor a
ld h, a
pop de
add hl, de
rl a
pop de
add hl, de
jr nc, .asm_e40a
inc a
.asm_e40a
ld b, l
ld l, h
ld h, a
pop de
add hl, de
ret
Func_e410: ; 0xe410
ld a, b
cp c
jr nc, .asm_e416
ld b, c
ld c, a
.asm_e416
ld h, $3e
ld l, c
ld e, [hl]
inc h
ld d, [hl]
ld l, b
ld a, [hl]
dec h
ld l, [hl]
ld h, a
add hl, de
push af
ld d, $3e
ld a, b
sub c
ld e, a
ld a, [de]
ld c, a
inc d
ld a, [de]
ld b, a
ld a, l
sub c
ld l, a
ld a, h
sbc b
ld h, a
jr nc, .asm_e43c
pop af
ccf
rr h
rr l
ret
.asm_e43c
pop af
rr h
rr l
ret
HandleFlipperCollision: ; 0xe442
; This is called when the ball is colliding with either the
; right or left flipper.
ld a, $1
ld [wd7e9], a
xor a
ld [wBallPositionPointerOffsetFromStageTopLeft], a
ld [wBallPositionPointerOffsetFromStageTopLeft + 1], a
ld [wCurCollisionAttribute], a
ld [wd7f6], a
ld [wd7f7], a
ld a, [hFlipperYCollisionAttribute]
sla a
ld c, a
ld b, $0
ld hl, Data_e538
add hl, bc
ld a, [hli]
ld c, a
ld a, [hl]
ld b, a
ld a, [$ffc0]
ld e, a
ld a, [$ffc1]
ld d, a
sla e
rl d
sla e
rl d ; multiplied de by 4
call Func_e379
ld a, b
ld [wFlipperYForce], a
ld a, l
ld [wFlipperYForce + 1], a
ld a, [wBallXPos + 1]
cp $50 ; which flipper did the ball hit?
ld a, [wFlipperXCollisionAttribute]
jr c, .asm_e48b
cpl ; invert the x collision attribute
inc a
.asm_e48b
ld [wCollisionForceAngle], a
ld a, $1
ld [wd7eb], a
ld a, [wFlipperYForce + 1]
bit 7, a
ret z
xor a
ld [wFlipperYForce], a
ld [wFlipperYForce + 1], a
ret
DrawFlippers: ; 0xe4a1
ld a, [wCurrentStage]
and a
ret z
ld hl, FlippersOAMPixelOffsetData
ld a, [hSCX]
ld d, a
ld a, [hSCY]
ld e, a
ld a, [hli]
sub d
ld b, a
ld a, [hli]
sub e
ld c, a
push hl
ld hl, LeftFlipperOAMIds
ld a, [wd7af]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
cp $b
jr nz, .asm_e4d6
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_e4d4
ld a, [wd7be]
and a
jr z, .asm_e4d4
ld a, $18
jr .asm_e4d6
.asm_e4d4
ld a, $b
.asm_e4d6
call LoadOAMData
pop hl
ld a, [hSCX]
ld d, a
ld a, [hSCY]
ld e, a
ld a, [hli]
sub d
ld b, a
ld a, [hli]
sub e
ld c, a
ld hl, RightFlipperOAMIds
ld a, [wd7b3]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
cp $8
jr nz, .asm_e506
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_e504
ld a, [wd7be]
and a
jr z, .asm_e504
ld a, $17
jr .asm_e506
.asm_e504
ld a, $8
.asm_e506
call LoadOAMData
ret
FlippersOAMPixelOffsetData:
; flipper oam pixel offsets
dw $7b38 ; left flipper
dw $7b68 ; right flipper
LeftFlipperOAMIds:
; TODO: Don't know how exactly these are used, but it is used by the animation
; when the flipper is activated and rotates upward to hit the pinball.
db $0b, $0b, $0b, $0b, $0b, $0b, $0b
db $0c, $0c, $0c, $0c, $0c, $0c, $0c
db $0d, $0d, $0d, $0d, $0d, $0d, $0d
RightFlipperOAMIds:
db $08, $08, $08, $08, $08, $08, $08
db $09, $09, $09, $09, $09, $09, $09
db $0A, $0A, $0A, $0A, $0A, $0A, $0A
Data_e538: ; 0xe538
dw $0000
dw $000C
dw $001C
dw $0030
dw $0038
dw $0048
dw $005C
dw $006C
dw $0070
dw $0080
dw $0094
dw $00A4
dw $00B4
dw $00C4
dw $00D4
dw $00E4
dw $00F8
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
dw $00FC
LoadStageCollisionAttributes: ; 0xe578
ld a, [wCurrentStage]
sla a
ld c, a
ld b, $0
ld hl, StageCollisionAttributesPointers
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [hli]
and a
jr z, .asm_e598
ld a, [wStageCollisionState]
sla a
ld c, a
sla a
add c
ld c, a
ld b, $0 ; bc = 6 * [wStageCollisionState]
add hl, bc
.asm_e598
ld de, wStageCollisionMapPointer
ld b, $6
.asm_e59d
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .asm_e59d
call LoadCollisionAttributes
ret
StageCollisionAttributesPointers: ; 0xe5a7
dw StageRedFieldTopCollisionAttributesPointers
dw StageRedFieldBottomCollisionAttributesPointers
dw StageUnusedCollisionAttributesPointers
dw StageUnused2CollisionAttributesPointers
dw StageBlueFieldTopCollisionAttributesPointers
dw StageBlueFieldBottomCollisionAttributesPointers
dw StageGengarBonusCollisionAttributesPointers
dw StageGengarBonusCollisionAttributesPointers
dw StageMewtwoBonusCollisionAttributesPointers
dw StageMewtwoBonusCollisionAttributesPointers
dw StageMeowthBonusCollisionAttributesPointers
dw StageMeowthBonusCollisionAttributesPointers
dw StageDiglettBonusCollisionAttributesPointers
dw StageDiglettBonusCollisionAttributesPointers
dw StageSeelBonusCollisionAttributesPointers
dw StageSeelBonusCollisionAttributesPointers
StageRedFieldTopCollisionAttributesPointers: ; 0xe5c7
db $01 ; multiple pair entries
dwb StageRedFieldTopCollisionAttributes0, Bank(StageRedFieldTopCollisionAttributes0)
dwb StageRedFieldTopCollisionMasks0, Bank(StageRedFieldTopCollisionMasks0)
dwb StageRedFieldTopCollisionAttributes1, Bank(StageRedFieldTopCollisionAttributes1)
dwb StageRedFieldTopCollisionMasks0, Bank(StageRedFieldTopCollisionMasks0)
dwb StageRedFieldTopCollisionAttributes2, Bank(StageRedFieldTopCollisionAttributes2)
dwb StageRedFieldTopCollisionMasks1, Bank(StageRedFieldTopCollisionMasks1)
dwb StageRedFieldTopCollisionAttributes3, Bank(StageRedFieldTopCollisionAttributes3)
dwb StageRedFieldTopCollisionMasks1, Bank(StageRedFieldTopCollisionMasks1)
dwb StageRedFieldTopCollisionAttributes4, Bank(StageRedFieldTopCollisionAttributes4)
dwb StageRedFieldTopCollisionMasks2, Bank(StageRedFieldTopCollisionMasks2)
dwb StageRedFieldTopCollisionAttributes5, Bank(StageRedFieldTopCollisionAttributes5)
dwb StageRedFieldTopCollisionMasks2, Bank(StageRedFieldTopCollisionMasks2)
dwb StageRedFieldTopCollisionAttributes6, Bank(StageRedFieldTopCollisionAttributes6)
dwb StageRedFieldTopCollisionMasks3, Bank(StageRedFieldTopCollisionMasks3)
dwb StageRedFieldTopCollisionAttributes7, Bank(StageRedFieldTopCollisionAttributes7)
dwb StageRedFieldTopCollisionMasks3, Bank(StageRedFieldTopCollisionMasks3)
StageRedFieldBottomCollisionAttributesPointers: ; 0xe5f8
db $00 ; single pair entry
dwb StageRedFieldBottomCollisionAttributes, Bank(StageRedFieldBottomCollisionAttributes)
dwb StageRedFieldBottomCollisionMasks, Bank(StageRedFieldBottomCollisionMasks)
StageUnusedCollisionAttributesPointers: ; 0xe5ff
; This entry is never used
db $00
StageUnused2CollisionAttributesPointers: ; 0xe600
; This entry is never used
db $00
StageBlueFieldTopCollisionAttributesPointers: ; 0xe601
db $01 ; multiple pair entries
dwb StageBlueFieldTopCollisionAttributesBallEntrance, Bank(StageBlueFieldTopCollisionAttributesBallEntrance)
dwb StageBlueFieldTopCollisionMasks, Bank(StageBlueFieldTopCollisionMasks)
dwb StageBlueFieldTopCollisionAttributes, Bank(StageBlueFieldTopCollisionAttributes)
dwb StageBlueFieldTopCollisionMasks, Bank(StageBlueFieldTopCollisionMasks)
StageBlueFieldBottomCollisionAttributesPointers: ; 0xe60e
db $00 ; single pair entry
dwb StageBlueFieldBottomCollisionAttributes, Bank(StageBlueFieldBottomCollisionAttributes)
dwb StageBlueFieldBottomCollisionMasks, Bank(StageBlueFieldBottomCollisionMasks)
StageGengarBonusCollisionAttributesPointers: ; 0xe615
db $01 ; multiple pair entries
dwb StageGengarBonusCollisionAttributesBallEntrance, Bank(StageGengarBonusCollisionAttributesBallEntrance)
dwb StageGengarBonusCollisionMasks, Bank(StageGengarBonusCollisionMasks)
dwb StageGengarBonusCollisionAttributes, Bank(StageGengarBonusCollisionAttributes)
dwb StageGengarBonusCollisionMasks, Bank(StageGengarBonusCollisionMasks)
StageMewtwoBonusCollisionAttributesPointers: ; 0xe622
db $01 ; multiple pair entries
dwb StageMewtwoBonusCollisionAttributesBallEntrance, Bank(StageMewtwoBonusCollisionAttributesBallEntrance)
dwb StageMewtwoBonusCollisionMasks, Bank(StageMewtwoBonusCollisionMasks)
dwb StageMewtwoBonusCollisionAttributes, Bank(StageMewtwoBonusCollisionAttributes)
dwb StageMewtwoBonusCollisionMasks, Bank(StageMewtwoBonusCollisionMasks)
StageMeowthBonusCollisionAttributesPointers: ; 0xe62f
db $01 ; multiple pair entries
dwb StageMeowthBonusCollisionAttributesBallEntrance, Bank(StageMeowthBonusCollisionAttributesBallEntrance)
dwb StageMeowthBonusCollisionMasks, Bank(StageMeowthBonusCollisionMasks)
dwb StageMeowthBonusCollisionAttributes, Bank(StageMeowthBonusCollisionAttributes)
dwb StageMeowthBonusCollisionMasks, Bank(StageMeowthBonusCollisionMasks)
StageDiglettBonusCollisionAttributesPointers: ; 0xe63c
db $01 ; multiple pair entries
dwb StageDiglettBonusCollisionAttributesBallEntrance, Bank(StageDiglettBonusCollisionAttributesBallEntrance)
dwb StageDiglettBonusCollisionMasks, Bank(StageDiglettBonusCollisionMasks)
dwb StageDiglettBonusCollisionAttributes, Bank(StageDiglettBonusCollisionAttributes)
dwb StageDiglettBonusCollisionMasks, Bank(StageDiglettBonusCollisionMasks)
StageSeelBonusCollisionAttributesPointers: ; 0xe649
db $01 ; multiple pair entries
dwb StageSeelBonusCollisionAttributesBallEntrance, Bank(StageSeelBonusCollisionAttributesBallEntrance)
dwb StageSeelBonusCollisionMasks, Bank(StageSeelBonusCollisionMasks)
dwb StageSeelBonusCollisionAttributes, Bank(StageSeelBonusCollisionAttributes)
dwb StageSeelBonusCollisionMasks, Bank(StageSeelBonusCollisionMasks)
LoadCollisionAttributes: ; 0xe656
; Loads the stage's collision attributes into RAM
; Input: [wStageCollisionMapPointer] = pointer to collision attributes map
; [wStageCollisionMapBank] = ROM bank of collision attributes map
ld hl, wStageCollisionMapPointer
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wStageCollisionMapBank]
ld de, wStageCollisionMap
ld bc, $0300
call FarCopyData
ld hl, wStageCollisionMapPointer
ld [hl], (wStageCollisionMap & $ff)
inc hl
ld [hl], (wStageCollisionMap >> 8)
inc hl
ld [hl], $0 ; Bank 0, because the data is in WRAM, so it doesn't matter which bank is saved
ret
FieldVerticalTransition: ; 0xe674
push af
ld a, [wd548]
push af
xor a
ld [wd548], a
ld [wd803], a
callba Func_84b7
call CleanOAMBuffer
pop af
ld [wd548], a
pop af
ld [wCurrentStage], a
xor a
ld [hBGP], a
ld [hOBP0], a
ld [hOBP1], a
rst AdvanceFrame
call Func_e5d
call Func_576
call ClearOAMBuffer
call Func_1129
call LoadStageCollisionAttributes
call Func_e6c2
call Func_e5d
call Func_588
ld a, $e4
ld [hBGP], a
ld a, $e1
ld [hOBP0], a
ld a, $e4
ld [hOBP1], a
ret
Func_e6c2: ; 0xe6c2
ld a, [wCurrentStage]
bit 0, a
ld a, $86
jr z, .asm_e6d5
ld a, [wd5ca]
and a
ld a, $86
jr nz, .asm_e6d5
ld a, $90
.asm_e6d5
ld [hWY], a
ld hl, StageGfxPointers_GameBoy
ld a, [hGameBoyColorFlag]
and a
jr z, .loadData
ld hl, StageGfxPointers_GameBoyColor
.loadData
ld a, [wCurrentStage]
call LoadVideoData
xor a
ld [wd7f2], a
callba Func_8471
ret
StageGfxPointers_GameBoy: ; 0xe6f7
dw StageRedFieldTopGfx_GameBoy
dw StageRedFieldBottomGfx_GameBoy
dw VideoData_e896
dw VideoData_e8bd
dw StageBlueFieldTopGfx_GameBoy
dw StageBlueFieldBottomGfx_GameBoy
dw StageGengarBonusGfx_GameBoy
dw StageGengarBonusGfx_GameBoy
dw StageMewtwoBonusGfx_GameBoy
dw StageMewtwoBonusGfx_GameBoy
dw StageMeowthBonusGfx_GameBoy
dw StageMeowthBonusGfx_GameBoy
dw StageDiglettBonusGfx_GameBoy
dw StageDiglettBonusGfx_GameBoy
dw StageSeelBonusGfx_GameBoy
dw StageSeelBonusGfx_GameBoy
StageGfxPointers_GameBoyColor: ; 0xe717
dw StageRedFieldTopGfx_GameBoyColor
dw StageRedFieldBottomGfx_GameBoyColor
dw VideoData_e8a6
dw VideoData_e8d4
dw StageBlueFieldTopGfx_GameBoyColor
dw StageBlueFieldBottomGfx_GameBoyColor
dw StageGengarBonusGfx_GameBoyColor
dw StageGengarBonusGfx_GameBoyColor
dw StageMewtwoBonusGfx_GameBoyColor
dw StageMewtwoBonusGfx_GameBoyColor
dw StageMeowthBonusGfx_GameBoyColor
dw StageMeowthBonusGfx_GameBoyColor
dw StageDiglettBonusGfx_GameBoyColor
dw StageDiglettBonusGfx_GameBoyColor
dw StageSeelBonusGfx_GameBoyColor
dw StageSeelBonusGfx_GameBoyColor
StageRedFieldTopGfx_GameBoy: ; 0xe737
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES StageRedFieldTopGfx1, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $200
VIDEO_DATA_TILES StageRedFieldTopGfx2, vTilesOB + $600, $200
VIDEO_DATA_TILES StageRedFieldTopStatusBarSymbolsGfx_GameBoy, vTilesSH, $100
VIDEO_DATA_TILES StageRedFieldTopGfx3, vTilesSH + $100, $1a0
VIDEO_DATA_TILES StageRedFieldTopBaseGameBoyGfx, vTilesSH + $2a0, $d60
VIDEO_DATA_TILEMAP StageRedFieldTopTilemap_GameBoy, vBGMap, $400
db $FF, $FF ; terminators
StageRedFieldTopGfx_GameBoyColor: ; 0xe771
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES StageRedFieldTopGfx1, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $200
VIDEO_DATA_TILES StageRedFieldTopGfx2, vTilesOB + $600, $200
VIDEO_DATA_TILES StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor, vTilesSH, $100
VIDEO_DATA_TILES StageRedFieldTopGfx3, vTilesSH + $100, $1a0
VIDEO_DATA_TILES StageRedFieldTopBaseGameBoyColorGfx, vTilesSH + $2a0, $d60
VIDEO_DATA_TILES_BANK2 StageRedFieldTopGfx4, vTilesSH, $1000
VIDEO_DATA_TILES_BANK2 StageRedFieldTopGfx5, vTilesOB, $200
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILES_BANK2 StageRedJapaneseCharactersGfx, vTilesOB + $200, $400
VIDEO_DATA_TILES_BANK2 StageRedJapaneseCharactersGfx2, vTilesSH + $100, $200
VIDEO_DATA_TILES_BANK2 StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor, vTilesSH, $100
VIDEO_DATA_TILEMAP StageRedFieldTopTilemap_GameBoyColor, vBGMap, $400
VIDEO_DATA_TILEMAP_BANK2 StageRedFieldTopTilemap2_GameBoyColor, vBGMap, $400
VIDEO_DATA_PALETTES StageRedFieldTopPalettes, $80
VIDEO_DATA_TILES_BANK2 StageRedFieldTopGfx6, vTilesOB + $7c0, $40
db $FF, $FF ; terminators
StageRedFieldBottomGfx_GameBoy: ; 0xe7ea
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES StageSharedBonusSlotGlowGfx, vTilesOB + $1a0, $160
VIDEO_DATA_TILES StageSharedArrowsGfx, vTilesOB + $300, $80
VIDEO_DATA_TILES StageSharedBonusSlotGlow2Gfx, vTilesOB + $380, $20
VIDEO_DATA_TILES StageSharedPikaBoltGfx, vTilesOB + $3c0, $440
VIDEO_DATA_TILES StageRedFieldBottomBaseGameBoyGfx, vTilesSH, $1000
VIDEO_DATA_TILES SaverTextOffGfx, vTilesSH + $2a0, $40
VIDEO_DATA_TILEMAP StageRedFieldBottomTilemap_GameBoy, vBGMap, $400
db $FF, $FF ; terminators
StageRedFieldBottomGfx_GameBoyColor: ; 0xe824
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES StageSharedBonusSlotGlowGfx, vTilesOB + $1a0, $160
VIDEO_DATA_TILES StageSharedArrowsGfx, vTilesOB + $300, $80
VIDEO_DATA_TILES StageSharedBonusSlotGlow2Gfx, vTilesOB + $380, $20
VIDEO_DATA_TILES StageSharedPikaBoltGfx, vTilesOB + $3c0, $440
VIDEO_DATA_TILES StageRedFieldBottomBaseGameBoyColorGfx, vTilesSH, $1000
VIDEO_DATA_TILES_BANK2 StageRedFieldBottomGfx5, vTilesSH, $1000
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILES SaverTextOffGfx, vTilesSH + $2a0, $40
VIDEO_DATA_TILES_BANK2 StageRedJapaneseCharactersGfx, vTilesOB + $200, $400
VIDEO_DATA_TILES_BANK2 StageRedJapaneseCharactersGfx2, vTilesSH + $100, $200
VIDEO_DATA_TILES_BANK2 StageRedFieldBottomBaseGameBoyColorGfx, vTilesSH, $100
VIDEO_DATA_TILEMAP StageRedFieldBottomTilemap_GameBoyColor, vBGMap, $400
VIDEO_DATA_TILEMAP_BANK2 StageRedFieldBottomTilemap2_GameBoyColor, vBGMap, $400
VIDEO_DATA_PALETTES StageRedFieldBottomPalettes, $80
VIDEO_DATA_TILES_BANK2 StageRedFieldTopGfx6, vTilesOB + $7c0, $40
db $FF, $FF ; terminators
VideoData_e896: ; 0xe896
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $200
db $FF, $FF ; terminators
VideoData_e8a6: ; 0xe8a6
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $200
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
db $FF, $FF ; terminators
VideoData_e8bd: ; 0xe8bd
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES PinballPokeballShakeGfx, vTilesOB + $380, $480
VIDEO_DATA_TILES SaverTextOffGfx, vTilesSH + $2a0, $40
db $FF, $FF ; terminators
VideoData_e8d4: ; 0xe8d4
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES PinballPokeballShakeGfx, vTilesOB + $380, $480
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILES SaverTextOffGfx, vTilesSH + $2a0, $40
db $FF, $FF ; terminators
StageBlueFieldTopGfx_GameBoy: ; 0xe8f2
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES StageBlueFieldTopGfx1, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $200
VIDEO_DATA_TILES StageBlueFieldTopGfx2, vTilesOB + $600, $200
VIDEO_DATA_TILES StageBlueFieldTopStatusBarSymbolsGfx_GameBoy, vTilesSH, $100
VIDEO_DATA_TILES StageBlueFieldTopGfx3, vTilesSH + $100, $1a0
VIDEO_DATA_TILES StageBlueFieldTopBaseGameBoyGfx, vTilesSH + $2a0, $d60
VIDEO_DATA_TILEMAP StageBlueFieldTopTilemap_GameBoy, vBGMap, $400
db $FF, $FF ; terminators
StageBlueFieldTopGfx_GameBoyColor: ; 0xe92c
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES StageBlueFieldTopGfx1, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $200
VIDEO_DATA_TILES StageBlueFieldTopGfx2, vTilesOB + $600, $200
VIDEO_DATA_TILES StageBlueFieldTopStatusBarSymbolsGfx_GameBoyColor, vTilesSH, $100
VIDEO_DATA_TILES StageBlueFieldTopGfx3, vTilesSH + $100, $1a0
VIDEO_DATA_TILES StageBlueFieldTopBaseGameBoyColorGfx, vTilesSH + $2a0, $d60
VIDEO_DATA_TILES_BANK2 StageBlueFieldTopGfx4, vTilesSH, $1000
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILEMAP StageBlueFieldTopTilemap_GameBoyColor, vBGMap, $400
VIDEO_DATA_TILEMAP_BANK2 StageBlueFieldTopTilemap2_GameBoyColor, vBGMap, $400
VIDEO_DATA_PALETTES StageBlueFieldTopPalettes, $80
db $FF, $FF ; terminators
StageBlueFieldBottomGfx_GameBoy: ; 0xe982
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES StageSharedBonusSlotGlowGfx, vTilesOB + $1a0, $160
VIDEO_DATA_TILES StageSharedArrowsGfx, vTilesOB + $300, $80
VIDEO_DATA_TILES StageSharedBonusSlotGlow2Gfx, vTilesOB + $380, $20
VIDEO_DATA_TILES StageSharedPikaBoltGfx, vTilesOB + $3c0, $440
VIDEO_DATA_TILES StageBlueFieldBottomBaseGameBoyGfx, vTilesSH, $1000
VIDEO_DATA_TILES SaverTextOffGfx, vTilesSH + $2a0, $40
VIDEO_DATA_TILEMAP StageBlueFieldBottomTilemap_GameBoy, vBGMap, $400
db $FF, $FF ; terminators
StageBlueFieldBottomGfx_GameBoyColor: ; 0xe9bc
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES StageSharedBonusSlotGlowGfx, vTilesOB + $1a0, $160
VIDEO_DATA_TILES StageSharedArrowsGfx, vTilesOB + $300, $80
VIDEO_DATA_TILES StageSharedBonusSlotGlow2Gfx, vTilesOB + $380, $20
VIDEO_DATA_TILES StageSharedPikaBoltGfx, vTilesOB + $3c0, $440
VIDEO_DATA_TILES StageBlueFieldBottomBaseGameBoyColorGfx, vTilesSH, $1000
VIDEO_DATA_TILES_BANK2 StageBlueFieldBottomGfx1, vTilesSH, $1000
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILES SaverTextOffGfx, vTilesSH + $2a0, $40
VIDEO_DATA_TILEMAP StageBlueFieldBottomTilemap_GameBoyColor, vBGMap, $400
VIDEO_DATA_TILEMAP_BANK2 StageBlueFieldBottomTilemap2_GameBoyColor, vBGMap, $400
VIDEO_DATA_PALETTES StageBlueFieldBottomPalettes, $80
db $FF, $FF ; terminators
StageGengarBonusGfx_GameBoy: ; 0xea12
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $320
VIDEO_DATA_TILES GengarBonusBaseGameBoyGfx, vTilesSH, $1000
VIDEO_DATA_TILES GengarBonusGastlyGfx, vTilesSH + $100, $180
VIDEO_DATA_TILES_BANK GengarBonusHaunterGfx + $180, Bank(GengarBonusHaunterGfx), vTilesSH + $280, $20
VIDEO_DATA_TILES_BANK GengarBonusHaunterGfx + $1a0, Bank(GengarBonusHaunterGfx), vTilesOB + $1a0, $100
VIDEO_DATA_TILES_BANK GengarBonusGengarGfx + $2a0, Bank(GengarBonusGengarGfx), vTilesOB + $2a0, $160
VIDEO_DATA_TILES_BANK GengarBonusGengarGfx + $400, Bank(GengarBonusGengarGfx), vTilesOB + $7a0, $60
VIDEO_DATA_TILES_BANK GengarBonusGengarGfx + $460, Bank(GengarBonusGengarGfx), vTilesSH + $2a0, $2a0
VIDEO_DATA_TILEMAP GengarBonusTilemap_GameBoy, vBGMap, $400
db $FF, $FF ; terminators
StageGengarBonusGfx_GameBoyColor: ; 0xea5a
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES StageSharedPikaBoltGfx, vTilesOB + $3c0, $440
VIDEO_DATA_TILES GengarBonusBaseGameBoyColorGfx, vTilesSH, $1000
VIDEO_DATA_TILES GengarBonusGastlyGfx, vTilesSH + $100, $180
VIDEO_DATA_TILES_BANK GengarBonusHaunterGfx + $180, Bank(GengarBonusHaunterGfx), vTilesSH + $280, $20
VIDEO_DATA_TILES_BANK GengarBonusHaunterGfx + $1a0, Bank(GengarBonusHaunterGfx), vTilesOB + $1a0, $100
VIDEO_DATA_TILES_BANK GengarBonusGengarGfx + $2a0, Bank(GengarBonusGengarGfx), vTilesOB + $2a0, $160
VIDEO_DATA_TILES_BANK GengarBonusGengarGfx + $400, Bank(GengarBonusGengarGfx), vTilesOB + $7a0, $60
VIDEO_DATA_TILES_BANK GengarBonusGengarGfx + $460, Bank(GengarBonusGengarGfx), vTilesSH + $2a0, $2a0
VIDEO_DATA_TILES_BANK2 GengarBonus1Gfx, vTilesSH, $1000
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILEMAP GengarBonusBottomTilemap_GameBoyColor, vBGMap, $400
VIDEO_DATA_TILEMAP_BANK2 GengarBonusBottomTilemap2_GameBoyColor, vBGMap, $400
VIDEO_DATA_PALETTES GengarBonusPalettes, $80
db $FF, $FF ; terminators
StageMewtwoBonusGfx_GameBoy: ; 0xeabe
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES MewtwoBonus1Gfx, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $320
VIDEO_DATA_TILES MewtwoBonus2Gfx, vTilesOB + $7a0, $60
VIDEO_DATA_TILES MewtwoBonusBaseGameBoyGfx, vTilesSH, $1000
VIDEO_DATA_TILES MewtwoBonus3Gfx, vTilesSH + $100, $1a0
VIDEO_DATA_TILES MewtwoBonus4Gfx, vTilesSH + $2a0, $2a0
VIDEO_DATA_TILEMAP MewtwoBonusTilemap_GameBoy, vBGMap, $400
db $FF, $FF ; terminators
StageMewtwoBonusGfx_GameBoyColor: ; 0xeaf8
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES MewtwoBonus1Gfx, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $320
VIDEO_DATA_TILES MewtwoBonus2Gfx, vTilesOB + $7a0, $60
VIDEO_DATA_TILES MewtwoBonusBaseGameBoyColorGfx, vTilesSH, $1000
VIDEO_DATA_TILES MewtwoBonus3Gfx, vTilesSH + $100, $1a0
VIDEO_DATA_TILES MewtwoBonus4Gfx, vTilesSH + $2a0, $2a0
; Can't use a macro here because it's copying the tiles from VRAM, not ROM.
dw vTilesOB
db $20 ; This is an arbitrary bank, since the data is in VRAM, not ROM.
dw vTilesSH
dw $4002
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILEMAP MewtoBonusBottomTilemap_GameBoyColor, vBGMap, $400
VIDEO_DATA_TILEMAP_BANK2 MewtoBonusBottomTilemap2_GameBoyColor, vBGMap, $400
VIDEO_DATA_PALETTES MewtwoBonusPalettes, $80
db $FF, $FF ; terminators
StageMeowthBonusGfx_GameBoy: ; 0xeb4e
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES MeowthBonusMeowth1Gfx, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $320
VIDEO_DATA_TILES MeowthBonusMeowth2Gfx, vTilesOB + $7a0, $60
VIDEO_DATA_TILES MeowthBonusBaseGameBoyGfx, vTilesSH, $a00
VIDEO_DATA_TILES MeowthBonusMeowth3Gfx, vTilesSH + $100, $1a0
VIDEO_DATA_TILES MeowthBonusMeowth4Gfx, vTilesSH + $2a0, $360
VIDEO_DATA_TILEMAP MeowthBonusTilemap_GameBoy, vBGMap, $400
db $FF, $FF ; terminators
StageMeowthBonusGfx_GameBoyColor: ; 0xeb88
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES MeowthBonusMeowth1Gfx, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $320
VIDEO_DATA_TILES MeowthBonusMeowth2Gfx, vTilesOB + $7a0, $60
VIDEO_DATA_TILES MeowthBonusBaseGameBoyColorGfx, vTilesSH, $900
VIDEO_DATA_TILES MeowthBonusMeowth3Gfx, vTilesSH + $100, $1a0
VIDEO_DATA_TILES MeowthBonusMeowth4Gfx, vTilesSH + $2a0, $360
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILEMAP MeowthBonusTilemap_GameBoyColor, vBGMap, $400
VIDEO_DATA_TILEMAP_BANK2 MeowthBonusTilemap2_GameBoyColor, vBGMap, $400
VIDEO_DATA_PALETTES MeowthBonusPalettes, $80
db $FF, $FF ; terminators
StageDiglettBonusGfx_GameBoy: ; 0xebd7
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES DiglettBonusDugtrio1Gfx, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $320
VIDEO_DATA_TILES DiglettBonusDugtrio2Gfx, vTilesOB + $7a0, $60
VIDEO_DATA_TILES DiglettBonusBaseGameBoyGfx, vTilesSH, $e00 ; $e00 is actually $100 too many bytes. Should only be $d00. This accidentally loads palette data after the tile graphics.
VIDEO_DATA_TILES DiglettBonusDugtrio3Gfx, vTilesSH + $100, $1a0
VIDEO_DATA_TILES DiglettBonusDugtrio4Gfx, vTilesSH + $2a0, $280
VIDEO_DATA_TILEMAP DiglettBonusTilemap_GameBoy, vBGMap, $400
db $FF, $FF ; terminators
StageDiglettBonusGfx_GameBoyColor: ; 0xec11
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES DiglettBonusDugtrio1Gfx, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $320
VIDEO_DATA_TILES DiglettBonusDugtrio2Gfx, vTilesOB + $7a0, $60
VIDEO_DATA_TILES DiglettBonusBaseGameBoyColorGfx, vTilesSH, $e00
VIDEO_DATA_TILES DiglettBonusDugtrio3Gfx, vTilesSH + $100, $1a0
VIDEO_DATA_TILES DiglettBonusDugtrio4Gfx, vTilesSH + $2a0, $280
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILEMAP DiglettBonusTilemap_GameBoyColor, vBGMap, $400
VIDEO_DATA_TILEMAP_BANK2 DiglettBonusTilemap2_GameBoyColor, vBGMap, $400
VIDEO_DATA_PALETTES DiglettBonusPalettes, $80
db $FF, $FF ; terminators
StageSeelBonusGfx_GameBoy: ; 0xec60
VIDEO_DATA_TILES Alphabet1Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES SeelBonusSeel1Gfx, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $320
VIDEO_DATA_TILES SeelBonusSeel2Gfx, vTilesOB + $7a0, $60
VIDEO_DATA_TILES SeelBonusBaseGameBoyGfx, vTilesSH, $d00 ; $d00 is actually $100 too many bytes. Should only be $c00. This accidentally loads palette data after the tile graphics.
VIDEO_DATA_TILES SeelBonusSeel3Gfx, vTilesSH + $100, $1a0
VIDEO_DATA_TILES SeelBonusSeel4Gfx, vTilesSH + $2a0, $4a0
VIDEO_DATA_TILEMAP SeelBonusTilemap_GameBoy, vBGMap, $400
db $FF, $FF ; terminators
StageSeelBonusGfx_GameBoyColor: ; 0xec9a
VIDEO_DATA_TILES Alphabet2Gfx, vTilesOB, $1a0
VIDEO_DATA_TILES SeelBonusSeel1Gfx, vTilesOB + $1a0, $260
VIDEO_DATA_TILES PinballPokeballGfx, vTilesOB + $400, $320
VIDEO_DATA_TILES SeelBonusSeel2Gfx, vTilesOB + $7a0, $60
VIDEO_DATA_TILES SeelBonusBaseGameBoyColorGfx, vTilesSH, $b00 ; Should actually be $a00 bytes, not $b00
VIDEO_DATA_TILES SeelBonusSeel3Gfx, vTilesSH + $100, $1a0
VIDEO_DATA_TILES SeelBonusSeel4Gfx, vTilesSH + $2a0, $4a0
VIDEO_DATA_TILES_BANK2 TimerDigitsGfx, vTilesOB + $600, $160
VIDEO_DATA_TILEMAP SeelBonusTilemap_GameBoyColor, vBGMap, $400
VIDEO_DATA_TILEMAP_BANK2 SeelBonusTilemap2_GameBoyColor, vBGMap, $400
VIDEO_DATA_PALETTES SeelBonusPalettes, $80
db $FF, $FF ; terminators
CheckStageTransition: ; 0xece9
call Func_ed5e
ld a, [wBallYPos + 1]
add $10
cp $18
jr c, .moving_up
cp $b8
ret c
ld a, [wCurrentStage]
ld c, a
ld b, $0
ld hl, BallMovingDownStageTransitions
add hl, bc
ld a, [hl]
cp $ff
jr z, .rip
call FieldVerticalTransition
ld a, [wBallYPos + 1]
sub $88
ld [wBallYPos + 1], a
ret
.moving_up
ld a, [wCurrentStage]
ld c, a
ld b, $0
ld hl, BallMovingUpStageTransitions
add hl, bc
ld a, [hl]
cp $ff
jr z, .rip
call FieldVerticalTransition
ld a, [wBallYPos + 1]
add $88
ld [wBallYPos + 1], a
ret
.rip
ld a, $1
ld [wd4ae], a
callba HandleBallLoss
ret
BallMovingUpStageTransitions: ; 0xed3e
; Maps the relationship between stages when
; the ball moves out of the screen upward.
db $FF ; STAGE_RED_FIELD_TOP
db STAGE_RED_FIELD_TOP ; STAGE_RED_FIELD_BOTTOM
db $FF
db $02
db $FF ; STAGE_BLUE_FIELD_TOP
db STAGE_BLUE_FIELD_TOP ; STAGE_BLUE_FIELD_BOTTOM
db $FF ; STAGE_GENGAR_BONUS
db $FF ; STAGE_GENGAR_BONUS
db $FF ; STAGE_MEWTWO_BONUS
db $FF ; STAGE_MEWTWO_BONUS
db $FF ; STAGE_MEOWTH_BONUS
db $FF ; STAGE_MEOWTH_BONUS
db $FF ; STAGE_DIGLETT_BONUS
db $FF ; STAGE_DIGLETT_BONUS
db $FF ; STAGE_SEEL_BONUS
db $FF ; STAGE_SEEL_BONUS
BallMovingDownStageTransitions: ; 0xed4e
; Maps the relationship between stages when
; the ball moves out of the screen downward.
db STAGE_RED_FIELD_BOTTOM ; STAGE_RED_FIELD_TOP
db $FF ; STAGE_RED_FIELD_BOTTOM
db $03
db $FF
db STAGE_BLUE_FIELD_BOTTOM ; STAGE_BLUE_FIELD_TOP
db $FF ; STAGE_BLUE_FIELD_BOTTOM
db $FF ; STAGE_GENGAR_BONUS
db $FF ; STAGE_GENGAR_BONUS
db $FF ; STAGE_MEWTWO_BONUS
db $FF ; STAGE_MEWTWO_BONUS
db $FF ; STAGE_MEOWTH_BONUS
db $FF ; STAGE_MEOWTH_BONUS
db $FF ; STAGE_DIGLETT_BONUS
db $FF ; STAGE_DIGLETT_BONUS
db $FF ; STAGE_SEEL_BONUS
db $FF ; STAGE_SEEL_BONUS
Func_ed5e: ; 0xed5e
ld hl, wSCX
ld a, [wd7ac]
and a
jr nz, .modify_scx_and_scy
ld a, [wBallXPos + 1]
cp $9a
ld a, 2
jr nc, .okay1
ld a, -2
.okay1
ld [wd7aa], a
add [hl]
cp $22
jr z, .modify_scx_and_scy
bit 7, a
jr nz, .modify_scx_and_scy
ld [hl], a
.modify_scx_and_scy
ld a, [hl]
ld hl, wd79f
sub [hl]
ld [hSCX], a
xor a
ld hl, wd7a0
sub [hl]
ld [hSCY], a
ret
Func_ed8e: ; 0xed8e
xor a
ld [wd803], a
ld [wd804], a
ld [wd622], a
ld a, [wNumPartyMons]
ld [wd620], a
ld a, [wBallType]
ld c, a
ld b, $0
ld hl, BallTypeMultipliers
add hl, bc
ld a, [hl]
ld [wd621], a
.asm_edac
xor a
ld [hJoypadState], a
ld [hNewlyPressedButtons], a
ld [hPressedButtons], a
call HandleTilts
ld a, [wCurrentStage]
bit 0, a
ld [hFarCallTempA], a
ld a, $3
ld hl, HandleFlippers
call nz, BankSwitch
callba Func_84b7
call Func_33e3
call CleanOAMBuffer
rst AdvanceFrame
ld a, [wd7af]
and a
jr nz, .asm_edac
ld a, [wd7b3]
and a
jr nz, .asm_edac
ld a, [hGameBoyColorFlag]
and a
call nz, LoadGreyBillboardPaletteData
call GenRandom
and $f0
ld [wd61a], a
xor a
ld [wd61b], a
ld [wd61e], a
.asm_6df7
ld a, [wd61a]
ld c, a
ld b, $0
ld hl, Data_f339
add hl, bc
ld a, [wd619]
add [hl]
ld c, a
ld hl, Data_f439
add hl, bc
ld a, [hli]
bit 7, a
jr nz, .asm_ee56
call Func_eef9
ld [wd61d], a
push af
lb de, $00, $09
call PlaySoundEffect
pop af
call LoadBillboardOffPicture
ld a, [wd61b]
cp $a
jr nc, .asm_ee29
ld a, $a
.asm_ee29
ld b, a
.asm_ee2a
push bc
call Func_eeee
ld a, [wd61e]
and a
jr nz, .asm_ee47
call Func_ef1e
jr z, .asm_ee47
ld [wd61e], a
ld a, $32
ld [wd61b], a
lb de, $07, $28
call PlaySoundEffect
.asm_ee47
pop bc
dec b
jr nz, .asm_ee2a
ld a, [wd61b]
inc a
ld [wd61b], a
cp $3c
jr z, .asm_ee69
.asm_ee56
ld a, [wd61a]
and $f0
ld b, a
ld a, [wd61a]
inc a
and $f
or b
ld [wd61a], a
jp .asm_6df7
.asm_ee69
ld a, [wd61d]
cp $5
jr nz, .asm_ee78
lb de, $0c, $42
call PlaySoundEffect
jr .asm_ee7e
.asm_ee78
lb de, $0c, $43
call PlaySoundEffect
.asm_ee7e
ld b, $28
.asm_ee80
push bc
rst AdvanceFrame
pop bc
call Func_ef1e
jr nz, .asm_ee8b
dec b
jr nz, .asm_ee80
.asm_ee8b
ld a, [hGameBoyColorFlag]
and a
ld a, [wd61d]
call nz, Func_f2a0
ld b, $80
.asm_ee96
push bc
ld a, b
and $f
jr nz, .asm_eeae
bit 4, b
jr z, .asm_eea8
ld a, [wd61d]
call LoadBillboardPicture
jr .asm_eeae
.asm_eea8
ld a, [wd61d]
call LoadBillboardOffPicture
.asm_eeae
rst AdvanceFrame
pop bc
call Func_ef1e
jr nz, .asm_eeb8
dec b
jr nz, .asm_ee96
.asm_eeb8
ld a, [wd619]
add $a
cp $fa
jr nz, .asm_eec3
ld a, $64
.asm_eec3
ld [wd619], a
ld a, [wd61d]
rst JumpTable ; calls JumpToFuncInTable
CallTable_eeca: ; 0xeeca
dw Start30SecondSaverTimer
dw Start60SecondSaverTimer
dw Start90SecondSaverTimer
dw Func_ef83
dw Func_efa7
dw Func_efb2
dw Func_eff3
dw Func_f034
dw Func_f03a
dw UpgradeBallBlueField
dw UpgradeBallBlueField
dw UpgradeBallBlueField
dw SlotBonusMultiplier
dw Func_f172
dw Func_f172
dw Func_f172
dw Func_f172
dw Func_f172
Func_eeee: ; 0xeeee
push bc
ld bc, $0200
.asm_eef2
dec bc
ld a, b
or c
jr nz, .asm_eef2
pop bc
ret
Func_eef9: ; 0xeef9
cp $8
jr nz, .asm_ef09
ld a, [wd620]
and a
jr nz, .asm_ef06
ld a, $7
ret
.asm_ef06
ld a, $8
ret
.asm_ef09
cp $9
jr nz, .asm_ef14
push hl
ld hl, wd621
add [hl]
pop hl
ret
.asm_ef14
cp $d
ret nz
push hl
ld hl, wd498
add [hl]
pop hl
ret
Func_ef1e: ; 0xef1e
push bc
ld hl, wKeyConfigRightFlipper
call IsKeyPressed
jr nz, .asm_ef2d
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed
.asm_ef2d
pop bc
ret
BallTypeMultipliers: ; 0xef2f
; Score multiplier for each ball type.
db $00 ; POKE_BALL
db $00
db $01 ; GREAT_BALL
db $02 ; ULTRA_BALL
db $02
db $02 ; MASTER_BALL
Start30SecondSaverTimer: ; 0xef35
ld a, $0
ld [wBallSaverIconOn], a
ld a, $ff
ld [wd4a2], a
ld a, 59
ld [wBallSaverTimerFrames], a
ld a, 30
ld [wBallSaverTimerSeconds], a
ld a, $2
ld [wNumTimesBallSavedTextWillDisplay], a
ret
Start60SecondSaverTimer: ; 0xef4f
ld a, $0
ld [wBallSaverIconOn], a
ld a, $ff
ld [wd4a2], a
ld a, 59
ld [wBallSaverTimerFrames], a
ld a, 60
ld [wBallSaverTimerSeconds], a
ld a, $2
ld [wNumTimesBallSavedTextWillDisplay], a
ret
Start90SecondSaverTimer: ; 0xef69
ld a, $0
ld [wBallSaverIconOn], a
ld a, $ff
ld [wd4a2], a
ld a, 59
ld [wBallSaverTimerFrames], a
ld a, 90
ld [wBallSaverTimerSeconds], a
ld a, $2
ld [wNumTimesBallSavedTextWillDisplay], a
ret
Func_ef83: ; 0xef83
ld a, $1
ld [wd51d], a
ld a, $f
ld [wd517], a
xor a
ld [wd85d], a
call Func_310a
rst AdvanceFrame
ld a, $0
callba PlayPikachuSoundClip
ld a, $1
ld [wd85d], a
ret
Func_efa7: ; 0xefa7
callba Func_30164
ret
Func_efb2: ; 0xefb2
ld a, $8
call Func_a21
ld [wCurSlotBonus], a
ld b, $80
.asm_efbc
push bc
ld a, b
and $f
jr nz, .asm_efd8
bit 4, b
jr z, .asm_efd0
ld a, [wCurSlotBonus]
add (SmallReward100PointsOnPic_Pointer - BillboardPicturePointers) / 3
call LoadBillboardPicture
jr .asm_efd8
.asm_efd0
ld a, [wCurSlotBonus]
add (SmallReward100PointsOnPic_Pointer - BillboardPicturePointers) / 3
call LoadBillboardOffPicture
.asm_efd8
rst AdvanceFrame
pop bc
ld a, [hNewlyPressedButtons]
and FLIPPERS
jr nz, .asm_efe3
dec b
jr nz, .asm_efbc
.asm_efe3
ld a, [wCurSlotBonus]
inc a
swap a
ld e, a
ld d, $0
ld bc, $0000
call AddBCDEToCurBufferValue
ret
Func_eff3: ; 0xeff3
ld a, $8
call Func_a21
ld [wCurSlotBonus], a
ld b, $80
.asm_effd
push bc
ld a, b
and $f
jr nz, .asm_f019
bit 4, b
jr z, .asm_f011
ld a, [wCurSlotBonus]
add (BigReward1000000PointsOnPic_Pointer - BillboardPicturePointers) / 3
call LoadBillboardPicture
jr .asm_f019
.asm_f011
ld a, [wCurSlotBonus]
add (BigReward1000000PointsOnPic_Pointer - BillboardPicturePointers) / 3
call LoadBillboardOffPicture
.asm_f019
rst AdvanceFrame
pop bc
ld a, [hNewlyPressedButtons]
and FLIPPERS
jr nz, .asm_f024
dec b
jr nz, .asm_effd
.asm_f024
ld a, [wCurSlotBonus]
inc a
swap a
ld c, a
ld b, $0
ld de, $0000
call AddBCDEToCurBufferValue
ret
Func_f034: ; 0xf034
ld a, $1
ld [wd622], a
ret
Func_f03a: ; 0xf03a
ld a, $2
ld [wd622], a
ret
UpgradeBallBlueField: ; 0xf040
; load approximately 1 minute of frames into wBallTypeCounter
ld a, $10
ld [wBallTypeCounter], a
ld a, $e
ld [wBallTypeCounter + 1], a
ld a, [wBallType]
cp MASTER_BALL
jr z, .masterBall
lb de, $06, $3a
call PlaySoundEffect
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld de, FieldMultiplierText
ld hl, wd5cc
call LoadTextHeader
; upgrade ball type
ld a, [wBallType]
ld c, a
ld b, $0
ld hl, BallTypeProgressionBlueField
add hl, bc
ld a, [hl]
ld [wBallType], a
add $30
ld [wBottomMessageText + $12], a
jr .asm_f0b0
.masterBall
lb de, $0f, $4d
call PlaySoundEffect
ld bc, OneMillionPoints
callba AddBigBCD6FromQueue
ld bc, $100
ld de, $0000
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5d4
ld de, DigitsText1to8
call Func_32cc
pop de
pop bc
ld hl, wd5cc
ld de, FieldMultiplierSpecialBonusText
call LoadTextHeader
.asm_f0b0
callba Func_155bb
ret
BallTypeProgressionBlueField: ; 0xf0bb
; Determines the next upgrade for the Ball.
db GREAT_BALL ; POKE_BALL -> GREAT_BALL
db GREAT_BALL ; unused
db ULTRA_BALL ; GREAT_BALL -> ULTRA_BALL
db MASTER_BALL ; ULTRA_BALL -> MASTER_BALL
db MASTER_BALL ; unused
db MASTER_BALL ; MASTER_BALL -> MASTER_BALL
SlotBonusMultiplier: ; 0xf0c1
ld a, $4
call Func_a21
ld [wCurSlotBonus], a
ld b, $80
.asm_f0cb
push bc
ld a, b
and $f
jr nz, .asm_f0e7
bit 4, b
jr z, .asm_f0df
ld a, [wCurSlotBonus]
add (BonusMultiplierX1OnPic_Pointer - BillboardPicturePointers) / 3
call LoadBillboardPicture
jr .asm_f0e7
.asm_f0df
ld a, [wCurSlotBonus]
add (BonusMultiplierX1OnPic_Pointer - BillboardPicturePointers) / 3
call LoadBillboardOffPicture
.asm_f0e7
rst AdvanceFrame
pop bc
ld a, [hNewlyPressedButtons]
and FLIPPERS
jr nz, .asm_f0f2
dec b
jr nz, .asm_f0cb
.asm_f0f2
ld a, $3
ld [wd610], a
xor a
ld [wd611], a
ld [wd612], a
ld a, [wd482]
call .DivideBy25
ld b, c
ld a, [wCurSlotBonus]
inc a
ld hl, wd482
add [hl]
cp 100
jr c, .asm_f113
ld a, 99
.asm_f113
ld [hl], a
call .DivideBy25
ld a, c
cp b
callba nz, Func_30164
callba Func_16f95
ld a, [wd60c]
callba Func_f154 ; no need for BankSwitch here...
ld a, [wd60d]
add $14
callba Func_f154 ; no need for BankSwitch here...
ret
.DivideBy25: ; 0xf14a
ld c, $0
.div_25
cp 25
ret c
sub 25
inc c
jr .div_25
Func_f154: ; 0xf154
ld a, [wCurrentStage]
call CallInFollowingTable
CallTable_f15a: ; 0xf15a
padded_dab Func_16f28
padded_dab Func_16f28
padded_dab Func_16f28
padded_dab Func_16f28
padded_dab Func_1d5f2
padded_dab Func_1d5f2
Func_f172: ; 0xf172
ld a, $1
ld [wd623], a
ret
LoadBillboardPicture: ; 0xf178
; Loads a billboard picture's tiles into VRAM
; input: a = billboard picture id
push hl
ld c, a
ld b, $0
sla c
add c ; a has been multplied by 3 becuase entires in BillboardPicturePointers are 3 bytes long
ld c, a
ld hl, BillboardPicturePointers
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, vTilesSH tile $10 ; destination address to copy the tiles
ld bc, $180 ; billboard pictures are $180 bytes
call LoadVRAMData ; loads the tiles into VRAM
pop hl
ret
LoadBillboardOffPicture: ; 0xf196
; Loads the dimly-lit "off" version of a billboard picture into VRAM
; Input: a = billboard picture id
push hl
ld c, a
ld b, $0
sla c
add c
ld c, a
ld hl, BillboardPicturePointers
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 bc, $0180 ; get the address of the "off" version of the picture
add hl, bc
ld de, vTilesSH tile $10
ld bc, $0180
call LoadVRAMData
pop hl
ret
INCLUDE "data/billboard/billboard_pic_pointers.asm"
LoadGreyBillboardPaletteData: ; 0xf269
ld a, [hGameBoyColorFlag]
and a
jr z, .loadPaletteMap
ld a, BANK(StageRedFieldBottomBGPalette5) ; also used in blue stage
ld hl, StageRedFieldBottomBGPalette5
ld de, $0030
ld bc, $0008
call Func_7dc
.loadPaletteMap
ld a, BANK(GreyBillboardPaletteMap)
ld de, GreyBillboardPaletteMap
hlCoord 7, 4, vBGMap
call LoadBillboardPaletteMap
ret
GreyBillboardPaletteMap:
db $06, $06, $06, $06, $06, $06
db $06, $06, $06, $06, $06, $06
db $06, $06, $06, $06, $06, $06
db $06, $06, $06, $06, $06, $06
Func_f2a0: ; 0xf2a0
push hl
ld c, a
ld b, $0
sla c
add c
ld c, a
ld hl, PaletteDataPointerTable_f2be
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, $0030
ld bc, $0010
call Func_7dc
pop hl
ret
PaletteDataPointerTable_f2be: ; 0xf2be
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc08, Bank(PaletteData_dcc08)
dwb PaletteData_dcc08, Bank(PaletteData_dcc08)
dwb PaletteData_dcc10, Bank(PaletteData_dcc10)
dwb PaletteData_dcc18, Bank(PaletteData_dcc18)
dwb PaletteData_dcc20, Bank(PaletteData_dcc20)
dwb PaletteData_dcc08, Bank(PaletteData_dcc08)
dwb PaletteData_dcc28, Bank(PaletteData_dcc28)
dwb PaletteData_dcc08, Bank(PaletteData_dcc08)
dwb PaletteData_dcc30, Bank(PaletteData_dcc30)
dwb PaletteData_dcc38, Bank(PaletteData_dcc38)
dwb PaletteData_dcc40, Bank(PaletteData_dcc40)
dwb PaletteData_dcc48, Bank(PaletteData_dcc48)
dwb PaletteData_dcc50, Bank(PaletteData_dcc50)
dwb PaletteData_dcc58, Bank(PaletteData_dcc58)
dwb PaletteData_dcc60, Bank(PaletteData_dcc60)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
dwb PaletteData_dcc00, Bank(PaletteData_dcc00)
Data_f339: ; 0xf339
db $02, $06, $00, $08, $04, $02, $06, $08, $04, $00, $06, $02, $04, $08, $00, $02
db $06, $02, $04, $08, $00, $06, $04, $08, $02, $00, $06, $08, $02, $00, $06, $08
db $02, $04, $00, $08, $06, $04, $00, $02, $06, $04, $00, $08, $06, $04, $02, $08
db $00, $08, $02, $04, $00, $08, $06, $02, $04, $00, $06, $08, $04, $00, $06, $02
db $00, $08, $02, $04, $00, $08, $06, $04, $02, $08, $00, $06, $02, $08, $00, $06
db $02, $00, $06, $04, $02, $00, $06, $08, $02, $04, $00, $06, $08, $04, $02, $06
db $00, $02, $08, $04, $00, $02, $06, $04, $08, $02, $06, $00, $04, $08, $06, $02
db $04, $08, $06, $02, $00, $08, $04, $06, $00, $02, $04, $06, $00, $02, $04, $08
db $02, $00, $04, $06, $02, $00, $08, $04, $02, $00, $06, $04, $08, $00, $06, $04
db $04, $00, $02, $08, $04, $06, $00, $08, $02, $04, $06, $08, $00, $04, $06, $02
db $06, $08, $04, $02, $06, $00, $08, $02, $04, $00, $06, $02, $08, $04, $06, $02
db $04, $06, $02, $00, $08, $04, $06, $00, $08, $02, $06, $00, $08, $02, $04, $00
db $02, $00, $06, $04, $02, $08, $06, $00, $04, $08, $02, $00, $04, $06, $08, $00
db $08, $06, $04, $00, $08, $06, $02, $00, $08, $06, $04, $00, $08, $06, $04, $02
db $02, $00, $06, $04, $08, $02, $00, $04, $08, $02, $00, $04, $06, $02, $08, $00
db $04, $06, $08, $02, $00, $06, $04, $08, $02, $06, $00, $08, $04, $06, $02, $08
Data_f439: ; 0xf439
db $05, $19, $0C, $4C, $00, $4C, $03, $4C, $FF, $00, $05, $19, $0C, $4C, $00, $4C
db $07, $4C, $FF, $00, $05, $19, $0C, $44, $00, $44, $03, $44, $06, $16, $05, $19
db $0C, $4C, $00, $4C, $08, $4C, $FF, $00, $01, $4C, $06, $66, $0D, $4C, $FF, $00
db $FF, $00, $05, $19, $0C, $4C, $00, $4C, $03, $4C, $FF, $00, $05, $19, $0C, $4C
db $00, $4C, $07, $4C, $FF, $00, $05, $19, $0C, $44, $00, $44, $03, $44, $06, $16
db $05, $19, $0C, $4C, $00, $4C, $08, $4C, $FF, $00, $01, $3F, $06, $3F, $0D, $3F
db $09, $3F, $FF, $00, $05, $11, $0C, $4F, $00, $4F, $03, $4F, $FF, $00, $05, $11
db $0C, $4F, $01, $4F, $07, $4F, $FF, $00, $05, $11, $0C, $44, $00, $44, $03, $44
db $06, $1E, $05, $11, $0C, $4F, $01, $4F, $08, $4F, $FF, $00, $02, $66, $06, $4C
db $0D, $4C, $FF, $00, $FF, $00, $05, $0A, $0C, $51, $00, $51, $03, $51, $FF, $00
db $05, $0A, $0C, $51, $01, $51, $07, $51, $FF, $00, $05, $0A, $0C, $44, $00, $44
db $03, $44, $06, $26, $05, $0A, $0C, $51, $01, $51, $08, $51, $FF, $00, $01, $3F
db $06, $3F, $0D, $3F, $09, $3F, $FF, $00, $05, $0A, $0C, $51, $00, $51, $03, $51
db $FF, $00, $05, $0A, $0C, $51, $01, $51, $07, $51, $FF, $00, $05, $0A, $0C, $44
db $00, $44, $03, $44, $06, $26, $05, $0A, $0C, $51, $01, $51, $08, $51, $FF, $00
db $01, $26, $06, $26, $0D, $26, $04, $8C, $FF, $00
Func_f533: ; 0xf533
call FillBottomMessageBufferWithBlackTile
call Func_f55c
call Func_f57f
ld a, $60
ld [hWY], a
dec a
ld [hLYC], a
ld a, $fd
ld [hLCDCMask], a
call Func_f5a0
ld a, $90
ld [hWY], a
ld a, $83
ld [hLYC], a
ld [hLastLYC], a
ld a, $ff
ld [hLCDCMask], a
call FillBottomMessageBufferWithBlackTile
ret
Func_f55c: ; 0xf55c
ld a, [hGameBoyColorFlag]
and a
jr nz, .gameboyColor
ld a, BANK(GFX_d61c0)
ld hl, GFX_d61c0
ld de, vTilesSH tile $03
ld bc, $0010
call LoadVRAMData
ret
.gameboyColor
ld a, BANK(GFX_d63c0)
ld hl, GFX_d63c0
ld de, vTilesSH tile $03
ld bc, $0010
call LoadVRAMData
ret
Func_f57f: ; 0xf57f
xor a
ld [wd4aa], a
ld hl, wBottomMessageText
ld a, $81
ld b, $40
.clearLoop
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
dec b
jr nz, .clearLoop
ld a, $0
ld hl, wBottomMessageText
ld de, vBGWin
ld bc, $00c0
call LoadVRAMData
ret
Func_f5a0: ; 0xf5a0
ld de, wBottomMessageText + $40
ld hl, BonusPointsText
call PrintTextNoHeader
ld de, wBottomMessageText + $80
ld hl, SubtotalPointsText
call PrintTextNoHeader
ld hl, wd489
call Func_f8b5
ld hl, wd48f
call Func_f8b5
ld a, $1
ld [wd4ab], a
call ValidateSignature6
call Func_f64e
call Func_f60a
call Func_f676
ld a, $1
ld [wd4ab], a
call Func_f70d
ld a, [wGameOver]
and a
ret z
ld a, $10
call SetSongBank
ld de, $0005
call PlaySong
ld hl, wBottomMessageText
ld bc, $0040
call Func_f81b
ld de, wBottomMessageText + $20
ld hl, GameOverText
call PrintTextNoHeader
ld bc, $0040
ld de, $0000
call Func_f80d
.asm_f602
rst AdvanceFrame
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .asm_f602
ret
Func_f60a: ; 0xf60a
ld a, [wCurrentStage]
rst JumpTable ; calls JumpToFuncInTable
CallTable_f60d: ; 0xf60d
; STAGE_RED_FIELD_TOP
dw Func_f945
; STAGE_RED_FIELD_BOTTOM
dw Func_f945
dw Func_f9f2
dw Func_f9f2
; STAGE_BLUE_FIELD_TOP
dw Func_f9f3
; STAGE_BLUE_FIELD_BOTTOM
dw Func_f9f3
; STAGE_GENGAR_BONUS
dw Func_faf6
; STAGE_GENGAR_BONUS
dw Func_faf6
; STAGE_MEWTWO_BONUS
dw Func_faf7
; STAGE_MEWTWO_BONUS
dw Func_faf7
; STAGE_MEOWTH_BONUS
dw Func_faf8
; STAGE_MEOWTH_BONUS
dw Func_faf8
ValidateSignature6: ; 0xf626
ld de, wBottomMessageText + $01
ld hl, NumPokemonCaughtText
call PrintTextNoHeader
ld hl, wBottomMessageText + $01
ld a, [wd628]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd628
ld de, PointsData_f921
call Func_f853
call Func_f824
ret
Func_f64e: ; 0xf64e
ld de, wBottomMessageText
ld hl, NumPokemonEvolvedText
call PrintTextNoHeader
ld hl, wBottomMessageText
ld a, [wd629]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd629
ld de, PointsData_f927
call Func_f853
call Func_f824
ret
Func_f676: ; 0xf676
ld b, $4
.asm_f678
push bc
ld hl, wBottomMessageText + $20
ld de, wBottomMessageText
ld bc, $00e0
call LocalCopyData
ld bc, $00c0
ld de, $0000
call Func_f80d
ld a, [wd4ab]
and a
jr z, .asm_f69f
rst AdvanceFrame
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .asm_f69f
xor a
ld [wd4ab], a
.asm_f69f
pop bc
dec b
jr nz, .asm_f678
ld de, wBottomMessageText + $40
ld hl, MultiplierPointsText
call PrintTextNoHeader
ld de, wBottomMessageText + $80
ld hl, TotalPointsText
call PrintTextNoHeader
ld hl, wBottomMessageText + $50
ld a, [wd482]
call Func_f78e
ld bc, $0040
ld de, $0040
call Func_f80d
.asm_f6c7
push de
push hl
ld hl, wd494
ld de, wBottomMessageText + $86
call Func_f8bd
ld bc, $0040
ld de, $0080
call Func_f80d
lb de, $00, $3e
call PlaySoundEffect
ld a, [wd4ab]
and a
jr z, .asm_f6f2
rst AdvanceFrame
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .asm_f6f2
xor a
ld [wd4ab], a
.asm_f6f2
pop hl
pop de
ld a, [wd482]
and a
jr z, .asm_f709
dec a
ld [wd482], a
ld hl, wd48f
ld de, wd489
call AddBigBCD6
jr .asm_f6c7
.asm_f709
call Func_f83a
ret
Func_f70d: ; 0xf70d
ld b, $4
.asm_f70f
push bc
ld hl, wBottomMessageText + $20
ld de, wBottomMessageText
ld bc, $00e0
call LocalCopyData
ld bc, $00c0
ld de, $0000
call Func_f80d
ld a, [wd4ab]
and a
jr z, .asm_f736
rst AdvanceFrame
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .asm_f736
xor a
ld [wd4ab], a
.asm_f736
pop bc
dec b
jr nz, .asm_f70f
ld de, wBottomMessageText + $60
ld hl, ScoreText
call PrintTextNoHeader
ld hl, wScore + $5
ld de, wBottomMessageText + $66
call Func_f8bd
ld bc, $0040
ld de, $0060
call Func_f80d
lb de, $00, $3e
call PlaySoundEffect
ld a, [wd4ab]
and a
jr z, .asm_f76c
rst AdvanceFrame
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .asm_f76c
xor a
ld [wd4ab], a
.asm_f76c
ld hl, wScore
ld de, wd48f
call AddBigBCD6
ld hl, wScore + $5
ld de, wBottomMessageText + $66
call Func_f8bd
ld bc, $0040
ld de, $0060
call Func_f80d
call Func_f83a
call Func_f83a
ret
Func_f78e: ; 0xf78e
push hl
call ConvertHexByteToDecWord
pop hl
ld c, $1
ld a, d
call .asm_f7a4
inc hl
ld a, e
swap a
call .asm_f7a4
inc hl
ld c, $0
ld a, e
; fall through
.asm_f7a4
and $f
jr nz, .asm_f7ab
ld a, c
and a
ret nz
.asm_f7ab
add $86
ld [hl], a
ld c, $0
ret
PrintTextNoHeader: ; 0xf7b1
ld a, [wd805]
and a
jr nz, .asm_f7e0
.loop
ld a, [hli]
and a
ret z
cp "0"
jr c, .asm_f7c6
cp "9" + 1
jr nc, .asm_f7c6
add $56
jr .asm_f7dc
.asm_f7c6
cp "A"
jr c, .asm_f7d2
cp "Z" + 1
jr nc, .asm_f7d2
add $bf
jr .asm_f7dc
.asm_f7d2
cp "e"
jr nz, .asm_f7da
ld a, $83
jr .asm_f7dc
.asm_f7da
ld a, $81
.asm_f7dc
ld [de], a
inc de
jr .loop
.asm_f7e0
ld a, [hli]
and a
ret z
cp "0"
jr c, .asm_f7ef
cp "9" + 1
jr nc, .asm_f7ef
add $56
jr .asm_f809
.asm_f7ef
cp $a0
jr c, .asm_f7fb
cp $e0
jr nc, .asm_f7fb
sub $80
jr .asm_f809
.asm_f7fb
cp $e0
jr c, .asm_f807
cp $f4
jr nc, .asm_f807
sub $50
jr .asm_f809
.asm_f807
ld a, $81
.asm_f809
ld [de], a
inc de
jr .asm_f7e0
Func_f80d: ; 0xf80d
hlCoord 0, 0, vBGWin
add hl, de
push hl
ld hl, wBottomMessageText
add hl, de
pop de
call LoadVRAMData
ret
Func_f81b: ; 0xf81b
ld a, $81
ld [hli], a
dec bc
ld a, b
or c
jr nz, Func_f81b
ret
Func_f824: ; 0xf824
call Func_f83a
ld hl, wBottomMessageText
ld bc, $0040
call Func_f81b
ld hl, wBottomMessageText + $48
ld bc, $0038
call Func_f81b
ret
Func_f83a: ; 0xf83a
ld a, [wd4ab]
and a
ret z
ld b, $46
.asm_f841
push bc
rst AdvanceFrame
pop bc
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr nz, .asm_f84e
dec b
jr nz, .asm_f841
ret
.asm_f84e
xor a
ld [wd4ab], a
ret
Func_f853: ; 0xf853
push hl
ld hl, wd483
call Func_f8b5
pop hl
.asm_f85b
push de
push hl
ld hl, wd488
ld de, wBottomMessageText + $46
call Func_f8bd
ld bc, $0040
ld de, $0040
call Func_f80d
lb de, $00, $3e
call PlaySoundEffect
ld a, [wd4ab]
and a
jr z, .asm_f886
rst AdvanceFrame
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .asm_f886
xor a
ld [wd4ab], a
.asm_f886
pop hl
pop de
ld a, [hl]
and a
jr z, .asm_f899
dec [hl]
push de
push hl
ld hl, wd483
call AddBigBCD6
pop hl
pop de
jr .asm_f85b
.asm_f899
ld hl, wd489
ld de, wd483
call AddBigBCD6
ld hl, wd48e
ld de, wBottomMessageText + $86
call Func_f8bd
ld bc, $0040
ld de, $0080
call Func_f80d
ret
Func_f8b5: ; 0xf8b5
xor a
ld b, $6
.asm_f8b8
ld [hli], a
dec b
jr nz, .asm_f8b8
ret
Func_f8bd: ; 0xf8bd
ld bc, $0c01
.asm_f8c0
ld a, [hl]
swap a
call Func_f8d5
inc de
dec b
ld a, [hld]
call Func_f8d5
inc de
dec b
jr nz, .asm_f8c0
ld a, $86
ld [de], a
inc de
ret
Func_f8d5: ; 0xf8d5
and $f
jr nz, .asm_f8e0
ld a, b
dec a
jr z, .asm_f8e0
ld a, c
and a
ret nz
.asm_f8e0
add $86
ld [de], a
ld c, $0
ld a, b
cp $c
jr z, .asm_f8f5
cp $9
jr z, .asm_f8f5
cp $6
jr z, .asm_f8f5
cp $3
ret nz
.asm_f8f5
push de
ld a, e
add $20
ld e, a
jr nc, .asm_f8fd
inc d
.asm_f8fd
ld a, $82
ld [de], a
pop de
ret
AddBigBCD6: ; 0xf902
x = 0
rept 6
ld a, [de]
if x == 0
add [hl]
else
adc [hl]
endc
x = x + 1
daa
ld [hli], a
inc de
endr
ret
PointsData_f921: ; 0xf921
bigBCD6 50000
PointsData_f927: ; 0xf927
bigBCD6 75000
PointsData_f92d: ; 0xf92d
bigBCD6 7500
PointsData_f933: ; 0xf933
bigBCD6 5000
PointsData_f939: ; 0xf939
bigBCD6 2500
PointsData_f93f: ; 0xf93f
bigBCD6 1000
Func_f945: ; 0xf945
call Func_f952
call Func_f97a
call Func_f9a2
call Func_f9ca
ret
Func_f952: ; 0xf952
ld de, wBottomMessageText + $03
ld hl, BellsproutCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $03
ld a, [wd62a]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd62a
ld de, PointsData_f92d
call Func_f853
call Func_f824
ret
Func_f97a: ; 0xf97a
ld de, wBottomMessageText + $04
ld hl, DugtrioCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $04
ld a, [wd62b]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd62b
ld de, PointsData_f933
call Func_f853
call Func_f824
ret
Func_f9a2: ; 0xf9a2
ld de, wBottomMessageText + $03
ld hl, CaveShotCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $03
ld a, [wd62c]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd62c
ld de, PointsData_f939
call Func_f853
call Func_f824
ret
Func_f9ca: ; 0xf9ca
ld de, wBottomMessageText + $01
ld hl, SpinnerTurnsCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $01
ld a, [wd62d]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd62d
ld de, PointsData_f93f
call Func_f853
call Func_f824
ret
Func_f9f2: ; 0xf9f2
ret
Func_f9f3: ; 0xf9f3
call Func_fa06
call Func_fa2e
call Func_fa56
call Func_fa7e
call Func_faa6
call Func_face
ret
Func_fa06: ; 0xfa06
ld de, wBottomMessageText + $04
ld hl, CloysterCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $04
ld a, [wd63b]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd63b
ld de, PointsData_f92d
call Func_f853
call Func_f824
ret
Func_fa2e: ; 0xfa2e
ld de, wBottomMessageText + $04
ld hl, SlowpokeCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $04
ld a, [wd63a]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd63a
ld de, PointsData_f92d
call Func_f853
call Func_f824
ret
Func_fa56: ; 0xfa56
ld de, wBottomMessageText + $04
ld hl, PoliwagCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $04
ld a, [wd63d]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd63d
ld de, PointsData_f933
call Func_f853
call Func_f824
ret
Func_fa7e: ; 0xfa7e
ld de, wBottomMessageText + $04
ld hl, PsyduckCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $04
ld a, [wd63c]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd63c
ld de, PointsData_f933
call Func_f853
call Func_f824
ret
Func_faa6: ; 0xfaa6
ld de, wBottomMessageText + $03
ld hl, CaveShotCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $03
ld a, [wd62c]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd62c
ld de, PointsData_f939
call Func_f853
call Func_f824
ret
Func_face: ; 0xface :)
ld de, wBottomMessageText + $01
ld hl, SpinnerTurnsCounterText
call PrintTextNoHeader
ld hl, wBottomMessageText + $01
ld a, [wd62d]
call Func_f78e
ld bc, $0040
ld de, $0000
call Func_f80d
ld hl, wd62d
ld de, PointsData_f93f
call Func_f853
call Func_f824
ret
Func_faf6: ; 0xfaf6
ret
Func_faf7: ; 0xfaf7
ret
Func_faf8: ; 0xfaf8
ret
; XXX
ret
; XXX
ret
SECTION "bank4", ROMX, BANK[$4]
Func_10000: ; 0x10000
ld c, a
ld a, [wInSpecialMode]
and a
ret z
ld a, c
ld [wd54c], a
ld a, [wSpecialMode]
cp $1
jp z, Func_10a95
cp $2
jr nz, .asm_10021
callba Func_301ce
ret
.asm_10021
ld a, [wCurrentStage]
call CallInFollowingTable
CallTable_10027: ; 0x10027
; STAGE_RED_FIELD_TOP
padded_dab Func_20000
; STAGE_RED_FIELD_BOTTOM
padded_dab Func_20000
padded_dab Func_20000
padded_dab Func_20000
; STAGE_BLUE_FIELD_TOP
padded_dab Func_202bc
; STAGE_BLUE_FIELD_BOTTOM
padded_dab Func_202bc
StartCatchEmMode: ; 0x1003f
ld a, [wInSpecialMode] ; current game mode?
and a
ret nz ; don't start catch 'em mode if we're already doing something like Map Move mode
ld a, $1
ld [wInSpecialMode], a ; set special mode flag
xor a
ld [wSpecialMode], a
ld [wd54d], a
ld a, [wCurrentStage]
sla a
ld c, a
ld b, $0
push bc
ld hl, WildMonOffsetsPointers
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wCurrentMap]
sla a
ld c, a
add hl, bc
ld a, [hli]
ld c, a
ld a, [hl]
ld b, a
pop de
ld hl, WildMonPointers
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
add hl, bc
call GenRandom
and $f
call CheckForMew
ld c, a
ld b, $0
add hl, bc
ld a, [wRareMonsFlag] ; this gets set to $08 when the rare mons should be used.
sla a
ld c, a
add hl, bc
ld a, [hl] ; a contains mon id
dec a
ld [wCurrentCatchEmMon], a
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
ld hl, EvolutionLineIds
add hl, bc
ld c, [hl]
ld h, b
ld l, c
add hl, bc
add hl, bc ; multiply the evolution line id by 3
ld bc, Data_13685
add hl, bc
ld a, [hli]
ld [wd5c1], a
ld [wd5be], a
ld a, [hli]
ld [wd5c2], a
ld a, [hli]
ld [wd5c3], a
ld hl, wd586
ld a, [wd5b6]
ld c, a
and a
ld b, $18
jr z, .asm_100c7
.asm_100ba
ld a, $1
ld [hli], a
xor a
ld [hli], a
dec b
dec c
jr nz, .asm_100ba
ld a, b
and a
jr z, .asm_100ce
.asm_100c7
xor a
ld [hli], a
inc a
ld [hli], a
dec b
jr nz, .asm_100c7
.asm_100ce
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
sla c
rl b
ld hl, CatchEmTimerData
add hl, bc
ld a, [hli]
ld c, a
ld a, [hl]
ld b, a
callba StartTimer
callba InitBallSaverForCatchEmMode
call Func_10696
call Func_3579
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_1011d
ld a, BANK(StageRedFieldBottomBaseGameBoyColorGfx)
ld hl, StageRedFieldBottomBaseGameBoyColorGfx + $300
ld de, vTilesSH tile $2e
ld bc, $0020
call LoadOrCopyVRAMData
ld a, $0
ld hl, CatchBarTiles
deCoord 6, 8, vBGMap
ld bc, (CatchBarTilesEnd - CatchBarTiles)
call LoadOrCopyVRAMData
.asm_1011d
call SetPokemonSeenFlag
ld a, [wCurrentStage]
rst JumpTable ; calls JumpToFuncInTable
CallTable_10124: ; 0x10124
; STAGE_RED_FIELD_TOP
dw Func_10871
; STAGE_RED_FIELD_BOTTOM
dw Func_10871
dw Func_1098a
dw Func_1098a
; STAGE_BLUE_FIELD_TOP
dw Func_1098c
; STAGE_BLUE_FIELD_BOTTOM
dw Func_1098c
CheckForMew:
; Sets the encountered mon to Mew if the following conditions are met:
; 1. Random number in register a equals $f
; 2. The current map is Indigo Plateau (it does a roundabout way of checking this)
; 3. The right alley has been hit three times
; 4. The Mewtwo Bonus Stage completion counter equals 2.
push af
cp $f ; random number equals $f
jr nz, .asm_10155
ld a, c
cp $60 ; check if low-byte of map mons offset is Indigo Plateau
jr nz, .asm_10155
ld a, b
cp $1 ; check if high-byte of map mons offset is Indigo Plateau
jr nz, .asm_10155
ld a, [wRareMonsFlag]
cp $8
jr nz, .asm_10155
ld a, [wNumMewtwoBonusCompletions]
cp $2
jr nz, .asm_10155
pop af
xor a
ld [wNumMewtwoBonusCompletions], a
ld a, $10
ret
.asm_10155
pop af
ret
Func_10157: ; 0x10157
xor a
ld [wInSpecialMode], a
ld [wWildMonIsHittable], a
ld [wd5c6], a
ld [wd5b6], a
ld [wNumMonHits], a
call Func_10488
callba Func_86d2
ld a, [wCurrentStage]
rst JumpTable ; calls JumpToFuncInTable
CallTable_10178: ; 0x10178
; STAGE_RED_FIELD_TOP
dw Func_108f5
; STAGE_RED_FIELD_BOTTOM
dw Func_108f5
dw Func_1098b
dw Func_1098b
; STAGE_BLUE_FIELD_TOP
dw Func_109fc
; STAGE_BLUE_FIELD_BOTTOM
dw Func_109fc
Func_10184: ; 0x10184
ld a, [wCurrentStage]
bit 0, a
ret z
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_10199
inc b
.asm_10199
ld hl, MonBillboardPicPointers
add hl, bc
ld a, [hli]
ld [$ff8c], a
ld a, [hli]
ld [$ff8d], a
ld a, [hl]
ld [$ff8e], a
ld hl, MonBillboardPaletteMapPointers
add hl, bc
ld a, [hli]
ld [$ff8f], a
ld a, [hli]
ld [$ff90], a
ld a, [hli]
ld [$ff91], a
ld de, wc000
ld hl, wd586
ld c, $0
.asm_101bb
ld a, [hli]
cp [hl]
ld [hli], a
jr z, .asm_101d2
ld b, a
call nz, Func_101d9
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_101d2
ld a, [wCurrentStage]
bit 0, a
ld a, b
call nz, Func_10230
.asm_101d2
inc c
ld a, c
cp $18
jr nz, .asm_101bb
ret
Func_101d9: ; 0x101d9
push bc
push hl
push de
push af
ld a, $10
ld [de], a
inc de
ld a, $1
ld [de], a
inc de
ld b, $0
ld hl, Data_102a4
add hl, bc
ld c, [hl]
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
ld hl, vTilesSH tile $10
add hl, bc
ld a, l
ld [de], a
inc de
ld a, h
ld [de], a
inc de
ld a, [$ff8c]
ld l, a
ld a, [$ff8d]
ld h, a
add hl, bc
pop af
and a
jr nz, .asm_10215
ld bc, $0180
add hl, bc
.asm_10215
ld a, l
ld [de], a
inc de
ld a, h
ld [de], a
inc de
ld a, [$ff8e]
ld [de], a
inc de
ld a, $0
ld [de], a
inc de
pop bc
push de
xor a
ld de, Func_11d2
call Func_10c5
pop de
pop hl
pop bc
ret
Func_10230: ; 0x10230
push bc
push hl
push de
push af
ld a, $1
ld [de], a
inc de
ld [de], a
inc de
ld b, $0
ld hl, Data_102a4
add hl, bc
ld c, [hl]
sla c
ld hl, PointerTable_10274
add hl, bc
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
inc de
srl c
ld a, [$ff8f]
ld l, a
ld a, [$ff90]
ld h, a
add hl, bc
pop af
and a
ld a, [$ff91]
call ReadByteFromBank
jr nz, .asm_10261
ld a, $5
.asm_10261
ld [de], a
inc de
ld a, $0
ld [de], a
inc de
pop bc
push de
xor a
ld de, LoadTileListsBank1
call Func_10c5
pop de
pop hl
pop bc
ret
PointerTable_10274: ; 0x10274
dw $9887
dw $9888
dw $9889
dw $988A
dw $988B
dw $988C
dw $98A7
dw $98A8
dw $98A9
dw $98AA
dw $98AB
dw $98AC
dw $98C7
dw $98C8
dw $98C9
dw $98CA
dw $98CB
dw $98CC
dw $98E7
dw $98E8
dw $98E9
dw $98EA
dw $98EB
dw $98EC
Data_102a4: ; 0x102a4
db $00, $07, $06, $01, $0E, $15, $14, $0F, $04, $0B, $0A, $05, $0C, $13, $12, $0D, $02, $09, $08, $03, $10, $17, $16, $11
Func_102bc: ; 0x102bc
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_102cb
inc b
.asm_102cb
ld hl, MonBillboardPalettePointers
add hl, bc
ld a, [hli]
ld [$ff8c], a
ld a, [hli]
ld [$ff8d], a
ld a, [hl]
ld [$ff8e], a
ld de, wc1b8
ld a, $10
ld [de], a
inc de
ld a, $8
ld [de], a
inc de
ld a, $30
ld [de], a
inc de
ld a, [$ff8c]
ld [de], a
inc de
ld a, [$ff8d]
ld [de], a
inc de
ld a, [$ff8e]
ld [de], a
inc de
ld a, $0
ld [de], a
xor a
ld bc, wc1b8
ld de, Func_1266
call Func_10c5
ret
Func_10301: ; 0x10301
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_10310
inc b
.asm_10310
ld hl, MonAnimatedPalettePointers
add hl, bc
ld a, [hli]
ld [$ff8c], a
ld a, [hli]
ld [$ff8d], a
ld a, [hl]
ld [$ff8e], a
ld de, wc1b8
ld a, $10
ld [de], a
inc de
ld a, $4
ld [de], a
inc de
ld a, $58
ld [de], a
inc de
ld a, [$ff8c]
ld [de], a
inc de
ld a, [$ff8d]
ld [de], a
inc de
ld a, [$ff8e]
ld [de], a
inc de
ld a, $4
ld [de], a
inc de
ld a, $68
ld [de], a
inc de
ld a, [$ff8c]
ld l, a
ld a, [$ff8d]
ld h, a
ld bc, $0008
add hl, bc
ld a, l
ld [de], a
inc de
ld a, h
ld [de], a
inc de
ld a, [$ff8e]
ld [de], a
inc de
ld a, $0
ld [de], a
xor a
ld bc, wc1b8
ld de, Func_1266
call Func_10c5
ret
Func_10362: ; 0x10362
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_10371
inc b
.asm_10371
ld hl, MonAnimatedPicPointers
add hl, bc
ld a, [hli]
ld [$ff8c], a
ld a, [hli]
ld [$ff8d], a
ld a, [hl]
ld [$ff8e], a
ld de, wc150
ld bc, $0000
.asm_10384
call Func_1038e
inc c
ld a, c
cp $d
jr nz, .asm_10384
ret
Func_1038e: ; 0x1038e
push bc
push de
ld a, c
sla a
add c
ld c, a
sla c
ld hl, Data_103c6
add hl, bc
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [$ff8c]
add [hl]
ld [de], a
inc hl
inc de
ld a, [$ff8d]
adc [hl]
ld [de], a
inc de
ld a, [$ff8e]
ld [de], a
inc de
ld a, $0
ld [de], a
inc de
pop bc
push de
xor a
ld de, Func_11d2
call Func_10c5
pop de
pop bc
ret
Data_103c6: ; 0x103c6
; TODO: this might have pointers in it
db $40, $04, $00, $89, $00, $00
db $40, $04, $40, $89, $40, $00
db $40, $04, $80, $89, $80, $00
db $40, $04, $C0, $89, $C0, $00
db $40, $04, $00, $8A, $00, $01
db $40, $04, $40, $8A, $40, $01
db $20, $02, $80, $8A, $80, $01
db $20, $02, $A0, $81, $A0, $01
db $40, $04, $C0, $81, $C0, $01
db $40, $04, $00, $82, $00, $02
db $40, $04, $40, $82, $40, $02
db $40, $04, $80, $82, $80, $02
db $40, $04, $C0, $82, $C0, $02
Func_10414: ; 0x10414
ld a, BANK(Data_10420)
ld bc, Data_10420
ld de, Func_11b5
call Func_10c5
ret
Data_10420:
db $18
db $06
dw $9887
db $80
db $06
dw $98a7
db $80
db $06
dw $98c7
db $80
db $06
dw $98e7
db $80
db $00
Func_10432: ; 0x10432
ld a, BANK(Data_1043e)
ld bc, Data_1043e
ld de, LoadTileLists
call Func_10c5
ret
Data_1043e:
db $18
db $06
dw $9887
db $90, $91, $92, $93, $94, $95
db $06
dw $98a7
db $96, $97, $98, $99, $9a, $9b
db $06
dw $98c7
db $9c, $9d, $9e, $9f, $a0, $a1
db $06
dw $98e7
db $a2, $a3, $a4, $a5, $a6, $a7
db $00
Func_10464: ; 0x10464
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .noCarry
inc b
.noCarry
ld hl, MonAnimatedCollisionMaskPointers
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, wMonAnimatedCollisionMask
ld bc, $0080
call FarCopyData
ret
Func_10488: ; 0x10488
xor a
ld hl, wMonAnimatedCollisionMask
ld b, $20
.asm_1048e
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
dec b
jr nz, .asm_1048e
ret
BallCaptureInit: ; 0x10496
xor a
ld [wd5c6], a
ld a, BANK(PikachuSaverGfx)
ld hl, PikachuSaverGfx + $c0
ld de, vTilesOB tile $7e
ld bc, $0020
call LoadVRAMData
ld a, BANK(GFX_a8800)
ld hl, GFX_a8800
ld de, vTilesSH tile $10
ld bc, $0180
call LoadVRAMData
call LoadShakeBallGfx
ld hl, BallCaptureAnimationData
ld de, wBallCaptureAnimationFrameCounter
call CopyHLToDE
ld a, $1
ld [wCapturingMon], a
xor a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
xor a
ld [wd548], a
ld [wd549], a
lb de, $00, $0b
call PlaySoundEffect
ret
LoadShakeBallGfx: ; 0x104e2
; Loads the graphics for the ball shaking after a pokemon is caught.
ld a, [wBallType]
cp GREAT_BALL
jr nc, .notPokeball
ld a, Bank(PinballPokeballShakeGfx)
ld hl, PinballPokeballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call LoadVRAMData
ret
.notPokeball
cp ULTRA_BALL
jr nc, .notGreatball
ld a, Bank(PinballGreatballShakeGfx)
ld hl, PinballGreatballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call LoadVRAMData
ret
.notGreatball
cp MASTER_BALL
jr nc, .notUltraBall
ld a, Bank(PinballUltraballShakeGfx)
ld hl, PinballUltraballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call LoadVRAMData
ret
.notUltraBall
ld a, Bank(PinballMasterballShakeGfx)
ld hl, PinballMasterballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call LoadVRAMData
ret
CapturePokemon: ; 0x1052d
ld a, [wBallCaptureAnimationFrame]
cp $c
jr nz, .asm_10541
ld a, [wBallCaptureAnimationFrameCounter]
cp $1
jr nz, .asm_10541
lb de, $00, $41
call PlaySoundEffect
.asm_10541
ld hl, BallCaptureAnimationData
ld de, wBallCaptureAnimationFrameCounter
call UpdateAnimation
ld a, [wBallCaptureAnimationFrameIndex]
cp $1
jr nz, .asm_1055d
ld a, [wBallCaptureAnimationFrameCounter]
cp $1
jr nz, .asm_1055d
xor a
ld [wWildMonIsHittable], a
ret
.asm_1055d
ld a, [wBallCaptureAnimationFrameIndex]
cp $15
ret nz
ld a, [wBallCaptureAnimationFrameCounter]
cp $1
ret nz
call Func_3475
ld de, $0000
call PlaySong
rst AdvanceFrame
lb de, $23, $29
call PlaySoundEffect
call Func_10825
call Func_3475
ld a, [wNumPartyMons]
and a
call z, Func_10848
ld a, $50
ld [wd4b4], a
ld a, $40
ld [wd4b6], a
ld a, $80
ld [wBallXVelocity], a
xor a
ld [wBallXPos], a
ld [wBallYPos], a
ld [wCapturingMon], a
ld a, $1
ld [wd548], a
ld [wd549], a
callba RestoreBallSaverAfterCatchEmMode
call Func_10157
ld de, $0001
call PlaySong
ld hl, wd628
call Func_e4a
jr nc, .asm_105d1
ld c, $a
call Func_e55
callba z, Func_30164
.asm_105d1
call SetPokemonOwnedFlag
ld a, [wd624]
cp $3
ret z
inc a
ld [wd625], a
ld a, $80
ld [wd626], a
ret
BallCaptureAnimationData: ; 0x105e4
; Each entry is [OAM id][duration]
db $05, $00
db $05, $01
db $05, $02
db $04, $03
db $06, $04
db $08, $05
db $07, $06
db $05, $07
db $04, $08
db $04, $09
db $04, $0A
db $04, $0B
db $24, $0A
db $09, $0C
db $09, $0A
db $09, $0C
db $27, $0A
db $09, $0C
db $09, $0A
db $09, $0C
db $24, $0A
db $01, $0A
db $00 ; terminator
Func_10611: ; 0x10611
and a
ret z
dec a
sla a
ld c, a
ld b, $0
ld hl, Data_1062a
add hl, bc
ld a, [hli]
ld c, a
ld a, [hl]
ld b, a
ld a, BANK(Data_1062a)
ld de, Func_11d2
call Func_10c5
ret
Data_1062a:
dw Data_10630
dw Data_10638
dw Data_10640
Data_10630:
db $20
db $02
dw $8ae0
dw CatchTextGfx + $00
db BANK(CatchTextGfx)
db $00
Data_10638:
db $20
db $02
dw $8b00
dw CatchTextGfx + $20
db BANK(CatchTextGfx)
db $00
Data_10640:
db $20
db $02
dw $8b20
dw CatchTextGfx + $40
db BANK(CatchTextGfx)
db $00
Func_10648: ; 0x10648
call Func_10184
ld a, [wd54e]
dec a
ld [wd54e], a
jr nz, .asm_10677
ld a, $14
ld [wd54e], a
ld hl, wd586
ld b, $18
.asm_1065e
ld a, [wd54f]
and $1
ld [hli], a
xor $1
ld [hli], a
dec b
jr nz, .asm_1065e
ld a, [wd54f]
dec a
ld [wd54f], a
jr nz, .asm_10677
ld hl, wd54d
inc [hl]
.asm_10677
ret
ShowAnimatedWildMon: ; 0x10678
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
ld hl, MonAnimatedSpriteTypes
add hl, bc
ld a, [hl]
ld [wd5bc], a
ld [wd5bd], a
ld a, $1
ld [wWildMonIsHittable], a
xor a
ld [wBallHitWildMon], a
ld [wNumMonHits], a
ret
Func_10696: ; 0x10696
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, LetsGetPokemonText
call LoadTextHeader
ret
Func_106a6: ; 0x106a6
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, PokemonRanAwayText
call LoadTextHeader
ret
Func_106b6: ; 0x106b6
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b ; bc was just multiplied by 16
ld hl, PokemonNames + 1
add hl, bc
ld de, YouGotAnText ; "You got an"
ld bc, Data_2a91
ld a, [hl]
; check if mon's name starts with a vowel, so it can print "an", instead of "a"
cp "A"
jr z, .asm_106f1
cp "I"
jr z, .asm_106f1
cp "U"
jr z, .asm_106f1
cp "E"
jr z, .asm_106f1
cp "O"
jr z, .asm_106f1
ld de, YouGotAText ; "You got a"
ld bc, Data_2a79
.asm_106f1
push hl
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
pop de
call LoadTextHeader
ld hl, wd5d4
pop de
call LoadTextHeader
pop hl
ld de, wBottomMessageText + $20
ld b, $0 ; count the number of letters in mon's name in register b
.readLetter
ld a, [hli]
and a
jr z, .endOfName
ld [de], a
inc de
inc b
jr .readLetter
.endOfName
ld a, $20
ld [de], a
inc de
xor a
ld [de], a
ld a, [wd5db]
add b
ld [wd5db], a
ld a, $14
sub b
srl a
ld b, a
ld a, [wd5d8]
add b
ld [wd5d8], a
ret
Func_10732: ; 0x10732
ld a, [wCurrentCatchEmMon]
inc a
ld e, a
ld d, $0
call PlayCry
ret
AddCaughtPokemonToParty: ; 0x1073d
ld a, [wNumPartyMons]
ld c, a
ld b, $0
ld hl, wPartyMons
add hl, bc
ld a, [wCurrentCatchEmMon]
ld [hl], a
ld a, [wNumPartyMons]
inc a
ld [wNumPartyMons], a
ret
SetPokemonSeenFlag: ; 0x10753
ld a, [wSpecialMode]
and a
ld a, [wCurrentCatchEmMon]
jr z, .asm_10766
ld a, [wCurrentEvolutionMon]
cp $ff
jr nz, .asm_10766
ld a, [wCurrentCatchEmMon]
.asm_10766
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
set 0, [hl]
ld hl, wPokedexFlags
ld de, sPokedexFlags
ld bc, $0098
call SaveData
ret
SetPokemonOwnedFlag: ; 0x1077c
ld a, [wSpecialMode]
and a
ld a, [wCurrentCatchEmMon]
jr z, .asm_1078f
ld a, [wCurrentEvolutionMon]
cp $ff
jr nz, .asm_1078f
ld a, [wCurrentCatchEmMon]
.asm_1078f
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
set 1, [hl]
ld hl, wPokedexFlags
ld de, sPokedexFlags
ld bc, $0098
call SaveData
ret
Func_107a5: ; 0x107a5
xor a
ld hl, wIndicatorStates
ld b, $13
.asm_107ab
ld [hli], a
dec b
jr nz, .asm_107ab
ret
Func_107b0: ; 0x107b0
xor a
ld [wd604], a
ld [wIndicatorStates + 4], a
callba Func_16425
ret
Func_107c2: ; 0x107c2
ld a, $1e
ld [wd607], a
ret
Func_107c8: ; 0x107c8
ld a, [wRightAlleyCount]
cp $3
jr z, .asm_107d1
set 7, a
.asm_107d1
ld [wIndicatorStates + 1], a
ld a, [wRightAlleyCount]
cp $2
jr c, .asm_107e0
ld a, $80
ld [wIndicatorStates + 3], a
.asm_107e0
ld a, [wLeftAlleyCount]
set 7, a
ld [wIndicatorStates], a
ret
Func_107e9: ; 0x107e9
ld a, [wLeftAlleyCount]
cp $3
ld a, $4
jr nz, .asm_107f4
ld a, $6
.asm_107f4
ld [wd7ad], a
ret
Func_107f8: ; 0x107f8
ld a, [wTimerFrames]
and a
ret nz
ld a, [wTimerMinutes]
and a
ret nz
ld a, [wTimerSeconds]
cp $20
jr nz, .asm_10810
lb de, $07, $49
call PlaySoundEffect
ret
.asm_10810
cp $10
jr nz, .asm_1081b
lb de, $0a, $4a
call PlaySoundEffect
ret
.asm_1081b
cp $5
ret nz
lb de, $0d, $4b
call PlaySoundEffect
ret
Func_10825: ; 0x10825
call Retrieve8DigitBCDValueAtwd47a
push bc
push de
call AddBCDEToCurBufferValue
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5e9
ld de, Data_2a50
call Func_3372
pop de
pop bc
ld hl, wd5e4
ld de, JackpotText
call Func_3357
ret
Func_10848: ; 0x10848
ld bc, OneHundredMillionPoints
callba AddBigBCD6FromQueue
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5d4
ld de, OneBillionText
call LoadTextHeader
ld hl, wd5cc
ld de, PokemonCaughtSpecialBonusText
call LoadTextHeader
call Func_3475
ret
Func_10871: ; 0x10871
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
ld hl, EvolutionLineIds
add hl, bc
ld a, [hl] ; a contains evolution line id
ld c, a
ld b, $0
ld l, c
ld h, b
sla l
rl h
sla l
rl h
sla l
rl h
sla l
rl h
add hl, bc
add hl, bc
add hl, bc
ld c, l
ld b, h
ld hl, CatchEmModeInitialIndicatorStates
add hl, bc
ld de, wIndicatorStates
ld b, $13 ; number of indicators
.loop
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .loop
xor a
ld [wRightAlleyCount], a
call Func_107b0
ld a, $4
ld [wd7ad], a
ld de, $0002
call PlaySong
ld a, [wCurrentStage]
bit 0, a
jr nz, .asm_108d3
callba LoadStageCollisionAttributes
callba Func_159f4
ret
.asm_108d3
callba Func_14135
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_102bc
ret
Func_108f5: ; 0x108f5
call Func_107a5
call Func_107c2
call Func_107c8
call Func_107e9
ld a, [wCurrentStage]
bit 0, a
ret z
callba Func_14135
call Func_10432
callba Func_30253
ld a, Bank(StageSharedBonusSlotGlowGfx)
ld hl, StageSharedBonusSlotGlowGfx
ld de, vTilesOB tile $1a
ld bc, $0160
call LoadVRAMData
ld a, BANK(StageSharedBonusSlotGlow2Gfx)
ld hl, StageSharedBonusSlotGlow2Gfx
ld de, vTilesOB tile $38
ld bc, $0020
call LoadVRAMData
ld hl, Data_10958
ld a, BANK(Data_10958)
call Func_10aa
ld a, [wd624]
callba Func_174d4
ld hl, Data_1097d
ld a, BANK(Data_1097d)
call Func_10aa
ret
Data_10958:
db 3
dw Data_1095f
dw Data_10969
dw Data_10973
Data_1095f:
dr $1095f, $10969
Data_10969:
dr $10969, $10973
Data_10973:
dr $10973, $1097d
Data_1097d:
db 1
dw Data_10980
Data_10980:
dr $10980, $1098a
Func_1098a: ; 0x1098a
ret
Func_1098b: ; 0x1098b
ret
Func_1098c: ; 0x1098c
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
ld hl, EvolutionLineIds
add hl, bc
ld a, [hl]
ld c, a
ld b, $0
ld l, c
ld h, b
sla l
rl h
sla l
rl h
sla l
rl h
sla l
rl h
add hl, bc
add hl, bc
add hl, bc
ld c, l
ld b, h
ld hl, CatchEmModeInitialIndicatorStates
add hl, bc
ld de, wIndicatorStates
ld b, $13 ; number of indicators
.loop
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .loop
xor a
ld [wRightAlleyCount], a
callba Func_1f2ed
ld de, $0002
call PlaySong
ld a, [wCurrentStage]
bit 0, a
ret z
callba Func_1c2cb
ld [hFarCallTempA], a
ld a, $4
ld hl, Func_10184
call BankSwitch
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_102bc
ret
Func_109fc: ; 0x109fc
call Func_107a5
call Func_107c2
callba Func_1f2ff
ld a, [wCurrentStage]
bit 0, a
ret z
callba Func_1c2cb
call Func_10432
callba Func_30253
ld a, BANK(StageSharedBonusSlotGlowGfx)
ld hl, StageSharedBonusSlotGlowGfx
ld de, vTilesOB tile $1a
ld bc, $0160
call LoadVRAMData
ld a, BANK(StageSharedBonusSlotGlow2Gfx)
ld hl, StageSharedBonusSlotGlow2Gfx
ld de, vTilesOB tile $38
ld bc, $0020
call LoadVRAMData
ld hl, Data_10a63
ld a, BANK(Data_10a63)
call Func_10aa
ld a, [wd624]
callba Func_174d4
ld hl, Data_10a88
ld a, BANK(Data_10a88)
call Func_10aa
ret
Data_10a63:
db 3
dw Data_10a6a
dw Data_10a74
dw Data_10a7e
Data_10a6a:
dr $10a6a, $10a74
Data_10a74:
dr $10a74, $10a7e
Data_10a7e:
dr $10a7e, $10a88
Data_10a88:
db 1
dw Data_10a8b
Data_10a8b:
dr $10a8b, $10a95
Func_10a95: ; 0x19a95
ld a, [wCurrentStage]
call CallInFollowingTable
PointerTable_10a9b: ; 0x10a9b
; STAGE_RED_FIELD_TOP
padded_dab Func_20581
; STAGE_RED_FIELD_BOTTOM
padded_dab Func_20581
padded_dab Func_20581
padded_dab Func_20581
; STAGE_BLUE_FIELD_TOP
padded_dab Func_20bae
; STAGE_BLUE_FIELD_BOTTOM
padded_dab Func_20bae
Func_10ab3: ; 0x10ab3
ld a, [wInSpecialMode]
and a
ret nz
ld a, [wCurrentStage]
rst JumpTable ; calls JumpToFuncInTable
CallTable_10abc: ; 0x10abc
; STAGE_RED_FIELD_TOP
dw Func_10ebb
; STAGE_RED_FIELD_BOTTOM
dw Func_10ebb
dw Func_11054
dw Func_11054
; STAGE_BLUE_FIELD_TOP
dw Func_11061
; STAGE_BLUE_FIELD_BOTTOM
dw Func_11061
Func_10ac8: ; 0x10ac8
xor a
ld [wd5ca], a
call FillBottomMessageBufferWithBlackTile
xor a
ld [wInSpecialMode], a
ld [wWildMonIsHittable], a
ld [wd5b6], a
ld [wNumMonHits], a
ld [wd551], a
ld [wd554], a
call Func_10488
callba Func_86d2
ld a, [wCurrentStage]
rst JumpTable ; calls JumpToFuncInTable
CallTable_10af3: ; 0x10af3
; STAGE_RED_FIELD_TOP
dw Func_10fe3
; STAGE_RED_FIELD_BOTTOM
dw Func_10fe3
dw Func_11060
dw Func_11060
; STAGE_BLUE_FIELD_TOP
dw Func_11195
; STAGE_BLUE_FIELD_TOP
dw Func_11195
Func_10aff: ; 0x10aff
ld a, [wCurrentStage]
res 0, a
ld c, a
ld b, $0
srl c
sla a
sla a
sla a
sub c
ld c, a
ld hl, VideoData_10b2a
add hl, bc
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
push af
push bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
pop hl
pop af
call LoadVRAMData
ret
VideoData_10b2a: ; 0x10b2a
dab StageRedFieldTopGfx3
dw $8900
dw $E0
dab StageRedFieldTopGfx3
dw $8900
dw $E0
dab StageRedFieldTopGfx3
dw $8900
dw $E0
Func_10b3f: ; 0x10b3f
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld a, [wCurrentEvolutionType]
cp EVO_EXPERIENCE
ld de, StartTrainingText
jr z, .asm_10b55
ld de, FindItemsText
.asm_10b55
call LoadTextHeader
ret
Func_10b59: ; 0x10b59
xor a
ld [wd4aa], a
ld hl, wBottomMessageText
ld a, $81
ld b, $30
.asm_10b64
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
dec b
jr nz, .asm_10b64
ld hl, wPartyMons
call Func_10b8e
ld a, BANK(InGameMenuSymbolsGfx)
ld hl, InGameMenuSymbolsGfx
ld de, vTilesSH tile $08
ld bc, $0030
call LoadVRAMData
ld a, $0
ld hl, wBottomMessageText
deCoord 0, 0, vBGWin
ld bc, $00c0
call LoadVRAMData
ret
Func_10b8e: ; 0x10b8e
ld a, [wNumPartyMons]
ld c, $0
ld b, a
.asm_10b94
ld a, [hli]
call Func_10ba2
inc c
ld a, c
cp $6
jr z, .asm_10ba1
dec b
jr nz, .asm_10b94
.asm_10ba1
ret
Func_10ba2: ; 0x10ba2
push bc
push hl
swap c
sla c
ld b, $0
ld hl, wBottomMessageText
add hl, bc
ld d, h
ld e, l
ld c, a
ld b, $0
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
ld hl, PokemonNames
add hl, bc
ld a, $81
ld [de], a
inc de
ld a, $81
ld [de], a
inc de
ld a, $81
ld [de], a
inc de
ld a, $81
ld [de], a
inc de
call Func_3125
.asm_10bda
ld a, e
and $1f
cp $14
jr nc, .asm_10be7
ld a, $81
ld [de], a
inc de
jr .asm_10bda
.asm_10be7
pop hl
pop bc
ret
Func_10bea: ; 0x10bea
xor a
ld [wd461], a
ld [wd462], a
ld [wd463], a
.asm_10bf4
call Func_10c0c
call Func_b2e
call Func_10c38
rst AdvanceFrame
ld a, [wd809]
bit 0, a
jr z, .asm_10bf4
lb de, $00, $01
call PlaySoundEffect
ret
Func_10c0c: ; 0x10c0c
ld a, [wd80a]
ld b, a
ld a, [wNumPartyMons]
ld c, a
ld a, [wd461]
bit 6, b
jr z, .asm_10c28
and a
ret z
dec a
ld [wd461], a
lb de, $00, $03
call PlaySoundEffect
ret
.asm_10c28
bit 7, b
ret z
inc a
cp c
ret z
ld [wd461], a
lb de, $00, $03
call PlaySoundEffect
ret
Func_10c38: ; 0x10c38
ld a, [wd461]
ld hl, wd462
sub [hl]
jr nc, .asm_10c45
dec [hl]
xor a
jr .asm_10c4c
.asm_10c45
cp $6
jr c, .asm_10c4c
inc [hl]
ld a, $5
.asm_10c4c
ld c, a
push bc
ld a, [hl]
ld c, a
ld b, $0
ld hl, wPartyMons
add hl, bc
call Func_10b8e
ld a, [hJoypadState]
and a
ld a, [wd463]
jr z, .asm_10c62
xor a
.asm_10c62
inc a
ld [wd463], a
bit 3, a
pop bc
jr nz, .asm_10c78
swap c
sla c
ld b, $0
ld hl, wBottomMessageText + $03
add hl, bc
ld a, $88
ld [hl], a
.asm_10c78
ld a, [wd462]
and a
jr z, .asm_10c83
ld a, $8a
ld [wBottomMessageText + $11], a
.asm_10c83
ld a, [wd462]
add $7
jr z, .asm_10c96
ld c, a
ld a, [wNumPartyMons]
cp c
jr c, .asm_10c96
ld a, $89
ld [wBottomMessageText + $b1], a
.asm_10c96
ld a, $0
ld hl, wBottomMessageText
deCoord 0, 0, vBGWin
ld bc, $00c0
call LoadVRAMData
ret
Func_10ca5: ; 0x10ca5
ld a, [wd461]
ld c, a
ld b, $0
ld hl, wPartyMons
add hl, bc
ld a, [wCurrentEvolutionMon]
cp $ff
ret z
ld [hl], a
ret
Func_10cb7: ; 0x10cb7
call FillBottomMessageBufferWithBlackTile
call Func_10b59
ld a, $60
ld [hWY], a
dec a
ld [hLYC], a
ld a, $fd
ld [hLCDCMask], a
call Func_10bea
ld a, $86
ld [hWY], a
ld a, $83
ld [hLYC], a
ld [hLastLYC], a
ld a, $ff
ld [hLCDCMask], a
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_10cee
ld a, BANK(StageRedFieldTopStatusBarSymbolsGfx_GameBoy)
ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoy + $80
ld de, vTilesSH tile $08
ld bc, $0030
call LoadVRAMData
jr .asm_10cfc
.asm_10cee
ld a, BANK(StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor)
ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor + $80
ld de, vTilesSH tile $08
ld bc, $0030
call LoadVRAMData
.asm_10cfc
call FillBottomMessageBufferWithBlackTile
ld a, $1
ld [wd4aa], a
ld [wInSpecialMode], a
ld [wSpecialMode], a
xor a
ld [wd54d], a
ld a, [wd461]
ld c, a
ld b, $0
ld hl, wPartyMons
add hl, bc
ld a, [hl]
ld [wCurrentCatchEmMon], a
ret
Func_10d1d: ; 0x10d1d
ld hl, wd586
ld b, $18
.asm_10d22
ld a, $1
ld [hli], a
xor a
ld [hli], a
dec b
jr nz, .asm_10d22
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
ld hl, Data_1298b
add hl, bc
ld a, [hl]
add $2
ld [wd555], a
xor a
ld hl, wd566
ld b, $13
.asm_10d40
ld [hli], a
dec b
jr nz, .asm_10d40
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
sla c
rl b
ld hl, CatchEmTimerData
add hl, bc
ld a, [hli]
ld c, a
ld a, [hl]
ld b, a
callba StartTimer
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
sla c ; multiply mon id by 6
rl b
add c
ld c, a
jr nc, .noCarry
inc b
.noCarry
sla c
rl b
ld hl, MonEvolutions
add hl, bc
push hl
ld bc, $03ff
.countMonEvolutionsLoop
ld a, [hli]
and a
jr z, .noEvolution
inc c
.noEvolution
inc hl
dec b
jr nz, .countMonEvolutionsLoop
ld a, c
cp $ff
jr nz, .asm_10d8a
xor a
.asm_10d8a
call Func_a21
sla a
ld c, a
pop hl
add hl, bc ; hl points to one of three entries in mon's evolution data
ld a, [hli] ; a = mon id of evolution
dec a
ld [wCurrentEvolutionMon], a
ld a, [hl] ; a = evoluion type id
ld [wCurrentEvolutionType], a
xor a
ld [wd554], a
ld [wd556], a
ld [wd557], a
ld hl, wd55c
ld a, $1
ld b, $3
.asm_10dac
ld [hli], a
dec b
jr nz, .asm_10dac
xor a
ld b, $7
.asm_10db3
ld [hli], a
dec b
jr nz, .asm_10db3
ld de, wd55c
ld a, [wd555]
ld c, a
inc a
ld b, a
.asm_10dc0
push bc
ld a, c
call Func_a21
ld c, a
ld b, $0
ld hl, wd55c
add hl, bc
ld c, [hl]
ld a, [de]
ld [hl], a
ld a, c
ld [de], a
pop bc
inc de
dec b
jr nz, .asm_10dc0
callba InitBallSaverForCatchEmMode
call Func_10b3f
call Func_3579
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_10e09
ld a, BANK(StageRedFieldBottomBaseGameBoyColorGfx)
ld hl, StageRedFieldBottomBaseGameBoyColorGfx + $300
ld de, vTilesSH tile $2e
ld bc, $0020
call LoadOrCopyVRAMData
ld a, $0
ld hl, CatchBarTiles
deCoord 6, 8, vBGMap
ld bc, (CatchBarTilesEnd - CatchBarTiles)
call LoadOrCopyVRAMData
.asm_10e09
ret
Func_10e0a: ; 0x10e0a
ld a, [wCurrentEvolutionMon]
cp $ff
jp z, Func_10e8b
ld c, a
ld b, $0
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
ld hl, PokemonNames + 1
add hl, bc
ld de, ItEvolvedIntoAnText ; "It evolved into an"
ld bc, Data_2b34
ld a, [hl]
; check if mon's name starts with a vowel, so it can print "an", instead of "a"
cp "A"
jr z, .nameStartsWithVowel
cp "I"
jr z, .nameStartsWithVowel
cp "U"
jr z, .nameStartsWithVowel
cp "E"
jr z, .nameStartsWithVowel
cp "O"
jr z, .nameStartsWithVowel
ld de, ItEvolvedIntoAText ; "It evolved into a"
ld bc, Data_2b1c
.nameStartsWithVowel
push hl
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
pop de
call LoadTextHeader
ld hl, wd5d4
pop de
call LoadTextHeader
pop hl
ld de, wBottomMessageText + $20
ld b, $0
.asm_10e67
ld a, [hli]
and a
jr z, .asm_10e70
ld [de], a
inc de
inc b
jr .asm_10e67
.asm_10e70
ld a, $20
ld [de], a
inc de
xor a
ld [de], a
ld a, [wd5db]
add b
ld [wd5db], a
ld a, $14
sub b
srl a
ld b, a
ld a, [wd5d8]
add b
ld [wd5d8], a
ret
Func_10e8b: ; 0x10e8b
ld bc, OneMillionPoints
callba AddBigBCD6FromQueue
ld bc, $0100
ld de, $0000
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5d4
ld de, Data_2b6b
call Func_32cc
pop de
pop bc
ld hl, wd5cc
ld de, EvolutionSpecialBonusText
call LoadTextHeader
ret
Func_10ebb: ; 0x10ebb
ld a, [wNumPartyMons]
and a
ret z
call Func_10cb7
call Func_10d1d
ld a, [wd555]
sub $2
ld c, a
sla c
ld hl, IndicatorStatesPointerTable_10f3b
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wIndicatorStates
ld b, $13
.asm_10eda
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .asm_10eda
xor a
ld [wLeftAlleyCount], a
call Func_107b0
ld a, $2
ld [wd7ad], a
ld de, $0002
call PlaySong
call SetPokemonSeenFlag
ld a, [wCurrentStage]
bit 0, a
jr nz, .asm_10f0b
ld a, BANK(Data_dbe80)
ld hl, Data_dbe80
ld de, vTilesSH tile $10
ld bc, $00e0
call LoadOrCopyVRAMData
ret
.asm_10f0b
ld a, BANK(Data_dbe80)
ld hl, Data_dbe80
ld de, vTilesOB tile $20
ld bc, $00e0
call LoadOrCopyVRAMData
callba Func_14135
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_102bc
ret
IndicatorStatesPointerTable_10f3b: ; 0x10f3b
dw IndicatorStates_10f4b
dw IndicatorStates_10f5e
dw IndicatorStates_10f71
dw IndicatorStates_10f84
dw IndicatorStates_10f97
dw IndicatorStates_10faa
dw IndicatorStates_10fbd
dw IndicatorStates_10fd0
IndicatorStates_10f4b: ; 0x10f4b
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $01, $01, $00, $00, $00, $00
IndicatorStates_10f5e: ; 0x10f5e
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $00, $01, $01, $00, $00, $00, $00
IndicatorStates_10f71: ; 0x10f71
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10f84: ; 0x10f84
db $00, $00, $00, $00, $00, $00, $00, $00, $01, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10f97: ; 0x10f97
db $00, $00, $00, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10faa: ; 0x10faa
db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10fbd: ; 0x10fbd
db $00, $00, $80, $80, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10fd0: ; 0x10fd0
db $00, $00, $80, $80, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
Func_10fe3: ; 0x10fe3
call Func_107a5
call Func_107c2
call Func_107c8
call Func_107e9
ld a, [wCurrentStage]
bit 0, a
jp z, Func_10aff
callba Func_14135
callba Func_16425
callba Func_30253
ld a, BANK(StageSharedBonusSlotGlowGfx)
ld hl, StageSharedBonusSlotGlowGfx + $60
ld de, vTilesOB tile $20
ld bc, $00e0
call LoadVRAMData
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_11036
ld a, BANK(StageRedFieldBottomOBJPalette7)
ld hl, StageRedFieldBottomOBJPalette7
ld de, $0078
ld bc, $0008
call Func_7dc
.asm_11036
ld hl, Data_10958
ld a, BANK(Data_10958)
call Func_10aa
ld a, [wd624]
callba Func_174d4
ld hl, Data_1097d
ld a, BANK(Data_1097d)
call Func_10aa
ret
Func_11054: ; 0x11054
ld a, [wNumPartyMons]
and a
ret z
call Func_10cb7
call Func_10d1d
ret
Func_11060: ; 0x11060
ret
Func_11061: ; 0x11061
ld a, [wNumPartyMons]
and a
ret z
call Func_10cb7
call Func_10d1d
ld a, $1
ld [wd643], a
ld a, [wd555]
sub $2
ld c, a
sla c
ld hl, IndicatorStatesPointerTable_110ed
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wIndicatorStates
ld b, $13
.asm_11085
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .asm_11085
xor a
ld [wLeftAlleyCount], a
callba Func_1f2ed
ld a, $2
ld [wd7ad], a
ld de, $0002
call PlaySong
call SetPokemonSeenFlag
ld a, [wCurrentStage]
bit 0, a
jr nz, .asm_110bd
ld a, BANK(Data_dbe80)
ld hl, Data_dbe80
ld de, vTilesOB tile $60
ld bc, $00e0
call LoadOrCopyVRAMData
ret
.asm_110bd
ld a, BANK(Data_dbe80)
ld hl, Data_dbe80
ld de, vTilesOB tile $20
ld bc, $00e0
call LoadOrCopyVRAMData
callba Func_1c2cb
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_102bc
ret
IndicatorStatesPointerTable_110ed: ; 0x110ed
dw IndicatorStates_110fd
dw IndicatorStates_11110
dw IndicatorStates_11123
dw IndicatorStates_11136
dw IndicatorStates_11149
dw IndicatorStates_1115c
dw IndicatorStates_1116f
dw IndicatorStates_11182
IndicatorStates_110fd: ; 0x110fd
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $01, $01, $00, $00, $00, $00
IndicatorStates_11110: ; 0x11110
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $00, $01, $01, $00, $00, $00, $00
IndicatorStates_11123: ; 0x11123
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_11136: ; 0x11136
db $00, $00, $80, $00, $00, $00, $00, $00, $01, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_11149: ; 0x11149
db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_1115c: ; 0x1115c
db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_1116f: ; 0x1116f
db $80, $00, $80, $80, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_11182: ; 0x11182
db $80, $00, $80, $80, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
Func_11195: ; 0x11195
xor a
ld [wd643], a
call Func_107a5
call Func_107c2
callba Func_1f2ff
ld a, [wCurrentStage]
bit 0, a
jp z, Func_1120e
callba Func_1c2cb
callba Func_1e8f6
callba Func_30253
ld a, Bank(StageSharedBonusSlotGlowGfx)
ld hl, StageSharedBonusSlotGlowGfx + $60
ld de, vTilesOB tile $20
ld bc, $00e0
call LoadVRAMData
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_111f0
ld a, BANK(StageBlueFieldBottomOBJPalette7)
ld hl, StageBlueFieldBottomOBJPalette7
ld de, $0078
ld bc, $0008
call Func_7dc
.asm_111f0
ld hl, Data_10a63
ld a, BANK(Data_10a63)
call Func_10aa
ld a, [wd624]
callba Func_174d4
ld hl, Data_10a88
ld a, BANK(Data_10a88)
call Func_10aa
ret
Func_1120e: ; 0x1120e
ld a, [wCurrentStage]
sub $4
res 0, a
ld c, a
ld b, $0
srl c
sla a
sla a
sla a
sub c
ld c, a
ld hl, VRAMData_1123b
add hl, bc
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
push af
push bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
pop hl
pop af
call LoadVRAMData
ret
VRAMData_1123b: ; 0x1123b
dab StageBlueFieldTopGfx3
dw $8600, $E0
dab StageBlueFieldTopGfx3
dw $8600, $E0
dab StageBlueFieldTopGfx3
dw $8600, $E0
dab StageBlueFieldTopGfx3
dw $8600, $E0
dab StageBlueFieldTopGfx3
dw $8600, $E0
dab StageBlueFieldTopGfx3
dw $8600, $E0
dab StageBlueFieldTopGfx3
dw $8600, $E0
INCLUDE "data/wild_mons.asm"
INCLUDE "data/evolution_line_starts.asm"
INCLUDE "data/evolution_lines.asm"
INCLUDE "data/evolution_methods.asm"
INCLUDE "data/mon_names.asm"
INCLUDE "data/mon_initial_indicator_states.asm"
Data_1298b: ; 0x1298b
db $01 ; BULBASAUR
db $02 ; IVYSAUR
db $03 ; VENUSAUR
db $01 ; CHARMANDER
db $02 ; CHARMELEON
db $03 ; CHARIZARD
db $01 ; SQUIRTLE
db $02 ; WARTORTLE
db $03 ; BLASTOISE
db $01 ; CATERPIE
db $02 ; METAPOD
db $03 ; BUTTERFREE
db $01 ; WEEDLE
db $02 ; KAKUNA
db $03 ; BEEDRILL
db $01 ; PIDGEY
db $02 ; PIDGEOTTO
db $03 ; PIDGEOT
db $01 ; RATTATA
db $03 ; RATICATE
db $01 ; SPEAROW
db $03 ; FEAROW
db $01 ; EKANS
db $03 ; ARBOK
db $01 ; PIKACHU
db $03 ; RAICHU
db $01 ; SANDSHREW
db $03 ; SANDSLASH
db $01 ; NIDORAN_F
db $02 ; NIDORINA
db $04 ; NIDOQUEEN
db $01 ; NIDORAN_M
db $02 ; NIDORINO
db $04 ; NIDOKING
db $02 ; CLEFAIRY
db $03 ; CLEFABLE
db $02 ; VULPIX
db $03 ; NINETALES
db $02 ; JIGGLYPUFF
db $03 ; WIGGLYTUFF
db $02 ; ZUBAT
db $03 ; GOLBAT
db $01 ; ODDISH
db $02 ; GLOOM
db $04 ; VILEPLUME
db $02 ; PARAS
db $03 ; PARASECT
db $02 ; VENONAT
db $03 ; VENOMOTH
db $02 ; DIGLETT
db $03 ; DUGTRIO
db $02 ; MEOWTH
db $03 ; PERSIAN
db $02 ; PSYDUCK
db $03 ; GOLDUCK
db $02 ; MANKEY
db $03 ; PRIMEAPE
db $02 ; GROWLITHE
db $03 ; ARCANINE
db $01 ; POLIWAG
db $02 ; POLIWHIRL
db $04 ; POLIWRATH
db $01 ; ABRA
db $02 ; KADABRA
db $04 ; ALAKAZAM
db $01 ; MACHOP
db $02 ; MACHOKE
db $04 ; MACHAMP
db $01 ; BELLSPROUT
db $02 ; WEEPINBELL
db $04 ; VICTREEBEL
db $02 ; TENTACOOL
db $03 ; TENTACRUEL
db $01 ; GEODUDE
db $02 ; GRAVELER
db $04 ; GOLEM
db $02 ; PONYTA
db $03 ; RAPIDASH
db $02 ; SLOWPOKE
db $03 ; SLOWBRO
db $02 ; MAGNEMITE
db $03 ; MAGNETON
db $04 ; FARFETCH_D
db $02 ; DODUO
db $03 ; DODRIO
db $02 ; SEEL
db $03 ; DEWGONG
db $02 ; GRIMER
db $03 ; MUK
db $02 ; SHELLDER
db $03 ; CLOYSTER
db $01 ; GASTLY
db $02 ; HAUNTER
db $04 ; GENGAR
db $04 ; ONIX
db $02 ; DROWZEE
db $03 ; HYPNO
db $02 ; KRABBY
db $03 ; KINGLER
db $02 ; VOLTORB
db $03 ; ELECTRODE
db $02 ; EXEGGCUTE
db $03 ; EXEGGUTOR
db $02 ; CUBONE
db $03 ; MAROWAK
db $04 ; HITMONLEE
db $04 ; HITMONCHAN
db $04 ; LICKITUNG
db $02 ; KOFFING
db $03 ; WEEZING
db $02 ; RHYHORN
db $03 ; RHYDON
db $04 ; CHANSEY
db $04 ; TANGELA
db $04 ; KANGASKHAN
db $04 ; HORSEA
db $04 ; SEADRA
db $02 ; GOLDEEN
db $03 ; SEAKING
db $02 ; STARYU
db $03 ; STARMIE
db $04 ; MR_MIME
db $04 ; SCYTHER
db $04 ; JYNX
db $04 ; ELECTABUZZ
db $04 ; MAGMAR
db $04 ; PINSIR
db $04 ; TAUROS
db $02 ; MAGIKARP
db $03 ; GYARADOS
db $04 ; LAPRAS
db $04 ; DITTO
db $02 ; EEVEE
db $03 ; VAPOREON
db $03 ; JOLTEON
db $03 ; FLAREON
db $04 ; PORYGON
db $02 ; OMANYTE
db $03 ; OMASTAR
db $02 ; KABUTO
db $03 ; KABUTOPS
db $04 ; AERODACTYL
db $04 ; SNORLAX
db $04 ; ARTICUNO
db $04 ; ZAPDOS
db $04 ; MOLTRES
db $01 ; DRATINI
db $02 ; DRAGONAIR
db $04 ; DRAGONITE
db $04 ; MEWTWO
db $06 ; MEW
INCLUDE "data/catchem_timer_values.asm"
INCLUDE "data/mon_gfx/mon_gfx_pointers.asm"
INCLUDE "data/mon_animated_sprite_types.asm"
INCLUDE "data/collision/mon_collision_mask_pointers.asm"
Data_13685: ; 0x13685
; Each 3-byte entry is related to an evolution line. Don't know what this is for, yet.
db $12, $12, $10 ; EVOLINE_BULBASAUR
db $10, $10, $10 ; EVOLINE_CHARMANDER
db $12, $12, $0E ; EVOLINE_SQUIRTLE
db $14, $14, $12 ; EVOLINE_CATERPIE
db $14, $14, $10 ; EVOLINE_WEEDLE
db $0A, $0A, $0E ; EVOLINE_PIDGEY
db $11, $13, $10 ; EVOLINE_RATTATA
db $0B, $0B, $10 ; EVOLINE_SPEAROW
db $12, $12, $0E ; EVOLINE_EKANS
db $12, $14, $0E ; EVOLINE_PIKACHU
db $10, $12, $10 ; EVOLINE_SANDSHREW
db $11, $12, $0E ; EVOLINE_NIDORAN_F
db $11, $12, $0E ; EVOLINE_NIDORAN_M
db $12, $13, $10 ; EVOLINE_CLEFAIRY
db $11, $11, $10 ; EVOLINE_VULPIX
db $12, $12, $10 ; EVOLINE_JIGGLYPUFF
db $08, $08, $10 ; EVOLINE_ZUBAT
db $10, $10, $10 ; EVOLINE_ODDISH
db $10, $10, $10 ; EVOLINE_PARAS
db $11, $11, $0E ; EVOLINE_VENONAT
db $10, $10, $0E ; EVOLINE_DIGLETT
db $14, $14, $0E ; EVOLINE_MEOWTH
db $30, $30, $10 ; EVOLINE_PSYDUCK
db $12, $12, $10 ; EVOLINE_MANKEY
db $12, $12, $10 ; EVOLINE_GROWLITHE
db $10, $10, $10 ; EVOLINE_POLIWAG
db $10, $10, $10 ; EVOLINE_ABRA
db $12, $14, $10 ; EVOLINE_MACHOP
db $10, $12, $10 ; EVOLINE_BELLSPROUT
db $0C, $0C, $12 ; EVOLINE_TENTACOOL
db $12, $14, $0C ; EVOLINE_GEODUDE
db $12, $14, $0E ; EVOLINE_PONYTA
db $30, $30, $10 ; EVOLINE_SLOWPOKE
db $14, $14, $10 ; EVOLINE_MAGNEMITE
db $12, $12, $0E ; EVOLINE_FARFETCH_D
db $12, $12, $0E ; EVOLINE_DODUO
db $14, $14, $0E ; EVOLINE_SEEL
db $12, $12, $10 ; EVOLINE_GRIMER
db $14, $14, $0E ; EVOLINE_SHELLDER
db $10, $10, $0E ; EVOLINE_GASTLY
db $12, $12, $10 ; EVOLINE_ONIX
db $14, $14, $10 ; EVOLINE_DROWZEE
db $14, $12, $10 ; EVOLINE_KRABBY
db $02, $02, $10 ; EVOLINE_VOLTORB
db $12, $12, $10 ; EVOLINE_EXEGGCUTE
db $12, $12, $10 ; EVOLINE_CUBONE
db $14, $10, $10 ; EVOLINE_HITMONLEE
db $14, $10, $10 ; EVOLINE_HITMONCHAN
db $14, $12, $10 ; EVOLINE_LICKITUNG
db $11, $11, $10 ; EVOLINE_KOFFING
db $14, $14, $10 ; EVOLINE_RHYHORN
db $12, $12, $10 ; EVOLINE_CHANSEY
db $10, $10, $10 ; EVOLINE_TANGELA
db $12, $12, $10 ; EVOLINE_KANGASKHAN
db $0F, $0F, $0E ; EVOLINE_HORSEA
db $12, $12, $0E ; EVOLINE_GOLDEEN
db $23, $23, $10 ; EVOLINE_STARYU
db $13, $13, $10 ; EVOLINE_MR_MIME
db $13, $13, $10 ; EVOLINE_SCYTHER
db $12, $12, $10 ; EVOLINE_JYNX
db $12, $14, $10 ; EVOLINE_ELECTABUZZ
db $14, $14, $0E ; EVOLINE_MAGMAR
db $12, $12, $0E ; EVOLINE_PINSIR
db $12, $14, $10 ; EVOLINE_TAUROS
db $18, $18, $0C ; EVOLINE_MAGIKARP
db $16, $16, $0C ; EVOLINE_LAPRAS
db $14, $14, $10 ; EVOLINE_DITTO
db $12, $12, $10 ; EVOLINE_EEVEE
db $10, $10, $0E ; EVOLINE_PORYGON
db $12, $12, $0E ; EVOLINE_OMANYTE
db $12, $12, $0E ; EVOLINE_KABUTO
db $0C, $0C, $12 ; EVOLINE_AERODACTYL
db $26, $36, $12 ; EVOLINE_SNORLAX
db $13, $13, $10 ; EVOLINE_ARTICUNO
db $13, $13, $10 ; EVOLINE_ZAPDOS
db $13, $13, $10 ; EVOLINE_MOLTRES
db $12, $12, $0E ; EVOLINE_DRATINI
db $14, $14, $0E ; EVOLINE_MEWTWO
db $14, $14, $0E ; EVOLINE_MEW
SECTION "bank5", ROMX, BANK[$5]
Func_14000: ; 0x14000
call Func_14091
call Func_159f4
call Func_15450
call Func_16859
call Func_14ece
call Func_14234
call Func_16425
call Func_142fc
call Func_1404a
ret
Func_1401c: ; 0x1401c
call Func_14091
call Func_14377
call Func_14135
call Func_asm_1522d
call Func_14282
call Func_1414b
call Func_14234
call Func_14746
call Func_14707
call Func_140f9
call Func_16878
call Func_140e2
call Func_16425
call Func_142fc
call Func_1404a
ret
Func_1404a: ; 0x1404a
ld a, [wd57d]
and a
ret z
ld a, [hGameBoyColorFlag]
and a
ret nz
ld a, [wd580]
and a
ret z
ld a, $f
ld [wd581], a
call Func_1762f
ld hl, wTimerDigits
ld a, $ff
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
ld hl, wTimerDigits
ld a, [wTimerMinutes]
and $f
call LoadTimerDigitTiles
ld a, [wTimerSeconds]
swap a
and $f
call LoadTimerDigitTiles
ld a, [wTimerSeconds]
and $f
call LoadTimerDigitTiles
ld a, e
srl a
srl a
ld d, $90 ; colon
call LoadTimerDigitTiles
ret
Func_14091: ; 0x14091
ld a, $ff
ld [wd4d7], a
ld [wd4db], a
ld a, [wd4b4]
ld [wd4c5], a
ld a, [wd4b6]
ld [wd4c6], a
ld a, [wBallRotation]
ld [wd4c7], a
ld a, [wd503]
and a
ret z
xor a
ld [wd503], a
ld a, [wd502]
res 1, a
ld [wd502], a
and $1
ld c, a
ld a, [wStageCollisionState]
and $fe
or c
ld [wStageCollisionState], a
lb de, $00, $07
call PlaySoundEffect
ld a, [wCurrentStage]
bit 0, a
ret nz
callba LoadStageCollisionAttributes
call Func_159f4
ret
Func_140e2: ; 0x140e2
ld a, $ff
ld [wd60e], a
ld [wd60f], a
ld a, [wd60c]
call Func_16f28
ld a, [wd60d]
add $14
call Func_16f28
ret
Func_140f9: ; 0x140f9
ld a, [wd4ef]
and a
jr z, .asm_1410c
xor a
ld a, $66
ld [wc7e3], a
ld a, $67
ld [wc803], a
ld a, $2
.asm_1410c
call Func_149d9
ld a, [wLeftMapMoveCounter]
call Func_149f5
ld a, [wd4f1]
and a
jr z, .asm_14127
ld a, $6a
ld [wc7f0], a
ld a, $6b
ld [wc810], a
ld a, $2
.asm_14127
add $3
call Func_149d9
ld a, [wRightMapMoveCounter]
add $4
call Func_149f5
ret
Func_14135: ; 0x14135
ld bc, $0000
.asm_14138
push bc
ld hl, wIndicatorStates
add hl, bc
ld a, [hl]
res 7, a
call Func_169cd
pop bc
inc c
ld a, c
cp $5
jr nz, .asm_14138
ret
Func_1414b: ; 0x1414b
ld a, [wInSpecialMode]
and a
ret z
ld a, [wSpecialMode]
cp $2
ret z
ld a, [wd5c6]
and a
jr nz, .asm_14165
ld a, [wCapturingMon]
and a
jr nz, .asm_14165
jp Func_14210
.asm_14165
callba Func_141f2
callba Func_10362
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_10301
ld a, [wCapturingMon]
and a
ret z
ld a, BANK(PikachuSaverGfx)
ld hl, PikachuSaverGfx + $c0
ld de, vTilesOB tile $7e
ld bc, $0020
call FarCopyData
ld a, BANK(GFX_a8800)
ld hl, GFX_a8800
ld de, vTilesSH tile $10
ld bc, $0180
call FarCopyData
ld a, [wBallType]
cp GREAT_BALL
jr nc, .notPokeball
ld a, Bank(PinballPokeballShakeGfx)
ld hl, PinballPokeballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call FarCopyData
ret
.notPokeball
cp ULTRA_BALL
jr nc, .notGreatball
ld a, Bank(PinballGreatballShakeGfx)
ld hl, PinballGreatballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call FarCopyData
ret
.notGreatball
cp MASTER_BALL
jr nc, .notUltraball
ld a, Bank(PinballUltraballShakeGfx)
ld hl, PinballUltraballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call FarCopyData
ret
.notUltraball
ld a, Bank(PinballMasterballShakeGfx)
ld hl, PinballMasterballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call FarCopyData
ret
Func_141f2: ; 0x141f2
ld a, $80
hlCoord 7, 4, vBGMap
call Func_14209
hlCoord 7, 5, vBGMap
call Func_14209
hlCoord 7, 6, vBGMap
call Func_14209
hlCoord 7, 7, vBGMap
; fall through
Func_14209: ; 0x14209
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ret
Func_14210: ; 0x14210
ld hl, wd586
ld b, $18
.asm_14215
ld a, [hli]
xor $1
ld [hli], a
dec b
jr nz, .asm_14215
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_102bc
ret
Func_14234: ; 0x14234
ld a, [wInSpecialMode]
and a
ret z
ld a, [wSpecialMode]
cp $1
ret nz
ld a, [wd554]
cp $3
ret z
ld a, [wCurrentStage]
bit 0, a
jr nz, .asm_1425c
ld a, BANK(Data_dbe80)
ld hl, Data_dbe80
ld de, vTilesSH tile $10
ld bc, $00e0
call FarCopyData
jr .asm_1426a
.asm_1425c
ld a, BANK(Data_dbe80)
ld hl, Data_dbe80
ld de, vTilesOB tile $20
ld bc, $00e0
call FarCopyData
.asm_1426a
ld a, [wd551]
and a
ret z
ld a, [hGameBoyColorFlag]
and a
ret z
ld a, BANK(Data_dd188)
ld hl, Data_dd188
ld de, $0070
ld bc, $0010
call Func_6fd
ret
Func_14282: ; 0x14282
ld a, [wInSpecialMode]
and a
jr z, .asm_1429e
ld a, [wSpecialMode]
and a
jr nz, .asm_14296
ld a, [wNumMonHits]
and a
call nz, Func_142b3
ret
.asm_14296
cp $1
jr nz, .asm_1429e
call Func_142c3
ret
.asm_1429e
ld a, [wd624]
call Func_174d4
ld a, BANK(Data_d8f60)
ld hl, Data_d8f60
ld de, vTilesSH tile $2e
ld bc, $0020
call FarCopyData
ret
Func_142b3: ; 0x142b3
push af
callba Func_10611
pop af
dec a
jr nz, Func_142b3
ret
Func_142c3: ; 0x142c3
ld de, $0000
ld a, [wd554]
and a
ret z
ld b, a
.asm_142cc
ld a, [wCurrentEvolutionType]
call Func_142d7
inc de
dec b
jr nz, .asm_142cc
ret
Func_142d7: ; 0x142d7
push bc
push de
dec a
ld c, a
ld b, $0
swap c
sla c
ld hl, Data_d8e80
add hl, bc
swap e
sla e
push hl
ld hl, vTilesSH tile $2e
add hl, de
ld d, h
ld e, l
pop hl
ld bc, $0020
ld a, BANK(Data_d8e80)
call FarCopyData
pop de
pop bc
ret
Func_142fc: ; 0x142fc
ld a, [wd4c8]
and a
jr nz, .asm_1430e
callba LoadBallGfx
jr .asm_14328
.asm_1430e
cp $1
jr nz, .asm_1431e
callba LoadMiniBallGfx
jr .asm_14328
.asm_1431e
callba Func_dd62
.asm_14328
ld a, [hGameBoyColorFlag]
and a
ret z
ld a, [wBallType]
cp GREAT_BALL
jr nc, .notPokeball
ld a, BANK(PokeBallObjPalette)
ld hl, PokeBallObjPalette
ld de, $0040
ld bc, $0008
call Func_6fd
ret
.notPokeball
cp ULTRA_BALL
jr nc, .notGreatball
ld a, BANK(GreatBallObjPalette)
ld hl, GreatBallObjPalette
ld de, $0040
ld bc, $0008
call Func_6fd
ret
.notGreatball
cp MASTER_BALL
jr nc, .notUltraball
ld a, BANK(UltraBallObjPalette)
ld hl, UltraBallObjPalette
ld de, $0040
ld bc, $0008
call Func_6fd
ret
.notUltraball
ld a, BANK(MasterBallObjPalette)
ld hl, MasterBallObjPalette
ld de, $0040
ld bc, $0008
call Func_6fd
ret
Func_14377: ; 0x14377
ld a, [wInSpecialMode]
and a
jr nz, .asm_143b1
ld a, [wd609]
and a
jr z, .asm_14393
ld a, [wd498]
add $15
callba Func_30256
ret
.asm_14393
ld a, [wd608]
and a
jr z, .asm_143a6
ld a, $1a
callba Func_30256
ret
.asm_143a6
callba Func_30253
ret
.asm_143b1
ld a, [wSpecialMode]
cp $2
ret nz
ld a, [wd54d]
cp $3
jr nz, .asm_143c9
callba Func_30253
ret
.asm_143c9
ld a, [wd604]
and a
ld a, $14
jr nz, .asm_143d6
ld a, [wd55a]
add $12
.asm_143d6
callba Func_30256
ret
INCLUDE "engine/collision/red_stage_game_object_collision.asm"
Func_1460e: ; 0x1460e
call ResolveVoltorbCollision
call ResolveRedStageSpinnerCollision
call ResolveRedStagePinballUpgradeTriggersCollision
call HandleRedStageBallTypeUpgradeCounter
call Func_15270
call ResolveRedStageBoardTriggerCollision
call ResolveRedStagePikachuCollision
call ResolveStaryuCollision
call ResolveBellsproutCollision
call ResolveDittoSlotCollision
call Func_161e0
call Func_164e3
call Func_146a9
call Func_174ea
call Func_148cf
callba Func_30188
ld a, $0
callba Func_10000
ret
Func_14652: ; 0x14652
call Func_14795
call Func_15f86
call ResolveDiglettCollision
call Func_14880
call Func_14e10
call Func_154a9
call HandleRedStageBallTypeUpgradeCounter
call Func_151cb
call Func_1652d
call ResolveRedStagePikachuCollision
call Func_167ff
call Func_169a6
call ResolveRedStageBonusMultiplierCollision
call Func_16279
call Func_161af
call Func_164e3
call Func_14733
call Func_146a2
call Func_174d0
callba Func_30188
ld a, $0
callba Func_10000
ret
Func_146a2: ; 0x146a2
call Func_146a9
call nz, Func_14707
ret
Func_146a9: ; 0x146a9
ld a, [wBallSaverTimerFrames]
ld hl, wBallSaverTimerSeconds
or [hl]
ret z
ld a, [wBallXPos + 1]
cp $9a
jr nc, .asm_146e8
ld a, [wBallSaverTimerFrames]
dec a
ld [wBallSaverTimerFrames], a
bit 7, a
jr z, .asm_146e8
ld a, 59
ld [wBallSaverTimerFrames], a
ld a, [hl]
dec a
bit 7, a
jr nz, .asm_146cf
ld [hl], a
.asm_146cf
inc a
ld c, $0
cp $2
jr c, .asm_146e4
ld c, $4
cp $6
jr c, .asm_146e4
ld c, $10
cp $b
jr c, .asm_146e4
ld c, $ff
.asm_146e4
ld a, c
ld [wd4a2], a
.asm_146e8
ld a, [wd4a2]
ld c, $0
and a
jr z, .asm_146fe
ld c, $1
cp $ff
jr z, .asm_146fe
ld hl, hNumFramesDropped
and [hl]
jr z, .asm_146fe
ld c, $0
.asm_146fe
ld a, [wBallSaverIconOn]
cp c
ld a, c
ld [wBallSaverIconOn], a
ret
Func_14707: ; 0x14707
ld a, [wBallSaverIconOn]
and a
jr nz, .asm_1471c
ld a, BANK(Data_1172b)
ld hl, Data_1172b
deCoord 8, 13, vBGMap
ld bc, $0004
call LoadOrCopyVRAMData
ret
.asm_1471c
ld a, BANK(Data_1472f)
ld hl, Data_1472f
deCoord 8, 13, vBGMap
ld bc, $0004
call LoadOrCopyVRAMData
ret
Data_1172b:
dr $1472b, $1472f
Data_1472f:
dr $1472f, $14733
Func_14733: ; 0x14733
ld c, $0
ld a, [wd49b]
and a
jr z, .asm_1473d
ld c, $1
.asm_1473d
ld a, [wd4a9]
cp c
ld a, c
ld [wd4a9], a
ret z
; fall through
Func_14746: ; 0x14746
ld c, $0
ld a, [wd49b]
and a
jr z, .asm_14750
ld c, $2
.asm_14750
ld b, $0
ld hl, Data_1475f
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, BANK(Data_1475f)
call Func_10aa
ret
Data_1475f:
dw Data_14763
dw Data_14768
Data_14763:
db 2
dw Data_1476d
dw Data_14777
Data_14768:
db 2
dw Data_14781
dw Data_1478b
Data_1476d:
dr $1476d, $14777
Data_14777:
dr $14777, $14781
Data_14781:
dr $14781, $1478b
Data_1478b:
dr $1478b, $14795
Func_14795: ; 0x14795
ld a, [wWildMonCollision]
and a
ret z
xor a
ld [wWildMonCollision], a
ld a, $1
ld [wBallHitWildMon], a
lb de, $00, $06
call PlaySoundEffect
ret
ResolveDiglettCollision: ; 0x147aa
ld a, [wWhichDiglett]
and a
jp z, .asm_14834
xor a
ld [wWhichDiglett], a
ld a, [wWhichDiglettId]
sub $1
sla a
ld c, a
ld b, $0
ld hl, wLeftMapMoveCounter
add hl, bc
ld a, [hl]
cp $3
jr z, .asm_14834
inc a
ld [hld], a
ld [hl], $50
ld hl, wd4f7
add hl, bc
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, c
and a
jr z, .asm_14807
ld a, $6a
ld [wc7f0], a
ld a, $6b
ld [wc810], a
ld a, $5
call Func_149d9
ld a, [wRightMapMoveCounter]
add $4
call Func_149f5
ld a, $8
callba Func_10000
ld a, [wRightMapMoveCounter]
cp $3
call z, Func_14920
jr .asm_14830
.asm_14807
ld a, $66
ld [wc7e3], a
ld a, $67
ld [wc803], a
ld a, $2
call Func_149d9
ld a, [wLeftMapMoveCounter]
call Func_149f5
ld a, $7
callba Func_10000
ld a, [wLeftMapMoveCounter]
cp $3
call z, Func_14947
.asm_14830
call Func_1496d
ret
.asm_14834
ld a, [wd4ef]
and a
jr z, .asm_14857
dec a
ld [wd4ef], a
jr nz, .asm_14857
ld a, [wLeftMapMoveCounter]
sub $3
jr nz, .asm_1484d
ld [wLeftMapMoveCounter], a
call Func_149f5
.asm_1484d
ld a, $64
ld [wc7e3], a
ld a, $65
ld [wc803], a
.asm_14857
ld a, [wd4f1]
and a
jr z, .asm_1487c
dec a
ld [wd4f1], a
jr nz, .asm_1487c
ld a, [wRightMapMoveCounter]
sub $3
jr nz, .asm_14872
ld [wRightMapMoveCounter], a
add $4
call Func_149f5
.asm_14872
ld a, $68
ld [wc7f0], a
ld a, $69
ld [wc810], a
.asm_1487c
call Func_14990
ret
Func_14880: ; 0x14880
ld hl, wd4f7
dec [hl]
ld a, [hli]
cp $ff
jr nz, .asm_148a6
dec [hl]
ld a, [hld]
cp $ff
jr nz, .asm_148a6
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wLeftMapMoveCounter]
and a
jr z, .asm_148a6
cp $3
jr z, .asm_148a6
dec a
ld [wLeftMapMoveCounter], a
call Func_149f5
.asm_148a6
ld hl, wd4f9
dec [hl]
ld a, [hli]
cp $ff
jr nz, .asm_148ce
dec [hl]
ld a, [hld]
cp $ff
jr nz, .asm_148ce
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wRightMapMoveCounter]
and a
jr z, .asm_148ce
cp $3
jr z, .asm_148ce
dec a
ld [wRightMapMoveCounter], a
add $4
call Func_149f5
.asm_148ce
ret
Func_148cf: ; 0x148cf
ld b, $0
ld hl, wd4f8
ld a, [hld]
or [hl]
jr z, .asm_148f8
dec [hl]
ld a, [hli]
cp $ff
jr nz, .asm_148f8
dec [hl]
ld a, [hld]
cp $ff
jr nz, .asm_148f8
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wLeftMapMoveCounter]
and a
jr z, .asm_148f8
cp $3
jr z, .asm_148f8
dec a
ld [wLeftMapMoveCounter], a
.asm_148f8
ld hl, wd4fa
ld a, [hld]
or [hl]
jr z, .asm_1491f
dec [hl]
ld a, [hli]
cp $ff
jr nz, .asm_1491f
dec [hl]
ld a, [hld]
cp $ff
jr nz, .asm_1491f
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wRightMapMoveCounter]
and a
jr z, .asm_1491f
cp $3
jr z, .asm_1491f
dec a
ld [wRightMapMoveCounter], a
.asm_1491f
ret
Func_14920: ; 0x14920
ld hl, wd62b
call Func_e4a
jr nc, .asm_14937
ld c, $a
call Func_e55
callba z, Func_30164
.asm_14937
ld a, $1
ld [wd55a], a
callba StartMapMoveMode
ret
Func_14947: ; 0x14947
ld hl, wd62b
call Func_e4a
jr nc, .asm_1495e
ld c, $a
call Func_e55
callba z, Func_30164
.asm_1495e
xor a
ld [wd55a], a
callba StartMapMoveMode
ret
Func_1496d: ; 0x1496d
ld a, $55
ld [wd803], a
ld a, $4
ld [wd804], a
ld a, $2
ld [wd7eb], a
ld bc, FiveHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
lb de, $00, $0f
call PlaySoundEffect
ret
Func_14990: ; 0x14990
ld a, [wd4ef]
and a
jr nz, .asm_149b6
ld a, [wLeftMapMoveDiglettAnimationCounter]
and a
jr z, .asm_149a2
dec a
ld [wLeftMapMoveDiglettAnimationCounter], a
jr .asm_149b6
.asm_149a2
call Func_1130
ret nz
ld a, $14
ld [wLeftMapMoveDiglettAnimationCounter], a
ld a, [wLeftMapMoveDiglettFrame]
xor $1
ld [wLeftMapMoveDiglettFrame], a
call Func_149d9
.asm_149b6
ld a, [wd4f1]
and a
ret nz
ld a, [wRightMapMoveDiglettAnimationCounter]
and a
jr z, .asm_149c6
dec a
ld [wRightMapMoveDiglettAnimationCounter], a
ret
.asm_149c6
call Func_1130
ret nz
ld a, $14
ld [wRightMapMoveDiglettAnimationCounter], a
ld a, [wRightMapMoveDiglettFrame]
xor $1
ld [wRightMapMoveDiglettFrame], a
add $3
; fall through
Func_149d9: ; 0x149d9
sla a
ld c, a
ld b, $0
ld hl, Data_14a11
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_149e9
ld hl, Data_14a83
.asm_149e9
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, BANK(Data_14a11)
call Func_10aa
ret
Func_149f5: ; 0x149f5
sla a
ld c, a
ld b, $0
ld hl, Data_14af5
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_14a05
ld hl, Data_14c8d
.asm_14a05
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, BANK(Data_14af5)
call Func_10aa
ret
Data_14a11:
dr $14a11, $14a83
Data_14a83:
dr $14a83, $14af5
Data_14af5:
dr $14af5, $14c8d
Data_14c8d:
dr $14c8d, $14d85
ResolveVoltorbCollision: ; 0x14d85
ld a, [wWhichVoltorb]
and a
jr z, .noVoltorbCollision
xor a
ld [wWhichVoltorb], a
call Func_14dc9
ld a, $10
ld [wd4d6], a
ld a, [wWhichVoltorbId]
sub $3
ld [wd4d7], a
ld a, $4
callba Func_10000
ld bc, FiveHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ret
.noVoltorbCollision
ld a, [wd4d6]
and a
ret z
dec a
ld [wd4d6], a
ret nz
ld a, $ff
ld [wd4d7], a
ret
Func_14dc9: ; 0x14dc9
ld a, $ff
ld [wd803], a
ld a, $3
ld [wd804], a
ld hl, $0200
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
lb de, $00, $0e
call PlaySoundEffect
ret
ResolveRedStageSpinnerCollision: ; 0x14dea
ld a, [wSpinnerCollision]
and a
jr z, Func_14e10
xor a
ld [wSpinnerCollision], a
ld a, [wBallYVelocity]
ld c, a
ld a, [wBallYVelocity + 1]
ld b, a
ld a, c
ld [wd50b], a
ld a, b
ld [wd50c], a
ld a, $c
callba Func_10000
; fall through
Func_14e10: ; 0x14e10
ld hl, wd50b
ld a, [hli]
or [hl]
ret z
ld a, [wd50b]
ld c, a
ld a, [wd50c]
ld b, a
bit 7, b
jr nz, .asm_14e2e
ld a, c
sub $7
ld c, a
ld a, b
sbc $0
ld b, a
jr nc, .asm_14e3b
jr .asm_14e38
.asm_14e2e
ld a, c
add $7
ld c, a
ld a, b
adc $0
ld b, a
jr nc, .asm_14e3b
.asm_14e38
ld bc, $0000
.asm_14e3b
ld a, c
ld [wd50b], a
ld a, b
ld [wd50c], a
ld hl, wd50b
ld a, [wd509]
add [hl]
ld [wd509], a
inc hl
ld a, [wd50a]
adc [hl]
bit 7, a
ld c, $0
jr z, .asm_14e5e
add $18
ld c, $1
jr .asm_14e66
.asm_14e5e
cp $18
jr c, .asm_14e66
sub $18
ld c, $1
.asm_14e66
ld [wd50a], a
ld a, c
and a
ret z
ld bc, TenPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld hl, wd62d
call Func_e4a
ld a, [wd517]
cp $f
jr nz, .asm_14e8a
call Func_14ea7
ret
.asm_14e8a
inc a
ld [wd517], a
call Func_14ea7
ld a, [wd517]
cp $f
jr nz, .asm_14e9d
ld a, $64
ld [wd51e], a
.asm_14e9d
ld a, [wCurrentStage]
bit 0, a
ret nz
call Func_14ece
ret
Func_14ea7: ; 0x14ea7
ld a, [wd51e]
and a
ret nz
ld a, [wd517]
ld c, a
ld b, $0
ld hl, Data_14ebe
add hl, bc
ld a, [hl]
ld e, a
ld d, $0
call PlaySoundEffect
ret
Data_14ebe:
dr $14ebe, $14ece
Func_14ece: ; 0x14ece
ld a, [wd517]
ld c, a
sla c
ld b, $0
ld hl, Data_14eeb
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_14ee1
ld hl, Data_1509b
.asm_14ee1
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, BANK(Data_14eeb)
call Func_10aa
ret
Data_14eeb:
dr $14eeb, $1509b
Data_1509b:
dr $1509b, $151cb
Func_151cb: ; 0x151cb
ld a, [wWhichCAVELight]
and a
jr z, .asm_15229
xor a
ld [wWhichCAVELight], a
ld a, [wd513]
and a
jr nz, .asm_15229
ld a, [wWhichCAVELightId]
sub $a
ld c, a
ld b, $0
ld hl, wd50f
add hl, bc
ld a, [hl]
ld [hl], $1
and a
ret nz
ld bc, OneHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld hl, wd50f
ld a, [hli]
and [hl]
inc hl
and [hl]
inc hl
and [hl]
jr z, Func_asm_1522d
ld a, $1
ld [wd513], a
ld a, $80
ld [wd514], a
ld bc, FourHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
lb de, $00, $09
call PlaySoundEffect
ld hl, wd62c
call Func_e4a
jr Func_asm_1522d
.asm_15229
call Func_15270
ret z
; fall through
Func_asm_1522d: ; 0x1522d
ld hl, wd512
ld b, $4
.asm_15232
ld a, [hld]
push hl
call Func_1523c
pop hl
dec b
jr nz, .asm_15232
ret
Func_1523c: ; 0x1523c
and a
jr z, .asm_1524e
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_15249
ld hl, Data_152dd
jr .asm_1525b
.asm_15249
ld hl, Data_1531d
jr .asm_1525b
.asm_1524e
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_15258
ld hl, Data_152e5
jr .asm_1525b
.asm_15258
ld hl, Data_15325
.asm_1525b
push bc
dec b
sla b
ld e, b
ld d, $0
add hl, de
ld c, [hl]
inc hl
ld b, [hl]
ld a, $5
ld de, LoadTileLists
call Func_10c5
pop bc
ret
Func_15270: ; 0x15270
ld a, [wd513]
and a
jr z, .asm_152a6
ld a, [wd514]
dec a
ld [wd514], a
jr nz, .asm_1528d
ld [wd513], a
ld a, $1
ld [wd608], a
ld a, $3
ld [wd607], a
xor a
.asm_1528d
and $7
ret nz
ld a, [wd514]
srl a
srl a
srl a
and $1
ld hl, wd50f
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
ld a, $1
and a
ret
.asm_152a6
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed
jr z, .asm_152c2
ld hl, wd50f
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
ld a, c
ld [hld], a
ld a, d
ld [hld], a
ld a, e
ld [hld], a
ld a, b
ld [hl], a
ret
.asm_152c2
ld hl, wKeyConfigRightFlipper
call IsKeyPressed
ret z
ld hl, wd50f
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
ld a, e
ld [hld], a
ld a, b
ld [hld], a
ld a, c
ld [hld], a
ld a, d
ld [hl], a
ret
Data_152dd:
dr $152dd, $152e5
Data_152e5:
dr $152e5, $1531d
Data_1531d:
dr $1531d, $15325
Data_15325:
dr $15325, $1535d
ResolveRedStagePinballUpgradeTriggersCollision: ; 0x1535d
ld a, [wWhichPinballUpgradeTrigger]
and a
jp z, .asm_1544c
xor a
ld [wWhichPinballUpgradeTrigger], a
ld a, [wStageCollisionState]
bit 0, a
jp z, .asm_1544c
ld a, [wd5fc]
and a
jp nz, .asm_1544c
xor a
ld [wRightAlleyTrigger], a
ld [wLeftAlleyTrigger], a
ld [wSecondaryLeftAlleyTrigger], a
call Func_159c9
ld a, $b
callba Func_10000
ld a, [wWhichPinballUpgradeTriggerId]
sub $e
ld c, a
ld b, $0
ld hl, wd5f9
add hl, bc
ld a, [hl]
ld [hl], $1
and a
ret nz
ld bc, OneHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld hl, wd5f9
ld a, [hli]
and [hl]
inc hl
and [hl]
jr nz, .asm_153c0
lb de, $00, $09
call PlaySoundEffect
jp Func_15450
.asm_153c0
ld a, $1
ld [wd5fc], a
ld a, $80
ld [wd5fd], a
; load approximately 1 minute of frames into wBallTypeCounter
ld a, $10
ld [wBallTypeCounter], a
ld a, $e
ld [wBallTypeCounter + 1], a
ld bc, FourHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld a, [wBallType]
cp MASTER_BALL
jr z, .masterBall
lb de, $06, $3a
call PlaySoundEffect
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld de, FieldMultiplierText
ld hl, wd5cc
call LoadTextHeader
ld a, [wBallType]
ld c, a
ld b, $0
ld hl, BallTypeProgressionRedField
add hl, bc
ld a, [hl]
ld [wBallType], a
add $30
ld [wBottomMessageText + $12], a
jr .asm_15447
.masterBall
lb de, $0f, $4d
call PlaySoundEffect
ld bc, OneMillionPoints
callba AddBigBCD6FromQueue
ld bc, $0100
ld de, $0000
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5d4
ld de, DigitsText1to8
call Func_32cc
pop de
pop bc
ld hl, wd5cc
ld de, FieldMultiplierSpecialBonusText
call LoadTextHeader
.asm_15447
call TransitionPinballUpgrade
jr Func_15450
.asm_1544c
call Func_154a9
ret z
Func_15450
ld a, [wStageCollisionState]
bit 0, a
ret z
ld hl, wd5fb
ld b, $3
.asm_1545b
ld a, [hld]
push hl
call Func_15465
pop hl
dec b
jr nz, .asm_1545b
ret
Func_15465: ; 0x15465
and a
jr z, .asm_15477
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_15472
ld hl, Data_15511
jr .asm_15484
.asm_15472
ld hl, Data_15543
jr .asm_15484
.asm_15477
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_15481
ld hl, Data_15517
jr .asm_15484
.asm_15481
ld hl, Data_15549
.asm_15484
push bc
dec b
sla b
ld e, b
ld d, $0
add hl, de
ld c, [hl]
inc hl
ld b, [hl]
ld a, $5
ld de, LoadTileLists
call Func_10c5
pop bc
ret
Func_15499: ; 0x15499
ld a, [hGameBoyColorFlag]
and a
ret nz
ld b, $3
.asm_1549f
push hl
xor a
call Func_15465
pop hl
dec b
jr nz, .asm_1549f
ret
Func_154a9: ; 0x154a9
ld a, [wd5fc]
and a
jr z, .asm_154d6
ld a, [wd5fd]
dec a
ld [wd5fd], a
jr nz, .asm_154bb
ld [wd5fc], a
.asm_154bb
and $7
jr nz, .asm_154d4
ld a, [wd5fd]
srl a
srl a
srl a
and $1
ld hl, wd5f9
ld [hli], a
ld [hli], a
ld [hl], a
ld a, $1
and a
ret
.asm_154d4
xor a
ret
.asm_154d6
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed
jr z, .asm_154ee
ld hl, wd5f9
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hl]
ld e, a
ld a, c
ld [hld], a
ld a, e
ld [hld], a
ld a, b
ld [hl], a
ret
.asm_154ee
ld hl, wKeyConfigRightFlipper
call IsKeyPressed
ret z
ld hl, wd5f9
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hl]
ld e, a
ld a, b
ld [hld], a
ld a, c
ld [hld], a
ld a, e
ld [hl], a
ret
BallTypeProgressionRedField: ; 0x15505
; Determines the next upgrade for the Ball.
db GREAT_BALL ; POKE_BALL -> GREAT_BALL
db GREAT_BALL ; unused
db ULTRA_BALL ; GREAT_BALL -> ULTRA_BALL
db MASTER_BALL ; ULTRA_BALL -> MASTER_BALL
db MASTER_BALL ; unused
db MASTER_BALL ; MASTER_BALL -> MASTER_BALL
BallTypeDegradationRedField: ; 0x1550b
; Determines the previous upgrade for the Ball.
db POKE_BALL ; POKE_BALL -> POKE_BALL
db POKE_BALL ; unused
db POKE_BALL ; GREAT_BALL -> POKE_BALL
db GREAT_BALL ; ULTRA_BALL -> GREAT_BALL
db ULTRA_BALL ; unused
db ULTRA_BALL ; MASTER_BALL -> GREAT_BALL
Data_15511:
dr $15511, $15517
Data_15517:
dr $15517, $15543
Data_15543:
dr $15543, $15549
Data_15549:
dr $15549, $15575
HandleRedStageBallTypeUpgradeCounter: ; 0x15575
ld a, [wCapturingMon]
and a
ret nz
ld hl, wBallTypeCounter
ld a, [hli]
ld c, a
ld b, [hl]
or b
ret z
dec bc
ld a, b
ld [hld], a
ld [hl], c
or c
ret nz
; counter is now 0! Degrade the ball upgrade.
ld a, [wBallType]
ld c, a
ld b, $0
ld hl, BallTypeDegradationRedField
add hl, bc
ld a, [hl]
ld [wBallType], a
and a
jr z, .pokeball
; load approximately 1 minute of frames into wBallTypeCounter
ld a, $10
ld [wBallTypeCounter], a
ld a, $e
ld [wBallTypeCounter + 1], a
.pokeball
call TransitionPinballUpgrade
ret
TransitionPinballUpgrade: ; 0x155a7
ld a, [wBallType]
ld c, a
sla c
ld b, $0
ld hl, PinballUpgradeTransitionPointers
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(PinballUpgradeTransitionPointers)
call Func_10aa
; fall through
Func_155bb: ; 0x155bb
ld a, [hGameBoyColorFlag]
and a
ret z
; gameboy color
ld a, [wBallType]
sla a
ld c, a
ld b, $0
ld hl, Data_157f7
add hl, bc
ld c, [hl]
inc hl
ld b, [hl]
ld a, BANK(Data_157f7)
ld de, Func_1266
call Func_10c5
ret
PinballUpgradeTransitionPointers:
dw TransitionToPokeBallPointers ; POKE_BALL
dw TransitionToPokeBallPointers ; POKE_BALL
dw TransitionToGreatBallPointers ; GREAT_BALL
dw TransitionToUltraBallPointers ; ULTRA_BALL
dw TransitionToUltraBallPointers ; ULTRA_BALL
dw TransitionToMasterBallPointers ; MASTER_BALL
TransitionToPokeBallPointers:
db 11
dw TransitionToPokeBall_TileData_1
dw TransitionToPokeBall_TileData_2
dw TransitionToPokeBall_TileData_3
dw TransitionToPokeBall_TileData_4
dw TransitionToPokeBall_TileData_5
dw TransitionToPokeBall_TileData_6
dw TransitionToPokeBall_TileData_7
dw TransitionToPokeBall_TileData_8
dw TransitionToPokeBall_TileData_9
dw TransitionToPokeBall_TileData_10
dw TransitionToPokeBall_TileData_11
TransitionToGreatBallPointers:
db 11
dw TransitionToGreatBall_TileData_1
dw TransitionToGreatBall_TileData_2
dw TransitionToGreatBall_TileData_3
dw TransitionToGreatBall_TileData_4
dw TransitionToGreatBall_TileData_5
dw TransitionToGreatBall_TileData_6
dw TransitionToGreatBall_TileData_7
dw TransitionToGreatBall_TileData_8
dw TransitionToGreatBall_TileData_9
dw TransitionToGreatBall_TileData_10
dw TransitionToGreatBall_TileData_11
TransitionToUltraBallPointers:
db 11
dw TransitionToUltraBall_TileData_1
dw TransitionToUltraBall_TileData_2
dw TransitionToUltraBall_TileData_3
dw TransitionToUltraBall_TileData_4
dw TransitionToUltraBall_TileData_5
dw TransitionToUltraBall_TileData_6
dw TransitionToUltraBall_TileData_7
dw TransitionToUltraBall_TileData_8
dw TransitionToUltraBall_TileData_9
dw TransitionToUltraBall_TileData_10
dw TransitionToUltraBall_TileData_11
TransitionToMasterBallPointers:
db 11
dw TransitionToMasterBall_TileData_1
dw TransitionToMasterBall_TileData_2
dw TransitionToMasterBall_TileData_3
dw TransitionToMasterBall_TileData_4
dw TransitionToMasterBall_TileData_5
dw TransitionToMasterBall_TileData_6
dw TransitionToMasterBall_TileData_7
dw TransitionToMasterBall_TileData_8
dw TransitionToMasterBall_TileData_9
dw TransitionToMasterBall_TileData_10
dw TransitionToMasterBall_TileData_11
TransitionToPokeBall_TileData_1:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $40)
dw PinballPokeballGfx + $0
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_2:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $43)
dw PinballPokeballGfx + $30
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_3:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $46)
dw PinballPokeballGfx + $60
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_4:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $49)
dw PinballPokeballGfx + $90
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_5:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $4c)
dw PinballPokeballGfx + $c0
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_6:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $4f)
dw PinballPokeballGfx + $f0
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_7:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $52)
dw PinballPokeballGfx + $120
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_8:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $55)
dw PinballPokeballGfx + $150
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_9:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $58)
dw PinballPokeballGfx + $180
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_10:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $5b)
dw PinballPokeballGfx + $1b0
db Bank(PinballPokeballGfx)
db $00
TransitionToPokeBall_TileData_11:
dw Func_11d2
db $20, $02
dw (vTilesOB tile $5e)
dw PinballPokeballGfx + $1e0
db Bank(PinballPokeballGfx)
db $00
TransitionToGreatBall_TileData_1:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $40)
dw PinballGreatballGfx + $0
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_2:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $43)
dw PinballGreatballGfx + $30
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_3:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $46)
dw PinballGreatballGfx + $60
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_4:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $49)
dw PinballGreatballGfx + $90
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_5:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $4c)
dw PinballGreatballGfx + $c0
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_6:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $4f)
dw PinballGreatballGfx + $f0
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_7:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $52)
dw PinballGreatballGfx + $120
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_8:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $55)
dw PinballGreatballGfx + $150
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_9:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $58)
dw PinballGreatballGfx + $180
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_10:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $5b)
dw PinballGreatballGfx + $1b0
db Bank(PinballGreatballGfx)
db $00
TransitionToGreatBall_TileData_11:
dw Func_11d2
db $20, $02
dw (vTilesOB tile $5e)
dw PinballGreatballGfx + $1e0
db Bank(PinballGreatballGfx)
db $00
TransitionToUltraBall_TileData_1:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $40)
dw PinballUltraballGfx + $0
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_2:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $43)
dw PinballUltraballGfx + $30
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_3:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $46)
dw PinballUltraballGfx + $60
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_4:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $49)
dw PinballUltraballGfx + $90
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_5:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $4c)
dw PinballUltraballGfx + $c0
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_6:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $4f)
dw PinballUltraballGfx + $f0
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_7:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $52)
dw PinballUltraballGfx + $120
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_8:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $55)
dw PinballUltraballGfx + $150
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_9:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $58)
dw PinballUltraballGfx + $180
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_10:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $5b)
dw PinballUltraballGfx + $1b0
db Bank(PinballUltraballGfx)
db $00
TransitionToUltraBall_TileData_11:
dw Func_11d2
db $20, $02
dw (vTilesOB tile $5e)
dw PinballUltraballGfx + $1e0
db Bank(PinballUltraballGfx)
db $00
TransitionToMasterBall_TileData_1:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $40)
dw PinballMasterballGfx + $0
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_2:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $43)
dw PinballMasterballGfx + $30
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_3:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $46)
dw PinballMasterballGfx + $60
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_4:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $49)
dw PinballMasterballGfx + $90
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_5:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $4c)
dw PinballMasterballGfx + $c0
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_6:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $4f)
dw PinballMasterballGfx + $f0
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_7:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $52)
dw PinballMasterballGfx + $120
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_8:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $55)
dw PinballMasterballGfx + $150
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_9:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $58)
dw PinballMasterballGfx + $180
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_10:
dw Func_11d2
db $30, $03
dw (vTilesOB tile $5b)
dw PinballMasterballGfx + $1b0
db Bank(PinballMasterballGfx)
db $00
TransitionToMasterBall_TileData_11:
dw Func_11d2
db $20, $02
dw (vTilesOB tile $5e)
dw PinballMasterballGfx + $1e0
db Bank(PinballMasterballGfx)
db $00
Data_157f7:
dw Data_15803
dw Data_15803
dw Data_1580a
dw Data_15811
dw Data_15811
dw Data_15818
Data_15803:
db $08, $04, $40, $68, $51, $37, $00
Data_1580a:
db $08, $04, $40, $70, $51, $37, $00
Data_15811:
db $08, $04, $40, $78, $51, $37, $00
Data_15818:
db $08, $04, $40, $80, $51, $37, $00
ResolveRedStageBoardTriggerCollision: ; 0x1581f
ld a, [wWhichBoardTrigger]
and a
ret z
xor a
ld [wWhichBoardTrigger], a
ld bc, FivePoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld a, [wWhichBoardTriggerId]
sub $11
ld c, a
ld b, $0
ld hl, wd521
add hl, bc
ld [hl], $1
ld a, [wd521]
and a
call nz, Func_1587c
ld a, [wd522]
and a
call nz, Func_158c0
ld a, [wd523]
and a
call nz, Func_15904
ld a, [wd524]
and a
call nz, HandleLeftAlleyTriggerRedField
ld a, [wd525]
and a
call nz, Func_15931
ld a, [wd526]
and a
call nz, Func_15944
ld a, [wd527]
and a
call nz, HandleRightAlleyTriggerRedField
ld a, [wd528]
and a
call nz, Func_15990
ret
Func_1587c: ; 0x1587c
xor a
ld [wd521], a
ld a, [wLeftAlleyTrigger]
and a
ret z
xor a
ld [wLeftAlleyTrigger], a
ld a, $1
callba Func_10000
ret c
ld a, [wLeftAlleyCount]
cp $3
ret z
inc a
ld [wLeftAlleyCount], a
set 7, a
ld [wIndicatorStates], a
cp $83
ret nz
ld a, [wStageCollisionState]
and $1
or $6
ld [wStageCollisionState], a
callba LoadStageCollisionAttributes
call Func_159f4
ret
Func_158c0: ; 0x158c0
xor a
ld [wd522], a
ld a, [wLeftAlleyTrigger]
and a
ret z
xor a
ld [wLeftAlleyTrigger], a
ld a, $1
callba Func_10000
ret c
ld a, [wLeftAlleyCount]
cp $3
ret z
inc a
ld [wLeftAlleyCount], a
set 7, a
ld [wIndicatorStates], a
cp $83
ret nz
ld a, [wStageCollisionState]
and $1
or $6
ld [wStageCollisionState], a
callba LoadStageCollisionAttributes
call Func_159f4
ret
Func_15904: ; 0x15904
xor a
ld [wd523], a
ld a, [wSecondaryLeftAlleyTrigger]
and a
ret z
xor a
ld [wSecondaryLeftAlleyTrigger], a
ld a, $3
callba Func_10000
ret
HandleLeftAlleyTriggerRedField: ; 0x1591e
; Ball passed over the left alley trigger point in the Red Field.
xor a
ld [wd524], a
ld [wRightAlleyTrigger], a
ld [wSecondaryLeftAlleyTrigger], a
ld a, $1
ld [wLeftAlleyTrigger], a
call Func_159c9
ret
Func_15931: ; 0x15931
xor a
ld [wd525], a
ld [wRightAlleyTrigger], a
ld [wLeftAlleyTrigger], a
ld a, $1
ld [wSecondaryLeftAlleyTrigger], a
call Func_159c9
ret
Func_15944: ; 0x15944
xor a
ld [wd526], a
ld a, [wRightAlleyTrigger]
and a
ret z
xor a
ld [wRightAlleyTrigger], a
ld a, $2
callba Func_10000
ret c
ld a, [wRightAlleyCount]
cp $3
ret z
inc a
ld [wRightAlleyCount], a
cp $3
jr z, .asm_1596e
set 7, a
.asm_1596e
ld [wIndicatorStates + 1], a
ld a, [wRightAlleyCount]
cp $2
ret c
ld a, $80
ld [wIndicatorStates + 3], a
ret
HandleRightAlleyTriggerRedField: ; 0x1597d
; Ball passed over the right alley trigger point in the Red Field.
xor a
ld [wd527], a
ld [wLeftAlleyTrigger], a
ld [wSecondaryLeftAlleyTrigger], a
ld a, $1
ld [wRightAlleyTrigger], a
call Func_159c9
ret
Func_15990: ; 0x15990
xor a
ld [wd528], a
ld a, [wRightAlleyTrigger]
and a
ret z
xor a
ld [wRightAlleyTrigger], a
ld a, $2
callba Func_10000
ret c
ld a, [wRightAlleyCount]
cp $3
ret z
inc a
ld [wRightAlleyCount], a
cp $3
jr z, .asm_159ba
set 7, a
.asm_159ba
ld [wIndicatorStates + 1], a
ld a, [wRightAlleyCount]
cp $2
ret c
ld a, $80
ld [wIndicatorStates + 3], a
ret
Func_159c9: ; 0x159c9
ld a, [wd7ad]
bit 7, a
ret nz
ld c, a
ld a, [wStageCollisionState]
and $1
or c
ld [wStageCollisionState], a
ld a, $ff
ld [wd7ad], a
callba LoadStageCollisionAttributes
call Func_159f4
ld a, $1
ld [wd580], a
call Func_1404a
ret
Func_159f4: ; 0x159f4
ld a, [hLCDC]
bit 7, a
jr z, .asm_15a13
ld a, [wd7f2]
and $fe
ld c, a
ld a, [wStageCollisionState]
and $fe
cp c
jr z, .asm_15a13
add c
cp $2
jr z, .asm_15a13
lb de, $00, $00
call PlaySoundEffect
.asm_15a13
ld a, [wd7f2]
swap a
ld c, a
ld a, [wStageCollisionState]
sla a
or c
ld c, a
ld b, $0
ld hl, Data_15a3f
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_15a2d
ld hl, Data_15d05
.asm_15a2d
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, Bank(Data_15a3f)
call Func_10aa
ld a, [wStageCollisionState]
ld [wd7f2], a
ret
Data_15a3f:
dr $15a3f, $15d05
Data_15d05:
dr $15d05, $15e93
ResolveBellsproutCollision: ; 0x15e93
ld a, [wBellsproutCollision]
and a
jr z, .asm_15eda
xor a
ld [wBellsproutCollision], a
ld bc, TenThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
lb de, $00, $05
call PlaySoundEffect
ld hl, BellsproutAnimationData
ld de, wBellsproutAnimationFrameCounter
call CopyHLToDE
xor a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
ld [wBallXPos], a
ld [wBallYPos], a
ld a, $7c
ld [wBallXPos + 1], a
ld a, $78
ld [wBallYPos + 1], a
xor a
ld [wd549], a
.asm_15eda
ld hl, BellsproutAnimationData
ld de, wBellsproutAnimationFrameCounter
call UpdateAnimation
push af
ld a, [wBellsproutAnimationFrameCounter]
and a
jr nz, .asm_15ef8
ld a, $19
ld [wBellsproutAnimationFrameCounter], a
xor a
ld [wBellsproutAnimationFrame], a
ld a, $6
ld [wBellsproutAnimationFrameIndex], a
.asm_15ef8
pop af
ret nc
ld a, [wBellsproutAnimationFrameIndex]
cp $1
jr nz, .asm_15f35
xor a
ld [wd548], a
ld a, [wRightAlleyCount]
cp $2
jr c, .noCatchEmMode
ld a, $8
jr nz, .startCatchEmMode
xor a
.startCatchEmMode
ld [wRareMonsFlag], a
callba StartCatchEmMode
.noCatchEmMode
ld hl, wd62a
call Func_e4a
ret nc
ld c, $19
call Func_e55
callba z, Func_30164
ret
.asm_15f35
ld a, [wBellsproutAnimationFrameIndex]
cp $4
jr nz, .asm_15f42
ld a, $1
ld [wd548], a
ret
.asm_15f42
ld a, [wBellsproutAnimationFrameIndex]
cp $5
ret nz
ld a, $1
ld [wd549], a
xor a
ld [wBallXVelocity + 1], a
ld a, $2
ld [wBallYVelocity + 1], a
lb de, $00, $06
call PlaySoundEffect
ld a, $5
callba Func_10000
ret
BellsproutAnimationData: ; 0x15f69
; Each entry is [duration][OAM id]
db $08, $01
db $06, $02
db $20, $03
db $06, $02
db $08, $01
db $01, $00
db $29, $00
db $28, $01
db $2A, $00
db $27, $01
db $29, $00
db $28, $01
db $2B, $00
db $28, $01
db $00 ; terminator
Func_15f86: ; 0x15f86
ld a, [wWhichBumper]
and a
jr z, .asm_15f99
call Func_5fb8
call Func_15fa6
xor a
ld [wWhichBumper], a
call Func_15fda
.asm_15f99
ld a, [wd4da]
and a
ret z
dec a
ld [wd4da], a
call z, Func_5fb8
ret
Func_15fa6: ; 0x15fa6
ld a, $10
ld [wd4da], a
ld a, [wWhichBumperId]
sub $6
ld [wd4db], a
sla a
inc a
jr asm_15fc0
Func_5fb8: ; 0x5fb8
ld a, [wd4db]
cp $ff
ret z
sla a
asm_15fc0
sla a
ld c, a
ld b, $0
ld hl, Data_16010
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_15fd0
ld hl, Data_16080
.asm_15fd0
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_16010)
call Func_10aa
ret
Func_15fda: ; 0x15fda
ld a, $ff
ld [wd803], a
ld a, $3
ld [wd804], a
ld hl, $0200
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld a, [wWhichBumperId]
sub $6
ld c, a
ld b, $0
ld hl, Data_1600e
add hl, bc
ld a, [wCollisionForceAngle]
add [hl]
ld [wCollisionForceAngle], a
lb de, $00, $0b
call PlaySoundEffect
ret
Data_1600e:
dr $1600e, $16010
Data_16010:
dr $16010, $16080
Data_16080:
dr $16080, $160f0
ResolveDittoSlotCollision: ; 0x160f0
ld a, [wDittoSlotCollision]
and a
jr z, .asm_16137
xor a
ld [wDittoSlotCollision], a
ld bc, TenThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
lb de, $00, $21
call PlaySoundEffect
xor a
ld hl, wBallXVelocity
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [wd549], a
ld [wBallXPos], a
ld [wBallYPos], a
ld a, $11
ld [wBallXPos + 1], a
ld a, $23
ld [wBallYPos + 1], a
ld a, $10
ld [wd600], a
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
.asm_16137
ld a, [wd600]
and a
ret z
dec a
ld [wd600], a
cp $f
jr nz, .asm_1614f
callba LoadMiniBallGfx
ret
.asm_1614f
cp $c
jr nz, .asm_1615e
callba Func_dd62
ret
.asm_1615e
cp $9
jr nz, .asm_1616d
xor a
ld [wd548], a
ld [wBallSpin], a
ld [wBallRotation], a
ret
.asm_1616d
cp $6
jr nz, .asm_1618e
callba Func_10ab3
ld a, $1
ld [wd548], a
ld [wd549], a
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
ret
.asm_1618e
cp $3
jr nz, .asm_1619d
callba LoadMiniBallGfx
ret
.asm_1619d
and a
ret nz
callba LoadBallGfx
ld a, $2
ld [wBallYVelocity + 1], a
ret
Func_161af: ; 0x161af
ld a, [wd604]
and a
ret z
ld a, [wBallYPos + 1]
sub $fe
cp $30
ret nc
ld c, $0
ld b, a
ld h, b
ld l, c
srl b
rr c
srl b
rr c
srl h
rr l
add hl, bc
ld a, [wBallXPos + 1]
sub $38
cp $30
ret nc
ld c, a
ld b, $0
sla c
sla c
add hl, bc
jr asm_1620f
Func_161e0: ; 0x161e0
ld a, [wd604]
and a
ret z
ld a, [wBallYPos + 1]
sub $86
cp $30
ret nc
ld c, $0
ld b, a
ld h, b
ld l, c
srl b
rr c
srl b
rr c
srl h
rr l
add hl, bc
ld a, [wBallXPos + 1]
sub $38
cp $30
ret nc
ld c, a
ld b, $0
sla c
sla c
add hl, bc
asm_1620f: ; 0x1620f
ld bc, Data_f0000
add hl, bc
ld de, wBallXVelocity
ld a, BANK(Data_f0000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_f0000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
push bc
ld a, BANK(Data_f0000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_f0000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
bit 7, b
jr z, .asm_1624e
ld a, c
cpl
ld c, a
ld a, b
cpl
ld b, a
inc bc
.asm_1624e
pop hl
bit 7, h
jr z, .asm_1625a
ld a, l
cpl
ld l, a
ld a, h
cpl
ld h, a
inc hl
.asm_1625a
add hl, bc
sla l
rl h
ld a, h
cp $2
ret c
ld a, [wd804]
and a
ret nz
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
lb de, $00, $04
call PlaySoundEffect
ret
Func_16279: ; 0x16279
ld a, [wSlotCollision]
and a
jr z, .asm_162ae
xor a
ld [wSlotCollision], a
ld a, [wd604]
and a
ret z
ld a, [wd603]
and a
jr nz, .asm_162ae
xor a
ld hl, wBallXVelocity
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [wd549], a
ld [wBallXPos], a
ld [wBallYPos], a
ld a, $50
ld [wBallXPos + 1], a
ld a, $16
ld [wBallYPos + 1], a
ld a, $13
ld [wd603], a
.asm_162ae
ld a, [wd603]
and a
ret z
dec a
ld [wd603], a
ld a, $18
ld [wd606], a
ld a, [wd603]
cp $12
jr nz, .asm_162d4
lb de, $00, $21
call PlaySoundEffect
callba LoadMiniBallGfx
ret
.asm_162d4
cp $f
jr nz, .asm_162e3
callba Func_dd62
ret
.asm_162e3
cp $c
jr nz, .asm_162f2
xor a
ld [wd548], a
ld [wBallSpin], a
ld [wBallRotation], a
ret
.asm_162f2
cp $9
jr nz, .asm_162fa
call Func_16352
ret
.asm_162fa
cp $6
jr nz, .asm_16317
xor a
ld [wd604], a
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
callba LoadMiniBallGfx
ret
.asm_16317
cp $3
jr nz, .asm_16330
callba LoadBallGfx
ld a, $2
ld [wBallYVelocity + 1], a
ld a, $80
ld [wBallXVelocity], a
ret
.asm_16330
and a
ret nz
call Func_16425
ld a, [wd622]
cp $1
ret nz
call GenRandom
and $8
ld [wRareMonsFlag], a
callba StartCatchEmMode
xor a
ld [wd622], a
ret
Func_16352: ; 0x16352
xor a
ld [wIndicatorStates + 4], a
ld a, $d
callba Func_10000
jr nc, .asm_1636d
ld a, $1
ld [wd548], a
ld [wd549], a
ret
.asm_1636d
ld a, [wd624]
cp $3
jr nz, .asm_163b3
ld a, [wd607]
and a
jr nz, .asm_163b3
.asm_1637a
ld a, [wd623]
and a
jr nz, .asm_16389
xor a
ld [wd625], a
ld a, $40
ld [wd626], a
.asm_16389
xor a
ld [wd623], a
ld a, $1
ld [wd495], a
ld [wd4ae], a
ld a, [wd498]
ld c, a
ld b, $0
ld hl, Data_16420
add hl, bc
ld a, [hl]
ld [wd497], a
call Func_163f2
xor a
ld [wd609], a
ld [wd622], a
ld a, $1e
ld [wd607], a
ret
.asm_163b3
callba Func_ed8e
xor a
ld [wd608], a
ld a, [wd61d]
cp $d
jr nc, .asm_1637a
ld a, $1
ld [wd548], a
ld [wd549], a
ld a, [wd622]
cp $2
ret nz
callba Func_10ab3
ld a, [wd7ad]
ld c, a
ld a, [wStageCollisionState]
and $1
or c
ld [wStageCollisionState], a
xor a
ld [wd622], a
ret
Func_163f2: ; 0x163f2
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld a, [wd497]
ld de, GoToDiglettStageText
cp $d
jr z, .asm_1640f
ld de, GoToGengarStageText
cp $7
jr z, .asm_1640f
ld de, GoToMewtwoStageText
.asm_1640f
call LoadTextHeader
ld de, $0000
call PlaySong
rst AdvanceFrame
lb de, $3c, $23
call PlaySoundEffect
ret
Data_16420:
dr $16420, $16425
Func_16425: ; 0x16425
ld a, [wCurrentStage]
and $1
sla a
ld c, a
ld a, [wd604]
add c
sla a
ld c, a
ld b, $0
ld hl, Data_1644d
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_16441
ld hl, Data_164a1
.asm_16441
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, Bank(Data_1644d)
call Func_10aa
ret
Data_1644d:
dr $1644d, $164a1
Data_164a1:
dr $164a1, $164e3
Func_164e3: ; 0x164e3
ld a, [wd607]
and a
ret z
dec a
ld [wd607], a
ret nz
ld a, [wInSpecialMode]
and a
ret nz
ld a, [wd609]
and a
jr z, .asm_164ff
ld a, [wd498]
add $15
jr .asm_16506
.asm_164ff
ld a, [wd608]
and a
ret z
ld a, $1a
.asm_16506
ld hl, wCurrentStage
bit 0, [hl]
callba nz, Func_30256
ld a, [wd604]
and a
ret nz
ld a, $1
ld [wd604], a
ld a, $80
ld [wIndicatorStates + 4], a
ld a, [wCurrentStage]
bit 0, a
call nz, Func_16425
ret
Func_1652d: ; 0x1652d
ld a, [wPinballLaunchAlley]
and a
ret z
xor a
ld [wPinballLaunchAlley], a
ld a, [wd4de]
and a
jr z, .asm_16566
xor a
ld [wRightAlleyTrigger], a
ld [wLeftAlleyTrigger], a
ld [wSecondaryLeftAlleyTrigger], a
ld hl, wBallXVelocity
ld [hli], a
ld [hl], a
ld [wBallSpin], a
ld [wBallRotation], a
ld a, $80
ld [wBallYVelocity], a
ld a, $fa
ld [wBallYVelocity + 1], a
ld a, $1
ld [wd549], a
lb de, $00, $0a
call PlaySoundEffect
.asm_16566
ld a, $ff
ld [wPreviousTriggeredGameObject], a
ld a, [wd4de]
and a
ret nz
ld a, [wd4e0]
and a
jr nz, .asm_16582
call Func_1658f
ld a, $1
ld [wd4e0], a
ld [wd4de], a
ret
.asm_16582
ld hl, wKeyConfigBallStart
call IsKeyPressed
ret z
ld a, $1
ld [wd4de], a
ret
Func_1658f: ; 0x1658f
ld a, [hGameBoyColorFlag]
and a
callba nz, LoadGreyBillboardPaletteData
.showNextMap
ld a, [wInitialMapSelectionIndex]
inc a
cp $7 ; number of maps to choose from at the start of play
jr c, .gotMapId
xor a ; wrap around to 0
.gotMapId
ld [wInitialMapSelectionIndex], a
ld c, a
ld b, $0
ld hl, RedStageInitialMaps
add hl, bc
ld a, [hl]
ld [wCurrentMap], a
push af
lb de, $00, $48
call PlaySoundEffect
pop af
add (PalletTownPic_Pointer - BillboardPicturePointers) / 3 ; map billboard pictures start at the $29th entry in BillboardPicturePointers
callba LoadBillboardPicture
ld b, $20 ; number of frames to delay before the next map is shown
.waitOnCurrentMap
push bc
callba Func_eeee
ld hl, wKeyConfigBallStart
call IsKeyPressed
jr nz, .ballStartKeyPressed
pop bc
dec b
jr nz, .waitOnCurrentMap
jr .showNextMap
.ballStartKeyPressed
pop bc
callba Func_30253
ld bc, StartFromMapText
callba Func_3118f
ld a, [wCurrentMap]
ld [wd4e3], a
xor a
ld [wd4e2], a
ret
RedStageInitialMaps: ; 0x16605
db PALLET_TOWN
db VIRIDIAN_FOREST
db PEWTER_CITY
db CERULEAN_CITY
db VERMILION_SEASIDE
db ROCK_MOUNTAIN
db LAVENDER_TOWN
ResolveRedStagePikachuCollision: ; 0x1660c
ld a, [wWhichPikachu]
and a
jr z, .asm_1667b
xor a
ld [wWhichPikachu], a
ld a, [wd51c]
and a
jr nz, .asm_1667b
ld a, [wd51d]
and a
jr nz, .asm_16634
ld a, [wWhichPikachuId]
sub $1c
ld hl, wd518
cp [hl]
jr nz, .asm_1667b
ld a, [wd517]
cp $f
jr nz, .asm_16667
.asm_16634
ld hl, PikachuSaverAnimationDataBlueStage
ld de, wPikachuSaverAnimationFrameCounter
call CopyHLToDE
ld a, [wd51d]
and a
jr nz, .asm_16647
xor a
ld [wd517], a
.asm_16647
ld a, $1
ld [wd51c], a
xor a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
ld [wBallSpin], a
ld [wBallRotation], a
ld [wd549], a
call FillBottomMessageBufferWithBlackTile
jr .asm_1667b
.asm_16667
ld hl, PikachuSaverAnimation2DataBlueStage
ld de, wPikachuSaverAnimationFrameCounter
call CopyHLToDE
ld a, $2
ld [wd51c], a
lb de, $00, $3b
call PlaySoundEffect
.asm_1667b
ld a, [wd51c]
and a
call z, Func_16766
call Func_1669e
ld a, [wd517]
cp $f
ret nz
ld a, [wd51e]
and a
ret z
dec a
ld [wd51e], a
cp $5a
ret nz
lb de, $0f, $22
call PlaySoundEffect
ret
Func_1669e: ; 0x1669e
ld a, [wd51c]
cp $1
jr nz, .asm_16719
ld hl, PikachuSaverAnimationDataBlueStage
ld de, wPikachuSaverAnimationFrameCounter
call UpdateAnimation
ret nc
ld a, [wPikachuSaverAnimationFrameIndex]
cp $1
jr nz, .asm_166f7
xor a
ld [wd85d], a
call Func_310a
rst AdvanceFrame
ld a, $1
callba PlayPikachuSoundClip
ld a, $1
ld [wd85d], a
ld a, $ff
ld [wd803], a
ld a, $60
ld [wd804], a
ld hl, wd62e
call Func_e4a
jr nc, .asm_166f0
ld c, $a
call Func_e55
callba z, Func_30164
.asm_166f0
lb de, $16, $10
call PlaySoundEffect
ret
.asm_166f7
ld a, [wPikachuSaverAnimationFrameIndex]
cp $11
ret nz
ld a, $fc
ld [wBallYVelocity + 1], a
ld a, $1
ld [wd549], a
ld bc, FiveThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
xor a
ld [wd51c], a
ret
.asm_16719
cp $2
jr nz, .asm_16732
ld hl, PikachuSaverAnimation2DataBlueStage
ld de, wPikachuSaverAnimationFrameCounter
call UpdateAnimation
ret nc
ld a, [wPikachuSaverAnimationFrameIndex]
cp $1
ret nz
xor a
ld [wd51c], a
ret
.asm_16732
ld a, [hNumFramesDropped]
swap a
and $1
ld [wPikachuSaverAnimationFrame], a
ret
PikachuSaverAnimationDataBlueStage: ; 0x1673c
; Each entry is [duration][OAM id]
db $0C, $02
db $05, $03
db $05, $02
db $05, $04
db $05, $05
db $05, $02
db $06, $06
db $06, $07
db $06, $08
db $06, $02
db $06, $05
db $06, $08
db $06, $07
db $06, $02
db $06, $08
db $06, $07
db $06, $02
db $01, $00
db $00
PikachuSaverAnimation2DataBlueStage: ; 0x16761
; Each entry is [duration][OAM id]
db $0C, $02
db $01, $00
db $00
Func_16766: ; 0x16766
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed2
jr z, .asm_16774
ld hl, wd518
ld [hl], $0
ret
.asm_16774
ld hl, wKeyConfigRightFlipper
call IsKeyPressed2
ret z
ld hl, wd518
ld [hl], $1
ret
ResolveStaryuCollision: ; 0x16781
ld a, [wStaryuCollision]
and a
jr z, .asm_167bd
xor a
ld [wStaryuCollision], a
ld a, [wd503]
and a
jr nz, .asm_167c2
ld bc, FiveThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld a, [wd502]
xor $1
set 1, a
ld [wd502], a
ld a, $14
ld [wd503], a
call Func_16859
ld a, $6
callba Func_10000
ret
.asm_167bd
ld a, [wd503]
and a
ret z
.asm_167c2
dec a
ld [wd503], a
ret nz
ld a, [wd502]
res 1, a
ld [wd502], a
call Func_16859
ld a, [wd502]
and $1
ld c, a
ld a, [wStageCollisionState]
and $fe
or c
ld [wStageCollisionState], a
callba LoadStageCollisionAttributes
call Func_159f4
lb de, $00, $07
call PlaySoundEffect
ld a, [wStageCollisionState]
bit 0, a
jp nz, Func_15450
jp Func_15499
Func_167ff: ; 0x167ff
ld a, [wStaryuCollision]
and a
jr z, .asm_16839
xor a
ld [wStaryuCollision], a
ld a, [wd503]
and a
jr nz, .asm_1683e
ld bc, FiveThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld a, [wd502]
xor $1
ld [wd502], a
ld a, $14
ld [wd503], a
call Func_16878
ld a, $6
callba Func_10000
ret
.asm_16839
ld a, [wd503]
and a
ret z
.asm_1683e
dec a
ld [wd503], a
ret nz
ld a, [wd502]
and $1
ld c, a
ld a, [wStageCollisionState]
and $fe
or c
ld [wStageCollisionState], a
lb de, $00, $07
call PlaySoundEffect
ret
Func_16859: ; 0x16859
ld a, [wd502]
sla a
ld c, a
ld b, $0
ld hl, Data_16899
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1686c
ld hl, Data_16910
.asm_1686c
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, Bank(Data_16899)
call Func_10aa
ret
Func_16878: ; 0x16878
ld a, [wd502]
and $1
sla a
ld c, a
ld b, $0
ld hl, Data_1695a
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1688d
ld hl, Data_16980
.asm_1688d
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, Bank(Data_1695a)
call Func_10aa
ret
Data_16899:
dr $16899, $16910
Data_16910:
dr $16910, $1695a
Data_1695a:
dr $1695a, $16980
Data_16980:
dr $16980, $169a6
Func_169a6: ; 0x169a6
ld a, [hNumFramesDropped]
and $1f
ret nz
ld bc, $0000
.asm_169ae
push bc
ld hl, wIndicatorStates
add hl, bc
bit 7, [hl]
jr z, .asm_169c5
ld a, [hl]
res 7, a
ld hl, hNumFramesDropped
bit 5, [hl]
jr z, .asm_169c2
inc a
.asm_169c2
call Func_169cd
.asm_169c5
pop bc
inc c
ld a, c
cp $5
jr nz, .asm_169ae
ret
Func_169cd: ; 0x169cd
push af
sla c
ld hl, Data_169ed
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_169db
ld hl, Data_16bef
.asm_169db
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
pop af
sla a
ld c, a
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_169ed)
call Func_10aa
ret
Data_169ed:
dr $169ed, $16bef
Data_16bef:
dr $16bef, $16d9d
ResolveRedStageBonusMultiplierCollision: ; 016d9d
ld a, [wWhichBonusMultiplierRailing]
and a
jp z, Func_16e51
xor a
ld [wWhichBonusMultiplierRailing], a
lb de, $00, $0d
call PlaySoundEffect
ld a, [wWhichBonusMultiplierRailingId]
sub $21
jr nz, .asm_16ddc
ld a, $9
callba Func_10000
ld a, [wd610]
cp $3
jr nz, .asm_16e35
ld a, $1
ld [wd610], a
ld a, $3
ld [wd611], a
ld a, [wd60c]
set 7, a
ld [wd60c], a
jr .asm_16e35
.asm_16ddc
ld a, $a
callba Func_10000
ld a, [wd611]
cp $3
jr nz, .asm_16e35
ld a, $1
ld [wd610], a
ld a, $1
ld [wd611], a
ld a, $80
ld [wd612], a
ld a, [wd60d]
set 7, a
ld [wd60d], a
ld a, [wd482]
inc a
cp 100
jr c, .asm_16e10
ld a, 99
.asm_16e10
ld [wd482], a
jr nc, .asm_16e24
ld c, $19
call Func_e55
callba z, Func_30164
.asm_16e24
ld a, [wd60c]
ld [wd614], a
ld a, [wd60d]
ld [wd615], a
ld a, $1
ld [wd613], a
.asm_16e35
ld bc, TenPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld a, [wd60c]
call Func_16f28
ld a, [wd60d]
add $14
call Func_16f28
ret
Func_16e51: ; 0x16e51
call Func_16ef5
ld a, [wd612]
and a
jr z, .asm_16e8f
dec a
ld [wd612], a
cp $70
jr nz, .asm_16e6e
ld a, $2
ld [wd610], a
ld a, $2
ld [wd611], a
jr .asm_16e8f
.asm_16e6e
and a
jr nz, .asm_16e8f
ld a, $3
ld [wd610], a
xor a
ld [wd611], a
ld a, [wd482]
call Func_16f95
ld a, [wd60c]
call Func_16f28
ld a, [wd60d]
add $14
call Func_16f28
ret
.asm_16e8f
ld a, [wd610]
cp $2
jr c, .asm_16ec1
cp $3
ld a, [hNumFramesDropped]
jr c, .asm_16ea0
srl a
srl a
.asm_16ea0
ld b, a
and $3
jr nz, .asm_16ec1
bit 3, b
jr nz, .asm_16eb6
ld a, [wd60c]
res 7, a
ld [wd60c], a
call Func_16f28
jr .asm_16ec1
.asm_16eb6
ld a, [wd60c]
set 7, a
ld [wd60c], a
call Func_16f28
.asm_16ec1
ld a, [wd611]
cp $2
ret c
cp $3
ld a, [hNumFramesDropped]
jr c, .asm_16ed1
srl a
srl a
.asm_16ed1
ld b, a
and $3
ret nz
bit 3, b
jr nz, .asm_16ee7
ld a, [wd60d]
res 7, a
ld [wd60d], a
add $14
call Func_16f28
ret
.asm_16ee7
ld a, [wd60d]
set 7, a
ld [wd60d], a
add $14
call Func_16f28
ret
Func_16ef5: ; 0x16ef5
ld a, [wd5ca]
and a
ret nz
ld a, [wd613]
and a
ret z
xor a
ld [wd613], a
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, BonusMultiplierText
call LoadTextHeader
ld hl, wBottomMessageText + $12
ld a, [wd614]
and $7f
jr z, .asm_16f1f
add $30
ld [hli], a
.asm_16f1f
ld a, [wd615]
res 7, a
add $30
ld [hl], a
ret
Func_16f28: ; 0x16f28
push af
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_16f33
pop af
call Func_16f38
ret
.asm_16f33
pop af
call Func_16f7b
ret
Func_16f38: ; 0x16f38
push af
res 7, a
ld hl, wd60e
cp $14
jr c, .asm_16f47
ld hl, wd60f
sub $a
.asm_16f47
cp [hl]
jr z, .asm_16f5c
ld [hl], a
ld c, a
ld b, $0
sla c
ld hl, Data_16fc8
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_16fc8)
call Func_10aa
.asm_16f5c
pop af
ld bc, $0000
bit 7, a
jr z, .asm_16f68
res 7, a
set 1, c
.asm_16f68
cp $14
jr c, .asm_16f6e
set 2, c
.asm_16f6e
ld hl, Data_171e4
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_171e4)
call Func_10aa
ret
Func_16f7b: ; 0x16f7b
bit 7, a
jr z, .asm_16f83
res 7, a
add $a
.asm_16f83
ld c, a
ld b, $0
sla c
ld hl, Data_17228
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_17228)
call Func_10aa
ret
Func_16f95: ; 0x16f95
ld a, [wd482]
inc a
cp 100
jr c, .asm_16f9f
ld a, 99
.asm_16f9f
ld b, a
xor a
ld hl, Data_16fc1
ld c, $7
.asm_16fa6
bit 0, b
jr z, .asm_16fac
add [hl]
daa
.asm_16fac
srl b
inc hl
dec c
jr nz, .asm_16fa6
push af
swap a
and $f
ld [wd60c], a
pop af
and $f
ld [wd60d], a
ret
Data_16fc1:
dr $16fc1, $16fc8
Data_16fc8:
dr $16fc8, $171e4
Data_171e4:
dr $171e4, $17228
Data_17228:
dr $17228, $174d0
Func_174d0: ; 0x174d0
call Func_174ea
ret nc
; fall through
Func_174d4: ; 0x174d4
sla a
ld c, a
ld b, $0
ld hl, Data_17528
add hl, bc
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, $5
ld de, LoadTileLists
call Func_10c5
ret
Func_174ea: ; 0x174ea
ld a, [wd624]
ld hl, wd625
cp [hl]
ret z
ld a, [wd626]
dec a
ld [wd626], a
jr nz, .asm_17514
ld a, [wd625]
ld [wd624], a
cp $3
jr c, .asm_1750f
ld a, $1
ld [wd609], a
ld a, $3
ld [wd607], a
.asm_1750f
ld a, [wd624]
scf
ret
.asm_17514
and $7
ret nz
ld a, [wd626]
bit 3, a
jr nz, .asm_17523
ld a, [wd624]
scf
ret
.asm_17523
ld a, [wd625]
scf
ret
Data_17528:
dr $17528, $1755c
Func_1755c: ; 0x1755c
ld bc, $7f00
call DrawTimer
call Func_17cc4
call Func_17d34
call Func_17d59
call Func_17d7a
call Func_17d92
call Func_17de1
call DrawPinball
call Func_17efb
call Func_17f64
ret
Func_1757e: ; 0x1757e
ld bc, $7f00
call DrawTimer
call DrawMonCaptureAnimation
call DrawAnimatedMon_RedStage
call DrawPikachuSavers_RedStage
callba DrawFlippers
call DrawPinball
call Func_17f0f
call Func_17f75
call Func_17fca
ret
DrawTimer: ; 0x175a4
ld a, [wd57d]
and a
ret z
ld a, [hGameBoyColorFlag]
and a
jr nz, DrawTimer_GameBoyColor
ld a, [wd580]
and a
ret z
ld a, [wd581]
and a
jr z, .DrawTimer_GameBoy
dec a
ld [wd581], a
ret
.DrawTimer_GameBoy
call Func_1762f
ld hl, wTimerDigits
ld a, [wTimerMinutes]
and $f
call LoadTimerDigitTiles
ld a, [wTimerSeconds]
swap a
and $f
call LoadTimerDigitTiles
ld a, [wTimerSeconds]
and $f
call LoadTimerDigitTiles
ld d, $0
ld hl, TimerOAMIds
add hl, de
ld a, [hli]
call DrawTimerDigit
ld a, [hli]
call DrawTimerDigit
ld a, [hli]
call DrawTimerDigit
ld a, [hli]
call DrawTimerDigit
ret
DrawTimer_GameBoyColor: ; 0x175f5
; Loads the OAM data for the timer in the top-right corner of the screen.
ld a, [wTimerMinutes]
and $f
call DrawTimerDigit_GameBoyColor
ld a, $a ; colon
call DrawTimerDigit_GameBoyColor
ld a, [wTimerSeconds]
swap a
and $f
call DrawTimerDigit_GameBoyColor ; tens digit of the minutes
ld a, [wTimerSeconds]
and $f
call DrawTimerDigit_GameBoyColor ; ones digit of the minutes
ret
TimerOAMIds:
db $d7, $da, $d8, $d9
db $dc, $df, $dd, $de
db $dc, $db, $dd, $de
db $f5, $f8, $f6, $f7
DrawTimerDigit_GameBoyColor: ; 0x17625
add $b1 ; the timer digits' OAM ids start at $b1
DrawTimerDigit: ; 0x17627
call LoadOAMData
ld a, b
add $8
ld b, a
ret
Func_1762f: ; 0x1762f
lb de, $60, $0c
ld a, [wCurrentStage]
cp $6
ret nc
lb de, $00, $00
bit 0, a
ret z
lb de, $30, $04
ld a, [wInSpecialMode]
and a
ret z
ld a, [wSpecialMode]
and a
ret nz
lb de, $30, $08
ret
LoadTimerDigitTiles: ; 0x1764f
push bc
push de
cp [hl]
jr z, .skip
push af
push hl
add d
call Func_17665
pop hl
pop af
ld [hl], a
.skip
inc hl
pop de
ld a, d
add $10
ld d, a
pop bc
ret
Func_17665: ; 0x17665
ld c, a
ld b, $0
sla c
rl b
ld hl, Data_17679
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_17679)
call Func_10aa
ret
Data_17679:
INCLUDE "data/unknown_17679.asm"
DrawMonCaptureAnimation: ; 0x17c67
ld a, [wCapturingMon]
and a
ret z
ld a, $50
ld hl, hSCX
sub [hl]
ld b, a
ld a, $38
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wBallCaptureAnimationFrame]
ld e, a
ld d, $0
ld hl, BallCaptureAnimationOAMIds
add hl, de
ld a, [hl]
call LoadOAMData
ret
BallCaptureAnimationOAMIds:
db $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $21, $22, $23, $24, $25
DrawAnimatedMon_RedStage: ; 0x17c96
ld a, [wWildMonIsHittable]
and a
ret z
ld a, $50
ld hl, hSCX
sub [hl]
ld b, a
ld a, $3e
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd5bd]
ld e, a
ld d, $0
ld hl, AnimatedMonOAMIds_RedStage
add hl, de
ld a, [hl]
call LoadOAMData
ret
AnimatedMonOAMIds_RedStage:
db $26, $27, $28, $29, $2A, $2B, $2C, $2D, $2E, $2F, $30, $31
Func_17cc4: ; 0x17cc4
ld de, wd4cd
ld hl, Data_17d15
call Func_17cdc
ld de, wd4d0
ld hl, Data_17d1b
call Func_17cdc
ld de, wd4d3
ld hl, Data_17d21
; fall through
Func_17cdc: ; 0x17cdc
push hl
ld hl, Data_17d27
call UpdateAnimation
ld h, d
ld l, e
ld a, [hl]
and a
jr nz, .asm_17cf6
call GenRandom
and $7
add $1e
ld [hli], a
ld a, $1
ld [hli], a
xor a
ld [hl], a
.asm_17cf6
pop hl
inc de
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [wd4d7]
sub [hl]
inc hl
jr z, .asm_17d0c
ld a, [de]
.asm_17d0c
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_17d15:
dr $17d15, $17d1b
Data_17d1b:
dr $17d1b, $17d21
Data_17d21:
dr $17d21, $17d27
Data_17d27:
dr $17d27, $17d34
Func_17d34: ; 0x17d34
ld a, $0
ld hl, hSCX
sub [hl]
ld b, a
ld a, $10
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wStageCollisionState]
ld e, a
ld d, $0
ld hl, Data_17d51
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_17d51:
dr $17d51, $17d59
Func_17d59: ; 0x17d59
ld a, $74
ld hl, hSCX
sub [hl]
ld b, a
ld a, $52
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wBellsproutAnimationFrame]
ld e, a
ld d, $0
ld hl, Data_17d76
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_17d76:
dr $17d76, $17d7a
Func_17d7a: ; 0x17d7a
ld a, [hGameBoyColorFlag]
and a
ret z
ld a, $67
ld hl, hSCX
sub [hl]
ld b, a
ld a, $54
ld hl, hSCY
sub [hl]
ld c, a
ld a, $cc
call LoadOAMData
ret
Func_17d92: ; 0x17d92
ld a, [hGameBoyColorFlag]
and a
ret z
ld hl, Data_17dd0
ld de, wd504
call UpdateAnimation
ld a, [wd504]
and a
jr nz, .asm_17db1
ld a, $13
ld [wd504], a
xor a
ld [wd505], a
ld [wd506], a
.asm_17db1
ld a, $2b
ld hl, hSCX
sub [hl]
ld b, a
ld a, $69
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd505]
ld e, a
ld d, $0
ld hl, Data_17dce
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_17dce:
dr $17dce, $17dd0
Data_17dd0:
dr $17dd0, $17de1
Func_17de1: ; 0x17de1
ld a, $88
ld hl, hSCX
sub [hl]
ld b, a
ld a, $5a
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd50a]
srl a
srl a
ld e, a
ld d, $0
ld hl, Data_17e02
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_17e02:
dr $17e02, $17e08
DrawPikachuSavers_RedStage: ; 0x17e08
ld a, [hSCX]
ld d, a
ld a, [hSCY]
ld e, a
ld a, [wd51d]
and a
ld a, [wd518]
jr z, .asm_17e33
ld a, [wd51c]
and a
jr nz, .asm_17e29
ld a, [hNumFramesDropped]
srl a
srl a
srl a
and $1
jr .asm_17e33
.asm_17e29
ld a, [wd4b4]
cp $50
ld a, $1
jr nc, .asm_17e33
xor a
.asm_17e33
sla a
ld c, a
ld b, $0
ld hl, PikachuSaverOAMOffsets_RedStage
add hl, bc
ld a, [hli]
sub d
ld b, a
ld a, [hli]
sub e
ld c, a
ld a, [wPikachuSaverAnimationFrame]
add $e
call LoadOAMData
ret
PikachuSaverOAMOffsets_RedStage:
dw $7E0F
dw $7E92
Func_17e4f: ; 0x17e4f
; unused
ld hl, UnusedData_7e55
jp Func_17e5e
UnusedData_7e55: ; 0x17e55
db $00, $2B, $69, $CB, $00, $67, $54, $CC
db $FF
Func_17e5e: ; 0x17e5e
; unused
ld a, [hGameBoyColorFlag]
ld e, a
ld a, [hSCX]
ld d, a
.asm_17e64
ld a, [hli]
cp $ff
ret z
or e
jr nz, .asm_17e70
inc hl
inc hl
inc hl
jr .asm_17e64
.asm_17e70
ld a, [hli]
sub d
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [hli]
bit 0, e
call nz, LoadOAMData
jr .asm_17e64
DrawPinball: ; 0x17e81
ld a, [wd548]
and a
ret z
ld hl, wBallSpin
ld a, [wBallRotation]
add [hl]
ld [wBallRotation], a
ld a, [wBallXPos + 1]
inc a
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wBallYPos + 1]
inc a
sub $10
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wBallRotation]
srl a
srl a
srl a ; divide wBallRotation by 8 because
srl a ; there are 8 frames of the ball spinning
and $7
add $0
call LoadOAMData
ld a, [hGameBoyColorFlag]
and a
ret nz
ld a, [hGameBoyColorFlag]
and a
ret nz
ld a, [hSGBFlag]
and a
ret nz
ld a, [wd4c5]
inc a
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd4c6]
inc a
sub $10
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd4c7]
srl a
srl a
srl a
srl a
and $7
add $0
call LoadOAMData
ld a, [wBallXPos + 1]
ld [wd4c5], a
ld a, [wBallYPos + 1]
ld [wd4c6], a
ld a, [wBallRotation]
ld [wd4c7], a
ret
Func_17efb: ; 0x17efb
ld a, [wd551]
and a
ret nz
ld a, [hNumFramesDropped]
bit 4, a
ret z
ld de, wIndicatorStates + 5
ld hl, Data_17f3a
ld b, $6
jr asm_17f21
Func_17f0f: ; 0x17f0f
ld a, [wd551]
and a
ret nz
ld a, [hNumFramesDropped]
bit 4, a
ret z
ld de, wIndicatorStates + 11
ld hl, Data_17f4c
ld b, $8
asm_17f21: ; 0x17f21
push bc
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [de]
and a
ld a, [hli]
call nz, LoadOAMData
pop bc
inc de
dec b
jr nz, asm_17f21
ret
Data_17f3a:
dr $17f3a, $17f4c
Data_17f4c:
dr $17f4c, $17f64
Func_17f64: ; 0x17f64
ld a, [wd551]
and a
ret z
ld de, wd566
ld hl, Data_17fa6
ld b, $c
ld c, $39
jr asm_17f84
Func_17f75: ; 0x17f75
ld a, [wd551]
and a
ret z
ld de, wd572
ld hl, Data_17fbe
ld b, $6
ld c, $40
asm_17f84: ; 0x17f84
push bc
ld a, [de]
add c
cp c
push af
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [hNumFramesDropped]
and $e
jr nz, .asm_17f9c
dec c
.asm_17f9c
pop af
call nz, LoadOAMData
pop bc
inc de
dec b
jr nz, asm_17f84
ret
Data_17fa6:
dr $17fa6, $17fbe
Data_17fbe:
dr $17fbe, $17fca
Func_17fca: ; 0x17fca
ld a, [wd604]
and a
ret z
ld a, [wd606]
inc a
ld [wd606], a
ld a, $40
ld hl, hSCX
sub [hl]
ld b, a
ld a, $1
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd606]
srl a
srl a
srl a
and $3
add $4f
cp $52
call nz, LoadOAMData
ret
SECTION "bank6", ROMX, BANK[$6]
Func_18000: ; 0x18000
ld hl, wc000
ld bc, $0a00
call ClearData
ld a, $1
ld [rVBK], a
hlCoord 0, 0, vBGWin
ld bc, $0400
call ClearData
xor a
ld [rVBK], a
ld hl, wWhichVoltorb
ld bc, $032e
call ClearData
xor a
ld hl, wScore + $5
ld [hld], a
ld [hld], a
ld [hld], a
ld [hld], a
ld [hld], a
ld [hl], a
ld [wNumPartyMons], a
ld [wd49b], a
ld [wd4c9], a
ld a, $1
ld [wd49d], a
ld a, $3
ld [wd49e], a
callba Start20SecondSaverTimer
ret
Func_1804a: ; 0x1804a
ld a, $0
ld [wBallXPos], a
ld a, $b0
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $98
ld [wBallYPos + 1], a
ret
DoNothing_1805f: ; 0x1805f
ret
DoNothing_18060: ; 0x18060
ret
DoNothing_18061: ; 0x18061
ret
CheckRedStageLaunchAlleyCollision_: ; 0x18062
callba CheckRedStageLaunchAlleyCollision
ret
DoNothing_1806d: ; 0x1806d
ret
Func_1806e: ; 0x1806e
callba Func_1652d
ret
Func_18079: ; 0x18079
callba DrawPinball
ret
Func_18084: ; 0x18084
callba DrawFlippers
callba DrawPinball
ret
InitGengarBonusStage: ; 0x18099
ld a, [wd7c1]
and a
jr z, .asm_180ac
xor a
ld [wd674], a
ld a, $8
ld [wd690], a
ld [wd6a1], a
ret
.asm_180ac
ld a, $1
ld [wd7ac], a
ld a, [wBallType]
ld [wBallTypeBackup], a
xor a
ld [wd4c8], a
ld [wBallType], a
ld [wd49a], a
ld hl, Data_18121
ld de, wd659
call Func_18112
call Func_18112
call Func_18112
ld hl, Data_1813c
ld de, wd67e
call Func_18112
call Func_18112
ld hl, Data_1814e
ld de, wd698
call Func_18112
xor a
ld [wd67b], a
ld [wd695], a
ld hl, wd6a2
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [wd656], a
ld bc, $0130 ; 1 minute 30 seconds
callba StartTimer
ld a, $f
call SetSongBank
ld de, $0005
call PlaySong
ret
Func_18112: ; 0x18112
ld b, $3
.asm_18114
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .asm_18114
ret
Data_18121:
dr $18121, $1813c
Data_1813c:
dr $1813c, $1814e
Data_1814e:
dr $1814e, $18157
StartBallGengarBonusStage: ; 0x18157
ld a, $0
ld [wBallXPos], a
ld a, $a6
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $56
ld [wBallYPos + 1], a
xor a
ld [wSCX], a
ld [wStageCollisionState], a
ld [wd653], a
xor a
ld [wd674], a
ld a, $8
ld [wd690], a
ld [wd6a1], a
ld a, [wd4c9]
and a
ret z
xor a
ld [wd4c9], a
ret
Func_1818b: ; 0x1818b
callba Func_142fc
call Func_2862
call Func_18d72
ld a, [wd7c1]
callba Func_1404a
and a
ret z
call Func_183db
call Func_18d91
ret
CheckGengarBonusStageGameObjectCollisions: ; 0x181b1
call CheckGengarBonusStageGastlyCollision
call CheckGengarBonusStageHaunterCollision
call CheckGengarBonusStageGengarCollision
call GengarBonusStageGravestonesCollision
ret
CheckGengarBonusStageGastlyCollision: ; 0x181be
ld a, [wd659]
and a
ret z
ld a, [wGastly1XPos + 1]
ld b, a
ld a, [wGastly1YPos + 1]
add $10
ld c, a
ld a, [wGastly1AnimationState]
call CheckSingleGastlyCollision
ld a, $1
jr c, .hitGastly
ld a, [wGastly2XPos + 1]
ld b, a
ld a, [wGastly2YPos + 1]
add $10
ld c, a
ld a, [wGastly2AnimationState]
call CheckSingleGastlyCollision
ld a, $2
jr c, .hitGastly
ld a, [wGastly3XPos + 1]
ld b, a
ld a, [wGastly3YPos + 1]
add $10
ld c, a
ld a, [wGastly3AnimationState]
call CheckSingleGastlyCollision
ld a, $3
ret nc
.hitGastly
ld [wTriggeredGameObjectIndex], a
ld [wd657], a
add $4
ld [wTriggeredGameObject], a
ld [wd658], a
ret
CheckSingleGastlyCollision: ; 0x1820d
cp $4
jr z, .noCollision
ld a, [wBallXPos + 1]
sub b
cp $20
jr nc, .noCollision
ld b, a
ld a, [wBallYPos + 1]
sub c
cp $20
jr nc, .noCollision
ld c, a
ld e, c
ld d, $0
sla e
rl d
sla e
rl d
sla e
rl d
sla e
rl d
sla e
rl d
ld l, b
ld h, $0
add hl, de
ld de, CircularCollisionAngles
add hl, de
ld a, BANK(CircularCollisionAngles)
call ReadByteFromBank
bit 7, a
jr nz, .noCollision
sla a
ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
ret
.noCollision
and a
ret
CheckGengarBonusStageHaunterCollision: ; 0x18259
ld a, [wd67e]
and a
ret z
ld a, [wHaunter1XPos + 1]
add $fe
ld b, a
ld a, [wHaunter1YPos + 1]
add $c
ld c, a
ld a, [wHaunter1AnimationState]
call CheckSingleHaunterCollision
ld a, $1
jr c, .hitHaunter
ld a, [wHaunter2XPos + 1]
add $fe
ld b, a
ld a, [wHaunter2YPos + 1]
add $c
ld c, a
ld a, [wHaunter2AnimationState]
call CheckSingleHaunterCollision
ld a, $2
ret nc
.hitHaunter
ld [wTriggeredGameObjectIndex], a
ld [wd67c], a
add $7
ld [wTriggeredGameObject], a
ld [wd67d], a
ret
CheckSingleHaunterCollision: ; 0x18298
cp $5
jr z, .noCollision
ld a, [wBallXPos + 1]
sub b
cp $20
jr nc, .noCollision
ld b, a
ld a, [wBallYPos + 1]
sub c
cp $28
jr nc, .noCollision
ld c, a
ld e, c
ld d, $0
sla e
rl d
sla e
rl d
sla e
rl d
sla e
rl d
sla e
rl d
ld l, b
ld h, $0
add hl, de
ld de, HaunterCollisionAngles
add hl, de
ld a, BANK(HaunterCollisionAngles)
call ReadByteFromBank
bit 7, a
jr nz, .noCollision
sla a
ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
ret
.noCollision
and a
ret
CheckGengarBonusStageGengarCollision: ; 0x182e4
ld a, [wd698]
and a
ret z
ld a, [wGengarXPos + 1]
ld b, a
ld a, [wGengarYPos + 1]
add $c
ld c, a
call CheckGiantGengarCollision
ld a, $1
ret nc
ld [wTriggeredGameObjectIndex], a
ld [wd696], a
add $9
ld [wTriggeredGameObject], a
ld [wd697], a
ret
CheckGiantGengarCollision: ; 0x18308
ld a, [wBallXPos + 1]
sub b
cp $30
jr nc, .noCollision
ld b, a
ld a, [wBallYPos + 1]
sub c
cp $40
jr nc, .noCollision
ld c, a
ld a, c
sla a
add c
ld e, a
ld d, $0
sla e
rl d
sla e
rl d
sla e
rl d
sla e
rl d
ld l, b
ld h, $0
add hl, de
ld de, GengarCollisionAngles
add hl, de
ld a, BANK(GengarCollisionAngles)
call ReadByteFromBank
bit 7, a
jr nz, .noCollision
sla a
ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
ret
.noCollision
and a
ret
GengarBonusStageGravestonesCollision: ; 0x18350
ld de, GengarBonusStageGravestonesCollisionData
ld hl, GengarBonusStageGravestonesCollisionAttributes
ld bc, wWhichGravestone
and a
jp HandleGameObjectCollision
GengarBonusStageGravestonesCollisionAttributes:
db $00 ; flat list
db $19, $1A, $1B, $1C, $27, $1D, $1E, $1F, $20
db $FF ; terminator
GengarBonusStageGravestonesCollisionData:
db $11, $11
db $01, $24, $52
db $02, $44, $3A
db $03, $74, $5A
db $04, $7C, $32
db $FF ; terminator
Func_18377: ; 0x18377
call Func_18464
call Func_1860b
call Func_187b1
call Func_18d34
call Func_183b7
callba Func_107f8
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $1
ld [wd7be], a
call Func_2862
callba Func_86d2
ld a, [wd6a2]
cp $5
ret nc
ld a, $1
ld [wd6a8], a
ret
Func_183b7: ; 0x183b7
ld a, [wd653]
and a
ret nz
ld a, [wd4b4]
cp $8a
ret nc
ld a, $1
ld [wStageCollisionState], a
ld [wd653], a
callba LoadStageCollisionAttributes
call Func_183db
call Func_18d91
ret
Func_183db: ; 0x183db
ld a, [wStageCollisionState]
sla a
ld c, a
ld b, $0
ld hl, Data_183f8
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_183ee
ld hl, Data_1842e
.asm_183ee
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, BANK(Data_183f8)
call Func_10aa
ret
Data_183f8:
dr $183f8, $1842e
Data_1842e:
dr $1842e, $18464
Func_18464: ; 0x18464
ld a, [wd659]
and a
ret z
ld a, [wd657]
and a
jr z, .asm_184d5
xor a
ld [wd657], a
ld a, [wd7be]
and a
jr nz, .asm_184d5
ld a, [wd658]
sub $5
ld c, a
sla a
sla a
sla a
add c
ld c, a
ld b, $0
ld hl, wd65d
add hl, bc
ld d, h
ld e, l
ld a, [de]
and a
jr nz, .asm_184d5
push de
dec de
dec de
dec de
ld hl, Data_185e6
call CopyHLToDE
pop de
ld a, $1
ld [de], a
ld a, [wd67b]
inc a
ld [wd67b], a
ld bc, OneHundredThousandPoints
callba AddBigBCD6FromQueue
ld a, $33
ld [wd803], a
ld a, $8
ld [wd804], a
ld hl, $0100
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
lb de, $00, $2c
call PlaySoundEffect
.asm_184d5
ld bc, $0830
ld de, wd65d
ld hl, wd675
call Func_1850c
ld bc, $5078
ld de, wd666
ld hl, wd677
call Func_1850c
ld bc, $3050
ld de, wd66f
ld hl, wd679
call Func_1850c
ld de, wd65d
call Func_18562
ld de, wd666
call Func_18562
ld de, wd66f
call Func_18562
ret
Func_1850c: ; 0x1850c
ld a, [de]
and a
ret nz
inc de
push hl
ld a, [hli]
push af
push bc
ld a, [hl]
inc a
and $1f
ld [hl], a
ld c, a
ld b, $0
ld hl, Data_18542
add hl, bc
pop bc
pop af
and a
jr nz, .asm_18534
ld a, [de]
add [hl]
ld [de], a
inc de
ld a, [de]
adc $0
ld [de], a
pop hl
cp c
ret c
ld a, $1
ld [hl], a
ret
.asm_18534
ld a, [de]
sub [hl]
ld [de], a
inc de
ld a, [de]
sbc $0
ld [de], a
pop hl
cp b
ret nc
xor a
ld [hl], a
ret
Data_18542:
dr $18542, $18562
Func_18562: ; 0x18562
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_185d9
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
dec de
call UpdateAnimation
pop de
ret nc
ld a, [de]
dec de
and a
jr nz, .asm_1858a
ld a, [de]
cp $4
ret nz
ld hl, Data_185dd
dec de
dec de
call CopyHLToDE
ret
.asm_1858a
cp $1
ret nz
ld a, [de]
cp $12
ret nz
ld a, [wd67b]
cp $a
jr nz, .asm_185b1
ld a, $1
ld [wd67e], a
ld [wd687], a
xor a
ld [wd659], a
ld [wd662], a
ld [wd66b], a
ld de, $0006
call PlaySong
ret
.asm_185b1
ld c, a
ld a, [wd65d]
and a
jr nz, .asm_185b9
inc c
.asm_185b9
ld a, [wd666]
and a
jr nz, .asm_185c0
inc c
.asm_185c0
ld a, [wd66f]
and a
jr nz, .asm_185c7
inc c
.asm_185c7
ld a, c
cp $a
ret nc
ld hl, Data_185dd
push de
dec de
dec de
call CopyHLToDE
pop de
inc de
xor a
ld [de], a
ret
Data_185d9:
dr $185d9, $185dd
Data_185dd:
dr $185dd, $185e6
Data_185e6:
dr $185e6, $1860b
Func_1860b: ; 0x1860b
ld a, [wd67e]
and a
ret z
ld a, [wd67c]
and a
jr z, .asm_1867c
xor a
ld [wd67c], a
ld a, [wd7be]
and a
jr nz, .asm_1867c
ld a, [wd67d]
sub $8
ld c, a
sla a
sla a
sla a
add c
ld c, a
ld b, $0
ld hl, wd682
add hl, bc
ld d, h
ld e, l
ld a, [de]
and a
jr nz, .asm_1867c
push de
dec de
dec de
dec de
ld hl, Data_1878a
call CopyHLToDE
pop de
ld a, $1
ld [de], a
ld a, [wd695]
inc a
ld [wd695], a
ld bc, FiveHundredThousandPoints
callba AddBigBCD6FromQueue
ld a, $33
ld [wd803], a
ld a, $8
ld [wd804], a
ld hl, $0100
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
lb de, $00, $2d
call PlaySoundEffect
.asm_1867c
ld bc, $5078
ld de, wd682
ld hl, wd691
call Func_186a1
ld bc, $1038
ld de, wd68b
ld hl, wd693
call Func_186a1
ld de, wd682
call Func_186f7
ld de, wd68b
call Func_186f7
ret
Func_186a1: ; 0x186a1
ld a, [de]
and a
ret nz
inc de
push hl
ld a, [hli]
push af
push bc
ld a, [hl]
inc a
and $1f
ld [hl], a
ld c, a
ld b, $0
ld hl, Data_186d7
add hl, bc
pop bc
pop af
and a
jr nz, .asm_186c9
ld a, [de]
add [hl]
ld [de], a
inc de
ld a, [de]
adc $0
ld [de], a
pop hl
cp c
ret c
ld a, $1
ld [hl], a
ret
.asm_186c9
ld a, [de]
sub [hl]
ld [de], a
inc de
ld a, [de]
sbc $0
ld [de], a
pop hl
cp b
ret nc
xor a
ld [hl], a
ret
Data_186d7:
dr $186d7, $186f7
Func_186f7: ; 0x186f7
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_1877d
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
dec de
call UpdateAnimation
pop de
ret nc
ld a, [de]
dec de
and a
jr nz, .asm_1871f
ld a, [de]
cp $4
ret nz
ld hl, Data_18781
dec de
dec de
call CopyHLToDE
ret
.asm_1871f
cp $1
ret nz
ld a, [de]
cp $12
jr nz, .asm_18761
ld a, [wd695]
cp $a
jr nz, .asm_18740
ld a, $1
ld [wd656], a
call Func_18d72
call Func_18d91
ld de, $0000
call PlaySong
ret
.asm_18740
ld c, a
ld a, [wd682]
and a
jr nz, .asm_18748
inc c
.asm_18748
ld a, [wd68b]
and a
jr nz, .asm_1874f
inc c
.asm_1874f
ld a, c
cp $a
ret nc
ld hl, Data_18781
push de
dec de
dec de
call CopyHLToDE
pop de
inc de
xor a
ld [de], a
ret
.asm_18761
cp $13
ret nz
ld a, [wd695]
cp $a
ret nz
ld a, $1
ld [wd698], a
xor a
ld [wd67e], a
ld [wd687], a
ld de, GENGAR
call PlayCry
ret
Data_1877d:
dr $1877d, $18781
Data_18781:
dr $18781, $1878a
Data_1878a:
dr $1878a, $187b1
Func_187b1: ; 0x187b1
ld a, [wd698]
and a
ret z
ld a, [wd696]
and a
jp z, .asm_1885d
xor a
ld [wd696], a
ld a, [wd7be]
and a
jp nz, .asm_1885d
ld a, [wd697]
sub $a
ld c, a
sla a
sla a
sla a
add c
ld c, a
ld b, $0
ld hl, wd69c
add hl, bc
ld d, h
ld e, l
ld a, [de]
and a
jp nz, .asm_1885d
push de
dec de
dec de
dec de
ld a, [wd6a2]
inc a
ld [wd6a2], a
cp $5
jr nc, .asm_18804
ld hl, Data_18b2b
call CopyHLToDE
pop de
ld a, $2
ld [de], a
lb de, $00, $37
call PlaySoundEffect
jr .asm_18826
.asm_18804
ld hl, Data_18b32
call CopyHLToDE
pop de
ld a, $3
ld [de], a
ld a, $1
ld [wd7be], a
call Func_2862
callba Func_86d2
ld de, $0000
call PlaySong
.asm_18826
ld bc, FiveMillionPoints
callba AddBigBCD6FromQueue
ld a, $33
ld [wd803], a
ld a, $8
ld [wd804], a
ld hl, $0200
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld a, [wGengarYPos]
add $0
ld [wGengarYPos], a
ld a, [wGengarYPos + 1]
adc $ff
ld [wGengarYPos + 1], a
.asm_1885d
ld a, [wd69c]
cp $2
jr nc, .asm_18869
call Func_18876
jr .asm_1886c
.asm_18869
call Func_188e1
.asm_1886c
ld de, wd69c
call Func_189af
call Func_1894c
ret
Func_18876: ; 0x18876
ld a, [wd6a3]
cp $1
jr z, .asm_1889b
cp $2
jr z, .asm_1889b
ld a, [wd69a]
cp $1
jr z, .asm_1888c
cp $2
jr nz, .asm_1889b
.asm_1888c
ld a, $1
ld [wd6a4], a
ld a, $11
ld [wd803], a
ld a, $8
ld [wd804], a
.asm_1889b
ld a, [wd69a]
ld hl, wd6a3
cp [hl]
ret z
ld a, [wd69c]
and a
jr nz, .asm_188da
ld a, [wGengarYPos + 1]
add $80
cp $a0
jr nc, .asm_188da
ld a, [wd69a]
and a
jr z, .asm_188ca
ld a, [wGengarYPos]
add $0
ld [wGengarYPos], a
ld a, [wGengarYPos + 1]
adc $3
ld [wGengarYPos + 1], a
jr .asm_188da
.asm_188ca
ld a, [wGengarYPos]
add $0
ld [wGengarYPos], a
ld a, [wGengarYPos + 1]
adc $1
ld [wGengarYPos + 1], a
.asm_188da
ld a, [wd69a]
ld [wd6a3], a
ret
Func_188e1: ; 0x188e1
ld a, [wd6a3]
cp $1
jr z, .asm_18901
cp $2
jr z, .asm_18901
ld a, [wd69a]
cp $1
jr z, .asm_188f7
cp $2
jr nz, .asm_18901
.asm_188f7
ld a, $1
ld [wd803], a
ld a, $8
ld [wd804], a
.asm_18901
ld a, [wd69a]
cp $6
ret z
ld a, [wd69a]
ld hl, wd6a3
cp [hl]
ret z
ld a, [wd69c]
cp $3
jr nz, .asm_1891d
ld a, [wd69b]
cp $9
jr c, .asm_18945
.asm_1891d
ld a, [wd69a]
and a
jr z, .asm_18935
ld a, [wGengarYPos]
add $0
ld [wGengarYPos], a
ld a, [wGengarYPos + 1]
adc $fd
ld [wGengarYPos + 1], a
jr .asm_18945
.asm_18935
ld a, [wGengarYPos]
add $0
ld [wGengarYPos], a
ld a, [wGengarYPos + 1]
adc $ff
ld [wGengarYPos + 1], a
.asm_18945
ld a, [wd69a]
ld [wd6a3], a
ret
Func_1894c: ; 0x1894c
ld a, [wd6a6]
and a
jr nz, .asm_1898f
ld a, [wd6a4]
and a
jr z, .asm_1898f
ld a, [wd6a5]
cp $3
jr z, .asm_18980
inc a
ld [wd6a5], a
ld a, [wd548]
ld hl, wd549
and [hl]
jr z, .asm_18973
ld a, [wd4b6]
inc a
ld [wd4b6], a
.asm_18973
ld a, [wd7a0]
dec a
ld [wd7a0], a
ld a, $1
ld [wUpperTiltPushing], a
ret
.asm_18980
lb de, $00, $2b
call PlaySoundEffect
ld a, $1
ld [wd6a6], a
xor a
ld [wd6a4], a
.asm_1898f
xor a
ld [wUpperTiltPushing], a
ld a, [wd6a5]
and a
jr z, .asm_189a5
dec a
ld [wd6a5], a
ld a, [wd7a0]
inc a
ld [wd7a0], a
ret
.asm_189a5
ld a, [wd6a4]
and a
ret nz
xor a
ld [wd6a6], a
ret
Func_189af: ; 0x189af
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_18a57
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
dec de
call UpdateAnimation
pop de
ret nc
ld a, [de]
dec de
and a
jr nz, .asm_189d7
ld a, [de]
cp $4
ret nz
ld hl, Data_18a61
dec de
dec de
call CopyHLToDE
ret
.asm_189d7
cp $1
jr nz, .asm_189ed
ld a, [de]
cp $60
ret nz
ld hl, Data_18a61
push de
dec de
dec de
call CopyHLToDE
pop de
inc de
xor a
ld [de], a
ret
.asm_189ed
cp $2
jr nz, .asm_18a04
ld a, [de]
cp $3
ret nz
ld hl, Data_18a6a
push de
dec de
dec de
call CopyHLToDE
pop de
inc de
ld a, $1
ld [de], a
ret
.asm_18a04
cp $3
jr nz, .asm_18a3c
ld a, [de]
cp $1
jr nz, .asm_18a14
lb de, $00, $2e
call PlaySoundEffect
ret
.asm_18a14
cp $fe
ret nz
ld a, $1
ld [wd6a8], a
ld a, $1
ld [wd498], a
ld a, $1
ld [wd49a], a
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, GengarStageClearedText
call LoadTextHeader
lb de, $4b, $2a
call PlaySoundEffect
ret
.asm_18a3c
cp $4
ret nz
ld a, [de]
cp $2
ret nz
ld hl, Data_18a61
push de
dec de
dec de
call CopyHLToDE
pop de
inc de
xor a
ld [de], a
ld de, $0007
call PlaySong
ret
Data_18a57:
dr $18a57, $18a61
Data_18a61:
dr $18a61, $18a6a
Data_18a6a:
dr $18a6a, $18b2b
Data_18b2b:
dr $18b2b, $18b32
Data_18b32:
dr $18b32, $18d34
Func_18d34: ; 0x18d34
ld a, [wWhichGravestone]
and a
jr z, .asm_18d71
xor a
ld [wWhichGravestone], a
ld a, [wd7be]
and a
jr nz, .asm_18d71
ld bc, OneHundredPoints
callba AddBigBCD6FromQueue
ld a, $ff
ld [wd803], a
ld a, $3
ld [wd804], a
ld hl, $0100
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld de, $002f
call Func_4d8
.asm_18d71
ret
Func_18d72: ; 0x18d72
ld a, [wd656]
sla a
ld c, a
ld b, $0
ld hl, Data_18ddb
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_18d85
ld hl, Data_18ed1
.asm_18d85
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, Bank(Data_18ddb)
call Func_10aa
ret
Func_18d91: ; 0x18d91
ld a, [wd656]
and a
ld hl, Data_18dc9
jr z, .asm_18d9d
ld hl, Data_18dd2
.asm_18d9d
ld de, wc7c7
call Func_18db2
ld de, wc7ae
call Func_18db2
ld de, wc823
call Func_18db2
ld de, wc84d
; fall through
Func_18db2: ; 0x18db2
push hl
ld b, $3
.asm_18db5
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
ld a, e
add $1e
ld e, a
jr nc, .asm_18dc4
inc d
.asm_18dc4
dec b
jr nz, .asm_18db5
pop hl
ret
Data_18dc9:
dr $18dc9, $18dd2
Data_18dd2:
dr $18dd2, $18ddb
Data_18ddb:
dr $18ddb, $18ed1
Data_18ed1:
dr $18ed1, $18faf
Func_18faf: ; 0x18faf
ld bc, $7f00
callba DrawTimer
call Func_19020
call Func_190b9
call Func_19185
callba DrawFlippers
callba DrawPinball
ret
Func_18fda:
ld a, [hNewlyPressedButtons]
bit 6, a
ret z
ld a, [wd659]
and a
jr z, .asm_18ff8
ld a, $1
ld [wd67e], a
ld [wd687], a
xor a
ld [wd659], a
ld [wd662], a
ld [wd66b], a
ret
.asm_18ff8
ld a, [wd67e]
and a
jr z, .asm_1900b
ld a, $1
ld [wd698], a
xor a
ld [wd67e], a
ld [wd687], a
ret
.asm_1900b
ld a, [wd698]
and a
ret z
ld a, $1
ld [wd659], a
ld [wd662], a
ld [wd66b], a
xor a
ld [wd698], a
ret
Func_19020: ; 0x19020
ld de, wd659
call Func_19033
ld de, wd662
call Func_19033
ld de, wd66b
call Func_19033
ret
Func_19033: ; 0x19033
ld a, [de]
and a
ret z
.asm_19036
call Func_19070
jr nc, .asm_19042
ld a, [rLCDC]
bit 7, a
jr z, .asm_19036
ret
.asm_19042
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, OAMIds_1906b
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_1906b:
db $00, $01, $02, $03
db $FF
Func_19070: ; 0x19070
ld a, [wd674]
and a
ret z
push de
dec a
ld [wd674], a
sla a
sla a
ld c, a
ld b, $0
ld hl, Data_190a9
add hl, bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld h, [hl]
ld l, a
ld a, $22
ld bc, $0060
call LoadOrCopyVRAMData
ld a, $8
ld [wd690], a
ld [wd6a1], a
xor a
ld [wd67e], a
ld [wd687], a
ld [wd698], a
pop de
scf
ret
Data_190a9:
dr $190a9, $190b9
Func_190b9: ; 0x190b9
ld de, wd67e
call Func_190c6
ld de, wd687
call Func_190c6
ret
Func_190c6: ; 0x190c6
ld a, [de]
and a
ret z
.asm_190c9
call Func_19104
jr nc, .asm_190d5
ld a, [rLCDC]
bit 7, a
jr z, .asm_190c9
ret
.asm_190d5
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, OAMIds_190fe
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_190fe:
db $04, $05, $06, $07, $08
db $FF
Func_19104: ; 0x19104
ld a, [wd690]
and a
ret z
push de
dec a
ld [wd690], a
sla a
sla a
sla a
ld c, a
ld b, $0
ld hl, GengarBonusStageHaunterGfxTable
add hl, bc
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(GengarBonusHaunterGfx)
call LoadOrCopyVRAMData
ld a, $4
ld [wd674], a
ld a, $8
ld [wd6a1], a
xor a
ld [wd659], a
ld [wd662], a
ld [wd66b], a
ld [wd698], a
pop de
scf
ret
GengarBonusStageHaunterGfxTable: ; 0x19145
; Graphics data for Haunter.
; First word: length in bytes
; Second word: destination VRAM address
; Third word: graphics data
; Fourth word: unused
dw $60, vTilesSH tile $10, GengarBonusHaunterGfx, $0000
dw $60, vTilesSH tile $16, GengarBonusHaunterGfx + $60, $0000
dw $60, vTilesSH tile $1c, GengarBonusHaunterGfx + $c0, $0000
dw $60, vTilesSH tile $22, GengarBonusHaunterGfx + $120, $0000
dw $20, vTilesSH tile $28, GengarBonusHaunterGfx + $180, $0000
dw $40, vTilesOB tile $1a, GengarBonusHaunterGfx + $1a0, $0000
dw $60, vTilesOB tile $1e, GengarBonusHaunterGfx + $1e0, $0000
dw $60, vTilesOB tile $24, GengarBonusHaunterGfx + $240, $0000
Func_19185: ; 0x19185
ld de, wd698
call Func_1918c
ret
Func_1918c: ; 0x1918c
ld a, [de]
and a
ret z
.asm_1918f
call Func_191cb
jr nc, .asm_1919b
ld a, [rLCDC]
bit 7, a
jr z, .asm_1918f
ret
.asm_1919b
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, OAMIds_191c4
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_191c4:
db $09, $0A, $0B, $0C, $0D, $0E
db $FF
Func_191cb: ; 0x191cb
ld a, [wd6a1]
and a
ret z
push de
dec a
ld [wd6a1], a
sla a
sla a
sla a
ld c, a
ld b, $0
ld hl, GengarBonusStageGengarGfxTable
add hl, bc
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld h, [hl]
ld l, a
ld a, $26
call LoadOrCopyVRAMData
ld a, $4
ld [wd674], a
ld a, $8
ld [wd690], a
xor a
ld [wd659], a
ld [wd662], a
ld [wd66b], a
ld [wd67e], a
ld [wd687], a
pop de
scf
ret
GengarBonusStageGengarGfxTable:
dw $60, vTilesSH tile $10, GengarBonusGengarGfx, $0000
dw $60, vTilesSH tile $16, GengarBonusGengarGfx + $60, $0000
dw $60, vTilesSH tile $1c, GengarBonusGengarGfx + $c0, $0000
dw $60, vTilesSH tile $22, GengarBonusGengarGfx + $120, $0000
dw $20, vTilesSH tile $28, GengarBonusGengarGfx + $180, $0000
dw $40, vTilesOB tile $1a, GengarBonusGengarGfx + $1a0, $0000
dw $60, vTilesOB tile $1e, GengarBonusGengarGfx + $1e0, $0000
dw $60, vTilesOB tile $24, GengarBonusGengarGfx + $240, $0000
InitMewtwoBonusStage: ; 0x1924f
ld a, [wd7c1]
and a
ret nz
xor a
ld [wStageCollisionState], a
ld a, $1
ld [wd7ac], a
ld a, [wBallType]
ld [wBallTypeBackup], a
xor a
ld [wd4c8], a
ld [wBallType], a
ld [wd49a], a
ld hl, Data_192ab
ld de, wd6b6
ld b, $c
.asm_19275
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .asm_19275
ld hl, Data_192db
ld de, wd6ac
ld b, $8
.asm_1928c
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .asm_1928c
ld bc, $0200 ; 2 minutes 0 seconds
callba StartTimer
ld a, $12
call SetSongBank
ld de, $0001
call PlaySong
ret
Data_192ab:
dr $192ab, $192db
Data_192db:
dr $192db, $192e3
StartBallMewtwoBonusStage: ; 0x192e3
ld a, $0
ld [wBallXPos], a
ld a, $a6
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $56
ld [wBallYPos + 1], a
ld a, $80
ld [wBallXVelocity], a
xor a
ld [wSCX], a
ld [wStageCollisionState], a
ld [wd6a9], a
ld a, [wd4c9]
and a
ret z
xor a
ld [wd4c9], a
ret
Func_19310: ; 0x19310
callba Func_142fc
call Func_2862
callba Func_1404a
ld a, [wd7c1]
and a
ret z
call Func_194ac
ret
CheckMewtwoBonusStageGameObjectCollisions: ; 0x19330
call Func_19414
call Func_19337
ret
Func_19337: ; 0x19337
ld hl, wd6bb
ld bc, $0601
.asm_1933d
push bc
push hl
ld a, [hli]
add $f8
ld b, a
ld a, [hld]
add $8
ld c, a
dec hl
dec hl
dec hl
ld a, [hl]
dec hl
dec hl
bit 0, [hl]
call nz, Func_1936f
pop hl
pop bc
ld a, c
jr c, .asm_19360
ld de, $0008
add hl, de
inc c
dec b
jr nz, .asm_1933d
ret
.asm_19360
ld [wTriggeredGameObjectIndex], a
ld [wd6b4], a
add $0
ld [wTriggeredGameObject], a
ld [wd6b5], a
ret
Func_1936f: ; 0x1936f
cp $b
jp z, Func_19412
ld a, [wBallXPos + 1]
sub b
cp $20
jp nc, Func_19412
ld b, a
ld a, [wBallYPos + 1]
sub c
cp $20
jp nc, Func_19412
ld c, a
ld e, a
ld d, $0
sla e
rl d
sla e
rl d
sla e
rl d
sla e
rl d
sla e
rl d
ld l, b
ld h, $0
add hl, de
sla l
rl h
sla l
rl h
ld de, Data_e4000
add hl, de
ld de, wBallXVelocity
ld a, BANK(Data_e4000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_e4000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
push bc
ld a, BANK(Data_e4000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_e4000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
bit 7, b
jr z, .asm_193ea
ld a, c
cpl
ld c, a
ld a, b
cpl
ld b, a
inc bc
.asm_193ea
pop hl
bit 7, h
jr z, .asm_193f6
ld a, l
cpl
ld l, a
ld a, h
cpl
ld h, a
inc hl
.asm_193f6
add hl, bc
sla l
rl h
ld a, h
cp $2
jr c, .asm_19410
ld a, [wd804]
and a
jr nz, .asm_19410
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
.asm_19410
scf
ret
Func_19412: ; 0x19312
and a
ret
Func_19414: ; 0x19414
ld a, [wTriggeredGameObject]
inc a
jr nz, .asm_1944f
ld a, [wd6aa]
bit 7, a
jr nz, .asm_1944f
ld a, [wd7e9]
and a
ret z
ld a, [wCurCollisionAttribute]
sub $10
ret c
cp $c
ret nc
ld a, $1
ld [wTriggeredGameObjectIndex], a
add $6
ld [wTriggeredGameObject], a
ld b, a
ld hl, wd6aa
ld [hl], $0
ld a, [wPreviousTriggeredGameObject]
cp b
jr z, .asm_1944f
ld a, [wTriggeredGameObjectIndex]
ld [hli], a
ld a, [wTriggeredGameObject]
ld [hl], a
scf
ret
.asm_1944f
and a
ret
Func_19451: ; 0x19451
call Func_19531
call Func_19701
call Func_1948b
callba Func_107f8
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $1
ld [wd7be], a
call Func_2862
callba Func_86d2
ld a, [wd6b1]
cp $8
ret nc
ld a, $1
ld [wd6b3], a
ret
Func_1948b: ; 0x1948b
ld a, [wd6a9]
and a
ret nz
ld a, [wd4b4]
cp $8a
ret nc
ld a, $1
ld [wStageCollisionState], a
ld [wd6a9], a
callba LoadStageCollisionAttributes
call Func_194ac
ret
Func_194ac: ; 0x194ac
ld a, [wStageCollisionState]
sla a
ld c, a
ld b, $0
ld hl, Data_194c9
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_194bf
ld hl, Data_194fd
.asm_194bf
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_194c9)
call Func_10aa
ret
Data_194c9:
dw Data_194cd
dw Data_194d0
Data_194cd: ; 0x194cd
db 1
dw Data_194d3
Data_194d0: ; 0x194d0
db 1
dw Data_194e8
Data_194d3: ; 0x194d3
dw LoadTileLists
db $05 ; total number of tiles to load
db $01 ; number of tiles
dw vBGMap + $113
db $45
db $01 ; number of tiles
dw vBGMap + $133
db $80
db $02 ; number of tiles
dw vBGMap + $152
db $80, $09
db $01 ; number of tiles
dw vBGMap + $172
db $12
db $00 ; terminator
Data_194e8: ; 0x194e8
dw LoadTileLists
db $05 ; total number of tiles to load
db $01 ; number of tiles
dw vBGMap + $113
db $46
db $01 ; number of tiles
dw vBGMap + $133
db $47
db $02 ; number of tiles
dw vBGMap + $152
db $48, $49
db $01 ; number of tiles
dw vBGMap + $172
db $4A
db $00 ; terminator
Data_194fd:
dw Data_19501
dw Data_19504
Data_19501: ; 0x19501
db 1
dw Data_19507
Data_19504: ; 0x19504
db 1
dw Data_1951c
Data_19507: ; 0x19507
dw LoadTileLists
db $05 ; total number of tiles to load
db $01 ; number of tiles
dw vBGMap + $113
db $45
db $01 ; number of tiles
dw vBGMap + $133
db $80
db $02 ; number of tiles
dw vBGMap + $152
db $80, $09
db $01 ; number of tiles
dw vBGMap + $172
db $12
db $00 ; terminator
Data_1951c: ; 0x1951c
dw LoadTileLists
db $05 ; total number of tiles to load
db $01 ; number of tiles
dw vBGMap + $113
db $46
db $01 ; number of tiles
dw vBGMap + $133
db $47
db $02 ; number of tiles
dw vBGMap + $152
db $48, $49
db $01 ; number of tiles
dw vBGMap + $172
db $4A
db $00 ; terminator
Func_19531: ; 0x19531
ld a, [wd6aa]
and a
jr z, .asm_195a2
xor a
ld [wd6aa], a
ld a, [wd7be]
and a
jr nz, .asm_195a2
ld a, [wd6af]
cp $2
jr nc, .asm_195a2
ld bc, FiveMillionPoints
callba AddBigBCD6FromQueue
ld a, [wd6b0]
inc a
cp $3
jr nz, .asm_19565
ld a, [wd6b1]
inc a
ld [wd6b1], a
xor a
.asm_19565
ld [wd6b0], a
call Func_1988e
ld a, [wd6b1]
cp $8
jr z, .asm_19582
ld a, $2
ld de, wd6ae
call Func_19679
lb de, $00, $39
call PlaySoundEffect
jr .asm_195a2
.asm_19582
ld a, $3
ld de, wd6ae
call Func_19679
ld a, $1
ld [wd7be], a
call Func_2862
callba Func_86d2
ld de, $0000
call PlaySong
.asm_195a2
call Func_195ac
ld de, wd6af
call Func_195f5
ret
Func_195ac: ; 0x195ac
ld a, [wd6af]
and a
ret nz
ld hl, wd6bd
ld de, $0008
ld b, $6
.asm_195b9
ld a, [hl]
cp $2b
jr nz, .asm_195ce
dec hl
dec hl
dec hl
ld a, [hl]
cp $2
ret nz
ld a, $1
ld de, wd6ae
call Func_19679
ret
.asm_195ce
add hl, de
dec b
jr nz, .asm_195b9
ret
Func_195d3: ; 0x195d3
ld hl, wd6bd
ld de, $0008
ld b, $6
.asm_195db
ld a, [hl]
cp $18
jr nz, .asm_195f0
dec hl
dec hl
dec hl
ld a, [hl]
cp $2
ret nz
ld d, h
ld e, l
dec de
ld a, $1
call Func_19876
ret
.asm_195f0
add hl, de
dec b
jr nz, .asm_195db
ret
Func_195f5: ; 0x195f5
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_19691
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
dec de
call UpdateAnimation
pop de
ret nc
ld a, [de]
rst JumpTable ; calls JumpToFuncInTable
CallTable_1960d: ; 0x1960d
dw Func_19615
dw Func_1961e
dw Func_1962f
dw Func_19638
Func_19615: ; 0x19615
dec de
ld a, [de]
cp $4
ret nz
xor a
jp Func_19679
Func_1961e: ; 0x1961e
dec de
ld a, [de]
cp $c
jr nz, .asm_19628
call Func_195d3
ret
.asm_19628
cp $d
ret nz
xor a
jp Func_19679
Func_1962f: ; 0x1962f
dec de
ld a, [de]
cp $1
ret nz
xor a
jp Func_19679
Func_19638: ; 0x19638
dec de
ld a, [de]
cp $1
jr nz, .asm_19645
lb de, $00, $40
call PlaySoundEffect
ret
.asm_19645
cp $20
ret nz
ld a, $1
ld [wd6b3], a
ld a, [wd499]
ld [wd498], a
ld a, [wNumMewtwoBonusCompletions]
cp $2 ; only counts up to 2. Gets reset to 0 when Mew is encountered in Catch 'Em Mode.
jr z, .asm_1965e
inc a
ld [wNumMewtwoBonusCompletions], a
.asm_1965e
ld a, $1
ld [wd49a], a
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
.asm_1966b
ld de, MewtwoStageClearedText
call LoadTextHeader
lb de, $4b, $2a
call PlaySoundEffect
ret
Func_19679: ; 0x19679
push af
sla a
ld c, a
ld b, $0
ld hl, Data_19691
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
call CopyHLToDE
pop de
inc de
pop af
ld [de], a
ret
Data_19691:
dr $19691, $19701
Func_19701: ; 0x19701
ld a, [wd6b4]
and a
jr z, .asm_19742
xor a
ld [wd6b4], a
ld a, [wd7be]
and a
jr nz, .asm_19742
ld a, [wd6b5]
sub $1
sla a
sla a
sla a
ld c, a
ld b, $0
ld hl, wd6ba
add hl, bc
ld d, h
ld e, l
ld a, [de]
and a
jr nz, .asm_19742
dec de
ld a, $2
call Func_19876
ld bc, OneHundredThousandPoints
callba AddBigBCD6FromQueue
lb de, $00, $38
call PlaySoundEffect
.asm_19742
ld de, wd6bd
call Func_1978b
ld de, wd6c5
call Func_1978b
ld de, wd6cd
call Func_1978b
ld de, wd6d5
call Func_1978b
ld de, wd6dd
call Func_1978b
ld de, wd6e5
call Func_1978b
ld de, wd6b6
call Func_19833
ld de, wd6be
call Func_19833
ld de, wd6c6
call Func_19833
ld de, wd6ce
call Func_19833
ld de, wd6d6
call Func_19833
ld de, wd6de
call Func_19833
ret
Func_1978b: ; 0x1978b
ld a, [de]
ld c, a
ld b, $0
sla c
inc a
cp $48
jr c, .asm_19797
xor a
.asm_19797
ld [de], a
ld hl, Data_197a3 + 1
add hl, bc
dec de
ld a, [hld]
ld [de], a
dec de
ld a, [hl]
ld [de], a
ret
Data_197a3:
dr $197a3, $19833
Func_19833: ; 0x19833
ld a, [de]
and a
ret z
inc de
inc de
inc de
inc de
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_19916
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
dec de
call UpdateAnimation
pop de
ret nc
ld a, [de]
rst JumpTable ; calls JumpToFuncInTable
CallTable_19852: ; 0x19852
dw Func_1985a
dw Func_19863
dw Func_1986c
dw Func_1986d
Func_1985a: ; 0x1985a
dec de
ld a, [de]
cp $6
ret nz
xor a
jp Func_19876
Func_19863: ; 0x19863
dec de
ld a, [de]
cp $7
ret nz
xor a
jp Func_19876
Func_1986c: ; 0x1986c
ret
Func_1986d: ; 0x1986d
dec de
ld a, [de]
cp $1
ret nz
xor a
jp Func_19876
Func_19876: ; 0x19876
push af
sla a
ld c, a
ld b, $0
ld hl, Data_19916
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
call CopyHLToDE
pop de
inc de
pop af
ld [de], a
ret
Func_1988e: ; 0x1988e
ld a, [wd6b1]
sla a
sla a
sla a
ld c, a
ld b, $0
ld hl, Data_198ce
add hl, bc
ld de, wd6bd
ld b, $6
.asm_198a3
ld a, [hli]
push bc
push de
push hl
bit 7, a
jr nz, .asm_198b7
ld [de], a
dec de
dec de
dec de
dec de
ld a, $3
call Func_19876
jr .asm_198c0
.asm_198b7
dec de
dec de
dec de
dec de
dec de
dec de
dec de
xor a
ld [de], a
.asm_198c0
pop hl
pop de
pop bc
ld a, e
add $8
ld e, a
jr nc, .asm_198ca
inc d
.asm_198ca
dec b
jr nz, .asm_198a3
ret
Data_198ce:
dr $198ce, $19916
Data_19916:
dr $19916, $1994e
Func_1994e: ; 0x1994e
ld bc, $7f65
callba DrawTimer
call Func_1999d
callba DrawFlippers
callba DrawPinball
call Func_19976
ret
Func_19976: ; 0x19976
ld a, $40
ld hl, hSCX
sub [hl]
ld b, a
ld a, $0
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd6ad]
ld e, a
ld d, $0
ld hl, OAMIds_19995
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_19995:
db $0F, $10, $11, $12, $17, $18, $19
db $FF
Func_1999d: ; 0x1999d
ld de, wd6b6
call Func_199be
ld de, wd6be
call Func_199be
ld de, wd6c6
call Func_199be
ld de, wd6ce
call Func_199be
ld de, wd6d6
call Func_199be
ld de, wd6de
; fall through
Func_199be: ; 0x199be
ld a, [de]
and a
ret z
inc de
inc de
inc de
inc de
inc de
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, OAMIds_199e6
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_199e6:
db $13, $14, $15, $16, $1A, $1B, $1C, $1D, $1E, $1F, $20
db $FF
InitDiglettBonusStage: ; 0x199f2
ld a, [wd7c1]
and a
ret nz
xor a
ld [wStageCollisionState], a
ld a, $1
ld [wd7ac], a
ld a, [wBallType]
ld [wBallTypeBackup], a
xor a
ld [wd4c8], a
ld [wBallType], a
ld [wd49a], a
; initialize all digletts to hiding
ld a, $1 ; hiding diglett state
ld hl, wDiglettStates
ld b, NUM_DIGLETTS
.initDiglettsLoop
ld [hli], a
dec b
jr nz, .initDiglettsLoop
ld a, $1
ld [wDugtrioAnimationFrameCounter], a
ld a, $c
ld [wDugtrioAnimationFrame], a
xor a
ld [wDugtrioAnimationFrameIndex], a
ld [wDugrioState], a
ld a, $11
call SetSongBank
ld de, $0001
call PlaySong
ret
StartBallDiglettBonusStage: ; 0x19a38
ld a, $0
ld [wBallXPos], a
ld a, $a6
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $56
ld [wBallYPos + 1], a
ld a, $40
ld [wBallXVelocity], a
xor a
ld [wSCX], a
ld [wStageCollisionState], a
ld [wd73a], a
ld hl, wDiglettStates
ld b, NUM_DIGLETTS
.asm_19a60
ld a, [hl]
and a
jr z, .asm_19a67
ld a, $1 ; hiding diglett state
ld [hl], a
.asm_19a67
inc hl
dec b
jr nz, .asm_19a60
xor a
ld [wCurrentDiglett], a
ld [wDiglettsInitializedFlag], a
ld [wd765], a
ret
Func_19a76: ; 0x19a76
callba Func_142fc
call Func_2862
ld a, [wd7c1]
and a
ret z
call Func_19bbd
call Func_19a96
ld a, [wDugrioState]
and a
call nz, Func_1ac2c
ret
Func_19a96: ; 0x19a96
ld hl, wDiglettStates
ld bc, NUM_DIGLETTS << 8
.asm_19a9c
ld a, [hli]
and a
jr z, .asm_19aae
push bc
push hl
push af
call Func_19da8
pop af
cp $6
call c, Func_19dcd
pop hl
pop bc
.asm_19aae
inc c
dec b
jr nz, .asm_19a9c
ret
CheckDiglettBonusStageGameObjectCollisions: ; 0x19ab3
call CheckDiglettBonusStageDiglettHeadsCollision
call CheckDiglettBonusStageDugtrioCollision
ret
CheckDiglettBonusStageDiglettHeadsCollision: ; 0x19aba
ld a, [wTriggeredGameObject]
inc a
jr nz, .asm_19b16
ld a, [wd73b]
bit 7, a
jr nz, .asm_19b16
ld a, [wd7e9]
and a
ret z ; is a collision happening?
ld a, [wCurCollisionAttribute]
sub $19
ret c ; is the pinball colliding with a Diglett head?
cp $33
ret nc
ld c, a
ld b, $0
ld hl, Data_19b18
add hl, bc
ld a, [hl]
cp $a
jr nc, .asm_19aed
ld a, [wBallXPos + 1]
cp $48
ld a, $11
jr nc, .asm_19af7
xor a
jr .asm_19af7
.asm_19aed
ld a, [wBallXPos + 1]
cp $68
ld a, $11
jr nc, .asm_19af7
xor a
.asm_19af7
add [hl]
ld [wTriggeredGameObjectIndex], a
add $0
ld [wTriggeredGameObject], a
ld b, a
ld hl, wd73b
ld [hl], $0
ld a, [wPreviousTriggeredGameObject]
cp b
jr z, .asm_19b16
ld a, [wTriggeredGameObjectIndex]
ld [hli], a
ld a, [wTriggeredGameObject]
ld [hl], a
scf
ret
.asm_19b16
and a
ret
Data_19b18:
dr $19b18, $19b4b
CheckDiglettBonusStageDugtrioCollision: ; 0x19b4b
ld a, [wTriggeredGameObject]
inc a
jr nz, .asm_19b86
ld a, [wd75f]
bit 7, a
jr nz, .asm_19b86
ld a, [wd7e9]
and a
ret z
ld a, [wCurCollisionAttribute]
sub $14
ret c
cp $5
ret nc
ld a, $1
ld [wTriggeredGameObjectIndex], a
add $1f
ld [wTriggeredGameObject], a
ld b, a
ld hl, wd75f
ld [hl], $0
ld a, [wPreviousTriggeredGameObject]
cp b
jr z, .asm_19b86
ld a, [wTriggeredGameObjectIndex]
ld [hli], a
ld a, [wTriggeredGameObject]
ld [hl], a
scf
ret
.asm_19b86
and a
ret
Func_19b88: ; 0x19b88
call Func_19c52
call Func_1aad4
call Func_19b92
ret
Func_19b92: ; 0x19b92
ld a, [wd73a]
and a
ret nz
ld a, [wd4b4]
cp $8a
ret nc
ld a, $1
ld [wStageCollisionState], a
ld [wd73a], a
xor a
ld [wc853], a
ld [wc873], a
ld [wc893], a
ld a, $5
ld [wc872], a
ld a, $7
ld [wc892], a
call Func_19bbd
ret
Func_19bbd: ; 0x19bbd
ld a, [wStageCollisionState]
sla a
ld c, a
ld b, $0
ld hl, Data_19bda
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_19bd0
ld hl, Data_19c16
.asm_19bd0
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_19bda)
call Func_10aa
ret
Data_19bda:
dr $19bda, $19c16
Data_19c16:
dr $19c16, $19c52
Func_19c52: ; 0x19c52
ld a, [wd73b]
and a
jr z, .asm_19cc8
xor a
ld [wd73b], a
ld bc, OneHundredThousandPoints
callba AddBigBCD6FromQueue
lb de, $00, $35
call PlaySoundEffect
ld hl, $0100
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld a, [wd73c]
sub $1
ld c, a
ld b, $0
ld hl, wDiglettStates
add hl, bc
ld a, [hl]
cp $6
jr nc, .asm_19cc8
ld a, $8
ld [hl], a
call Func_19da8
call Func_19df0
ld hl, wDiglettStates
ld bc, NUM_DIGLETTS << 8
xor a
.asm_19ca0
ld a, [hli]
and a
jr z, .asm_19ca8
cp $6
jr c, .asm_19ca9
.asm_19ca8
inc c
.asm_19ca9
dec b
jr nz, .asm_19ca0
ld a, c
cp NUM_DIGLETTS
jr nz, .asm_19cc8
ld hl, Data_1ac75
ld de, wDugtrioAnimationFrameCounter
call CopyHLToDE
ld a, $1
ld [wDugrioState], a
call Func_1ac2c
ld de, $0002
call PlaySong
.asm_19cc8
call Func_19cdd
ld a, [wd765]
and a
ret nz
ld a, $1
ld [wd765], a
ld a, [wDugrioState]
and a
call nz, Func_1ac2c
ret
Func_19cdd: ; 0x19cdd
ld a, [wDiglettsInitializedFlag]
and a
jr nz, .alreadyInitializedDigletts
ld a, [wDiglettInitDelayCounter]
add DIGLETT_INITIALIZE_DELAY
ld [wDiglettInitDelayCounter], a
ret nc
ld hl, DiglettInitializeOrder
ld a, [wCurrentDiglett]
ld c, a
ld b, $0
add hl, bc
ld b, $1
.asm_19cf8
push bc
ld a, [hli]
bit 7, a
jr z, .asm_19d02
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [hli]
.asm_19d02
push hl
ld c, a
ld b, $0
ld hl, wDiglettStates
add hl, bc
ld a, [hl]
and a
jr z, .asm_19d29
dec a
jr nz, .asm_19d21
; pick a random starting state for the diglett that isn't the "hiding" state
call GenRandom
and $3
add $2
ld [hl], a
call Func_19da8
call Func_19dcd
jr .asm_19d29
.asm_19d21
and $3
add $2
ld [hl], a
call Func_19da8
.asm_19d29
pop hl
pop bc
dec b
jr nz, .asm_19cf8
ld hl, wDiglettsInitializedFlag
ld a, [wCurrentDiglett]
add $1
cp NUM_DIGLETTS
jr c, .notDoneInitializingDigletts
set 0, [hl]
sub NUM_DIGLETTS
.notDoneInitializingDigletts
ld [wCurrentDiglett], a
ret
.alreadyInitializedDigletts
ld hl, DiglettUpdateOrder
ld a, [wCurrentDiglett]
ld c, a
ld b, $0
add hl, bc
ld b, $4 ; update 4 digletts
.updateDiglettLoop
push bc
ld a, [hli]
bit 7, a
jr z, .asm_19d58
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [hli]
.asm_19d58
push hl
ld c, a
ld b, $0
ld hl, wDiglettStates
add hl, bc
ld a, [hl]
and a
jr z, .asm_19d8f
dec a
jr nz, .asm_19d77
call GenRandom
and $3
add $2
ld [hl], a
call Func_19da8
call Func_19dcd
jr .asm_19d8f
.asm_19d77
cp $5
jr c, .incrementDiglettState
ld [hl], a
jr nz, .asm_19d8f
xor a
ld [hl], a
ld a, $1
call Func_19da8
jr .asm_19d8f
.incrementDiglettState
and $3
add $2
ld [hl], a
call Func_19da8
.asm_19d8f
pop hl
pop bc
dec b
jr nz, .updateDiglettLoop
ld hl, wDiglettsInitializedFlag
ld a, [wCurrentDiglett]
add $4
cp NUM_DIGLETTS
jr c, .asm_19da4
set 0, [hl]
sub NUM_DIGLETTS
.asm_19da4
ld [wCurrentDiglett], a
ret
Func_19da8: ; 0x19da8
; input: a = diglett state
; c = diglett index
cp $6
jr c, .asm_19dae
ld a, $6 ; "getting hit" state
.asm_19dae
push bc
ld b, a
sla c
ld a, c
sla c
add c
add b ; a = (index * 6) + state
dec a
ld c, a
ld b, $0 ; bc = (index * 6) + state - 1
sla c
rl b ; bc = 2 * ((index * 6) + state - 1)
ld hl, DiglettTileDataPointers
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(DiglettTileDataPointers)
call Func_10aa
pop bc
ret
Func_19dcd: ; 0x19dcd
sla c
ld a, c
sla c
add c
ld c, a
ld b, $0
ld hl, Data_19e13
add hl, bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
ld a, e
add $1f
ld e, a
jr nc, .asm_19dea
inc d
.asm_19dea
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
ret
Func_19df0: ; 0x19df0
sla c
ld a, c
sla c
add c
ld c, a
ld b, $0
ld hl, Data_19e13
add hl, bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, $2
ld [de], a
inc de
ld [de], a
ld a, e
add $1f
ld e, a
jr nc, .asm_19e0d
inc d
.asm_19e0d
ld a, $2
ld [de], a
inc de
ld [de], a
ret
Data_19e13:
dr $19e13, $19ed1
INCLUDE "data/diglett_stage/diglett_stage_animation_data.asm"
Func_1aad4: ; 0x1aad4
ld a, [wd75f]
and a
jr z, .asm_1ab2c
xor a
ld [wd75f], a
ld a, [wDugrioState]
bit 0, a
jr z, .asm_1ab2c
cp $7
jr z, .asm_1ab2c
inc a
ld [wDugrioState], a
sla a
ld c, a
ld b, $0
ld hl, Data_1ac62
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wDugtrioAnimationFrameCounter
call CopyHLToDE
ld bc, FiveMillionPoints
callba AddBigBCD6FromQueue
lb de, $00, $36
call PlaySoundEffect
ld a, $33
ld [wd803], a
ld a, $8
ld [wd804], a
ld hl, $0200
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
.asm_1ab2c
call Func_1ab30
ret
Func_1ab30: ; 0x1ab30
ld a, [wDugrioState]
sla a
ld c, a
ld b, $0
ld hl, Data_1ac62
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wDugtrioAnimationFrameCounter
call UpdateAnimation
ret nc
ld a, [wDugrioState]
and a
ret z
cp $1
jr nz, .asm_1ab64
ld a, [wDugtrioAnimationFrameIndex]
cp $3
ret nz
ld hl, Data_1ac75
ld de, wDugtrioAnimationFrameCounter
call CopyHLToDE
ld a, $1
ld [wDugrioState], a
ret
.asm_1ab64
cp $2
jr nz, .asm_1ab7d
ld a, [wDugtrioAnimationFrameIndex]
cp $1
ret nz
ld hl, Data_1ac7f
ld de, wDugtrioAnimationFrameCounter
call CopyHLToDE
ld a, $3
ld [wDugrioState], a
ret
.asm_1ab7d
cp $3
jr nz, .asm_1ab96
ld a, [wDugtrioAnimationFrameIndex]
cp $3
ret nz
ld hl, Data_1ac7f
ld de, wDugtrioAnimationFrameCounter
call CopyHLToDE
ld a, $3
ld [wDugrioState], a
ret
.asm_1ab96
cp $4
jr nz, .asm_1abaf
ld a, [wDugtrioAnimationFrameIndex]
cp $1
ret nz
ld hl, Data_1ac89
ld de, wDugtrioAnimationFrameCounter
call CopyHLToDE
ld a, $5
ld [wDugrioState], a
ret
.asm_1abaf
cp $5
jr nz, .asm_1abc8
ld a, [wDugtrioAnimationFrameIndex]
cp $3
ret nz
ld hl, Data_1ac89
ld de, wDugtrioAnimationFrameCounter
call CopyHLToDE
ld a, $5
ld [wDugrioState], a
ret
.asm_1abc8
cp $6
jr nz, .asm_1abe1
ld a, [wDugtrioAnimationFrameIndex]
cp $1
ret nz
ld hl, Data_1ac93
ld de, wDugtrioAnimationFrameCounter
call CopyHLToDE
ld a, $7
ld [wDugrioState], a
ret
.asm_1abe1
cp $7
ret nz
ld a, [wDugtrioAnimationFrameIndex]
cp $1
jr nz, .asm_1abf2
ld de, $0000
call PlaySong
ret
.asm_1abf2
cp $2
ret nz
ld hl, Data_1ac72
ld de, wDugtrioAnimationFrameCounter
call CopyHLToDE
xor a
ld [wDugrioState], a
ld [wd498], a
ld a, $1
ld [wd49a], a
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, DiglettStageClearedText
call LoadTextHeader
lb de, $4b, $2a
call PlaySoundEffect
ld a, $1
ld [wd7be], a
call Func_2862
ld hl, Data_1ac56
jr asm_1ac2f
Func_1ac2c: ; 0x1ac2c
ld hl, Data_1ac4a
asm_1ac2f:
ld de, wc768
ld b, $3
.asm_1ac34
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
ld a, e
add $1d
ld e, a
jr nc, .asm_1ac46
inc d
.asm_1ac46
dec b
jr nz, .asm_1ac34
ret
Data_1ac4a:
dr $1ac4a, $1ac56
Data_1ac56:
dr $1ac56, $1ac62
Data_1ac62:
dr $1ac62, $1ac72
Data_1ac72:
dr $1ac72, $1ac75
Data_1ac75:
dr $1ac75, $1ac7f
Data_1ac7f:
dr $1ac7f, $1ac89
Data_1ac89:
dr $1ac89, $1ac93
Data_1ac93:
dr $1ac93, $1ac98
Func_1ac98: ; 0x1ac98
callba DrawFlippers
callba DrawPinball
call Func_1acb0
ret
Func_1acb0: ; 0x1acb0
ld a, $40
ld hl, hSCX
sub [hl]
ld b, a
ld a, $0
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wDugtrioAnimationFrame]
ld e, a
ld d, $0
ld hl, OAMIds_1accf
add hl, de
ld a, [hl]
bit 7, a
call z, LoadOAMData2
ret
OAMIds_1accf:
db $46, $47, $48, $49, $4A, $4B, $4C, $4D, $4E, $4F, $50, $51, $52, $53
db $FF
SECTION "bank7", ROMX, BANK[$7]
InitBlueField: ; 0x1c000
ld a, [wd7c1]
and a
ret nz
xor a
ld hl, wScore + $5
ld [hld], a
ld [hld], a
ld [hld], a
ld [hld], a
ld [hld], a
ld [hl], a
ld [wNumPartyMons], a
ld [wd49b], a
ld [wd4c9], a
ld [wBallType], a
ld [wd4c8], a
ld hl, wd624
ld [hli], a
ld [hli], a
ld [hli], a
ld [wd7ac], a
ld [wd7be], a
ld [wCurrentMap], a ; PALLET_TOWN
ld a, $1
ld [wd49d], a
ld [wd482], a
ld a, $2
ld [wRightAlleyCount], a
ld a, $3
ld [wd49e], a
ld [wd610], a
ld a, $2
ld [wd498], a
ld [wd499], a
ld a, $80
ld [wIndicatorStates], a
ld [wIndicatorStates + 3], a
ld a, $82
ld [wIndicatorStates + 1], a
xor a
ld [wd648], a
ld [wd649], a
ld [wd64a], a
ld [wd643], a
ld [wd644], a
ld [wd645], a
ld [wd646], a
callba Start20SecondSaverTimer
callba Func_1d65f
ld a, $10
call SetSongBank
ld de, $0001
call PlaySong
ret
StartBallBlueField: ; 0x1c08d
ld a, [wd496]
and a
jp nz, StartBallAfterBonusStageBlueField
ld a, $0
ld [wBallXPos], a
ld a, $a7
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $98
ld [wBallYPos + 1], a
xor a
ld [wd549], a
ld [wd580], a
call Func_1c7c7
ld a, [wd4c9]
and a
ret z
xor a
ld [wd4c9], a
xor a
ld [wd50b], a
ld [wd50c], a
ld [wd51d], a
ld [wd51e], a
ld [wd517], a
ld hl, wd50f
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [wLeftMapMoveCounter], a
ld [wRightMapMoveCounter], a
ld hl, wd5f9
ld [hli], a
ld [hli], a
ld [hli], a
ld [wBallType], a
ld [wd611], a
ld [wd612], a
ld [wd628], a
ld [wd629], a
ld [wd62a], a
ld [wd62b], a
ld [wd62c], a
ld [wd63a], a
ld [wd63b], a
ld [wd63d], a
ld [wd63c], a
ld [wd62d], a
ld [wd62e], a
ld [wd613], a
inc a
ld [wd482], a
ld [wd4ef], a
ld [wd4f1], a
ld a, $3
ld [wd610], a
call Func_1d65f
ld a, $10
call SetSongBank
ld de, $0001
call PlaySong
ret
StartBallAfterBonusStageBlueField: ; 0x1c129
ld a, $0
ld [wBallXPos], a
ld a, $50
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $16
ld [wBallYPos + 1], a
xor a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
ld [wd496], a
ld [wSCX], a
ld [wd7be], a
ld a, [wBallTypeBackup]
ld [wBallType], a
ld a, $10
call SetSongBank
ld de, $0001
call PlaySong
ret
Func_1c165: ; 0x1c165
call asm_1e475
call Func_1cb43
call Func_1c3ee
call Func_1e8f6
callba Func_142fc
ld a, $1
ld [wd640], a
call Func_1f18a
callba Func_1404a
call Func_1c203
ret
Func_1c191: ; 0x1c191
call Func_1c1db
call Func_1c4b6
call Func_1c2cb
call Func_1e627
call Func_1c43c
call Func_1c305
call Func_1c3ee
callba Func_14746
callba Func_14707
call Func_1c235
call Func_1c21e
call Func_1e8f6
callba Func_142fc
callba Func_1404a
call Func_1c203
ret
Func_1c1db: ; 0x1c1db
ld a, [wd641]
cp $0
ret z
ld a, $1
ld [wd640], a
ld a, $0
ld [wd641], a
ld a, [wBlueStageForceFieldDirection]
cp $2 ; down direction
ret nz
ld a, $0
ld [wBlueStageForceFieldDirection], a
ld a, $1 ; right direction
ld [wd64a], a
xor a
ld [wd649], a
ld [wd648], a
ret
Func_1c203: ; 0x1c203
ld a, $ff
ld [wd4d7], a
ld [wd4db], a
ld a, [wd4b4]
ld [wd4c5], a
ld a, [wd4b6]
ld [wd4c6], a
ld a, [wBallRotation]
ld [wd4c7], a
ret
Func_1c21e: ; 0x1c21e
ld a, $ff
ld [wd60e], a
ld [wd60f], a
ld a, [wd60c]
call Func_1d5f2
ld a, [wd60d]
add $14
call Func_1d5f2
ret
Func_1c235: ; 0x1c235
ld a, [wLeftMapMoveDiglettAnimationCounter]
and a
jr z, .asm_1c249
ld a, $54
ld [wc7e3], a
ld a, $55
ld [wc803], a
ld a, $1
jr .asm_1c24a
.asm_1c249
xor a
.asm_1c24a
call Func_1de4b
ld a, [wLeftMapMoveCounter]
call Func_1de6f
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1c267
ld a, [wLeftMapMoveCounter]
cp $0
jr z, .asm_1c264
ld b, $7
add b
jr .asm_1c269
.asm_1c264
xor a
jr .asm_1c269
.asm_1c267
ld a, $8
.asm_1c269
call Func_1de6f
ld a, [wRightMapMoveDiglettFrame]
and a
jr z, .asm_1c295
ld a, $52
ld [wc7f0], a
ld a, $53
ld [wc810], a
ld a, [wd644]
and a
jr z, .asm_1c28a
ld a, [wd55a]
and a
jr nz, .asm_1c2bd
jr .asm_1c291
.asm_1c28a
ld a, [wRightMapMoveCounter]
add $3
jr .asm_1c297
.asm_1c291
ld a, $3
jr .asm_1c297
.asm_1c295
ld a, $2
.asm_1c297
call Func_1de4b
ld a, [wRightMapMoveCounter]
add $4
call Func_1de6f
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1c2b7
ld a, [wRightMapMoveCounter]
cp $0
jr z, .asm_1c2b3
ld b, $a
add b
jr .asm_1c2b9
.asm_1c2b3
ld a, $4
jr .asm_1c2b9
.asm_1c2b7
ld a, $9
.asm_1c2b9
call Func_1de6f
ret
.asm_1c2bd
ld a, $6
call Func_1de4b
ld a, [wRightMapMoveCounter]
add $4
call Func_1de6f
ret
Func_1c2cb: ; 0x1c2cb
ld a, [wCurrentStage]
bit 0, a
ret z
ld bc, $0000
.asm_1c2d4
push bc
ld hl, wIndicatorStates
add hl, bc
ld a, [hl]
res 7, a
call Func_1eb41
pop bc
inc c
ld a, c
cp $2
jr nz, .asm_1c2d4
ld bc, $0002
.asm_1c2e9
push bc
ld hl, wIndicatorStates
add hl, bc
ld a, [hl]
push af
ld hl, wd648
add hl, bc
dec hl
dec hl
ld a, [hl]
ld d, a
pop af
add d
call Func_1eb41
pop bc
inc c
ld a, c
cp $5
jr nz, .asm_1c2e9
ret
Func_1c305: ; 0x1c305
ld a, [wInSpecialMode]
and a
ret z
ld a, [wSpecialMode]
cp $2
ret z
ld a, [wd5c6]
and a
jr nz, .asm_1c31f
ld a, [wCapturingMon]
and a
jr nz, .asm_1c31f
jp Func_1c3ca
.asm_1c31f
callba Func_1c3ac
callba Func_10362
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_10301
ld a, [wCapturingMon]
and a
ret z
ld a, BANK(PikachuSaverGfx)
ld hl, PikachuSaverGfx + $c0
ld de, vTilesOB tile $7e
ld bc, $0020
call FarCopyData
ld a, BANK(StageSharedPikaBoltGfx)
ld hl, GFX_a8800
ld de, vTilesSH tile $10
ld bc, $0180
call FarCopyData
ld a, [wBallType]
cp GREAT_BALL
jr nc, .notPokeball
ld a, Bank(PinballPokeballShakeGfx)
ld hl, PinballPokeballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call FarCopyData
ret
.notPokeball
cp ULTRA_BALL
jr nc, .notGreatball
ld a, Bank(PinballGreatballShakeGfx)
ld hl, PinballGreatballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call FarCopyData
ret
.notGreatball
cp MASTER_BALL
jr nc, .notUltraBall
ld a, Bank(PinballUltraballShakeGfx)
ld hl, PinballUltraballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call FarCopyData
ret
.notUltraBall
ld a, Bank(PinballMasterballShakeGfx)
ld hl, PinballMasterballShakeGfx
ld de, vTilesOB tile $38
ld bc, $0040
call FarCopyData
ret
Func_1c3ac: ; 0x1c3ac
ld a, $80
hlCoord 7, 4, vBGMap
call Func_1c3c3
hlCoord 7, 5, vBGMap
call Func_1c3c3
hlCoord 7, 6, vBGMap
call Func_1c3c3
hlCoord 7, 7, vBGMap
; fall through
Func_1c3c3: ; 0x1c3c3
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ret
Func_1c3ca: ; 0x1c3ca
ld hl, wd586
ld b, $18
.asm_1c3cf
ld a, [hli]
xor $1
ld [hli], a
dec b
jr nz, .asm_1c3cf
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_102bc
ret
Func_1c3ee: ; 0x1c3ee
ld a, [wInSpecialMode]
and a
ret z
ld a, [wSpecialMode]
cp $1
ret nz
ld a, [wd554]
cp $3
ret z
ld a, [wCurrentStage]
bit 0, a
jr nz, .asm_1c416
ld a, BANK(Data_dbe80)
ld hl, Data_dbe80
ld de, vTilesOB tile $60
ld bc, $00e0
call FarCopyData
jr .asm_1c424
.asm_1c416
ld a, BANK(Data_dbe80)
ld hl, Data_dbe80
ld de, vTilesOB tile $20
ld bc, $00e0
call FarCopyData
.asm_1c424
ld a, [wd551]
and a
ret z
ld a, [hGameBoyColorFlag]
and a
ret z
ld a, BANK(Data_dd188)
ld hl, Data_dd188
ld de, $0070
ld bc, $0010
call Func_6fd
ret
Func_1c43c: ; 0x1c43c
ld a, [wInSpecialMode]
and a
jr z, .asm_1c458
ld a, [wSpecialMode]
and a
jr nz, .asm_1c450
ld a, [wNumMonHits]
and a
call nz, Func_1c46d
ret
.asm_1c450
cp $1
jr nz, .asm_1c458
call Func_1c47d
ret
.asm_1c458
ld a, [wd624]
call Func_1f265
ld a, BANK(Data_d8f60)
ld hl, Data_d8f60
ld de, vTilesSH tile $2e
ld bc, $0020
call FarCopyData
ret
Func_1c46d: ; 0x1c46d
push af
callba Func_10611
pop af
dec a
jr nz, Func_1c46d
ret
Func_1c47d: ; 0x1c47d
ld de, $0000
ld a, [wd554]
and a
ret z
ld b, a
.asm_1c486
ld a, [wCurrentEvolutionType]
call Func_1c491
inc de
dec b
jr nz, .asm_1c486
ret
Func_1c491: ; 0x1c491
push bc
push de
dec a
ld c, a
ld b, $0
swap c
sla c
ld hl, Data_d8e80
add hl, bc
swap e
sla e
push hl
ld hl, vTilesSH tile $2e
add hl, de
ld d, h
ld e, l
pop hl
ld bc, $0020
ld a, BANK(Data_d8e80)
call FarCopyData
pop de
pop bc
ret
Func_1c4b6: ; 0x1c4b6
ld a, [wInSpecialMode]
and a
jr nz, .asm_1c4f0
ld a, [wd609]
and a
jr z, .asm_1c4d2
ld a, [wd498]
add $15
callba Func_30256
ret
.asm_1c4d2
ld a, [wd608]
and a
jr z, .asm_1c4e5
ld a, $1a
callba Func_30256
ret
.asm_1c4e5
callba Func_30253
ret
.asm_1c4f0
ld a, [wSpecialMode]
cp $2
ret nz
ld a, [wd54d]
cp $3
jr nz, .asm_1c508
callba Func_30253
ret
.asm_1c508
ld a, [wd604]
and a
ld a, $14
jr nz, .asm_1c515
ld a, [wd55a]
add $12
.asm_1c515
callba Func_30256
ret
INCLUDE "engine/collision/blue_stage_game_object_collision.asm"
Func_1c715: ; 0x1c715
call ResolveShellderCollision
call ResolveBlueStageSpinnerCollision
call ResolveBlueStagePinballUpgradeTriggersCollision
call HandleBlueStageBallTypeUpgradeCounter
call Func_1e66a
call ResolveBlueStageBoardTriggerCollision
call ResolveBlueStagePikachuCollision
call ResolveSlowpokeCollision
call ResolveCloysterCollision
call Func_1ea3b
call ResolvePsyduckPoliwagCollision
call ResolveBlueStageForceFieldCollision
call Func_1e9c0
call Func_1c8b6
call Func_1f18a
callba Func_146a9
call Func_1f27b
call Func_1df15
callba Func_30188
ld a, $0
callba Func_10000
ret
Func_1c769: ; 0x1c769
call Func_1ca4a
call Func_1ce40
call ResolvePsyduckPoliwagCollision
call Func_1ca85
call Func_1e4b8
call HandleBlueStageBallTypeUpgradeCounter
call Func_1e5c5
call Func_1c7d7
call ResolveBlueStagePikachuCollision
call Func_1ead4
call ResolveBlueStageBonusMultiplierCollision
call Func_1e757
call Func_1e9c0
call Func_1ea0a
call Func_1c8b6
callba Func_14733
callba Func_146a2
call Func_1f261
call Func_1de93
callba Func_30188
ld a, $0
callba Func_10000
ret
Func_1c7c7: ; 0x1c7c7
ld a, $0
ld [wStageCollisionState], a
callba LoadStageCollisionAttributes
ret
Func_1c7d7: ; 0x1c7d7
ld a, [wPinballLaunchAlley]
and a
ret z
xor a
ld [wPinballLaunchAlley], a
ld a, [wd4de]
and a
jr z, .asm_1c810
xor a
ld [wRightAlleyTrigger], a
ld [wLeftAlleyTrigger], a
ld [wSecondaryLeftAlleyTrigger], a
ld hl, wBallXVelocity
ld [hli], a
ld [hl], a
ld [wBallSpin], a
ld [wBallRotation], a
ld a, $71
ld [wBallYVelocity], a
ld a, $fa
ld [wBallYVelocity + 1], a
ld a, $1
ld [wd549], a
lb de, $00, $0a
call PlaySoundEffect
.asm_1c810
ld a, $ff
ld [wPreviousTriggeredGameObject], a
ld a, [wd4de]
and a
ret nz
ld a, [wd4e0]
and a
jr nz, .asm_1c82c
call Func_1c839
ld a, $1
ld [wd4e0], a
ld [wd4de], a
ret
.asm_1c82c
ld hl, wKeyConfigBallStart
call IsKeyPressed
ret z
ld a, $1
ld [wd4de], a
ret
Func_1c839: ; 0x1c839
ld a, [hGameBoyColorFlag]
and a
callba nz, LoadGreyBillboardPaletteData
.showNextMap
ld a, [wInitialMapSelectionIndex]
inc a
cp $7 ; number of maps to choose from at the start of play
jr c, .gotMapId
xor a ; wrap around to 0
.gotMapId
ld [wInitialMapSelectionIndex], a
ld c, a
ld b, $0
ld hl, BlueStageInitialMaps
add hl, bc
ld a, [hl]
ld [wCurrentMap], a
push af
lb de, $00, $48
call PlaySoundEffect
pop af
add (PalletTownPic_Pointer - BillboardPicturePointers) / 3 ; map billboard pictures start at the $29th entry in BillboardPicturePointers
callba LoadBillboardPicture
ld b, $20 ; number of frames to delay before the next map is shown
.waitOnCurrentMap
push bc
callba Func_eeee
ld hl, wKeyConfigBallStart
call IsKeyPressed
jr nz, .ballStartKeyPressed
pop bc
dec b
jr nz, .waitOnCurrentMap
jr .showNextMap
.ballStartKeyPressed
pop bc
callba Func_30253
ld bc, StartFromMapText
callba Func_3118f
ld a, [wCurrentMap]
ld [wd4e3], a
xor a
ld [wd4e2], a
ret
BlueStageInitialMaps: ; 0x1c8af
db VIRIDIAN_CITY
db VIRIDIAN_FOREST
db MT_MOON
db CERULEAN_CITY
db VERMILION_STREETS
db ROCK_MOUNTAIN
db CELADON_CITY
Func_1c8b6: ; 0x1c8b6
ld a, [wd64c]
inc a
cp $3c
jr z, .asm_1c8c2
ld [wd64c], a
ret
.asm_1c8c2
xor a
ld [wd64c], a
ld hl, wd64d
inc [hl]
ld a, [hl]
cp $5
ret nz
ld a, [wd644]
and a
jr nz, .asm_1c8e1
ld a, [wd643]
and a
jr nz, .asm_1c8e5
ld a, [wRightAlleyCount]
cp $2
jr nc, .asm_1c8e5
.asm_1c8e1
xor a
ld [wd64b], a
.asm_1c8e5
ld a, [wd644]
and a
jr nz, .asm_1c8f8
ld a, [wd643]
and a
jr nz, .asm_1c8fc
ld a, [wLeftAlleyCount]
cp $3
jr z, .asm_1c8fc
.asm_1c8f8
xor a
ld [wd64b], a
.asm_1c8fc
xor a
ld [wd64d], a
xor a
ld [wd64a], a
ld [wd649], a
ld [wd648], a
ld a, [wBlueStageForceFieldDirection]
cp $1 ; right direction
jr z, .asm_1c97f
cp $3 ; left direction
jr z, .asm_1c97f
.asm_1c915
ld a, [wd644]
cp $0
jr z, .asm_1c925
ld a, [wd55a]
cp $0
jr nz, .asm_1c933
jr .asm_1c947
.asm_1c925
ld a, [wd643]
cp $0
jr nz, .asm_1c933
ld a, [wRightAlleyCount]
cp $2
jr c, .asm_1c947
.asm_1c933
ld a, [wd64b]
cp $1
jr z, .asm_1c947
ld a, $1 ; right direction
ld [wBlueStageForceFieldDirection], a
ld [wd64b], a
ld [wd640], a
jr .asm_1c99e
.asm_1c947
ld a, [wd644]
cp $0
jr z, .asm_1c955
ld a, [wd55a]
cp $0
jr z, .asm_1c969
.asm_1c955
ld a, [wd643]
cp $0
jr nz, .asm_1c969
ld a, [wLeftAlleyCount]
cp $3
jr nz, .asm_1c97f
ld a, [wInSpecialMode]
and a
jr nz, .asm_1c97f
.asm_1c969
ld a, [wd64b]
cp $3
jr z, .asm_1c915
ld a, $3 ; left direction
ld [wBlueStageForceFieldDirection], a
ld [wd64b], a
ld a, $1
ld [wd640], a
jr .asm_1c99e
.asm_1c97f
ld a, [wd641]
and a
jr nz, .asm_1c993
xor a
ld [wBlueStageForceFieldDirection], a
ld a, $1
ld [wd640], a
ld [wd64a], a
jr .asm_1c99e
.asm_1c993
ld a, $2 ; down direction
ld [wBlueStageForceFieldDirection], a
ld a, $1
ld [wd640], a
ret
.asm_1c99e
ld a, [wBlueStageForceFieldDirection]
cp $0 ; up direction
jr nz, .asm_1c9ac
ld a, $1
ld [wd64a], a
jr .asm_1c9c0
.asm_1c9ac
cp $1
jr nz, .asm_1c9b7
ld a, $1
ld [wd649], a
jr .asm_1c9c0
.asm_1c9b7
cp $3
jr nz, .asm_1c9c0
ld a, $1
ld [wd648], a
.asm_1c9c0
ret
ResolveShellderCollision: ; 0x1c9c1
ld a, [wWhichShellder]
and a
jr z, .noCollision
xor a
ld [wWhichShellder], a
call Func_1ca29
ld a, [wd641]
and a
jr nz, .asm_1c9f2
ld a, $1
ld [wd641], a
ld a, [wBlueStageForceFieldDirection]
cp $0 ; up direction
jr nz, .asm_1c9f2
ld a, $2 ; down direction
ld [wBlueStageForceFieldDirection], a
ld a, $1
ld [wd640], a
ld a, $3
ld [wd64c], a
ld [wd64d], a
.asm_1c9f2
ld a, $10
ld [wd4d6], a
ld a, [wWhichShellderId]
sub $3
ld [wd4d7], a
ld a, $4
callba Func_10000
ld bc, FiveHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ret
.noCollision
ld a, [wd4d6]
and a
ret z
dec a
ld [wd4d6], a
ret nz
ld a, $ff
ld [wd4d7], a
ret
Func_1ca29: ; 0x1ca29
ld a, $ff
ld [wd803], a
ld a, $3
ld [wd804], a
ld hl, $0200
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
lb de, $00, $0e
call PlaySoundEffect
ret
Func_1ca4a: ; 1ca4a
ld a, [wWildMonCollision]
and a
ret z
xor a
ld [wWildMonCollision], a
ld a, $1
ld [wBallHitWildMon], a
lb de, $00, $06
call PlaySoundEffect
ret
ResolveBlueStageSpinnerCollision: ; 0x1ca5f
ld a, [wSpinnerCollision]
and a
jr z, Func_1ca85
xor a
ld [wSpinnerCollision], a
ld a, [wBallYVelocity]
ld c, a
ld a, [wBallYVelocity + 1]
ld b, a
ld a, c
ld [wd50b], a
ld a, b
ld [wd50c], a
ld a, $c
callba Func_10000
; fall through
Func_1ca85: ; 0x1ca85
ld hl, wd50b
ld a, [hli]
or [hl]
ret z
ld a, [wd50b]
ld c, a
ld a, [wd50c]
ld b, a
bit 7, b
jr nz, .asm_1caa3
ld a, c
sub $7
ld c, a
ld a, b
sbc $0
ld b, a
jr nc, .asm_1cab0
jr .asm_1caad
.asm_1caa3
ld a, c
add $7
ld c, a
ld a, b
adc $0
ld b, a
jr nc, .asm_1cab0
.asm_1caad
ld bc, $0000
.asm_1cab0
ld a, c
ld [wd50b], a
ld a, b
ld [wd50c], a
ld hl, wd50b
ld a, [wd509]
add [hl]
ld [wd509], a
inc hl
ld a, [wd50a]
adc [hl]
bit 7, a
ld c, $0
jr z, .asm_1cad3
add $18
ld c, $1
jr .asm_1cadb
.asm_1cad3
cp $18
jr c, .asm_1cadb
sub $18
ld c, $1
.asm_1cadb
ld [wd50a], a
ld a, c
and a
ret z
ld bc, TenPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld hl, wd62d
call Func_e4a
ld a, [wd517]
cp $f
jr nz, .asm_1caff
call Func_1cb1c
ret
.asm_1caff
inc a
ld [wd517], a
call Func_1cb1c
ld a, [wd517]
cp $f
jr nz, .asm_1cb12
ld a, $64
ld [wd51e], a
.asm_1cb12
ld a, [wCurrentStage]
bit 0, a
ret nz
call Func_1cb43
ret
Func_1cb1c: ; 0x1cb1c
ld a, [wd51e]
and a
ret nz
ld a, [wd517]
ld c, a
ld b, $0
ld hl, Data_1cb33
add hl, bc
ld a, [hl]
ld e, a
ld d, $0
call PlaySoundEffect
ret
Data_1cb33:
dr $1cb33, $1cb43
Func_1cb43: ; 0x1cb43
ld a, [wd517]
ld c, a
sla c
ld b, $0
ld hl, Data_1cb60
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1cb56
ld hl, Data_1cd10
.asm_1cb56
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_1cb60)
call Func_10aa
ret
Data_1cb60:
dr $1cb60, $1cd10
Data_1cd10:
dr $1cd10, $1ce40
Func_1ce40: ; 1ce40
ld a, [wWhichBumper]
and a
jr z, .asm_1ce53
call Func_1ce72
call Func_1ce60
xor a
ld [wWhichBumper], a
call Func_1ce94
.asm_1ce53
ld a, [wd4da]
and a
ret z
dec a
ld [wd4da], a
call z, Func_1ce72
ret
Func_1ce60: ; 0x1ce60
ld a, $10
ld [wd4da], a
ld a, [wWhichBumperId]
sub $1
ld [wd4db], a
sla a
inc a
jr asm_1ce7a
Func_1ce72: ; 1ce72
ld a, [wd4db]
cp $ff
ret z
sla a
asm_1ce7a: ; 0x1ce7a
sla a
ld c, a
ld b, $0
ld hl, Data_1ceca
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1ce8a
ld hl, Data_1cf3a
.asm_1ce8a
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_1ceca)
call Func_10aa
ret
Func_1ce94: ; 0x1ce94
ld a, $ff
ld [wd803], a
ld a, $3
ld [wd804], a
ld hl, $0200
ld a, l
ld [wFlipperYForce], a
ld a, h
ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld a, [wWhichBumperId]
sub $1
ld c, a
ld b, $0
ld hl, Data_1cec8
add hl, bc
ld a, [wCollisionForceAngle]
add [hl]
ld [wCollisionForceAngle], a
lb de, $00, $0b
call PlaySoundEffect
ret
Data_1cec8:
dr $1cec8, $1ceca
Data_1ceca:
dr $1ceca, $1cf3a
Data_1cf3a:
dr $1cf3a, $1cfaa
ResolveBlueStageBoardTriggerCollision: ; 0x1cfaa
ld a, [wWhichBoardTrigger]
and a
ret z
xor a
ld [wWhichBoardTrigger], a
ld bc, FivePoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld a, [wStageCollisionState]
cp $0
jr nz, .asm_1cfe5
ld a, $1
ld [wStageCollisionState], a
callba LoadStageCollisionAttributes
ld a, $1
ld [wd580], a
callba Func_1404a
.asm_1cfe5
ld a, [wWhichBoardTriggerId]
sub $7
ld c, a
ld b, $0
ld hl, wd521
add hl, bc
ld [hl], $1
ld a, [wd521]
and a
call nz, Func_1d010
ld a, [wd522]
and a
call nz, Func_1d047
ld a, [wd523]
and a
call nz, HandleLeftAlleyTriggerBlueField
ld a, [wd524]
and a
call nz, HandleRightAlleyTriggerBlueField
ret
Func_1d010: ; 0x1d010
xor a
ld [wd521], a
ld a, [wLeftAlleyTrigger]
and a
ret z
xor a
ld [wLeftAlleyTrigger], a
ld a, $1
callba Func_10000
ret c
ld a, [wLeftAlleyCount]
cp $3
ret z
inc a
ld [wLeftAlleyCount], a
cp $3
jr z, .asm_1d03e
set 7, a
ld [wIndicatorStates], a
ret
.asm_1d03e
ld [wIndicatorStates], a
ld a, $80
ld [wIndicatorStates + 2], a
ret
Func_1d047: ; 0x1d047
xor a
ld [wd522], a
ld a, [wRightAlleyTrigger]
and a
ret z
xor a
ld [wRightAlleyTrigger], a
ld a, $2
callba Func_10000
ret c
ld a, [wRightAlleyCount]
cp $3
ret z
inc a
ld [wRightAlleyCount], a
cp $3
jr z, .asm_1d071
set 7, a
.asm_1d071
ld [wIndicatorStates + 1], a
ld a, [wRightAlleyCount]
cp $2
ret c
ld a, $80
ld [wIndicatorStates + 3], a
ret
HandleLeftAlleyTriggerBlueField: ; 0x1d080
; Ball passed over the left alley trigger point in the Blue Field.
xor a
ld [wd523], a
ld [wRightAlleyTrigger], a
ld [wSecondaryLeftAlleyTrigger], a
ld a, $1
ld [wLeftAlleyTrigger], a
ret c
ret
HandleRightAlleyTriggerBlueField: ; 0x1d091
; Ball passed over the right alley trigger point in the Blue Field.
xor a
ld [wd524], a
ld [wLeftAlleyTrigger], a
ld [wSecondaryLeftAlleyTrigger], a
ld a, $1
ld [wRightAlleyTrigger], a
ret
ResolveBlueStagePikachuCollision: ; 0x1d0a1
ld a, [wWhichPikachu]
and a
jr z, .asm_1d110
xor a
ld [wWhichPikachu], a
ld a, [wd51c]
and a
jr nz, .asm_1d110
ld a, [wd51d]
and a
jr nz, .asm_1d0c9
ld a, [wWhichPikachuId]
sub $d
ld hl, wd518
cp [hl]
jr nz, .asm_1d110
ld a, [wd517]
cp $f
jr nz, .asm_1d0fc
.asm_1d0c9
ld hl, PikachuSaverAnimationDataRedStage
ld de, wPikachuSaverAnimationFrameCounter
call CopyHLToDE
ld a, [wd51d]
and a
jr nz, .asm_1d0dc
xor a
ld [wd517], a
.asm_1d0dc
ld a, $1
ld [wd51c], a
xor a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
ld [wBallSpin], a
ld [wBallRotation], a
ld [wd549], a
call FillBottomMessageBufferWithBlackTile
jr .asm_1d110
.asm_1d0fc
ld hl, PikachuSaverAnimation2DataRedStage
ld de, wPikachuSaverAnimationFrameCounter
call CopyHLToDE
ld a, $2
ld [wd51c], a
lb de, $00, $3b
call PlaySoundEffect
.asm_1d110
ld a, [wd51c]
and a
call z, Func_1d1fb
call Func_1d133
ld a, [wd517]
cp $f
ret nz
ld a, [wd51e]
and a
ret z
dec a
ld [wd51e], a
cp $5a
ret nz
lb de, $0f, $22
call PlaySoundEffect
ret
Func_1d133: ; 0x1d133
ld a, [wd51c]
cp $1
jr nz, .asm_1d1ae
ld hl, PikachuSaverAnimationDataRedStage
ld de, wPikachuSaverAnimationFrameCounter
call UpdateAnimation
ret nc
ld a, [wPikachuSaverAnimationFrameIndex]
cp $1
jr nz, .asm_1d18c
xor a
ld [wd85d], a
call Func_310a
rst AdvanceFrame
ld a, $1
callba PlayPikachuSoundClip
ld a, $1
ld [wd85d], a
ld a, $ff
ld [wd803], a
ld a, $60
ld [wd804], a
ld hl, wd62e
call Func_e4a
jr nc, .asm_1d185
ld c, $a
call Func_e55
callba z, Func_30164
.asm_1d185
lb de, $16, $10
call PlaySoundEffect
ret
.asm_1d18c
ld a, [wPikachuSaverAnimationFrameIndex]
cp $11
ret nz
ld a, $fc
ld [wBallYVelocity + 1], a
ld a, $1
ld [wd549], a
ld bc, FiveThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
xor a
ld [wd51c], a
ret
.asm_1d1ae
cp $2
jr nz, .asm_1d1c7
ld hl, PikachuSaverAnimation2DataRedStage
ld de, wPikachuSaverAnimationFrameCounter
call UpdateAnimation
ret nc
ld a, [wPikachuSaverAnimationFrameIndex]
cp $1
ret nz
xor a
ld [wd51c], a
ret
.asm_1d1c7
ld a, [hNumFramesDropped]
swap a
and $1
ld [wPikachuSaverAnimationFrame], a
ret
PikachuSaverAnimationDataRedStage: ; 0x1d1d1
; Each entry is [duration][OAM id]
db $0C, $02
db $05, $03
db $05, $02
db $05, $04
db $05, $05
db $05, $02
db $06, $06
db $06, $07
db $06, $08
db $06, $02
db $06, $05
db $06, $08
db $06, $07
db $06, $02
db $06, $08
db $06, $07
db $06, $02
db $01, $00
db $00
PikachuSaverAnimation2DataRedStage: ; 0x1d1f6
; Each entry is [duration][OAM id]
db $0C, $02
db $01, $00
db $00
Func_1d1fb: ; 0x1d1fb
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed2
jr z, .asm_1d209
ld hl, wd518
ld [hl], $0
ret
.asm_1d209
ld hl, wKeyConfigRightFlipper
call IsKeyPressed2
ret z
ld hl, wd518
ld [hl], $1
ret
ResolveSlowpokeCollision: ; 0x1d216
ld a, [wSlowpokeCollision]
and a
jr z, .asm_1d253
xor a
ld [wSlowpokeCollision], a
ld bc, TenThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
lb de, $00, $05
call PlaySoundEffect
ld hl, Data_1d312
ld de, wd632
call CopyHLToDE
xor a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
ld [wBallXPos], a
ld [wBallYPos], a
xor a
ld [wd549], a
.asm_1d253
ld hl, Data_1d312
ld de, wd632
call UpdateAnimation
push af
ld a, [wd632]
and a
jr nz, .asm_1d271
ld a, $19
ld [wd632], a
xor a
ld [wd633], a
ld a, $6
ld [wd634], a
.asm_1d271
pop af
ret nc
ld a, [wd634]
cp $1
jr nz, .asm_1d2b6
xor a
ld [wd548], a
ld a, [wLeftAlleyCount]
cp $3
jr nz, .asm_1d299
callba Func_10ab3
ld a, [wd643]
and a
ret z
ld a, $1
ld [wd642], a
.asm_1d299
ld hl, wd63a
call Func_e4a
ld hl, wd62a
call Func_e4a
ret nc
ld c, $19
call Func_e55
callba z, Func_30164
ret
.asm_1d2b6
ld a, [wd634]
cp $4
jr nz, .asm_1d2c3
ld a, $1
ld [wd548], a
ret
.asm_1d2c3
ld a, [wd634]
cp $5
ret nz
ld a, $1
ld [wd549], a
ld a, $b0
ld [wBallXVelocity], a
ld a, $0
ld [wBallXVelocity + 1], a
xor a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
lb de, $00, $06
call PlaySoundEffect
ld a, [wd642]
cp $0
jr nz, .asm_1d2f8
ld a, $f
callba Func_10000
.asm_1d2f8
xor a
ld [wd642], a
ld [wd64c], a
ld [wd64d], a
ld a, $1
ld [wd641], a
ld a, $2 ; down direction
ld [wBlueStageForceFieldDirection], a
ld a, $1
ld [wd640], a
ret
Data_1d312:
dr $1d312, $1d32d
ResolveCloysterCollision: ; 0x1d32d
ld a, [wCloysterCollision]
and a
jr z, .asm_1d36a
xor a
ld [wCloysterCollision], a
ld bc, TenThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
lb de, $00, $05
call PlaySoundEffect
ld hl, Data_1d41d
ld de, wd637
call CopyHLToDE
xor a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
ld [wBallXPos], a
ld [wBallYPos], a
xor a
ld [wd549], a
.asm_1d36a
ld hl, Data_1d41d
ld de, wd637
call UpdateAnimation
push af
ld a, [wd637]
and a
jr nz, .asm_1d388
ld a, $19
ld [wd637], a
xor a
ld [wd638], a
ld a, $6
ld [wd639], a
.asm_1d388
pop af
ret nc
ld a, [wd639]
cp $1
jr nz, .asm_1d3cb
xor a
ld [wd548], a
ld a, [wRightAlleyCount]
cp $2
jr c, .noCatchEmMode
ld a, $8
jr nz, .asm_1d3a1
xor a
.asm_1d3a1
ld [wRareMonsFlag], a
callba StartCatchEmMode
.noCatchEmMode
ld hl, wd63b
call Func_e4a
ld hl, wd62a
call Func_e4a
ret nc
ld c, $19
call Func_e55
callba z, Func_30164
ret
.asm_1d3cb
ld a, [wd639]
cp $4
jr nz, .asm_1d3d8
ld a, $1
ld [wd548], a
ret
.asm_1d3d8
ld a, [wd639]
cp $5
ret nz
ld a, $1
ld [wd549], a
ld a, $4f
ld [wBallXVelocity], a
ld a, $ff
ld [wBallXVelocity + 1], a
xor a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
lb de, $00, $06
call PlaySoundEffect
ld a, $e
callba Func_10000
xor a
ld [wd64c], a
ld [wd64d], a
ld a, $1
ld [wd641], a
ld a, $2 ; down direction
ld [wBlueStageForceFieldDirection], a
ld a, $1
ld [wd640], a
ret
Data_1d41d:
dr $1d41d, $1d438
ResolveBlueStageBonusMultiplierCollision: ; 0x1d438
call Func_1d692
ld a, [wWhichBonusMultiplierRailing]
and a
jp z, Func_1d51b
xor a
ld [wWhichBonusMultiplierRailing], a
lb de, $00, $0d
call PlaySoundEffect
ld a, [wWhichBonusMultiplierRailingId]
sub $f
jr nz, .asm_1d48e
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_1d45c
ld a, $1f
jr .asm_1d45e
.asm_1d45c
ld a, $29
.asm_1d45e
call Func_1d5f2
ld a, $3c
ld [wd647], a
ld a, $9
callba Func_10000
ld a, [wd610]
cp $3
jp nz, asm_1d4fa
ld a, $1
ld [wd610], a
ld a, $3
ld [wd611], a
ld a, [wd60c]
set 7, a
ld [wd60c], a
jr asm_1d4fa
.asm_1d48e
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_1d497
ld a, $21
jr .asm_1d499
.asm_1d497
ld a, $2b
.asm_1d499
call Func_1d5f2
ld a, $1e
ld [wd647], a
ld a, $a
callba Func_10000
ld a, [wd611]
cp $3
jr nz, asm_1d4fa
ld a, $1
ld [wd610], a
ld a, $1
ld [wd611], a
ld a, $80
ld [wd612], a
ld a, [wd60d]
set 7, a
ld [wd60d], a
ld a, [wd482]
inc a
cp 100
jr c, .asm_1d4d5
ld a, 99
.asm_1d4d5
ld [wd482], a
jr nc, .asm_1d4e9
ld c, $19
call Func_e55
callba z, Func_30164
.asm_1d4e9
ld a, [wd60c]
ld [wd614], a
ld a, [wd60d]
ld [wd615], a
ld a, $1
ld [wd613], a
asm_1d4fa: ; 0x1d4fa
ld bc, TenPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld a, [wd60c]
call Func_1d5f2
ld a, [wd60d]
add $14
call Func_1d5f2
ld a, $3c
ld [wd647], a
ret
Func_1d51b: ; 0x1d51b
call Func_1d5bf
ld a, [wd612]
and a
jr z, .asm_1d559
dec a
ld [wd612], a
cp $70
jr nz, .asm_1d538
ld a, $2
ld [wd610], a
ld a, $2
ld [wd611], a
jr .asm_1d559
.asm_1d538
and a
jr nz, .asm_1d559
ld a, $3
ld [wd610], a
xor a
ld [wd611], a
ld a, [wd482]
call Func_1d65f
ld a, [wd60c]
call Func_1d5f2
ld a, [wd60d]
add $14
call Func_1d5f2
ret
.asm_1d559
ld a, [wd610]
cp $2
jr c, .asm_1d58b
cp $3
ld a, [hNumFramesDropped]
jr c, .asm_1d56a
srl a
srl a
.asm_1d56a
ld b, a
and $3
jr nz, .asm_1d58b
bit 3, b
jr nz, .asm_1d580
ld a, [wd60c]
res 7, a
ld [wd60c], a
call Func_1d5f2
jr .asm_1d58b
.asm_1d580
ld a, [wd60c]
set 7, a
ld [wd60c], a
call Func_1d5f2
.asm_1d58b
ld a, [wd611]
cp $2
ret c
cp $3
ld a, [hNumFramesDropped]
jr c, .asm_1d59b
srl a
srl a
.asm_1d59b
ld b, a
and $3
ret nz
bit 3, b
jr nz, .asm_1d5b1
ld a, [wd60d]
res 7, a
ld [wd60d], a
add $14
call Func_1d5f2
ret
.asm_1d5b1
ld a, [wd60d]
set 7, a
ld [wd60d], a
add $14
call Func_1d5f2
ret
Func_1d5bf: ; 0x1d5bf
ld a, [wd5ca]
and a
ret nz
ld a, [wd613]
and a
ret z
xor a
ld [wd613], a
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, BonusMultiplierText
call LoadTextHeader
ld hl, wBottomMessageText + $12
ld a, [wd614]
and $7f
jr z, .asm_1d5e9
add $30
ld [hli], a
.asm_1d5e9
ld a, [wd615]
res 7, a
add $30
ld [hl], a
ret
Func_1d5f2: ; 0x1d5f2
push af
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_1d5fd
pop af
call Func_1d602
ret
.asm_1d5fd
pop af
call Func_1d645
ret
Func_1d602: ; 0x1d602
push af
res 7, a
ld hl, wd60e
cp $14
jr c, .asm_1d611
ld hl, wd60f
sub $a
.asm_1d611
cp [hl]
jr z, .asm_1d626
ld [hl], a
ld c, a
ld b, $0
sla c
ld hl, Data_1d6be
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_1d6be)
call Func_10aa
.asm_1d626
pop af
ld bc, $0000
bit 7, a
jr z, .asm_1d632
res 7, a
set 1, c
.asm_1d632
cp $14
jr c, .asm_1d638
set 2, c
.asm_1d638
ld hl, Data_1d946
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_1d946)
call Func_10aa
ret
Func_1d645: ; 0x1d645
bit 7, a
jr z, .asm_1d64d
res 7, a
add $a
.asm_1d64d
ld c, a
ld b, $0
sla c
ld hl, Data_1d97a
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_1d97a)
call Func_10aa
ret
Func_1d65f: ; 0x1d65f
ld a, [wd482]
inc a
cp $64
jr c, .asm_1d669
ld a, $63
.asm_1d669
ld b, a
xor a
ld hl, Data_1d68b
ld c, $7
.asm_1d670
bit 0, b
jr z, .asm_1d676
add [hl]
daa
.asm_1d676
srl b
inc hl
dec c
jr nz, .asm_1d670
push af
swap a
and $f
ld [wd60c], a
pop af
and $f
ld [wd60d], a
ret
Data_1d68b:
dr $1d68b, $1d692
Func_1d692: ; 0x1d692
ld a, [wd647]
cp $1
jr z, .asm_1d69e
dec a
ld [wd647], a
ret
.asm_1d69e
ld a, $0
ld [wd647], a
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_1d6b3
ld a, $1e
call Func_1d5f2
ld a, $20
call Func_1d5f2
ret
.asm_1d6b3
ld a, $2a
call Func_1d5f2
ld a, $28
call Func_1d5f2
ret
Data_1d6be:
dr $1d6be, $1d946
Data_1d946:
dr $1d946, $1d97a
Data_1d97a:
dr $1d97a, $1dbd2
ResolvePsyduckPoliwagCollision: ; 0x1dbd2
ld a, [wWhichPsyduckPoliwag]
and a
jp z, Func_1dc8e
cp $2
jr z, .asm_1dc33
xor a
ld [wWhichPsyduckPoliwag], a
ld hl, wLeftMapMoveCounter
ld a, [hl]
cp $3
jp z, Func_1dc8e
inc a
ld [hl], a
ld hl, wd4f7
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_1dc06
ld a, $54
ld [wc7e3], a
ld a, $55
ld [wc803], a
.asm_1dc06
ld a, $1
call Func_1de4b
ld a, [wLeftMapMoveCounter]
call Func_1de6f
ld a, [wLeftMapMoveCounter]
cp $3
ld a, $7
callba Func_10000
ld a, $2
ld [wd646], a
ld a, $78
ld [wLeftMapMoveDiglettAnimationCounter], a
ld a, $14
ld [wLeftMapMoveDiglettFrame], a
jr .asm_1dc8a
.asm_1dc33
xor a
ld [wWhichPsyduckPoliwag], a
ld hl, wRightMapMoveCounter
ld a, [hl]
cp $3
jp z, Func_1dc8e
inc a
ld [hl], a
ld hl, wd4f9
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_1dc5c
ld a, $52
ld [wc7f0], a
ld a, $53
ld [wc810], a
.asm_1dc5c
ld a, $3
call Func_1de4b
ld a, [wRightMapMoveCounter]
cp $3
ld a, $8
callba Func_10000
ld a, [wRightMapMoveCounter]
cp $3
ccf
call z, Func_1ddf4
ld a, $2
ld [wd645], a
ld a, $28
ld [wRightMapMoveDiglettAnimationCounter], a
ld a, $78
ld [wRightMapMoveDiglettFrame], a
.asm_1dc8a
call Func_1de22
ret
Func_1dc8e: ; 0x1dc8e
call Func_1dc95
call Func_1dd2e
ret
Func_1dc95: ; 0x1dc95
ld a, [wd646]
cp $0
ret z
ld a, [wLeftMapMoveDiglettAnimationCounter]
and a
jr z, .asm_1dceb
dec a
ld [wLeftMapMoveDiglettAnimationCounter], a
ld a, [wd644]
and a
ret nz
ld a, [wLeftMapMoveDiglettFrame]
cp $1
jr z, .asm_1dcb9
cp $0
ret z
dec a
ld [wLeftMapMoveDiglettFrame], a
ret
.asm_1dcb9
ld a, [wd646]
cp $2
ret nz
call Func_1130
ret nz
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1dcd7
ld a, [wLeftMapMoveCounter]
cp $0
jr z, .asm_1dcd4
ld b, $7
add b
jr .asm_1dcd9
.asm_1dcd4
xor a
jr .asm_1dcd9
.asm_1dcd7
ld a, $8
.asm_1dcd9
call Func_1de6f
ld a, [wLeftMapMoveCounter]
cp $3
ccf
call z, Func_1ddc7
ld a, $1
ld [wd646], a
ret
.asm_1dceb
ld a, [wd646]
cp $1
ret nz
ld a, [wLeftMapMoveDiglettAnimationCounter]
and a
ret nz
ld a, $0
call Func_1de4b
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_1dd0c
ld a, $5e
ld [wc7e3], a
ld a, $5f
ld [wc803], a
.asm_1dd0c
ld a, $0
ld [wd646], a
ld a, [wLeftMapMoveCounter]
sub $3
ret nz
ld a, [wLeftMapMoveCounter]
sub $3
ld [wLeftMapMoveCounter], a
call Func_1de6f
ld a, $0
call Func_1de4b
ld a, $0
ld [wd646], a
ret
; XXX
ret
Func_1dd2e: ; 0x1dd2e
ld a, [wd645]
cp $0
ret z
cp $1
jr z, .asm_1dd53
cp $3
jr z, .asm_1dd69
ld a, [wRightMapMoveDiglettAnimationCounter]
cp $0
jr z, .asm_1dd48
dec a
ld [wRightMapMoveDiglettAnimationCounter], a
ret
.asm_1dd48
ld a, $2
call Func_1de4b
ld a, $1
ld [wd645], a
ret
.asm_1dd53
ld a, [wRightMapMoveCounter]
add $4
call Func_1de6f
ld a, [wRightMapMoveCounter]
add $3
call Func_1de4b
ld a, $3
ld [wd645], a
ret
.asm_1dd69
ld a, [wRightMapMoveDiglettFrame]
and a
jr z, .asm_1dd74
dec a
ld [wRightMapMoveDiglettFrame], a
ret
.asm_1dd74
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1dd89
ld a, [wRightMapMoveCounter]
cp $0
jr z, .asm_1dd85
ld b, $a
add b
jr .asm_1dd8b
.asm_1dd85
ld a, $4
jr .asm_1dd8b
.asm_1dd89
ld a, $9
.asm_1dd8b
call Func_1de6f
ld a, $2
call Func_1de4b
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_1dda9
ld a, $24
ld [wc7f0], a
ld a, $25
ld [wc810], a
ld a, $0
ld [wd645], a
.asm_1dda9
ld a, [wRightMapMoveCounter]
sub $3
ret nz
ld a, [wRightMapMoveCounter]
sub $3
ld [wRightMapMoveCounter], a
ld a, $4
call Func_1de6f
ld a, $2
call Func_1de4b
ld a, $0
ld [wd645], a
ret
Func_1ddc7: ; 0x1ddc7
ld hl, wd63d
call Func_e4a
ld hl, wd62b
call Func_e4a
jr nc, .asm_1dde4
ld c, $a
call Func_e55
callba z, Func_30164
.asm_1dde4
xor a
ld [wd55a], a
callba StartMapMoveMode
scf
ret
Func_1ddf4: ; 0x1ddf4
ld hl, wd63c
call Func_e4a
ld hl, wd62b
call Func_e4a
jr nc, .asm_1de11
ld c, $a
call Func_e55
callba z, Func_30164
.asm_1de11
ld a, $1
ld [wd55a], a
callba StartMapMoveMode
scf
ret
Func_1de22: ; 0x1de22
ld a, [wCurrentStage]
bit 0, a
ret z
ld a, $55
ld [wd803], a
ld a, $4
ld [wd804], a
ld a, $2
ld [wd7eb], a
ld bc, FiveHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
lb de, $00, $0f
call PlaySoundEffect
ret
Func_1de4b: ; 0x1de4b
ld b, a
ld a, [wCurrentStage]
bit 0, a
ret z
ld a, b
sla a
ld c, a
ld b, $0
ld hl, Data_1df66
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1de63
ld hl, Data_1e00f
.asm_1de63
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, Bank(Data_1df66)
call Func_10aa
ret
Func_1de6f: ; 0x1de6f
ld b, a
ld a, [wCurrentStage]
bit 0, a
ret z
ld a, b
sla a
ld c, a
ld b, $0
ld hl, Data_1e0a4
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1de87
ld hl, Data_1e1d6
.asm_1de87
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, Bank(Data_1e0a4)
call Func_10aa
ret
Func_1de93: ; 0x1de93
ld hl, wd4f7
dec [hl]
ld a, [hli]
cp $ff
jr nz, .asm_1ded2
dec [hl]
ld a, [hld]
cp $ff
jr nz, .asm_1ded2
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wLeftMapMoveCounter]
and a
jr z, .asm_1ded2
cp $3
jr z, .asm_1ded2
dec a
ld [wLeftMapMoveCounter], a
call Func_1de6f
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1decd
ld a, [wLeftMapMoveCounter]
cp $0
jr z, .asm_1deca
ld b, $7
add b
jr .asm_1decf
.asm_1deca
xor a
jr .asm_1decf
.asm_1decd
ld a, $8
.asm_1decf
call Func_1de6f
.asm_1ded2
ld hl, wd4f9
dec [hl]
ld a, [hli]
cp $ff
jr nz, .asm_1df14
dec [hl]
ld a, [hld]
cp $ff
jr nz, .asm_1df14
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wRightMapMoveCounter]
and a
jr z, .asm_1df14
cp $3
jr z, .asm_1df14
dec a
ld [wRightMapMoveCounter], a
add $4
call Func_1de6f
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1df0f
ld a, [wRightMapMoveCounter]
cp $0
jr z, .asm_1df0b
ld b, $a
add b
jr .asm_1df11
.asm_1df0b
ld a, $4
jr .asm_1df11
.asm_1df0f
ld a, $9
.asm_1df11
call Func_1de6f
.asm_1df14
ret
Func_1df15: ; 0x1df15
ld b, $0
ld hl, wd4f8
ld a, [hld]
or [hl]
jr z, .asm_1df3e
dec [hl]
ld a, [hli]
cp $ff
jr nz, .asm_1df3e
dec [hl]
ld a, [hld]
cp $ff
jr nz, .asm_1df3e
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wLeftMapMoveCounter]
and a
jr z, .asm_1df3e
cp $3
jr z, .asm_1df3e
dec a
ld [wLeftMapMoveCounter], a
.asm_1df3e
ld hl, wd4fa
ld a, [hld]
or [hl]
jr z, .asm_1df65
dec [hl]
ld a, [hli]
cp $ff
jr nz, .asm_1df65
dec [hl]
ld a, [hld]
cp $ff
jr nz, .asm_1df65
ld a, $e0
ld [hli], a
ld a, $1
ld [hl], a
ld a, [wRightMapMoveCounter]
and a
jr z, .asm_1df65
cp $3
jr z, .asm_1df65
dec a
ld [wRightMapMoveCounter], a
.asm_1df65
ret
Data_1df66:
dr $1df66, $1e00f
Data_1e00f:
dr $1e00f, $1e0a4
Data_1e0a4:
dr $1e0a4, $1e1d6
Data_1e1d6:
dr $1e1d6, $1e356
ResolveBlueStagePinballUpgradeTriggersCollision: ; 0x1e356
ld a, [wWhichPinballUpgradeTrigger]
and a
jp z, Func_1e471
xor a
ld [wWhichPinballUpgradeTrigger], a
ld a, [wStageCollisionState]
cp $0
jr nz, .asm_1e386
ld a, $1
ld [wStageCollisionState], a
callba LoadStageCollisionAttributes
ld a, $1
ld [wd580], a
callba Func_1404a
.asm_1e386
ld a, [wStageCollisionState]
bit 0, a
jp z, Func_1e471
ld a, [wd5fc]
and a
jp nz, Func_1e471
xor a
ld [wRightAlleyTrigger], a
ld [wLeftAlleyTrigger], a
ld [wSecondaryLeftAlleyTrigger], a
ld a, $b
callba Func_10000
ld a, [wWhichPinballUpgradeTriggerId]
sub $13
ld c, a
ld b, $0
ld hl, wd5f9
add hl, bc
ld a, [hl]
ld [hl], $1
and a
jr z, .asm_1e3bf
ld [hl], $0
.asm_1e3bf
ld bc, OneHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld hl, wd5f9
ld a, [hli]
and [hl]
inc hl
and [hl]
jr nz, .asm_1e3de
lb de, $00, $09
call PlaySoundEffect
jp asm_1e475
.asm_1e3de
ld a, $1
ld [wd5fc], a
ld a, $80
ld [wd5fd], a
; load approximately 1 minute of frames into wBallTypeCounter
ld a, $10
ld [wBallTypeCounter], a
ld a, $e
ld [wBallTypeCounter + 1], a
ld bc, FourHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld a, [wBallType]
cp MASTER_BALL
jr z, .masterBall
lb de, $06, $3a
call PlaySoundEffect
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, FieldMultiplierText
call LoadTextHeader
ld a, [wBallType]
ld c, a
ld b, $0
ld hl, BallTypeProgression2BlueField
add hl, bc
ld a, [hl]
ld [wBallType], a
add $30
ld [wBottomMessageText + $12], a
jr .asm_1e465
.masterBall
lb de, $0f, $4d
call PlaySoundEffect
ld bc, OneMillionPoints
callba AddBigBCD6FromQueue
ld bc, $0100
ld de, $0000
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5d4
ld de, DigitsText1to8
call Func_32cc
pop de
pop bc
ld hl, wd5cc
ld de, FieldMultiplierSpecialBonusText
call LoadTextHeader
.asm_1e465
callba TransitionPinballUpgrade
jr asm_1e475
Func_1e471: ; 0x1e471
call Func_1e4b8
ret z
asm_1e475: ; 0x1e475
ld hl, wd5fb
ld b, $3
.asm_1e47a
ld a, [hld]
push hl
call Func_1e484
pop hl
dec b
jr nz, .asm_1e47a
ret
Func_1e484: ; 0x1e484
and a
jr z, .asm_1e496
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_1e491
ld hl, Data_1e520
jr .asm_1e4a3
.asm_1e491
ld hl, Data_1e556
jr .asm_1e4a3
.asm_1e496
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_1e4a0
ld hl, Data_1e526
jr .asm_1e4a3
.asm_1e4a0
ld hl, Data_1e55c
.asm_1e4a3
push bc
dec b
sla b
ld e, b
ld d, $0
add hl, de
ld c, [hl]
inc hl
ld b, [hl]
ld a, $7
ld de, LoadTileLists
call Func_10c5
pop bc
ret
Func_1e4b8: ; 0x1e4b8
ld a, [wd5fc]
and a
jr z, .asm_1e4e5
ld a, [wd5fd]
dec a
ld [wd5fd], a
jr nz, .asm_1e4ca
ld [wd5fc], a
.asm_1e4ca
and $7
jr nz, .asm_1e4e3
ld a, [wd5fd]
srl a
srl a
srl a
and $1
ld hl, wd5f9
ld [hli], a
ld [hli], a
ld [hl], a
ld a, $1
and a
ret
.asm_1e4e3
xor a
ret
.asm_1e4e5
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed
jr z, .leftFlipperKeyIsPressed
; left flipper key is pressed
ld hl, wd5f9
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hl]
ld e, a
ld a, c
ld [hld], a
ld a, e
ld [hld], a
ld a, b
ld [hl], a
ret
.leftFlipperKeyIsPressed
ld hl, wKeyConfigRightFlipper
call IsKeyPressed
ret z
; right flipper key is pressed
ld hl, wd5f9
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hl]
ld e, a
ld a, b
ld [hld], a
ld a, c
ld [hld], a
ld a, e
ld [hl], a
ret
BallTypeProgression2BlueField: ; 0x1e514
; Determines the next upgrade for the Ball.
db GREAT_BALL ; POKE_BALL -> GREAT_BALL
db GREAT_BALL ; unused
db ULTRA_BALL ; GREAT_BALL -> ULTRA_BALL
db MASTER_BALL ; ULTRA_BALL -> MASTER_BALL
db MASTER_BALL ; unused
db MASTER_BALL ; MASTER_BALL -> MASTER_BALL
BallTypeDegradation2BlueField: ; 0x1e51a
; Determines the previous upgrade for the Ball.
db POKE_BALL ; POKE_BALL -> POKE_BALL
db POKE_BALL ; unused
db POKE_BALL ; GREAT_BALL -> POKE_BALL
db GREAT_BALL ; ULTRA_BALL -> GREAT_BALL
db ULTRA_BALL ; unused
db ULTRA_BALL ; MASTER_BALL -> GREAT_BALL
Data_1e520:
dr $1e520, $1e526
Data_1e526:
dr $1e526, $1e556
Data_1e556:
dr $1e556, $1e55c
Data_1e55c:
dr $1e55c, $1e58c
HandleBlueStageBallTypeUpgradeCounter: ; 0x1e58c
ld a, [wCapturingMon]
and a
ret nz
; check if counter is at 0
ld hl, wBallTypeCounter
ld a, [hli]
ld c, a
ld b, [hl]
or b
ret z
dec bc
ld a, b
ld [hld], a
ld [hl], c
or c
ret nz
; counter is now 0! Degrade the ball upgrade.
ld a, [wBallType]
ld c, a
ld b, $0
ld hl, BallTypeDegradation2BlueField
add hl, bc
ld a, [hl]
ld [wBallType], a
and a
jr z, .pokeball
; load approximately 1 minute of frames into wBallTypeCounter
ld a, $10
ld [wBallTypeCounter], a
ld a, $e
ld [wBallTypeCounter + 1], a
.pokeball
callba TransitionPinballUpgrade
ret
Func_1e5c5: ; 0x1e5c5
ld a, [wWhichCAVELight]
and a
jr z, .asm_1e623
xor a
ld [wWhichCAVELight], a
ld a, [wd513]
and a
jr nz, .asm_1e623
ld a, [wWhichCAVELightId]
sub $16
ld c, a
ld b, $0
ld hl, wd50f
add hl, bc
ld a, [hl]
ld [hl], $1
and a
ret nz
ld bc, OneHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld hl, wd50f
ld a, [hli]
and [hl]
inc hl
and [hl]
inc hl
and [hl]
jr z, Func_1e627
ld a, $1
ld [wd513], a
ld a, $80
ld [wd514], a
ld bc, FourHundredPoints
callba AddBigBCD6FromQueueWithBallMultiplier
lb de, $00, $09
call PlaySoundEffect
ld hl, wd62c
call Func_e4a
jr Func_1e627
.asm_1e623
call Func_1e66a
ret z
; fall through
Func_1e627: ; 0x1e627
ld hl, wd512
ld b, $4
.asm_1e62c
ld a, [hld]
push hl
call Func_1e636
pop hl
dec b
jr nz, .asm_1e62c
ret
Func_1e636: ; 0x1e636
and a
jr z, .asm_1e648
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_1e643
ld hl, Data_1e6d7
jr .asm_1e655
.asm_1e643
ld hl, Data_1e717
jr .asm_1e655
.asm_1e648
ld a, [hGameBoyColorFlag]
and a
jr nz, .asm_1e652
ld hl, Data_1e6df
jr .asm_1e655
.asm_1e652
ld hl, Data_1e71f
.asm_1e655
push bc
dec b
sla b
ld e, b
ld d, $0
add hl, de
ld c, [hl]
inc hl
ld b, [hl]
ld a, $7
ld de, LoadTileLists
call Func_10c5
pop bc
ret
Func_1e66a: ; 0x1e66a
ld a, [wd513]
and a
jr z, .asm_1e6a0
ld a, [wd514]
dec a
ld [wd514], a
jr nz, .asm_1e687
ld [wd513], a
ld a, $1
ld [wd608], a
ld a, $3
ld [wd607], a
xor a
.asm_1e687
and $7
ret nz
ld a, [wd514]
srl a
srl a
srl a
and $1
ld hl, wd50f
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
ld a, $1
and a
ret
.asm_1e6a0
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed
jr z, .asm_1e6bc
ld hl, wd50f
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
ld a, c
ld [hld], a
ld a, d
ld [hld], a
ld a, e
ld [hld], a
ld a, b
ld [hl], a
ret
.asm_1e6bc
ld hl, wKeyConfigRightFlipper
call IsKeyPressed
ret z
ld hl, wd50f
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
ld a, e
ld [hld], a
ld a, b
ld [hld], a
ld a, c
ld [hld], a
ld a, d
ld [hl], a
ret
Data_1e6d7:
dr $1e6d7, $1e6df
Data_1e6df:
dr $1e6df, $1e717
Data_1e717:
dr $1e717, $1e71f
Data_1e71f:
dr $1e71f, $1e757
Func_1e757: ; 0x1e757
ld a, [wSlotCollision]
and a
jr z, .asm_1e78c
xor a
ld [wSlotCollision], a
ld a, [wd604]
and a
ret z
ld a, [wd603]
and a
jr nz, .asm_1e78c
xor a
ld hl, wBallXVelocity
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [wd549], a
ld [wBallXPos], a
ld [wBallYPos], a
ld a, $50
ld [wBallXPos + 1], a
ld a, $16
ld [wBallYPos + 1], a
ld a, $13
ld [wd603], a
.asm_1e78c
ld a, [wd603]
and a
ret z
dec a
ld [wd603], a
ld a, $18
ld [wd606], a
ld a, [wd603]
cp $12
jr nz, .asm_1e7b2
lb de, $00, $21
call PlaySoundEffect
callba LoadMiniBallGfx
ret
.asm_1e7b2
cp $f
jr nz, .asm_1e7c1
callba Func_dd62
ret
.asm_1e7c1
cp $c
jr nz, .asm_1e7d0
xor a
ld [wd548], a
ld [wBallSpin], a
ld [wBallRotation], a
ret
.asm_1e7d0
cp $9
jr nz, .asm_1e7d8
call Func_1e830
ret
.asm_1e7d8
cp $6
jr nz, .asm_1e7f5
xor a
ld [wd604], a
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
callba LoadMiniBallGfx
ret
.asm_1e7f5
cp $3
jr nz, .asm_1e80e
callba LoadBallGfx
ld a, $2
ld [wBallYVelocity + 1], a
ld a, $80
ld [wBallXVelocity], a
ret
.asm_1e80e
and a
ret nz
call Func_1e8f6
ld a, [wd622]
cp $1
ret nz
call GenRandom
and $8
ld [wRareMonsFlag], a
callba StartCatchEmMode
xor a
ld [wd622], a
ret
Func_1e830: ; 0x1e830
xor a
ld [wIndicatorStates + 4], a
ld a, $d
callba Func_10000
jr nc, .asm_1e84b
ld a, $1
ld [wd548], a
ld [wd549], a
ret
.asm_1e84b
ld a, [wd624]
cp $3
jr nz, .asm_1e891
ld a, [wd607]
and a
jr nz, .asm_1e891
.asm_1e858
ld a, [wd623]
and a
jr nz, .asm_1e867
xor a
ld [wd625], a
ld a, $40
ld [wd626], a
.asm_1e867
xor a
ld [wd623], a
ld a, $1
ld [wd495], a
ld [wd4ae], a
ld a, [wd498]
ld c, a
ld b, $0
ld hl, Data_1e8f1
add hl, bc
ld a, [hl]
ld [wd497], a
call Func_1e8c3
xor a
ld [wd609], a
ld [wd622], a
ld a, $1e
ld [wd607], a
ret
.asm_1e891
callba Func_ed8e
xor a
ld [wd608], a
ld a, [wd61d]
cp $d
jr nc, .asm_1e858
ld a, $1
ld [wd548], a
ld [wd549], a
ld a, [wd622]
cp $2
ret nz
callba Func_10ab3
xor a
ld [wd622], a
ret
Func_1e8c3: ; 0x1e8c3
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld a, [wd497]
ld de, GoToMeowthStageText
cp $b
jr z, .asm_1e8e0
ld de, GoToSeelStageText
cp $f
jr z, .asm_1e8e0
ld de, GoToMewtwoStageText
.asm_1e8e0
call LoadTextHeader
ld de, $0000
call PlaySong
rst AdvanceFrame
lb de, $3c, $23
call PlaySoundEffect
ret
Data_1e8f1:
dr $1e8f1, $1e8f6
Func_1e8f6: ; 0x1e8f6
ld a, [wCurrentStage]
and $1
sla a
ld c, a
ld a, [wd604]
add c
sla a
ld c, a
ld b, $0
ld hl, Data_1e91e
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1e912
ld hl, Data_1e970
.asm_1e912
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, Bank(Data_1e91e)
call Func_10aa
ret
Data_1e91e:
dr $1e91e, $1e970
Data_1e970:
dr $1e970, $1e9c0
Func_1e9c0: ; 0x1e9c0
ld a, [wd607]
and a
ret z
dec a
ld [wd607], a
ret nz
ld a, [wInSpecialMode]
and a
ret nz
ld a, [wd609]
and a
jr z, .asm_1e9dc
ld a, [wd498]
add $15
jr .asm_1e9e3
.asm_1e9dc
ld a, [wd608]
and a
ret z
ld a, $1a
.asm_1e9e3
ld hl, wCurrentStage
bit 0, [hl]
callba nz, Func_30256
ld a, [wd604]
and a
ret nz
ld a, $1
ld [wd604], a
ld a, $80
ld [wIndicatorStates + 4], a
ld a, [wCurrentStage]
bit 0, a
call nz, Func_1e8f6
ret
Func_1ea0a: ; 0x1ea0a
ld a, [wd604]
and a
ret z
ld a, [wBallYPos + 1]
sub $fe
cp $30
ret nc
ld c, $0
ld b, a
ld h, b
ld l, c
srl b
rr c
srl b
rr c
srl h
rr l
add hl, bc
ld a, [wBallXPos + 1]
sub $38
cp $30
ret nc
ld c, a
ld b, $0
sla c
sla c
add hl, bc
jr asm_1ea6a
Func_1ea3b: ; 0x1ea3b
ld a, [wd604]
and a
ret z
ld a, [wBallYPos + 1]
sub $86
cp $30
ret nc
ld c, $0
ld b, a
ld h, b
ld l, c
srl b
rr c
srl b
rr c
srl h
rr l
add hl, bc
ld a, [wBallXPos + 1]
sub $38
cp $30
ret nc
ld c, a
ld b, $0
sla c
sla c
add hl, bc
; fall through
asm_1ea6a: ; 0x1ea6a
ld bc, Data_f0000
add hl, bc
ld de, wBallXVelocity
ld a, BANK(Data_f0000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_f0000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
push bc
ld a, BANK(Data_f0000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_f0000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
bit 7, b
jr z, .asm_1eaa9
ld a, c
cpl
ld c, a
ld a, b
cpl
ld b, a
inc bc
.asm_1eaa9
pop hl
bit 7, h
jr z, .asm_1eab5
ld a, l
cpl
ld l, a
ld a, h
cpl
ld h, a
inc hl
.asm_1eab5
add hl, bc
sla l
rl h
ld a, h
cp $2
ret c
ld a, [wd804]
and a
ret nz
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
lb de, $00, $04
call PlaySoundEffect
ret
Func_1ead4: ; 0x1ead4
ld a, [hNumFramesDropped]
and $f
ret nz
ld bc, $0000
.asm_1eadc
push bc
ld hl, wIndicatorStates
add hl, bc
ld a, [hl]
cp $1
jr z, .asm_1eaf8
bit 7, [hl]
jr z, .asm_1eaf8
ld a, [hl]
res 7, a
ld hl, hNumFramesDropped
bit 4, [hl]
jr z, .asm_1eaf5
inc a
.asm_1eaf5
call Func_1eb41
.asm_1eaf8
pop bc
inc c
ld a, c
cp $2
jr nz, .asm_1eadc
ld a, [hNumFramesDropped]
and $f
ret nz
ld a, [wCurrentStage]
bit 0, a
ret z
ld bc, $0002
.asm_1eb0d
push bc
ld hl, wIndicatorStates
add hl, bc
ld a, [hl]
cp $1
jr z, .asm_1eb29
bit 7, [hl]
jr z, .asm_1eb29
ld a, [hl]
res 7, a
ld hl, hNumFramesDropped
bit 4, [hl]
jr z, .asm_1eb2b
inc a
inc a
jr .asm_1eb2b
.asm_1eb29
ld a, $0
.asm_1eb2b
push af
ld hl, wd648
add hl, bc
dec hl
dec hl
ld a, [hl]
ld d, a
pop af
add d
call Func_1eb41
pop bc
inc c
ld a, c
cp $5
jr nz, .asm_1eb0d
ret
Func_1eb41: ; 0x1eb41
push af
sla c
ld hl, Data_1eb61
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1eb4f
ld hl, Data_1ed51
.asm_1eb4f
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
pop af
sla a
ld c, a
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_1eb61)
call Func_10aa
ret
Data_1eb61:
dr $1eb61, $1ed51
Data_1ed51:
dr $1ed51, $1ef09
ResolveBlueStageForceFieldCollision: ; 0x1ef09
ld a, [wBlueStageForceFieldDirection]
cp $0 ; up direction
jp z, Func_1ef20
cp $1 ; right direction
jp z, Func_1ef4d
cp $2 ; down direction
jp z, Func_1ef7e
cp $3 ; left direction
jp z, Func_1efae
; fall through
; default to upward forcefield
Func_1ef20: ; 0x1ef20
ld a, [wBallYPos + 1]
sub $60
cp $30
ret nc
ld c, $0
ld b, a
ld h, b
ld l, c
srl b
rr c
srl b
rr c
srl h
rr l
add hl, bc
ld a, [wBallXPos + 1]
sub $38
cp $30
ret nc
ld c, a
ld b, $0
sla c
sla c
add hl, bc
jp Func_1efdc
Func_1ef4d: ; 0x1ef4d
ld a, [wBallXPos + 1]
sub $38
cp $30
ret nc
ld c, a
ld a, $30
sub c
ld c, $0
ld b, a
ld h, b
ld l, c
srl b
rr c
srl b
rr c
srl h
rr l
add hl, bc
ld a, [wBallYPos + 1]
sub $60
cp $30
ret nc
ld c, a
ld b, $0
sla c
sla c
add hl, bc
jp Func_1efdc
Func_1ef7e: ; 0x1ef7e
ld a, [wBallYPos + 1]
sub $60
cp $30
ret nc
ld c, a
ld a, $30
sub c
ld c, $0
ld b, a
ld h, b
ld l, c
srl b
rr c
srl b
rr c
srl h
rr l
add hl, bc
ld a, [wBallXPos + 1]
sub $38
cp $30
ret nc
ld c, a
ld b, $0
sla c
sla c
add hl, bc
jr Func_1efdc
Func_1efae: ; 0x1efae
ld a, [wBallXPos + 1]
sub $38
cp $30
ret nc
ld c, $0
ld b, a
ld h, b
ld l, c
srl b
rr c
srl b
rr c
srl h
rr l
add hl, bc
ld a, [wBallYPos + 1]
sub $60
cp $30
ret nc
ld c, a
ld a, $30
sub c
ld c, a
ld b, $0
sla c
sla c
add hl, bc
; fall through
Func_1efdc: ; 0x1efdc
ld a, [wBlueStageForceFieldDirection]
cp $0 ; up direction
jp z, Func_1eff3
cp $1 ; right direction
jp z, Func_1f0be
cp $2 ; down direction
jp z, Func_1f057
cp $3 ; left direction
jp z, Func_1f124
; fall through
; default to upward forcefield
Func_1eff3: ; 0x1eff3
ld bc, Data_ec000
add hl, bc
ld de, wBallXVelocity
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
push bc
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
bit 7, b
jr z, .asm_1f032
ld a, c
cpl
ld c, a
ld a, b
cpl
ld b, a
inc bc
.asm_1f032
pop hl
bit 7, h
jr z, .asm_1f03e
ld a, l
cpl
ld l, a
ld a, h
cpl
ld h, a
inc hl
.asm_1f03e
add hl, bc
sla l
rl h
ld a, h
cp $2
ret c
ld a, [wd804]
and a
ret nz
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
ret
Func_1f057: ; 0x1f057
ld bc, Data_ec000
add hl, bc
ld de, wBallXVelocity
bit 2, l
ret nz
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
push bc
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld c, a
ld a, [de]
sub c
ld [de], a
inc de
inc hl
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld b, a
ld a, [de]
sbc b
ld [de], a
inc de
inc hl
bit 7, b
jr z, .asm_1f099
ld a, c
cpl
ld c, a
ld a, b
cpl
ld b, a
inc bc
.asm_1f099
pop hl
bit 7, h
jr z, .asm_1f0a5
ld a, l
cpl
ld l, a
ld a, h
cpl
ld h, a
inc hl
.asm_1f0a5
add hl, bc
sla l
rl h
ld a, h
cp $2
ret c
ld a, [wd804]
and a
ret nz
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
ret
Func_1f0be: ; 0x1f0be
ld bc, Data_ec000
add hl, bc
ld de, wBallYVelocity
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc hl
push bc
dec de
dec de
dec de
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld c, a
ld a, [de]
sub c
ld [de], a
inc de
inc hl
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld b, a
ld a, [de]
sbc b
ld [de], a
inc de
inc hl
bit 7, b
jr z, .asm_1f0ff
ld a, c
cpl
ld c, a
ld a, b
cpl
ld b, a
inc bc
.asm_1f0ff
pop hl
bit 7, h
jr z, .asm_1f10b
ld a, l
cpl
ld l, a
ld a, h
cpl
ld h, a
inc hl
.asm_1f10b
add hl, bc
sla l
rl h
ld a, h
cp $2
ret c
ld a, [wd804]
and a
ret nz
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
ret
Func_1f124: ; 0x1f124
ld bc, Data_ec000
add hl, bc
ld de, wBallYVelocity
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld c, a
ld a, [de]
sub c
ld [de], a
inc de
inc hl
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld b, a
ld a, [de]
sbc b
ld [de], a
inc hl
push bc
dec de
dec de
dec de
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld c, a
ld a, [de]
add c
ld [de], a
inc de
inc hl
ld a, BANK(Data_ec000)
call ReadByteFromBank
ld b, a
ld a, [de]
adc b
ld [de], a
inc de
inc hl
bit 7, b
jr z, .asm_1f165
ld a, c
cpl
ld c, a
ld a, b
cpl
ld b, a
inc bc
.asm_1f165
pop hl
bit 7, h
jr z, .asm_1f171
ld a, l
cpl
ld l, a
ld a, h
cpl
ld h, a
inc hl
.asm_1f171
add hl, bc
sla l
rl h
ld a, h
cp $2
ret c
ld a, [wd804]
and a
ret nz
ld a, $5
ld [wd803], a
ld a, $8
ld [wd804], a
ret
Func_1f18a: ; 0x1f18a
ld a, [wd640]
cp $0
jr z, .asm_1f1b4
ld a, [wBlueStageForceFieldDirection]
sla a
ld c, a
ld b, $0
ld hl, Data_1f1b5
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_1f1a4
ld hl, Data_1f201
.asm_1f1a4
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld a, Bank(Data_1f1b5)
call Func_10aa
ld a, $0
ld [wd640], a
.asm_1f1b4
ret
Data_1f1b5:
dr $1f1b5, $1f201
Data_1f201:
dr $1f201, $1f261
Func_1f261: ; 0x1f261
call Func_1f27b
ret nc
; fall through
Func_1f265: ; 0x1f265
sla a
ld c, a
ld b, $0
ld hl, Data_1f2b9
add hl, bc
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, $7
ld de, LoadTileLists
call Func_10c5
ret
Func_1f27b: ; 0x1f27b
ld a, [wd624]
ld hl, wd625
cp [hl]
ret z
ld a, [wd626]
dec a
ld [wd626], a
jr nz, .asm_1f2a5
ld a, [wd625]
ld [wd624], a
cp $3
jr c, .asm_1f2a0
ld a, $1
ld [wd609], a
ld a, $3
ld [wd607], a
.asm_1f2a0
ld a, [wd624]
scf
ret
.asm_1f2a5
and $7
ret nz
ld a, [wd626]
bit 3, a
jr nz, .asm_1f2b4
ld a, [wd624]
scf
ret
.asm_1f2b4
ld a, [wd625]
scf
ret
Data_1f2b9:
dr $1f2b9, $1f2ed
Func_1f2ed: ; 0x1f2ed
xor a
ld [wd604], a
ld [wIndicatorStates + 4], a
ld [hFarCallTempA], a
ld a, Bank(Func_1e8f6) ; this is in the same bank...
ld hl, Func_1e8f6
call BankSwitch
ret
Func_1f2ff: ; 0x1f2ff
ld a, [wLeftAlleyCount]
cp $3
jr c, .asm_1f30b
ld a, $80
ld [wIndicatorStates + 2], a
.asm_1f30b
ld a, [wLeftAlleyCount]
cp $3
jr z, .asm_1f314
set 7, a
.asm_1f314
ld [wIndicatorStates], a
ld a, [wRightAlleyCount]
cp $2
jr c, .asm_1f323
ld a, $80
ld [wIndicatorStates + 3], a
.asm_1f323
ld a, [wRightAlleyCount]
cp $3
jr z, .asm_1f32c
set 7, a
.asm_1f32c
ld [wIndicatorStates + 1], a
ret
Func_1f330: ; 0x1f330
ld bc, $7f00
callba DrawTimer
call Func_1f395
call Func_1f3e1
call Func_1f408
call Func_1f428
callba DrawPinball
call Func_1f48f
call Func_1f4f8
ret
Func_1f35a: ; 0x1f35a
ld bc, $7f00
callba DrawTimer
callba DrawMonCaptureAnimation
call DrawAnimatedMon_BlueStage
call DrawPikachuSavers_BlueStage
callba DrawFlippers
callba DrawPinball
call Func_1f4a3
call Func_1f509
call Func_1f55e
ret
Func_1f395: ; 0x1f395
ld de, wd4cd
ld hl, Data_1f3cf
call Func_1f3ad
ld de, wd4d0
ld hl, Data_1f3d5
call Func_1f3ad
ld de, wd4d3
ld hl, Data_1f3db
; fall through
Func_1f3ad: ; 0x1f3ad
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [wd4d7]
sub [hl]
inc hl
jr z, .asm_1f3c4
ld a, $0
jr .asm_1f3c6
.asm_1f3c4
ld a, $1
.asm_1f3c6
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_1f3cf:
dr $1f3cf, $1f3d5
Data_1f3d5:
dr $1f3d5, $1f3db
Data_1f3db:
dr $1f3db, $1f3e1
Func_1f3e1: ; 0x1f3e1
ld a, $8a
ld hl, hSCX
sub [hl]
ld b, a
ld a, $53
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd50a]
srl a
srl a
ld e, a
ld d, $0
ld hl, Data_1f402
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_1f402:
dr $1f402, $1f408
Func_1f408: ; 0x1f408
ld a, $18
ld hl, hSCX
sub [hl]
ld b, a
ld a, $5f
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd633]
ld e, a
ld d, $0
ld hl, Data_1f425
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_1f425:
dr $1f425, $1f428
Func_1f428: ; 0x1f428
ld a, $70
ld hl, hSCX
sub [hl]
ld b, a
ld a, $59
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd638]
ld e, a
ld d, $0
ld hl, Data_1f445
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_1f445:
dr $1f445, $1f448
DrawPikachuSavers_BlueStage: ; 0x1f448
ld a, [hSCX]
ld d, a
ld a, [hSCY]
ld e, a
ld a, [wd51d]
and a
ld a, [wd518]
jr z, .asm_1f473
ld a, [wd51c]
and a
jr nz, .asm_1f469
ld a, [hNumFramesDropped]
srl a
srl a
srl a
and $1
jr .asm_1f473
.asm_1f469
ld a, [wd4b4]
cp $50
ld a, $1
jr nc, .asm_1f473
xor a
.asm_1f473
sla a
ld c, a
ld b, $0
ld hl, PikachuSaverOAMOffsets_BlueStage
add hl, bc
ld a, [hli]
sub d
ld b, a
ld a, [hli]
sub e
ld c, a
ld a, [wPikachuSaverAnimationFrame]
add $e
call LoadOAMData
ret
PikachuSaverOAMOffsets_BlueStage:
dw $7E0F
dw $7E92
Func_1f48f: ; 0x1f48f
ld a, [wd551]
and a
ret nz
ld a, [hNumFramesDropped]
bit 4, a
ret z
ld de, wIndicatorStates + 5
ld hl, Data_1f4ce
ld b, $6
jr asm_1f4b5
Func_1f4a3: ; 0x1f4a3
ld a, [wd551]
and a
ret nz
ld a, [hNumFramesDropped]
bit 4, a
ret z
ld de, wIndicatorStates + 11
ld hl, Data_1f4e0
ld b, $8
asm_1f4b5:
push bc
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [de]
and a
ld a, [hli]
call nz, LoadOAMData
pop bc
inc de
dec b
jr nz, asm_1f4b5
ret
Data_1f4ce:
dr $1f4ce, $1f4e0
Data_1f4e0:
dr $1f4e0, $1f4f8
Func_1f4f8: ; 0x1f4f8
ld a, [wd551]
and a
ret z
ld de, wd566
ld hl, Data_1f53a
ld b, $c
ld c, $47
jr asm_1f518
Func_1f509: ; 0x1f509
ld a, [wd551]
and a
ret z
ld de, wd572
ld hl, Data_1f552
ld b, $6
ld c, $40
asm_1f518: ; 0x1f518
push bc
ld a, [de]
add c
cp c
push af
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [hNumFramesDropped]
and $e
jr nz, .asm_1f530
dec c
.asm_1f530
pop af
call nz, LoadOAMData
pop bc
inc de
dec b
jr nz, asm_1f518
ret
Data_1f53a:
dr $1f53a, $1f552
Data_1f552:
dr $1f552, $1f55e
Func_1f55e: ; 0x1f55e
ld a, [wd604]
and a
ret z
ld a, [wd606]
inc a
ld [wd606], a
ld a, $40
ld hl, hSCX
sub [hl]
ld b, a
ld a, $1
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd606]
srl a
srl a
srl a
and $3
add $4f
cp $52
call nz, LoadOAMData
ret
DrawAnimatedMon_BlueStage: ; 0x1f58b
ld a, [wWildMonIsHittable]
and a
ret z
ld a, $50
ld hl, hSCX
sub [hl]
ld b, a
ld a, $3e
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd5bd]
ld e, a
ld d, $0
ld hl, AnimatedMonOAMIds_BlueStage
add hl, de
ld a, [hl]
call LoadOAMData
ret
AnimatedMonOAMIds_BlueStage:
db $26, $27, $28, $29, $2A, $2B, $2C, $2D, $2E, $2F, $30, $31
SECTION "bank8", ROMX, BANK[$8]
Func_20000: ; 0x20000
ld a, [wd54c]
cp $4
jp z, Func_20230
cp $c
jp z, Func_202a8
cp $5
jp z, Func_202b2
cp $0
jr z, .asm_20018
scf
ret
.asm_20018
call Func_201f2
ld a, [wd54d]
call CallInFollowingTable
PointerTable_20021: ; 0x20021
padded_dab Func_20041
padded_dab Func_2005f
padded_dab Func_2006b
padded_dab Func_200a3
padded_dab Func_200d3
padded_dab Func_20193
padded_dab CapturePokemonRedStage
padded_dab Func_201ce
Func_20041: ; 0x20041
ld a, [wd5b6]
cp $18
jr nz, .asm_2005d
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_2005d
ld hl, wd54d
inc [hl]
ld a, $14
ld [wd54e], a
ld a, $5
ld [wd54f], a
.asm_2005d
scf
ret
Func_2005f: ; 0x2005f
callba Func_10648
scf
ret
Func_2006b: ; 0x2006b
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_20098
call Func_1130
jr nz, .asm_200a1
callba Func_10414
callba Func_10362
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_10301
.asm_20098
ld a, $1
ld [wd5c6], a
ld hl, wd54d
inc [hl]
.asm_200a1
scf
ret
Func_200a3: ; 0x200a3
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_200af
call Func_1130
jr nz, .asm_200d1
.asm_200af
callba ShowAnimatedWildMon
callba Func_10732
callba Func_10464
ld hl, wd54d
inc [hl]
.asm_200d1
scf
ret
Func_200d3: ; 0x200d3
ld a, [wd5be]
dec a
ld [wd5be], a
jr z, .asm_200e6
ld a, [wd5c4]
inc a
ld [wd5c4], a
and $3
ret nz
.asm_200e6
ld a, [wBallHitWildMon]
and a
jp z, .asm_20167
xor a
ld [wBallHitWildMon], a
ld a, [wd5c3]
ld [wd5be], a
xor a
ld [wd5c4], a
ld a, [wCurrentCatchEmMon]
cp MEW - 1
jr nz, .notMew
ld a, [wNumMewHitsLow]
inc a
ld [wNumMewHitsLow], a
jr nz, .asm_20116
.notMew
ld a, [wNumMonHits]
cp $3
jr z, .hitMonThreeTimes
inc a
ld [wNumMonHits], a
.asm_20116
ld bc, ThreeHundredThousandPoints
callba AddBigBCD6FromQueue
ld bc, $0030
ld de, $0000
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5e9
ld de, Data_2a2a
call Func_3372
pop de
pop bc
ld hl, wd5e4
ld de, HitText
call Func_3357
ld a, [wNumMonHits]
callba Func_10611
ld c, $2
jr .asm_2018a
.hitMonThreeTimes
xor a
ld [wd57e], a
ld a, $1
ld [wd57f], a
ld hl, wd54d
inc [hl]
ld c, $2
jr .asm_2018a
.asm_20167
ld a, [wd5be]
and a
ret nz
ld a, [wd5bc]
ld c, a
ld a, [wd5bd]
sub c
cp $1
ld c, $0
jr nc, .asm_2017c
ld c, $1
.asm_2017c
ld b, $0
ld hl, wd5c1
add hl, bc
ld a, [hl]
ld [wd5be], a
xor a
ld [wd5c4], a
.asm_2018a
ld a, [wd5bc]
add c
ld [wd5bd], a
scf
ret
Func_20193: ; 0x20193
ld a, [wd580]
and a
jr z, .asm_2019e
xor a
ld [wd580], a
ret
.asm_2019e
callba BallCaptureInit
ld hl, wd54d
inc [hl]
callba Func_106b6
callba AddCaughtPokemonToParty
scf
ret
CapturePokemonRedStage: ; 0x201c2
callba CapturePokemon
scf
ret
Func_201ce: ; 0x201ce
ld a, [wd5ca]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
callba RestoreBallSaverAfterCatchEmMode
callba Func_10157
ld de, $0001
call PlaySong
scf
ret
Func_201f2: ; 0x201f2
callba Func_107f8
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $7
ld [wd54d], a
; Automatically set Mew as caught, since you can't possibly catch it
ld a, [wCurrentCatchEmMon]
cp MEW - 1
jr nz, .asm_2021b
callba SetPokemonOwnedFlag
.asm_2021b
callba Func_86d2
callba Func_106a6
ret
Func_20230: ; 0x20230
ld a, [wd5b6]
cp $18
jr z, .asm_2029d
sla a
ld c, a
ld b, $0
ld hl, wd586
add hl, bc
ld d, $4
.asm_20242
ld a, $1
ld [hli], a
inc hl
ld a, l
cp wd5b6 % $100
jr z, .asm_2024e
dec d
jr nz, .asm_20242
.asm_2024e
ld a, [wd5b6]
add $4
cp $18
jr c, .master_loop9
ld a, $18
.master_loop9
ld [wd5b6], a
cp $18
jr nz, .asm_20264
xor a
ld [wIndicatorStates + 9], a
.asm_20264
callba Func_10184
ld bc, OneHundredThousandPoints
callba AddBigBCD6FromQueue
ld bc, $0010
ld de, $0000
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5e9
ld de, Data_2a3d
call Func_3372
pop de
pop bc
ld hl, wd5e4
ld de, FlippedText
call Func_3357
.asm_2029d
ld bc, $0001
ld de, $0000
call Func_3538
scf
ret
Func_202a8: ; 0x202a8
ld bc, $0000
ld de, $1000
call Func_3538
ret
Func_202b2: ; 0x202b2
ld bc, $0005
ld de, $0000
call Func_3538
ret
Func_202bc: ; 0x202bc
ld a, [wd54c]
cp $4
jp z, Func_204f1
cp $c
jp z, Func_20569
cp $f
jp z, Func_20573
cp $e
jp z, Func_2057a
cp $0
jr z, .asm_202d9
scf
ret
.asm_202d9
call Func_204b3
ld a, [wd54d]
call CallInFollowingTable
PointerTable_202e2: ; 0x202e2
padded_dab Func_20302
padded_dab Func_20320
padded_dab Func_2032c
padded_dab Func_20364
padded_dab Func_20394
padded_dab Func_20454
padded_dab CapturePokemonBlueStage
padded_dab Func_2048f
Func_20302: ; 0x20302
ld a, [wd5b6]
cp $18
jr nz, .asm_2031e
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_2031e
ld hl, wd54d
inc [hl]
ld a, $14
ld [wd54e], a
ld a, $5
ld [wd54f], a
.asm_2031e
scf
ret
Func_20320: ; 0x20320
callba Func_10648
scf
ret
Func_2032c: ; 0x2032c
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_20333
call Func_1130
jr nz, .asm_20362
callba Func_10414
callba Func_10362
ld a, [hGameBoyColorFlag]
and a
callba nz, Func_10301
.asm_20333
ld a, $1
ld [wd5c6], a
ld hl, wd54d
inc [hl]
.asm_20362
scf
ret
Func_20364: ; 0x20364
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_20370
call Func_1130
jr nz, .asm_20392
.asm_20370
callba ShowAnimatedWildMon
callba Func_10732
callba Func_10464
ld hl, wd54d
inc [hl]
.asm_20392
scf
ret
Func_20394: ; 0x20394
ld a, [wd5be]
dec a
ld [wd5be], a
jr z, .asm_203a7
ld a, [wd5c4]
inc a
ld [wd5c4], a
and $3
ret nz
.asm_203a7
ld a, [wBallHitWildMon]
and a
jp z, .asm_20428
xor a
ld [wBallHitWildMon], a
ld a, [wd5c3]
ld [wd5be], a
xor a
ld [wd5c4], a
ld a, [wCurrentCatchEmMon]
cp MEW - 1
jr nz, .notMew
ld a, [wNumMewHitsLow]
inc a
ld [wNumMewHitsLow], a
jr nz, .asm_203d7
.notMew
ld a, [wNumMonHits]
cp $3
jr z, .asm_20417
inc a
ld [wNumMonHits], a
.asm_203d7
ld bc, ThreeHundredThousandPoints
callba AddBigBCD6FromQueue
ld bc, $0030
ld de, $0000
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5e9
ld de, Data_2a2a
call Func_3372
pop de
pop bc
ld hl, wd5e4
ld de, HitText
call Func_3357
ld a, [wNumMonHits]
callba Func_10611
ld c, $2
jr .asm_2044b
.asm_20417
xor a
ld [wd57e], a
ld a, $1
ld [wd57f], a
ld hl, wd54d
inc [hl]
ld c, $2
jr .asm_2044b
.asm_20428
ld a, [wd5be]
and a
ret nz
ld a, [wd5bc]
ld c, a
ld a, [wd5bd]
sub c
cp $1
ld c, $0
jr nc, .asm_2043d
ld c, $1
.asm_2043d
ld b, $0
ld hl, wd5c1
add hl, bc
ld a, [hl]
ld [wd5be], a
xor a
ld [wd5c4], a
.asm_2044b
ld a, [wd5bc]
add c
ld [wd5bd], a
scf
ret
Func_20454: ; 0x20454
ld a, [wd580]
and a
jr z, .asm_2045f
xor a
ld [wd580], a
ret
.asm_2045f
callba BallCaptureInit
ld hl, wd54d
inc [hl]
callba Func_106b6
callba AddCaughtPokemonToParty
scf
ret
CapturePokemonBlueStage: ; 0x20483
callba CapturePokemon
scf
ret
Func_2048f: ; 0x2048f
ld a, [wd5ca]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
callba RestoreBallSaverAfterCatchEmMode
callba Func_10157
ld de, $0001
call PlaySong
scf
ret
Func_204b3: ; 0x204b3
callba Func_107f8
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $7
ld [wd54d], a
; Automatically set Mew as caught, since you can't possibly catch it
ld a, [wCurrentCatchEmMon]
cp MEW - 1
jr nz, .notMew
callba SetPokemonOwnedFlag
.notMew
callba Func_86d2
callba Func_106a6
ret
Func_204f1: ; 0x204f1
ld a, [wd5b6]
cp $18
jr z, .asm_2055e
sla a
ld c, a
ld b, $0
ld hl, wd586
add hl, bc
ld d, $4
.asm_20503
ld a, $1
ld [hli], a
inc hl
ld a, l
cp wd5b6 % $100
jr z, .asm_2050f
dec d
jr nz, .asm_20503
.asm_2050f
ld a, [wd5b6]
add $4
cp $18
jr c, .asm_2051a
ld a, $18
.asm_2051a
ld [wd5b6], a
cp $18
jr nz, .asm_20525
xor a
ld [wIndicatorStates + 9], a
.asm_20525
callba Func_10184
ld bc, OneHundredThousandPoints
callba AddBigBCD6FromQueue
ld bc, $0010
ld de, $0000
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5e9
ld de, Data_2a3d
call Func_3372
pop de
pop bc
ld hl, wd5e4
ld de, FlippedText
call Func_3357
.asm_2055e
ld bc, $0001
ld de, $0000
call Func_3538
scf
ret
Func_20569: ; 0x20569
ld bc, $0000
ld de, $1000
call Func_3538
ret
Func_20573: ; 0x20573
ld bc, $0005
ld de, $0000
ret
Func_2057a: ; 0x2057a
ld bc, $0005
ld de, $0000
ret
Func_20581: ; 0x20581
ld a, [wd54c]
cp $4
jp z, Func_2080f
cp $3
jp z, Func_20839
cp $5
jp z, Func_2085a
cp $6
jp z, Func_20887
cp $7
jp z, Func_208a8
cp $8
jp z, Func_208c9
cp $9
jp z, Func_208ea
cp $a
jp z, Func_2090b
cp $b
jp z, Func_2092c
cp $c
jp z, Func_2094d
cp $d
jp z, Func_20b02
cp $2
jp z, Func_20a65
cp $1
jp z, Func_20a82
cp $0
jr z, .asm_205cb
scf
ret
.asm_205cb
call Func_2077b
ld a, [wd54d]
call CallInFollowingTable
PointerTable_205d4: ; 0x205d4
padded_dab Func_205e0
padded_dab Func_2070b
padded_dab Func_20757
Func_205e0: ; 0x205e0
ld a, [wCurrentStage]
ld b, a
ld a, [wd578]
and a
ret z
dec a
bit 0, b
jr z, .asm_205f0
add $c
.asm_205f0
ld c, a
ld b, $0
ld hl, wd566
add hl, bc
ld a, [hl]
and a
ret z
xor a
ld [hl], a
ld [wd551], a
call Func_20651
ld a, [wd558]
ld [wIndicatorStates + 2], a
ld a, [wd559]
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld a, [wCurrentStage]
bit 0, a
callba nz, Func_14135
ld bc, OneMillionPoints
callba AddBigBCD6FromQueue
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld de, YeahYouGotItText
ld hl, wd5cc
call LoadTextHeader
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_2064f
ld a, BANK(StageRedFieldBottomOBJPalette6)
ld hl, StageRedFieldBottomOBJPalette6
ld de, $0070
ld bc, $0008
call Func_7dc
.asm_2064f
scf
ret
Func_20651: ; 0x20651
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_20681
ld a, [wCurrentEvolutionType]
dec a
ld c, a
ld b, $0
swap c
sla c
ld hl, Data_d8e80
add hl, bc
ld a, [wd554]
ld c, a
ld b, $0
swap c
sla c
push hl
ld hl, vTilesSH tile $2e
add hl, bc
ld d, h
ld e, l
pop hl
ld bc, $0020
ld a, BANK(Data_d8e80)
call LoadVRAMData
.asm_20681
ld a, [wd554]
inc a
ld [wd554], a
cp $1
jr nz, .asm_20693
lb de, $07, $28
call PlaySoundEffect
ret
.asm_20693
cp $2
jr nz, .asm_2069e
lb de, $07, $44
call PlaySoundEffect
ret
.asm_2069e
cp $3
ret nz
lb de, $07, $45
call PlaySoundEffect
ld a, $1
ld [wd604], a
ld a, $80
ld [wIndicatorStates + 4], a
xor a
ld [wIndicatorStates + 9], a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld [wIndicatorStates + 8], a
ld [wIndicatorStates + 13], a
ld [wIndicatorStates + 14], a
ld [wIndicatorStates + 11], a
ld [wIndicatorStates + 12], a
ld [wIndicatorStates + 6], a
ld [wIndicatorStates + 7], a
ld [wd558], a
ld [wd559], a
ld a, [wCurrentStage]
bit 0, a
ret z
ld a, BANK(StageSharedBonusSlotGlowGfx)
ld hl, StageSharedBonusSlotGlowGfx + $60
ld de, vTilesOB tile $20
ld bc, $00e0
call LoadVRAMData
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_20700
ld a, BANK(StageRedFieldBottomOBJPalette7)
ld hl, StageRedFieldBottomOBJPalette7
ld de, $0078
ld bc, $0008
call Func_7dc
.asm_20700
callba Func_16425
ret
Func_2070b: ; 0x2070b
callba RestoreBallSaverAfterCatchEmMode
callba Func_10ca5
callba Func_10ac8
ld de, $0001
call PlaySong
ld hl, wd629
call Func_e4a
callba SetPokemonOwnedFlag
ld a, [wd624]
cp $3
ret z
add $2
cp $3
jr c, .asm_2074d
ld a, $3
.asm_2074d
ld [wd625], a
ld a, $80
ld [wd626], a
scf
ret
Func_20757: ; 0x20757
ld a, [wd5ca]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
callba RestoreBallSaverAfterCatchEmMode
callba Func_10ac8
ld de, $0001
call PlaySong
scf
ret
Func_2077b: ; 0x2077b
ld hl, wd556
ld a, [hli]
ld c, a
ld b, [hl]
or b
jr z, .asm_2078e
dec bc
ld a, b
ld [hld], a
ld [hl], c
or c
jr nz, .asm_2078e
call Func_20a55
.asm_2078e
callba Func_107f8
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $2
ld [wd54d], a
xor a
ld [wd604], a
ld hl, wIndicatorStates
ld [wIndicatorStates + 4], a
ld [wIndicatorStates + 9], a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld [wIndicatorStates + 8], a
ld [wIndicatorStates + 13], a
ld [wIndicatorStates + 14], a
ld [wIndicatorStates + 11], a
ld [wIndicatorStates + 12], a
ld [wIndicatorStates + 6], a
ld [wIndicatorStates + 7], a
ld [wd558], a
ld [wd559], a
ld [wd551], a
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_207f5
callba Func_14135
callba Func_16425
.asm_207f5
callba Func_86d2
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, EvolutionFailedText
call LoadTextHeader
ret
Func_2080f: ; 0x2080f
ld bc, $0001
ld de, $5000
call Func_3538
ld a, [wd551]
and a
jr nz, .asm_20837
ld a, [wIndicatorStates + 9]
and a
jr z, .asm_20837
xor a
ld [wIndicatorStates + 9], a
ld a, [wd55c]
and a
ld a, $0
ld [wd55c], a
jp nz, Func_20977
jp Func_209eb
.asm_20837
scf
ret
Func_20839: ; 0x20839
ld a, [wd551]
and a
jr nz, .asm_20858
ld a, [wIndicatorStates + 2]
and a
jr z, .asm_20858
xor a
ld [wIndicatorStates + 2], a
ld a, [wd563]
and a
ld a, $0
ld [wd563], a
jp nz, Func_20977
jp Func_209eb
.asm_20858
scf
ret
Func_2085a: ; 0x2085a
ld bc, $0007
ld de, $5000
call Func_3538
ld a, [wd551]
and a
jr nz, .asm_20885
ld a, [wIndicatorStates + 3]
and a
jr z, .asm_20885
xor a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld a, [wd562]
and a
ld a, $0
ld [wd562], a
jp nz, Func_20977
jp Func_209eb
.asm_20885
scf
ret
Func_20887: ; 0x20887
ld a, [wd551]
and a
jr nz, .asm_208a6
ld a, [wIndicatorStates + 8]
and a
jr z, .asm_208a6
xor a
ld [wIndicatorStates + 8], a
ld a, [wd561]
and a
ld a, $0
ld [wd561], a
jp nz, Func_20977
jp Func_209eb
.asm_208a6
scf
ret
Func_208a8: ; 0x208a8
ld a, [wd551]
and a
jr nz, .asm_208c7
ld a, [wIndicatorStates + 13]
and a
jr z, .asm_208c7
xor a
ld [wIndicatorStates + 13], a
ld a, [wd55d]
and a
ld a, $0
ld [wd55d], a
jp nz, Func_20977
jp Func_209eb
.asm_208c7
scf
ret
Func_208c9: ; 0x208c9
ld a, [wd551]
and a
jr nz, .asm_208e8
ld a, [wIndicatorStates + 14]
and a
jr z, .asm_208e8
xor a
ld [wIndicatorStates + 14], a
ld a, [wd55e]
and a
ld a, $0
ld [wd55e], a
jp nz, Func_20977
jp Func_209eb
.asm_208e8
scf
ret
Func_208ea: ; 0x208ea
ld a, [wd551]
and a
jr nz, .asm_20909
ld a, [wIndicatorStates + 11]
and a
jr z, .asm_20909
xor a
ld [wIndicatorStates + 11], a
ld a, [wd55f]
and a
ld a, $0
ld [wd55f], a
jp nz, Func_20977
jp Func_209eb
.asm_20909
scf
ret
Func_2090b: ; 0x2090b
ld a, [wd551]
and a
jr nz, .asm_2092a
ld a, [wIndicatorStates + 12]
and a
jr z, .asm_2092a
xor a
ld [wIndicatorStates + 12], a
ld a, [wd560]
and a
ld a, $0
ld [wd560], a
jp nz, Func_20977
jp Func_209eb
.asm_2092a
scf
ret
Func_2092c: ; 0x2092c
ld a, [wd551]
and a
jr nz, .asm_2094b
ld a, [wIndicatorStates + 6]
and a
jr z, .asm_2094b
xor a
ld [wIndicatorStates + 6], a
ld a, [wd565]
and a
ld a, $0
ld [wd565], a
jp nz, Func_20977
jp Func_209eb
.asm_2094b
scf
ret
Func_2094d: ; 0x2094d
ld bc, $0000
ld de, $1500
call Func_3538
ld a, [wd551]
and a
jr nz, .asm_20975
ld a, [wIndicatorStates + 7]
and a
jr z, .asm_20975
xor a
ld [wIndicatorStates + 7], a
ld a, [wd564]
and a
ld a, $0
ld [wd564], a
jp nz, Func_20977
jp Func_209eb
.asm_20975
scf
ret
Func_20977: ; 0x20977
lb de, $07, $46
call PlaySoundEffect
call Func_20af5
ld a, [wCurrentEvolutionType]
ld [hl], a
ld [wd551], a
ld a, [wIndicatorStates + 2]
ld [wd558], a
ld a, [wIndicatorStates + 3]
ld [wd559], a
xor a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld a, [wCurrentStage]
bit 0, a
callba nz, Func_14135
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_209bf
ld a, BANK(Data_dd188)
ld hl, Data_dd188
ld de, $0070
ld bc, $0010
call Func_7dc
.asm_209bf
ld bc, ThreeHundredThousandPoints
callba AddBigBCD6FromQueue
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld a, [wCurrentEvolutionType]
dec a
ld c, a
ld b, $0
sla c
ld hl, EvolutionTypeGetTextPointers
add hl, bc
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
ld hl, wd5cc
call LoadTextHeader
scf
ret
Func_209eb: ; 0x209eb
lb de, $07, $47
call PlaySoundEffect
ld a, $1
ld [wd551], a
ld a, $80
ld [wIndicatorStates], a
ld [wIndicatorStates + 1], a
ld a, [wIndicatorStates + 2]
ld [wd558], a
ld a, [wIndicatorStates + 3]
ld [wd559], a
xor a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld a, [wCurrentStage]
bit 0, a
callba nz, Func_14135
ld a, $58
ld [wd556], a
ld a, $2
ld [wd557], a
ld bc, ThreeHundredThousandPoints
callba AddBigBCD6FromQueue
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld a, [wCurrentEvolutionType]
cp EVO_EXPERIENCE
ld de, PokemonIsTiredText
jr z, .asm_20a50
ld de, ItemNotFoundText
.asm_20a50
call LoadTextHeader
scf
ret
Func_20a55: ; 0x20a55
ld a, [wd551]
and a
jr z, .asm_20a63
ld a, [wIndicatorStates + 1]
and a
jr z, .asm_20a63
jr asm_20a9f
.asm_20a63
scf
ret
Func_20a65: ; 0x20a65
ld a, [wd551]
and a
jr z, .asm_20a80
ld a, [wIndicatorStates + 1]
and a
jr z, .asm_20a80
ld bc, TenThousandPoints
callba AddBigBCD6FromQueue
jr asm_20a9f
.asm_20a80
scf
ret
Func_20a82: ; 0x20a82
ld a, [wd551]
and a
jr z, .asm_20a9d
ld a, [wIndicatorStates]
and a
jr z, .asm_20a9d
ld bc, TenThousandPoints
callba AddBigBCD6FromQueue
jr asm_20a9f
.asm_20a9d
scf
ret
asm_20a9f:
xor a
ld [wIndicatorStates], a
ld [wIndicatorStates + 1], a
ld [wd551], a
ld a, [wd558]
ld [wIndicatorStates + 2], a
ld a, [wd559]
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld a, [wCurrentStage]
bit 0, a
callba nz, Func_14135
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_20ada
ld a, BANK(StageRedFieldBottomOBJPalette6)
ld hl, StageRedFieldBottomOBJPalette6
ld de, $0070
ld bc, $0008
call Func_7dc
.asm_20ada
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld a, [wCurrentEvolutionType]
cp EVO_EXPERIENCE
ld de, PokemonRecoveredText
jr z, .asm_20aed
ld de, TryNextPlaceText
.asm_20aed
ld hl, wd5cc
call LoadTextHeader
scf
ret
Func_20af5: ; 0x20af5
ld a, $11
call Func_a21
ld c, a
ld b, $0
ld hl, wd566
add hl, bc
ret
Func_20b02: ; 0x20b02
ld a, [wCurrentEvolutionMon]
cp $ff
jr nz, .asm_20b0c
ld a, [wCurrentCatchEmMon]
.asm_20b0c
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_20b18
inc b
.asm_20b18
push bc
ld hl, MonBillboardPicPointers
add hl, bc
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
inc hl
ld c, a
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
inc hl
ld b, a
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
ld h, b
ld l, c
ld de, vTilesSH tile $10
ld bc, $0180
call LoadOrCopyVRAMData
pop bc
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_20b80
push bc
ld hl, MonBillboardPaletteMapPointers
add hl, bc
ld a, Bank(MonBillboardPaletteMapPointers)
call ReadByteFromBank
inc hl
ld e, a
ld a, Bank(MonBillboardPaletteMapPointers)
call ReadByteFromBank
inc hl
ld d, a
ld a, Bank(MonBillboardPaletteMapPointers)
call ReadByteFromBank
hlCoord 7, 4, vBGMap
call LoadBillboardPaletteMap
pop bc
ld hl, MonBillboardPalettePointers
add hl, bc
ld a, Bank(MonBillboardPalettePointers)
call ReadByteFromBank
inc hl
ld e, a
ld a, Bank(MonBillboardPalettePointers)
call ReadByteFromBank
inc hl
ld d, a
ld a, Bank(MonBillboardPalettePointers)
call ReadByteFromBank
ld bc, $10b0
ld hl, rBGPI
call Func_8e1
.asm_20b80
callba Func_10e0a
call Func_3475
ld de, $0000
call PlaySong
rst AdvanceFrame
lb de, $2d, $26
call PlaySoundEffect
callba Func_10825
call Func_3475
ld a, $1
ld [wd54d], a
scf
ret
Func_20bae: ; 0x20bae
ld a, [wd54c]
cp $4
jp z, Func_20e34
cp $1
jp z, Func_21089
cp $e
jp z, Func_20e5e
cp $f
jp z, Func_20e82
cp $7
jp z, Func_20ea6
cp $8
jp z, Func_20ec7
cp $9
jp z, Func_20ee8
cp $a
jp z, Func_20f09
cp $b
jp z, Func_20f2a
cp $c
jp z, Func_20f4b
cp $d
jp z, Func_2112a
cp $2
jp z, Func_2105c
cp $0
jr z, .asm_20bf3
scf
ret
.asm_20bf3
call Func_20da0
ld a, [wd54d]
call CallInFollowingTable
PointerTable_20bfc: ; 0x20bfc
padded_dab Func_20c08
padded_dab Func_20d30
padded_dab Func_20d7c
Func_20c08: ; 0x20c08
ld a, [wCurrentStage]
ld b, a
ld a, [wd578]
and a
ret z
dec a
bit 0, b
jr z, .asm_20c18
add $c
.asm_20c18
ld c, a
ld b, $0
ld hl, wd566
add hl, bc
ld a, [hl]
and a
ret z
xor a
ld [hl], a
ld [wd551], a
call Func_20c76
ld a, [wd558]
ld [wIndicatorStates], a
ld a, [wd559]
ld [wIndicatorStates + 3], a
ld a, [wCurrentStage]
bit 0, a
callba nz, Func_1c2cb
ld bc, OneMillionPoints
callba AddBigBCD6FromQueue
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld de, YeahYouGotItText
ld hl, wd5cc
call LoadTextHeader
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_20c74
ld a, BANK(StageBlueFieldBottomOBJPalette6)
ld hl, StageBlueFieldBottomOBJPalette6
ld de, $0070
ld bc, $0008
call Func_7dc
.asm_20c74
scf
ret
Func_20c76: ; 0x20c76
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_20ca6
ld a, [wCurrentEvolutionType]
dec a
ld c, a
ld b, $0
swap c
sla c
ld hl, Data_d8e80
add hl, bc
ld a, [wd554]
ld c, a
ld b, $0
swap c
sla c
push hl
ld hl, vTilesSH tile $2e
add hl, bc
ld d, h
ld e, l
pop hl
ld bc, $0020
ld a, BANK(Data_d8e80)
call LoadVRAMData
.asm_20ca6
ld a, [wd554]
inc a
ld [wd554], a
cp $1
jr nz, .asm_20cb8
lb de, $07, $28
call PlaySoundEffect
ret
.asm_20cb8
cp $2
jr nz, .asm_20cc3
lb de, $07, $44
call PlaySoundEffect
ret
.asm_20cc3
cp $3
ret nz
lb de, $07, $45
call PlaySoundEffect
ld a, $1
ld [wd604], a
ld a, $80
ld [wIndicatorStates + 4], a
xor a
ld [wIndicatorStates + 9], a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 8], a
ld [wIndicatorStates + 13], a
ld [wIndicatorStates + 14], a
ld [wIndicatorStates + 11], a
ld [wIndicatorStates + 12], a
ld [wIndicatorStates + 10], a
ld [wIndicatorStates + 6], a
ld [wIndicatorStates + 7], a
ld [wd558], a
ld [wd559], a
ld a, [wCurrentStage]
bit 0, a
ret z
ld a, BANK(StageSharedBonusSlotGlowGfx)
ld hl, StageSharedBonusSlotGlowGfx + $60
ld de, vTilesOB tile $20
ld bc, $00e0
call LoadVRAMData
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_20d25
ld a, BANK(StageBlueFieldBottomOBJPalette7)
ld hl, StageBlueFieldBottomOBJPalette7
ld de, $0078
ld bc, $0008
call Func_7dc
.asm_20d25
callba Func_1e8f6
ret
Func_20d30: ; 0x20d30
callba RestoreBallSaverAfterCatchEmMode
callba Func_10ca5
callba Func_10ac8
ld de, $0001
call PlaySong
ld hl, wd629
call Func_e4a
callba SetPokemonOwnedFlag
ld a, [wd624]
cp $3
ret z
add $2
cp $3
jr c, .asm_20d72
ld a, $3
.asm_20d72
ld [wd625], a
ld a, $80
ld [wd626], a
scf
ret
Func_20d7c: ; 0x20d7c
ld a, [wd5ca]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
callba RestoreBallSaverAfterCatchEmMode
callba Func_10ac8
ld de, $0001
call PlaySong
scf
ret
Func_20da0: ; 0x20da0
ld hl, wd556
ld a, [hli]
ld c, a
ld b, [hl]
or b
jr z, .asm_20db3
dec bc
ld a, b
ld [hld], a
ld [hl], c
or c
jr nz, .asm_20db3
call Func_21079
.asm_20db3
callba Func_107f8
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $2
ld [wd54d], a
xor a
ld [wd604], a
ld hl, wIndicatorStates
ld [wIndicatorStates + 4], a
ld [wIndicatorStates + 9], a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 8], a
ld [wIndicatorStates + 13], a
ld [wIndicatorStates + 14], a
ld [wIndicatorStates + 11], a
ld [wIndicatorStates + 12], a
ld [wIndicatorStates + 10], a
ld [wIndicatorStates + 6], a
ld [wIndicatorStates + 7], a
ld [wd558], a
ld [wd559], a
ld [wd551], a
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_20e1a
callba Func_1c2cb
callba Func_1e8f6
.asm_20e1a
callba Func_86d2
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, EvolutionFailedText
call LoadTextHeader
ret
Func_20e34: ; 0x20e34
ld bc, $0001
ld de, $5000
call Func_3538
ld a, [wd551]
and a
jr nz, .asm_20e5c
ld a, [wIndicatorStates + 9]
and a
jr z, .asm_20e5c
xor a
ld [wIndicatorStates + 9], a
ld a, [wd55c]
and a
ld a, $0
ld [wd55c], a
jp nz, Func_20f75
jp Func_20fef
.asm_20e5c
scf
ret
Func_20e5e: ; 0x20e5e
ld a, [wd551]
and a
jr nz, .asm_20e80
ld a, [wIndicatorStates + 3]
and a
jr z, .asm_20e80
xor a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld a, [wd562]
and a
ld a, $0
ld [wd562], a
jp nz, Func_20f75
jp Func_20fef
.asm_20e80
scf
ret
Func_20e82: ; 0x20e82
ld a, [wd551]
and a
jr nz, .asm_20ea4
ld a, [wIndicatorStates + 8]
and a
jr z, .asm_20ea4
xor a
ld [wIndicatorStates + 8], a
ld [wIndicatorStates + 2], a
ld a, [wd561]
and a
ld a, $0
ld [wd561], a
jp nz, Func_20f75
jp Func_20fef
.asm_20ea4
scf
ret
Func_20ea6: ; 0x20ea6
ld a, [wd551]
and a
jr nz, .asm_20ec5
ld a, [wIndicatorStates + 13]
and a
jr z, .asm_20ec5
xor a
ld [wIndicatorStates + 13], a
ld a, [wd55d]
and a
ld a, $0
ld [wd55d], a
jp nz, Func_20f75
jp Func_20fef
.asm_20ec5
scf
ret
Func_20ec7: ; 0x20ec7
ld a, [wd551]
and a
jr nz, .asm_20ee6
ld a, [wIndicatorStates + 14]
and a
jr z, .asm_20ee6
xor a
ld [wIndicatorStates + 14], a
ld a, [wd55e]
and a
ld a, $0
ld [wd55e], a
jp nz, Func_20f75
jp Func_20fef
.asm_20ee6
scf
ret
Func_20ee8: ; 0x20ee8
ld a, [wd551]
and a
jr nz, .asm_20f07
ld a, [wIndicatorStates + 11]
and a
jr z, .asm_20f07
xor a
ld [wIndicatorStates + 11], a
ld a, [wd55f]
and a
ld a, $0
ld [wd55f], a
jp nz, Func_20f75
jp Func_20fef
.asm_20f07
scf
ret
Func_20f09: ; 0x20f09
ld a, [wd551]
and a
jr nz, .asm_20f28
ld a, [wIndicatorStates + 12]
and a
jr z, .asm_20f28
xor a
ld [wIndicatorStates + 12], a
ld a, [wd560]
and a
ld a, $0
ld [wd560], a
jp nz, Func_20f75
jp Func_20fef
.asm_20f28
scf
ret
Func_20f2a: ; 0x20f2a
ld a, [wd551]
and a
jr nz, .asm_20f49
ld a, [wIndicatorStates + 6]
and a
jr z, .asm_20f49
xor a
ld [wIndicatorStates + 6], a
ld a, [wd565]
and a
ld a, $0
ld [wd565], a
jp nz, Func_20f75
jp Func_20fef
.asm_20f49
scf
ret
Func_20f4b: ; 0x20f4b
ld bc, $0000
ld de, $1500
call Func_3538
ld a, [wd551]
and a
jr nz, .asm_20f73
ld a, [wIndicatorStates + 7]
and a
jr z, .asm_20f73
xor a
ld [wIndicatorStates + 7], a
ld a, [wd564]
and a
ld a, $0
ld [wd564], a
jp nz, Func_20f75
jp Func_20fef
.asm_20f73
scf
ret
Func_20f75: ; 0x20f75
lb de, $07, $46
call PlaySoundEffect
call Func_2111d
ld a, [wCurrentEvolutionType]
ld [hl], a
ld [wd551], a
ld a, [wIndicatorStates]
ld [wd558], a
ld a, [wIndicatorStates + 3]
ld [wd559], a
ld a, [wIndicatorStates + 2]
ld [wd63f], a
xor a
ld [wIndicatorStates], a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld a, [wCurrentStage]
bit 0, a
callba nz, Func_1c2cb
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_20fc3
ld a, BANK(Data_dd188)
ld hl, Data_dd188
ld de, $0070
ld bc, $0010
call Func_7dc
.asm_20fc3
ld bc, ThreeHundredThousandPoints
callba AddBigBCD6FromQueue
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld a, [wCurrentEvolutionType]
dec a
ld c, a
ld b, $0
sla c
ld hl, EvolutionTypeGetTextPointers
add hl, bc
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
ld hl, wd5cc
call LoadTextHeader
scf
ret
Func_20fef: ; 0x20fef
lb de, $07, $47
call PlaySoundEffect
ld a, $1
ld [wd551], a
ld a, [wIndicatorStates]
ld [wd558], a
ld a, $80
ld [wIndicatorStates], a
ld [wIndicatorStates + 1], a
ld a, [wIndicatorStates + 3]
ld [wd559], a
ld a, [wIndicatorStates + 2]
ld [wd63f], a
xor a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld a, [wCurrentStage]
bit 0, a
callba nz, Func_1c2cb
ld a, $58
ld [wd556], a
ld a, $2
ld [wd557], a
ld bc, ThreeHundredThousandPoints
callba AddBigBCD6FromQueue
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld a, [wCurrentEvolutionType]
cp EVO_EXPERIENCE
ld de, PokemonIsTiredText
jr z, .asm_21057
ld de, ItemNotFoundText
.asm_21057
call LoadTextHeader
scf
ret
Func_2105c: ; 0x2105c
ld a, [wd551]
and a
jr z, .asm_21077
ld a, [wIndicatorStates + 1]
and a
jr z, .asm_21077
ld bc, TenThousandPoints
callba AddBigBCD6FromQueue
jr asm_210c7
.asm_21077
scf
ret
Func_21079: ; 0x21079
ld a, [wd551]
and a
jr z, .asm_21087
ld a, [wIndicatorStates + 1]
and a
jr z, .asm_21087
jr asm_210c7
.asm_21087
scf
ret
Func_21089: ; 0x21089
ld a, [wd551]
and a
jr nz, .asm_210aa
ld a, [wIndicatorStates]
and a
jr z, .asm_210a8
xor a
ld [wIndicatorStates], a
ld a, [wd563]
and a
ld a, $0
ld [wd563], a
jp nz, Func_20f75
jp Func_20fef
.asm_210a8
scf
ret
.asm_210aa
ld a, [wd551]
and a
jr z, .asm_210c5
ld a, [wIndicatorStates]
and a
jr z, .asm_210c5
ld bc, TenThousandPoints
callba AddBigBCD6FromQueue
jr asm_210c7
.asm_210c5
scf
ret
asm_210c7:
xor a
ld [wIndicatorStates + 1], a
ld [wd551], a
ld a, [wd558]
ld [wIndicatorStates], a
ld a, [wd559]
ld [wIndicatorStates + 3], a
ld a, [wd63f]
ld [wIndicatorStates + 2], a
ld a, [wCurrentStage]
bit 0, a
callba nz, Func_1c2cb
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_21102
ld a, BANK(StageBlueFieldBottomOBJPalette6)
ld hl, StageBlueFieldBottomOBJPalette6
ld de, $0070
ld bc, $0008
call Func_7dc
.asm_21102
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld a, [wCurrentEvolutionType]
cp EVO_EXPERIENCE
ld de, PokemonRecoveredText
jr z, .asm_21115
ld de, TryNextPlaceText
.asm_21115
ld hl, wd5cc
call LoadTextHeader
scf
ret
Func_2111d: ; 0x2111d
ld a, $11
call Func_a21
ld c, a
ld b, $0
ld hl, wd566
add hl, bc
ret
Func_2112a: ; 0x2112a
ld a, [wCurrentEvolutionMon]
cp $ff
jr nz, .asm_21134
ld a, [wCurrentCatchEmMon]
.asm_21134
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_21140
inc b
.asm_21140
push bc
ld hl, MonBillboardPicPointers
add hl, bc
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
inc hl
ld c, a
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
inc hl
ld b, a
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
ld h, b
ld l, c
ld de, vTilesSH tile $10
ld bc, $0180
call LoadOrCopyVRAMData
pop bc
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_211a8
push bc
ld hl, MonBillboardPaletteMapPointers
add hl, bc
ld a, Bank(MonBillboardPaletteMapPointers)
call ReadByteFromBank
inc hl
ld e, a
ld a, Bank(MonBillboardPaletteMapPointers)
call ReadByteFromBank
inc hl
ld d, a
ld a, Bank(MonBillboardPaletteMapPointers)
call ReadByteFromBank
hlCoord 7, 4, vBGMap
call LoadBillboardPaletteMap
pop bc
ld hl, MonBillboardPalettePointers
add hl, bc
ld a, Bank(MonBillboardPalettePointers)
call ReadByteFromBank
inc hl
ld e, a
ld a, Bank(MonBillboardPalettePointers)
call ReadByteFromBank
inc hl
ld d, a
ld a, Bank(MonBillboardPalettePointers)
call ReadByteFromBank
ld bc, $10b0
ld hl, rBGPI
call Func_8e1
.asm_211a8
callba Func_10e0a
call Func_3475
ld de, $0000
call PlaySong
rst AdvanceFrame
lb de, $2d, $26
call PlaySoundEffect
callba Func_10825
call Func_3475
ld a, $1
ld [wd54d], a
scf
ret
SECTION "bank9", ROMX, BANK[$9]
InitMeowthBonusStage: ; 0x24000
ld a, [wd7c1]
and a
ret nz
xor a
ld [wd4c8], a
ld [wStageCollisionState], a
ld a, [wBallType]
ld [wBallTypeBackup], a
xor a
ld [wd4c8], a
ld [wBallType], a
ld [wd49a], a
ld a, $1
ld [wd7ac], a
ld a, $40
ld [wMeowthXPosition], a
ld a, $20
ld [wMeowthYPosition], a
ld a, $10
ld [wMeowthAnimationFrameCounter], a
xor a
ld [wMeowthStageScore], a
ld [wd70b], a
ld [wMeowthStageBonusCounter], a
ld [wd713], a
ld [wd739], a
ld bc, $0100 ; 1 minute 0 seconds
callba StartTimer
ld a, $12
call SetSongBank
ld de, $0004
call PlaySong
ret
StartBallMeowthBonusStage: ; 0x24059
ld a, $0
ld [wBallXPos], a
ld a, $a6
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $56
ld [wBallYPos + 1], a
ld a, $40
ld [wBallXVelocity], a
xor a
ld [wSCX], a
ld [wStageCollisionState], a
ld [wd6e6], a
ld hl, wd6f3
ld b, $16
.asm_24081
ld a, [hl]
and a
jr z, .asm_24088
ld a, $1
ld [hl], a
.asm_24088
inc hl
dec b
jr nz, .asm_24081
ld a, $1
ld [wd7ac], a
ld a, $40
ld [wMeowthXPosition], a
ld a, $20
ld [wMeowthYPosition], a
ld a, $10
ld [wMeowthAnimationFrameCounter], a
ld a, $ff ; walk left
ld [wMeowthXMovement], a
xor a
ld [wMeowthAnimationFrame], a
ld [wd6ec], a
ld [wMeowthAnimationFrameIndex], a
ld [wd70b], a
ld [wd70c], a
ld a, $c8
ld [wd71a], a
ld [wd727], a
ld [wd71b], a
ld [wd728], a
ld [wd71c], a
ld [wd729], a
ld [wd724], a
ld [wd731], a
ld [wd725], a
ld [wd732], a
ld [wd726], a
ld [wd733], a
xor a
ld [wd717], a
ld [wd718], a
ld [wd719], a
ld [wd721], a
ld [wd722], a
ld [wd723], a
ld [wd714], a
ld [wd715], a
ld [wd716], a
ld [wd71e], a
ld [wd71f], a
ld [wd720], a
ld [wd64e], a
ld [wd64f], a
ld [wd650], a
ld [wd651], a
ld [wd795], a
ld [wd796], a
ld [wd797], a
ld [wd798], a
ld [wd799], a
ld [wd79a], a
ld a, [wd4c9]
and a
ret z
xor a
ld [wd4c9], a
ret
Func_24128: ; 0x24128
callba Func_142fc
call Func_2862
callba Func_24fa3
call Func_24516
callba Func_1404a
ret
CheckMeowthBonusStageGameObjectCollisions: ; 0x2414d
call CheckMeowthBonusStageMeowthCollision
call CheckMeowthBonusStageJewelsCollision
call CheckMeowthBonusStageJewelsCollision2
ret
CheckMeowthBonusStageMeowthCollision: ; 0x24157
ld a, [wd6e7]
cp $0
ret nz
ld a, [wMeowthXPosition]
add -9
ld b, a
ld a, [wMeowthYPosition]
add $6
ld c, a
call CheckMeowthCollision
ld a, $3
ret nc
ret
CheckMeowthCollision: ; 0x24170
ld a, [wBallXPos + 1]
sub b
cp $30
jp nc, .noCollision
ld b, a
ld a, [wBallYPos + 1]
sub c
cp $28
jp nc, .noCollision
ld c, a
ld e, c
ld d, $0
sla e
rl d
sla e
rl d
sla e
rl d
ld h, d
ld l, e
sla e
rl d
add hl, de
ld d, h
ld e, l
sla e
rl d
ld l, b
ld h, $0
add hl, de
ld de, MeowthCollisionAngles
add hl, de
ld a, BANK(MeowthCollisionAngles)
call ReadByteFromBank
bit 7, a
jr nz, .noCollision
sla a
ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
ld a, [wd6ec]
cp $2
ret z
cp $3
ret z
ld a, [wd713]
and a
ret nz
ld a, [wMeowthYMovement]
and a
jr z, .asm_241ed
ld a, [wMeowthYMovement]
cp $1
jr nz, .asm_241df
ld a, [wd70b]
cp $3
jr z, .asm_241eb
jr .asm_241e6
.asm_241df
ld a, [wd70c]
cp $3
jr z, .asm_241eb
.asm_241e6
ld a, $2
ld [wd6e7], a
.asm_241eb
scf
ret
.asm_241ed
ld a, [wMeowthYPosition]
cp $20
jr nz, .asm_241fd
ld a, [wd70b]
cp $3
jr z, .asm_24210
jr .asm_2420b
.asm_241fd
ld a, [wMeowthYPosition]
cp $10
jr nz, .asm_24210
ld a, [wd70c]
cp $3
jr z, .asm_24210
.asm_2420b
ld a, $1
ld [wd6e7], a
.asm_24210
scf
ret
.noCollision
and a
ret
CheckMeowthBonusStageJewelsCollision: ; 0x24214
ld a, [wd717]
cp $2
jr nz, .asm_2422e
ld a, [wd71a]
sub $4
ld b, a
ld a, [wd727]
add $c
ld c, a
call CheckJewelCollision
ld a, $0
jr c, .asm_24260
.asm_2422e
ld a, [wd718]
cp $2
jr nz, .asm_24248
ld a, [wd71b]
sub $4
ld b, a
ld a, [wd728]
add $c
ld c, a
call CheckJewelCollision
ld a, $1
jr c, .asm_24260
.asm_24248
ld a, [wd719]
cp $2
ret nz
ld a, [wd71c]
sub $4
ld b, a
ld a, [wd729]
add $c
ld c, a
call CheckJewelCollision
ld a, $2
ret nc
.asm_24260
ld b, $0
ld c, a
ld hl, wd717
add hl, bc
ld a, $3
ld [hl], a
ld hl, wd714
add hl, bc
ld a, $0
ld [hl], a
ret
CheckJewelCollision: ; 0x24272
ld a, [wBallXPos + 1]
sub b
cp $18
jr nc, .noCollision
ld b, a
ld a, [wBallYPos + 1]
sub c
cp $18
jr nc, .noCollision
ld c, a
ld e, c
ld d, $0
sla e
rl d
sla e
rl d
sla e
rl d
ld h, d
ld l, e
sla e
rl d
add hl, de
ld d, h
ld e, l
ld l, b
ld h, $0
add hl, de
ld de, MeowthJewelCollisionAngles
add hl, de
ld a, BANK(MeowthJewelCollisionAngles)
call ReadByteFromBank
bit 7, a
jr nz, .noCollision
sla a
ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
ret
.noCollision
and a
ret
CheckMeowthBonusStageJewelsCollision2: ; 0x242bb
ld a, [wd721]
cp $2
jr nz, .asm_242d5
ld a, [wd724]
sub $4
ld b, a
ld a, [wd731]
add $c
ld c, a
call CheckJewelCollision
ld a, $0
jr c, .asm_24307
.asm_242d5
ld a, [wd722]
cp $2
jr nz, .asm_242ef
ld a, [wd725]
sub $4
ld b, a
ld a, [wd732]
add $c
ld c, a
call CheckJewelCollision
ld a, $1
jr c, .asm_24307
.asm_242ef
ld a, [wd723]
cp $2
ret nz
ld a, [wd726]
sub $4
ld b, a
ld a, [wd733]
add $c
ld c, a
call CheckJewelCollision
ld a, $2
ret nc
.asm_24307
ld b, $0
ld c, a
ld hl, wd721
add hl, bc
ld a, $3
ld [hl], a
ld hl, wd71e
add hl, bc
ld a, $0
ld [hl], a
ret
Func_24319: ; 0x2438f
ld a, [wd6f4]
cp $0
jr z, .asm_24333
ld a, [wd71a]
sub $4
ld b, a
ld a, [wd727]
add $4
ld c, a
call Func_24405
ld a, $0
jr c, .asm_24373
.asm_24333
ld a, [wd6f4]
cp $1
jr z, .asm_2434d
ld a, [wd71b]
sub $4
ld b, a
ld a, [wd728]
add $4
ld c, a
call Func_24405
ld a, $1
jr c, .asm_24373
.asm_2434d
ld a, [wd6f4]
cp $2
ret z
ld a, [wd71c]
sub $4
ld b, a
ld a, [wd729]
add $4
ld c, a
call Func_24405
ld a, $2
jr c, .asm_24373
ld a, [wd6f4]
ld b, $0
ld c, a
ld hl, wd6f8
add hl, bc
ld [hl], $0
ret
.asm_24373
ld a, [wd6f4]
ld b, $0
ld c, a
ld hl, wd6f8
add hl, bc
inc [hl]
ld d, $4
ld a, [wd6f4]
add d
ld d, a
ld a, [hl]
cp d
ret nc
ld hl, wd6f5
add hl, bc
ld [hl], $0
ret
Func_2438f: ; 0x2438f
ld a, [wd6f4]
cp $a
jr z, .asm_243a9
ld a, [wd724]
sub $4
ld b, a
ld a, [wd731]
add $4
ld c, a
call Func_24405
ld a, $a
jr c, .asm_243e9
.asm_243a9
ld a, [wd6f4]
cp $b
jr z, .asm_243c3
ld a, [wd725]
sub $4
ld b, a
ld a, [wd732]
add $4
ld c, a
call Func_24405
ld a, $b
jr c, .asm_243e9
.asm_243c3
ld a, [wd6f4]
cp $c
ret z
ld a, [wd726]
sub $4
ld b, a
ld a, [wd733]
add $4
ld c, a
call Func_24405
ld a, $c
jr c, .asm_243e9
ld a, [wd6f4]
ld b, $0
ld c, a
ld hl, wd6f8
add hl, bc
ld [hl], $0
ret
.asm_243e9
ld a, [wd6f4]
ld b, $0
ld c, a
ld hl, wd6f8
add hl, bc
inc [hl]
ld d, $4
ld a, [wd6f4]
add d
ld d, a
ld a, [hl]
cp d
ret nc
ld hl, wd6f5
add hl, bc
ld [hl], $0
ret
Func_24405: ; 0x24405
ld hl, wd71a
ld a, [wd6f4]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
add $8
sub b
cp $18
jr nc, .asm_24428
ld b, a
ld hl, wd727
add hl, de
ld a, [hl]
add $8
sub c
cp $18
jr nc, .asm_24428
ld c, a
ld d, b
scf
ret
.asm_24428
and a
ret
Func_2442a: ; 0x2442a
ld a, [wd710]
jr nz, .asm_2443f
ld a, [wMeowthStageBonusCounter]
dec a
dec a
cp $fe
jr z, .asm_24447
cp $ff
jr z, .asm_24447
ld [wd79a], a
.asm_2443f
ld de, wd79a
call Func_24f00
jr .asm_2444b
.asm_24447
xor a
ld [wd79a], a
.asm_2444b
call Func_244f5
call Func_245ab
call Func_248ac
call Func_24d07
ld a, [wMeowthStageScore]
cp $14
jr c, .asm_24498
ld a, [wd712]
cp $2
jr nc, .asm_24498
ld a, [wd498]
cp $4
ret z
ld a, $4
ld [wd712], a
ld [wd498], a
ld a, $96
ld [wd739], a
ld de, $0000
call PlaySong
ld a, $1
ld [wd49a], a
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, MeowthStageClearedText
call LoadTextHeader
lb de, $4b, $2a
call PlaySoundEffect
.asm_24498
ld a, [wd712]
cp $4
jr nz, .asm_244b0
ld a, [wSFXTimer]
and a
jr nz, .asm_244b0
ld de, $0004
call PlaySong
ld a, $5
ld [wd712], a
.asm_244b0
ld a, [wd712]
cp $4
jr z, .asm_244c1
callba Func_107f8
.asm_244c1
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $1
ld [wd7be], a
call Func_2862
callba Func_86d2
ld a, $1
ld [wd713], a
ld a, $1
ld [wd712], a
ld hl, Data_24704
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ld a, $4
ld [wd6ec], a
ret
Func_244f5: ; 0x244f5
ld a, [wd6e6]
and a
ret nz
ld a, [wd4b4]
cp $8a
ret nc
ld a, $1
ld [wStageCollisionState], a
ld [wd6e6], a
callba LoadStageCollisionAttributes
call Func_24516
ret
Func_24516: ; 0x24516
ld a, [wStageCollisionState]
sla a
ld c, a
ld b, $0
ld hl, Data_24533
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_24529
ld hl, Data_2456f
.asm_24529
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_24533)
call Func_10aa
ret
Data_24533:
dr $24533, $2456f
Data_2456f:
dr $2456f, $245ab
Func_245ab: ; 0x245ab
ld a, [wd6e7]
and a
jr z, .asm_24621
cp $2
jr z, .asm_24621
ld a, $1
ld [wd6f3], a
ld a, [wMeowthYPosition]
cp $20
jr z, .asm_245c7
cp $10
jr z, .asm_245cc
jr .asm_245cf
.asm_245c7
call Func_247d9
jr .asm_245cf
.asm_245cc
call Func_24c28
.asm_245cf
xor a
ld [wd6e7], a
ld [wd6f3], a
ld a, $ff
ld [wd803], a
ld a, $3
ld [wd804], a
lb de, $00, $33
call PlaySoundEffect
ld bc, OneThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
xor a
ld [wMeowthStageBonusCounter], a
ld a, [wd6ec]
cp $2
jr nc, .asm_24621
and a
jr nz, .asm_24611
ld hl, Data_246fe
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ld a, $2
ld [wd6ec], a
jr .asm_24651
.asm_24611
ld hl, Data_24701
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ld a, $3
ld [wd6ec], a
jr .asm_24651
.asm_24621
ld a, [wd713]
and a
jr z, .asm_2462e
ld a, $4
ld [wd6ec], a
jr .asm_24651
.asm_2462e
ld a, [wd6ec]
cp $2
jr nc, .asm_24651
ld a, [wd70b]
cp $3
jr nz, .asm_24651
ld a, [wd70c]
cp $3
jr nz, .asm_24651
ld hl, Data_24704
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ld a, $4
ld [wd6ec], a
.asm_24651
ld a, [wd6ec]
cp $2
call c, Func_24709
call Func_2465d
ret
Func_2465d: ; 0x2465d
ld a, [wd6ec]
sla a
ld c, a
ld b, $0
ld hl, Data_246e2
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wMeowthAnimationFrameCounter
call UpdateAnimation
ret nc
ld a, [wd6ec]
and a
jr nz, .asm_24689
ld a, [wMeowthAnimationFrameIndex]
cp $4
ret nz
ld hl, Data_246ec
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ret
.asm_24689
cp $1
jr nz, .asm_2469d
ld a, [wMeowthAnimationFrameIndex]
cp $4
ret nz
ld hl, Data_246f5
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ret
.asm_2469d
cp $2
jr nz, .asm_246b5
ld a, [wMeowthAnimationFrameIndex]
cp $1
ret nz
ld hl, Data_246ec
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
xor a
ld [wd6ec], a
ret
.asm_246b5
cp $3
jr nz, .asm_246ce
ld a, [wMeowthAnimationFrameIndex]
cp $1
ret nz
ld hl, Data_246f5
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ld a, $1
ld [wd6ec], a
ret
.asm_246ce
cp $4
jr nz, .asm_24689
ld a, [wMeowthAnimationFrameIndex]
cp $2
ret nz
ld hl, Data_24704
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ret
Data_246e2:
dr $246e2, $246ec
Data_246ec:
dr $246ec, $246f5
Data_246f5:
dr $246f5, $246fe
Data_246fe:
dr $246fe, $24701
Data_24701:
dr $24701, $24704
Data_24704:
dr $24704, $24709
Func_24709: ; 0x24709
ld a, [wMeowthXPosition]
ld hl, wMeowthXMovement
add [hl]
ld [wMeowthXPosition], a
ld hl, wMeowthYMovement
ld a, [hl]
and a
jr z, .asm_24730
bit 7, [hl]
ld a, [wMeowthYPosition]
jr nz, .asm_24724
inc a
jr .asm_24725
.asm_24724
dec a
.asm_24725
cp $21
jr z, .asm_24730
cp $f
jr z, .asm_24730
ld [wMeowthYPosition], a
.asm_24730
call Func_24737
call Func_2476d
ret
Func_24737: ; 0x24737
ld a, [wMeowthXPosition]
cp $8
jr nc, .asm_24742
ld a, $1
jr .asm_2475a
.asm_24742
cp $78
jr c, .asm_2474a
ld a, $ff
jr .asm_2475a
.asm_2474a
ld a, [hNumFramesDropped]
and $3f
ret nz
call GenRandom
bit 7, a
ld a, $1
jr z, .asm_2475a
ld a, $ff
.asm_2475a
ld [wMeowthXMovement], a
bit 7, a
ld a, $1
jr z, .asm_24764
xor a
.asm_24764
ld [wd6ec], a
ld a, $2
ld [wMeowthAnimationFrameCounter], a
ret
Func_2476d: ; 0x2476d
ld a, [wMeowthYMovement]
and a
jr z, .asm_247ab
cp $1
jr z, .asm_24791
ld a, [wMeowthYPosition]
cp $10
jr nz, .asm_2478d
ld a, [wd6e7]
cp $2
jr nz, .asm_2478a
ld a, $1
ld [wd6e7], a
.asm_2478a
xor a
jr .asm_247c9
.asm_2478d
ld a, $ff
jr .asm_247c9
.asm_24791
ld a, [wMeowthYPosition]
cp $20
jr nz, .asm_247a7
ld a, [wd6e7]
cp $2
jr nz, .asm_247a4
ld a, $1
ld [wd6e7], a
.asm_247a4
xor a
jr .asm_247c9
.asm_247a7
ld a, $1
jr .asm_247c9
.asm_247ab
ld a, [wd70b]
cp $3
jr z, .asm_247cd
ld a, [wd70c]
cp $3
jr z, .asm_247d3
ld a, [hNumFramesDropped]
and $3f
ret nz
call GenRandom
bit 0, a
ld a, $1
jr z, .asm_247c9
ld a, $ff
.asm_247c9
ld [wMeowthYMovement], a
ret
.asm_247cd
ld a, $ff
ld [wMeowthYMovement], a
ret
.asm_247d3
ld a, $1
ld [wMeowthYMovement], a
ret
Func_247d9: ; 0x247d9
ld a, [wd6f3]
and a
ret z
ld a, [wd71a]
cp $c8
jr nz, .asm_24823
ld a, [wMeowthXPosition]
add $8
ld [wd71a], a
ld a, [wMeowthYPosition]
add $fb
ld [wd727], a
ld a, $1
ld [wd717], a
xor a
ld [wd6f3], a
ld [wd714], a
ld [wd6f5], a
ld [wd6f8], a
ld [wd6fb], a
ld a, [wMeowthXPosition]
add $14
ld b, a
ld a, [wd4b4]
cp b
jr nc, .asm_2481d
ld a, $0
ld [wd72a], a
jr .asm_24822
.asm_2481d
ld a, $1
ld [wd72a], a
.asm_24822
ret
.asm_24823
ld a, [wd71b]
cp $c8
jr nz, .asm_24868
ld a, [wMeowthXPosition]
add $8
ld [wd71b], a
ld a, [wMeowthYPosition]
add $fb
ld [wd728], a
ld a, $1
ld [wd718], a
xor a
ld [wd6f3], a
ld [wd715], a
ld [wd6f6], a
ld [wd6f9], a
ld [wd6fc], a
ld a, [wMeowthXPosition]
add $14
ld b, a
ld a, [wd4b4]
cp b
jr nc, .asm_24862
ld a, $0
ld [wd72b], a
jr .asm_24867
.asm_24862
ld a, $1
ld [wd72b], a
.asm_24867
ret
.asm_24868
ld a, [wd71c]
cp $c8
ret nz
ld a, [wMeowthXPosition]
add $8
ld [wd71c], a
ld a, [wMeowthYPosition]
add $fb
ld [wd729], a
ld a, $1
ld [wd719], a
xor a
ld [wd6f3], a
ld [wd716], a
ld [wd6f7], a
ld [wd6fa], a
ld [wd6fd], a
ld a, [wMeowthXPosition]
add $14
ld b, a
ld a, [wd4b4]
cp b
jr nc, .asm_248a6
ld a, $0
ld [wd72c], a
jr .asm_248ab
.asm_248a6
ld a, $1
ld [wd72c], a
.asm_248ab
ret
Func_248ac: ; 0x248ac
ld a, [wd717]
cp $1
jr nz, .asm_248d3
ld a, [wd714]
cp $a
jr z, .asm_248c4
ld a, $0
ld [wd6f4], a
call Func_24a30
jr .asm_248d3
.asm_248c4
ld hl, wd70b
inc [hl]
ld a, $2
ld [wd717], a
lb de, $00, $34
call PlaySoundEffect
.asm_248d3
ld a, [wd718]
cp $1
jr nz, .asm_248fa
ld a, [wd715]
cp $a
jr z, .asm_248eb
ld a, $1
ld [wd6f4], a
call Func_24a30
jr .asm_248fa
.asm_248eb
ld hl, wd70b
inc [hl]
ld a, $2
ld [wd718], a
lb de, $00, $34
call PlaySoundEffect
.asm_248fa
ld a, [wd719]
cp $1
jr nz, .asm_24921
ld a, [wd716]
cp $a
jr z, .asm_24912
ld a, $2
ld [wd6f4], a
call Func_24a30
jr .asm_24921
.asm_24912
ld hl, wd70b
inc [hl]
ld a, $2
ld [wd719], a
lb de, $00, $34
call PlaySoundEffect
.asm_24921
ld a, [wd717]
cp $2
jr nz, .asm_2492c
ld hl, wd714
inc [hl]
.asm_2492c
ld a, [wd718]
cp $2
jr nz, .asm_24937
ld hl, wd715
inc [hl]
.asm_24937
ld a, [wd719]
cp $2
jr nz, .asm_24942
ld hl, wd716
inc [hl]
.asm_24942
ld a, [wd717]
cp $3
jr nz, .asm_24968
ld a, [wd71a]
ld b, a
ld a, [wd727]
ld c, a
ld hl, wd714
inc [hl]
ld a, [hl]
cp $2
jr nz, .asm_2495f
call Func_24e7f
jr .asm_24968
.asm_2495f
cp $a
jr nz, .asm_24968
ld a, $4
ld [wd717], a
.asm_24968
ld a, [wd718]
cp $3
jr nz, .asm_2498e
ld a, [wd71b]
ld b, a
ld a, [wd728]
ld c, a
ld hl, wd715
inc [hl]
ld a, [hl]
cp $2
jr nz, .asm_24985
call Func_24e7f
jr .asm_2498e
.asm_24985
cp $a
jr nz, .asm_2498e
ld a, $4
ld [wd718], a
.asm_2498e
ld a, [wd719]
cp $3
jr nz, .asm_249b4
ld a, [wd71c]
ld b, a
ld a, [wd729]
ld c, a
ld hl, wd716
inc [hl]
ld a, [hl]
cp $2
jr nz, .asm_249ab
call Func_24e7f
jr .asm_249b4
.asm_249ab
cp $a
jr nz, .asm_249b4
ld a, $4
ld [wd719], a
.asm_249b4
ld a, [wd717]
cp $4
jr nz, .asm_249d0
ld a, $c8
ld [wd71a], a
ld [wd727], a
xor a
ld [wd717], a
ld hl, wd70b
dec [hl]
ld a, [hl]
cp $2
jr z, .asm_24a06
.asm_249d0
ld a, [wd718]
cp $4
jr nz, .asm_249ec
ld a, $c8
ld [wd71b], a
ld [wd728], a
xor a
ld [wd718], a
ld hl, wd70b
dec [hl]
ld a, [hl]
cp $2
jr z, .asm_24a06
.asm_249ec
ld a, [wd719]
cp $4
ret nz
ld a, $c8
ld [wd71c], a
ld [wd729], a
xor a
ld [wd719], a
ld hl, wd70b
dec [hl]
ld a, [hl]
cp $2
ret nz
.asm_24a06
ld a, [wd713]
and a
ret nz
ld a, [wMeowthXMovement]
cp $ff
jr z, .asm_24a21
ld hl, Data_246f5
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ld a, $1
ld [wd6ec], a
ret
.asm_24a21
ld hl, Data_246ec
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ld a, $0
ld [wd6ec], a
ret
Func_24a30: ; 0x24a30
ld a, [wd6f4]
ld c, a
ld b, $0
ld hl, wd6f8
add hl, bc
ld a, [hl]
and a
jr z, .asm_24a42
call Func_24b41
ret
.asm_24a42
ld a, [wd6f4]
ld c, a
ld b, $0
ld hl, wd6f5
add hl, bc
ld a, [hl]
bit 2, a
jr z, .asm_24a5e
bit 1, a
jr nz, .asm_24a5e
bit 0, a
jr nz, .asm_24a5e
ld hl, wd714
add hl, bc
inc [hl]
.asm_24a5e
ld hl, wd6f5
add hl, bc
ld a, [hl]
ld hl, Data_24af1
ld e, a
ld d, $0
add hl, de
ld hl, wd72a
add hl, bc
ld a, [hl]
and a
jr nz, .asm_24a97
.asm_24a72
ld hl, wd72a
add hl, bc
ld [hl], $0
ld hl, wd71a
add hl, bc
ld a, [hl]
push af
ld hl, wd6f5
add hl, bc
ld a, [hl]
ld e, a
ld d, $0
ld hl, Data_24af1
add hl, de
pop af
add [hl]
cp $8e
jr nc, .asm_24a97
ld hl, wd71a
add hl, bc
ld [hl], a
jr .asm_24abf
.asm_24a97
ld hl, wd72a
add hl, bc
ld [hl], $1
ld hl, wd6f5
add hl, bc
ld a, [hl]
ld e, a
ld d, $0
ld hl, Data_24af1
add hl, de
ld a, [hl]
ld d, a
ld a, $ff
sub d
inc a
ld d, a
ld hl, wd71a
add hl, bc
ld a, [hl]
add d
cp $5
jr c, .asm_24a72
ld hl, wd71a
add hl, bc
ld [hl], a
.asm_24abf
ld hl, wd6f5
add hl, bc
ld a, [hl]
ld e, a
ld d, $0
ld hl, Data_24af1
add hl, de
inc hl
ld a, [hl]
ld d, a
ld hl, wd727
add hl, bc
ld a, [hl]
add d
ld hl, wd727
add hl, bc
ld [hl], a
ld hl, wd6f5
add hl, bc
inc [hl]
inc [hl]
ld a, [hl]
cp $46
jr nz, .asm_24af0
ld a, c
cp $9
jr c, .asm_24aed
call Func_2438f
ret
.asm_24aed
call Func_24319
.asm_24af0
ret
Data_24af1:
dr $24af1, $24b41
Func_24b41: ; 0x24b41
ld a, [wd6f4]
ld b, $0
ld c, a
ld hl, wd6f5
add hl, bc
ld a, [hl]
cp $14
jp nc, Func_24bf6
ld hl, wd6f5
add hl, bc
ld a, [hl]
ld hl, Data_24c0a
ld e, a
ld d, $0
add hl, de
ld hl, wd72a
add hl, bc
ld a, [hl]
and a
jr nz, .asm_24b8a
.asm_24b65
ld hl, wd72a
add hl, bc
ld [hl], $0
ld hl, wd71a
add hl, bc
ld a, [hl]
push af
ld hl, wd6f5
add hl, bc
ld a, [hl]
ld e, a
ld d, $0
ld hl, Data_24c0a
add hl, de
pop af
add [hl]
cp $90
jr nc, .asm_24b8a
ld hl, wd71a
add hl, bc
ld [hl], a
jr .asm_24bb2
.asm_24b8a
ld hl, wd72a
add hl, bc
ld [hl], $1
ld hl, wd6f5
add hl, bc
ld a, [hl]
ld e, a
ld d, $0
ld hl, Data_24c0a
add hl, de
ld a, [hl]
ld d, a
ld a, $ff
sub d
inc a
ld d, a
ld hl, wd71a
add hl, bc
ld a, [hl]
add d
cp $6
jr c, .asm_24b65
ld hl, wd71a
add hl, bc
ld [hl], a
.asm_24bb2
ld hl, wd6f5
add hl, bc
ld a, [hl]
ld e, a
ld d, $0
ld hl, Data_24c0a
add hl, de
inc hl
ld a, [hl]
ld d, a
ld hl, wd727
add hl, bc
ld a, [hl]
add d
ld hl, wd727
add hl, bc
ld [hl], a
ld hl, wd6f5
add hl, bc
inc [hl]
inc [hl]
ld a, [hl]
cp $12
jr nz, .asm_24bf4
ld a, c
cp $9
jr c, .asm_24be1
call Func_2438f
jr .asm_24be4
.asm_24be1
call Func_24319
.asm_24be4
ld a, [wd6f4]
ld b, $0
ld c, a
ld hl, wd6f8
add hl, bc
ld a, [hl]
and a
jr nz, .asm_24bf4
ld [hl], $1
.asm_24bf4
scf
ret
Func_24bf6: ; 0x24bf6
ld a, [wd6f4]
ld b, $0
ld c, a
ld hl, wd6f8
add hl, bc
ld [hl], $0
ld hl, wd714
add hl, bc
ld [hl], $a
ccf
ret
Data_24c0a:
dr $24c0a, $24c28
Func_24c28: ; 0x24c28
ld a, [wd6f3]
and a
ret z
ld a, [wd724]
cp $c8
jr nz, .asm_24c76
ld a, [wMeowthXPosition]
add $8
ld [wd724], a
ld a, [wMeowthYPosition]
add $fb
ld [wd731], a
ld a, $1
ld [wd721], a
ld hl, wd70c
inc [hl]
xor a
ld [wd6f3], a
ld [wd71e], a
ld [wd6ff], a
ld [wd702], a
ld [wd705], a
ld a, [wMeowthXPosition]
add $14
ld b, a
ld a, [wd4b4]
cp b
jr nc, .asm_24c70
ld a, $0
ld [wd734], a
jr .asm_24c75
.asm_24c70
ld a, $1
ld [wd734], a
.asm_24c75
ret
.asm_24c76
ld a, [wd725]
cp $c8
jr nz, .asm_24cbf
ld a, [wMeowthXPosition]
add $8
ld [wd725], a
ld a, [wMeowthYPosition]
add $fb
ld [wd732], a
ld a, $1
ld [wd722], a
ld hl, wd70c
inc [hl]
xor a
ld [wd6f3], a
ld [wd71f], a
ld [wd700], a
ld [wd703], a
ld [wd706], a
ld a, [wd6f7]
add $14
ld b, a
ld a, [wd4b4]
cp b
jr nc, .asm_24cb9
ld a, $0
ld [wd735], a
jr .asm_24cbe
.asm_24cb9
ld a, $1
ld [wd735], a
.asm_24cbe
ret
.asm_24cbf
ld a, [wd726]
cp $c8
ret nz
ld a, [wMeowthXPosition]
add $8
ld [wd726], a
ld a, [wMeowthYPosition]
add $fb
ld [wd733], a
ld a, $1
ld [wd723], a
ld hl, wd70c
inc [hl]
xor a
ld [wd6f3], a
ld [wd720], a
ld [wd701], a
ld [wd704], a
ld [wd707], a
ld a, [wMeowthXPosition]
add $14
ld b, a
ld a, [wd4b4]
cp b
jr nc, .asm_24d01
ld a, $0
ld [wd736], a
jr .asm_24d06
.asm_24d01
ld a, $1
ld [wd736], a
.asm_24d06
ret
Func_24d07: ; 0x24d07
ld a, [wd721]
cp $1
jr nz, .asm_24d2a
ld a, [wd71e]
cp $a
jr z, .asm_24d1f
ld a, $a
ld [wd6f4], a
call Func_24a30
jr .asm_24d2a
.asm_24d1f
ld a, $2
ld [wd721], a
lb de, $00, $34
call PlaySoundEffect
.asm_24d2a
ld a, [wd722]
cp $1
jr nz, .asm_24d4d
ld a, [wd71f]
cp $a
jr z, .asm_24d42
ld a, $b
ld [wd6f4], a
call Func_24a30
jr .asm_24d4d
.asm_24d42
ld a, $2
ld [wd722], a
lb de, $00, $34
call PlaySoundEffect
.asm_24d4d
ld a, [wd723]
cp $1
jr nz, .asm_24d70
ld a, [wd720]
cp $a
jr z, .asm_24d65
ld a, $c
ld [wd6f4], a
call Func_24a30
jr .asm_24d70
.asm_24d65
ld a, $2
ld [wd723], a
lb de, $00, $34
call PlaySoundEffect
.asm_24d70
ld a, [wd721]
cp $2
jr nz, .asm_24d7b
ld hl, wd71e
inc [hl]
.asm_24d7b
ld a, [wd722]
cp $2
jr nz, .asm_24d86
ld hl, wd71f
inc [hl]
.asm_24d86
ld a, [wd723]
cp $2
jr nz, .asm_24d91
ld hl, wd720
inc [hl]
.asm_24d91
ld a, [wd721]
cp $3
jr nz, .asm_24db7
ld a, [wd724]
ld b, a
ld a, [wd731]
ld c, a
ld hl, wd71e
inc [hl]
ld a, [hl]
cp $2
jr nz, .asm_24dae
call Func_24e7f
jr .asm_24db7
.asm_24dae
cp $a
jr nz, .asm_24db7
ld a, $4
ld [wd721], a
.asm_24db7
ld a, [wd722]
cp $3
jr nz, .asm_24ddd
ld a, [wd725]
ld b, a
ld a, [wd732]
ld c, a
ld hl, wd71f
inc [hl]
ld a, [hl]
cp $2
jr nz, .asm_24dd4
call Func_24e7f
jr .asm_24ddd
.asm_24dd4
cp $a
jr nz, .asm_24ddd
ld a, $4
ld [wd722], a
.asm_24ddd
ld a, [wd723]
cp $3
jr nz, .asm_24e03
ld a, [wd726]
ld b, a
ld a, [wd733]
ld c, a
ld hl, wd720
inc [hl]
ld a, [hl]
cp $2
jr nz, .asm_24dfa
call Func_24e7f
jr .asm_24e03
.asm_24dfa
cp $a
jr nz, .asm_24e03
ld a, $4
ld [wd723], a
.asm_24e03
ld a, [wd721]
cp $4
jr nz, .asm_24e1f
ld a, $c8
ld [wd724], a
ld [wd731], a
xor a
ld [wd721], a
ld hl, wd70c
dec [hl]
ld a, [hl]
cp $2
jr z, .asm_24e55
.asm_24e1f
ld a, [wd722]
cp $4
jr nz, .asm_24e3b
ld a, $c8
ld [wd725], a
ld [wd732], a
xor a
ld [wd722], a
ld hl, wd70c
dec [hl]
ld a, [hl]
cp $2
jr z, .asm_24e55
.asm_24e3b
ld a, [wd723]
cp $4
ret nz
ld a, $c8
ld [wd726], a
ld [wd733], a
xor a
ld [wd723], a
ld hl, wd70c
dec [hl]
ld a, [hl]
cp $2
ret nz
.asm_24e55
ld a, [wd713]
and a
ret nz
ld a, [wMeowthXMovement]
cp $ff
jr z, .asm_24e70
ld hl, Data_246f5
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ld a, $1
ld [wd6ec], a
ret
.asm_24e70
ld hl, Data_246ec
ld de, wMeowthAnimationFrameCounter
call CopyHLToDE
ld a, $0
ld [wd6ec], a
ret
Func_24e7f: ; 0x24e7f
ld a, b
ld [wd79c], a
ld a, c
ld [wd79e], a
ld hl, wMeowthStageBonusCounter
inc [hl]
ld a, [hl]
cp $7 ; maximum bonus
jr nz, .asm_24e92
xor a
ld [hl], a
.asm_24e92
ld a, $ff
ld [wd803], a
ld a, $3
ld [wd804], a
lb de, $00, $32
call PlaySoundEffect
ld a, [wMeowthStageBonusCounter]
dec a
.asm_24ea6
push af
ld bc, OneHundredThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
ld hl, wMeowthStageScore
inc [hl]
pop af
and a
jr z, .asm_24ebf
dec a
jr .asm_24ea6
.asm_24ebf
ld a, [wMeowthStageBonusCounter]
dec a
dec a
cp $fe
jr z, .asm_24ed7
cp $ff
jr z, .asm_24ed7
ld [wd79a], a
ld de, wd79a
call Func_24ee7
jr .asm_24ede
.asm_24ed7
xor a
ld [wd79a], a
ld [wd795], a
.asm_24ede
ld a, $1
ld [wd64e], a
call Func_24fa3
ret
Func_24ee7: ; 0x24ee7
ld a, $ff
ld [wd795], a
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_24f30
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
dec de
dec de
dec de
call CopyHLToDE
ret
Func_24f00: ; 0x24f00
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_24f30
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
dec de
call UpdateAnimation
pop de
ld a, $1
ld [wd710], a
ret nc
dec de
ld a, [de]
cp $a
ret nz
xor a
ld [de], a
ld [wd79c], a
ld [wd79e], a
ld [wd795], a
xor a
ld [wd710], a
ret
Data_24f30:
dr $24f30, $24fa3
Func_24fa3: ; 0x24fa3
ld a, [wMeowthStageScore]
ld c, a
ld b, $0
.asm_24fa9
ld a, c
and a
jr z, .asm_24fb5
ld a, b
add $8
ld b, a
dec c
ld a, c
jr .asm_24fa9
.asm_24fb5
ld a, b
and a
jr z, .asm_24fbb
sub $8
.asm_24fbb
ld [wd652], a
ld a, [wMeowthStageBonusCounter]
and a
jr z, .asm_24fca
ld b, a
ld a, [wMeowthStageScore]
inc a
sub b
.asm_24fca
ld [wd651], a
ld a, $0
ld [wd64e], a
ld a, [wMeowthStageScore]
and a
ret z
cp $15
jr c, .asm_24fe2
ld a, $14
ld [wMeowthStageScore], a
jr .asm_24fed
.asm_24fe2
push af
xor a
ld [wd650], a
ld a, $1
ld [wd64e], a
pop af
.asm_24fed
sla a
ld c, a
ld b, $0
ld hl, Data_25007
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_24ffd
ld hl, Data_25421
.asm_24ffd
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_25007)
call Func_10aa
ret
Data_25007:
dr $25007, $25421
Data_25421:
dr $25421, $2583b
Func_2583b: ; 0x2583b
ld bc, $7f65
callba DrawTimer
callba DrawFlippers
call Func_259fe
call Func_25895
call Func_2595e
call Func_2586c
callba DrawPinball
call Func_25a39
ret
Func_2586c: ; 0x2586c
ld a, [wMeowthXPosition]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wMeowthYPosition]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wMeowthAnimationFrame]
ld e, a
ld d, $0
ld hl, OAMIds_2588b
add hl, de
ld a, [hl]
call LoadOAMData2
ret
OAMIds_2588b:
db $21, $22, $23, $24, $25, $26, $27, $28, $33, $34
Func_25895: ; 0x25895
ld a, [wd714]
cp $b
jr nz, .asm_258a0
xor a
ld [wd714], a
.asm_258a0
ld a, [wd715]
cp $b
jr nz, .asm_258ab
xor a
ld [wd715], a
.asm_258ab
ld a, [wd716]
cp $b
jr nz, .asm_258b6
xor a
ld [wd716], a
.asm_258b6
ld a, [wd71a]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd727]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd717]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd714]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ld a, [wd71b]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd728]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd718]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd715]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ld a, [wd71c]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd729]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd719]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd716]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ret
OAMPointers_25935:
dw OAMIds_2593d
dw OAMIds_2593d
dw OAMIds_25948
dw OAMIds_25953
OAMIds_2593d:
db $29, $29, $29, $29, $2A, $2A, $2A, $2A, $2A, $2A, $2A
OAMIds_25948:
db $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2C, $2C, $2C, $2C
OAMIds_25953:
db $2D, $32, $31, $30, $2F, $2E, $2F, $30, $31, $32, $32
Func_2595e: ; 0x2595e
ld a, [wd71e]
cp $b
jr nz, .asm_25969
xor a
ld [wd71e], a
.asm_25969
ld a, [wd71f]
cp $b
jr nz, .asm_25974
xor a
ld [wd71f], a
.asm_25974
ld a, [wd720]
cp $b
jr nz, .asm_2597f
xor a
ld [wd720], a
.asm_2597f
ld a, [wd724]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd731]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd721]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd71e]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ld a, [wd725]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd732]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd722]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd71f]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ld a, [wd726]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd733]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd723]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd720]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ret
Func_259fe: ; 0x259fe
ld a, [wd795]
and a
ret z
ld de, wd79c
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, OAMIds_25a29
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_25a29:
db $35, $36, $37, $38, $39, $3A, $3B, $3C, $3D, $3E, $3F, $40, $41, $42, $43
db $FF
Func_25a39: ; 0x25a39
ld a, [wd64e]
and a
ret z
ld a, [wd652]
ld hl, hSCX
sub [hl]
ld b, a
xor a
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd64f]
cp $a
jr c, .asm_25a58
ld de, $0000
jr .asm_25a5b
.asm_25a58
ld de, $0001
.asm_25a5b
ld hl, OAMIds_25a7a
add hl, de
ld a, [hl]
call LoadOAMData2
ld hl, wd64f
inc [hl]
ld a, [hl]
cp $14
ret c
ld [hl], $0
ld hl, wd650
inc [hl]
ld a, [hl]
cp $a
ret nz
xor a
ld [wd64e], a
ret
OAMIds_25a7a: ; 0x25a7a
db $44, $45
InitSeelBonusStage: ; 0x25a7c
ld a, [wd7c1]
and a
ret nz
xor a
ld [wd4c8], a
ld [wStageCollisionState], a
ld a, $1
ld [wd7ac], a
ld a, [wBallType]
ld [wBallTypeBackup], a
xor a
ld [wd4c8], a
ld [wBallType], a
ld [wd49a], a
ld hl, Data_25ae5
ld de, wd76d
call Func_25ad8
ld de, wd777
call Func_25ad8
ld de, wd781
call Func_25ad8
xor a
ld [wd793], a
ld [wd791], a
ld [wd792], a
ld [wd739], a
ld bc, $0130 ; 1 minute 30 seconds
callba StartTimer
ld a, $11
call SetSongBank
ld de, $0003
call PlaySong
ret
Func_25ad8: ; 0x25ad8
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ret
Data_25ae5:
dr $25ae5, $25af1
StartBallSeelBonusStage: ; 0x25af1
ld a, $0
ld [wBallXPos], a
ld a, $a6
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $56
ld [wBallYPos + 1], a
ld a, $80
ld [wBallXVelocity], a
xor a
ld [wSCX], a
ld [wStageCollisionState], a
ld [wd766], a
ld a, $0
ld [wd772], a
ld a, $1
ld [wd77c], a
ld a, $0
ld [wd786], a
ld a, $4
ld [wd775], a
ld [wd77f], a
ld [wd76b], a
ld a, $1
ld [wd76c], a
ld a, $4
ld [wd776], a
ld a, $1
ld [wd780], a
ld a, $5
ld [wd771], a
ld [wd77b], a
ld [wd785], a
ld a, $ff
ld [wd79a], a
xor a
ld [wd792], a
ld [wd791], a
ld [wd64e], a
ld [wd64f], a
ld [wd650], a
ld [wd651], a
ld [wd795], a
ld [wd796], a
ld [wd797], a
ld [wd798], a
ld [wd799], a
ld [wd79a], a
ld de, wd76b
ld a, [wd76c]
call Func_26137
ld de, wd775
ld a, [wd776]
call Func_26137
ld de, wd77f
ld a, [wd780]
call Func_26137
ld a, [wd4c9]
and a
ret z
xor a
ld [wd4c9], a
ret
Func_25b97: ; 0x25b97
callba Func_142fc
call Func_2862
callba Func_262f4
call Func_25d0e
callba Func_1404a
ret
CheckSeelBonusStageGameObjectCollisions: ; 0x25bbc
call CheckSeelBonusStageSeelHeadCollisions
ret
CheckSeelBonusStageSeelHeadCollisions: ; 0x25bc0
ld a, [wd76c]
cp $0
jr nz, .seel2
ld a, [wd76e]
ld b, a
ld a, [wd770]
add $14
ld c, a
call CheckSeelHeadCollision
ld a, $0
jr c, .hitSeelHead
.seel2
ld a, [wd776]
cp $0
jr nz, .seel3
ld a, [wd778]
ld b, a
ld a, [wd77a]
add $14
ld c, a
call CheckSeelHeadCollision
ld a, $1
jr c, .hitSeelHead
.seel3
ld a, [wd780]
cp $0
jr nz, .done
ld a, [wd782]
ld b, a
ld a, [wd784]
add $14
ld c, a
call CheckSeelHeadCollision
ld a, $2
jr c, .hitSeelHead
.done
ret
.hitSeelHead
ld [wd768], a
ld a, $1
ld [wd767], a
ret
CheckSeelHeadCollision: ; 0x25c12
ld a, [wBallXPos + 1]
sub b
cp $20
jr nc, .noCollision
ld b, a
ld a, [wBallYPos + 1]
sub c
cp $20
jr nc, .noCollision
ld c, a
ld e, c
ld d, $0
sla e
rl d
sla e
rl d
sla e
rl d
sla e
rl d
sla e
rl d
ld l, b
ld h, $0
add hl, de
ld de, CircularCollisionAngles
add hl, de
ld a, BANK(CircularCollisionAngles)
call ReadByteFromBank
bit 7, a
jr nz, .noCollision
sla a
ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
ret
.noCollision
and a
ret
Func_25c5a: ; 0x25c5a
call Func_25da3
call Func_25ced
ld a, [wd793]
cp $14
jr c, .asm_25c98
ld a, [wd794]
cp $2
jr nc, .asm_25c98
ld a, $1
ld [wd498], a
ld de, $0000
call PlaySong
ld a, $1
ld [wd49a], a
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5dc
ld de, SeelStageClearedText
call LoadTextHeader
ld a, $2
ld [wd794], a
lb de, $4b, $2a
call PlaySoundEffect
.asm_25c98
ld a, [wd794]
cp $2
jr nz, .asm_25cb0
ld a, [wSFXTimer]
and a
jr nz, .asm_25cb0
ld de, $0003
call PlaySong
ld a, $5
ld [wd794], a
.asm_25cb0
ld a, [wd794]
cp $2
jr z, .asm_25cc1
callba Func_107f8
.asm_25cc1
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $1
ld [wd7be], a
call Func_2862
callba Func_86d2
ld a, $3
ld [wd791], a
ld a, [wd794]
cp $5
ret z
ld a, $1
ld [wd794], a
ret
Func_25ced: ; 0x25ced
ld a, [wd766]
and a
ret nz
ld a, [wd4b4]
cp $8a
ret nc
ld a, $1
ld [wStageCollisionState], a
ld [wd766], a
callba LoadStageCollisionAttributes
call Func_25d0e
ret
Func_25d0e: ; 0x25d0e
ld a, [wStageCollisionState]
sla a
ld c, a
ld b, $0
ld hl, Data_25d2b
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_25d21
ld hl, Data_25d67
.asm_25d21
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_25d2b)
call Func_10aa
ret
Data_25d2b:
dr $25d2b, $25d67
Data_25d67:
dr $25d67, $25da3
Func_25da3: ; 0x25da3
ld a, [wd767]
and a
jp z, .asm_25e38
xor a
ld [wd767], a
ld a, [wd768]
sla a
ld c, a
sla a
sla a
add c
ld c, a
ld b, $0
ld hl, wd76c
add hl, bc
ld d, h
ld e, l
ld a, $9
ld [de], a
dec de
dec de
dec de
push bc
ld hl, Data_261d8
call CopyHLToDE
pop bc
ld hl, wd76e
add hl, bc
ld a, [hl]
ld [wd79c], a
ld hl, wd770
add hl, bc
ld a, [hl]
add $8
ld [wd79e], a
ld a, [wd792]
cp $9
jr nz, .asm_25df1
ld a, $0
ld [wd792], a
ld [wd79a], a
.asm_25df1
ld a, [wd792]
dec a
cp $ff
jr z, .asm_25e04
ld [wd79a], a
ld de, wd79a
call Func_261f9
jr .asm_25e07
.asm_25e04
ld [wd79a], a
.asm_25e07
ld a, $33
ld [wd803], a
ld a, $8
ld [wd804], a
lb de, $00, $30
call PlaySoundEffect
call Func_25e85
ld hl, wd792
inc [hl]
ld a, [wd793]
cp $14
ret nc
ld hl, wd793
inc [hl]
ld a, [wd792]
dec a
ld b, a
ld a, [hl]
add b
ld [hl], a
ld a, $1
ld [wd64e], a
call Func_262f4
.asm_25e38
ld de, wd76c ; I think these three calls are one for each Seel swimming around
call Func_25f47
ld de, wd776
call Func_25f47
ld de, wd780
call Func_25f47
ld a, [wd792]
dec a
cp $ff
jr z, .asm_25e5d
ld [wd79a], a
ld de, wd79a
call Func_26212
jr .asm_25e60
.asm_25e5d
ld [wd79a], a
.asm_25e60
ld bc, $087a ; again, probably one call for each Seel swimming around
ld de, wd76d
ld hl, wd772
call Func_25ec5
ld bc, $087a
ld de, wd777
ld hl, wd77c
call Func_25ec5
ld bc, $087a
ld de, wd781
ld hl, wd786
call Func_25ec5
ret
Func_25e85: ; 0x25e85
ld a, [wd792]
inc a
ld d, $1
ld e, a
ld a, $1
.asm_25e8e
cp e
jr z, .asm_25e96
sla d
inc a
jr .asm_25e8e
.asm_25e96
push de
ld a, d
cp $32
jr nc, .asm_25ead
ld bc, OneHundredThousandPoints
callba AddBigBCD6FromQueueWithBallMultiplier
pop de
dec d
jr .asm_25ebf
.asm_25ead
ld bc, FiveMillionPoints
callba AddBigBCD6FromQueueWithBallMultiplier
pop de
ld a, d
sub $32
ld d, a
.asm_25ebf
ld a, d
cp $0
jr nz, .asm_25e96
ret
Func_25ec5: ; 0x25ec5
dec de
ld a, [de]
cp $1
jr z, .asm_25ece
cp $4
ret nz
.asm_25ece
inc de
push hl
ld a, [hld]
push af
push bc
ld a, [hl]
and $f
ld c, a
ld b, $0
ld hl, Data_25f27
add hl, bc
pop bc
pop af
and a
jr nz, .asm_25f05
ld a, [de]
add [hl]
ld [de], a
inc de
ld a, [de]
adc $0
ld [de], a
pop hl
cp c
ret c
ld a, $1
ld [hl], a
dec hl
dec hl
dec hl
dec hl
dec hl
dec hl
ld a, $7
ld [hl], a
dec hl
dec hl
dec hl
ld d, h
ld e, l
ld hl, Data_261c2
call CopyHLToDE
ret
.asm_25f05
ld a, [de]
sub [hl]
ld [de], a
inc de
ld a, [de]
sbc $0
ld [de], a
pop hl
cp b
ret nc
xor a
ld [hl], a
dec hl
dec hl
dec hl
dec hl
dec hl
dec hl
ld a, $8
ld [hl], a
dec hl
dec hl
dec hl
ld d, h
ld e, l
ld hl, Data_261cd
call CopyHLToDE
ret
Data_25f27:
dr $25f27, $25f47
Func_25f47: ; 0x25f47
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_2614f
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
dec de
call UpdateAnimation
pop de
ret nc
ld a, [de]
rst JumpTable ; calls JumpToFuncInTable
CallTable_25f5f: ; 0x25f5f
dw Func_25f77
dw Func_25fbe
dw Func_25ff3
dw Func_2602a
dw Func_2604c
dw Func_2607f
dw Func_260b6
dw Func_260d8
dw Func_260e2
dw Func_260ec
dw Func_26109
dw Func_26120
Func_25f77: ; 0x25f77
dec de
ld a, [de]
cp $2
ret nz
push de
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
dec a
ld [de], a
ld a, $3
jr z, .asm_25f8f
pop de
xor a
jp Func_26137
.asm_25f8f
ld hl, wd792
ld [hl], $0
call GenRandom
bit 7, a
jr z, .asm_25fa2
inc de
ld a, $1
ld [de], a
dec de
jr .asm_25fa7
.asm_25fa2
inc de
ld a, $0
ld [de], a
dec de
.asm_25fa7
inc de
ld a, [de]
and a
jr z, .asm_25fb0
ld a, $6
jr .asm_25fb2
.asm_25fb0
ld a, $3
.asm_25fb2
push af
lb de, $00, $31
call PlaySoundEffect
pop af
pop de
jp Func_26137
Func_25fbe: ; 0x25fbe
dec de
ld a, [de]
cp $4
ret nz
push de
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
dec a
ld [de], a
jr z, .asm_25fd5
pop de
ld a, $1
jp Func_26137
.asm_25fd5
ld a, [wd791]
cp $0
jr z, .asm_25fe9
ld a, $2
ld [de], a
pop de
ld a, $4
ld [de], a
ld a, $1
jp Func_26137
ret ; unused instruction
.asm_25fe9
ld hl, wd791
inc [hl]
pop de
ld a, $2
jp Func_26137
Func_25ff3: ; 0x25ff3
dec de
ld a, [de]
cp $7
ret nz
xor a
call Func_26137
inc de
inc de
inc de
inc de
inc de
ld a, [wd792]
cp $6
jr nc, .asm_26020
cp $2
jr nc, .asm_26016
ld a, $3
ld [de], a
lb de, $00, $31
call PlaySoundEffect
ret
.asm_26016
ld a, $2
ld [de], a
lb de, $00, $31
call PlaySoundEffect
ret
.asm_26020
ld a, $1
ld [de], a
lb de, $00, $31
call PlaySoundEffect
ret
Func_2602a: ; 0x2602a
dec de
ld a, [de]
cp $9
ret nz
ld a, $1
call Func_26137
inc de
inc de
inc de
inc de
inc de
call GenRandom
bit 7, a
jr z, .asm_26044
ld a, $3
jr .asm_26046
.asm_26044
ld a, $5
.asm_26046
ld [de], a
ld hl, wd791
dec [hl]
ret
Func_2604c: ; 0x2604c
dec de
ld a, [de]
cp $4
ret nz
push de
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
dec a
ld [de], a
jr z, .asm_26063
pop de
ld a, $4
jp Func_26137
.asm_26063
ld a, [wd791]
cp $0
jr z, .asm_26075
ld a, $2
ld [de], a
pop de
ld a, $4
ld [de], a
jp Func_26137
ret ; unused instruction
.asm_26075
ld hl, wd791
inc [hl]
pop de
ld a, $5
jp Func_26137
Func_2607f: ; 0x2607f
dec de
ld a, [de]
cp $7
ret nz
xor a
call Func_26137
inc de
inc de
inc de
inc de
inc de
ld a, [wd792]
cp $6
jr nc, .asm_260ac
cp $2
jr nc, .asm_260a2
ld a, $3
ld [de], a
lb de, $00, $31
call PlaySoundEffect
ret
.asm_260a2
ld a, $2
ld [de], a
lb de, $00, $31
call PlaySoundEffect
ret
.asm_260ac
ld a, $1
ld [de], a
lb de, $00, $31
call PlaySoundEffect
ret
Func_260b6: ; 0x260b6
dec de
ld a, [de]
cp $9
ret nz
ld a, $4
call Func_26137
inc de
inc de
inc de
inc de
inc de
call GenRandom
bit 7, a
jr z, .asm_260d0
ld a, $3
jr .asm_260d2
.asm_260d0
ld a, $5
.asm_260d2
ld [de], a
ld hl, wd791
dec [hl]
ret
Func_260d8: ; 0x260d8
dec de
ld a, [de]
cp $5
ret nz
ld a, $4
jp Func_26137
Func_260e2: ; 0x260e2
dec de
ld a, [de]
cp $5
ret nz
ld a, $1
jp Func_26137
Func_260ec: ; 0x260ec
dec de
ld a, [de]
cp $1
ret nz
push de
inc de
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
and a
jr z, .asm_26103
pop de
ld a, $b
jp Func_26137
.asm_26103
pop de
ld a, $a
jp Func_26137
Func_26109: ; 0x26109
dec de
ld a, [de]
cp $7
ret nz
ld a, $1
call Func_26137
inc de
inc de
inc de
inc de
inc de
ld a, $5
ld [de], a
ld hl, wd791
dec [hl]
ret
Func_26120: ; 0x26120
dec de
ld a, [de]
cp $7
ret nz
ld a, $4
call Func_26137
inc de
inc de
inc de
inc de
inc de
ld a, $5
ld [de], a
ld hl, wd791
dec [hl]
ret
Func_26137: ; 0x26137
push af
sla a
ld c, a
ld b, $0
ld hl, Data_2614f
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
call CopyHLToDE
pop de
inc de
pop af
ld [de], a
ret
Data_2614f:
dr $2614f, $261c2
Data_261c2:
dr $261c2, $261cd
Data_261cd:
dr $261cd, $261d8
Data_261d8:
dr $261d8, $261f9
Func_261f9: ; 0x261f9
ld a, $ff
ld [wd795], a
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_2623a
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
dec de
dec de
dec de
call CopyHLToDE
ret
Func_26212: ; 0x26212
ld a, [de]
sla a
ld c, a
ld b, $0
ld hl, Data_2623a
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push de
dec de
dec de
dec de
call UpdateAnimation
pop de
ret nc
dec de
ld a, [de]
cp $a
ret nz
xor a
ld [de], a
ld [wd79c], a
ld [wd79e], a
ld a, a
ld [wd795], a
ret
Data_2623a:
dr $2623a, $262f4
Func_262f4: ; 0x262f4
ld a, [wd793]
ld c, a
ld b, $0
.asm_262fa
ld a, c
and a
jr z, .asm_26306
ld a, b
add $8
ld b, a
dec c
ld a, c
jr .asm_262fa
.asm_26306
ld a, b
and a
jr z, .asm_2630c
sub $8
.asm_2630c
ld [wd652], a
ld a, [wd792]
and a
jr z, .asm_2631b
ld b, a
ld a, [wd793]
inc a
sub b
.asm_2631b
ld [wd651], a
ld a, [wd793]
cp $15
jr c, .asm_2632a
ld a, $14
ld [wd793], a
.asm_2632a
push af
xor a
ld [wd650], a
pop af
sla a
ld c, a
ld b, $0
ld hl, Data_2634a
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_26340
ld hl, Data_26764
.asm_26340
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(Data_2634a)
call Func_10aa
ret
Data_2634a:
dr $2634a, $26764
Data_26764:
dr $26764, $26b7e
Func_26b7e: ; 0x26b7e
ld bc, $7f65
callba DrawTimer
call Func_26bf7
callba DrawFlippers
callba DrawPinball
call Func_26ba9
call Func_26c3c
ret
Func_26ba9: ; 0x26ba9
ld de, wd76e
call Func_26bbc
ld de, wd778
call Func_26bbc
ld de, wd782
call Func_26bbc
ret
Func_26bbc: ; 0x26bbc
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, OAMIds_26bdf
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_26bdf:
db $54, $55, $56, $57, $58, $59, $5A, $5B, $5C, $5D, $5E, $5F, $60, $61, $62, $63
db $64, $65, $66, $67, $68, $69, $6A
db $FF
Func_26bf7: ; 0x26bf7: ; 0x26bf7
ld a, [wd795]
cp $0
ret z
ld de, wd79c
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, OAMIds_26c23
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_26c23:
db $6B, $6C, $6D, $6E, $6F, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $7A
db $7B, $7C, $7D, $7E, $7F, $80, $81, $82
db $FF
Func_26c3c: ; 0x26c3c
ld a, [wd64e]
and a
ret z
ld a, [wd652]
ld hl, hSCX
sub [hl]
ld b, a
xor a
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd64f]
cp $a
jr c, .asm_26c5b
ld de, $0000
jr .asm_26c5e
.asm_26c5b
ld de, $0001
.asm_26c5e
ld hl, OAMIds_26c7d
add hl, de
ld a, [hl]
call LoadOAMData2
ld hl, wd64f
inc [hl]
ld a, [hl]
cp $14
ret c
ld [hl], $0
ld hl, wd650
inc [hl]
ld a, [hl]
cp $a
ret nz
xor a
ld [wd64e], a
ret
OAMIds_26c7d:
db $83, $84
SECTION "banka", ROMX, BANK[$a]
HandlePokedexScreen: ; 0x28000
ld a, [wScreenState]
rst JumpTable ; calls JumpToFuncInTable
PointerTable_28004: ; 0x28004
dw LoadPokedexScreen
dw MainPokedexScreen
dw MonInfoPokedexScreen
dw Func_282e9 ; not sure if this is used ever...
dw ExitPokedexScreen
LoadPokedexScreen: ; 0x2800e
ld a, $23
ld [hLCDC], a
ld a, $e4
ld [wBGP], a
ld a, $93
ld [wOBP0], a
ld a, $e4
ld [wOBP1], a
xor a
ld [hSCX], a
ld a, $8
ld [hSCY], a
ld a, $7
ld [hWX], a
ld a, $8c
ld [hWY], a
ld a, $3b
ld [hLYC], a
ld [hLastLYC], a
ld [hNextLYCSub], a
ld [hLYCSub], a
ld hl, hSTAT
set 6, [hl]
ld hl, rIE
set 1, [hl]
ld a, $2
ld [hHBlankRoutine], a
ld hl, PointerTable_280a2
ld a, [hGameBoyColorFlag]
call LoadVideoData
xor a
ld [wCurPokedexIndex], a
ld [wPokedexOffset], a
ld [wd95b], a
ld [wd95c], a
ld [wd960], a
ld [wd961], a
ld [wd95e], a
ld a, $1
ld [wd862], a
call ClearOAMBuffer
call Func_285db
call Func_28931
call Func_289c8
call Func_28a15
call Func_28972
call Func_28a8a
call Func_28ad1
call Func_28add
call CountNumSeenOwnedMons
call Func_b66
ld a, $f
call SetSongBank
ld de, $0004
call PlaySong
call Func_588
call Func_bbe
ld hl, wScreenState
inc [hl]
ret
PointerTable_280a2: ; 0x280a2
dw Data_280a6
dw Data_280c4
Data_280a6: ; 0x280a6
dab Data_ad800
dw vTilesOB
dw $6000
dab Data_c5000
dw $9800
dw $1000
dab Data_c4800
dw vBGWin
dw $800
dab Data_c4800
dw $9e00
dw $800
dw $FFFF ; terminators
Data_280c4: ; 0x280c4
dab Data_ad800
dw vTilesOB
dw $6000
dab Data_c5000
dw $9800
dw $1000
dab Data_c5400
dw $9800
dw $1002
dab Data_c4800
dw vBGWin
dw $800
dab Data_c4800
dw $9e00
dw $800
dab Data_c4c00
dw vBGWin
dw $802
dab Data_c4c00
dw $9e00
dw $802
dab Data_dce80
dw $0000
dw $101
dw $FFFF ; terminators
MainPokedexScreen: ; 0x280fe
call Func_28513
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .asm_28142
ld a, [wd95f]
and a
jp nz, .asm_28174
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
ld a, [hl]
and a
jp z, .asm_28174
push hl
ld a, [wCurPokedexIndex]
inc a
ld e, a
ld d, $0
call PlayCry
pop hl
bit 1, [hl]
jp z, .asm_28174
call Func_288c6
call Func_2885c
call CleanOAMBuffer
call Func_2887c
call Func_2885c
ld hl, wScreenState
inc [hl]
ret
.asm_28142
bit BIT_B_BUTTON, a
jr z, .asm_2814f
call Func_285db
ld a, $4
ld [wScreenState], a
ret
.asm_2814f
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_28174
ld a, [hJoypadState]
bit BIT_START, a
jr z, .asm_28168
ld a, [wd960]
and a
ld a, $ff
ld [wd960], a
call z, Func_28add
jr .asm_28174
.asm_28168
ld a, [wd960]
and a
ld a, $0
ld [wd960], a
call nz, Func_28add
.asm_28174
call Func_285db
ret
MonInfoPokedexScreen: ; 0x28178
ld a, [wd956]
bit 0, a
jr z, .asm_28190
ld a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .asm_2818a
call Func_28912
jr .asm_281a2
.asm_2818a
bit 1, a
jr z, .asm_281a2
jr .asm_28196
.asm_28190
ld a, [hNewlyPressedButtons]
and $3
jr z, .asm_281a2
.asm_28196
call Func_288a2
call Func_285db
ld a, $1
ld [wScreenState], a
ret
.asm_281a2
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_281c7
ld a, [hJoypadState]
bit BIT_START, a
jr z, .asm_281bb
ld a, [wd960]
and a
ld a, $ff
ld [wd960], a
call z, Func_28add
jr .asm_281c7
.asm_281bb
ld a, [wd960]
and a
ld a, $0
ld [wd960], a
call nz, Func_28add
.asm_281c7
call Func_2885c
ret
Func_281cb:
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_281da
inc b
.asm_281da
ld a, [wd960]
and a
jr nz, .asm_281fb
ld hl, MonBillboardPalettePointers
add hl, bc
ld a, BANK(MonBillboardPalettePointers)
call ReadByteFromBank
inc hl
ld e, a
ld a, BANK(MonBillboardPalettePointers)
call ReadByteFromBank
inc hl
ld d, a
ld a, BANK(MonBillboardPalettePointers)
call ReadByteFromBank
ld [$ff8c], a
jr .asm_28214
.asm_281fb
ld hl, MonAnimatedPalettePointers
add hl, bc
ld a, BANK(MonAnimatedPalettePointers)
call ReadByteFromBank
inc hl
ld e, a
ld a, BANK(MonAnimatedPalettePointers)
call ReadByteFromBank
inc hl
ld d, a
ld a, BANK(MonAnimatedPalettePointers)
call ReadByteFromBank
ld [$ff8c], a
.asm_28214
ld h, d
ld l, e
ld de, wda8a
ld b, $8
.asm_2821b
push bc
ld a, [$ff8c]
call ReadByteFromBank
inc hl
ld c, a
ld a, [$ff8c]
call ReadByteFromBank
inc hl
ld b, a
ld a, c
and $1f
ld [de], a
inc de
srl b
rr c
srl b
rr c
srl b
rr c
srl b
rr c
srl b
rr c
ld a, c
and $1f
ld [de], a
inc de
srl b
rr c
srl b
rr c
srl b
rr c
srl b
rr c
srl b
rr c
ld a, c
and $1f
ld [de], a
inc de
pop bc
dec b
jr nz, .asm_2821b
ld hl, Data_28289
ld de, wda8a
ld b, $18
.asm_2826d
push hl
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [de]
inc de
push af
swap a
and $f
call PutTileInVRAM
inc hl
pop af
and $f
call PutTileInVRAM
pop hl
inc hl
inc hl
dec b
jr nz, .asm_2826d
ret
Data_28289:
dr $28289, $282b9
Data_282b9:
dr $282b9, $282e9
Func_282e9: ; 0x282e9
ld a, [wd960]
and a
jr z, .asm_28318
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, MonAnimatedSpriteTypes
add hl, bc
ld a, Bank(MonAnimatedSpriteTypes)
call ReadByteFromBank
ld c, a
ld a, [hNumFramesDropped]
swap a
and $7
cp $7
jr z, .asm_2830d
and $1
jr .asm_2830f
.asm_2830d
ld a, $2
.asm_2830f
add c
add $a5
ld bc, $2030
call LoadOAMData
.asm_28318
ld a, [wdaa2]
sla a
ld c, a
ld b, $0
ld hl, Data_282b9
add hl, bc
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, $63
call LoadOAMData
call Func_28368
ld a, [hNewlyPressedButtons]
and $6
jr z, .asm_28367
ld a, BANK(Data_c4800)
ld hl, Data_c4800
ld de, vBGWin
ld bc, $0200
call LoadVRAMData
ld a, $1
ld [rVBK], a
ld a, BANK(Data_c4c00)
ld hl, Data_c4c00
ld de, vBGWin
ld bc, $0200
call LoadVRAMData
xor a
ld [rVBK], a
call Func_28972
call Func_28a8a
call Func_28ad1
ld a, $1
ld [wScreenState], a
.asm_28367
ret
Func_28368: ; 0x28368
ld a, [hJoypadState]
bit BIT_A_BUTTON, a
jr nz, .asm_28371
jp Func_284bc
.asm_28371
ld a, [hPressedButtons]
ld b, a
ld a, [wdaa2]
ld e, a
ld d, $0
ld hl, wda8a
add hl, de
ld a, [hl]
bit 5, b
jr z, .asm_28386
dec a
jr .asm_2838a
.asm_28386
bit 4, b
ret z
inc a
.asm_2838a
and $1f
ld [hl], a
push af
sla e
rl d
ld hl, Data_28289
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
pop af
push af
swap a
and $f
call PutTileInVRAM
inc hl
pop af
and $f
call PutTileInVRAM
ld hl, Data_2842c
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [hld]
ld c, a
ld b, $0
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
ld a, [hld]
or c
ld c, a
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
ld a, [hl]
or c
ld c, a
ld a, [wd960]
and a
jr nz, .asm_283ff
ld hl, Data_2845c
add hl, de
ld a, [hl]
ld hl, rBGPI
call PutTileInVRAM
ld hl, rBGPD
ld a, c
call PutTileInVRAM
ld a, b
call PutTileInVRAM
ret
.asm_283ff
ld hl, Data_2845c
add hl, de
ld a, [hl]
ld hl, rBGPI
call PutTileInVRAM
ld hl, rBGPD
ld a, c
call PutTileInVRAM
ld a, b
call PutTileInVRAM
ld hl, Data_2848c
add hl, de
ld a, [hl]
ld hl, rOBPI
call PutTileInVRAM
ld hl, rOBPD
ld a, c
call PutTileInVRAM
ld a, b
call PutTileInVRAM
ret
Data_2842c:
dr $2842c, $2845c
Data_2845c:
dr $2845c, $2848c
Data_2848c:
dr $2848c, $284bc
Func_284bc: ; 0x284bc
ld a, [hPressedButtons]
ld b, a
ld a, [wdaa2]
bit 5, b
jr z, .asm_284cd
dec a
bit 7, a
jr nz, .asm_284ef
jr .asm_284f5
.asm_284cd
bit 4, b
jr z, .asm_284d8
inc a
cp $18
jr nc, .asm_284f3
jr .asm_284f5
.asm_284d8
bit 6, b
jr z, .asm_284e4
sub $3
bit 7, a
jr nz, .asm_284ef
jr .asm_284f5
.asm_284e4
bit 7, b
ret z
add $3
cp $18
jr nc, .asm_284f3
jr .asm_284f5
.asm_284ef
add $18
jr .asm_284f5
.asm_284f3
sub $18
.asm_284f5
ld [wdaa2], a
ret
ExitPokedexScreen: ; 0x284f9
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_28513: ; 0x28513
ld a, [hPressedButtons]
ld hl, wd95e
or [hl]
ld [hl], a
ld a, [wd95c]
and a
ret nz
ld a, [wd95e]
ld b, a
ld a, [wd9f8]
and a
ld a, NUM_POKEMON - 1
jr z, .asm_2852d
ld a, NUM_POKEMON
.asm_2852d
ld d, a
ld a, [wCurPokedexIndex]
bit 6, b
jr z, .asm_28548
and a
jr z, .asm_285a9
dec a
ld [wCurPokedexIndex], a
ld a, $4
ld [wd95c], a
ld a, $1
ld [wd95f], a
jr .asm_285a9
.asm_28548
bit 7, b
jr z, .asm_2855f
inc a
cp d
jr z, .asm_285a9
ld [wCurPokedexIndex], a
ld a, $4
ld [wd95c], a
ld a, $1
ld [wd95f], a
jr .asm_285a9
.asm_2855f
ld a, d
sub $9
ld d, a
ld a, [wPokedexOffset]
ld c, $5
bit 5, b
jr z, .asm_28586
cp $5
jr nc, .asm_28571
ld c, a
.asm_28571
sub c
ld [wPokedexOffset], a
ld a, [wCurPokedexIndex]
sub c
ld [wCurPokedexIndex], a
ld a, $1
ld [wd95f], a
call Func_285ca
jr .asm_285aa
.asm_28586
bit 4, b
jr z, .asm_285ae
cp d
jr c, .asm_28594
push af
cpl
add d
add $5
ld c, a
pop af
.asm_28594
add c
ld [wPokedexOffset], a
ld a, [wCurPokedexIndex]
add c
ld [wCurPokedexIndex], a
ld a, $1
ld [wd95f], a
call Func_285ca
jr .asm_285aa
.asm_285a9
xor a
.asm_285aa
ld [wd95e], a
ret
.asm_285ae
ld a, [wd95f]
and a
ret z
lb de, $00, $03
call PlaySoundEffect
call Func_28931
call Func_289c8
call Func_28a15
call Func_28add
xor a
ld [wd95f], a
ret
Func_285ca: ; 0x285ca
xor a
ld [wd80a], a
call Func_28972
call Func_28a8a
call Func_28ad1
ld a, [wd80a]
ret
Func_285db: ; 0x285db
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
bit 1, [hl] ; has pokemon been seen or captured?
call nz, Func_287e7
ld bc, $8c38
ld a, $64
call LoadOAMData
ld bc, vTilesSH tile $04
ld a, $65
call LoadOAMData
ld bc, $8888
ld a, $66
call LoadOAMData
call DrawCornerInfoPokedexScreen
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, DexScrollBarOffsets
add hl, bc
ld a, [hl]
add $49
ld c, a
ld b, $90
ld a, [wd95b]
srl a
srl a
and $3
ld e, a
ld d, $0
ld hl, DexScrollBarOAMIds
add hl, de
ld a, [hl]
call LoadOAMData
ld a, [wCurPokedexIndex]
ld hl, wPokedexOffset
sub [hl]
jr nc, .asm_2863b
dec [hl]
ld a, $1
ld [wd95d], a
xor a
jr .asm_28647
.asm_2863b
cp $5
jr c, .asm_28647
ld a, $1
ld [wd95d], a
inc [hl]
ld a, $4
.asm_28647
ld c, a
push bc
ld a, [hJoypadState]
and a
ld a, [wd95b]
jr z, .asm_28652
xor a
.asm_28652
inc a
ld [wd95b], a
bit 3, a
jr nz, .asm_28667
swap c
ld a, c
add $40
ld c, a
ld b, $10
ld a, $63
call LoadOAMData
.asm_28667
pop bc
ld a, [wd95c]
and a
ret z
dec a
ld [wd95c], a
sla a
ld e, a
ld d, $0
push hl
ld hl, PointerTable_2867f
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
PointerTable_2867f: ; 0x2867f
dw Func_286dd
dw Func_28721
dw Func_286dd
dw Func_28765
DexScrollBarOAMIds:
db $67, $68, $69, $68
DrawCornerInfoPokedexScreen: ; 0x2868b
; If player is holding SELECT button, it draws the seen/own count in the top-right corner.
; Otherwise, it draws the word "POKeDEX".
ld a, [hJoypadState]
bit BIT_SELECT, a
jr z, .asm_286c8
ld bc, $6d03
ld a, [wNumPokemonSeen + 1]
call LoadSeenOwnDigitOAM
ld a, [wNumPokemonSeen]
swap a
call LoadSeenOwnDigitOAM
ld a, [wNumPokemonSeen]
call LoadSeenOwnDigitOAM
ld bc, $8202
ld a, $76
call LoadOAMData ; draws the "/" between the seen/owned numbers
ld bc, $8703
ld a, [wNumPokemonOwned + 1]
call LoadSeenOwnDigitOAM
ld a, [wNumPokemonOwned]
swap a
call LoadSeenOwnDigitOAM
ld a, [wNumPokemonOwned]
call LoadSeenOwnDigitOAM
ret
.asm_286c8
ld bc, $6800
ld a, $6a
call LoadOAMData
ret
LoadSeenOwnDigitOAM: ; 0x286d1
and $f
add $6c
call LoadOAMData
ld a, b
add $7 ; adds 7 pixels to the next digit's x position on screen
ld b, a
ret
Func_286dd: ; 0x286dd
pop hl
ld a, [wd862]
and a
jr nz, .asm_286ff
push bc
push hl
ld a, [wd863]
ld e, a
ld a, [wd864]
ld d, a
ld hl, wc010
xor a
ld bc, $00a0
call LoadOrCopyVRAMData
ld a, $1
ld [wd862], a
pop hl
pop bc
.asm_286ff
ld a, [wd95d]
and a
ret z
ld a, [wd95c]
and a
jr nz, .asm_2870d
ld [wd95d], a
.asm_2870d
ld a, c
and a
jr nz, .asm_28719
ld hl, hNextFrameHBlankSCX
dec [hl]
dec [hl]
dec [hl]
dec [hl]
ret
.asm_28719
ld hl, hNextFrameHBlankSCX
inc [hl]
inc [hl]
inc [hl]
inc [hl]
ret
Func_28721: ; 0x28721
pop hl
ld a, [wd95d]
and a
ret z
ld a, c
and a
jr nz, .asm_28747
ld a, [hl]
push af
sla a
and $1e
ld c, a
ld b, $0
ld hl, Data_287c7
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
pop af
call Func_28aaa
ld hl, hNextFrameHBlankSCX
dec [hl]
dec [hl]
dec [hl]
dec [hl]
ret
.asm_28747
ld a, [hl]
add $5
push af
sla a
and $1e
ld c, a
ld b, $0
ld hl, Data_287c7
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
pop af
call Func_28aaa
ld hl, hNextFrameHBlankSCX
inc [hl]
inc [hl]
inc [hl]
inc [hl]
ret
Func_28765: ; 0x28765
pop hl
ld a, [wd95d]
and a
ret z
ld a, c
and a
jr nz, .asm_28791
push hl
ld a, [hl]
sla a
and $e
ld c, a
ld b, $0
ld hl, Data_287b7
add hl, bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld hl, hNextFrameHBlankSCX
dec [hl]
dec [hl]
dec [hl]
dec [hl]
pop hl
xor a
ld [wd862], a
ld a, [hl]
call Func_28993
ret
.asm_28791
push hl
ld a, [hl]
add $5
sla a
and $e
ld c, a
ld b, $0
ld hl, Data_287b7
add hl, bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld hl, hNextFrameHBlankSCX
inc [hl]
inc [hl]
inc [hl]
inc [hl]
pop hl
xor a
ld [wd862], a
ld a, [hl]
add $5
call Func_28993
ret
Data_287b7:
dr $287b7, $287c7
Data_287c7:
dr $287c7, $287e7
Func_287e7: ; 0x287e7
ld a, [wd960]
and a
ret z
ld a, [wd95f]
and a
ret nz
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, MonAnimatedSpriteTypes
add hl, bc
ld a, Bank(MonAnimatedSpriteTypes)
call ReadByteFromBank
bit 7, a
ret nz
ld [wd5bc], a
call Func_28815
ld a, [wd5bd]
add $a5
ld bc, $2030
call LoadOAMData
ret
Func_28815: ; 0x28815
ld a, [wd5be]
dec a
ld [wd5be], a
ret nz
ld a, [wBallHitWildMon]
inc a
and $7
ld [wBallHitWildMon], a
jr nz, .asm_28836
ld a, [wd5c3]
ld [wd5be], a
xor a
ld [wd5c4], a
ld c, $2
jr .asm_28854
.asm_28836
ld a, [wd5bc]
ld c, a
ld a, [wd5bd]
sub c
cp $1
ld c, $0
jr nc, .asm_28846
ld c, $1
.asm_28846
ld b, $0
ld hl, wd5c1
add hl, bc
ld a, [hl]
ld [wd5be], a
xor a
ld [wd5c4], a
.asm_28854
ld a, [wd5bc]
add c
ld [wd5bd], a
ret
Func_2885c: ; 0x2885c
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
bit 1, [hl]
call nz, Func_287e7
ld bc, $8888
ld a, $66
call LoadOAMData
ld bc, $6800
ld a, $6a
call LoadOAMData
ret
Func_2887c: ; 0x2887c
ld a, BANK(Data_c5120)
ld hl, Data_c5120
deCoord 0, 8, vBGMap
ld bc, $0100
call LoadVRAMData
ld a, $3f
ld [hLYC], a
ld a, $47
ld [hNextLYCSub], a
ld b, $33
.asm_28894
push bc
ld a, $7a
sub b
ld [hNextLYCSub], a
rst AdvanceFrame
pop bc
dec b
dec b
dec b
jr nz, .asm_28894
ret
Func_288a2: ; 0x288a2
ld b, $33
.asm_288a4
push bc
ld a, $44
add b
ld [hNextLYCSub], a
rst AdvanceFrame
pop bc
dec b
dec b
dec b
jr nz, .asm_288a4
ld a, $3b
ld [hLYC], a
ld [hNextLYCSub], a
ld a, BANK(Data_c5100)
ld hl, Data_c5100
deCoord 0, 8, vBGMap
ld bc, $0020
call LoadVRAMData
ret
Func_288c6: ; 0x288c6
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
bit 1, [hl]
ld hl, Unknown_2c000
jr z, .asm_288f4
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
sla c
rl b
ld hl, PokedexDescriptionPointers
add hl, bc
ld a, BANK(PokedexDescriptionPointers)
call ReadByteFromBank
inc hl
ld c, a
ld a, BANK(PokedexDescriptionPointers)
call ReadByteFromBank
ld b, a
ld h, b
ld l, c
.asm_288f4
xor a
ld [wd860], a
ld [wd861], a
ld bc, $906c
ld de, vTilesSH tile $10
call Func_28d97
rl a
ld [wd956], a
ld a, l
ld [wd957], a
ld a, h
ld [wd958], a
ret
Func_28912: ; 0x28912
ld bc, $906c
ld de, vTilesSH tile $10
ld a, [wd957]
ld l, a
ld a, [wd958]
ld h, a
call Func_28d97
rl a
ld [wd956], a
ld a, l
ld [wd957], a
ld a, h
ld [wd958], a
ret
Func_28931: ; 0x28931
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
ld a, [hl]
and a
ld hl, Data_28970
jr z, .asm_2895d
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld h, b
ld l, c
sla l
rl h
sla l
rl h
sla l
rl h
add hl, bc
add hl, bc
add hl, bc
ld bc, MonDexNames
add hl, bc
.asm_2895d
ld a, $ff
ld [wd860], a
xor a
ld [wd861], a
ld bc, $500a
ld de, vTilesBG tile $50
call Func_28e09
ret
Data_28970:
dr $28970, $28972
Func_28972: ; 0x28972
ld a, [wPokedexOffset]
ld c, a
ld b, $6
.asm_28978
push bc
ld a, c
sla a
and $e
ld e, a
ld d, $0
ld hl, Data_287b7
add hl, de
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
ld a, c
call Func_28993
pop bc
inc c
dec b
jr nz, .asm_28978
ret
Func_28993: ; 0x28993
push hl
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
ld a, [hl]
and a
ld hl, Data_289c6
jr z, .asm_289b7
ld h, b
ld l, c
sla l
rl h
sla l
rl h
sla l
rl h
add hl, bc
add hl, bc
add hl, bc
ld bc, MonDexNames
add hl, bc
.asm_289b7
xor a
ld [wd860], a
ld [wd861], a
ld bc, $500a ; not a pointer
call Func_28e09
pop hl
ret
Data_289c6:
dr $289c6, $289c8
Func_289c8: ; 0x289c8
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
bit 1, [hl]
ld hl, Data_28a12
jr z, .pokemonNotOwned
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, MonSpecies
add hl, bc
ld c, [hl]
ld h, b
ld l, c
sla l
rl h
sla l
rl h
sla l
rl h
add hl, bc
add hl, bc
add hl, bc ; value * 11
sla l
rl h
add hl, bc ; value * 23
ld bc, MonSpeciesNames
add hl, bc
.pokemonNotOwned
ld a, $ff
ld [wd860], a
ld a, $4
ld [wd861], a
ld bc, $5816
ld de, vTilesBG tile $5a
call Func_28e09
ret
Data_28a12:
dr $28a12, $28a15
Func_28a15: ; 0x28a15
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld h, b
ld l, c
sla l
rl h
add hl, bc
sla l
rl h
add hl, bc
sla l
rl h
add hl, bc
ld bc, Data_2a85d
add hl, bc
ld d, h
ld e, l
ld a, $0
ld [wd865], a
push de
hlCoord 4, 2, vBGMap
call Func_28d71
pop de
inc de
inc de
inc de
inc de
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
bit 1, [hl]
jr nz, .asm_28a54
ld de, Data_28a7f
.asm_28a54
push de
hlCoord 8, 6, vBGMap
call Func_28d71
pop de
inc de
inc de
inc de
inc de
inc de
push de
hlCoord 14, 6, vBGMap
call Func_28d71
pop de
inc de
inc de
inc de
inc de
inc de
hlCoord 16, 7, vBGMap
ld a, [rLCDC]
bit 7, a
jr nz, .asm_28a7a
ld a, [de]
ld [hl], a
ret
.asm_28a7a
ld a, [de]
call PutTileInVRAM
ret
Data_28a7f:
dr $28a7f, $28a8a
Func_28a8a: ; 0x28a8a
ld a, [wPokedexOffset]
ld c, a
ld b, $6
.asm_28a90
push bc
ld a, c
sla a
and $1e
ld e, a
ld d, $0
ld hl, Data_287c7
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, c
call Func_28aaa
pop bc
inc c
dec b
jr nz, .asm_28a90
ret
Func_28aaa: ; 0x28aaa
push hl
ld c, a
ld b, $0
ld h, b
ld l, c
sla l
rl h
add hl, bc
sla l
rl h
add hl, bc
sla l
rl h
add hl, bc
ld bc, Data_2a85d
add hl, bc
ld d, h
ld e, l
ld a, $23
ld [wd865], a
pop hl
push hl
call Func_28d71
pop hl
ret
Func_28ad1: ; 0x28ad1
ld a, [wPokedexOffset]
swap a
and $f0
sub $3c
ld [hNextFrameHBlankSCX], a
ret
Func_28add: ; 0x28add
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, wPokedexFlags
add hl, bc
ld a, [hl]
and a
jp z, LoadUncaughtPokemonBackgroundGfx
dec a
jp z, LoadSeenPokemonGfx
ld a, [wd960]
and a
jr z, .asm_28afc
call Func_28cc2
jp z, Func_28bf5
.asm_28afc
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_28b0b
inc b
.asm_28b0b
push bc
ld hl, MonBillboardPicPointers
add hl, bc
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
inc hl
ld c, a
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
inc hl
ld b, a
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
ld h, b
ld l, c
ld de, vTilesBG tile $00
ld bc, $0180
call LoadOrCopyVRAMData
call Func_28cd4
pop bc
ld a, [hGameBoyColorFlag]
and a
ret z
push bc
ld hl, MonBillboardPaletteMapPointers
add hl, bc
ld a, Bank(MonBillboardPaletteMapPointers)
call ReadByteFromBank
inc hl
ld e, a
ld a, Bank(MonBillboardPaletteMapPointers)
call ReadByteFromBank
inc hl
ld d, a
ld a, Bank(MonBillboardPaletteMapPointers)
call ReadByteFromBank
hlCoord 1, 3, vBGMap
call LoadBillboardPaletteMap
pop bc
ld hl, MonBillboardPalettePointers
add hl, bc
ld a, Bank(MonBillboardPalettePointers)
call ReadByteFromBank
inc hl
ld e, a
ld a, Bank(MonBillboardPalettePointers)
call ReadByteFromBank
inc hl
ld d, a
ld a, Bank(MonBillboardPalettePointers)
call ReadByteFromBank
ld bc, $10b0
ld hl, rBGPI
call Func_8e1
ret
LoadUncaughtPokemonBackgroundGfx: ; 0x28b76
ld a, BANK(UncaughtPokemonBackgroundPic)
ld hl, UncaughtPokemonBackgroundPic
ld de, vTilesBG tile $00
ld bc, $0180
call LoadOrCopyVRAMData
call Func_28cd4
ld a, [hGameBoyColorFlag]
and a
ret z
ld a, BANK(UncaughtPokemonPaletteMap)
ld de, UncaughtPokemonPaletteMap
hlCoord 1, 3, vBGMap
call LoadBillboardPaletteMap
ret
UncaughtPokemonPaletteMap:
db $05, $05, $05, $05, $05, $05
db $05, $05, $05, $05, $05, $05
db $05, $05, $05, $05, $05, $05
db $05, $05, $05, $05, $05, $05
LoadSeenPokemonGfx: ; 0x28baf
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_28bbe
inc b
.asm_28bbe
ld hl, MonBillboardPicPointers
add hl, bc
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
inc hl
ld c, a
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
inc hl
ld b, a
ld a, Bank(MonBillboardPicPointers)
call ReadByteFromBank
ld hl, $0180
add hl, bc
ld de, vTilesBG tile $00
ld bc, $0180
call LoadOrCopyVRAMData
call Func_28cd4
ld a, [hGameBoyColorFlag]
and a
ret z
ld a, BANK(UncaughtPokemonPaletteMap)
ld de, UncaughtPokemonPaletteMap
hlCoord 1, 3, vBGMap
call LoadBillboardPaletteMap
ret
Func_28bf5: ; 0x28bf5
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_28c04
inc b
.asm_28c04
push bc
ld a, $1
ld [rVBK], a
ld hl, MonAnimatedPicPointers
add hl, bc
ld a, Bank(MonAnimatedPicPointers)
call ReadByteFromBank
inc hl
ld c, a
ld a, Bank(MonAnimatedPicPointers)
call ReadByteFromBank
inc hl
ld b, a
ld a, Bank(MonAnimatedPicPointers)
call ReadByteFromBank
ld h, b
ld l, c
ld de, vTilesOB
ld bc, $0300
call LoadOrCopyVRAMData
xor a
ld [rVBK], a
pop bc
push bc
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, EvolutionLineIds
add hl, bc
ld a, BANK(EvolutionLineIds)
call ReadByteFromBank
ld c, a
ld b, $0
sla c
rl b
add c
ld c, a
jr nc, .asm_28c4b
inc b
.asm_28c4b
ld hl, Data_13685
add hl, bc
ld a, Bank(Data_13685)
call ReadByteFromBank
ld [wd5c1], a
ld [wd5be], a
inc hl
ld a, Bank(Data_13685)
call ReadByteFromBank
ld [wd5c2], a
inc hl
ld a, Bank(Data_13685)
call ReadByteFromBank
ld [wd5c3], a
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, MonAnimatedSpriteTypes
add hl, bc
ld a, Bank(MonAnimatedSpriteTypes)
call ReadByteFromBank
ld [wd5bc], a
ld [wd5bd], a
call Func_28cf8
pop bc
ld a, [hGameBoyColorFlag]
and a
ret z
ld hl, MonAnimatedPalettePointers
add hl, bc
ld a, Bank(MonAnimatedPalettePointers)
call ReadByteFromBank
inc hl
ld e, a
ld a, Bank(MonAnimatedPalettePointers)
call ReadByteFromBank
inc hl
ld d, a
ld a, Bank(MonAnimatedPalettePointers)
call ReadByteFromBank
push af
push de
ld bc, $10b0
ld hl, rBGPI
call Func_8e1
pop de
pop af
push af
ld bc, $08d8
ld hl, rOBPI
call Func_8e1
pop af
ld bc, $08e8
ld hl, rOBPI
call Func_8e1
ret
Func_28cc2: ; 0x28cc2
ld a, [wCurPokedexIndex]
ld c, a
ld b, $0
ld hl, MonAnimatedSpriteTypes
add hl, bc
ld a, Bank(MonAnimatedSpriteTypes)
call ReadByteFromBank
bit 7, a
ret
Func_28cd4: ; 0x28cd4
xor a
ld hl, wd961
cp [hl]
ret z
ld [hl], a
ld de, .Data_28ce0
jr asm_28d1d
.Data_28ce0: ; 0x28ce0
db $0
db $1
db $2
db $3
db $4
db $5
db $6
db $7
db $8
db $9
db $a
db $b
db $c
db $d
db $e
db $f
db $10
db $11
db $12
db $13
db $14
db $15
db $16
db $17
Func_28cf8: ; 0x28cf8
ld a, $1
ld hl, wd961
cp [hl]
ret z
ld [hl], a
ld de, .data_28d05
jr asm_28d1d
.data_28d05
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
db $fe
asm_28d1d
hlCoord 1, 3, vBGMap
ld b, $4
.asm_28d22
ld c, $6
.asm_28d24
ld a, [de]
call PutTileInVRAM
inc de
inc hl
dec c
jr nz, .asm_28d24
ld a, l
add $1a
ld l, a
dec b
jr nz, .asm_28d22
ret
CountNumSeenOwnedMons: ; 0x28d35
ld hl, wPokedexFlags
ld de, $0000 ; keep a running count: d = owned, e = seen
ld b, NUM_POKEMON
.checkSeen
bit 0, [hl] ; is mon seen?
jr z, .checkOwned
inc e
.checkOwned
bit 1, [hl] ; is mon owned?
jr z, .nextMon
inc d
.nextMon
inc hl
dec b
jr nz, .checkSeen
push de
ld a, d
call ConvertHexByteToDecWord
ld a, e
ld [wNumPokemonSeen], a
ld a, d
ld [wNumPokemonSeen + 1], a
pop de
ld a, e
call ConvertHexByteToDecWord
ld a, e
ld [wNumPokemonOwned], a
ld a, d
ld [wNumPokemonOwned + 1], a
ret
ClearPokedexData: ; 0x28d66
ld hl, wPokedexFlags
xor a
ld b, NUM_POKEMON
.asm_28d6c
ld [hli], a
dec b
jr nz, .asm_28d6c
ret
Func_28d71: ; 0x28d71
ld a, [wd865]
ld c, a
ld a, [de]
inc de
and a
ret z
cp $20
jr nz, .asm_28d81
ld a, $ff
jr .asm_28d82
.asm_28d81
add c
.asm_28d82
call Func_28d88
inc hl
jr Func_28d71
Func_28d88: ; 0x28d88
push af
ld a, [rLCDC]
bit 7, a
jr nz, .asm_28d92
pop af
ld [hl], a
ret
.asm_28d92
pop af
call PutTileInVRAM
ret
Func_28d97: ; 0x28d97
push de
ld a, b
ld [$ff8c], a
ld [$ff8d], a
ld a, c
ld [$ff8f], a
xor a
ld [$ff8e], a
ld [$ff90], a
ld [$ff91], a
call Func_28e73
.asm_28daa
call Func_2957c
jr nc, .asm_28dcb
push hl
ld [$ff92], a
cp $ff
jr nz, .asm_28dbb
call Func_208c
jr .asm_28dc8
.asm_28dbb
ld c, a
ld b, $0
ld hl, CharacterWidths
add hl, bc
ld a, [hl]
ld [$ff93], a
call LoadDexVWFCharacter
.asm_28dc8
pop hl
jr nc, .asm_28daa
.asm_28dcb
pop de
push af
ld a, e
ld [wd863], a
ld a, d
ld [wd864], a
ld a, [wd862]
and a
jr nz, .asm_28ddd
pop af
ret
.asm_28ddd
push hl
ld a, [wd861]
ld c, a
ld b, $0
bit 7, c
jr z, .asm_28de9
dec b
.asm_28de9
ld hl, wc010
add hl, bc
ld a, [$ff8f]
ld c, a
ld b, $0
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
xor a
call LoadOrCopyVRAMData
pop hl
pop af
ret
Func_28e09: ; 0x28e09
push de
ld a, b
ld [$ff8c], a
ld [$ff8d], a
ld a, c
ld [$ff8f], a
xor a
ld [$ff8e], a
ld [$ff90], a
ld [$ff91], a
call Func_28e73
.asm_28e1c
call Func_295e1
jr nc, .asm_28e35
push hl
ld [$ff92], a
ld c, a
ld b, $0
ld hl, CharacterWidths
add hl, bc
ld a, [hl]
ld [$ff93], a
call LoadDexVWFCharacter
pop hl
jr nc, .asm_28e1c
nop
.asm_28e35
pop de
push af
ld a, e
ld [wd863], a
ld a, d
ld [wd864], a
ld a, [wd862]
and a
jr nz, .asm_28e47
pop af
ret
.asm_28e47
push hl
ld a, [wd861]
ld c, a
ld b, $0
bit 7, c
jr z, .asm_28e53
dec b
.asm_28e53
ld hl, wc010
add hl, bc
ld a, [$ff8f]
ld c, a
ld b, $0
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
xor a
call LoadOrCopyVRAMData
pop hl
pop af
ret
Func_28e73: ; 0x28e73
push hl
ld a, [$ff8f]
ld c, a
ld b, $0
sla c
rl b
sla c
rl b
sla c
rl b
sla c
rl b
ld hl, Func_29566
ld a, l
sub c
ld l, a
ld a, h
sbc b
ld h, a
push hl
ld hl, wc000
ld a, [wd860]
ret
Func_28e9a:
REPT 20 * 87
ld [hli], a
ENDR
Func_29566:
REPT 20
ld [hli], a
ENDR
pop hl
ret
Func_2957c: ; 0x2957c
ld a, BANK(PokedexDescriptionPointers)
call ReadByteFromBank
inc hl
and a
ret z
cp $d ; carriage return
jr nz, .asm_2958c
ld a, $ff
scf
ret
.asm_2958c
cp "0"
jr c, .asm_29594
cp "9" + 1
jr c, .asm_295be
.asm_29594
cp "A"
jr c, .asm_2959c
cp "Z" + 1
jr c, .asm_295c2
.asm_2959c
cp "a"
jr c, .asm_295a4
cp "z" + 1
jr c, .asm_295c6
.asm_295a4
cp " "
jr z, .asm_295ca
cp ","
jr z, .asm_295cd
cp "."
jr z, .asm_295d1
cp "`"
jr z, .asm_295d5
cp "-"
jr z, .asm_295d9
cp "é"
jr z, .asm_295dd
and a
ret
.asm_295be
sub $88
scf
ret
.asm_295c2
sub $8e
scf
ret
.asm_295c6
sub $94
scf
ret
.asm_295ca
xor a
scf
ret
.asm_295cd
ld a, $f3
scf
ret
.asm_295d1
ld a, $f4
scf
ret
.asm_295d5
ld a, $fa
scf
ret
.asm_295d9
ld a, $b2
scf
ret
.asm_295dd
ld a, $f9
scf
ret
Func_295e1: ; 0x295e1
ld a, [hli]
and a
ret z
cp $80
jr nc, .asm_295ed
ld c, a
ld b, $0
jr .asm_295f0
.asm_295ed
ld b, a
ld a, [hli]
ld c, a
.asm_295f0
ld a, b
and a
jr nz, .asm_295f9
ld a, c
sub $20
scf
ret
.asm_295f9
push hl
call Func_29605
ld c, a
ld b, $0
add hl, bc
ld a, [hl]
pop hl
scf
ret
Func_29605: ; 0x29605
ld a, b
cp $81
jr nz, .asm_29611
ld hl, Data_2962f
ld a, c
sub $40
ret
.asm_29611
cp $83
jr nz, .asm_2961c
ld hl, Data_2973b
ld a, c
sub $40
ret
.asm_2961c
ld a, c
cp $9f
jr nc, .asm_29628
ld hl, Data_2969c
ld a, c
sub $4f
ret
.asm_29628
ld hl, Data_296e8
ld a, c
sub $9f
ret
Data_2962f:
dr $2962f, $2969c
Data_2969c:
dr $2969c, $296e8
Data_296e8:
dr $296e8, $2973b
Data_2973b:
dr $2973b, $29792
CharacterWidths: ; 0x29792
; The Pokedex shows variable-width font. This list specifies the width of every letter (tile?)
db $05
db $07
db $07
db $07
db $07
db $07
db $07
db $05
db $07
db $07
db $07
db $07
db $07
db $07
db $06
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $08 ; "A"
db $07 ; "B"
db $07 ; "C"
db $07 ; "D"
db $07 ; "E"
db $07 ; "F"
db $07 ; "G"
db $07 ; "H"
db $05 ; "I"
db $08 ; "J"
db $07 ; "K"
db $07 ; "L"
db $08 ; "M"
db $07 ; "N"
db $07 ; "O"
db $07 ; "P"
db $08 ; "Q"
db $07 ; "R"
db $07 ; "S"
db $08 ; "T"
db $07 ; "U"
db $08 ; "V"
db $08 ; "W"
db $08 ; "X"
db $08 ; "Y"
db $08 ; "Z"
db $07
db $08
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $08
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $05
db $08
db $07
db $07
db $08
db $07
db $07
db $07
db $08
db $07
db $07
db $08
db $07
db $08
db $08
db $08
db $08
db $08
db $07 ; "a"
db $07 ; "b"
db $07 ; "c"
db $07 ; "d"
db $07 ; "e"
db $07 ; "f"
db $07 ; "g"
db $07 ; "h"
db $03 ; "i"
db $07 ; "j"
db $07 ; "k"
db $03 ; "l"
db $08 ; "m"
db $07 ; "n"
db $07 ; "o"
db $07 ; "p"
db $07 ; "q"
db $07 ; "r"
db $07 ; "s"
db $07 ; "t"
db $07 ; "u"
db $07 ; "v"
db $08 ; "w"
db $07 ; "x"
db $07 ; "y"
db $07 ; "z"
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $07
db $03
db $07
db $05
db $05
db $05
db $05
db $05
db $07
db $07
db $07
db $07
db $05
db $07
db $07
db $07
db $07
db $07
INCLUDE "text/pokedex_mon_names.asm"
INCLUDE "data/mon_species.asm"
INCLUDE "text/pokedex_species.asm"
Data_2a85d:
dr $2a85d, $2b136
INCLUDE "data/dex_scroll_offsets.asm"
SECTION "bankb", ROMX, BANK[$b]
Unknown_2c000: ; 0x2c000
dex_text " "
dex_end
INCLUDE "text/pokedex_descriptions.asm"
SECTION "bankc", ROMX, BANK[$c]
InitRedField: ; 0x30000
ld a, [wd7c1]
and a
ret nz
xor a
ld hl, wScore + $5
ld [hld], a
ld [hld], a
ld [hld], a
ld [hld], a
ld [hld], a
ld [hl], a
ld [wNumPartyMons], a
ld [wd49b], a
ld [wd4c9], a
ld [wBallType], a
ld [wd4c8], a
ld hl, wd624
ld [hli], a
ld [hli], a
ld [hli], a
ld [wd7ac], a
ld [wd7be], a
ld [wCurrentMap], a ; PALLET_TOWN
ld a, $1
ld [wd49d], a
ld [wd482], a
ld a, $2
ld [wRightAlleyCount], a
ld a, $3
ld [wd49e], a
ld [wd610], a
ld [wd498], a
ld [wd499], a
ld a, $4
ld [wStageCollisionState], a
ld [wd7ad], a
ld a, $80
ld [wIndicatorStates], a
ld [wIndicatorStates + 3], a
ld a, $82
ld [wIndicatorStates + 1], a
callba Start20SecondSaverTimer
callba Func_16f95
ld a, $f
call SetSongBank
ld de, $0001
call PlaySong
ret
StartBallRedField: ; 0x3007d
ld a, [wd496]
and a
jp nz, StartBallAfterBonusStageRedField
ld a, $0
ld [wBallXPos], a
ld a, $a7
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $98
ld [wBallYPos + 1], a
xor a
ld [wd549], a
ld [wd580], a
ld a, [wd7ad]
bit 7, a
jr z, .asm_300ae
ld a, [wStageCollisionState]
res 0, a
ld [wd7ad], a
.asm_300ae
ld a, [wStageCollisionState]
and $1
ld [wStageCollisionState], a
ld a, [wd4c9]
and a
ret z
xor a
ld [wd4c9], a
xor a
ld [wd50b], a
ld [wd50c], a
ld [wd51d], a
ld [wd517], a
ld [wd51e], a
ld hl, wd50f
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [wLeftMapMoveCounter], a
ld [wRightMapMoveCounter], a
ld hl, wd5f9
ld [hli], a
ld [hli], a
ld [hli], a
ld [wBallType], a
ld [wd611], a
ld [wd612], a
ld [wd628], a
ld [wd629], a
ld [wd62a], a
ld [wd62b], a
ld [wd62c], a
ld [wd62d], a
ld [wd62e], a
ld [wd613], a
inc a
ld [wd482], a
ld [wd4ef], a
ld [wd4f1], a
ld a, $3
ld [wd610], a
callba Func_16f95
ld a, $f
call SetSongBank
ld de, $0001
call PlaySong
ret
StartBallAfterBonusStageRedField: ; 0x30128
ld a, $0
ld [wBallXPos], a
ld a, $50
ld [wBallXPos + 1], a
ld a, $0
ld [wBallYPos], a
ld a, $16
ld [wBallYPos + 1], a
xor a
ld [wBallYVelocity], a
ld [wBallYVelocity + 1], a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
ld [wd496], a
ld [wSCX], a
ld [wd7be], a
ld a, [wBallTypeBackup]
ld [wBallType], a
ld a, $f
call SetSongBank
ld de, $0001
call PlaySong
ret
Func_30164: ; 0x30164
ld a, [wd49b]
inc a
cp $b
jr z, .asm_30175
ld [wd49b], a
ld a, $1
ld [wd4ca], a
ret
.asm_30175
ld bc, TenMillionPoints
callba AddBigBCD6FromQueue
ld a, $2
ld [wd4ca], a
ret
Func_30188: ; 0x30188
ld a, [wd5ca]
and a
ret nz
ld a, [wd4ca]
and a
ret z
cp $1
jr nz, .asm_301a7
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, ExtraBallText
call LoadTextHeader
jr .asm_301c9
.asm_301a7
ld bc, $1000
ld de, $0000
push bc
push de
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5d4
ld de, DigitsText1to9
call Func_32cc
pop de
pop bc
ld hl, wd5cc
ld de, ExtraBallSpecialBonusText
call LoadTextHeader
.asm_301c9
xor a
ld [wd4ca], a
ret
Func_301ce: ; 0x301ce
ld a, [wCurrentStage]
call CallInFollowingTable
PointerTable_301d4: ; 0x301d4
; STAGE_RED_FIELD_TOP
padded_dab Func_314ae
; STAGE_RED_FIELD_BOTTOM
padded_dab Func_314ae
padded_dab Func_314ae
padded_dab Func_314ae
; STAGE_BLUE_FIELD_TOP
padded_dab Func_3161b
; STAGE_BLUE_FIELD_BOTTOM
padded_dab Func_3161b
StartMapMoveMode: ; 0x301ec
ld a, [wInSpecialMode]
and a
ret nz
ld a, $1
ld [wInSpecialMode], a
ld a, $2
ld [wSpecialMode], a
xor a
ld [wd54d], a
ld bc, $0030 ; 30 seconds
callba StartTimer
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_3021b
ld a, [wd55a]
add $12
call Func_30256
.asm_3021b
ld a, [wCurrentStage]
rst JumpTable ; calls JumpToFuncInTable
CallTable_3021f: ; 0x3021f
; STAGE_RED_FIELD_TOP
dw Func_311b4
; STAGE_RED_FIELD_BOTTOM
dw Func_311b4
dw Func_31324
dw Func_31324
; STAGE_BLUE_FIELD_TOP
dw Func_31326
; STAGE_BLUE_FIELD_BOTTOM
dw Func_31326
Func_3022b: ; 0x3022b
xor a
ld [wd5ca], a
call FillBottomMessageBufferWithBlackTile
xor a
ld [wInSpecialMode], a
ld [wSpecialMode], a
callba Func_86d2
ld a, [wCurrentStage]
rst JumpTable ; calls JumpToFuncInTable
CallTable_30247: ; 0x30247
; STAGE_RED_FIELD_TOP
dw Func_31234
; STAGE_RED_FIELD_BOTTOM
dw Func_31234
dw Func_31325
dw Func_31325
; STAGE_BLUE_FIELD_TOP
dw Func_313c3
; STAGE_BLUE_FIELD_TOP
dw Func_313c3
Func_30253: ; 0x30253
ld a, [wCurrentMap]
; fall through
Func_30256: ; 0x30256
sla a
ld c, a
ld b, $0
push bc
ld hl, PointerTable_3027a
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(PointerTable_3027a)
call Func_10aa
pop bc
ld a, [hGameBoyColorFlag]
and a
ret z
ld hl, PointerTable_30ceb
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(PointerTable_30ceb)
call Func_10aa
ret
PointerTable_3027a: ; 0x3027a
dw Data_302b0
dw Data_302c1
dw Data_302d2
dw Data_302e3
dw Data_302f4
dw Data_30305
dw Data_30316
dw Data_30327
dw Data_30338
dw Data_30349
dw Data_3035a
dw Data_3036b
dw Data_3037c
dw Data_3038d
dw Data_3039e
dw Data_303af
dw Data_303c0
dw Data_303d1
dw Data_303e2
dw Data_303f3
dw Data_30404
dw Data_30415
dw Data_30426
dw Data_30437
dw Data_30448
dw Data_30459
dw Data_3046a
Data_302b0: ; 0x302b0
db $08, $7B, $44, $85, $44, $8F, $44, $99, $44, $A3, $44, $AD, $44, $B7, $44, $C1, $44
Data_302c1: ; 0x302c1
db $08, $CB, $44, $D5, $44, $DF, $44, $E9, $44, $F3, $44, $FD, $44, $07, $45, $11, $45
Data_302d2: ; 0x302d2
db $08, $1B, $45, $25, $45, $2F, $45, $39, $45, $43, $45, $4D, $45, $57, $45, $61, $45
Data_302e3: ; 0x302e3
db $08, $6B, $45, $75, $45, $7F, $45, $89, $45, $93, $45, $9D, $45, $A7, $45, $B1, $45
Data_302f4: ; 0x302f4
db $08, $BB, $45, $C5, $45, $CF, $45, $D9, $45, $E3, $45, $ED, $45, $F7, $45, $01, $46
Data_30305: ; 0x30305
db $08, $0B, $46, $15, $46, $1F, $46, $29, $46, $33, $46, $3D, $46, $47, $46, $51, $46
Data_30316: ; 0x30316
db $08, $5B, $46, $65, $46, $6F, $46, $79, $46, $83, $46, $8D, $46, $97, $46, $A1, $46
Data_30327: ; 0x30327
db $08, $AB, $46, $B5, $46, $BF, $46, $C9, $46, $D3, $46, $DD, $46, $E7, $46, $F1, $46
Data_30338: ; 0x30338
db $08, $FB, $46, $05, $47, $0F, $47, $19, $47, $23, $47, $2D, $47, $37, $47, $41, $47
Data_30349: ; 0x30349
db $08, $4B, $47, $55, $47, $5F, $47, $69, $47, $73, $47, $7D, $47, $87, $47, $91, $47
Data_3035a: ; 0x3035a
db $08, $9B, $47, $A5, $47, $AF, $47, $B9, $47, $C3, $47, $CD, $47, $D7, $47, $E1, $47
Data_3036b: ; 0x3036b
db $08, $EB, $47, $F5, $47, $FF, $47, $09, $48, $13, $48, $1D, $48, $27, $48, $31, $48
Data_3037c: ; 0x3037c
db $08, $3B, $48, $45, $48, $4F, $48, $59, $48, $63, $48, $6D, $48, $77, $48, $81, $48
Data_3038d: ; 0x3038d
db $08, $8B, $48, $95, $48, $9F, $48, $A9, $48, $B3, $48, $BD, $48, $C7, $48, $D1, $48
Data_3039e: ; 0x3039e
db $08, $DB, $48, $E5, $48, $EF, $48, $F9, $48, $03, $49, $0D, $49, $17, $49, $21, $49
Data_303af: ; 0x303af
db $08, $2B, $49, $35, $49, $3F, $49, $49, $49, $53, $49, $5D, $49, $67, $49, $71, $49
Data_303c0: ; 0x303c0
db $08, $7B, $49, $85, $49, $8F, $49, $99, $49, $A3, $49, $AD, $49, $B7, $49, $C1, $49
Data_303d1: ; 0x303d1
db $08, $CB, $49, $D5, $49, $DF, $49, $E9, $49, $F3, $49, $FD, $49, $07, $4A, $11, $4A
Data_303e2: ; 0x303e2
db $08, $1B, $4A, $25, $4A, $2F, $4A, $39, $4A, $43, $4A, $4D, $4A, $57, $4A, $61, $4A
Data_303f3: ; 0x303f3
db $08, $6B, $4A, $75, $4A, $7F, $4A, $89, $4A, $93, $4A, $9D, $4A, $A7, $4A, $B1, $4A
Data_30404: ; 0x30404
db $08, $BB, $4A, $C5, $4A, $CF, $4A, $D9, $4A, $E3, $4A, $ED, $4A, $F7, $4A, $01, $4B
Data_30415: ; 0x30415
db $08, $0B, $4B, $15, $4B, $1F, $4B, $29, $4B, $33, $4B, $3D, $4B, $47, $4B, $51, $4B
Data_30426: ; 0x30426
db $08, $5B, $4B, $65, $4B, $6F, $4B, $79, $4B, $83, $4B, $8D, $4B, $97, $4B, $A1, $4B
Data_30437: ; 0x30437
db $08, $AB, $4B, $B5, $4B, $BF, $4B, $C9, $4B, $D3, $4B, $DD, $4B, $E7, $4B, $F1, $4B
Data_30448: ; 0x30448
db $08, $FB, $4B, $05, $4C, $0F, $4C, $19, $4C, $23, $4C, $2D, $4C, $37, $4C, $41, $4C
Data_30459: ; 0x30459
db $08, $4B, $4C, $55, $4C, $5F, $4C, $69, $4C, $73, $4C, $7D, $4C, $87, $4C, $91, $4C
Data_3046a: ; 0x3046a
db $08, $9B, $4C, $A5, $4C, $AF, $4C, $B9, $4C, $C3, $4C, $CD, $4C, $D7, $4C, $E1, $4C
dr $3047b, $30ceb
PointerTable_30ceb: ; 0x30ceb
dw Data_30d21
dw Data_30d26
dw Data_30d2b
dw Data_30d30
dw Data_30d35
dw Data_30d3a
dw Data_30d3f
dw Data_30d44
dw Data_30d49
dw Data_30d4e
dw Data_30d53
dw Data_30d58
dw Data_30d5d
dw Data_30d62
dw Data_30d67
dw Data_30d6c
dw Data_30d71
dw Data_30d76
dw Data_30d7b
dw Data_30d80
dw Data_30d85
dw Data_30d8a
dw Data_30d8f
dw Data_30d94
dw Data_30d99
dw Data_30d9e
dw Data_30da3
Data_30d21: ; 0x30d21
db $02, $A8, $4D, $B1, $4D
Data_30d26: ; 0x30d26
db $02, $CD, $4D, $D6, $4D
Data_30d2b: ; 0x30d2b
db $02, $F2, $4D, $FB, $4D
Data_30d30: ; 0x30d30
db $02, $17, $4E, $20, $4E
Data_30d35: ; 0x30d35
db $02, $3C, $4E, $45, $4E
Data_30d3a: ; 0x30d3a
db $02, $61, $4E, $6A, $4E
Data_30d3f: ; 0x30d3f
db $02, $86, $4E, $8F, $4E
Data_30d44: ; 0x30d44
db $02, $AB, $4E, $B4, $4E
Data_30d49: ; 0x30d49
db $02, $D0, $4E, $D9, $4E
Data_30d4e: ; 0x30d4e
db $02, $F5, $4E, $FE, $4E
Data_30d53: ; 0x30d53
db $02, $1A, $4F, $23, $4F
Data_30d58: ; 0x30d58
db $02, $3F, $4F, $48, $4F
Data_30d5d: ; 0x30d5d
db $02, $64, $4F, $6D, $4F
Data_30d62: ; 0x30d62
db $02, $89, $4F, $92, $4F
Data_30d67: ; 0x30d67
db $02, $AE, $4F, $B7, $4F
Data_30d6c: ; 0x30d6c
db $02, $D3, $4F, $DC, $4F
Data_30d71: ; 0x30d71
db $02, $F8, $4F, $01, $50
Data_30d76: ; 0x30d76
db $02, $1D, $50, $26, $50
Data_30d7b: ; 0x30d7b
db $02, $42, $50, $4B, $50
Data_30d80: ; 0x30d80
db $02, $67, $50, $70, $50
Data_30d85: ; 0x30d85
db $02, $8C, $50, $95, $50
Data_30d8a: ; 0x30d8a
db $02, $B1, $50, $BA, $50
Data_30d8f: ; 0x30d8f
db $02, $D6, $50, $DF, $50
Data_30d94: ; 0x30d94
db $02, $FB, $50, $04, $51
Data_30d99: ; 0x30d99
db $02, $20, $51, $29, $51
Data_30d9e: ; 0x30d9e
db $02, $45, $51, $4E, $51
Data_30da3: ; 0x30da3
db $02, $6A, $51, $73, $51
dr $30da8, $3118f
Func_3118f: ; 0x3118f
push bc
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld a, [wCurrentMap]
sla a
ld c, a
ld b, $0
ld hl, MapNames
add hl, bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld hl, wd5d4
call LoadTextHeader
pop de
ld hl, wd5cc
call LoadTextHeader
ret
Func_311b4: ; 0x311b4
ld a, [wd55a]
and a
jr nz, .asm_311ce
ld a, $80
ld [wIndicatorStates], a
ld [wIndicatorStates + 2], a
xor a
ld [wIndicatorStates + 1], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 4], a
jr .asm_311e2
.asm_311ce
ld a, $80
ld [wIndicatorStates + 1], a
ld [wIndicatorStates + 3], a
xor a
ld [wIndicatorStates], a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 4], a
jr .asm_311e2
.asm_311e2
ld a, $2
callba Func_149d9
ld a, $5
callba Func_149d9
ld a, $6a
ld [wc7f0], a
ld a, $6b
ld [wc810], a
ld a, $66
ld [wc7e3], a
ld a, $67
ld [wc803], a
callba Func_107b0
ld a, $4
ld [wd7ad], a
ld de, $0003
call PlaySong
ld a, [wCurrentStage]
bit 0, a
ret z
callba Func_14135
ret
Func_31234: ; 0x31234
callba Func_107a5
callba Func_107c2
callba Func_107c8
callba Func_107e9
ld a, [wCurrentStage]
bit 0, a
ret z
callba Func_14135
callba Func_16425
callba Func_30253
ret
Func_31281: ; 0x31282
ld a, [wd4e2]
inc a
cp $6
jr c, .asm_3129e
ld a, $ff
ld [wd4e3], a
ld [wd4e4], a
ld [wd4e5], a
ld [wd4e6], a
ld [wd4e7], a
ld [wd4e8], a
xor a
.asm_3129e
ld [wd4e2], a
cp $3
jr c, .asm_312b2
cp $5
jr c, .asm_312e7
ld a, INDIGO_PLATEAU
ld [wCurrentMap], a
ld [wd4e8], a
ret
.asm_312b2
call GenRandom
and $7
cp $7
jr nc, .asm_312b2
ld c, a
ld b, $0
ld hl, Data_31319
add hl, bc
ld c, [hl]
ld hl, wd4e3
ld a, [wd4e2]
and a
jr z, .asm_312d4
ld b, a
.asm_312cd
ld a, [hli]
cp c
jr z, .asm_312b2
dec b
jr nz, .asm_312cd
.asm_312d4
ld a, c
ld [wCurrentMap], a
ld a, [wd4e2]
ld c, a
ld b, $0
ld hl, wd4e3
add hl, bc
ld a, [wCurrentMap]
ld [hl], a
ret
.asm_312e7
call GenRandom
and $3
ld c, a
ld b, $0
ld hl, Data_31320
add hl, bc
ld c, [hl]
ld hl, wd4e6
ld a, [wd4e2]
sub $3
jr z, .asm_31306
ld b, a
.asm_312ff
ld a, [hli]
cp c
jr z, .asm_312e7
dec b
jr nz, .asm_312ff
.asm_31306
ld a, c
ld [wCurrentMap], a
ld a, [wd4e2]
ld c, a
ld b, $0
ld hl, wd4e3
add hl, bc
ld a, [wCurrentMap]
ld [hl], a
ret
Data_31319:
dr $31319, $31320
Data_31320:
dr $31320, $31324
Func_31324: ; 0x31324
ret
Func_31325: ; 0x31325
ret
Func_31326: ; 0x31326
ld a, [wd55a]
and a
jr nz, .asm_3134c
ld a, $80
ld [wIndicatorStates], a
ld [wIndicatorStates + 2], a
xor a
ld [wIndicatorStates + 1], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 4], a
ld a, $3
callba Func_1de4b
jr .asm_31382
.asm_3134c
ld a, $80
ld [wIndicatorStates + 1], a
ld [wIndicatorStates + 3], a
xor a
ld [wIndicatorStates], a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 4], a
ld a, $1
callba Func_1de4b
ld a, $6
callba Func_1de4b
ld a, $7
callba Func_1de6f
.asm_31382
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_3139d
ld a, $54
ld [wc7e3], a
ld a, $55
ld [wc803], a
ld a, $52
ld [wc7f0], a
ld a, $53
ld [wc810], a
.asm_3139d
ld a, $1
ld [wd644], a
callba Func_1f2ed
ld de, $0003
call PlaySong
ld a, [wCurrentStage]
bit 0, a
ret z
callba Func_1c2cb
ret
Func_313c3: ; 0x313c3
callba Func_107a5
callba Func_107c2
callba Func_1f2ff
ld a, $0
ld [wd644], a
ld a, [wCurrentStage]
bit 0, a
ret z
callba Func_1c2cb
callba Func_1e8f6
callba Func_30253
ret
Func_3140b: ; 0x3140b
ld a, [wd4e2]
inc a
cp $6
jr c, .asm_31428
ld a, $ff
ld [wd4e3], a
ld [wd4e4], a
ld [wd4e5], a
ld [wd4e6], a
ld [wd4e7], a
ld [wd4e8], a
xor a
.asm_31428
ld [wd4e2], a
cp $3
jr c, .asm_3143c
cp $5
jr c, .asm_31471
ld a, INDIGO_PLATEAU
ld [wCurrentMap], a
ld [wd4e8], a
ret
.asm_3143c
call GenRandom
and $7
cp $7
jr nc, .asm_3143c
ld c, a
ld b, $0
ld hl, Data_314a3
add hl, bc
ld c, [hl]
ld hl, wd4e3
ld a, [wd4e2]
and a
jr z, .asm_3145e
ld b, a
.asm_31457
ld a, [hli]
cp c
jr z, .asm_3143c
dec b
jr nz, .asm_31457
.asm_3145e
ld a, c
ld [wCurrentMap], a
ld a, [wd4e2]
ld c, a
ld b, $0
ld hl, wd4e3
add hl, bc
ld a, [wCurrentMap]
ld [hl], a
ret
.asm_31471
call GenRandom
and $3
ld c, a
ld b, $0
ld hl, Data_314aa
add hl, bc
ld c, [hl]
ld hl, wd4e6
ld a, [wd4e2]
sub $3
jr z, .asm_31490
ld b, a
.asm_31489
ld a, [hli]
cp c
jr z, .asm_31471
dec b
jr nz, .asm_31489
.asm_31490
ld a, c
ld [wCurrentMap], a
ld a, [wd4e2]
ld c, a
ld b, $0
ld hl, wd4e3
add hl, bc
ld a, [wCurrentMap]
ld [hl], a
ret
Data_314a3:
dr $314a3, $314aa
Data_314aa:
dr $314aa, $314ae
Func_314ae: ; 0x314ae
ld a, [wd57d]
and a
ld a, [wd54c]
jr z, .asm_314d0
cp $1
jp z, Func_31591
cp $3
jp z, Func_31591
cp $2
jp z, Func_315b3
cp $5
jp z, Func_315b3
cp $d
jp z, Func_315d5
.asm_314d0
cp $0
jr z, .asm_314d6
scf
ret
.asm_314d6
call Func_3151f
ld a, [wd54d]
call CallInFollowingTable
PointerTable_314df: ; 0xd13df
padded_dab Func_314ef
padded_dab Func_314f1
padded_dab Func_314f3
padded_dab Func_31505
Func_314ef: ; 0x314ef
scf
ret
Func_314f1: ; 0x314f1
scf
ret
Func_314f3: ; 0x314f3
callba Func_3022b
ld de, $0001
call PlaySong
scf
ret
Func_31505: ; 0x31505
ld a, [wd5ca]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
callba Func_3022b
ld de, $0001
call PlaySong
scf
ret
Func_3151f: ; 0x3151f
ld a, $50
ld [wd4ef], a
ld [wd4f1], a
callba Func_107f8
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $3
ld [wd54d], a
xor a
ld [wd604], a
ld [wIndicatorStates], a
ld [wIndicatorStates + 1], a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 4], a
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_31577
callba Func_14135
callba Func_16425
callba Func_30253
.asm_31577
callba Func_86d2
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, MapMoveFailedText
call LoadTextHeader
ret
Func_31591: ; 0x31591
ld a, [wd55a]
and a
jr nz, .asm_315b1
ld a, [wIndicatorStates]
and a
jr z, .asm_315b1
xor a
ld [wIndicatorStates], a
ld [wIndicatorStates + 2], a
ld a, $80
ld [wIndicatorStates + 4], a
ld a, $1
ld [wd604], a
ld [wd54d], a
.asm_315b1
scf
ret
Func_315b3: ; 0x315b3
ld a, [wd55a]
and a
jr z, .asm_315d3
ld a, [wIndicatorStates + 1]
and a
jr z, .asm_315d3
xor a
ld [wIndicatorStates + 1], a
ld [wIndicatorStates + 3], a
ld a, $80
ld [wIndicatorStates + 4], a
ld a, $1
ld [wd604], a
ld [wd54d], a
.asm_315d3
scf
ret
Func_315d5: ; 0x315d5
ld de, $0000
call PlaySong
rst AdvanceFrame
callba Func_31281
callba Func_30253
lb de, $25, $25
call PlaySoundEffect
ld bc, ArrivedAtMapText
callba Func_3118f
.asm_31603
callba Func_33e3
rst AdvanceFrame
ld a, [wd5ca]
and a
jr nz, .asm_31603
ld a, $2
ld [wd54d], a
scf
ret
Func_3161b: ; 0x3161b
ld a, [wd57d]
and a
ld a, [wd54c]
jr z, .asm_3163d
cp $1
jp z, Func_31708
cp $f
jp z, Func_31708
cp $2
jp z, Func_3172a
cp $e
jp z, Func_3172a
cp $d
jp z, Func_3174c
.asm_3163d
cp $0
jr z, .asm_31643
scf
ret
.asm_31643
call Func_3168c
ld a, [wd54d]
call CallInFollowingTable
PointerTable_3164c: ; 0x3164c
padded_dab Func_3165c
padded_dab Func_3165e
padded_dab Func_31660
padded_dab Func_31672
Func_3165c: ; 0x3165c
scf
ret
Func_3165e: ; 0x3165e
scf
ret
Func_31660: ; 0x31660
callba Func_3022b
ld de, $0001
call PlaySong
scf
ret
Func_31672: ; 0x31672
ld a, [wd5ca]
and a
ret nz
call FillBottomMessageBufferWithBlackTile
callba Func_3022b
ld de, $0001
call PlaySong
scf
ret
Func_3168c: ; 0x3168c
ld a, $50
ld [wLeftMapMoveDiglettAnimationCounter], a
ld [wRightMapMoveDiglettFrame], a
ld a, $3
ld [wd645], a
ld a, $1
ld [wd646], a
callba Func_107f8
ld a, [wd57e]
and a
ret z
xor a
ld [wd57e], a
ld a, $3
ld [wd54d], a
xor a
ld [wd604], a
ld [wIndicatorStates], a
ld [wIndicatorStates + 1], a
ld [wIndicatorStates + 2], a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 4], a
ld a, [wCurrentStage]
bit 0, a
jr z, .asm_316ee
callba Func_1c2cb
callba Func_1e8f6
callba Func_30253
.asm_316ee
callba Func_86d2
call FillBottomMessageBufferWithBlackTile
call Func_30db
ld hl, wd5cc
ld de, MapMoveFailedText
call LoadTextHeader
ret
Func_31708: ; 0x31708
ld a, [wd55a]
and a
jr nz, .asm_31728
ld a, [wIndicatorStates]
and a
jr z, .asm_31728
xor a
ld [wIndicatorStates], a
ld [wIndicatorStates + 2], a
ld a, $80
ld [wIndicatorStates + 4], a
ld a, $1
ld [wd604], a
ld [wd54d], a
.asm_31728
scf
ret
Func_3172a: ; 0x3172a
ld a, [wd55a]
and a
jr z, .asm_3174a
ld a, [wIndicatorStates + 1]
and a
jr z, .asm_3174a
xor a
ld [wIndicatorStates + 1], a
ld [wIndicatorStates + 3], a
ld a, $80
ld [wIndicatorStates + 4], a
ld a, $1
ld [wd604], a
ld [wd54d], a
.asm_3174a
scf
ret
Func_3174c: ; 0x3174c
ld de, $0000
call PlaySong
rst AdvanceFrame
callba Func_3140b
callba Func_30253
lb de, $25, $25
call PlaySoundEffect
ld bc, ArrivedAtMapText
callba Func_3118f
.asm_3177a
callba Func_33e3
rst AdvanceFrame
ld a, [wd5ca]
and a
jr nz, .asm_3177a
ld a, $2
ld [wd54d], a
scf
ret
SECTION "bankd", ROMX, BANK[$d]
SlotOnPic: ; 0x34000
INCBIN "gfx/billboard/slot/slot_on.2bpp"
SlotOffPic: ; 0x34180
INCBIN "gfx/billboard/slot/slot_off.2bpp"
SECTION "bankd.2", ROMX [$7f00], BANK[$d]
StageSeelBonusCollisionMasks: ; 0x37f00
INCBIN "data/collision/masks/seel_bonus.masks"
SECTION "banke", ROMX, BANK[$e]
Data_38000:
db $89, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
Data_38010:
db $89, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
Data_38020:
db $51, $10, $00, $10, $00, $10, $00, $10, $00, $80, $00, $00, $00, $00, $00, $00
Data_38030:
db $a9, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
dr $38040, $3809a ; 38040
Data_3809a:
db $00, $00, $00
db $40, $40, $40
db $90, $90, $90
db $e4, $e4, $e4
Data_380a6:
db $59, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
dr $380b6, $38156 ; 380b6
Data_38156:
db $99, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
dr $38166, $39166
Data_39166:
db $99, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
dr $39176, $3a176 ; 39176
Data_3a176:
db $a1, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
dr $3a186, $3a9e6 ; 3a186
Data_3a9e6:
db $79, $5d, $08, $00, $0b, $8c, $d0, $f4, $60, $00, $00, $00, $00, $00, $00, $00
Data_3a9f6:
db $79, $52, $08, $00, $0b, $a9, $e7, $9f, $01, $c0, $7e, $e8, $e8, $e8, $e8, $e0
Data_3aa06:
db $79, $47, $08, $00, $0b, $c4, $d0, $16, $a5, $cb, $c9, $05, $d0, $10, $a2, $28
Data_3aa16:
db $79, $3c, $08, $00, $0b, $f0, $12, $a5, $c9, $c9, $c8, $d0, $1c, $a5, $ca, $c9
Data_3aa26:
db $79, $31, $08, $00, $0b, $0c, $a5, $ca, $c9, $7e, $d0, $06, $a5, $cb, $c9, $7e
Data_3aa36:
db $79, $26, $08, $00, $0b, $39, $cd, $48, $0c, $d0, $34, $a5, $c9, $c9, $80, $d0
Data_3aa46:
db $79, $1b, $08, $00, $0b, $ea, $ea, $ea, $ea, $ea, $a9, $01, $cd, $4f, $0c, $d0
Data_3aa56:
db $79, $10, $08, $00, $0b, $4c, $20, $08, $ea, $ea, $ea, $ea, $ea, $60, $ea, $ea
Data_3aa66:
db $b9, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
Data_3aa76:
db $b9, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
SECTION "bankf", ROMX, BANK[$f]
INCLUDE "audio/engine_0f.asm"
SECTION "bank10", ROMX, BANK[$10]
INCLUDE "audio/engine_10.asm"
SECTION "bank11", ROMX, BANK[$11]
INCLUDE "audio/engine_11.asm"
SECTION "bank12", ROMX, BANK[$12]
INCLUDE "audio/engine_12.asm"
SECTION "bank13", ROMX, BANK[$13]
INCLUDE "audio/engine_13.asm"
SECTION "bank14", ROMX, BANK[$14]
INCLUDE "audio/pikapcm.asm"
; bank $15 is blank
SECTION "bank16", ROMX, BANK[$16]
INCLUDE "data/billboard/billboard_pics.asm"
INCLUDE "data/mon_gfx/mon_billboard_palettes_1.asm"
SECTION "bank17", ROMX, BANK[$17]
INCLUDE "data/billboard/reward_pics.asm"
MeowthBonusBaseGameBoyGfx: ; 0x5f600
INCBIN "gfx/stage/meowth_bonus/meowth_bonus_base_gameboy.2bpp"
SECTION "bank18", ROMX, BANK[$18]
INCLUDE "data/mon_gfx/mon_billboard_pics_1.asm"
StageRedFieldTopStatusBarSymbolsGfx_GameBoy: ; 0x63000
INCBIN "gfx/stage/red_top/status_bar_symbols_gameboy.2bpp"
INCBIN "gfx/unused_pocket_monster.2bpp"
ds $20 ; free space
StageRedFieldTopBaseGameBoyGfx: ; 0x632a0
INCBIN "gfx/stage/red_top/red_top_base_gameboy.2bpp"
SECTION "bank19", ROMX, BANK[$19]
INCLUDE "data/mon_gfx/mon_billboard_pics_2.asm"
StageBlueFieldBottomBaseGameBoyGfx: ; 0x67000
INCBIN "gfx/stage/blue_bottom/blue_bottom_base_gameboy.2bpp"
SECTION "bank1a", ROMX, BANK[$1a]
INCLUDE "data/mon_gfx/mon_billboard_pics_3.asm"
StageBlueFieldTopStatusBarSymbolsGfx_GameBoy: ; 0x6b000
INCBIN "gfx/stage/blue_top/status_bar_symbols_gameboy.2bpp"
INCBIN "gfx/unused_pocket_monster.2bpp"
ds $20 ; free space
StageBlueFieldTopBaseGameBoyGfx: ; 0x6b2a0
INCBIN "gfx/stage/blue_top/blue_top_base_gameboy.2bpp"
SECTION "bank1b", ROMX, BANK[$1b]
INCLUDE "data/mon_gfx/mon_billboard_pics_4.asm"
UnusedStageGfx: ; 0x6f000
INCBIN "gfx/stage/unused_stage.2bpp"
SECTION "bank1c", ROMX, BANK[$1c]
INCLUDE "data/mon_gfx/mon_billboard_pics_5.asm"
UncaughtPokemonBackgroundPic:
INCBIN "gfx/pokedex/uncaught_pokemon.2bpp"
INCBIN "gfx/pokedex/uncaught_pokemon.2bpp" ; This pic is unnecessarily duplicated.
ds $1800 ; free space
GengarBonusBaseGameBoyGfx: ; 0x73000
INCBIN "gfx/stage/gengar_bonus/gengar_bonus_base_gameboy.2bpp"
SECTION "bank1d", ROMX, BANK[$1d]
INCLUDE "data/mon_gfx/mon_billboard_pics_6.asm"
StageRedFieldBottomBaseGameBoyGfx: ; 0x77000
INCBIN "gfx/stage/red_bottom/red_bottom_base_gameboy.2bpp"
SECTION "bank1e", ROMX, BANK[$1e]
INCLUDE "data/mon_gfx/mon_billboard_pics_7.asm"
INCLUDE "data/billboard/bonus_multiplier_pics.asm"
INCLUDE "data/mon_gfx/mon_billboard_palettes_2.asm"
SECTION "bank1f", ROMX, BANK[$1f]
INCLUDE "data/mon_gfx/mon_animated_pics_1.asm"
MewtwoBonusBaseGameBoyGfx: ; 0x7f000
INCBIN "gfx/stage/mewtwo_bonus/mewtwo_bonus_base_gameboy.2bpp"
EraseAllDataGfx: ; 0x7fd00: ; 0x7fd00
INCBIN "gfx/erase_all_data.2bpp"
SECTION "bank20", ROMX, BANK[$20]
INCLUDE "data/mon_gfx/mon_animated_pics_2.asm"
MewtwoBonusBaseGameBoyColorGfx: ; 0x83000
INCBIN "gfx/stage/mewtwo_bonus/mewtwo_bonus_base_gameboycolor.2bpp"
StageDiglettBonusCollisionMasks: ; 0x83d00
INCBIN "data/collision/masks/diglett_bonus.masks"
SECTION "bank21", ROMX, BANK[$21]
INCLUDE "data/mon_gfx/mon_animated_pics_3.asm"
ds $300 ; free space
DiglettBonusBaseGameBoyColorGfx: ; 0x87000
INCBIN "gfx/stage/diglett_bonus/diglett_bonus_base_gameboycolor.2bpp"
GengarBonusHaunterGfx: ; 0x87d00
INCBIN "gfx/stage/gengar_bonus/haunter.interleave.2bpp"
SECTION "bank22", ROMX, BANK[$22]
INCLUDE "data/mon_gfx/mon_animated_pics_4.asm"
FieldSelectScreenGfx:
FieldSelectBlinkingBorderGfx: ; 0x8b000
INCBIN "gfx/field_select/blinking_border.2bpp"
FieldSelectGfx: ; 0x8b100
INCBIN "gfx/field_select/field_select_tiles.2bpp"
GengarBonusGastlyGfx: ; 0x8bd00
INCBIN "gfx/stage/gengar_bonus/gastly.interleave.2bpp"
ds $80 ; free space
INCLUDE "data/mon_gfx/mon_billboard_palettes_3.asm"
SECTION "bank23", ROMX, BANK[$23]
INCLUDE "data/mon_gfx/mon_animated_pics_5.asm"
DiglettBonusBaseGameBoyGfx: ; 0x8f000
INCBIN "gfx/stage/diglett_bonus/diglett_bonus_base_gameboy.2bpp"
INCLUDE "gfx/high_scores/high_scores_transition_palettes.asm"
INCLUDE "data/billboard/map_palettes.asm"
SECTION "bank24", ROMX, BANK[$24]
INCLUDE "data/mon_gfx/mon_billboard_pics_8.asm"
SeelBonusBaseGameBoyGfx: ; 0x93000
INCBIN "gfx/stage/seel_bonus/seel_bonus_base_gameboy.2bpp"
INCLUDE "data/billboard/map_palette_maps_2.asm"
dr $93c39, $94000
SECTION "bank25", ROMX, BANK[$25]
INCLUDE "data/mon_gfx/mon_billboard_pics_9.asm"
SeelBonusBaseGameBoyColorGfx: ; 0x97000
INCBIN "gfx/stage/seel_bonus/seel_bonus_base_gameboycolor.2bpp"
StageRedFieldTopGfx3: ; 0x97a00
INCBIN "gfx/stage/red_top/red_top_3.2bpp"
StageRedFieldTopGfx1: ; 0x97ba0
INCBIN "gfx/stage/red_top/red_top_1.2bpp"
StageRedFieldTopGfx2: ; 0x97e00
INCBIN "gfx/stage/red_top/red_top_2.2bpp"
SECTION "bank26", ROMX, BANK[$26]
INCLUDE "data/mon_gfx/mon_billboard_pics_10.asm"
SeelBonusSeel3Gfx: ; 0x9b000
INCBIN "gfx/stage/seel_bonus/seel_3.2bpp"
SeelBonusSeel1Gfx: ; 0x9b1a0
INCBIN "gfx/stage/seel_bonus/seel_1.2bpp"
SeelBonusSeel2Gfx: ; 0x9b400
INCBIN "gfx/stage/seel_bonus/seel_2.2bpp"
SeelBonusSeel4Gfx: ; 0x9b460
INCBIN "gfx/stage/seel_bonus/seel_4.2bpp"
GengarBonusGengarGfx: ; 0x9b900
INCBIN "gfx/stage/gengar_bonus/gengar.interleave.2bpp"
;GengarBonusGengar1Gfx: ; 0x9bba0
; INCBIN "gfx/stage/gengar_bonus/gengar_1.2bpp"
;GengarBonusGengar2Gfx: ; 0x9bd00
; INCBIN "gfx/stage/gengar_bonus/gengar_2.2bpp"
;GengarBonusGengar3Gfx: ; 0x9bd60
; INCBIN "gfx/stage/gengar_bonus/gengar_3.2bpp"
SECTION "bank27", ROMX, BANK[$27]
StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor: ; 0x9c000
INCBIN "gfx/stage/red_top/status_bar_symbols_gameboycolor.2bpp"
dr $9c100, $9c2a0
StageRedFieldTopBaseGameBoyColorGfx: ; 0x9c2a0
INCBIN "gfx/stage/red_top/red_top_base_gameboycolor.2bpp"
StageRedFieldTopGfx4: ; 0x9d000
INCBIN "gfx/stage/red_top/red_top_4.2bpp"
GengarBonusBaseGameBoyColorGfx: ; 0x9e000
INCBIN "gfx/stage/gengar_bonus/gengar_bonus_base_gameboycolor.2bpp"
GengarBonus1Gfx: ; 0x9f000
INCBIN "gfx/stage/gengar_bonus/gengar_bonus_1.2bpp"
SECTION "bank28", ROMX, BANK[$28]
StageBlueFieldTopStatusBarSymbolsGfx_GameBoyColor: ; 0xa0000
INCBIN "gfx/stage/blue_top/status_bar_symbols_gameboycolor.2bpp"
dr $a0100, $a02a0
StageBlueFieldTopBaseGameBoyColorGfx: ; 0xa02a0
INCBIN "gfx/stage/blue_top/blue_top_base_gameboycolor.2bpp"
StageBlueFieldTopGfx4: ; 0xa1000
INCBIN "gfx/stage/blue_top/blue_top_4.2bpp"
StageRedFieldBottomBaseGameBoyColorGfx: ; 0xa2000
INCBIN "gfx/stage/red_bottom/red_bottom_base_gameboycolor.2bpp"
StageRedFieldBottomGfx5: ; 0xa3000
INCBIN "gfx/stage/red_bottom/red_bottom_5.2bpp"
SECTION "bank29", ROMX, BANK[$29]
StageBlueFieldBottomBaseGameBoyColorGfx: ; 0xa4000
INCBIN "gfx/stage/blue_bottom/blue_bottom_base_gameboycolor.2bpp"
StageBlueFieldBottomGfx1: ; 0xa5000
INCBIN "gfx/stage/blue_bottom/blue_bottom_1.2bpp"
INCLUDE "data/billboard/map_pics.asm"
GFX_a7b00:
dr $a7b00, $a8000 ; 0xa7b00
SECTION "bank2a", ROMX, BANK[$2a]
dr $a8000, $a82c0
PinballGreatballShakeGfx: ; 0xa82c0
INCBIN "gfx/stage/ball_greatball_shake.w16.interleave.2bpp"
PinballUltraballShakeGfx: ; 0xa8300
INCBIN "gfx/stage/ball_ultraball_shake.w16.interleave.2bpp"
PinballMasterballShakeGfx: ; 0xa8340
INCBIN "gfx/stage/ball_masterball_shake.w16.interleave.2bpp"
PinballPokeballShakeGfx: ; 0xa8380
INCBIN "gfx/stage/ball_pokeball_shake.w16.interleave.2bpp"
StageSharedPikaBoltGfx: ; 0xa83c0
INCBIN "gfx/stage/shared/pika_bolt.2bpp"
PinballPokeballGfx: ; 0xa8400
INCBIN "gfx/stage/ball_pokeball.w32.interleave.2bpp"
FlipperGfx: ; 0xa8600
INCBIN "gfx/stage/flipper.2bpp"
PikachuSaverGfx: ; 0xa8720
INCBIN "gfx/stage/pikachu_saver.2bpp"
GFX_a8800:
INCBIN "gfx/unknown/a8800.interleave.w32.2bpp"
dr $a8980, $a8a00
PinballGreatballGfx: ; 0xa8a00
INCBIN "gfx/stage/ball_greatball.w32.interleave.2bpp"
PinballUltraballGfx: ; 0xa8c00
INCBIN "gfx/stage/ball_ultraball.w32.interleave.2bpp"
PinballMasterballGfx: ; 0xa8e00
INCBIN "gfx/stage/ball_masterball.w32.interleave.2bpp"
PinballPokeballMiniGfx: ; 0xa9000
INCBIN "gfx/stage/ball_pokeball_mini.w32.interleave.2bpp"
PinballGreatballMiniGfx: ; 0xa9200
INCBIN "gfx/stage/ball_greatball_mini.w32.interleave.2bpp"
PinballUltraballMiniGfx: ; 0xa9400
INCBIN "gfx/stage/ball_ultraball_mini.w32.interleave.2bpp"
PinballMasterballMiniGfx: ; 0xa9600
INCBIN "gfx/stage/ball_masterball_mini.w32.interleave.2bpp"
PinballBallMiniGfx: ; 0xa9800
INCBIN "gfx/stage/ball_mini.w32.interleave.2bpp"
HighScoresBaseGameBoyGfx: ; 0xa9a00
INCBIN "gfx/high_scores/high_scores_base_gameboy.2bpp"
MeowthBonusBaseGameBoyColorGfx: ; 0xab200
INCBIN "gfx/stage/meowth_bonus/meowth_bonus_base_gameboycolor.2bpp"
INCLUDE "data/billboard/map_palette_maps.asm"
dr $abc80, $abf00
INCLUDE "data/mon_gfx/mon_animated_palettes_1.asm"
SECTION "bank2b", ROMX, BANK[$2b]
TitlescreenFadeInGfx: ; 0xac000
INCBIN "gfx/titlescreen/titlescreen_fade_in.2bpp"
Data_ad800:
dr $ad800, $af000
StageBlueFieldBottomCollisionMasks: ; 0xaf000
INCBIN "data/collision/masks/blue_stage_bottom.masks"
dr $af800, $af900
DiglettBonusDugtrio3Gfx: ; 0xaf900
INCBIN "gfx/stage/diglett_bonus/dugtrio_3.2bpp"
DiglettBonusDugtrio1Gfx: ; 0xafaa0
INCBIN "gfx/stage/diglett_bonus/dugtrio_1.2bpp"
DiglettBonusDugtrio2Gfx: ; 0xafd00
INCBIN "gfx/stage/diglett_bonus/dugtrio_2.2bpp"
DiglettBonusDugtrio4Gfx: ; 0xafd60
INCBIN "gfx/stage/diglett_bonus/dugtrio_4.2bpp"
SECTION "bank2c", ROMX, BANK[$2c]
dr $b0000, $b3000
StageRedFieldTopCollisionAttributes6: ; 0xb3000
INCBIN "data/collision/maps/red_stage_top_6.collision"
dr $b3400, $b3800
FieldSelectTilemap: ; 0xb3800
INCBIN "gfx/tilemaps/field_select.map"
FieldSelectBGAttributes: ; 0xb3c00
INCBIN "gfx/bgattr/field_select.bgattr"
SECTION "bank2d", ROMX, BANK[$2d]
TitlescreenGfx: ; 0xb4000
INCBIN "gfx/titlescreen/titlescreen.2bpp"
OptionMenuAndKeyConfigGfx:
OptionMenuBlankGfx: ; 0xb5800
INCBIN "gfx/option_menu/blank.2bpp"
OptionMenuArrowGfx: ; 0xb5a00
INCBIN "gfx/option_menu/arrow.2bpp"
OptionMenuPikaBubbleGfx: ; 0xb5a20
INCBIN "gfx/option_menu/pika_bubble.2bpp"
OptionMenuBouncingPokeballGfx: ; 0xb5a80
INCBIN "gfx/option_menu/bouncing_pokeball.2bpp"
OptionMenuRumblePikachuAnimationGfx: ; 0xb5b40
INCBIN "gfx/option_menu/rumble_pikachu_animation.2bpp"
OptionMenuPsyduckGfx: ; 0xb5c00
INCBIN "gfx/option_menu/psyduck.2bpp"
OptionMenuBoldArrowGfx: ; 0xb5fc0
INCBIN "gfx/option_menu/bold_arrow.2bpp"
OptionMenuUnknownGfx: ; 0xb5fd0
INCBIN "gfx/option_menu/solid_colors.2bpp"
OptionMenuOptionTextGfx: ; 0xb6020
INCBIN "gfx/option_menu/option_text.2bpp"
OptionMenuPikachuGfx: ; 0xb6080
INCBIN "gfx/option_menu/pikachu.2bpp"
OptionMenuPsyduckFeetGfx: ; 0xb6170
INCBIN "gfx/option_menu/psyduck_feet.2bpp"
OptionMenuUnknown2Gfx: ; 0xb6200
INCBIN "gfx/option_menu/blank2.2bpp"
OptionMenuRumbleTextGfx: ; 0xb6250
INCBIN "gfx/option_menu/rumble_text.2bpp"
OptionMenuUnknown3Gfx: ; 0xb62b0
INCBIN "gfx/option_menu/blank3.2bpp"
OptionMenuKeyCoTextGfx: ; 0xb6320
INCBIN "gfx/option_menu/key_co_text.2bpp"
OptionMenuSoundTestDigitsGfx: ; 0xb6370
INCBIN "gfx/option_menu/sound_test_digits.2bpp"
OptionMenuNfigTextGfx: ; 0xb6470
INCBIN "gfx/option_menu/nfig_text.2bpp"
OptionMenuUnknown4Gfx: ; 0xb64a0
INCBIN "gfx/option_menu/blank4.2bpp"
KeyConfigResetTextGfx: ; 0xb6500
INCBIN "gfx/key_config/reset_text.2bpp"
KeyConfigBallStartTextGfx: ; 0xb6560
INCBIN "gfx/key_config/ball_start_text.2bpp"
KeyConfigLeftFlipperTextGfx: ; 0xb65f0
INCBIN "gfx/key_config/left_flipper_text.2bpp"
KeyConfigRightFlipperTextGfx: ; 0xb6680
INCBIN "gfx/key_config/right_flipper_text.2bpp"
KeyConfigTiltTextGfx: ; 0xb6710
INCBIN "gfx/key_config/tilt_text.2bpp"
KeyConfigMenuTextGfx: ; 0xb6810
INCBIN "gfx/key_config/menu_text.2bpp"
KeyConfigKeyConfigTextGfx: ; 0xb6880
INCBIN "gfx/key_config/key_config_text.2bpp"
KeyConfigIconsGfx: ; 0xb6900
INCBIN "gfx/key_config/icons.2bpp"
OptionMenuSoundTextTextGfx: ; 0xb6a40
INCBIN "gfx/option_menu/sound_test_text.2bpp"
OptionMenuOnOffTextGfx: ; 0xb6ad0
INCBIN "gfx/option_menu/on_off_text.2bpp"
OptionMenuBGMSETextGfx: ; 0xb6b10
INCBIN "gfx/option_menu/bgm_se_text.2bpp"
StageRedFieldTopCollisionAttributes5: ; 0xb6c00
INCBIN "data/collision/maps/red_stage_top_5.collision"
dr $b7000, $b7400
StageRedFieldTopCollisionAttributes4: ; 0xb7400
INCBIN "data/collision/maps/red_stage_top_4.collision"
dr $b7800, $b7c00
INCLUDE "data/mon_gfx/mon_billboard_palette_maps_5.asm"
SECTION "bank2e", ROMX, BANK[$2e]
StageRedFieldTopCollisionAttributes3: ; 0xb8000
INCBIN "data/collision/maps/red_stage_top_3.collision"
dr $b8400, $b8800
StageRedFieldTopCollisionAttributes2: ; 0xb8800
INCBIN "data/collision/maps/red_stage_top_2.collision"
dr $b8c00, $b9000
StageRedFieldTopCollisionAttributes1: ; 0xb9000
INCBIN "data/collision/maps/red_stage_top_1.collision"
dr $b9400, $b9800
StageRedFieldTopCollisionAttributes0: ; 0xb9800
INCBIN "data/collision/maps/red_stage_top_0.collision"
dr $b9c00, $ba000
StageRedFieldTopTilemap_GameBoy: ; 0xba000
INCBIN "gfx/tilemaps/stage_red_field_top_gameboy.map"
dr $ba400, $ba800
StageRedFieldBottomTilemap_GameBoy: ; 0xba800
INCBIN "gfx/tilemaps/stage_red_field_bottom_gameboy.map"
dr $bac00, $bb000
StageRedFieldTopCollisionMasks0: ; 0xbb000
INCBIN "data/collision/masks/red_stage_top_0.masks"
StageRedFieldTopCollisionMasks1: ; 0xbb800
INCBIN "data/collision/masks/red_stage_top_1.masks"
SECTION "bank2f", ROMX, BANK[$2f]
StageRedFieldTopCollisionMasks2: ; 0xbc000
INCBIN "data/collision/masks/red_stage_top_2.masks"
StageRedFieldTopCollisionMasks3: ; 0xbc800
INCBIN "data/collision/masks/red_stage_top_3.masks"
StageRedFieldTopCollisionAttributes7: ; 0xbd000
INCBIN "data/collision/maps/red_stage_top_7.collision"
dr $bd400, $bd800
StageRedFieldBottomCollisionAttributes: ; 0xbd800
INCBIN "data/collision/maps/red_stage_bottom.collision"
dr $bdc00, $be000
StageRedFieldTopTilemap_GameBoyColor: ; 0xbe000
INCBIN "gfx/tilemaps/stage_red_field_top_gameboycolor.map"
StageRedFieldTopTilemap2_GameBoyColor: ; 0xbe400
INCBIN "gfx/tilemaps/stage_red_field_top_gameboycolor_2.map"
StageRedFieldBottomTilemap_GameBoyColor: ; 0xbe800
INCBIN "gfx/tilemaps/stage_red_field_bottom_gameboycolor.map"
StageRedFieldBottomTilemap2_GameBoyColor: ; 0xbec00
INCBIN "gfx/tilemaps/stage_red_field_bottom_gameboycolor_2.map"
StageBlueFieldTopTilemap_GameBoy: ; 0xbf000
INCBIN "gfx/tilemaps/stage_blue_field_top_gameboy.map"
dr $bf400, $bf800
EraseAllDataTilemap: ; 0xbf800
INCBIN "gfx/tilemaps/erase_all_data.map"
EraseAllDataBGAttributes: ; 0xbfc00
INCBIN "gfx/bgattr/erase_all_data.bgattr"
SECTION "bank30", ROMX, BANK[$30]
StageBlueFieldBottomTilemap_GameBoy: ; 0xc0000
INCBIN "gfx/tilemaps/stage_blue_field_bottom_gameboy.map"
dr $c0400, $c0800
StageBlueFieldTopCollisionMasks: ; 0xc0800
INCBIN "data/collision/masks/blue_stage_top.masks"
StageBlueFieldTopCollisionAttributesBallEntrance: ; 0xc1000
INCBIN "data/collision/maps/blue_stage_top_ball_entrance.collision"
dr $c1400, $c1800
HighScoresTilemap2: ; 0xc1800
INCBIN "gfx/tilemaps/high_scores_screen_2.map"
HighScoresTilemap5: ; 0xc1c00
INCBIN "gfx/tilemaps/high_scores_screen_5.map"
HighScoresTilemap: ; 0xc2000
INCBIN "gfx/tilemaps/high_scores_screen.map"
HighScoresTilemap4: ; 0xc2400
INCBIN "gfx/tilemaps/high_scores_screen_4.map"
StageBlueFieldTopCollisionAttributes: ; 0xc2800
INCBIN "data/collision/maps/blue_stage_top.collision"
dr $c2c00, $c3000
OptionMenuTilemap2: ; 0xc3000
INCBIN "gfx/tilemaps/option_menu_2.map"
dr $c3240, $c3400
OptionMenuTilemap4: ; 0xc3400
INCBIN "gfx/tilemaps/option_menu_4.map"
dr $c3640, $c3800
OptionMenuTilemap: ; 0xc3800
INCBIN "gfx/tilemaps/option_menu.map"
dr $c3a40, $c3c00
OptionMenuTilemap3: ; 0xc3c00
INCBIN "gfx/tilemaps/option_menu_3.map"
dr $c3e40, $c4000
SECTION "bank31", ROMX, BANK[$31]
StageBlueFieldBottomCollisionAttributes: ; 0xc4000
INCBIN "data/collision/maps/blue_stage_bottom.collision"
dr $c4400, $c4800
Data_c4800:
dr $c4800, $c4c00
Data_c4c00:
dr $c4c00, $c5000
Data_c5000:
dr $c5000, $c5100
Data_c5100:
dr $c5100, $c5120
Data_c5120:
dr $c5120, $c5400
Data_c5400:
dr $c5400, $c5800
TitlescreenTilemap: ; 0xc5800
INCBIN "gfx/tilemaps/titlescreen.map"
TitlescreenBGAttributes: ; 0xc5c00
INCBIN "gfx/bgattr/titlescreen.bgattr"
ds $1c0 ; free space
CopyrightScreenTilemap: ; 0xc6000
INCBIN "gfx/tilemaps/copyright_screen.map"
CopyrightScreenBGAttributes: ; 0xc6400
INCBIN "gfx/bgattr/copyright_screen.bgattr"
StageBlueFieldTopTilemap_GameBoyColor: ; 0xc6800
INCBIN "gfx/tilemaps/stage_blue_field_top_gameboycolor.map"
StageBlueFieldTopTilemap2_GameBoyColor: ; 0xc6c00
INCBIN "gfx/tilemaps/stage_blue_field_top_gameboycolor_2.map"
StageBlueFieldBottomTilemap_GameBoyColor: ; 0xc7000
INCBIN "gfx/tilemaps/stage_blue_field_bottom_gameboycolor.map"
StageBlueFieldBottomTilemap2_GameBoyColor: ; 0xc7400
INCBIN "gfx/tilemaps/stage_blue_field_bottom_gameboycolor_2.map"
StageGengarBonusCollisionAttributesBallEntrance: ; 0xc7800
INCBIN "data/collision/maps/gengar_bonus_ball_entrance.collision"
SECTION "bank32", ROMX, BANK[$32]
StageGengarBonusCollisionAttributes: ; 0xc8000
INCBIN "data/collision/maps/gengar_bonus.collision"
ds $400 ; free space
GengarBonusTilemap_GameBoy: ; 0xc8800
INCBIN "gfx/tilemaps/stage_gengar_bonus_gameboy.map"
ds $400 ; free space
GengarBonusBottomTilemap_GameBoyColor: ; 0xc9000
INCBIN "gfx/tilemaps/stage_gengar_bonus_gameboycolor.map"
GengarBonusBottomTilemap2_GameBoyColor: ; 0xc9400
INCBIN "gfx/tilemaps/stage_gengar_bonus_gameboycolor_2.map"
MewtwoBonus3Gfx: ; 0xc9800
INCBIN "gfx/stage/mewtwo_bonus/mewtwo_3.2bpp"
MewtwoBonus1Gfx: ; 0xc99a0
INCBIN "gfx/stage/mewtwo_bonus/mewtwo_1.2bpp"
MewtwoBonus2Gfx: ; 0xc9c00
INCBIN "gfx/stage/mewtwo_bonus/mewtwo_2.2bpp"
MewtwoBonus4Gfx: ; 0xc9c60
INCBIN "gfx/stage/mewtwo_bonus/mewtwo_4.2bpp"
ds $100 ; free space
StageMewtwoBonusCollisionAttributesBallEntrance: ; 0xca000
INCBIN "data/collision/maps/mewtwo_bonus_ball_entrance.collision"
ds $400 ; free space
StageMewtwoBonusCollisionAttributes: ; 0xca800
INCBIN "data/collision/maps/mewtwo_bonus.collision"
ds $400 ; free space
MewtwoBonusTilemap_GameBoy: ; 0xcb000
INCBIN "gfx/tilemaps/stage_mewtwo_bonus_gameboy.map"
ds $400 ; free space
MewtoBonusBottomTilemap_GameBoyColor: ; 0xcb800
INCBIN "gfx/tilemaps/stage_mewtwo_bonus_gameboycolor.map"
MewtoBonusBottomTilemap2_GameBoyColor: ; 0xcbc00
INCBIN "gfx/tilemaps/stage_mewtwo_bonus_gameboycolor_2.map"
SECTION "bank33", ROMX, BANK[$33]
MeowthBonusMeowth3Gfx: ; 0xcc000
INCBIN "gfx/stage/meowth_bonus/meowth_3.2bpp"
MeowthBonusMeowth1Gfx: ; 0xcc1a0
INCBIN "gfx/stage/meowth_bonus/meowth_1.2bpp"
MeowthBonusMeowth2Gfx: ; 0xcc400
INCBIN "gfx/stage/meowth_bonus/meowth_2.2bpp"
MeowthBonusMeowth4Gfx: ; 0xcc460
INCBIN "gfx/stage/meowth_bonus/meowth_4.2bpp"
ds $40 ; free space
StageMeowthBonusCollisionAttributesBallEntrance: ; 0xcc800
INCBIN "data/collision/maps/meowth_bonus_ball_entrance.collision"
ds $400 ; free space
StageMeowthBonusCollisionAttributes: ; 0xcd000
INCBIN "data/collision/maps/meowth_bonus.collision"
ds $400 ; free space
MeowthBonusTilemap_GameBoy: ; 0xcd800
INCBIN "gfx/tilemaps/stage_meowth_bonus_gameboy.map"
ds $400 ; free space
MeowthBonusTilemap_GameBoyColor: ; 0xce000
INCBIN "gfx/tilemaps/stage_meowth_bonus_gameboycolor.map"
MeowthBonusTilemap2_GameBoyColor: ; 0xce400
INCBIN "gfx/tilemaps/stage_meowth_bonus_gameboycolor_2.map"
StageDiglettBonusCollisionAttributesBallEntrance: ; 0xce800
INCBIN "data/collision/maps/diglett_bonus_ball_entrance.collision"
ds $400 ; free space
StageDiglettBonusCollisionAttributes: ; 0xcf000
INCBIN "data/collision/maps/diglett_bonus.collision"
ds $400 ; free space
DiglettBonusTilemap_GameBoy: ; 0xcf800
INCBIN "gfx/tilemaps/stage_diglett_bonus_gameboy.map"
SECTION "bank34", ROMX, BANK[$34]
INCLUDE "data/collision/mon_collision_masks.asm"
dr $d2800, $d3000
DiglettBonusTilemap_GameBoyColor: ; 0xd3000
INCBIN "gfx/tilemaps/stage_diglett_bonus_gameboycolor.map"
DiglettBonusTilemap2_GameBoyColor: ; 0xd3400
INCBIN "gfx/tilemaps/stage_diglett_bonus_gameboycolor_2.map"
dr $d3800, $d4000
SECTION "bank35", ROMX, BANK[$35]
StageSeelBonusCollisionAttributesBallEntrance: ; 0xd4000
INCBIN "data/collision/maps/seel_bonus_ball_entrance.collision"
ds $400 ; free space
StageSeelBonusCollisionAttributes: ; 0xd4800
INCBIN "data/collision/maps/seel_bonus.collision"
ds $400 ; free space
SeelBonusTilemap_GameBoy: ; 0xd5000
INCBIN "gfx/tilemaps/stage_seel_bonus_gameboy.map"
ds $400 ; free space
SeelBonusTilemap_GameBoyColor: ; 0xd5800
INCBIN "gfx/tilemaps/stage_seel_bonus_gameboycolor.map"
SeelBonusTilemap2_GameBoyColor: ; 0xd5c00
INCBIN "gfx/tilemaps/stage_seel_bonus_gameboycolor_2.map"
Alphabet1Gfx: ; 0xd6000
INCBIN "gfx/stage/alphabet_1.2bpp"
GFX_d61a0: INCBIN "gfx/unknown/d61a0.2bpp"
GFX_d61b0: INCBIN "gfx/unknown/d61b0.2bpp"
GFX_d61c0: INCBIN "gfx/stage/e_acute_mono.2bpp"
GFX_d61d0: INCBIN "gfx/unknown/d61d0.2bpp"
GFX_d61e0: INCBIN "gfx/unknown/d61e0.2bpp"
dr $d61f0, $d6200
Alphabet2Gfx: ; 0xd6200
INCBIN "gfx/stage/alphabet_2.2bpp"
GFX_d63a0: INCBIN "gfx/unknown/d63a0.2bpp"
GFX_d63b0: INCBIN "gfx/unknown/d63b0.2bpp"
GFX_d63c0: INCBIN "gfx/stage/e_acute_color.2bpp"
GFX_d63d0: INCBIN "gfx/unknown/d63d0.2bpp"
GFX_d63e0: INCBIN "gfx/unknown/d63e0.2bpp"
dr $d63f0, $d6410
GFX_d6410: INCBIN "gfx/unknown/d6410.2bpp"
dr $d6420, $d6430
GFX_d6430: INCBIN "gfx/unknown/d6430.2bpp"
GFX_d6440: INCBIN "gfx/unknown/d6440.2bpp"
InGameMenuSymbolsGfx: ; 0xd6450
INCBIN "gfx/stage/menu_symbols.2bpp"
GFX_d6480: INCBIN "gfx/unknown/d6480.2bpp"
ds $170 ; free space
StageBlueFieldTopGfx3: ; 0xd6600
INCBIN "gfx/stage/blue_top/blue_top_3.2bpp"
StageBlueFieldTopGfx1: ; 0xd67a0
INCBIN "gfx/stage/blue_top/blue_top_1.2bpp"
StageBlueFieldTopGfx2: ; 0xd6a00
INCBIN "gfx/stage/blue_top/blue_top_2.2bpp"
StageRedJapaneseCharactersGfx: ; 0xd6c00
INCBIN "gfx/stage/red_bottom/japanese_characters.2bpp"
StageRedJapaneseCharactersGfx2: ; 0xd7000
INCBIN "gfx/stage/red_bottom/japanese_characters_2.2bpp"
INCLUDE "data/mon_gfx/mon_billboard_palette_maps_1.asm"
INCLUDE "gfx/high_scores/high_scores_transition_palettes_2.asm"
SECTION "bank36", ROMX, BANK[$36]
dr $d8000, $d8400
INCLUDE "data/mon_gfx/mon_billboard_palette_maps_2.asm"
SaverTextOffGfx: ; 0xd8c00
INCBIN "gfx/stage/saver_off.2bpp"
dr $d8c40, $d8c80
CatchTextGfx:
INCBIN "gfx/stage/catch.w48.2bpp"
dr $d8ce0, $d8e80
Data_d8e80:
dr $d8e80, $d8f60
Data_d8f60:
dr $d8f60, $d9000
StageRedFieldBottomCollisionMasks: ; 0xd9000
INCBIN "data/collision/masks/red_stage_bottom.masks"
INCLUDE "data/mon_gfx/mon_billboard_palette_maps_3.asm"
UnusedTextGfx: ; 0xd9c00
INCBIN "gfx/unused_text.2bpp"
CopyrightTextGfx: ; 0xda000
INCBIN "gfx/copyright_text.2bpp"
INCLUDE "data/mon_gfx/mon_billboard_palette_maps_4.asm"
StageSharedBonusSlotGlowGfx: ; 0xdac00
INCBIN "gfx/stage/shared/bonus_slot_glow.2bpp"
dr $dad60, $dade0
StageSharedBonusSlotGlow2Gfx: ; 0xdade0
INCBIN "gfx/stage/shared/bonus_slot_glow_2.2bpp"
StageRedFieldTopGfx5: ; 0xdae00
INCBIN "gfx/stage/red_top/red_top_5.2bpp"
dr $db000, $db200
TimerDigitsGfx: ; 0xdb200
INCBIN "gfx/stage/timer_digits.2bpp"
dr $db360, $db600
StageGengarBonusCollisionMasks: ; 0xdb600
INCBIN "data/collision/masks/gengar_bonus.masks"
INCLUDE "data/mon_gfx/mon_animated_palettes_2.asm"
INCLUDE "data/mon_gfx/mon_billboard_palettes_4.asm"
StageRedFieldTopGfx6: ; 0xdbb80
INCBIN "gfx/stage/red_top/red_top_6.2bpp"
dr $dbbc0, $dbc80
StageMewtwoBonusCollisionMasks: ; 0xdbc80
INCBIN "data/collision/masks/mewtwo_bonus.masks"
INCLUDE "data/mon_gfx/mon_animated_palettes_3.asm"
Data_dbe80:
dr $dbe80, $dc000
SECTION "bank37", ROMX, BANK[$37]
StageSharedArrowsGfx: ; 0xdc000
INCBIN "gfx/stage/shared/arrows.2bpp"
dr $dc080, $dc100
INCLUDE "data/mon_gfx/mon_billboard_palettes_5.asm"
StageMeowthBonusCollisionMasks: ; 0xdc600
INCBIN "data/collision/masks/meowth_bonus.masks"
INCLUDE "data/mon_gfx/mon_billboard_palettes_6.asm"
INCLUDE "data/stage_palettes.asm"
INCLUDE "data/billboard/map_palettes_2.asm"
PokeBallObjPalette: ; 0xdd168
RGB 21, 21, 21
RGB 31, 31, 31
RGB 31, 5, 4
RGB 0, 0, 0
GreatBallObjPalette: ; 0xdd170
RGB 21, 21, 21
RGB 31, 31, 31
RGB 2, 8, 31
RGB 0, 0, 0
UltraBallObjPalette: ; 0xdd178
RGB 21, 21, 21
RGB 31, 31, 31
RGB 27, 21, 0
RGB 0, 0, 0
MasterBallObjPalette: ; 0xdd180
RGB 21, 21, 21
RGB 31, 31, 31
RGB 21, 3, 21
RGB 0, 0, 0
Data_dd188:
dr $dd188, $e0000
SECTION "bank38", ROMX, BANK[$38]
dr $e0000, $e4000 ; 0xe0000
SECTION "bank39", ROMX, BANK[$39]
Data_e4000:
dr $e4000, $e8000 ; 0xe4000
SECTION "bank3a", ROMX, BANK[$3a]
GengarCollisionAngles:
INCBIN "data/collision/gengar_collision_angles.bin"
HaunterCollisionAngles:
INCBIN "data/collision/haunter_collision_angles.bin"
CircularCollisionAngles: ; 0xe9100
INCBIN "data/collision/circle_collision_angles.bin"
MeowthCollisionAngles:
INCBIN "data/collision/meowth_collision_angles.bin"
MeowthJewelCollisionAngles:
INCBIN "data/collision/meowth_jewel_collision_angles.bin"
SECTION "bank3b", ROMX, BANK[$3b]
Data_ec000:
dr $ec000, $f0000 ; 0xec000
SECTION "bank3c", ROMX, BANK[$3c]
Data_f0000:
dr $f0000, $f2400 ; 0xf0000
TiltRightOnlyForce: ; 0xf2400
INCBIN "data/tilt/right_only"
TiltUpRightForce:
INCBIN "data/tilt/up_right"
TiltUpOnlyForce:
INCBIN "data/tilt/up_only"
TiltUpLeftForce:
INCBIN "data/tilt/up_left"
TiltLeftOnlyForce:
INCBIN "data/tilt/left_only"
SECTION "bank3d", ROMX, BANK[$3d]
FlipperHorizontalCollisionAttributes: ; 0xf4000
INCBIN "data/collision/flippers/horizontal_attributes_0"
SECTION "bank3e", ROMX, BANK[$3e]
FlipperHorizontalCollisionAttributes2: ; 0xf8000
INCBIN "data/collision/flippers/horizontal_attributes_1"
FlipperVerticalCollisionAttributes: ; 0xfa000
INCBIN "data/collision/flippers/vertical_attributes_0"
SECTION "bank3f", ROMX, BANK[$3f]
FlipperVerticalCollisionAttributes2: ; 0xfc000
INCBIN "data/collision/flippers/vertical_attributes_1"