pokepinball/engine/pinball_game/slot.asm
Raymond Dodge d1f4c7fab7 Use labels instead of constants for HRAM
Use explicit ldh instruction to access HRAM locations, don't rely on optimizing ld
2024-03-17 09:27:05 -05:00

764 lines
16 KiB
NASM

DoSlotRewardRoulette: ; 0xed8e
xor a
ld [wRumblePattern], a
ld [wRumbleDuration], a
ld [wCatchEmOrEvolutionSlotRewardActive], a
ld a, [wNumPartyMons]
ld [wSlotAnyPokemonCaught], a
ld a, [wBallType]
ld c, a
ld b, $0
ld hl, BallTypeIncreases
add hl, bc
ld a, [hl]
ld [wSlotBallIncrease], a
.waitForFlippers
xor a
ldh [hJoypadState], a
ldh [hNewlyPressedButtons], a
ldh [hPressedButtons], a
call HandleTilts
ld a, [wCurrentStage]
bit 0, a
callba nz, HandleFlippers
callba DrawSpritesForStage
call UpdateBottomText
call CleanSpriteBuffer
rst AdvanceFrame
ld a, [wLeftFlipperState + 1]
and a
jr nz, .waitForFlippers
ld a, [wRightFlipperState + 1]
and a
jr nz, .waitForFlippers
ldh a, [hGameBoyColorFlag]
and a
call nz, LoadGreyBillboardPaletteData
call GenRandom
and $f0
ld [wCurSlotRewardRouletteIndex], a
xor a
ld [wSlotRouletteCounter], a
ld [wSlotRouletteSlowed], a
.rouletteLoop
ld a, [wCurSlotRewardRouletteIndex]
ld c, a
ld b, 0
ld hl, SlotRewardRoulettePermutations
add hl, bc
ld a, [wSlotRewardProgress]
add [hl]
ld c, a
ld hl, SlotRewardSets
add hl, bc
ld a, [hli]
bit 7, a ; ignore empty entires
jr nz, .continue
call ConvertSlotRewardBillboardPicture
ld [wSlotRouletteBillboardPicture], a
push af
lb de, $00, $09
call PlaySoundEffect
pop af
call LoadBillboardOffPicture
ld a, [wSlotRouletteCounter]
cp 10
jr nc, .startDelayLoop
ld a, 10
.startDelayLoop
ld b, a
.delayLoop
push bc
call Delay1Frame
ld a, [wSlotRouletteSlowed]
and a
jr nz, .continueDelay
call IsRightOrLeftFlipperKeyPressed
jr z, .continueDelay
ld [wSlotRouletteSlowed], a
ld a, 50
ld [wSlotRouletteCounter], a
lb de, $07, $28
call PlaySoundEffect
.continueDelay
pop bc
dec b
jr nz, .delayLoop
ld a, [wSlotRouletteCounter]
inc a
ld [wSlotRouletteCounter], a
cp 60
jr z, .rouletteStopped
.continue
ld a, [wCurSlotRewardRouletteIndex]
and $f0
ld b, a
ld a, [wCurSlotRewardRouletteIndex]
inc a
and $f
or b
ld [wCurSlotRewardRouletteIndex], a
jp .rouletteLoop
.rouletteStopped
ld a, [wSlotRouletteBillboardPicture]
cp BILLBOARD_SMALL_REWARD
jr nz, .playGoodRewardSoundEffect
lb de, $0c, $42
call PlaySoundEffect
jr .displayReward
.playGoodRewardSoundEffect
lb de, $0c, $43
call PlaySoundEffect
.displayReward
ld b, 40
.displayRewardLoop
push bc
rst AdvanceFrame
pop bc
call IsRightOrLeftFlipperKeyPressed
jr nz, .loadColoredRewardPicture
dec b
jr nz, .displayRewardLoop
.loadColoredRewardPicture
ldh a, [hGameBoyColorFlag]
and a
ld a, [wSlotRouletteBillboardPicture]
call nz, Func_f2a0
ld b, $80
.displayAnimatedRewardLoop
push bc
ld a, b
and $f
jr nz, .asm_eeae
bit 4, b
jr z, .asm_eea8
ld a, [wSlotRouletteBillboardPicture]
call LoadBillboardPicture
jr .asm_eeae
.asm_eea8
ld a, [wSlotRouletteBillboardPicture]
call LoadBillboardOffPicture
.asm_eeae
rst AdvanceFrame
pop bc
call IsRightOrLeftFlipperKeyPressed
jr nz, .asm_eeb8
dec b
jr nz, .displayAnimatedRewardLoop
.asm_eeb8
ld a, [wSlotRewardProgress]
add 10
cp 250
jr nz, .saveSlotRewardProgress
ld a, 100
.saveSlotRewardProgress
ld [wSlotRewardProgress], a
ld a, [wSlotRouletteBillboardPicture]
rst JumpTable ; calls JumpToFuncInTable
SlotRewards_CallTable: ; 0xeeca
dw Start30SecondSaverTimer
dw Start60SecondSaverTimer
dw Start90SecondSaverTimer
dw SlotRewardPikachuSaver
dw SlotRewardExtraBall
dw SlotRewardSmallPoints
dw SlotRewardBigPoints
dw SlotRewardCatchEmMode
dw SlotRewardEvolutionMode
dw SlotRewardUpgradeBall
dw SlotRewardUpgradeBall
dw SlotRewardUpgradeBall
dw SlotBonusMultiplier
dw SlotRewardGoToBonusStage
dw SlotRewardGoToBonusStage
dw SlotRewardGoToBonusStage
dw SlotRewardGoToBonusStage
dw SlotRewardGoToBonusStage
Delay1Frame: ; 0xeeee
; Simply does nothing for approximately 1 frame of real time
push bc
ld bc, $0200
.loop
dec bc
ld a, b
or c
jr nz, .loop
pop bc
ret
ConvertSlotRewardBillboardPicture: ; 0xeef9
cp BILLBOARD_EVOLUTION_MODE
jr nz, .checkBallUpgrade
ld a, [wSlotAnyPokemonCaught]
and a
jr nz, .evoMode
ld a, BILLBOARD_CATCHEM_MODE
ret
.evoMode
ld a, BILLBOARD_EVOLUTION_MODE
ret
.checkBallUpgrade
cp BILLBOARD_GREAT_BALL
jr nz, .checkGoToBonus
push hl
ld hl, wSlotBallIncrease
add [hl]
pop hl
ret
.checkGoToBonus
cp BILLBOARD_GENGAR_BONUS
ret nz
push hl
ld hl, wNextBonusStage
add [hl]
pop hl
ret
IsRightOrLeftFlipperKeyPressed: ; 0xef1e
push bc
ld hl, wKeyConfigRightFlipper
call IsKeyPressed
jr nz, .exit
ld hl, wKeyConfigLeftFlipper
call IsKeyPressed
.exit
pop bc
ret
BallTypeIncreases: ; 0xef2f
db 0 ; POKE_BALL
db 0
db 1 ; GREAT_BALL
db 2 ; ULTRA_BALL
db 2
db 2 ; MASTER_BALL
INCLUDE "engine/pinball_game/ball_saver/ball_saver_30.asm"
INCLUDE "engine/pinball_game/ball_saver/ball_saver_60.asm"
INCLUDE "engine/pinball_game/ball_saver/ball_saver_90.asm"
SlotRewardPikachuSaver: ; 0xef83
ld a, $1
ld [wPikachuSaverSlotRewardActive], a
ld a, MAX_PIKACHU_SAVER_CHARGE
ld [wPikachuSaverCharge], a
xor a
ld [wAudioEngineEnabled], a
call Func_310a
rst AdvanceFrame
ld a, $0
callba PlayPikachuSoundClip
ld a, $1
ld [wAudioEngineEnabled], a
ret
SlotRewardExtraBall: ; 0xefa7
callba AddExtraBall
ret
SlotRewardSmallPoints: ; 0xefb2
ld a, $8
call RandomRange
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 BILLBOARD_SMALL_REWARD_100
call LoadBillboardPicture
jr .asm_efd8
.asm_efd0
ld a, [wCurSlotBonus]
add BILLBOARD_SMALL_REWARD_100
call LoadBillboardOffPicture
.asm_efd8
rst AdvanceFrame
pop bc
ldh 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
SlotRewardBigPoints: ; 0xeff3
ld a, $8
call RandomRange
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 BILLBOARD_BIG_REWARD_1000000
call LoadBillboardPicture
jr .asm_f019
.asm_f011
ld a, [wCurSlotBonus]
add BILLBOARD_BIG_REWARD_1000000
call LoadBillboardOffPicture
.asm_f019
rst AdvanceFrame
pop bc
ldh 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
SlotRewardCatchEmMode: ; 0xf034
ld a, CATCHEM_MODE_SLOT_REWARD
ld [wCatchEmOrEvolutionSlotRewardActive], a
ret
SlotRewardEvolutionMode: ; 0xf03a
ld a, EVOLUTION_MODE_SLOT_REWARD
ld [wCatchEmOrEvolutionSlotRewardActive], a
ret
SlotRewardUpgradeBall: ; 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 EnableBottomText
ld de, FieldMultiplierText
ld hl, wScrollingText1
call LoadScrollingText
; 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 EnableBottomText
ld hl, wScrollingText2
ld de, DigitsText1to8
call Func_32cc
pop de
pop bc
ld hl, wScrollingText1
ld de, FieldMultiplierSpecialBonusText
call LoadScrollingText
.asm_f0b0
callba TransitionPinballUpgradePalette
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 RandomRange
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 BILLBOARD_BONUS_MULTIPLIER_X1
call LoadBillboardPicture
jr .asm_f0e7
.asm_f0df
ld a, [wCurSlotBonus]
add BILLBOARD_BONUS_MULTIPLIER_X1
call LoadBillboardOffPicture
.asm_f0e7
rst AdvanceFrame
pop bc
ldh 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, [wCurBonusMultiplier]
call .DivideBy25
ld b, c
ld a, [wCurSlotBonus]
inc a
ld hl, wCurBonusMultiplier
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, AddExtraBall
callba GetBCDForNextBonusMultiplier_RedField
ld a, [wBonusMultiplierTensDigit]
callba Func_f154 ; no need for BankSwitch here...
ld a, [wBonusMultiplierOnesDigit]
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 _LoadBonusMultiplierRailingGraphics_RedField
padded_dab _LoadBonusMultiplierRailingGraphics_RedField
padded_dab _LoadBonusMultiplierRailingGraphics_RedField
padded_dab _LoadBonusMultiplierRailingGraphics_RedField
padded_dab _LoadBonusMultiplierRailingGraphics_BlueField
padded_dab _LoadBonusMultiplierRailingGraphics_BlueField
SlotRewardGoToBonusStage: ; 0xf172
ld a, $1
ld [wBonusStageSlotRewardActive], a
ret
INCLUDE "engine/pinball_game/billboard.asm"
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
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc08
dab PaletteData_dcc08
dab PaletteData_dcc10
dab PaletteData_dcc18
dab PaletteData_dcc20
dab PaletteData_dcc08
dab PaletteData_dcc28
dab PaletteData_dcc08
dab PaletteData_dcc30
dab PaletteData_dcc38
dab GoToGengarBonusOnBillboardBGPalette
dab GoToMewtwoBonusOnBillboardBGPalette
dab GoToMeowthBonusOnBillboardBGPalette
dab GoToDiglettBonusOnBillboardBGPalette
dab GoToSeelBonusOnBillboardBGPalette
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
dab PaletteData_dcc00
; Each row of 16 values is a single permutation, which is repeatedly cycled
; through until stopping on the selected slot reward.
SlotRewardRoulettePermutations: ; 0xf339
db 2, 6, 0, 8, 4, 2, 6, 8, 4, 0, 6, 2, 4, 8, 0, 2
db 6, 2, 4, 8, 0, 6, 4, 8, 2, 0, 6, 8, 2, 0, 6, 8
db 2, 4, 0, 8, 6, 4, 0, 2, 6, 4, 0, 8, 6, 4, 2, 8
db 0, 8, 2, 4, 0, 8, 6, 2, 4, 0, 6, 8, 4, 0, 6, 2
db 0, 8, 2, 4, 0, 8, 6, 4, 2, 8, 0, 6, 2, 8, 0, 6
db 2, 0, 6, 4, 2, 0, 6, 8, 2, 4, 0, 6, 8, 4, 2, 6
db 0, 2, 8, 4, 0, 2, 6, 4, 8, 2, 6, 0, 4, 8, 6, 2
db 4, 8, 6, 2, 0, 8, 4, 6, 0, 2, 4, 6, 0, 2, 4, 8
db 2, 0, 4, 6, 2, 0, 8, 4, 2, 0, 6, 4, 8, 0, 6, 4
db 4, 0, 2, 8, 4, 6, 0, 8, 2, 4, 6, 8, 0, 4, 6, 2
db 6, 8, 4, 2, 6, 0, 8, 2, 4, 0, 6, 2, 8, 4, 6, 2
db 4, 6, 2, 0, 8, 4, 6, 0, 8, 2, 6, 0, 8, 2, 4, 0
db 2, 0, 6, 4, 2, 8, 6, 0, 4, 8, 2, 0, 4, 6, 8, 0
db 8, 6, 4, 0, 8, 6, 2, 0, 8, 6, 4, 0, 8, 6, 4, 2
db 2, 0, 6, 4, 8, 2, 0, 4, 8, 2, 0, 4, 6, 2, 8, 0
db 4, 6, 8, 2, 0, 6, 4, 8, 2, 6, 0, 8, 4, 6, 2, 8
; Each group of 10 pairs corresponds to the offset in wSlotRewardProgress.
; The second value in each row is unused. It appears to have been used in some
; kind of weighting scheme, perhaps to control the probability of each item being
; chosen if the player interrupted the roulette by pressing a flipper key?
SlotRewardSets: ; 0xf439
; wSlotRewardProgress = 0
db BILLBOARD_SMALL_REWARD, $19
db BILLBOARD_BONUS_MULTIPLIER, $4C
db BILLBOARD_BALL_SAVER_30, $4C
db BILLBOARD_PIKACHU_SAVER, $4C
db $FF, $00
; wSlotRewardProgress = 10
db BILLBOARD_SMALL_REWARD, $19
db BILLBOARD_BONUS_MULTIPLIER, $4C
db BILLBOARD_BALL_SAVER_30, $4C
db BILLBOARD_CATCHEM_MODE, $4C
db $FF, $00
; wSlotRewardProgress = 20
db BILLBOARD_SMALL_REWARD, $19
db BILLBOARD_BONUS_MULTIPLIER, $44
db BILLBOARD_BALL_SAVER_30, $44
db BILLBOARD_PIKACHU_SAVER, $44
db BILLBOARD_BIG_REWARD, $16
; wSlotRewardProgress = 30
db BILLBOARD_SMALL_REWARD, $19
db BILLBOARD_BONUS_MULTIPLIER, $4C
db BILLBOARD_BALL_SAVER_30, $4C
db BILLBOARD_EVOLUTION_MODE, $4C
db $FF, $00
; wSlotRewardProgress = 40
db BILLBOARD_BALL_SAVER_60, $4C
db BILLBOARD_BIG_REWARD, $66
db BILLBOARD_GENGAR_BONUS, $4C
db $FF, $00
db $FF, $00
; wSlotRewardProgress = 50
db BILLBOARD_SMALL_REWARD, $19
db BILLBOARD_BONUS_MULTIPLIER, $4C
db BILLBOARD_BALL_SAVER_30, $4C
db BILLBOARD_PIKACHU_SAVER, $4C
db $FF, $00
; wSlotRewardProgress = 60
db BILLBOARD_SMALL_REWARD, $19
db BILLBOARD_BONUS_MULTIPLIER, $4C
db BILLBOARD_BALL_SAVER_30, $4C
db BILLBOARD_CATCHEM_MODE, $4C
db $FF, $00
; wSlotRewardProgress = 70
db BILLBOARD_SMALL_REWARD, $19
db BILLBOARD_BONUS_MULTIPLIER, $44
db BILLBOARD_BALL_SAVER_30, $44
db BILLBOARD_PIKACHU_SAVER, $44
db BILLBOARD_BIG_REWARD, $16
; wSlotRewardProgress = 80
db BILLBOARD_SMALL_REWARD, $19
db BILLBOARD_BONUS_MULTIPLIER, $4C
db BILLBOARD_BALL_SAVER_30, $4C
db BILLBOARD_EVOLUTION_MODE, $4C
db $FF, $00
; wSlotRewardProgress = 90
db BILLBOARD_BALL_SAVER_60, $3F
db BILLBOARD_BIG_REWARD, $3F
db BILLBOARD_GENGAR_BONUS, $3F
db BILLBOARD_GREAT_BALL, $3F
db $FF, $00
; wSlotRewardProgress = 100
db BILLBOARD_SMALL_REWARD, $11
db BILLBOARD_BONUS_MULTIPLIER, $4F
db BILLBOARD_BALL_SAVER_30, $4F
db BILLBOARD_PIKACHU_SAVER, $4F
db $FF, $00
; wSlotRewardProgress = 110
db BILLBOARD_SMALL_REWARD, $11
db BILLBOARD_BONUS_MULTIPLIER, $4F
db BILLBOARD_BALL_SAVER_60, $4F
db BILLBOARD_CATCHEM_MODE, $4F
db $FF, $00
; wSlotRewardProgress = 120
db BILLBOARD_SMALL_REWARD, $11
db BILLBOARD_BONUS_MULTIPLIER, $44
db BILLBOARD_BALL_SAVER_30, $44
db BILLBOARD_PIKACHU_SAVER, $44
db BILLBOARD_BIG_REWARD, $1E
; wSlotRewardProgress = 130
db BILLBOARD_SMALL_REWARD, $11
db BILLBOARD_BONUS_MULTIPLIER, $4F
db BILLBOARD_BALL_SAVER_60, $4F
db BILLBOARD_EVOLUTION_MODE, $4F
db $FF, $00
; wSlotRewardProgress = 140
db BILLBOARD_BALL_SAVER_90, $66
db BILLBOARD_BIG_REWARD, $4C
db BILLBOARD_GENGAR_BONUS, $4C
db $FF, $00
db $FF, $00
; wSlotRewardProgress = 150
db BILLBOARD_SMALL_REWARD, $0A
db BILLBOARD_BONUS_MULTIPLIER, $51
db BILLBOARD_BALL_SAVER_30, $51
db BILLBOARD_PIKACHU_SAVER, $51
db $FF, $00
; wSlotRewardProgress = 160
db BILLBOARD_SMALL_REWARD, $0A
db BILLBOARD_BONUS_MULTIPLIER, $51
db BILLBOARD_BALL_SAVER_60, $51
db BILLBOARD_CATCHEM_MODE, $51
db $FF, $00
; wSlotRewardProgress = 170
db BILLBOARD_SMALL_REWARD, $0A
db BILLBOARD_BONUS_MULTIPLIER, $44
db BILLBOARD_BALL_SAVER_30, $44
db BILLBOARD_PIKACHU_SAVER, $44
db BILLBOARD_BIG_REWARD, $26
; wSlotRewardProgress = 180
db BILLBOARD_SMALL_REWARD, $0A
db BILLBOARD_BONUS_MULTIPLIER, $51
db BILLBOARD_BALL_SAVER_60, $51
db BILLBOARD_EVOLUTION_MODE, $51
db $FF, $00
; wSlotRewardProgress = 190
db BILLBOARD_BALL_SAVER_60, $3F
db BILLBOARD_BIG_REWARD, $3F
db BILLBOARD_GENGAR_BONUS, $3F
db BILLBOARD_GREAT_BALL, $3F
db $FF, $00
; wSlotRewardProgress = 200
db BILLBOARD_SMALL_REWARD, $0A
db BILLBOARD_BONUS_MULTIPLIER, $51
db BILLBOARD_BALL_SAVER_30, $51
db BILLBOARD_PIKACHU_SAVER, $51
db $FF, $00
; wSlotRewardProgress = 210
db BILLBOARD_SMALL_REWARD, $0A
db BILLBOARD_BONUS_MULTIPLIER, $51
db BILLBOARD_BALL_SAVER_60, $51
db BILLBOARD_CATCHEM_MODE, $51
db $FF, $00
; wSlotRewardProgress = 220
db BILLBOARD_SMALL_REWARD, $0A
db BILLBOARD_BONUS_MULTIPLIER, $44
db BILLBOARD_BALL_SAVER_30, $44
db BILLBOARD_PIKACHU_SAVER, $44
db BILLBOARD_BIG_REWARD, $26
; wSlotRewardProgress = 230
db BILLBOARD_SMALL_REWARD, $0A
db BILLBOARD_BONUS_MULTIPLIER, $51
db BILLBOARD_BALL_SAVER_60, $51
db BILLBOARD_EVOLUTION_MODE, $51
db $FF, $00
; wSlotRewardProgress = 240
db BILLBOARD_BALL_SAVER_60, $26
db BILLBOARD_BIG_REWARD, $26
db BILLBOARD_GENGAR_BONUS, $26
db BILLBOARD_EXTRA_BALL, $8C
db $FF, $00