Pokemon Crystal Slot Machines

'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 yet
  • wBattleMonLevel gets overwritten after it's initialized by FindFirstAliveMonAndStartBattle
  • 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:

Slot
  • maps/FastShipCabins_SE_SSE_CaptainsCabin.asm: TrainerPsychicRodney should use SPRITE_YOUNGSTER, not SPRITE_SUPER_NERD
  • maps/LakeOfRage.asm: TrainerFisherAndre and TrainerFisherRaymond should use PAL_NPC_GREEN, not PAL_NPC_BLUE
  • maps/Route13.asm: TrainerHikerKenny should use PAL_NPC_BROWN, not PAL_NPC_RED
  • maps/Route44.asm: TrainerBirdKeeperVance1 should use PAL_NPC_BLUE, not PAL_NPC_GREEN
  • maps/Route44.asm: TrainerPokemaniacZach should use PAL_NPC_BLUE, not PAL_NPC_GREEN
  • maps/UnionCaveB2F.asm: TrainerCooltrainermNick should use SPRITE_COOLTRAINER_M, not SPRITE_ROCKER
  • maps/FuchsiaPokecenter1F.asm: FuchsiaPokecenter1FNurseScript should use PAL_NPC_RED, not PAL_NPC_GREEN

Most of the NPCs in maps/NationalParkBugContest.asm and maps/Route36NationalParkGate.asm are also inconsistent with their trainers from other maps:

  • BugCatchingContestant1AScript and BugCatchingContestant1BScript: BUG_CATCHER DON from maps/Route30.asm should use SPRITE_BUG_CATCHER and PAL_NPC_BROWN, not SPRITE_YOUNGSTER and PAL_NPC_RED
  • BugCatchingContestant2AScript and BugCatchingContestant2BScript: BUG_CATCHER ED from maps/Route2.asm should use SPRITE_BUG_CATCHER and PAL_NPC_BROWN, not SPRITE_YOUNGSTER and PAL_NPC_GREEN
  • BugCatchingContestant3AScript and BugCatchingContestant3BScript: COOLTRAINERM NICK from maps/UnionCaveB2F.asm should use SPRITE_COOLTRAINER_M and PAL_NPC_RED, not SPRITE_ROCKER and PAL_NPC_BLUE
  • BugCatchingContestant4AScript and BugCatchingContestant4BScript: POKEFANM WILLIAM from maps/NationalPark.asm should use PAL_NPC_RED, not PAL_NPC_BROWN
  • BugCatchingContestant5AScript and BugCatchingContestant5BScript: BUG_CATCHER BENNY from maps/AzaleaGym.asm should use SPRITE_BUG_CATCHER and PAL_NPC_BROWN, not SPRITE_YOUNGSTER and PAL_NPC_RED
  • BugCatchingContestant7AScript and BugCatchingContestant7BScript: PICNICKER CINDY from maps/FuchsiaGym.asm should use PAL_NPC_GREEN, not PAL_NPC_BLUE
  • BugCatchingContestant8AScript and BugCatchingContestant8BScript: BUG_CATCHER JOSH from maps/AzaleaGym.asm should use SPRITE_BUG_CATCHER and PAL_NPC_BROWN, not SPRITE_YOUNGSTER and PAL_NPC_RED
  • BugCatchingContestant9AScript and BugCatchingContestant9BScript: YOUNGSTER SAMUEL from maps/Route34.asm should use PAL_NPC_BLUE, not PAL_NPC_GREEN

(Note that maps/Route8.asm has three BIKERs, 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

Pokemon Crystal Slot Machines

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:

Miscellaneous glitches of and
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)
Crystal
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 spin

The 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 super
Effectively, 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 early

Third 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 match
In 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 wrote jr 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.

Pokemon Crystal Slot Machine

. The 'sevens or bars' check is only for the first potential match found, in the order of 'bottom-bottom, bottom-middle, middle-middle, top-middle, top-top' (i.e. from bottom to top), which means a potential match of bars may be rerolled if it appears above a potential match of another symbol.

Pokemon Yellow Slots

External links

Analysis of how the slot machines in Pokémon Red, Blue, Yellow work by Crystal_:REDIRECT Template:YouTube

References

Categories