pokecrystal-board/engine/games/slot_machine.asm

2225 lines
37 KiB
NASM
Raw Normal View History

; wSlotMatched values
const_def 0, 4
const SLOTS_SEVEN ; $00
const SLOTS_POKEBALL ; $04
const SLOTS_CHERRY ; $08
const SLOTS_PIKACHU ; $0c
const SLOTS_SQUIRTLE ; $10
const SLOTS_STARYU ; $14
DEF NUM_SLOT_REELS EQU const_value / 4 ; 6
DEF SLOTS_NO_MATCH EQU -1
2018-01-10 19:53:42 -08:00
; wSlotBias values
DEF SLOTS_NO_BIAS EQU -1
2018-01-10 19:53:42 -08:00
DEF REEL_SIZE EQU 15
2015-12-10 19:26:31 -08:00
; Constants for slot_reel offsets (see macros/ram.asm)
rsreset
DEF REEL_ACTION rb ; 0
DEF REEL_TILEMAP_ADDR rw ; 1
DEF REEL_POSITION rb ; 3
DEF REEL_SPIN_DISTANCE rb ; 4
DEF REEL_SPIN_RATE rb ; 5
DEF REEL_OAM_ADDR rw ; 6
DEF REEL_X_COORD rb ; 8
DEF REEL_MANIP_COUNTER rb ; 9
DEF REEL_MANIP_DELAY rb ; 10
DEF REEL_DROP_COUNTER rb ; 11
rb_skip 3
DEF REEL_STOP_DELAY rb ; 15
2017-12-29 07:48:47 -08:00
; SlotsJumptable constants
const_def
const SLOTS_INIT
const SLOTS_BET_AND_START
const SLOTS_WAIT_START
const SLOTS_WAIT_REEL1
const SLOTS_WAIT_STOP_REEL1
const SLOTS_WAIT_REEL2
const SLOTS_WAIT_STOP_REEL2
const SLOTS_WAIT_REEL3
const SLOTS_WAIT_STOP_REEL3
2017-12-28 11:27:44 -08:00
const SLOTS_NEXT_09
2017-12-29 04:52:42 -08:00
const SLOTS_NEXT_0A
const SLOTS_NEXT_0B
const SLOTS_FLASH_IF_WIN
const SLOTS_FLASH_SCREEN
const SLOTS_GIVE_EARNED_CHIPS
const SLOTS_PAYOUT_TEXT_AND_ANIM
const SLOTS_PAYOUT_ANIM
const SLOTS_RESTART_OF_QUIT
const SLOTS_QUIT
DEF SLOTS_END_LOOP_F EQU 7
; ReelActionJumptable constants
const_def
const REEL_ACTION_DO_NOTHING
const REEL_ACTION_STOP_REEL_IGNORE_JOYPAD
const REEL_ACTION_QUADRUPLE_RATE
const REEL_ACTION_DOUBLE_RATE
const REEL_ACTION_NORMAL_RATE
const REEL_ACTION_HALF_RATE
const REEL_ACTION_QUARTER_RATE
const REEL_ACTION_STOP_REEL1
const REEL_ACTION_STOP_REEL2
const REEL_ACTION_STOP_REEL3
const REEL_ACTION_SET_UP_REEL2_SKIP_TO_7
const REEL_ACTION_WAIT_REEL2_SKIP_TO_7
const REEL_ACTION_FAST_SPIN_REEL2_UNTIL_LINED_UP_7S
const REEL_ACTION_UNUSED
const REEL_ACTION_CHECK_DROP_REEL
const REEL_ACTION_WAIT_DROP_REEL
const REEL_ACTION_START_SLOW_ADVANCE_REEL3
const REEL_ACTION_WAIT_SLOW_ADVANCE_REEL3
const REEL_ACTION_INIT_GOLEM
const REEL_ACTION_WAIT_GOLEM
const REEL_ACTION_END_GOLEM
const REEL_ACTION_INIT_CHANSEY
const REEL_ACTION_WAIT_CHANSEY
const REEL_ACTION_WAIT_EGG
const REEL_ACTION_DROP_REEL
2015-11-11 20:38:57 -08:00
_SlotMachine:
2018-01-23 14:39:09 -08:00
ld hl, wOptions
2016-01-04 05:43:55 -08:00
set NO_TEXT_SCROLL, [hl]
2015-12-10 19:26:31 -08:00
call .InitGFX
2015-11-11 20:38:57 -08:00
call DelayFrame
2015-12-10 19:26:31 -08:00
.loop
call SlotsLoop
jr nc, .loop
2015-11-11 20:38:57 -08:00
call WaitSFX
ld de, SFX_QUIT_SLOTS
call PlaySFX
call WaitSFX
call ClearBGPalettes
2018-01-23 14:39:09 -08:00
ld hl, wOptions
2016-01-04 05:43:55 -08:00
res NO_TEXT_SCROLL, [hl]
ld hl, rLCDC
2017-12-29 09:53:21 -08:00
res rLCDC_SPRITE_SIZE, [hl] ; 8x8
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
.InitGFX:
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
call ClearTilemap
2015-11-11 20:38:57 -08:00
call ClearSprites
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
call DisableLCD
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 0
2017-12-28 04:32:33 -08:00
ld bc, vBGMap1 - vBGMap0
2015-11-20 12:15:32 -08:00
ld a, " "
2015-11-11 20:38:57 -08:00
call ByteFill
ld b, CGB_SLOT_MACHINE
call GetCGBLayout
2017-12-24 09:47:30 -08:00
callfar ClearSpriteAnims
2015-12-10 19:26:31 -08:00
ld hl, wSlots
ld bc, wSlotsDataEnd - wSlots
2015-11-11 20:38:57 -08:00
xor a
call ByteFill
2015-12-10 19:26:31 -08:00
2015-11-11 20:38:57 -08:00
ld hl, Slots2LZ
2017-12-28 04:32:33 -08:00
ld de, vTiles0 tile $00
2015-11-11 20:38:57 -08:00
call Decompress
2015-12-10 19:26:31 -08:00
2015-11-11 20:38:57 -08:00
ld hl, Slots3LZ
2017-12-28 04:32:33 -08:00
ld de, vTiles0 tile $40
2015-11-11 20:38:57 -08:00
call Decompress
2015-12-10 19:26:31 -08:00
2015-11-11 20:38:57 -08:00
ld hl, Slots1LZ
2017-12-28 04:32:33 -08:00
ld de, vTiles2 tile $00
2015-11-11 20:38:57 -08:00
call Decompress
2015-12-10 19:26:31 -08:00
2015-11-11 20:38:57 -08:00
ld hl, Slots2LZ
2017-12-28 04:32:33 -08:00
ld de, vTiles2 tile $25
2015-11-11 20:38:57 -08:00
call Decompress
2015-12-10 19:26:31 -08:00
2015-11-11 20:38:57 -08:00
ld hl, SlotsTilemap
decoord 0, 0
2015-12-10 19:26:31 -08:00
ld bc, SCREEN_WIDTH * 12
2015-11-11 20:38:57 -08:00
call CopyBytes
2015-12-10 19:26:31 -08:00
ld hl, rLCDC
2017-12-29 09:53:21 -08:00
set rLCDC_SPRITE_SIZE, [hl] ; 8x16
2015-11-11 20:38:57 -08:00
call EnableLCD
ld hl, wSlots
ld bc, wSlotsEnd - wSlots
2015-11-11 20:38:57 -08:00
xor a
call ByteFill
call Slots_InitReelTiles
2015-12-10 19:26:31 -08:00
call Slots_GetPals
2020-10-30 12:39:08 -07:00
ld a, SPRITE_ANIM_DICT_SLOTS
2015-12-10 19:26:31 -08:00
ld hl, wSpriteAnimDict
2015-11-11 20:38:57 -08:00
ld [hli], a
ld [hl], $40
xor a ; SLOTS_INIT
2015-11-11 20:38:57 -08:00
ld [wJumptableIndex], a
2018-01-10 19:53:42 -08:00
ld a, SLOTS_NO_BIAS
2015-12-10 19:26:31 -08:00
ld [wSlotBias], a
2015-11-11 20:38:57 -08:00
ld de, MUSIC_GAME_CORNER
call PlayMusic
xor a
ld [wKeepSevenBiasChance], a ; 87.5% chance
2015-11-11 20:38:57 -08:00
call Random
2015-12-10 19:26:31 -08:00
and %00101010
2015-11-11 20:38:57 -08:00
ret nz
2020-10-30 12:39:08 -07:00
ld a, TRUE
ld [wKeepSevenBiasChance], a ; 12.5% chance
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
Slots_GetPals:
ld a, %11100100
2015-11-11 20:38:57 -08:00
call DmgToCgbBGPals
lb de, %11100100, %11100100
2015-11-11 20:38:57 -08:00
call DmgToCgbObjPals
ret
2018-06-24 07:09:41 -07:00
SlotsLoop:
2015-11-11 20:38:57 -08:00
ld a, [wJumptableIndex]
bit SLOTS_END_LOOP_F, a
2015-12-10 19:26:31 -08:00
jr nz, .stop
call SlotsJumptable
call Slots_SpinReels
2015-11-11 20:38:57 -08:00
xor a
2018-09-09 12:09:51 -07:00
ld [wCurSpriteOAMAddr], a
2017-12-24 09:47:30 -08:00
callfar DoNextFrameForFirst16Sprites
call .PrintChipsAndPayout
2020-10-04 19:34:50 -07:00
call .Stubbed_AlternateMatchingSevensPalette
2015-11-11 20:38:57 -08:00
call DelayFrame
and a
ret
2015-12-10 19:26:31 -08:00
.stop
2015-11-11 20:38:57 -08:00
scf
ret
2020-10-04 19:34:50 -07:00
.Stubbed_AlternateMatchingSevensPalette:
2015-12-10 19:26:31 -08:00
; dummied out
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
ld a, [wReel1ReelAction]
2015-11-11 20:38:57 -08:00
and a
ret nz
2015-12-10 19:26:31 -08:00
ld a, [wReel2ReelAction]
2015-11-11 20:38:57 -08:00
and a
ret nz
2015-12-10 19:26:31 -08:00
ld a, [wFirstTwoReelsMatchingSevens]
2015-11-11 20:38:57 -08:00
and a
2015-12-10 19:26:31 -08:00
jr nz, .matching_sevens
2020-11-03 07:13:06 -08:00
ld a, %11100100
2015-11-11 20:38:57 -08:00
call DmgToCgbBGPals
ret
2015-12-10 19:26:31 -08:00
.matching_sevens
2023-09-30 10:12:57 -07:00
ldh a, [hTextDelayFrames]
2015-11-11 20:38:57 -08:00
and $7
ret nz
ldh a, [rBGP]
2020-11-03 07:13:06 -08:00
xor %00001100 ; alternates two palettes
2015-11-11 20:38:57 -08:00
call DmgToCgbBGPals
ret
2015-12-10 19:26:31 -08:00
.PrintChipsAndPayout:
2015-11-11 20:38:57 -08:00
hlcoord 5, 1
ld de, wChips
2015-11-11 20:38:57 -08:00
lb bc, PRINTNUM_LEADINGZEROS | 2, 4
call PrintNum
hlcoord 11, 1
2015-12-10 19:26:31 -08:00
ld de, wPayout
2015-11-11 20:38:57 -08:00
lb bc, PRINTNUM_LEADINGZEROS | 2, 4
call PrintNum
ret
2015-12-10 19:26:31 -08:00
2020-10-05 13:15:57 -07:00
DebugPrintSlotBias: ; unreferenced
2015-12-10 19:26:31 -08:00
ld a, [wSlotBias]
2015-11-11 20:38:57 -08:00
add 0
daa
ld e, a
and $f
add "0"
hlcoord 1, 0
ld [hl], a
ld a, e
swap a
and $f
add "0"
hlcoord 0, 0
ld [hl], a
ret
2015-12-10 19:26:31 -08:00
2020-10-05 13:15:57 -07:00
AnimateSlotReelIcons: ; unreferenced
; This animation was present in pokegold-spaceworld.
ld hl, wUnusedSlotReelIconDelay
2015-11-11 20:38:57 -08:00
ld a, [hl]
inc [hl]
and $7
ret nz
ld hl, wShadowOAMSprite16TileID
2018-01-10 10:47:57 -08:00
ld c, NUM_SPRITE_OAM_STRUCTS - 16
2015-12-10 19:26:31 -08:00
.loop
2015-11-11 20:38:57 -08:00
ld a, [hl]
2020-10-05 13:15:57 -07:00
xor $20 ; alternate between $00-$1f and $20-$3f
2018-01-10 10:47:57 -08:00
ld [hli], a ; tile id
rept SPRITEOAMSTRUCT_LENGTH - 1
inc hl
2018-01-10 10:47:57 -08:00
endr
2015-11-11 20:38:57 -08:00
dec c
2015-12-10 19:26:31 -08:00
jr nz, .loop
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
SlotsJumptable:
2015-12-26 18:59:03 -08:00
jumptable .Jumptable, wJumptableIndex
.Jumptable:
dw SlotsAction_Init ; 00
dw SlotsAction_BetAndStart ; 01
dw SlotsAction_WaitStart ; 02
dw SlotsAction_WaitReel1 ; 03
dw SlotsAction_WaitStopReel1 ; 04
dw SlotsAction_WaitReel2 ; 05
dw SlotsAction_WaitStopReel2 ; 06
dw SlotsAction_WaitReel3 ; 07
dw SlotsAction_WaitStopReel3 ; 08
dw SlotsAction_Next ; 09
dw SlotsAction_Next ; 0a
dw SlotsAction_Next ; 0b
dw SlotsAction_FlashIfWin ; 0c
dw SlotsAction_FlashScreen ; 0d
dw SlotsAction_GiveEarnedChips ; 0e
dw SlotsAction_PayoutTextAndAnim ; 0f
dw SlotsAction_PayoutAnim ; 10
dw SlotsAction_RestartOrQuit ; 11
dw SlotsAction_Quit ; 12
2018-06-24 07:09:41 -07:00
SlotsAction_Next:
2015-11-11 20:38:57 -08:00
ld hl, wJumptableIndex
inc [hl]
ret
2018-06-24 07:09:41 -07:00
SlotsAction_Init:
call SlotsAction_Next
2015-11-11 20:38:57 -08:00
xor a
2015-12-10 19:26:31 -08:00
ld [wFirstTwoReelsMatching], a
ld [wFirstTwoReelsMatchingSevens], a
2018-01-10 19:53:42 -08:00
ld a, SLOTS_NO_MATCH
2015-12-10 19:26:31 -08:00
ld [wSlotMatched], a
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
SlotsAction_BetAndStart:
2015-12-10 19:26:31 -08:00
call Slots_AskBet
jr nc, .proceed
ld a, SLOTS_QUIT
2015-11-11 20:38:57 -08:00
ld [wJumptableIndex], a
ret
2015-12-10 19:26:31 -08:00
.proceed
call SlotsAction_Next
2015-12-10 19:26:31 -08:00
call Slots_IlluminateBetLights
call Slots_InitBias
ld a, 32
ld [wSlotsDelay], a
ld a, REEL_ACTION_NORMAL_RATE
2015-12-10 19:26:31 -08:00
ld [wReel1ReelAction], a
ld [wReel2ReelAction], a
ld [wReel3ReelAction], a
ld a, 4
ld [wReel1ManipCounter], a
ld [wReel2ManipCounter], a
ld [wReel3ManipCounter], a
2015-11-11 20:38:57 -08:00
call WaitSFX
ld a, SFX_SLOT_MACHINE_START
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
SlotsAction_WaitStart:
ld hl, wSlotsDelay
2015-11-11 20:38:57 -08:00
ld a, [hl]
and a
2015-12-10 19:26:31 -08:00
jr z, .proceed
2015-11-11 20:38:57 -08:00
dec [hl]
ret
2015-12-10 19:26:31 -08:00
.proceed
call SlotsAction_Next
2015-11-11 20:38:57 -08:00
xor a
ldh [hJoypadSum], a
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
SlotsAction_WaitReel1:
ld hl, hJoypadSum
2015-11-11 20:38:57 -08:00
ld a, [hl]
and A_BUTTON
ret z
call SlotsAction_Next
2015-12-10 19:26:31 -08:00
call Slots_StopReel1
ld [wReel1ReelAction], a
2018-06-24 07:09:41 -07:00
SlotsAction_WaitStopReel1:
2015-12-10 19:26:31 -08:00
ld a, [wReel1ReelAction]
cp REEL_ACTION_DO_NOTHING
2015-11-11 20:38:57 -08:00
ret nz
ld a, SFX_STOP_SLOT
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
ld bc, wReel1
ld de, wReel1Stopped
call Slots_LoadReelState
call SlotsAction_Next
2015-11-11 20:38:57 -08:00
xor a
ldh [hJoypadSum], a
2018-06-24 07:09:41 -07:00
SlotsAction_WaitReel2:
ld hl, hJoypadSum
2015-11-11 20:38:57 -08:00
ld a, [hl]
and A_BUTTON
ret z
call SlotsAction_Next
2015-12-10 19:26:31 -08:00
call Slots_StopReel2
ld [wReel2ReelAction], a
2018-06-24 07:09:41 -07:00
SlotsAction_WaitStopReel2:
2015-12-10 19:26:31 -08:00
ld a, [wReel2ReelAction]
cp REEL_ACTION_DO_NOTHING
2015-11-11 20:38:57 -08:00
ret nz
ld a, SFX_STOP_SLOT
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
ld bc, wReel2
ld de, wReel2Stopped
call Slots_LoadReelState
call SlotsAction_Next
2015-11-11 20:38:57 -08:00
xor a
ldh [hJoypadSum], a
2018-06-24 07:09:41 -07:00
SlotsAction_WaitReel3:
ld hl, hJoypadSum
2015-11-11 20:38:57 -08:00
ld a, [hl]
and A_BUTTON
ret z
call SlotsAction_Next
2015-12-10 19:26:31 -08:00
call Slots_StopReel3
ld [wReel3ReelAction], a
2018-06-24 07:09:41 -07:00
SlotsAction_WaitStopReel3:
2015-12-10 19:26:31 -08:00
ld a, [wReel3ReelAction]
cp REEL_ACTION_DO_NOTHING
2015-11-11 20:38:57 -08:00
ret nz
ld a, SFX_STOP_SLOT
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
ld bc, wReel3
ld de, wReel3Stopped
call Slots_LoadReelState
call SlotsAction_Next
2015-11-11 20:38:57 -08:00
xor a
ldh [hJoypadSum], a
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
SlotsAction_FlashIfWin:
2015-12-10 19:26:31 -08:00
ld a, [wSlotMatched]
2018-01-10 19:53:42 -08:00
cp SLOTS_NO_MATCH
2015-12-10 19:26:31 -08:00
jr nz, .GotIt
call SlotsAction_Next
call SlotsAction_Next
2015-11-11 20:38:57 -08:00
ret
.GotIt:
call SlotsAction_Next
2015-12-10 19:26:31 -08:00
ld a, 16
ld [wSlotsDelay], a
2018-06-24 07:09:41 -07:00
SlotsAction_FlashScreen:
ld hl, wSlotsDelay
2015-11-11 20:38:57 -08:00
ld a, [hl]
and a
2015-12-10 19:26:31 -08:00
jr z, .done
2015-11-11 20:38:57 -08:00
dec [hl]
srl a
ret z
2015-12-10 19:26:31 -08:00
ldh a, [rOBP0]
2015-11-11 20:38:57 -08:00
xor $ff
ld e, a
ld d, a
call DmgToCgbObjPals
ret
2015-12-10 19:26:31 -08:00
.done
call Slots_GetPals
call SlotsAction_Next
2015-11-11 20:38:57 -08:00
ret
SlotsAction_GiveEarnedChips:
2015-11-11 20:38:57 -08:00
xor a
2015-12-10 19:26:31 -08:00
ld [wFirstTwoReelsMatching], a
ld [wFirstTwoReelsMatchingSevens], a
ld a, %11100100
2015-11-11 20:38:57 -08:00
call DmgToCgbBGPals
call Slots_GetPayout
2015-11-11 20:38:57 -08:00
xor a
ld [wSlotsDelay], a
call SlotsAction_Next
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
SlotsAction_PayoutTextAndAnim:
call Slots_PayoutText
call SlotsAction_Next
2018-06-24 07:09:41 -07:00
SlotsAction_PayoutAnim:
ld hl, wSlotsDelay
2015-11-11 20:38:57 -08:00
ld a, [hl]
inc [hl]
and $1
ret z
2015-12-10 19:26:31 -08:00
ld hl, wPayout
2015-11-11 20:38:57 -08:00
ld a, [hli]
ld d, a
or [hl]
2015-12-10 19:26:31 -08:00
jr z, .done
2015-11-11 20:38:57 -08:00
ld e, [hl]
dec de
ld [hl], e
dec hl
ld [hl], d
ld hl, wChips
2015-11-11 20:38:57 -08:00
ld d, [hl]
inc hl
ld e, [hl]
call Slots_CheckChipCaseFull
2015-12-10 19:26:31 -08:00
jr c, .okay
2015-11-11 20:38:57 -08:00
inc de
2015-12-10 19:26:31 -08:00
.okay
; BUG: Slot machine payout sound effects cut each other off (see docs/bugs_and_glitches.md)
2015-11-11 20:38:57 -08:00
ld [hl], e
dec hl
ld [hl], d
ld a, [wSlotsDelay]
2015-11-11 20:38:57 -08:00
and $7
ret z
ld de, SFX_GET_CHIP_FROM_SLOTS
2015-11-11 20:38:57 -08:00
call PlaySFX
ret
2015-12-10 19:26:31 -08:00
.done
call SlotsAction_Next
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
SlotsAction_RestartOrQuit:
2015-12-10 19:26:31 -08:00
call Slots_DeilluminateBetLights
2015-11-11 20:38:57 -08:00
call WaitPressAorB_BlinkCursor
2015-12-10 19:26:31 -08:00
call Slots_AskPlayAgain
jr c, .exit_slots
ld a, SLOTS_INIT
2015-11-11 20:38:57 -08:00
ld [wJumptableIndex], a
ret
2015-12-10 19:26:31 -08:00
.exit_slots
ld a, SLOTS_QUIT
2015-11-11 20:38:57 -08:00
ld [wJumptableIndex], a
ret
2018-06-24 07:09:41 -07:00
SlotsAction_Quit:
2015-11-11 20:38:57 -08:00
ld hl, wJumptableIndex
set SLOTS_END_LOOP_F, [hl]
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
Slots_LoadReelState:
2015-11-11 20:38:57 -08:00
push de
2015-12-10 19:26:31 -08:00
call Slots_GetCurrentReelState
2015-11-11 20:38:57 -08:00
pop de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
ret
Slots_CheckChipCaseFull:
2015-11-11 20:38:57 -08:00
ld a, d
cp HIGH(MAX_CHIPS)
2015-12-10 19:26:31 -08:00
jr c, .not_full
2015-11-11 20:38:57 -08:00
ld a, e
cp LOW(MAX_CHIPS)
2015-12-10 19:26:31 -08:00
jr c, .not_full
2015-11-11 20:38:57 -08:00
scf
ret
2015-12-10 19:26:31 -08:00
.not_full
2015-11-11 20:38:57 -08:00
and a
ret
2018-06-24 07:09:41 -07:00
Slots_GetCurrentReelState:
2017-12-29 07:48:47 -08:00
ld hl, REEL_POSITION
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
2015-12-10 19:26:31 -08:00
jr nz, .okay
2015-11-11 20:38:57 -08:00
ld a, $f
2015-12-10 19:26:31 -08:00
.okay
2015-11-11 20:38:57 -08:00
dec a
and $f
ld e, a
ld d, 0
2017-12-29 07:48:47 -08:00
ld hl, REEL_TILEMAP_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
add hl, de
ret
2018-06-24 07:09:41 -07:00
Slots_StopReel1:
; Always set the REEL_ACTION_STOP_REEL1 action.
ld a, REEL_ACTION_STOP_REEL1
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
Slots_StopReel2:
; As long as, the following three meet, there's a 31.25% chance
; to set action REEL_ACTION_SET_UP_REEL2_SKIP_TO_7:
; - Bet is >= 2 chips
; - There's a 7 symbol visible in reel #1
; - Current spin isn't biased or is biased towards SEVEN
; In any other case, REEL_ACTION_STOP_REEL2 is set.
2015-12-10 19:26:31 -08:00
ld a, [wSlotBet]
2015-11-11 20:38:57 -08:00
cp $2
jr c, .dont_jump
2015-12-10 19:26:31 -08:00
ld a, [wSlotBias]
2015-11-11 20:38:57 -08:00
and a
2015-12-10 19:26:31 -08:00
jr z, .skip
2018-01-10 19:53:42 -08:00
cp SLOTS_NO_BIAS
jr nz, .dont_jump
2015-12-10 19:26:31 -08:00
.skip
call .CheckReel1ForASeven
jr nz, .dont_jump
2015-11-11 20:38:57 -08:00
call Random
2020-05-07 08:09:41 -07:00
cp 31 percent + 1
jr nc, .dont_jump
ld a, REEL_ACTION_SET_UP_REEL2_SKIP_TO_7
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
.dont_jump
ld a, REEL_ACTION_STOP_REEL2
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
.CheckReel1ForASeven:
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped]
2015-11-11 20:38:57 -08:00
and a
ret z
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped + 1]
2015-11-11 20:38:57 -08:00
and a
ret z
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped + 2]
2015-11-11 20:38:57 -08:00
and a
ret
2018-06-24 07:09:41 -07:00
Slots_StopReel3:
; If no matching SEVEN symbols in reels #1 and #2:
; - REEL_ACTION_STOP_REEL3, 100%
; If matching SEVEN symbols and NO bias to SEVEN:
; - REEL_ACTION_STOP_REEL3, 37.5%
; - REEL_ACTION_START_SLOW_ADVANCE_REEL3, 31.3%
; - REEL_ACTION_INIT_GOLEM, 31.3%
; - REEL_ACTION_INIT_CHANSEY, 0%
; If matching SEVEN symbols and bias to SEVEN:
; - REEL_ACTION_STOP_REEL3, 29.7%
; - REEL_ACTION_START_SLOW_ADVANCE_REEL3, 23.4%
; - REEL_ACTION_INIT_GOLEM, 23.4%
; - REEL_ACTION_INIT_CHANSEY, 23.4%
2015-12-10 19:26:31 -08:00
ld a, [wFirstTwoReelsMatching]
2015-11-11 20:38:57 -08:00
and a
jr z, .stop
2015-12-10 19:26:31 -08:00
ld a, [wFirstTwoReelsMatchingSevens]
2015-11-11 20:38:57 -08:00
and a
jr z, .stop
2015-12-10 19:26:31 -08:00
ld a, [wSlotBias]
2015-11-11 20:38:57 -08:00
and a
2015-12-10 19:26:31 -08:00
jr nz, .biased
2015-11-11 20:38:57 -08:00
call Random
2020-05-07 08:09:41 -07:00
cp 71 percent - 1
jr nc, .stop
2020-05-07 08:09:41 -07:00
cp 47 percent + 1
jr nc, .slow_advance
2020-05-07 08:09:41 -07:00
cp 24 percent - 1
jr nc, .golem
ld a, REEL_ACTION_INIT_CHANSEY
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
.biased
2015-11-11 20:38:57 -08:00
call Random
2020-05-07 08:09:41 -07:00
cp 63 percent
jr nc, .stop
2020-05-07 08:09:41 -07:00
cp 31 percent + 1
jr nc, .slow_advance
.golem
ld a, REEL_ACTION_INIT_GOLEM
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
.slow_advance
ld a, REEL_ACTION_START_SLOW_ADVANCE_REEL3
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
.stop
ld a, REEL_ACTION_STOP_REEL3
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
Slots_InitReelTiles:
2015-12-10 19:26:31 -08:00
ld bc, wReel1
2017-12-29 07:48:47 -08:00
ld hl, REEL_OAM_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
ld de, wShadowOAMSprite16
2015-11-11 20:38:57 -08:00
ld [hl], e
inc hl
ld [hl], d
2017-12-29 07:48:47 -08:00
ld hl, REEL_TILEMAP_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
2015-12-10 19:26:31 -08:00
ld de, Reel1Tilemap
2015-11-11 20:38:57 -08:00
ld [hl], e
inc hl
ld [hl], d
2017-12-29 07:48:47 -08:00
ld hl, REEL_X_COORD
2015-11-11 20:38:57 -08:00
add hl, bc
2023-07-26 17:50:16 -07:00
ld [hl], 6 * TILE_WIDTH
2015-12-10 19:26:31 -08:00
call .OAM
ld bc, wReel2
2017-12-29 07:48:47 -08:00
ld hl, REEL_OAM_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
ld de, wShadowOAMSprite24
2015-11-11 20:38:57 -08:00
ld [hl], e
inc hl
ld [hl], d
2017-12-29 07:48:47 -08:00
ld hl, REEL_TILEMAP_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
2015-12-10 19:26:31 -08:00
ld de, Reel2Tilemap
2015-11-11 20:38:57 -08:00
ld [hl], e
inc hl
ld [hl], d
2017-12-29 07:48:47 -08:00
ld hl, REEL_X_COORD
2015-11-11 20:38:57 -08:00
add hl, bc
2023-07-26 17:50:16 -07:00
ld [hl], 10 * TILE_WIDTH
2015-12-10 19:26:31 -08:00
call .OAM
ld bc, wReel3
2017-12-29 07:48:47 -08:00
ld hl, REEL_OAM_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
ld de, wShadowOAMSprite32
2015-11-11 20:38:57 -08:00
ld [hl], e
inc hl
ld [hl], d
2017-12-29 07:48:47 -08:00
ld hl, REEL_TILEMAP_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
2015-12-10 19:26:31 -08:00
ld de, Reel3Tilemap
2015-11-11 20:38:57 -08:00
ld [hl], e
inc hl
ld [hl], d
2017-12-29 07:48:47 -08:00
ld hl, REEL_X_COORD
2015-11-11 20:38:57 -08:00
add hl, bc
2023-07-26 17:50:16 -07:00
ld [hl], 14 * TILE_WIDTH
2015-12-10 19:26:31 -08:00
call .OAM
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
.OAM:
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], REEL_ACTION_DO_NOTHING
2017-12-29 07:48:47 -08:00
ld hl, REEL_POSITION
2015-11-11 20:38:57 -08:00
add hl, bc
2015-12-10 19:26:31 -08:00
ld [hl], REEL_SIZE - 1
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_DISTANCE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], REEL_ACTION_DO_NOTHING
call Slots_UpdateReelPositionAndOAM
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
Slots_SpinReels:
2015-12-10 19:26:31 -08:00
ld bc, wReel1
call .SpinReel
ld bc, wReel2
call .SpinReel
ld bc, wReel3
call .SpinReel
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
.SpinReel:
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_DISTANCE
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and $f
2015-12-10 19:26:31 -08:00
jr nz, .skip
call ReelActionJumptable
2015-12-10 19:26:31 -08:00
.skip
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
ret z
ld d, a
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_DISTANCE
2015-11-11 20:38:57 -08:00
add hl, bc
add [hl]
ld [hl], a
and $f
jr z, Slots_UpdateReelPositionAndOAM
2017-12-29 07:48:47 -08:00
ld hl, REEL_OAM_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld e, $8
2015-12-10 19:26:31 -08:00
.loop
2015-11-11 20:38:57 -08:00
ld a, [hl]
add d
ld [hli], a
inc hl
inc hl
inc hl
2015-11-11 20:38:57 -08:00
dec e
2015-12-10 19:26:31 -08:00
jr nz, .loop
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
Slots_UpdateReelPositionAndOAM:
2017-12-29 07:48:47 -08:00
ld hl, REEL_X_COORD
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
2018-09-09 12:09:51 -07:00
ld [wCurReelXCoord], a
2023-07-26 17:50:16 -07:00
ld a, 10 * TILE_WIDTH
2018-09-09 12:09:51 -07:00
ld [wCurReelYCoord], a
2017-12-29 07:48:47 -08:00
ld hl, REEL_POSITION
2015-11-11 20:38:57 -08:00
add hl, bc
ld e, [hl]
2015-12-10 19:26:31 -08:00
ld d, 0
2017-12-29 07:48:47 -08:00
ld hl, REEL_TILEMAP_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
add hl, de
ld e, l
ld d, h
2015-12-10 19:26:31 -08:00
call .LoadOAM
2017-12-29 07:48:47 -08:00
ld hl, REEL_POSITION
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
inc a
and $f
2015-12-10 19:26:31 -08:00
cp REEL_SIZE
jr nz, .load
2015-11-11 20:38:57 -08:00
xor a
2015-12-10 19:26:31 -08:00
.load
2015-11-11 20:38:57 -08:00
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
.LoadOAM:
2017-12-29 07:48:47 -08:00
ld hl, REEL_OAM_ADDR
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
2015-12-10 19:26:31 -08:00
.loop
2018-09-09 12:09:51 -07:00
ld a, [wCurReelYCoord]
2018-01-10 10:47:57 -08:00
ld [hli], a ; y
2018-09-09 12:09:51 -07:00
ld a, [wCurReelXCoord]
2018-01-10 10:47:57 -08:00
ld [hli], a ; x
2015-11-11 20:38:57 -08:00
ld a, [de]
2018-01-10 10:47:57 -08:00
ld [hli], a ; tile id
2015-11-11 20:38:57 -08:00
srl a
srl a
2018-01-10 10:47:57 -08:00
set OAM_PRIORITY, a
ld [hli], a ; attributes
2015-12-10 19:26:31 -08:00
2018-09-09 12:09:51 -07:00
ld a, [wCurReelYCoord]
2018-01-10 10:47:57 -08:00
ld [hli], a ; y
2018-09-09 12:09:51 -07:00
ld a, [wCurReelXCoord]
2018-01-10 10:47:57 -08:00
add 1 * TILE_WIDTH
ld [hli], a ; x
2015-11-11 20:38:57 -08:00
ld a, [de]
inc a
2015-12-10 19:26:31 -08:00
inc a
2018-01-10 10:47:57 -08:00
ld [hli], a ; tile id
2015-11-11 20:38:57 -08:00
srl a
srl a
2018-01-10 10:47:57 -08:00
set OAM_PRIORITY, a
ld [hli], a ; attributes
2015-11-11 20:38:57 -08:00
inc de
2018-09-09 12:09:51 -07:00
ld a, [wCurReelYCoord]
2018-01-10 10:47:57 -08:00
sub 2 * TILE_WIDTH
2018-09-09 12:09:51 -07:00
ld [wCurReelYCoord], a
2018-01-10 10:47:57 -08:00
cp 2 * TILE_WIDTH
2015-12-10 19:26:31 -08:00
jr nz, .loop
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2020-10-05 13:15:57 -07:00
GetUnknownSlotReelData: ; unreferenced
; Used to get OAM attribute values for slot reels?
; (final Slots_UpdateReelPositionAndOAM above reuses tile IDs as OAM palettes)
2015-11-11 20:38:57 -08:00
push hl
srl a
srl a
2020-10-04 19:34:50 -07:00
add LOW(.data)
2015-11-11 20:38:57 -08:00
ld l, a
ld a, 0
2020-10-04 19:34:50 -07:00
adc HIGH(.data)
2015-11-11 20:38:57 -08:00
ld h, a
ld a, [hl]
pop hl
ret
2015-12-10 19:26:31 -08:00
2020-10-04 19:34:50 -07:00
.data:
table_width 1, GetUnknownSlotReelData.data
2020-10-04 19:34:50 -07:00
db 0 ; SLOTS_SEVEN
db 1 ; SLOTS_POKEBALL
db 2 ; SLOTS_CHERRY
db 3 ; SLOTS_PIKACHU
db 4 ; SLOTS_SQUIRTLE
db 5 ; SLOTS_STARYU
assert_table_length NUM_SLOT_REELS
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
ReelActionJumptable:
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
ld e, [hl]
ld d, 0
ld hl, .Jumptable
2015-12-26 18:59:03 -08:00
add hl, de
2015-11-11 20:38:57 -08:00
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.Jumptable:
2015-12-26 18:59:03 -08:00
dw ReelAction_DoNothing ; 00
dw ReelAction_StopReelIgnoreJoypad ; 01
2015-12-26 18:59:03 -08:00
dw ReelAction_QuadrupleRate ; 02
dw ReelAction_DoubleRate ; 03
dw ReelAction_NormalRate ; 04
dw ReelAction_HalfRate ; 05
dw ReelAction_QuarterRate ; 06
dw ReelAction_StopReel1 ; 07
dw ReelAction_StopReel2 ; 08
dw ReelAction_StopReel3 ; 09
dw ReelAction_SetUpReel2SkipTo7 ; 0a
dw ReelAction_WaitReel2SkipTo7 ; 0b
dw ReelAction_FastSpinReel2UntilLinedUp7s ; 0c
dw ReelAction_Unused ; 0d
2015-12-26 18:59:03 -08:00
dw ReelAction_CheckDropReel ; 0e
dw ReelAction_WaitDropReel ; 0f
dw ReelAction_StartSlowAdvanceReel3 ; 10
dw ReelAction_WaitSlowAdvanceReel3 ; 11
dw ReelAction_InitGolem ; 12
dw ReelAction_WaitGolem ; 13
dw ReelAction_EndGolem ; 14
dw ReelAction_InitChansey ; 15
2015-12-26 18:59:03 -08:00
dw ReelAction_WaitChansey ; 16
dw ReelAction_WaitEgg ; 17
dw ReelAction_DropReel ; 18
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_DoNothing:
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_QuadrupleRate:
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 16
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_DoubleRate:
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 8
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_NormalRate:
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 4
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_HalfRate:
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 2
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_QuarterRate:
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 1
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
Slots_StopReel:
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 0
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], REEL_ACTION_STOP_REEL_IGNORE_JOYPAD
2017-12-29 07:48:47 -08:00
ld hl, REEL_STOP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 3
2018-06-24 07:09:41 -07:00
ReelAction_StopReelIgnoreJoypad:
2017-12-29 07:48:47 -08:00
ld hl, REEL_STOP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
2015-12-10 19:26:31 -08:00
jr z, .EndReel
2015-11-11 20:38:57 -08:00
dec [hl]
ret
.EndReel:
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, REEL_ACTION_DO_NOTHING
2015-11-11 20:38:57 -08:00
ld [hl], a
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_StopReel1:
; If no bias: don't manipulate reel.
2017-12-29 07:48:47 -08:00
; If bias: manipulate reel up to wReel1ManipCounter (i.e. 4) slots,
; stoping early if the biased symbol shows up anywhere in reel #1,
; even if the current bet won't allow lining it up.
2015-12-10 19:26:31 -08:00
ld a, [wSlotBias]
2018-01-10 19:53:42 -08:00
cp SLOTS_NO_BIAS
2015-12-10 19:26:31 -08:00
jr z, .NoBias
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_COUNTER
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
2015-12-10 19:26:31 -08:00
jr z, .NoBias
2015-11-11 20:38:57 -08:00
dec [hl]
2015-12-10 19:26:31 -08:00
call .CheckForBias
2015-11-11 20:38:57 -08:00
ret nz
.NoBias:
2015-12-10 19:26:31 -08:00
call Slots_StopReel
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckForBias:
2015-12-10 19:26:31 -08:00
call Slots_GetCurrentReelState
ld a, [wSlotBias]
2015-11-11 20:38:57 -08:00
ld e, a
ld a, [hli]
cp e
ret z
ld a, [hli]
cp e
ret z
ld a, [hl]
cp e
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_StopReel2:
; If no bias: don't manipulate reel.
2017-12-29 07:48:47 -08:00
; If bias: manipulate reel up to wReel2ManipCounter (i.e. 4) slots,
; stoping early if the biased symbol is lined up in the first two
; reels, according to the lines that the current bet allows.
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedFirstTwoReels
jr nc, .nope
ld a, [wSlotBuildingMatch]
ld hl, wSlotBias
2015-11-11 20:38:57 -08:00
cp [hl]
jr z, .NoBias
2015-12-10 19:26:31 -08:00
.nope
ld a, [wSlotBias]
2018-01-10 19:53:42 -08:00
cp SLOTS_NO_BIAS
jr z, .NoBias
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_COUNTER
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
jr z, .NoBias
2015-11-11 20:38:57 -08:00
dec [hl]
ret
.NoBias:
2015-12-10 19:26:31 -08:00
call Slots_StopReel
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_StopReel3:
2017-12-29 07:48:47 -08:00
; Manipulate the reel up to wReel3ManipCounter (i.e. 4) slots,
; stopping early if the bias symbol is lined up for a win.
; If not biased to any symbols, stop as soon as nothing is lined up.
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
jr nc, .NoMatch
ld hl, wSlotBias
2015-11-11 20:38:57 -08:00
cp [hl]
jr z, .NoBias
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_COUNTER
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
ret z
dec [hl]
ret
.NoMatch:
2015-12-10 19:26:31 -08:00
ld a, [wSlotBias]
2018-01-10 19:53:42 -08:00
cp SLOTS_NO_BIAS
jr z, .NoBias
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_COUNTER
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
jr z, .NoBias
2015-11-11 20:38:57 -08:00
dec [hl]
ret
.NoBias:
2015-12-10 19:26:31 -08:00
call Slots_StopReel
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_SetUpReel2SkipTo7:
; Unique reel 2 action (see Slots_StopReel2)
; Ensures that 7 symbols become lined up in the first two reels,
; but more often than not, this is only a way to get our hopes up, as
; it makes exciting reel #3 modes with no success hope more common.
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedFirstTwoReels
jr nc, .no_match
ld a, [wFirstTwoReelsMatchingSevens]
2015-11-11 20:38:57 -08:00
and a
2015-12-10 19:26:31 -08:00
jr z, .no_match
call Slots_StopReel
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
.no_match
2015-11-11 20:38:57 -08:00
ld a, SFX_STOP_SLOT
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_WAIT_REEL2_SKIP_TO_7
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 32
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 0
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_WaitReel2SkipTo7:
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
2020-10-04 19:34:50 -07:00
jr z, .ready
2015-11-11 20:38:57 -08:00
dec [hl]
ret
2020-10-04 19:34:50 -07:00
.ready
2015-11-11 20:38:57 -08:00
ld a, SFX_THROW_BALL
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_FAST_SPIN_REEL2_UNTIL_LINED_UP_7S
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 8
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_FastSpinReel2UntilLinedUp7s:
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedFirstTwoReels
2015-11-11 20:38:57 -08:00
ret nc
2015-12-10 19:26:31 -08:00
ld a, [wFirstTwoReelsMatchingSevens]
2015-11-11 20:38:57 -08:00
and a
ret z
2015-12-10 19:26:31 -08:00
call Slots_StopReel
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_InitGolem:
; Ensures SEVENs are lined up if there's bias to SEVEN.
; Ensures nothing is lined up if there's no bias symbols.
; No other bias symbols are compatible with this mode.
; This is achieved by throwing Golem until the desired result
; is produced. The amount of Golem thrown can be anywhere from
; 1 to 14 for SEVEN bias, and 4-8 for no bias.
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
2015-11-11 20:38:57 -08:00
ret c
ld a, SFX_STOP_SLOT
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
call Slots_WaitSFX
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_WAIT_GOLEM
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 0
call Slots_GetNumberOfGolems
2015-11-11 20:38:57 -08:00
push bc
push af
2015-11-18 10:01:55 -08:00
depixel 12, 13
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_OBJ_SLOTS_GOLEM
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_VAR3
2015-11-11 20:38:57 -08:00
add hl, bc
pop af
ld [hl], a
pop bc
xor a
ld [wSlotsDelay], a
2018-06-24 07:09:41 -07:00
ReelAction_WaitGolem:
ld a, [wSlotsDelay]
cp 2
jr z, .two
cp 1
jr z, .one
2015-11-11 20:38:57 -08:00
ret
.two
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
call Slots_StopReel
2015-11-11 20:38:57 -08:00
ret
.one
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_END_GOLEM
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 8
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_EndGolem:
2015-11-11 20:38:57 -08:00
xor a
ld [wSlotsDelay], a
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
dec [hl] ; REEL_ACTION_WAIT_GOLEM
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 0
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_InitChansey:
; Ensures the lining up of SEVEN symbols, but this mode is only possible
; when there is bias to SEVEN symbols (and even then, it's still rare).
2017-12-28 11:27:44 -08:00
; Chansey releases and egg and reel #3 is made to advance 17 slots very
; quickly as many times as necessary for the match to SEVENs to show up.
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
2015-11-11 20:38:57 -08:00
ret c
ld a, SFX_STOP_SLOT
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
call Slots_WaitSFX
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_WAIT_CHANSEY
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 0
2015-11-11 20:38:57 -08:00
push bc
2015-11-18 10:01:55 -08:00
depixel 12, 0
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_OBJ_SLOTS_CHANSEY
call InitSpriteAnimStruct
2015-11-11 20:38:57 -08:00
pop bc
xor a
ld [wSlotsDelay], a
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_WaitChansey:
ld a, [wSlotsDelay]
2015-11-11 20:38:57 -08:00
and a
ret z
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_WAIT_EGG
ld a, 2
ld [wSlotsDelay], a
2018-06-24 07:09:41 -07:00
ReelAction_WaitEgg:
ld a, [wSlotsDelay]
2015-11-11 20:38:57 -08:00
cp $4
ret c
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_DROP_REEL
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 16
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 17
2018-06-24 07:09:41 -07:00
ReelAction_DropReel:
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
jr z, .check_match
2015-11-11 20:38:57 -08:00
dec [hl]
ret
.check_match
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
jr nc, .EggAgain
2015-11-11 20:38:57 -08:00
and a
jr nz, .EggAgain
ld a, 5
ld [wSlotsDelay], a
2015-12-10 19:26:31 -08:00
call Slots_StopReel
2015-11-11 20:38:57 -08:00
ret
.EggAgain:
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 0
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
dec [hl]
dec [hl] ; REEL_ACTION_WAIT_CHANSEY
ld a, 1
ld [wSlotsDelay], a
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_Unused:
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
2015-11-11 20:38:57 -08:00
ret c
ld a, SFX_STOP_SLOT
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
call Slots_WaitSFX
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_CHECK_DROP_REEL
call Slots_GetNumberOfGolems
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], a
2018-06-24 07:09:41 -07:00
ReelAction_CheckDropReel:
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
2015-12-10 19:26:31 -08:00
jr nz, .spin
call Slots_CheckMatchedAllThreeReels
call Slots_StopReel
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
.spin
2015-11-11 20:38:57 -08:00
dec [hl]
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_WAIT_DROP_REEL
ld hl, REEL_DROP_COUNTER
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 32
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 0
2018-06-24 07:09:41 -07:00
ReelAction_WaitDropReel:
ld hl, REEL_DROP_COUNTER
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
jr z, .DropReel
2015-11-11 20:38:57 -08:00
dec [hl]
ret
.DropReel:
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
dec [hl] ; REEL_ACTION_CHECK_DROP_REEL
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 8
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
ReelAction_StartSlowAdvanceReel3:
; Ensures SEVENs are lined up if there's bias to SEVEN.
; Ensures nothing is lined up if there's no bias symbols.
; No other bias symbols are compatible with this mode.
; This is achieved by slowly advancing the reel a full round,
; plus any necessary slot until the desired result is produced.
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
2015-11-11 20:38:57 -08:00
ret c
ld a, SFX_STOP_SLOT
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
call Slots_WaitSFX
2017-12-29 07:48:47 -08:00
ld hl, REEL_SPIN_RATE
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 1
2017-12-29 07:48:47 -08:00
ld hl, REEL_ACTION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl] ; REEL_ACTION_WAIT_SLOW_ADVANCE_REEL3
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], 16
2018-06-24 07:09:41 -07:00
ReelAction_WaitSlowAdvanceReel3:
2017-12-29 07:48:47 -08:00
ld hl, REEL_MANIP_DELAY
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
jr z, .check1
2015-11-11 20:38:57 -08:00
dec [hl]
.play_sfx
2015-11-11 20:38:57 -08:00
ld a, SFX_GOT_SAFARI_BALLS
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
2015-11-11 20:38:57 -08:00
ret
.check1
2015-12-10 19:26:31 -08:00
ld a, [wSlotBias]
2015-11-11 20:38:57 -08:00
and a
jr nz, .check2
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
jr nc, .play_sfx
2015-11-11 20:38:57 -08:00
and a
jr nz, .play_sfx
2015-12-10 19:26:31 -08:00
call Slots_StopReel
2015-11-11 20:38:57 -08:00
call WaitSFX
ret
.check2
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
jr c, .play_sfx
2015-12-10 19:26:31 -08:00
call Slots_StopReel
2015-11-11 20:38:57 -08:00
call WaitSFX
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
Slots_CheckMatchedFirstTwoReels:
2015-11-11 20:38:57 -08:00
xor a
2015-12-10 19:26:31 -08:00
ld [wFirstTwoReelsMatching], a
ld [wFirstTwoReelsMatchingSevens], a
call Slots_GetCurrentReelState
call Slots_CopyReelState
ld a, [wSlotBet]
2015-11-11 20:38:57 -08:00
and 3
ld e, a
ld d, 0
2015-12-10 19:26:31 -08:00
ld hl, .Jumptable
2015-11-11 20:38:57 -08:00
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
2015-11-11 20:38:57 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
2015-12-10 19:26:31 -08:00
ld de, .return
2015-11-11 20:38:57 -08:00
push de
jp hl
2015-11-11 20:38:57 -08:00
2015-12-10 19:26:31 -08:00
.return
ld a, [wFirstTwoReelsMatching]
2015-11-11 20:38:57 -08:00
and a
ret z
scf
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.Jumptable:
2015-12-26 18:59:03 -08:00
dw .zero
dw .one
dw .two
dw .three
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.three
2015-12-10 19:26:31 -08:00
call .CheckUpwardsDiag
call .CheckDownwardsDiag
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.two
2015-12-10 19:26:31 -08:00
call .CheckBottomRow
call .CheckTopRow
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.one
2015-12-10 19:26:31 -08:00
call .CheckMiddleRow
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.zero
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckBottomRow:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped]
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckUpwardsDiag:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped + 1
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped]
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckMiddleRow:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped + 1
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped + 1]
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckDownwardsDiag:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped + 1
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped + 2]
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckTopRow:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped + 2
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped + 2]
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.StoreResult:
2015-12-10 19:26:31 -08:00
ld [wSlotBuildingMatch], a
2015-11-11 20:38:57 -08:00
and a
2015-12-10 19:26:31 -08:00
jr nz, .matching_sevens
ld a, 1
2015-12-10 19:26:31 -08:00
ld [wFirstTwoReelsMatchingSevens], a
2015-11-11 20:38:57 -08:00
2015-12-10 19:26:31 -08:00
.matching_sevens
ld a, 1
2015-12-10 19:26:31 -08:00
ld [wFirstTwoReelsMatching], a
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
Slots_CheckMatchedAllThreeReels:
2018-01-10 19:53:42 -08:00
ld a, SLOTS_NO_MATCH
2015-12-10 19:26:31 -08:00
ld [wSlotMatched], a
call Slots_GetCurrentReelState
call Slots_CopyReelState
ld a, [wSlotBet]
2015-11-11 20:38:57 -08:00
and 3
ld e, a
ld d, 0
2015-12-10 19:26:31 -08:00
ld hl, .Jumptable
2015-11-11 20:38:57 -08:00
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
2015-11-11 20:38:57 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
2015-12-10 19:26:31 -08:00
ld de, .return
2015-11-11 20:38:57 -08:00
push de
jp hl
2015-11-11 20:38:57 -08:00
2015-12-10 19:26:31 -08:00
.return
ld a, [wSlotMatched]
2018-01-10 19:53:42 -08:00
cp SLOTS_NO_MATCH
2015-12-10 19:26:31 -08:00
jr nz, .matched_nontrivial
2015-11-11 20:38:57 -08:00
and a
ret
2015-12-10 19:26:31 -08:00
.matched_nontrivial
2015-11-11 20:38:57 -08:00
scf
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.Jumptable:
2015-12-26 18:59:03 -08:00
dw .zero
dw .one
dw .two
dw .three
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.three
2015-12-10 19:26:31 -08:00
call .CheckUpwardsDiag
call .CheckDownwardsDiag
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.two
2015-12-10 19:26:31 -08:00
call .CheckBottomRow
call .CheckTopRow
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.one
2015-12-10 19:26:31 -08:00
call .CheckMiddleRow
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.zero
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckBottomRow:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped]
2015-11-11 20:38:57 -08:00
cp [hl]
ret nz
2015-12-10 19:26:31 -08:00
ld hl, wReel2Stopped
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckUpwardsDiag:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped + 2
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped]
2015-11-11 20:38:57 -08:00
cp [hl]
ret nz
2015-12-10 19:26:31 -08:00
ld hl, wReel2Stopped + 1
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckMiddleRow:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped + 1
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped + 1]
2015-11-11 20:38:57 -08:00
cp [hl]
ret nz
2015-12-10 19:26:31 -08:00
ld hl, wReel2Stopped + 1
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckDownwardsDiag:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped + 2]
2015-11-11 20:38:57 -08:00
cp [hl]
ret nz
2015-12-10 19:26:31 -08:00
ld hl, wReel2Stopped + 1
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.CheckTopRow:
2018-09-09 12:09:51 -07:00
ld hl, wCurReelStopped + 2
2015-12-10 19:26:31 -08:00
ld a, [wReel1Stopped + 2]
2015-11-11 20:38:57 -08:00
cp [hl]
ret nz
2015-12-10 19:26:31 -08:00
ld hl, wReel2Stopped + 2
2015-11-11 20:38:57 -08:00
cp [hl]
2015-12-10 19:26:31 -08:00
call z, .StoreResult
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.StoreResult:
2015-12-10 19:26:31 -08:00
ld [wSlotMatched], a
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
Slots_CopyReelState:
2018-09-09 12:09:51 -07:00
ld de, wCurReelStopped
2015-11-11 20:38:57 -08:00
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
Slots_GetNumberOfGolems:
2017-12-29 07:48:47 -08:00
ld hl, REEL_POSITION
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
push af
push hl
call .Check7Bias
2015-11-11 20:38:57 -08:00
pop hl
pop af
ld [hl], a
ld a, e
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.Check7Bias:
2015-12-10 19:26:31 -08:00
ld a, [wSlotBias]
2015-11-11 20:38:57 -08:00
and a
2015-12-10 19:26:31 -08:00
jr nz, .not_biased_to_seven
2015-11-11 20:38:57 -08:00
ld e, $0
2015-12-10 19:26:31 -08:00
.loop1
2017-12-29 07:48:47 -08:00
ld hl, REEL_POSITION
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl]
inc e
push de
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
2015-11-11 20:38:57 -08:00
pop de
2015-12-10 19:26:31 -08:00
jr nc, .loop1
2015-11-11 20:38:57 -08:00
and a
2015-12-10 19:26:31 -08:00
jr nz, .loop1
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
.not_biased_to_seven
2015-11-11 20:38:57 -08:00
call Random
and $7
2020-05-07 08:09:41 -07:00
cp $8 / 2 ; 50%
2015-12-10 19:26:31 -08:00
jr c, .not_biased_to_seven
2015-11-11 20:38:57 -08:00
ld e, a
2015-12-10 19:26:31 -08:00
.loop2
2015-11-11 20:38:57 -08:00
ld a, e
inc e
2017-12-29 07:48:47 -08:00
ld hl, REEL_POSITION
2015-11-11 20:38:57 -08:00
add hl, bc
add [hl]
ld [hl], a
push de
2015-12-10 19:26:31 -08:00
call Slots_CheckMatchedAllThreeReels
2015-11-11 20:38:57 -08:00
pop de
2015-12-10 19:26:31 -08:00
jr c, .loop2
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
Slots_InitBias:
2015-12-10 19:26:31 -08:00
ld a, [wSlotBias]
2015-11-11 20:38:57 -08:00
and a
ret z
2015-12-10 19:26:31 -08:00
ld hl, .Normal
2023-09-30 10:12:57 -07:00
ldh a, [hScriptVar]
2015-11-11 20:38:57 -08:00
and a
2015-12-10 19:26:31 -08:00
jr z, .okay
ld hl, .Lucky
.okay
2015-11-11 20:38:57 -08:00
call Random
ld c, a
2015-12-10 19:26:31 -08:00
.loop
2015-11-11 20:38:57 -08:00
ld a, [hli]
cp c
2015-12-10 19:26:31 -08:00
jr nc, .done
2015-11-11 20:38:57 -08:00
inc hl
2015-12-10 19:26:31 -08:00
jr .loop
.done
2015-11-11 20:38:57 -08:00
ld a, [hl]
2015-12-10 19:26:31 -08:00
ld [wSlotBias], a
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.Normal:
2020-05-07 08:09:41 -07:00
db 1 percent - 1, SLOTS_SEVEN
db 1 percent + 1, SLOTS_POKEBALL
db 4 percent, SLOTS_STARYU
db 8 percent, SLOTS_SQUIRTLE
db 16 percent, SLOTS_PIKACHU
db 19 percent, SLOTS_CHERRY
db 100 percent, SLOTS_NO_BIAS
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.Lucky:
2020-05-07 08:09:41 -07:00
db 1 percent, SLOTS_SEVEN
db 1 percent + 1, SLOTS_POKEBALL
db 3 percent + 1, SLOTS_STARYU
db 6 percent + 1, SLOTS_SQUIRTLE
db 12 percent, SLOTS_PIKACHU
db 31 percent + 1, SLOTS_CHERRY
db 100 percent, SLOTS_NO_BIAS
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
Slots_IlluminateBetLights:
2015-12-10 19:26:31 -08:00
ld b, $14 ; turned on
ld a, [wSlotBet]
2015-11-11 20:38:57 -08:00
dec a
2015-12-10 19:26:31 -08:00
jr z, Slots_Lights1OnOff
2015-11-11 20:38:57 -08:00
dec a
2015-12-10 19:26:31 -08:00
jr z, Slots_Lights2OnOff
jr Slots_Lights3OnOff
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
Slots_DeilluminateBetLights:
2015-12-10 19:26:31 -08:00
ld b, $23 ; turned off
2018-06-24 07:09:41 -07:00
Slots_Lights3OnOff:
2015-11-11 20:38:57 -08:00
hlcoord 3, 2
2015-12-10 19:26:31 -08:00
call Slots_TurnLightsOnOrOff
2015-11-11 20:38:57 -08:00
hlcoord 3, 10
2015-12-10 19:26:31 -08:00
call Slots_TurnLightsOnOrOff
2018-06-24 07:09:41 -07:00
Slots_Lights2OnOff:
2015-11-11 20:38:57 -08:00
hlcoord 3, 4
2015-12-10 19:26:31 -08:00
call Slots_TurnLightsOnOrOff
2015-11-11 20:38:57 -08:00
hlcoord 3, 8
2015-12-10 19:26:31 -08:00
call Slots_TurnLightsOnOrOff
2018-06-24 07:09:41 -07:00
Slots_Lights1OnOff:
2015-11-11 20:38:57 -08:00
hlcoord 3, 6
2018-06-24 07:09:41 -07:00
Slots_TurnLightsOnOrOff:
2015-11-11 20:38:57 -08:00
ld a, b
ld [hl], a
2015-12-10 19:26:31 -08:00
ld de, SCREEN_WIDTH / 2 + 3
2015-11-11 20:38:57 -08:00
add hl, de
ld [hl], a
2015-12-10 19:26:31 -08:00
ld de, SCREEN_WIDTH / 2 - 3
2015-11-11 20:38:57 -08:00
add hl, de
inc a
ld [hl], a
2015-12-10 19:26:31 -08:00
ld de, SCREEN_WIDTH / 2 + 3
2015-11-11 20:38:57 -08:00
add hl, de
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
Slots_AskBet:
2015-12-10 19:26:31 -08:00
.loop
ld hl, .SlotsBetHowManyChipsText
call PrintText1bpp
ld hl, .MenuHeader
call LoadMenuHeader
2015-12-15 15:59:49 -08:00
call VerticalMenu
call CloseWindow
2015-11-11 20:38:57 -08:00
ret c
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
2015-11-11 20:38:57 -08:00
ld b, a
2015-12-10 19:26:31 -08:00
ld a, 4
2015-11-11 20:38:57 -08:00
sub b
2015-12-10 19:26:31 -08:00
ld [wSlotBet], a
ld hl, wChips
2015-11-11 20:38:57 -08:00
ld c, a
ld a, [hli]
and a
2015-12-10 19:26:31 -08:00
jr nz, .Start
2015-11-11 20:38:57 -08:00
ld a, [hl]
cp c
2015-12-10 19:26:31 -08:00
jr nc, .Start
ld hl, .SlotsNotEnoughChipsText
call PrintText1bpp
2015-12-10 19:26:31 -08:00
jr .loop
.Start:
ld hl, wChips + 1
2015-11-11 20:38:57 -08:00
ld a, [hl]
sub c
ld [hld], a
2015-12-10 19:26:31 -08:00
jr nc, .ok
2015-11-11 20:38:57 -08:00
dec [hl]
2015-12-10 19:26:31 -08:00
.ok
2015-11-11 20:38:57 -08:00
call WaitSFX
ld de, SFX_PAY_DAY
call PlaySFX
ld hl, .SlotsStartText
call PrintText1bpp
2015-11-11 20:38:57 -08:00
and a
ret
2015-12-10 19:26:31 -08:00
.SlotsBetHowManyChipsText:
text_far _SlotsBetHowManyChipsText
text_end
2015-11-11 20:38:57 -08:00
.SlotsStartText:
text_far _SlotsStartText
text_end
2015-11-11 20:38:57 -08:00
.SlotsNotEnoughChipsText:
text_far _SlotsNotEnoughChipsText
text_end
2015-11-11 20:38:57 -08:00
.MenuHeader:
db MENU_BACKUP_TILES ; flags
menu_coords 14, 10, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
dw .MenuData
2015-11-11 20:38:57 -08:00
db 1 ; default option
.MenuData:
db STATICMENU_CURSOR ; flags
2015-11-11 20:38:57 -08:00
db 3 ; items
db " 3@"
db " 2@"
db " 1@"
2018-06-24 07:09:41 -07:00
Slots_AskPlayAgain:
ld hl, wChips
2015-11-11 20:38:57 -08:00
ld a, [hli]
or [hl]
jr nz, .you_have_chips
ld hl, .SlotsRanOutOfChipsText
call PrintText1bpp
2015-11-11 20:38:57 -08:00
ld c, 60
call DelayFrames
2015-12-10 19:26:31 -08:00
jr .exit_slots
.you_have_chips
ld hl, .SlotsPlayAgainText
call PrintText1bpp
2019-04-08 05:15:10 -07:00
call LoadMenuTextbox
2015-11-11 20:38:57 -08:00
lb bc, 14, 12
call PlaceYesNoBox
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
2015-11-11 20:38:57 -08:00
dec a
call CloseWindow
2015-11-11 20:38:57 -08:00
and a
2015-12-10 19:26:31 -08:00
jr nz, .exit_slots
2015-11-11 20:38:57 -08:00
and a
ret
2015-12-10 19:26:31 -08:00
.exit_slots
2015-11-11 20:38:57 -08:00
scf
ret
2015-12-10 19:26:31 -08:00
.SlotsRanOutOfChipsText:
text_far _SlotsRanOutOfChipsText
text_end
2015-11-11 20:38:57 -08:00
.SlotsPlayAgainText:
text_far _SlotsPlayAgainText
text_end
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
Slots_GetPayout:
2015-12-10 19:26:31 -08:00
ld a, [wSlotMatched]
2018-01-10 19:53:42 -08:00
cp SLOTS_NO_MATCH
2015-12-10 19:26:31 -08:00
jr z, .no_win
2015-11-11 20:38:57 -08:00
srl a
ld e, a
ld d, 0
2015-12-10 19:26:31 -08:00
ld hl, .PayoutTable
2015-11-11 20:38:57 -08:00
add hl, de
ld a, [hli]
2015-12-10 19:26:31 -08:00
ld [wPayout + 1], a
2015-11-11 20:38:57 -08:00
ld e, a
ld a, [hl]
2015-12-10 19:26:31 -08:00
ld [wPayout], a
2015-11-11 20:38:57 -08:00
ld d, a
ret
.PayoutTable:
table_width 2, Slots_GetPayout.PayoutTable
dw 300 ; SLOTS_SEVEN
dw 50 ; SLOTS_POKEBALL
dw 6 ; SLOTS_CHERRY
dw 8 ; SLOTS_PIKACHU
dw 10 ; SLOTS_SQUIRTLE
dw 15 ; SLOTS_STARYU
assert_table_length NUM_SLOT_REELS
2015-11-11 20:38:57 -08:00
2015-12-10 19:26:31 -08:00
.no_win
ld hl, wPayout
2015-11-11 20:38:57 -08:00
xor a
ld [hli], a
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
Slots_PayoutText:
2015-12-10 19:26:31 -08:00
ld a, [wSlotMatched]
2018-01-10 19:53:42 -08:00
cp SLOTS_NO_MATCH
2015-12-10 19:26:31 -08:00
jr nz, .MatchedSomething
ld hl, .SlotsDarnText
call PrintText1bpp
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
.MatchedSomething:
2015-11-11 20:38:57 -08:00
srl a
ld e, a
ld d, 0
2015-12-10 19:26:31 -08:00
ld hl, .PayoutStrings
2015-11-11 20:38:57 -08:00
add hl, de
add hl, de
add hl, de
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer2
2015-12-10 19:26:31 -08:00
ld bc, 4
2015-11-11 20:38:57 -08:00
call CopyBytes
ld a, [hli]
ld h, [hl]
ld l, a
2015-12-10 19:26:31 -08:00
ld de, .return
2015-11-11 20:38:57 -08:00
push de
jp hl
2015-12-10 19:26:31 -08:00
.return
ld hl, .Text_PrintPayout
call PrintText1bpp
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.PayoutStrings:
table_width 6, Slots_PayoutText.PayoutStrings
dbw "300@", .LinedUpSevens ; SLOTS_SEVEN
dbw "50@@", .LinedUpPokeballs ; SLOTS_POKEBALL
dbw "6@@@", .LinedUpMonOrCherry ; SLOTS_CHERRY
dbw "8@@@", .LinedUpMonOrCherry ; SLOTS_PIKACHU
dbw "10@@", .LinedUpMonOrCherry ; SLOTS_SQUIRTLE
dbw "15@@", .LinedUpMonOrCherry ; SLOTS_STARYU
assert_table_length NUM_SLOT_REELS
2015-11-11 20:38:57 -08:00
.Text_PrintPayout:
text_asm
2015-12-10 19:26:31 -08:00
ld a, [wSlotMatched]
2015-11-11 20:38:57 -08:00
add $25
ldcoord_a 2, 13
inc a
ldcoord_a 2, 14
inc a
ldcoord_a 3, 13
inc a
ldcoord_a 3, 14
hlcoord 18, 17
2015-12-10 19:26:31 -08:00
ld [hl], "â–¼"
ld hl, .SlotsLinedUpText
2015-11-11 20:38:57 -08:00
rept 4
inc bc
endr
ret
2015-12-10 19:26:31 -08:00
.SlotsLinedUpText:
text_far _SlotsLinedUpText
text_end
2015-11-11 20:38:57 -08:00
.SlotsDarnText:
text_far _SlotsDarnText
text_end
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.LinedUpSevens:
2015-11-11 20:38:57 -08:00
ld a, SFX_2ND_PLACE
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
2015-11-11 20:38:57 -08:00
call WaitSFX
; Oddly, the rarest mode (wKeepSevenBiasChance = 1) is the one with
; the worse odds to favor seven symbol streaks (12.5% vs 25%).
; it's possible that either the wKeepSevenBiasChance initialization
; or this code was intended to lead to flipped percentages.
ld a, [wKeepSevenBiasChance]
2015-11-11 20:38:57 -08:00
and a
2017-12-29 04:52:42 -08:00
jr nz, .lower_seven_streak_odds
2015-11-11 20:38:57 -08:00
call Random
and %0010100
ret z ; 25% chance to stick with seven symbol bias
2018-01-10 19:53:42 -08:00
ld a, SLOTS_NO_BIAS
2015-12-10 19:26:31 -08:00
ld [wSlotBias], a
2015-11-11 20:38:57 -08:00
ret
2017-12-29 04:52:42 -08:00
.lower_seven_streak_odds
2015-11-11 20:38:57 -08:00
call Random
and %0011100
ret z ; 12.5% chance to stick with seven symbol bias
2018-01-10 19:53:42 -08:00
ld a, SLOTS_NO_BIAS
2015-12-10 19:26:31 -08:00
ld [wSlotBias], a
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.LinedUpPokeballs:
2015-11-11 20:38:57 -08:00
ld a, SFX_3RD_PLACE
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
2015-11-11 20:38:57 -08:00
call WaitSFX
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
.LinedUpMonOrCherry:
2015-11-11 20:38:57 -08:00
ld a, SFX_PRESENT
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
2015-11-11 20:38:57 -08:00
call WaitSFX
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
Slots_AnimateGolem:
2016-05-13 22:11:01 -07:00
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
ld e, [hl]
ld d, 0
2015-12-10 19:26:31 -08:00
ld hl, .Jumptable
2015-11-11 20:38:57 -08:00
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
2015-11-11 20:38:57 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.Jumptable:
2015-12-26 18:59:03 -08:00
dw .init
dw .fall
dw .roll
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.init
ld hl, SPRITEANIMSTRUCT_VAR3
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
2015-12-10 19:26:31 -08:00
jr nz, .retain
ld a, 2
ld [wSlotsDelay], a
2015-12-10 19:26:31 -08:00
ld hl, SPRITEANIMSTRUCT_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], $0
ret
2015-12-10 19:26:31 -08:00
.retain
2015-11-11 20:38:57 -08:00
dec [hl]
2016-05-13 22:11:01 -07:00
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl]
ld hl, SPRITEANIMSTRUCT_VAR1
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], $30
2015-12-10 19:26:31 -08:00
ld hl, SPRITEANIMSTRUCT_XOFFSET
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], $0
2018-06-24 07:09:41 -07:00
.fall
ld hl, SPRITEANIMSTRUCT_VAR1
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
cp $20
2015-12-10 19:26:31 -08:00
jr c, .play_sound
2015-11-11 20:38:57 -08:00
dec [hl]
ld e, a
2023-07-26 17:50:16 -07:00
ld d, 14 * TILE_WIDTH
2017-12-24 09:47:30 -08:00
farcall BattleAnim_Sine_e
2015-11-11 20:38:57 -08:00
ld a, e
2015-12-10 19:26:31 -08:00
ld hl, SPRITEANIMSTRUCT_YOFFSET
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], a
ret
2015-12-10 19:26:31 -08:00
.play_sound
2016-05-13 22:11:01 -07:00
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl]
ld hl, SPRITEANIMSTRUCT_VAR2
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], $2
ld a, 1
ld [wSlotsDelay], a
2015-11-11 20:38:57 -08:00
ld a, SFX_PLACE_PUZZLE_PIECE_DOWN
2015-12-10 19:26:31 -08:00
call Slots_PlaySFX
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
.roll
2015-12-10 19:26:31 -08:00
ld hl, SPRITEANIMSTRUCT_XOFFSET
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
inc [hl]
2015-12-26 18:59:03 -08:00
inc [hl]
2023-07-26 17:50:16 -07:00
cp 9 * TILE_WIDTH
2015-12-10 19:26:31 -08:00
jr nc, .restart
2015-11-11 20:38:57 -08:00
and $3
ret nz
ld hl, SPRITEANIMSTRUCT_VAR2
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
xor $ff
inc a
ld [hl], a
ldh [hSCY], a
2015-11-11 20:38:57 -08:00
ret
2015-12-10 19:26:31 -08:00
.restart
2016-05-13 22:11:01 -07:00
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
xor a
ld [hl], a
ldh [hSCY], a
2015-11-11 20:38:57 -08:00
ret
2018-06-24 07:09:41 -07:00
Slots_AnimateChansey:
2016-05-13 22:11:01 -07:00
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
ld e, [hl]
ld d, 0
2015-12-10 19:26:31 -08:00
ld hl, .Jumptable
2015-11-11 20:38:57 -08:00
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
2015-11-11 20:38:57 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.Jumptable:
2015-12-26 18:59:03 -08:00
dw .walk
dw .one
dw .two
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.walk
2015-12-10 19:26:31 -08:00
ld hl, SPRITEANIMSTRUCT_XCOORD
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
inc [hl]
2023-07-26 17:50:16 -07:00
cp 13 * TILE_WIDTH
2015-12-10 19:26:31 -08:00
jr z, .limit
2015-11-11 20:38:57 -08:00
and $f
ret nz
ld de, SFX_JUMP_OVER_LEDGE
call PlaySFX
ret
2015-12-10 19:26:31 -08:00
.limit
2016-05-13 22:11:01 -07:00
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl]
ld a, 1
ld [wSlotsDelay], a
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
.one
ld a, [wSlotsDelay]
2015-11-11 20:38:57 -08:00
cp $2
2015-12-10 19:26:31 -08:00
jr z, .retain
2015-11-11 20:38:57 -08:00
cp $5
ret nz
2015-12-10 19:26:31 -08:00
ld hl, SPRITEANIMSTRUCT_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], $0
ret
2015-12-10 19:26:31 -08:00
.retain
2016-05-13 22:11:01 -07:00
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
inc [hl]
ld hl, SPRITEANIMSTRUCT_VAR1
2015-11-11 20:38:57 -08:00
add hl, bc
ld [hl], $8
2018-06-24 07:09:41 -07:00
.two
ld hl, SPRITEANIMSTRUCT_VAR1
2015-11-11 20:38:57 -08:00
add hl, bc
ld a, [hl]
and a
2015-12-10 19:26:31 -08:00
jr z, .spawn_egg
2015-11-11 20:38:57 -08:00
dec [hl]
ret
2015-12-10 19:26:31 -08:00
.spawn_egg
2016-05-13 22:11:01 -07:00
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
2015-11-11 20:38:57 -08:00
add hl, bc
dec [hl]
push bc
2015-11-18 10:01:55 -08:00
depixel 12, 13, 0, 4
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_OBJ_SLOTS_EGG
call InitSpriteAnimStruct
2015-11-11 20:38:57 -08:00
pop bc
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
Slots_WaitSFX:
2015-11-11 20:38:57 -08:00
push bc
ld c, 16
call DelayFrames
pop bc
ret
2015-12-10 19:26:31 -08:00
2018-06-24 07:09:41 -07:00
Slots_PlaySFX:
2015-11-11 20:38:57 -08:00
push de
ld e, a
ld d, 0
call PlaySFX
pop de
ret
2015-12-10 19:26:31 -08:00
; The first three positions are repeated to
; avoid needing to check indices when copying.
2018-06-24 07:09:41 -07:00
Reel1Tilemap:
2015-12-10 19:26:31 -08:00
db SLOTS_SEVEN ; 0
db SLOTS_CHERRY ; 1
db SLOTS_STARYU ; 2
db SLOTS_PIKACHU ; 3
db SLOTS_SQUIRTLE ; 4
db SLOTS_SEVEN ; 5
db SLOTS_CHERRY ; 6
db SLOTS_STARYU ; 7
db SLOTS_PIKACHU ; 8
db SLOTS_SQUIRTLE ; 9
db SLOTS_POKEBALL ; 10
db SLOTS_CHERRY ; 11
db SLOTS_STARYU ; 12
db SLOTS_PIKACHU ; 13
db SLOTS_SQUIRTLE ; 14
db SLOTS_SEVEN ; 0
db SLOTS_CHERRY ; 1
db SLOTS_STARYU ; 2
2018-06-24 07:09:41 -07:00
Reel2Tilemap:
2015-12-10 19:26:31 -08:00
db SLOTS_SEVEN ; 0
db SLOTS_PIKACHU ; 1
db SLOTS_CHERRY ; 2
db SLOTS_SQUIRTLE ; 3
db SLOTS_STARYU ; 4
db SLOTS_POKEBALL ; 5
db SLOTS_PIKACHU ; 6
db SLOTS_CHERRY ; 7
db SLOTS_SQUIRTLE ; 8
db SLOTS_STARYU ; 9
db SLOTS_POKEBALL ; 10
db SLOTS_PIKACHU ; 11
db SLOTS_CHERRY ; 12
db SLOTS_SQUIRTLE ; 13
db SLOTS_STARYU ; 14
db SLOTS_SEVEN ; 0
db SLOTS_PIKACHU ; 1
db SLOTS_CHERRY ; 2
2018-06-24 07:09:41 -07:00
Reel3Tilemap:
2015-12-10 19:26:31 -08:00
db SLOTS_SEVEN ; 0
db SLOTS_PIKACHU ; 1
db SLOTS_CHERRY ; 2
db SLOTS_SQUIRTLE ; 3
db SLOTS_STARYU ; 4
db SLOTS_PIKACHU ; 5
db SLOTS_CHERRY ; 6
db SLOTS_SQUIRTLE ; 7
db SLOTS_STARYU ; 8
db SLOTS_PIKACHU ; 9
db SLOTS_POKEBALL ; 10
db SLOTS_CHERRY ; 11
db SLOTS_SQUIRTLE ; 12
db SLOTS_STARYU ; 13
db SLOTS_PIKACHU ; 14
db SLOTS_SEVEN ; 0
db SLOTS_PIKACHU ; 1
db SLOTS_CHERRY ; 2
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
SlotsTilemap:
INCBIN "gfx/slots/slots.tilemap"
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
Slots1LZ:
INCBIN "gfx/slots/slots_1.2bpp.lz"
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
Slots2LZ:
INCBIN "gfx/slots/slots_2.2bpp.lz"
2015-11-11 20:38:57 -08:00
2018-06-24 07:09:41 -07:00
Slots3LZ:
INCBIN "gfx/slots/slots_3.2bpp.lz"