Pokemon Crystal Slot Machine Tips

Pokemon Gold, Silver and Crystal at IGN: walkthroughs, items, maps, video tips, and strategies. The machine either spins itself to a 7, Golem come down and roll it over to a 7, a Chansey comes out and throws eggs at the row until it hits a 7, or nothing happens at all and you lose.Side note: For the final row, the machine can do any of the possible 'winning actions' (e.g. Golem rolling down, machine spinning itself) and still end up losing.

Pokemon crystal slot machine tips play

Pokemon Emerald Best Slot Machine

Research‎ > ‎

GSC Slot Machines

If you're interested on this you may want to watch this video instead: https://www.youtube.com/watch?v=ojq3xqfRF6I
Call Init, then enter SlotsLoop until game is quitted
***********************************************************************************

- ScriptVar <- 1 (1/6) (*1)
- wSlotBias <- NO_BIAS
- wKeepSevenBiasChance <- 1 (12.5%)
***********************************************************************************

- Slots_SpinReels (wReel1ReelAction, wReel2ReelAction, wReel3ReelAction)
- PrintCoinsAndPayout (Coins, wPayout) [just refresh the numbers, nothing else]
***********************************************************************************


- wFirstTwoReelsMatching <- 0
- wJumptableIndex <- BET_AND_START

- Wait for bet, quit or don't start game if no bet or not enough coins
- Take coins from player
- f_INIT_BIAS
- wReel1ReelAction <- NORMAL_RATE
- wReel3ReelAction <- NORMAL_RATE
- wReel2ManipCounter <- 4
- Return
- WAIT_START
- wDelay --
- wJumptableIndex <- WAIT_REEL_1

- Wait A press
- wReel1ReelAction <- STOP_REEL1
- wReel1ReelAction != DO_NOTHING:
- wJumptableIndex <- WAIT_REEL2
- Wait A press
- wSlotBet >= 2:
- (wSlotBias NO_BIAS) || (wSlotBias SEVEN):
- wReel2ReelAction <- STOP_REEL2 (68.75%)
- wReel2ReelAction <- SET_UP_REEL2_SKIP_TO_SEVEN (31.25%)
- wReel2ReelAction <- STOP_REEL2
- wReel2ReelAction != DO_NOTHING:
- wJumptableIndex <- WAIT_REEL3
- Wait A press
- (wFirstTwoReelsMatching 0) || (wFirstTwoReelsMatchingSevens 0):
- Else:
- wReel3ReelAction <- STOP_REEL3 (29.7%)
- wReel3ReelAction <- START_SLOW_ADVANCE_REEL3 (23.4%)
- wReel3ReelAction <- INIT_CHANSEY (23.4%)
- wReel3ReelAction <- STOP_REEL3 (37.5%)
- wReel3ReelAction <- START_SLOW_ADVANCE_REEL3 (31.25%)
- WAIT_STOP_REEL3
- Return
- Halt Jumptable three iterations [effectively don't call Jumptable next 3 loops]

- Flash screen if win
- wFirstTwoReelsMatchingSevens <- 0
- If lined up SEVENs:
- wSlotBias <- NO_BIAS (75%)
- wSlotBias <- NO_BIAS (87.5%)
- Ask play again or quit
- wJumptableIndex <- INIT

***********************************************************************************

Call functions at wReel1ReelAction, wReel2ReelAction, and wReel3ReelAction, one for
each corresponding reel, only if the reel symbols of said reel are properly
aligned. They are aligned every X Slots_SpinReels calls while spinning, where X is
(16 / wCurReelSpinRate) and always while static. Also, advance the reels based on
wCurReelSpinRate. (Reels_advanced/frame) = (wCurReelSpinRate / 16)
- DO_NOTHING

- wCurReelStopDelay 0:
- Else:
- Return
- NORMAL_RATE
- Return
- STOP_REEL1
- (wSlotBias != NO_BIAS) && (wReel1ManipCounter != 0):
- If symbol at wSlotBias does not match any of the 3 symbols in Reel #1:
- f_STOP_REEL

- If no match in first two reels:
- wFirstTwoReelsMatchingSevens <- 0
- (wSlotBias != NO_BIAS) && (wReel2ManipCounter != 0):
- Return
- Return
- wFirstTwoReelsMatching <- 1
- wFirstTwoReelsMatchingSevens <- 1
- If symbol at wSlotBias equals the last matched symbol (*2):
- Return
- (wSlotBias != NO_BIAS) && (wReel2ManipCounter != 0):
- Return
- Return
- SET_UP_REEL2_SKIP_TO_SEVEN
- f_STOP_REEL
- wReel2ReelAction <- WAIT_REEL2_SKIP_TO_SEVEN
- wReel2SpinRate <- 0

- wReel2ManipDelay != 0:
- Else:
- wReel2ReelAction <- FAST_SPIN_REEL2_UNTIL_LINED_UP_SEVENS
- Return
- FAST_SPIN_REEL2_UNTIL_LINED_UP_SEVENS
- f_STOP_REEL

- If no match in three reels:
- (wSlotBias != NO_BIAS) && (wReel3ManipCounter != 0):
- Return
- Return
- If symbol at wSlotBias equals the last matched symbol (*2):
- Return
- wReel3ManipCounter != 0:
- Return
- START_SLOW_ADVANCE_REEL3
- Return
- wReel3ReelAction <- WAIT_SLOW_ADVANCE_REEL3
- WAIT_SLOW_ADVANCE_REEL3
- wReel3ManipDelay --
- wSlotBias SEVEN:
- f_STOP_REEL
- Else:
- f_STOP_REEL

- If any match in three reels:
- wReel3ReelAction <- WAIT_GOLEM
- wSlotBias SEVEN:
- Advance reel #3 until SEVEN match in three reels (*4)
- Advance reel #3 by X slots until there is no match in three reels (*3)(*4)
- WAIT_GOLEM
- f_STOP_REEL
- wDelay 1:
- wReel3SpinRate <- 8
- Return
- END_GOLEM
- wReel3ReelAction <- WAIT_GOLEM
- Return
- INIT_CHANSEY
- Return
- wReel3SpinRate <- 0
- Return
- WAIT_CHANSEY
- Return
- wDelay <- 2
- wDelay <= 3:
- wReel3ReelAction <- DROP_REEL
- wReel3ManipDelay <- 17
- wReel3ManipDelay != 0:
- Else:
- wDelay <- 5
- Else:
- wReel3ReelAction <- WAIT_CHANSEY
- Return
***********************************************************************************

- wSlotBias != SEVEN:
- wSlotBias <- SEVEN (2/256)
- wSlotBias <- STARYU (7/256)
- wSlotBias <- PIKACHU (20/256)
- wSlotBias <- NO_BIAS (207/256)
- wSlotBias <- SEVEN (3/256)
- wSlotBias <- STARYU (5/256)
- wSlotBias <- PIKACHU (14/256)
- wSlotBias <- NO_BIAS (175/256)

- wCurReelSpinRate <- 0
- wCurReelStopDelay <- 3
- Return
***********************************************************************************

wCurReel_ is not an address on its own; it identifies wReel1_, wReel2_, or wReel3_,

wKeepSevenBiasChance is wd002 in the disassembly
wCurReelStopDelay is wCurReelSlot0f in the disassembly
wCurReelManipCounter is wCurReelSlot09 in the disassembly
wCurReelManipDelay is wCurReelSlot0a in the disassembly
*1: Slot machine with coords 7,7 in Goldenrod and slot machine with coords 10,7 in
Celadon are guaranteed to set ScriptVar to 1. There is a NPC playing them during

*2: Order of check (from low priority to high priority): upwards diag, downwards
diag, bottom row, top row, middle row; diags only if bet = 3 and bottom/top rows

*3: X is a random number between 4 and 7. If advancing reel #3 by X slots would
yield a match in three reels, X is incremented until it doesn't
*4: One Golem is dropped for every slot advanced this way
*5: wDelay changes to 1 and 2 at some point during each Golem animation
*6: wDelay changes to 1 at some point during Chansey animation
***********************************************************************************

wDelay is a generic delay variable used to handle user input or to manage the

wCurReelManipCounter is how many times the game can advance the given reel on its
own after the player stops it (initialized to 4 by default).
wCurReelManipDelay handles waiting until the game has finished manipulating a reel.
[(wCurReelManipDelay / (16 / wCurReelSpinRate)] outputs the amount of spins that

After stopping reel #1, the game advances it until the symbol at wSlotBias shows up
anywhere in the reel. To begin with, this already has a ~1/3 chance of no
eventual line up of biased symbol if bet = 1 (probably less, since the symbol will
show up in the top slot if the player stops the reel without it already showing
up). This is also not guaranteed to spawn a SEVEN symbol or a POKEBALL symbol,
since a maximum of 4 advances isn't enough. If in NO_BIAS mode, there is no

In NO_BIAS mode (and SEVEN bias mode) with bet >= 2, reel #2 has a 31.25% chance to
automatically line up SEVENs in the first two reels if there is a SEVEN symbol in
reel #1 (this is a fast re-roll after a small stop delay), but if we're not in
SEVEN bias mode, we won't be able to line up three SEVENs in the end (or anything

Otherwise, after stopping reel #2, if in NO_BIAS mode, it's stopped without
manipulation. If any bias, the game may advance reel #2 up to 4 times, stopping if
the biased symbol is lined up in the first two reels (if there are two or more
symbol matches, only the last line checked counts, but it's not possible
to line more than 2 different symbols at once due to symbol distribution).
After stopping reel #3, STOP_REEL3 is the only possible action unless SEVENs are

STOP_REEL3 manipulates reel #3 advancing it up to four times, stopping only if
there is a match of the symbol at wSlotBias. Lining up the bias symbol is almost
guaranteed, except for SEVENs and POKEBALLs (where odds are still decent), for both
bet = 2 and bet = 3 (slightly worse odds for bet = 2, but virtually the same and
really close to 100%). If in NO_BIAS mode, reel is advanced until there's no match.
The following three modes (slow advance, Golem, Chansey) let reel #3 advance until
there is no match in three reels, before starting their effect.
SLOW_ADVANCE_REEL3 is similar to STOP_REEL3, except that in SEVEN bias mode it
guarantees a line up of SEVENs instead of advancing reel #3 a maximum of 4 times.
If no SEVEN bias mode, the game will make sure that nothing is lined up. This mode
makes reel #3 roll very slow at least 16 times (a complete round), then at least
one additional time until there is a SEVENs match (SEVEN bias mode), or no match

Golems will make SEVENs always match when in SEVEN bias mode, and will lead to no
match of any kind in any other bias mode or in NO_BIAS mode.
Chansey will ensure that SEVENs always match, but can only show up when in SEVEN

https://github.com/pret/pokecrystal/blob/master/engine/slot_machine.asm#L430
The fact that the bias to SEVEN symbols has a 75% or 87.5% chance to be reverted is
most likely a bug, the chances being meant to be the other way around. Not only is
a small chance like this weird (why bother with such low odds?), but the rarest
wKeepSevenBiasChance mode also happens to be the one with the worse odds.
***********************************************************************************

db SLOTS_SEVEN ; 0
db SLOTS_STARYU ; 2
db SLOTS_SQUIRTLE ; 4
db SLOTS_CHERRY ; 6
db SLOTS_PIKACHU ; 8
db SLOTS_POKEBALL ; 10
db SLOTS_STARYU ; 12
db SLOTS_SQUIRTLE ; 14
Reel2Tilemap: ; 93339
db SLOTS_PIKACHU ; 1
db SLOTS_SQUIRTLE ; 3
db SLOTS_POKEBALL ; 5
db SLOTS_CHERRY ; 7
db SLOTS_STARYU ; 9
db SLOTS_PIKACHU ; 11
db SLOTS_SQUIRTLE ; 13

db SLOTS_SEVEN ; 0
db SLOTS_CHERRY ; 2
db SLOTS_STARYU ; 4
db SLOTS_CHERRY ; 6
db SLOTS_STARYU ; 8
db SLOTS_POKEBALL ; 10
db SLOTS_SQUIRTLE ; 12
db SLOTS_PIKACHU ; 14
***********************************************************************************

- Always play in the slot machines with the better odds, during morning.
- Bet = 1 appears to be the worst idea but bet = 2 is probably better than bet = 3.
- Try to stop reel #1 2-4 slots short of the first SEVEN symbol. If you notice that
the game keeps advancing the reel for a split second and a SEVEN symbol shows up at
the top of the reel, it's because this spin is biased to SEVEN. If so, aim the next
two reels less than 4 slots away from the SEVEN, to ensure their eventual line-up.
Else, just smash the A button because the result is pretty much set in stone. Maybe
not if the spin is POKEBALL biased, but it doesn't seem worth it to waste time
- Pay special attention to line up SEVEN symbols if lined them up in the previous
spin, because odds of SEVEN bias go from barely over 1% to generally 25%.