Pokemon Crystal Broken Slot Machine

All the slot machines have their odds randomly generated each play. As such, there is no single slot machine that is good for every player all the time. Generation 3: Generation 3 includes two sets of games: ruby/sapphire/emerald and fire red/leaf green. For Ruby/Sapphire/Emerald, the slots.

Mail has been fixed; you should now be able to confirm your e-mail address, watch pages, and the like.
Please report any issues on Discord.
Pokémon HeartGold Version and SoulSilver Version

Also known as: Pocket Monsters HeartGold and SoulSilver (JP/KR), literally “Pokémon Gold Version HeartGold and Silver Version SoulSilver” in all other languages
Developer: Game Freak
Publisher: Nintendo
Platform: Nintendo DS
Released in JP: September 12, 2009
Released in US: March 14, 2010
Released in EU: March 26, 2010
Released in AU: March 25, 2010
Released in KR: February 4, 2010

This game has unused areas.
This game has unused graphics.
This game has unused models.
This game has unused items.
This game has unused abilities.
This game has debugging material.
This game has regional differences.
This game has anti-piracy features.

This game has a notes page
This article is a work in progress.
...Well, all the articles here are, in a way. But this one moreso, and the article may contain incomplete information and editor's notes.

Pokémon HeartGold and SoulSilver Versions are remakes of the original Pokémon Gold and Silver.

  • 3Leftover Content
  • 5Unused Items
  • 11Unobtainable Shiny Pokémon
  • 17Regional Differences

Subpages

Unused Maps
Slot Machines were too good for international players.
Unused Graphics
More leftovers than a Snorlax.

Moves 468-470

When taught to a Pokémon, data about unused attacks 468, 469 and 470 does not necessarily freeze the game. Such attacks are special, have a power and accuracy of 100 and a PP of 10. Other invalid attacks do not give this data and simply freeze the game as soon as they are recalled, perhaps suggesting that the move database was once intended to end at 470 as a nice round figure rather than 467 (Shadow Force).

Leftover Content

To do:
The sprites of the heroes from Platinum still exist in the game, since cheat codes allow them to appear. This whole section should be revised to accurately specify what Platinum content is really missing. In addition, the /pbr/ directory has a lot of Diamond/Pearl/Platinum data. There may be more files of interest in there.

Files originally found in Pokémon Diamond and Pearl have found their way into HeartGold and SoulSilver.

Item Bag

The sprites for the Diamond/Pearl male hero's item pocket selection's upper screen remain. Missing are the female hero's purse and Platinum's white bags.

Overworld Sprites

Several overworld sprites were not reintroduced in HeartGold and SoulSilver but still exist within the game, such as the associated data for the playable male and female characters (as they appeared in Diamond and Pearl) including their 'berry planting' poses and Gym Leaders (with the exception of Maylene and Crasher Wake, who appear in Celadon and Johto Route 47, respectively).

Slot Machines

Most graphics from the Diamond/Pearl slots game remain, including the Clefairy bonus mode. The slots had a design overhaul in Japan, but were replaced by a Voltorb Flip minigame for everyone else.

The Underground

There are quite a few files related to the huge underground complex found in the three earlier Pokémon DS games. Most (if not all) of the 2D graphics remain, including the traps, radar pinging, and the mining mini-game. It's a possibility that it was going to be remade, being that the walking sprites for both the Diamond/Pearl heroes exist with the other underground files; Platinum's heroes are missing. There is also an entire map header dedicated to the Underground, however, the map matrix responsible for it just reloads the entire Johto and Kanto overworlds.

Audio Data

The sound file (sound_data.sdat) from Diamond/Pearl is still in the game's files, completely unused.

Pokétch Graphics

Pokétch graphics used in Platinum are all still in the game's files, including the two unused graphics from Diamond and Pearl.

Lost Debug Mode

Nearly 2,000 text strings can be found talking about changing values for unknown debugging features. However, the debug menu code is probably lost. This debug mode is apparently based on the one in Platinum, containing references to events such as the Distortion World; it seems more of it survives than in that game.

To see the debug mode strings, please look at the Notes page.

Unused Items

Photo Album

'A nice photo album for storing all the photos taken along your adventure.'

In the final version, photos are stored on your PC instead.

Slowpoke Tail

'A very tasty tail of something. It sells for a high price.'

Existed in the original Gold/Silver, it has been upgraded to a key item but ends up unused.

Lock Capsule

To do:
What is the “correct” configuration?

'A sturdy Capsule that can only be opened with a special key.'

This unreleased event item, intended to be transferred to Black and White to unlock an event there, can be added to the Bag through hacking. Since its only intended purpose is to be transferred to another game, it does absolutely nothing in HeartGold and SoulSilver. However, if the Lock Capsule is obtained by a correctly configured Mystery Gift, then an option to view the Lock Capsule's status will be added to the Mystery Gift menu.

The Lock Capsule can't be found by the Relocator unless this option is unlocked, either – presumably an anti-cheating measure.

Blank Item Data

Blank item data occupying 21 identifiers exists between identifiers 0x0070 (Griseous Orb) and 0x0087 (Adamant Orb). These are perfectly formatted items which do not crash the game, unlike invalid items. They use the error handler '???' as a name and a ? symbol as the picture, suggesting that they may have once been items from Diamond/Pearl when they were still in development.

Unused hex values

To do:
Find out more items and list them and their properties

There are many hex values that go unused and have the same data as the Blank Item Data. It appears that some glitch items above 0x0F00 have similar sprites of already existing items but have a different colour palette. They don't seem to be usable but may possibly connected to other data like map data. In earlier generations, performing an item underflow glitch and swapping some of the items under the cancel button seem to change up the game concluding that the items are connected to other data of the game. It is currently unknown if glitch items in gen 4 connect with other game data.

Unused Wild Held Item Data

Some Pokémon when found in the wild has a chance of holding an item. But several Pokémon can only obtained via evolution or other means, so catching a Pokémon with these items is impossible.

#PokémonHeld ItemsNote
026Raichu(5%) Oran Berry
036Clefable(5%) Moon Stone (50%) Leppa Berry
037Vulpix(50%) Rawst BerryAvailable in Soul Silver
038Ninetales(50%) Rawst Berry
052Meowth(5%) Quick ClawAvailable in Soul Silver
053Persian(5%) Quick ClawAvailable in Soul Silver
056Mankey(5%) Payapa BerryAvailable in Heart Gold
057Primeape(5%) Payapa BerryAvailable in Heart Gold
058Growlithe(100%) Rawst BerryAvailable in Heart Gold
059Arcanine(100%) Rawst Berry
062Poliwrath(5%) King's Rock
065Alakazam(5%) TwistedSpoon
075Golem(5%) Everstone Stone
091Cloyster(5%) Big Pearl (50%) Pearl
110Weezing(5%) Smoke Ball
121Starmie(5%) Star Piece (50%) Stardust
149Dragonite(5%) Dragon Scale
151Mew(100%) Lum Berry
172Pichu(5%) Oran Berry
173Clefa(5%) Moon Stone (50%) Leppa Berry
186Politoed(5%) King's Rock
199Slowking(5%) King's Rock
230Kingdra(5%) Dragon Scale
231Phanpy(5%) Passho BerryAvailable in Heart Gold
232Donphan(5%) Passho BerryAvailable in Heart Gold
242Blissey(5%) Lucky Egg (50%) Oval Stone
251Celebi(100%) Lum Berry
262Mightyena(5%) Pecha Berry
277Swellow(5%) Charti Berry
286Breloom(5%) Kebia Berry
294Loudred(5%) Chesto Berry
295Exploud(5%) Chesto Berry
297Hariyama(5%) King's Rock
300Skitty(5%) Leppa Berry
301Delcatty(5%) Leppa Berry
303Mawile(5%) Hard RockAvailable in Soul Silver
306Aggron(5%) Hard Rock
315Roselia(5%) Poison Barb
316Gulpin(5%) Big PearlAvailable in Soul Silver
317Swalot(5%) Big Pearl
318Carvanha(5%) Deep Sea Tooth
319Sharpedo(5%) Deep Sea Tooth
323Camerupt(100%) Rawst Berry
326Grumpig(5%) Tenga Berry
332Cacturne(5%) Sticky Barb
345Lileep(5%) Big Root
346Cradily(5%) Big Root
351Castform(100%) Mystical Water
352Kecleon(5%) Persim Berry
362Glalie(5%) Babiri Berry
367Huntail(5%) DeepSeaTooth
368Gorebyss(5%) DeepSeaScale
372Shelgon(5%) Dragon Fang
373Salamence(5%) Dragon Fang
374Beldum(5%) Metal Coat
375Metang(5%) Metal Coat
376Metagross(5%) Metal Coat
385Jirachi(100%) Star Piece
397Staravia(5%) Yache Berry
398Staraptor(5%) Yache Berry
400Bibarel(5%) Sitrus Berry (50%) Oran Berry
407Roserade(5%) Poison Barb
413Wormadam(5%) Silver Powder
414Mothim(5%) Silver Powder
416Vespiquen(5%) Poison Barb
419Floatzel(5%) Wacan Berry
421Cherrim(5%) Miracle Seed
428Lopunny(5%) Chople Berry
431Glameow(5%) Cheri Berry
432Purugly(5%) Cheri Berry
433Stunky(5%) Pecha Berry
434Skuntank(5%) Pecha Berry
437Bronzong(5%) Metal Coat
439Mime Jr.(5%) Leppa Berry
440Happiny(5%) Lucky Punch (50%) Oval Stone
444Gabite(5%) Haban Berry
445Garchomp(5%) Haban Berry
446Munchlax(100%) Leftovers
452Drapion(5%) Poison Barb
454Toxicroak(5%) Black Sludge
456Finneon(5%) Rindo Berry
457Lumineon(5%) Rindo Berry
459Snover(5%) Never-Melt Ice
460Abomasnow(5%) Never-Melt Ice
461Weavile(5%) Quick Claw (50%) Grip Claw
462Magnezone(5%) Metal Coat
463Lickilicky(5%) Lagging Tail
466Electivire(5%) Electirizer
467Magmortar(5%) Magmarizer
469Yanmega(5%) Wide Lens
476Probopass(5%) Hard Stone
477Dusknoir(5%) Kasib Berry
478Froslass(5%) Babiri Berry
492Shaymin(100%) Lum Berry

Route 23

Route 23, the huge route on which Victory Road is situated in Pokémon Red/Blue, Yellow, and FireRed/LeafGreen right after the Pokémon League Front Gate on Route 22, is unceremoniously replaced by the Pokémon League Reception Gate in both the original Pokémon Gold/Silver, Crystal, and HeartGold/SoulSilver. However, a small stretch leading from the northern exit of Victory Road to the Indigo Plateau's front door is still identified within Gold/Silver/Crystal as 'Route 23'; in HeartGold and SoulSilver, this stretch is identified as Indigo Plateau.

Nonetheless, the location header for Route 23 is present in HeartGold and SoulSilver.

Unused Text

To do:
Find more and put them here.

There are unused text strings related to the unused Photo Album key item.

Sinjoh Ruins Return Trip

As is well known, the Arceus distributed at Japanese movie theatres and at Toys 'R' Us can enable the player to enter an area called the Sinjoh Ruins and choose between a Level 1 Dialga, Palkia, or Giratina, all holding their signature items.

What is less well known is that the unused Hall of Origin event Arceus within Diamond, Pearl, and Platinum can, if obtained through a hacked Azure Flute or a warp to the Hall, enable a second trip to the Sinjoh Ruins, where the Hiker in the cabin has some different dialog and it is possible to choose one of the dragons that you did not choose the first time (complete with the really creepy cutscene). There is no way to obtain the last dragon whatsoever.

The Hiker in the cabin's special return-trip dialogue:

Arceus ???-Type

Arceus' ???-type form from previous games makes its final appearance here, as Black/White would take out the ???-type entirely.

Unobtainable Shiny Pokémon

For the sake of consistency, every Pokémon in every Pokémon game is given a Shiny variant. Most Shiny Pokémon have been obtainable through random chance encounters or event distributions, including most Legendary Pokémon. However, a few Pokémon cannot be obtained in this form without hacking, and as a consequence, normal players would never be able to see their Shiny coloration.

Arceus

Arceus has a Shiny palette for each of its 18 forms, including the unused ???-type (see above). However, because the only way to obtain it legitimately was through distributions, the Shiny version of Arceus was left unobtainable through normal means. Shiny Arceus was later made available as a distribution via serial code in Omega Ruby and Alpha Sapphire with the purchase of tickets to the 18th Pokémon movie.

Spiky-eared Pichu

The Spiky-eared Pichu from the special Ilex Forest event (unlocked via the Shiny Pichu distribution) has a Shiny palette as well. However, it cannot be obtained as Shiny from the event.

Head Smash Nosepass

Nosepass gained the ability to learn Head Smash as an egg move in these games. Normally, that wouldn't be notable, because everyone and their mother gained the ability to learn Head Smash as an egg move in these games.

Except Nosepass can't breed with anything that learns Head Smash, making the move unobtainable. Oops!

The egg move was removed in Pokémon Black and White and remains unavailable as of Pokémon Ultra Sun and Ultra Moon, despite that an Aegislash or Sudowoodo would be able to pass down the move.

Anti-Piracy

If the game detects it is being played on a flash card or emulator, it will freeze at the start of a battle with the player's Poké Balls constantly spinning. Most emulators are able to avoid triggering this.

Unused Textures

To do:
There are models, as mentioned below, that use the unused gym texture. I need to get them appearing in-game and get screenshots.

There is an unused texture within the 41st tileset in the game, which simply spells 'YoBi'. When translated, it simply means 'preliminary'.

A texture with the word 'gym' on it. It's a placeholder graphic for a placeholder model.

Unused 3D Models

There are unused 3D models for both Dialga and Palkia from the title screen of Diamond & Pearl.

Obsolete References to Gold/Silver/Crystal Features

To do:
There are likely more obsolete references in the game; hunting them all down may be quite a task.

There are several references in the game's dialog to features that were present in the original Gold/Silver/Crystal, but are either no longer present or have been altered in such a way that the references are no longer relevant.

  • Kurt in Azalea Town still refers to 'Poké Ball' in the singular form in most of his dialogue. In Gold/Silver, he would only turn one Apricorn at a time into a Poké Ball for the player, whereas in Crystal and HeartGold/SoulSilver the player can give him multiple Apricorns at a time and receive multiple Poké Balls, making his speech slightly awkward. This is probably just a typo.
  • In the English versions, the poster on the first floor of the Goldenrod Radio Tower advertising the 'Lucky Channel' remains. This was the radio show in Gold/Silver/Crystal that would broadcast lottery numbers which, if they matched the Trainer ID of any of the player's Pokémon, would allow them to win prizes. The show is no longer broadcasted in HeartGold/SoulSilver, having been replaced by Felicity the lottery attendant behind the counter at the Radio Tower, who tells the player the daily lotto number when spoken to. In the Japanese versions, it refers to the show as だいこうひょうポケモンくじ (The Super-Popular Pokémon Lottery) instead of ラッキーチャンネル as in the originals, indicating that this could have been a new yet scrapped show instead.

Regional Differences

Game Corners

To do:
Maybe Voltorb Flip exists in the Japanese ROM too? And check the map IDs to clear up any doubts.

In all non-Japanese versions of the game, the traditional slot machines were replaced with a Minesweeper/Sudoku hybrid called Voltorb Flip. This was due to then-recent European legislation which automatically prescribes a 12+ rating to any game featuring interactive gambling content. While this same law previously affected Platinum as well, it was only in the European versions of the game. Although the original Game Corner maps from the Japanese version of HeartGold and SoulSilver are no longer accessible in regular gameplay, they still remain within the internal data: the Goldenrod one has a hexadecimal identifier of 0x00B7 and the Celadon one is 0x017D. Read more here.

In the Japanese version, the modified Game Corner maps also exist without events or warps. Their identifiers are 0x0218 (Goldenrod) and 0x0219 (Celadon).

Sage

In the Korean versions, the sprite for Sages was seemingly altered for religious reasons: the prayer beads were removed, the robes were slightly recolored, and a red robe was added on their left shoulder. Their title was also changed to 수행자 (Ascetic); in Gold and Silver, it was 중 (Monk).

GTS Notifications

To do:
What about the Korean version?

In the Japanese version, players could receive e-mail messages stating when a trade on the GTS was complete. In the North American and European versions, players could only receive notifications through Wii Messaging. This change also applies to Pokémon Platinum.


(Source: Bulbapedia)
The Pokémon series
Generation IRed, Green, & Blue • Yellow
Hey You, Pikachu! • Trading Card Game • Pinball • Picross
Snap (Demo) • Stadium (Japan) • Stadium (International) • Puzzle League • PokéROM
Generation IIGold & Silver (Prototypes) • Crystal (Prototypes)
Card GB2 • Puzzle Challenge • Pinball Mini • Stadium 2 (International)
Suuji o Tsukamaeyou!
Generation IIIRuby & Sapphire (German Ruby Debug Version) • FireRed & LeafGreen (Prototype) • Emerald (Prototype)
Mystery Dungeon: Red Rescue Team & Blue Rescue Team
Pinball: Ruby & Sapphire • Channel • Colosseum • XD • Trozei! • Ranger • Dash
Masters Arena • Team Turbo • Poké Ball Launcher
Generation IVDiamond & Pearl (Prototypes) • Platinum • HeartGold & SoulSilver • Battle Revolution • My Pokémon Ranch
Mystery Dungeon: Explorers of Darkness & Time • Mystery Dungeon: Explorers of Sky • Ranger: Shadows of Almia • Ranger: Guardian Signs
PokéPark Wii: Pikachu's Adventure • Rumble
Generation VBlack & White • Black 2 & White 2
Trading Card Game Online • Learn with Pokémon: Typing Adventure • Conquest • Mystery Dungeon: Gates to Infinity
Pokédex 3D • Rumble U
Generation VIX & Y • Omega Ruby & Alpha Sapphire
Bank & Transporter • Shuffle • Super Mystery Dungeon
Pokkén Tournament (Wii U) • GO
Generation VIISun & Moon • Ultra Sun & Ultra Moon • Let's Go, Pikachu! & Let's Go, Eevee!
Detective Pikachu • Magikarp Jump
Generation VIIISword & Shield (Prototypes)
HOME (iOS/Android) • Mystery Dungeon: Rescue Team DX (Prototype)
Retrieved from 'https://tcrf.net/index.php?title=Pokémon_HeartGold_and_SoulSilver&oldid=840264'

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

Pokemon

(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:

Pokemon Center Slot Machine

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

Pokemon Crystal Broken Slot Machine Jackpots

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.)

Pokemon Crystal Slots

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:

Pokemon crystal slot machine

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:

  • 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

Pokemon Crystal Broken Slot Machine Machines

(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

Pokemon Slot Machine Trick

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: