Move Slot routines and rewards into own file

This commit is contained in:
Marcus Huderle
2017-07-02 13:32:06 -05:00
parent 8bc029da09
commit f5173da100
5 changed files with 702 additions and 695 deletions

View File

@@ -1 +1,4 @@
MAX_PIKACHU_SAVER_CHARGE EQU 15
CATCHEM_MODE_SLOT_REWARD EQU 1
EVOLUTION_MODE_SLOT_REWARD EQU 2

View File

@@ -0,0 +1,73 @@
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

602
engine/pinball_game/slot.asm Executable file
View File

@@ -0,0 +1,602 @@
Func_ed8e: ; 0xed8e
xor a
ld [wd803], a
ld [wd804], a
ld [wCatchEmOrEvolutionSlotRewardActive], 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 DrawSpritesForStage
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
SlotRewards_CallTable: ; 0xeeca
dw Start30SecondSaverTimer
dw Start60SecondSaverTimer
dw Start90SecondSaverTimer
dw SlotRewardPikachuSaver
dw SlotRewardBonusMultiplier
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
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
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 [wd85d], a
call Func_310a
rst AdvanceFrame
ld a, $0
callba PlayPikachuSoundClip
ld a, $1
ld [wd85d], a
ret
SlotRewardBonusMultiplier: ; 0xefa7
callba Func_30164
ret
SlotRewardSmallPoints: ; 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
SlotRewardBigPoints: ; 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
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 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
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
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

712
main.asm
View File

@@ -179,681 +179,7 @@ INCLUDE "engine/pinball_game/ball_loss/ball_loss_seel_bonus.asm"
INCLUDE "engine/pinball_game/flippers.asm"
INCLUDE "engine/pinball_game/stage_collision_attributes.asm"
INCLUDE "engine/pinball_game/vertical_screen_transition.asm"
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 DrawSpritesForStage
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
SlotRewards_CallTable: ; 0xeeca
dw Start30SecondSaverTimer
dw Start60SecondSaverTimer
dw Start90SecondSaverTimer
dw SlotRewardPikachuSaver
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
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 [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
INCLUDE "engine/pinball_game/slot.asm"
Func_f533: ; 0xf533
call FillBottomMessageBufferWithBlackTile
@@ -9445,15 +8771,15 @@ Func_16279: ; 0x16279
and a
ret nz
call Func_16425
ld a, [wd622]
cp $1
ld a, [wCatchEmOrEvolutionSlotRewardActive]
cp CATCHEM_MODE_SLOT_REWARD
ret nz
call GenRandom
and $8
ld [wRareMonsFlag], a
callba StartCatchEmMode
xor a
ld [wd622], a
ld [wCatchEmOrEvolutionSlotRewardActive], a
ret
Func_16352: ; 0x16352
@@ -9475,7 +8801,7 @@ Func_16352: ; 0x16352
and a
jr nz, .asm_163b3
.asm_1637a
ld a, [wd623]
ld a, [wBonusStageSlotRewardActive]
and a
jr nz, .asm_16389
xor a
@@ -9484,7 +8810,7 @@ Func_16352: ; 0x16352
ld [wd626], a
.asm_16389
xor a
ld [wd623], a
ld [wBonusStageSlotRewardActive], a
ld a, $1
ld [wd495], a
ld [wd4ae], a
@@ -9498,7 +8824,7 @@ Func_16352: ; 0x16352
call Func_163f2
xor a
ld [wd609], a
ld [wd622], a
ld [wCatchEmOrEvolutionSlotRewardActive], a
ld a, $1e
ld [wd607], a
ret
@@ -9513,8 +8839,8 @@ Func_16352: ; 0x16352
ld a, $1
ld [wd548], a
ld [wd549], a
ld a, [wd622]
cp $2
ld a, [wCatchEmOrEvolutionSlotRewardActive]
cp EVOLUTION_MODE_SLOT_REWARD
ret nz
callba Func_10ab3
ld a, [wd7ad]
@@ -9524,7 +8850,7 @@ Func_16352: ; 0x16352
or c
ld [wStageCollisionState], a
xor a
ld [wd622], a
ld [wCatchEmOrEvolutionSlotRewardActive], a
ret
Func_163f2: ; 0x163f2
@@ -22863,15 +22189,15 @@ Func_1e757: ; 0x1e757
and a
ret nz
call Func_1e8f6
ld a, [wd622]
cp $1
ld a, [wCatchEmOrEvolutionSlotRewardActive]
cp CATCHEM_MODE_SLOT_REWARD
ret nz
call GenRandom
and $8
ld [wRareMonsFlag], a
callba StartCatchEmMode
xor a
ld [wd622], a
ld [wCatchEmOrEvolutionSlotRewardActive], a
ret
Func_1e830: ; 0x1e830
@@ -22893,7 +22219,7 @@ Func_1e830: ; 0x1e830
and a
jr nz, .asm_1e891
.asm_1e858
ld a, [wd623]
ld a, [wBonusStageSlotRewardActive]
and a
jr nz, .asm_1e867
xor a
@@ -22902,7 +22228,7 @@ Func_1e830: ; 0x1e830
ld [wd626], a
.asm_1e867
xor a
ld [wd623], a
ld [wBonusStageSlotRewardActive], a
ld a, $1
ld [wd495], a
ld [wd4ae], a
@@ -22916,7 +22242,7 @@ Func_1e830: ; 0x1e830
call Func_1e8c3
xor a
ld [wd609], a
ld [wd622], a
ld [wCatchEmOrEvolutionSlotRewardActive], a
ld a, $1e
ld [wd607], a
ret
@@ -22931,12 +22257,12 @@ Func_1e830: ; 0x1e830
ld a, $1
ld [wd548], a
ld [wd549], a
ld a, [wd622]
cp $2
ld a, [wCatchEmOrEvolutionSlotRewardActive]
cp EVOLUTION_MODE_SLOT_REWARD
ret nz
callba Func_10ab3
xor a
ld [wd622], a
ld [wCatchEmOrEvolutionSlotRewardActive], a
ret
Func_1e8c3: ; 0x1e8c3

View File

@@ -1020,10 +1020,13 @@ wd620:: ; 0xd620
wd621:: ; 0xd621
ds $1
wd622:: ; 0xd622
wCatchEmOrEvolutionSlotRewardActive:: ; 0xd622
; Set to 1 if the "Start Catch 'Em Mode" Slot Reward is received.
; Set to 2 if the "Start Evolution Mode" Slot Reward is received.
ds $1
wd623:: ; 0xd623
wBonusStageSlotRewardActive:: ; 0xd623
; Set to 1 when the "Go To Bonus" Slot Reward is received.
ds $1
wd624:: ; 0xd624