123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893 |
- PromptUserToPlaySlots:
- call SaveScreenTilesToBuffer2
- ld a, BANK(DisplayTextIDInit)
- ld [wAutoTextBoxDrawingControl], a
- ld b, a
- ld hl, DisplayTextIDInit
- call Bankswitch
- ld hl, PlaySlotMachineText
- call PrintText
- call YesNoChoice
- ld a, [wCurrentMenuItem]
- and a
- jr nz, .done ; if player chose No
- dec a
- ld [wUpdateSpritesEnabled], a
- ld hl, wSlotMachineRerollCounter
- xor a
- ld [hli], a
- ld [hl], SMILE_BUBBLE
- predef EmotionBubble
- call GBPalWhiteOutWithDelay3
- call LoadSlotMachineTiles
- call LoadFontTilePatterns
- ld b, SET_PAL_SLOTS
- call RunPaletteCommand
- call GBPalNormal
- ld a, $e4
- ld [rOBP0], a
- ld hl, wd730
- set 6, [hl]
- xor a
- ld [wSlotMachineAllowMatchesCounter], a
- ld hl, wStoppingWhichSlotMachineWheel
- ld bc, $0014
- call FillMemory
- call MainSlotMachineLoop
- ld hl, wd730
- res 6, [hl]
- xor a
- ld [wSlotMachineAllowMatchesCounter], a
- call GBPalWhiteOutWithDelay3
- ld a, $1
- ld [wUpdateSpritesEnabled], a
- call RunDefaultPaletteCommand
- call ReloadMapSpriteTilePatterns
- call ReloadTilesetTilePatterns
- .done
- call LoadScreenTilesFromBuffer2
- call Delay3
- call GBPalNormal
- ld a, [wSlotMachineSavedROMBank]
- push af
- jp CloseTextDisplay
- PlaySlotMachineText:
- TX_FAR _PlaySlotMachineText
- db "@"
- MainSlotMachineLoop:
- call SlotMachine_PrintCreditCoins
- xor a
- ld hl, wPayoutCoins
- ld [hli], a
- ld [hl], a
- call SlotMachine_PrintPayoutCoins
- ld hl, BetHowManySlotMachineText
- call PrintText
- call SaveScreenTilesToBuffer1
- .loop
- ld a, A_BUTTON | B_BUTTON
- ld [wMenuWatchedKeys], a
- ld a, 2
- ld [wMaxMenuItem], a
- ld a, 12
- ld [wTopMenuItemY], a
- ld a, 15
- ld [wTopMenuItemX], a
- xor a
- ld [wCurrentMenuItem], a
- ld [wLastMenuItem], a
- ld [wMenuWatchMovingOutOfBounds], a
- coord hl, 14, 11
- ld b, 5
- ld c, 4
- call TextBoxBorder
- coord hl, 16, 12
- ld de, CoinMultiplierSlotMachineText
- call PlaceString
- call HandleMenuInput
- and B_BUTTON
- jp nz, LoadScreenTilesFromBuffer1
- ld a, [wCurrentMenuItem]
- ld b, a
- ld a, 3
- sub b
- ld [wSlotMachineBet], a
- ld hl, wPlayerCoins
- ld c, a
- ld a, [hli]
- and a
- jr nz, .skip1
- ld a, [hl]
- cp c
- jr nc, .skip1
- ld hl, NotEnoughCoinsSlotMachineText
- call PrintText
- jr .loop
- .skip1
- call LoadScreenTilesFromBuffer1
- call SlotMachine_SubtractBetFromPlayerCoins
- call SlotMachine_LightBalls
- call SlotMachine_SetFlags
- ld a, 4
- ld hl, wSlotMachineWheel1SlipCounter
- ld [hli], a
- ld [hli], a
- ld [hl], a
- call WaitForSoundToFinish
- ld a, SFX_SLOTS_NEW_SPIN
- call PlaySound
- ld hl, StartSlotMachineText
- call PrintText
- call SlotMachine_SpinWheels
- call SlotMachine_CheckForMatches
- ld hl, wPlayerCoins
- ld a, [hli]
- or [hl]
- jr nz, .skip2
- ld hl, OutOfCoinsSlotMachineText
- call PrintText
- ld c, 60
- jp DelayFrames
- .skip2
- ld hl, OneMoreGoSlotMachineText
- call PrintText
- coord hl, 14, 12
- lb bc, 13, 15
- xor a ; YES_NO_MENU
- ld [wTwoOptionMenuID], a
- ld a, TWO_OPTION_MENU
- ld [wTextBoxID], a
- call DisplayTextBoxID
- ld a, [wCurrentMenuItem]
- and a
- ret nz
- call SlotMachine_PutOutLitBalls
- jp MainSlotMachineLoop
- CoinMultiplierSlotMachineText:
- db "×3"
- next "×2"
- next "×1@"
- OutOfCoinsSlotMachineText:
- TX_FAR _OutOfCoinsSlotMachineText
- db "@"
- BetHowManySlotMachineText:
- TX_FAR _BetHowManySlotMachineText
- db "@"
- StartSlotMachineText:
- TX_FAR _StartSlotMachineText
- db "@"
- NotEnoughCoinsSlotMachineText:
- TX_FAR _NotEnoughCoinsSlotMachineText
- db "@"
- OneMoreGoSlotMachineText:
- TX_FAR _OneMoreGoSlotMachineText
- db "@"
- SlotMachine_SetFlags:
- ld hl, wSlotMachineFlags
- bit 7, [hl]
- ret nz
- ld a, [wSlotMachineAllowMatchesCounter]
- and a
- jr nz, .allowMatches
- call Random
- and a
- jr z, .setAllowMatchesCounter ; 1/256 (~0.4%) chance
- ld b, a
- ld a, [wSlotMachineSevenAndBarModeChance]
- cp b
- jr c, .allowSevenAndBarMatches
- ld a, 210
- cp b
- jr c, .allowMatches ; 55/256 (~21.5%) chance
- ld [hl], 0
- ret
- .allowMatches
- set 6, [hl]
- ret
- .setAllowMatchesCounter
- ld a, 60
- ld [wSlotMachineAllowMatchesCounter], a
- ret
- .allowSevenAndBarMatches
- set 7, [hl]
- ret
- SlotMachine_SpinWheels:
- ld c, 20
- .loop1
- push bc
- call SlotMachine_AnimWheel1
- call SlotMachine_AnimWheel2
- call SlotMachine_AnimWheel3
- ld c, 2
- call DelayFrames
- pop bc
- dec c
- jr nz, .loop1
- xor a
- ld [wStoppingWhichSlotMachineWheel], a
- .loop2
- call SlotMachine_HandleInputWhileWheelsSpin
- call SlotMachine_StopOrAnimWheel1
- call SlotMachine_StopOrAnimWheel2
- call SlotMachine_StopOrAnimWheel3
- ret c
- ld a, [wOnSGB]
- xor $1
- inc a
- ld c, a
- call DelayFrames
- jr .loop2
- ; Note that the wheels can only stop when a symbol is centred in the wheel
- ; and thus 3 full symbols rather than 2 full symbols and 2 half symbols are
- ; visible. The 3 functions below ensure this by checking if the wheel offset
- ; is even before stopping the wheel.
- SlotMachine_StopOrAnimWheel1:
- ld a, [wStoppingWhichSlotMachineWheel]
- cp 1
- jr c, .animWheel
- ld de, wSlotMachineWheel1Offset
- ld a, [de]
- rra
- jr nc, .animWheel ; check that a symbol is centred in the wheel
- ld hl, wSlotMachineWheel1SlipCounter
- ld a, [hl]
- and a
- ret z
- dec [hl]
- call SlotMachine_StopWheel1Early
- ret nz
- .animWheel
- jp SlotMachine_AnimWheel1
- SlotMachine_StopOrAnimWheel2:
- ld a, [wStoppingWhichSlotMachineWheel]
- cp 2
- jr c, .animWheel
- ld de, wSlotMachineWheel2Offset
- ld a, [de]
- rra
- jr nc, .animWheel ; check that a symbol is centred in the wheel
- ld hl, wSlotMachineWheel2SlipCounter
- ld a, [hl]
- and a
- ret z
- dec [hl]
- call SlotMachine_StopWheel2Early
- ret z
- .animWheel
- jp SlotMachine_AnimWheel2
- SlotMachine_StopOrAnimWheel3:
- ld a, [wStoppingWhichSlotMachineWheel]
- cp 3
- jr c, .animWheel
- ld de, wSlotMachineWheel3Offset
- ld a, [de]
- rra
- jr nc, .animWheel ; check that a symbol is centred in the wheel
- ; wheel 3 stops as soon as possible
- scf
- ret
- .animWheel
- call SlotMachine_AnimWheel3
- and a
- ret
- SlotMachine_StopWheel1Early:
- call SlotMachine_GetWheel1Tiles
- ld hl, wSlotMachineWheel1BottomTile
- ld a, [wSlotMachineFlags]
- and $80
- jr nz, .sevenAndBarMode
- ; Stop early if the middle symbol is not a cherry.
- inc hl
- ld a, [hl]
- cp SLOTSCHERRY >> 8
- jr nz, .stopWheel
- ret
- ; It looks like this was intended to make the wheel stop when a 7 symbol was
- ; visible, but it has a bug and so the wheel stops randomly.
- .sevenAndBarMode
- ld c, $3
- .loop
- ld a, [hli]
- cp SLOTS7 >> 8
- jr c, .stopWheel ; condition never true
- dec c
- jr nz, .loop
- ret
- .stopWheel
- inc a
- ld hl, wSlotMachineWheel1SlipCounter
- ld [hl], 0
- ret
- SlotMachine_StopWheel2Early:
- call SlotMachine_GetWheel2Tiles
- ld a, [wSlotMachineFlags]
- and $80
- jr nz, .sevenAndBarMode
- ; Stop early if any symbols are lined up in the first two wheels.
- call SlotMachine_FindWheel1Wheel2Matches
- ret nz
- jr .stopWheel
- ; Stop early if two 7 symbols or two bar symbols are lined up in the first two
- ; wheels OR if no symbols are lined up and the bottom symbol in wheel 2 is a
- ; 7 symbol or bar symbol. The second part could be a bug or a way to reduce the
- ; player's odds.
- .sevenAndBarMode
- call SlotMachine_FindWheel1Wheel2Matches
- ld a, [de]
- cp (SLOTSBAR >> 8) + 1
- ret nc
- .stopWheel
- xor a
- ld [wSlotMachineWheel2SlipCounter], a
- ret
- SlotMachine_FindWheel1Wheel2Matches:
- ; return whether wheel 1 and wheel 2's current positions allow a match (given
- ; that wheel 3 stops in a good position) in Z
- ld hl, wSlotMachineWheel1BottomTile
- ld de, wSlotMachineWheel2BottomTile
- ld a, [de]
- cp [hl] ; wheel 1 bottom, wheel 2 bottom
- ret z
- inc de
- ld a, [de]
- cp [hl] ; wheel 1 bottom, wheel 2 middle
- ret z
- inc hl
- cp [hl] ; wheel 1 middle, wheel 2 middle
- ret z
- inc hl
- cp [hl] ; wheel 1 top, wheel 2 middle
- ret z
- inc de
- ld a, [de]
- cp [hl] ; wheel 1 top, wheel 2 top
- ret z
- dec de
- dec de
- ret
- SlotMachine_CheckForMatches:
- call SlotMachine_GetWheel3Tiles
- ld a, [wSlotMachineBet]
- cp 2
- jr z, .checkMatchesFor2CoinBet
- cp 1
- jr z, .checkMatchFor1CoinBet
- ; 3 coin bet allows diagonal matches (plus the matches for 1/2 coin bets)
- ld hl, wSlotMachineWheel1BottomTile
- ld de, wSlotMachineWheel2MiddleTile
- ld bc, wSlotMachineWheel3TopTile
- call SlotMachine_CheckForMatch
- jp z, .foundMatch
- ld hl, wSlotMachineWheel1TopTile
- ld de, wSlotMachineWheel2MiddleTile
- ld bc, wSlotMachineWheel3BottomTile
- call SlotMachine_CheckForMatch
- jr z, .foundMatch
- ; 2 coin bet allows top/bottom horizontal matches (plus the match for a 1 coin bet)
- .checkMatchesFor2CoinBet
- ld hl, wSlotMachineWheel1TopTile
- ld de, wSlotMachineWheel2TopTile
- ld bc, wSlotMachineWheel3TopTile
- call SlotMachine_CheckForMatch
- jr z, .foundMatch
- ld hl, wSlotMachineWheel1BottomTile
- ld de, wSlotMachineWheel2BottomTile
- ld bc, wSlotMachineWheel3BottomTile
- call SlotMachine_CheckForMatch
- jr z, .foundMatch
- ; 1 coin bet only allows a middle horizontal match
- .checkMatchFor1CoinBet
- ld hl, wSlotMachineWheel1MiddleTile
- ld de, wSlotMachineWheel2MiddleTile
- ld bc, wSlotMachineWheel3MiddleTile
- call SlotMachine_CheckForMatch
- jr z, .foundMatch
- ld a, [wSlotMachineFlags]
- and $c0
- jr z, .noMatch
- ld hl, wSlotMachineRerollCounter
- dec [hl]
- jr nz, .rollWheel3DownByOneSymbol
- .noMatch
- ld hl, NotThisTimeText
- call PrintText
- .done
- xor a
- ld [wMuteAudioAndPauseMusic], a
- ret
- .rollWheel3DownByOneSymbol
- call SlotMachine_AnimWheel3
- call DelayFrame
- call SlotMachine_AnimWheel3
- call DelayFrame
- jp SlotMachine_CheckForMatches
- .foundMatch
- ld a, [wSlotMachineFlags]
- and $c0
- jr z, .rollWheel3DownByOneSymbol ; roll wheel if player isn't allowed to win
- and $80
- jr nz, .acceptMatch
- ; if 7/bar matches aren't enabled and the match was a 7/bar symbol, roll wheel
- ld a, [hl]
- cp (SLOTSBAR >> 8) + 1
- jr c, .rollWheel3DownByOneSymbol
- .acceptMatch
- ld a, [hl]
- sub $2
- ld [wSlotMachineWinningSymbol], a
- ld hl, SlotRewardPointers
- ld c, a
- ld b, 0
- add hl, bc
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- push de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wcf4b
- ld bc, 4
- call CopyData
- pop hl
- ld de, .flashScreenLoop
- push de
- jp hl
- .flashScreenLoop
- ld a, [rBGP]
- xor $40
- ld [rBGP], a
- ld c, 5
- call DelayFrames
- dec b
- jr nz, .flashScreenLoop
- ld hl, wPayoutCoins
- ld [hl], d
- inc hl
- ld [hl], e
- call SlotMachine_PrintPayoutCoins
- ld hl, SymbolLinedUpSlotMachineText
- call PrintText
- call WaitForTextScrollButtonPress
- call SlotMachine_PayCoinsToPlayer
- call SlotMachine_PrintPayoutCoins
- ld a, $e4
- ld [rOBP0], a
- jp .done
- SymbolLinedUpSlotMachineText:
- TX_ASM
- push bc
- call SlotMachine_PrintWinningSymbol
- ld hl, LinedUpText
- pop bc
- inc bc
- inc bc
- inc bc
- inc bc
- ret
- LinedUpText:
- TX_FAR _LinedUpText
- db "@"
- SlotRewardPointers:
- dw SlotReward300Func
- dw SlotReward300Text
- dw SlotReward100Func
- dw SlotReward100Text
- dw SlotReward8Func
- dw SlotReward8Text
- dw SlotReward15Func
- dw SlotReward15Text
- dw SlotReward15Func
- dw SlotReward15Text
- dw SlotReward15Func
- dw SlotReward15Text
- SlotReward300Text:
- db "300@"
- SlotReward100Text:
- db "100@"
- SlotReward8Text:
- db "8@"
- SlotReward15Text:
- db "15@"
- NotThisTimeText:
- TX_FAR _NotThisTimeText
- db "@"
- ; compares the slot machine tiles at bc, de, and hl
- SlotMachine_CheckForMatch:
- ld a, [de]
- cp [hl]
- ret nz
- ld a, [bc]
- cp [hl]
- ret
- SlotMachine_GetWheel3Tiles:
- ld de, wSlotMachineWheel3BottomTile
- ld hl, SlotMachineWheel3
- ld a, [wSlotMachineWheel3Offset]
- call SlotMachine_GetWheelTiles
- SlotMachine_GetWheel2Tiles:
- ld de, wSlotMachineWheel2BottomTile
- ld hl, SlotMachineWheel2
- ld a, [wSlotMachineWheel2Offset]
- call SlotMachine_GetWheelTiles
- SlotMachine_GetWheel1Tiles:
- ld de, wSlotMachineWheel1BottomTile
- ld hl, SlotMachineWheel1
- ld a, [wSlotMachineWheel1Offset]
- SlotMachine_GetWheelTiles:
- ld c, a
- ld b, 0
- add hl, bc
- ld c, 3
- .loop
- ld a, [hli]
- ld [de], a
- inc de
- inc hl
- dec c
- jr nz, .loop
- ret
- SlotReward8Func:
- ld hl, wSlotMachineAllowMatchesCounter
- ld a, [hl]
- and a
- jr z, .skip
- dec [hl]
- .skip
- ld b, $2
- ld de, 8
- ret
- SlotReward15Func:
- ld hl, wSlotMachineAllowMatchesCounter
- ld a, [hl]
- and a
- jr z, .skip
- dec [hl]
- .skip
- ld b, $4
- ld de, 15
- ret
- SlotReward100Func:
- ld a, SFX_GET_KEY_ITEM
- call PlaySound
- xor a
- ld [wSlotMachineFlags], a
- ld b, $8
- ld de, 100
- ret
- SlotReward300Func:
- ld hl, YeahText
- call PrintText
- ld a, SFX_GET_ITEM_2
- call PlaySound
- call Random
- cp $80
- ld a, $0
- jr c, .skip
- ld [wSlotMachineFlags], a
- .skip
- ld [wSlotMachineAllowMatchesCounter], a
- ld b, $14
- ld de, 300
- ret
- YeahText:
- TX_FAR _YeahText
- TX_DELAY
- db "@"
- SlotMachine_PrintWinningSymbol:
- ; prints winning symbol and down arrow in text box
- coord hl, 2, 14
- ld a, [wSlotMachineWinningSymbol]
- add $25
- ld [hli], a
- inc a
- ld [hld], a
- inc a
- ld de, -SCREEN_WIDTH
- add hl, de
- ld [hli], a
- inc a
- ld [hl], a
- coord hl, 18, 16
- ld [hl], "▼"
- ret
- SlotMachine_SubtractBetFromPlayerCoins:
- ld hl, wTempCoins2 + 1
- ld a, [wSlotMachineBet]
- ld [hld], a
- xor a
- ld [hli], a
- ld de, wPlayerCoins + 1
- ld c, $2
- predef SubBCDPredef
- SlotMachine_PrintCreditCoins:
- coord hl, 5, 1
- ld de, wPlayerCoins
- ld c, $2
- jp PrintBCDNumber
- SlotMachine_PrintPayoutCoins:
- coord hl, 11, 1
- ld de, wPayoutCoins
- lb bc, LEADING_ZEROES | 2, 4 ; 2 bytes, 4 digits
- jp PrintNumber
- SlotMachine_PayCoinsToPlayer:
- ld a, $1
- ld [wMuteAudioAndPauseMusic], a
- call WaitForSoundToFinish
- ; Put 1 in the temp coins variable. This value is added to the player's coins
- ; repeatedly so the player can watch the value go up 1 coin at a time.
- ld hl, wTempCoins1
- xor a
- ld [hli], a
- inc a
- ld [hl], a
- ld a, 5
- ld [wAnimCounter], a
- ; Subtract 1 from the payout amount and add 1 to the player's coins each
- ; iteration until the payout amount reaches 0.
- .loop
- ld a, [wPayoutCoins + 1]
- ld l, a
- ld a, [wPayoutCoins]
- ld h, a
- or l
- ret z
- ld de, -1
- add hl, de
- ld a, l
- ld [wPayoutCoins + 1], a
- ld a, h
- ld [wPayoutCoins], a
- ld hl, wTempCoins1 + 1
- ld de, wPlayerCoins + 1
- ld c, $2
- predef AddBCDPredef
- call SlotMachine_PrintCreditCoins
- call SlotMachine_PrintPayoutCoins
- ld a, SFX_SLOTS_REWARD
- call PlaySound
- ld a, [wAnimCounter]
- dec a
- jr nz, .skip1
- ld a, [rOBP0]
- xor $40 ; make the slot wheel symbols flash
- ld [rOBP0], a
- ld a, 5
- .skip1
- ld [wAnimCounter], a
- ld a, [wSlotMachineWinningSymbol]
- cp (SLOTSBAR >> 8) + 1
- ld c, 8
- jr nc, .skip2
- srl c ; c = 4 (make the the coins transfer faster if the symbol was 7 or bar)
- .skip2
- call DelayFrames
- jr .loop
- SlotMachine_PutOutLitBalls:
- ld a, $23
- ld [wNewSlotMachineBallTile], a
- jr SlotMachine_UpdateThreeCoinBallTiles
- SlotMachine_LightBalls:
- ld a, $14
- ld [wNewSlotMachineBallTile], a
- ld a, [wSlotMachineBet]
- dec a
- jr z, SlotMachine_UpdateOneCoinBallTiles
- dec a
- jr z, SlotMachine_UpdateTwoCoinBallTiles
- SlotMachine_UpdateThreeCoinBallTiles:
- coord hl, 3, 2
- call SlotMachine_UpdateBallTiles
- coord hl, 3, 10
- call SlotMachine_UpdateBallTiles
- SlotMachine_UpdateTwoCoinBallTiles:
- coord hl, 3, 4
- call SlotMachine_UpdateBallTiles
- coord hl, 3, 8
- call SlotMachine_UpdateBallTiles
- SlotMachine_UpdateOneCoinBallTiles:
- coord hl, 3, 6
- SlotMachine_UpdateBallTiles:
- ld a, [wNewSlotMachineBallTile]
- ld [hl], a
- ld bc, 13
- add hl, bc
- ld [hl], a
- ld bc, 7
- add hl, bc
- inc a
- ld [hl], a
- ld bc, 13
- add hl, bc
- ld [hl], a
- ret
- SlotMachine_AnimWheel1:
- ld bc, SlotMachineWheel1
- ld de, wSlotMachineWheel1Offset
- ld hl, wOAMBuffer
- ld a, $30
- ld [wBaseCoordX], a
- jr SlotMachine_AnimWheel
- SlotMachine_AnimWheel2:
- ld bc, SlotMachineWheel2
- ld de, wSlotMachineWheel2Offset
- ld hl, wOAMBuffer + $30
- ld a, $50
- ld [wBaseCoordX], a
- jr SlotMachine_AnimWheel
- SlotMachine_AnimWheel3:
- ld bc, SlotMachineWheel3
- ld de, wSlotMachineWheel3Offset
- ld hl, wOAMBuffer + $60
- ld a, $70
- ld [wBaseCoordX], a
- SlotMachine_AnimWheel:
- ld a, $58
- ld [wBaseCoordY], a
- push de
- ld a, [de]
- ld d, b
- add c
- ld e, a
- jr nc, .loop
- inc d
- .loop
- ld a, [wBaseCoordY]
- ld [hli], a
- ld a, [wBaseCoordX]
- ld [hli], a
- ld a, [de]
- ld [hli], a
- ld a, $80
- ld [hli], a
- ld a, [wBaseCoordY]
- ld [hli], a
- ld a, [wBaseCoordX]
- add $8
- ld [hli], a
- ld a, [de]
- inc a
- ld [hli], a
- ld a, $80
- ld [hli], a
- inc de
- ld a, [wBaseCoordY]
- sub $8
- ld [wBaseCoordY], a
- cp $28
- jr nz, .loop
- pop de
- ld a, [de]
- inc a ; advance the offset so that the wheel animates
- cp 30
- jr nz, .skip
- xor a ; wrap around to 0 when the offset reaches 30
- .skip
- ld [de], a
- ret
- SlotMachine_HandleInputWhileWheelsSpin:
- call DelayFrame
- call JoypadLowSensitivity
- ld a, [hJoy5]
- and A_BUTTON
- ret z
- ld hl, wStoppingWhichSlotMachineWheel
- ld a, [hl]
- dec a
- ld de, wSlotMachineWheel1SlipCounter
- jr z, .skip
- dec a
- ld de, wSlotMachineWheel2SlipCounter
- jr z, .skip
- .loop
- inc [hl]
- ld a, SFX_SLOTS_STOP_WHEEL
- jp PlaySound
- .skip
- ld a, [de]
- and a
- ret nz
- jr .loop
- LoadSlotMachineTiles:
- call DisableLCD
- ld hl, SlotMachineTiles2
- ld de, vChars0
- ld bc, $1c0
- ld a, BANK(SlotMachineTiles2)
- call FarCopyData2
- ld hl, SlotMachineTiles1
- ld de, vChars2
- ld bc, $250
- ld a, BANK(SlotMachineTiles1)
- call FarCopyData2
- ld hl, SlotMachineTiles2
- ld de, vChars2 + $250
- ld bc, $1c0
- ld a, BANK(SlotMachineTiles2)
- call FarCopyData2
- ld hl, SlotMachineMap
- coord de, 0, 0
- ld bc, SlotMachineMapEnd - SlotMachineMap
- call CopyData
- call EnableLCD
- ld hl, wSlotMachineWheel1Offset
- ld a, $1c
- ld [hli], a
- ld [hli], a
- ld [hl], a
- call SlotMachine_AnimWheel1
- call SlotMachine_AnimWheel2
- jp SlotMachine_AnimWheel3
- SlotMachineMap:
- INCBIN "gfx/tilemaps/slotmachine.map"
- SlotMachineMapEnd:
- INCLUDE "data/slot_machine_wheels.asm"
- SlotMachineTiles1:
- IF DEF(_RED)
- INCBIN "gfx/red/slotmachine1.2bpp"
- ENDC
- IF DEF(_BLUE)
- INCBIN "gfx/blue/slotmachine1.2bpp"
- ENDC
|