- Pokemon Slot Machine Cheat
- Pokemon Yellow Slot Machine
- Pokemon Crystal Slot Machine
- Pokemon Yellow Slots
'FREE SLOT MACHINES in Artemis Slots Of Vegas! Get 20+ Vegas slot machines FREE! Real; Top casinos in Las Vegas are inviting you to come in, play slot machines, and win unimaginably huge jackpots. It is a chance of a lifetime because not everyone gets a FREE TICKET to Golden Tornado Slot Machines— the richest, hand-held casino for slots. Just start searching.
These are known bugs and glitches in the original Pokémon Crystal game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash.
Fixes are written in the diff
format. If you've used Git before, this should look familiar:
Fixes in the multi-player battle engine category will break compatibility with standard Pokémon Gold/Silver/Crystal for link battles, unless otherwise noted. This can be avoided by writing more complicated fixes that only apply if the value at [wLinkMode]
is not LINK_COLOSSEUM
. That's how Crystal itself fixed two bugs in Gold and Silver regarding the moves Reflect and Light Screen and Present.
Contents
- Multi-player battle engine
- Single-player battle engine
- Overworld engine
- Graphics
- Audio
- Text
- Scripted events
- Internal engine routines
Multi-player battle engine
Perish Song and Spikes can leave a Pokémon with 0 HP and not faint
(Video)
Fix: Edit CheckFaint_PlayerThenEnemy
and CheckFaint_EnemyThenPlayer
in engine/battle/core.asm:
Thick Club and Light Ball can make (Special) Attack wrap around above 1024
(Video)
Fix: Edit SpeciesItemBoost
in engine/battle/effect_commands.asm
Metal Powder can increase damage taken with boosted (Special) Defense
(Video)
Fix: Edit DittoMetalPowder
in engine/battle/effect_commands.asm:
Reflect and Light Screen can make (Special) Defense wrap around above 1024
This bug existed for all battles in Gold and Silver, and was only fixed for single-player battles in Crystal to preserve link compatibility.
Fix: Edit TruncateHL_BC
in engine/battle/effect_commands.asm
(This fix also affects Thick Club, Light Ball, and Metal Powder, as described above, but their specific fixes in the above bugs allow more accurate damage calculations.)
Moves with a 100% secondary effect chance will not trigger it in 1/256 uses
(Video)
Fix: Edit BattleCommand_EffectChance
in engine/battle/effect_commands.asm:
Compatibility preservation: If you wish to keep compatibility with standard Pokémon Crystal, you can disable the fix during link battles by also applying the following edit in the same place:
Belly Drum sharply boosts Attack even with under 50% HP
(Video)
Fix: Edit BattleCommand_BellyDrum
in engine/battle/move_effects/belly_drum.asm:
Berserk Gene's confusion lasts for 256 turns or the previous Pokémon's confusion count
(Video)
Fix: Edit HandleBerserkGene
in engine/battle/core.asm:
This makes the Berserk Gene use the regular confusion duration (2–5 turns).
Confusion damage is affected by type-boosting items and Explosion/Self-Destruct doubling
(Video)
Fix:
First, edit wram.asm:
Then edit four routines in engine/battle/effect_commands.asm:
Moves that lower Defense can do so after breaking a Substitute
(Video)
This bug affects Acid, Iron Tail, and Rock Smash.
Fix: Edit DefenseDownHit
in data/moves/effects.asm:
Counter and Mirror Coat still work if the opponent uses an item
(Video)
Fix: Edit BattleCommand_Counter
in engine/battle/move_effects/counter.asm and BattleCommand_MirrorCoat
in engine/battle/move_effects/mirror_coat.asm:
Add this to the end of each file:
A Disabled but PP Up–enhanced move may not trigger Struggle
(Video)
Fix: Edit CheckPlayerHasUsableMoves
in engine/battle/core.asm:
A Pokémon that fainted from Pursuit will have its old status condition when revived
(Video)
Fix: Edit PursuitSwitch
in engine/battle/core.asm
Lock-On and Mind Reader don't always bypass Fly and Dig
This bug affects Attract, Curse, Foresight, Mean Look, Mimic, Nightmare, Spider Web, Transform, and stat-lowering effects of moves like String Shot or Bubble during the semi-invulnerable turn of Fly or Dig.
Fix: Edit CheckHiddenOpponent
in engine/battle/effect_commands.asm:
Beat Up can desynchronize link battles
(Video)
Fix: Edit BattleCommand_BeatUp
in engine/battle/move_effects/beat_up.asm:
Beat Up works incorrectly with only one Pokémon in the party
This bug prevents the rest of Beat Up's effect from being executed if the player or enemy only has one Pokémon in their party while using it. It prevents Substitute from being raised and King's Rock from working.
Fix: Edit BattleCommand_EndLoop
in engine/battle/effect_commands.asm:
Cosmetic fix: This fix does not break compatibility, but it only affects what's shown on the screen for the patched game.
Beat Up may fail to raise Substitute
Fixing this cosmetic bug will not break link battle compatibility.
This bug prevents Substitute from being raised if Beat Up was blocked by Protect or Detect.
Fix: Edit BattleCommand_FailureText
in engine/battle/effect_commands.asm.
Beat Up may trigger King's Rock even if it failed
This bug is caused because Beat Up never sets wAttackMissed
, even when no Pokémon was able to attack (due to being fainted or having a status condition).
Fix: Edit BattleCommand_BeatUpFailText
in engine/battle/move_effects/beat_up.asm:
Present damage is incorrect in link battles
(Video)
This bug existed for all battles in Gold and Silver, and was only fixed for single-player battles in Crystal to preserve link compatibility.
Fix: Edit BattleCommand_Present
in engine/battle/move_effects/present.asm:
Dragon Scale, not Dragon Fang, boosts Dragon-type moves
Fix: Edit ItemAttributes
in data/items/attributes.asm:
HP bar animation is slow for high HP
Fixing this cosmetic bug will not break link battle compatibility.
(Video)
Fix: Edit LongAnim_UpdateVariables
in engine/battle/anim_hp_bar.asm:
HP bar animation off-by-one error for low HP
Fixing this cosmetic bug will not break link battle compatibility.
(Video)
Fix: Edit ShortHPBar_CalcPixelFrame
in engine/battle/anim_hp_bar.asm:
Single-player battle engine
A Transformed Pokémon can use Sketch and learn otherwise unobtainable moves
(Video)
Fix: Edit BattleCommand_Sketch
in engine/battle/move_effects/sketch.asm:
Catching a Transformed Pokémon always catches a Ditto
This bug can affect Mew or Pokémon other than Ditto that used Transform via Mirror Move or Sketch.
Fix: Edit PokeBallEffect
in engine/items/item_effects.asm:
Experience underflow for level 1 Pokémon with Medium-Slow growth rate
(Video)
This can bring Pokémon straight from level 1 to 100 by gaining just a few experience points.
Fix: Edit CalcExpAtLevel
in engine/pokemon/experience.asm:
The Dude's catching tutorial may crash if his Poké Ball can't be used
(Video)
This can occur if your party and current PC box are both full when you start the tutorial.
Fix: Edit PokeBallEffect
in engine/items/item_effects.asm:
BRN/PSN/PAR do not affect catch rate
Fix: Edit PokeBallEffect
in engine/items/item_effects.asm:
Moon Ball does not boost catch rate
Fix: Edit MoonBallMultiplier
in engine/items/item_effects.asm:
Love Ball boosts catch rate for the wrong gender
Fix: Edit LoveBallMultiplier
in engine/items/item_effects.asm:
Fast Ball only boosts catch rate for three Pokémon
Fix: Edit FastBallMultiplier
in engine/items/item_effects.asm:
Heavy Ball uses wrong weight value for three Pokémon
Fix: Edit GetPokedexEntryBank
in engine/items/item_effects.asm:
Glacier Badge may not boost Special Defense depending on the value of Special Attack
As Pryce's dialog ('That BADGE will raise the SPECIAL stats of POKéMON.') implies, Glacier Badge is intended to boost both Special Attack and Special Defense. However, due to BoostStat overwriting a
when boosting Special Attack, the Special Defense boost will not happen if the unboosted Special Attack stat is either 0–205 or 433–660.
Fix: Edit BadgeStatBoosts.CheckBadge
in engine/battle/core.asm:
'Smart' AI encourages Mean Look if its own Pokémon is badly poisoned
(Video)
Fix: Edit AI_Smart_MeanLook
in engine/battle/ai/scoring.asm:
AI makes a false assumption about CheckTypeMatchup
Fix: Edit BattleCheckTypeMatchup
in engine/battle/effect_commands.asm:
AI use of Full Heal or Full Restore does not cure Nightmare status
(Video)
Fix: Edit AI_HealStatus
in engine/battle/ai/items.asm:
AI use of Full Heal does not cure confusion status
Fix: Edit EnemyUsedFullRestore
, EnemyUsedFullHeal
, and AI_HealStatus
in engine/battle/ai/items.asm:
Wild Pokémon can always Teleport regardless of level difference
Fix: Edit BattleCommand_Teleport
in engine/battle/move_effects/teleport.asm:
HELD_CATCH_CHANCE
has no effect
Fix: Edit PokeBallEffect
in engine/items/item_effects.asm:
Credits sequence changes move selection menu behavior
(Video)
To select a move in battle, you have to press and release the Up or Down buttons. However, after playing the credits sequence, holding down either button will continuously scroll through the moves.
Fix: Edit Credits
in engine/movie/credits.asm:
The [hInMenu]
value determines this button behavior. However, the battle moves menu doesn't actually set [hInMenu]
to anything, so either behavior may have been intentional. The default 0 prevents continuous scrolling; a value of 1 allows it. (The Japanese release sets it to 0.)
Optional fix: To explicitly set a [hInMenu]
for the moves menu, edit BattleTurn
in engine/battle/core.asm:
Overworld engine
LoadMetatiles
wraps around past 128 blocks
This bug prevents you from using blocksets with more than 128 blocks.
Fix: Edit LoadMetatiles
in home/map.asm:
Surfing directly across a map connection does not load the new map
(Video)
Fix:
First, edit UsedSurfScript
in engine/events/overworld.asm:
Then edit SurfStartStep
in engine/overworld/player_object.asm:
This fix will make the player enter the water at a normal walking speed, not with a slow step.
Swimming NPCs aren't limited by their movement radius
This bug is why the Lapras in maps/UnionCaveB2F.asm, which uses SPRITEMOVEDATA_SWIM_WANDER
, is not restricted by its 1, 1
movement radius.
Fix: Edit CanObjectMoveInDirection
in engine/overworld/npc_movement.asm:
Graphics
In-battle “…
” ellipsis is too high
This is a mistake with the “…
” tile in gfx/battle/hp_exp_bar_border.png:
Fix: Lower the ellipsis by two pixels:
Two tiles in the port
tileset are drawn incorrectly
This is a mistake with the left-hand warp carpet corner tiles in gfx/tilesets/port.png:
Fix: Adjust them to match the right-hand corner tiles:
Using a Park Ball in non-Contest battles has a corrupt animation
(Video)
Fix: Edit PokeBallEffect
in engine/items/item_effects.asm:
Battle transitions fail to account for the enemy's level
(Video)
There are three things wrong here:
wEnemyMonLevel
isn't initialized yetwBattleMonLevel
gets overwritten after it's initialized byFindFirstAliveMonAndStartBattle
wBattleMonLevel
isn't initialized until much later when the battle is with a trainer
Fix:
First, edit engine/battle/battle_transition.asm:
Then edit engine/battle/start_battle.asm:
Finally, edit engine/battle/read_trainer_party.asm:
Some trainer NPCs have inconsistent overworld sprites
Some of these may have been intentional behavior; use your own judgment for whether to fix them.
Most trainer classes always use the same sprite and color for their overworld NPCs. There are some exceptions:
- maps/FastShipCabins_SE_SSE_CaptainsCabin.asm:
TrainerPsychicRodney
should useSPRITE_YOUNGSTER
, notSPRITE_SUPER_NERD
- maps/LakeOfRage.asm:
TrainerFisherAndre
andTrainerFisherRaymond
should usePAL_NPC_GREEN
, notPAL_NPC_BLUE
- maps/Route13.asm:
TrainerHikerKenny
should usePAL_NPC_BROWN
, notPAL_NPC_RED
- maps/Route44.asm:
TrainerBirdKeeperVance1
should usePAL_NPC_BLUE
, notPAL_NPC_GREEN
- maps/Route44.asm:
TrainerPokemaniacZach
should usePAL_NPC_BLUE
, notPAL_NPC_GREEN
- maps/UnionCaveB2F.asm:
TrainerCooltrainermNick
should useSPRITE_COOLTRAINER_M
, notSPRITE_ROCKER
- maps/FuchsiaPokecenter1F.asm:
FuchsiaPokecenter1FNurseScript
should usePAL_NPC_RED
, notPAL_NPC_GREEN
Most of the NPCs in maps/NationalParkBugContest.asm and maps/Route36NationalParkGate.asm are also inconsistent with their trainers from other maps:
BugCatchingContestant1AScript
andBugCatchingContestant1BScript
:BUG_CATCHER DON
from maps/Route30.asm should useSPRITE_BUG_CATCHER
andPAL_NPC_BROWN
, notSPRITE_YOUNGSTER
andPAL_NPC_RED
BugCatchingContestant2AScript
andBugCatchingContestant2BScript
:BUG_CATCHER ED
from maps/Route2.asm should useSPRITE_BUG_CATCHER
andPAL_NPC_BROWN
, notSPRITE_YOUNGSTER
andPAL_NPC_GREEN
BugCatchingContestant3AScript
andBugCatchingContestant3BScript
:COOLTRAINERM NICK
from maps/UnionCaveB2F.asm should useSPRITE_COOLTRAINER_M
andPAL_NPC_RED
, notSPRITE_ROCKER
andPAL_NPC_BLUE
BugCatchingContestant4AScript
andBugCatchingContestant4BScript
:POKEFANM WILLIAM
from maps/NationalPark.asm should usePAL_NPC_RED
, notPAL_NPC_BROWN
BugCatchingContestant5AScript
andBugCatchingContestant5BScript
:BUG_CATCHER BENNY
from maps/AzaleaGym.asm should useSPRITE_BUG_CATCHER
andPAL_NPC_BROWN
, notSPRITE_YOUNGSTER
andPAL_NPC_RED
BugCatchingContestant7AScript
andBugCatchingContestant7BScript
:PICNICKER CINDY
from maps/FuchsiaGym.asm should usePAL_NPC_GREEN
, notPAL_NPC_BLUE
BugCatchingContestant8AScript
andBugCatchingContestant8BScript
:BUG_CATCHER JOSH
from maps/AzaleaGym.asm should useSPRITE_BUG_CATCHER
andPAL_NPC_BROWN
, notSPRITE_YOUNGSTER
andPAL_NPC_RED
BugCatchingContestant9AScript
andBugCatchingContestant9BScript
:YOUNGSTER SAMUEL
from maps/Route34.asm should usePAL_NPC_BLUE
, notPAL_NPC_GREEN
(Note that maps/Route8.asm has three BIKER
s, DWAYNE
, HARRIS
, and ZEKE
, that use PAL_NPC_RED
, PAL_NPC_GREEN
, and PAL_NPC_BLUE
instead of PAL_NPC_BROWN
; this is intentional since they're the 'Kanto Pokémon Federation'.)
(The use of SPRITE_ROCKER
instead of SPRITE_COOLTRAINER_M
for COOLTRAINERM NICK
may also be an intentional reference to the player's brother from the Space World '97 beta.)
Audio
Slot machine payout sound effects cut each other off
(Video)
Fix: Edit SlotsAction_PayoutAnim
in engine/games/slot_machine.asm:
Team Rocket battle music is not used for Executives or Scientists
Fix: Edit PlayBattleMusic
in engine/battle/start_battle.asm:
No bump noise if standing on tile $3E
Fix: Edit DoPlayerMovement.CheckWarp
in engine/overworld/player_movement.asm:
Playing Entei's Pokédex cry can distort Raikou's and Suicune's
(Video)
The exact cause of this bug is unknown.
Workaround: Edit DexEntryScreen_MenuActionJumptable.Cry
in engine/pokedex/pokedex.asm:
Text
Five-digit experience gain is printed incorrectly
(Video)
Fix: Edit _BoostedExpPointsText
and _ExpPointsText
in data/text/common_2.asm:
Only the first three evolution entries can have Stone compatibility reported correctly
Workaround: Edit PlacePartyMonEvoStoneCompatibility.DetermineCompatibility
in engine/pokemon/party_menu.asm:
This supports up to six entries.
EVOLVE_STAT
can break Stone compatibility reporting
Fix: Edit PlacePartyMonEvoStoneCompatibility.DetermineCompatibility
in engine/pokemon/party_menu.asm:
A 'HOF Master!' title for 200-Time Famers is defined but inaccessible
(Video)
Fix: Edit _HallOfFamePC.DisplayMonAndStrings
in engine/events/halloffame.asm:
Scripted events
Clair can give TM24 Dragonbreath twice
(Video)
Fix: Edit DragonsDen1F_MapScripts
in maps/DragonsDen1F.asm:
Daisy's grooming doesn't always increase happiness
This is a bug with HaircutOrGrooming
in engine/events/haircut.asm:
Fix: Edit data/events/happiness_probabilities.asm:
Magikarp in Lake of Rage are shorter, not longer
Fix: Edit LoadEnemyMon.CheckMagikarpArea
in engine/battle/core.asm:
Magikarp length limits have a unit conversion error
Fix: Edit LoadEnemyMon.CheckMagikarpArea
in engine/battle/core.asm:
Better fix: Rewrite the whole system to use millimeters instead of feet and inches, since they have better precision (1 in = 25.4 mm); and only convert from metric to imperial units for display purposes (or don't, of course).
Magikarp lengths can be miscalculated
Fix: Edit CalcMagikarpLength.BCLessThanDE
in engine/events/magikarp.asm:
CheckOwnMon
only checks the first five letters of OT names
(Video)
This bug can allow you to talk to Eusine in Celadon City and encounter Ho-Oh with only traded legendary beasts.
Fix: Edit CheckOwnMon
in engine/pokemon/search.asm:
CheckOwnMonAnywhere
does not check the Day-Care
This may have been intentional behavior; use your own judgment for whether to fix it.
This bug can prevent you from talking to Eusine in Celadon City or encountering Ho-Oh when a caught legendary beast is in the Day-Care.
Fix: Edit CheckOwnMonAnywhere
in engine/pokemon/search.asm:
Internal engine routines
Saves corrupted by mid-save shutoff are not handled
(Video 1, Video 2)
This does not have a simple and accurate fix. It would involve redesigning parts of the save system for Pokémon boxes.
ScriptCall
can overflow wScriptStack
and crash
Fix: Edit ScriptCall
in engine/overworld/scripting.asm:
LoadSpriteGFX
does not limit the capacity of UsedSprites
Fix: Edit LoadSpriteGFX
in engine/overworld/overworld.asm:
ChooseWildEncounter
doesn't really validate the wild Pokémon species
Fix: Edit ChooseWildEncounter
in engine/overworld/wildmons.asm:
TryObjectEvent
arbitrary code execution
Fix: Edit TryObjectEvent
in engine/overworld/events.asm:
ReadObjectEvents
overflows into wObjectMasks
Fix: Edit ReadObjectEvents
in home/map.asm:
ClearWRAM
only clears WRAM bank 1
Fix: Edit ClearWRAM
in home/init.asm:
BattleAnimCmd_ClearObjs
only clears the first 6⅔ objects
Fix: Edit BattleAnimCmd_ClearObjs
in engine/battle_anims/anim_commands.asm:
Amazing Man(Red and Blue only) | Cable Club escape glitch | Celadon looping map trick | Champion Blue music muting glitch | Coastal Flooding | Confusion and Substitute glitch | Cooltrainer move | Cycling based glitch maps | Escape sprite handling glitch | Evolve without an evolutionary stone(Red and Blue only) | Evolving Raichu(Red and Blue only) | Expanded item pack | Expanded Pokédex | Focus Energy glitch | Get stuck in a wall | Ghost Bicycle glitch | Glitch encounter system | Glitch City RAM Manipulation |Infinite Blaine Door | Introduction Nidorino glitch(Red and Blue only) | Invisible PCs(Red and Blue only) | Invisible tree glitch | Item stack duplication glitch | Mute the music in the Pokémon League | Partial trapping move link battle glitch | Pokémon Tower Pokédex glitch | PP underflow glitches | Recovery move glitch | Rival's effect | See a Ghost without a Silph Scope | Selfdestruct and Substitute glitch | Silph Co. PC Glitch | Slot machine glitch | Stand on a tree | Statue behavior glitch(Red and Blue only) | Super effective move AI flaw(Red and Blue only) | Super Glitch | Surf down glitch | Swift miss glitch | Transform assumption glitch | Transform Empty Move Glitch |Trick Zone | Vending machine purchase glitch |Walk around with only fainted Pokémon(Red and Blue only) | Walking lag glitch | Walk on water through Surf | Walking Pikachu happiness glitch(Yellow only) | Wild appeared! | ZZAZZ Glitch
(view, talk, edit)
In Pokémon Red, Blue, and Yellow, there are playable slot machines in the Celadon Game Corner. The rules are apparently simple: The player needs to line up the same symbols on horizontal or diagonal lines (the set of available lines depends on the number of coins betted), and the player can stop the reels, one at a time, using the A button. In reality, the game may cause the reels to 'slip' after the A button press either to hinder or to help the player, and the rules for doing so are actually complicated, with many oddities that may or may not be glitches. (Together with the separate building for prize claims, this is comparable to how real life Japanese pachi-slots are played.)
Thanks to the disassembly, the actual behaviors of the slot machines in Generation I are completely understood, although at some places it may still be unclear whether they match the intended behaviors.
Overview
For each individual spin, the slot machine can be in one of three modes:Mode bad, which guarantees that the player cannot get any match in the available lines.Mode good, which allows the player to get matches of symbols other than sevens or bars.Mode super, which allows and actively helps the player to get matches of sevens and bars. Mode super is the only mode of the three that will persist between spins. It will only end when the player wins a reward of 100 coins (bars) or 300 coins (sevens), and in the latter case only with a probability of 50% (i.e. it still have a 50% chance to persist).In general, for each spin, the mode is set to mode good or mode super with probability 45/256 (~17.6%), with the probability of mode super further depending on which slot machine the player is playing on (see below). It is set to mode bad with probability 210/256 (~82.0%). There is also a chance of 1/256 (~0.4%) to enter a lucky streak which allows the player to play on mode good (but never mode super) for all the spins after this one, until the player wins 60 times.Pokemon Slot Machine Cheat
The function to set the mode, called before each spinThe lucky slot machine
Whenever the player enters the Game Corner, a random number between 0 ~ 31 is generated, and if it is 0, it has a 7/8 chance of becoming 1.More precisely, a random number between 0 ~ 255 is generated, it becomes 8 if it is less than 7, then it is divided by 8, discarding the remainder. See the function to generate the index of the lucky slot machine in the disassembly. Then, whenever the player plays on a slot machine, the number is compared with the index of that slot machine (0 ~ 35) plus one. If it matches, the chance of playing in mode super is set to 5/256 (~2.0%), and otherwise it is set to 2/256 (~0.8%).The function to set the chance of mode superEffectively, this means that every time the player enters the game corner, there is usually a 'lucky slot machine' among the machines with index 0 ~ 30. The lucky slot machine is most likely (15/256, ~5.9%) to be the one with index 0 (the rightmost, bottommost one), and cannot be the ones with index 31 ~ 35 (the bottom five in the leftmost column). The other ones all have a probability of 1/32 (~3.1%) to be lucky, including the ones occupied by an NPC, or otherwise unplayable ('Out of order', 'Out to lunch', or 'Someone's keys'). Finally, there is a tiny chance (1/256, ~0.4%) that the lucky slot machine is the nonexistent slot machine -1.
Reel stopping
The mode of the slot machine comes into play when the player presses the A button to stop a reel, as the reel may 'slip' after the A press depending on its position. The exact logic for stopping the reel also depends on which reel the player is stopping. Internally, the first two reels are programmed to slip 4 times unless a condition is met earlier, while the third reel can either slip up to 4 times to help the player get a match, or slip any number of times to prevent a match.First reel
In mode bad or mode good, the condition for the first reel to stop early is that the middle symbol is not a cherry. Since there are no two consecutive cherry symbols (in fact, there are no consecutive same symbols on any reel), that means the first reel will slip at most once.In mode super, the condition for the first reel to stop early is that any of the three symbols showing is a symbol with an internal value less than that of the seven symbol. Since the seven symbol has the lowest internal value of all symbols, this condition is in fact never satisfied, and the first reel will always slip by 4 positions.The condition for the first reel to stop early
Second reel
In mode bad or mode good, the condition for the second reel to stop early is that there must be a 'potential match' on the first two reels, i.e. two of the same symbols that may form a line if the third reel stops in a good position. The player's bet is not considered; for example, a diagonal potential match counts even if the player only betted 1 or 2 coins.In mode super, the condition for the second reel to stop early is that the potential match found is of either sevens or bars,
Pokemon Yellow Slot Machine
or that there is no potential match and the bottom symbol on the second reel is seven or bar.The condition for the second reel to stop earlyThird reel
In mode bad or mode good, the third reel will always slip to prevent a disallowed match, i.e. any match in mode bad, or a match of sevens or bars in mode good. There is no upper limit for the distance the reel has to advance this way; as an extreme example, hacking the game so that the reels contain all sevens will likely cause the game to softlock.The piece of code run after finding a matchIn addition, in mode good or mode super, the reel will slip up to 4 times if no match is found. This is not counting the number of slips done to skip disallowed seven or bar matches in mode good, so the total number of slips may exceed 4.The piece of code run after not finding a match
Notice that, due to the design of the reels, there can never be more than one match at any time.
Oddities
On the spin where the player enters the lucky streak, the actual mode stays as it is on the previous spin, which can be either mode bad or mode good (the mode is initialized to mode bad at the beginning of a sessionAll the memory addresses from $CD3D (wStoppingWhichSlotMachineWheel) to $CD50 (wSlotMachineBet) are zeroed, which included the mode flag at $CD4C.). If the mode happens to be mode good and the player wins, it will still count towards the 60 wins to end the lucky streak. There is a line of code to immediately end the lucky streak if the player wins a reward of 300 coins, but this seems to be impossible, because the lucky streak is mutually exclusive with mode super, and mode good doesn't allow matches of sevens. The probability distribution of the lucky slot machine is weird in multiple aspects. The fact that one machine is more likely to be lucky and some others have no chance might be intended, but the fact that it can be the nonexistent slot machine -1 seems certainly an off-by-one error. The fact that the first reel's early stop condition in mode super is never satisfied is most likely a bug. Presumably, the intention is that the reel should stop if a seven symbol is showing, but the developers mistakenly wrotejr c
instead of jr z
. The second reel's early stop condition in mode super is weird in two aspects. The 'bottom symbol on the second reel' condition seems like an accidental use of leftover variable, although it may also be intended since there are two instructions specifically making it the bottom symbolThese two dec de
instructions make de
point to the bottom symbol of the second reel instead of the top symbol, and they seem to serve no other purpose.