How Pokemon Crystal Cheat Codes Actually Work
I still remember the first time I tried to enter GameShark codes into Pokemon Crystal on my real GBA. The trick is that you can't just press pause mid-game and start typing codes in. You have to hold A + B + Select while the title screen is up, and even then the input buffer is finicky. If you miss it by a frame, you restart. Most people give up right there. The internal mechanism is straightforward: these codes intercept memory values at runtime and overwrite them. Money gets written to a specific RAM address each time you buy or sell something. The rare candy code changes the item counter value in your bag directly. When you save and reload, some codes persist because they're modifying persistent save data, while others only work during the current session. That's why your max money code might vanish after a reset.
Pokemon Crystal Cheat Codes
Here are the ones I actually use. I don't bother with most of the garbage floating around the internet. Max Money: GameShark: 81CA2450 FFFF
Action Replay: D0000040 81CA2450 FFFF This sets your money to 99,999. The address is persistent across saves, which is why it usually sticks around. The downside is that if you spend money through normal means and then reload, the game will cap it back to whatever you originally set. So if you set it to 99,999 and then spend 500, your money shows as 99,499 until you reload, at which point it snaps back to 99,999. Annoying if you're doing a legit playthrough alongside cheating. Auto-Win in Battle:
Get the Full Details

GameShark: 81CB8E70 0064 Action Replay: D0000040 81CB8E70 0064 Sets your HP to 100 in every battle. It doesn't instantly win, but you can't be knocked out. I use this when I'm catching Pokémon I don't want to waste Ultra Balls on. You can still faint if you manually trigger self-damage like from poison, which trips up a lot of people who think this is a complete invincibility hack. It's not. It just sets a floor.
Rare Candy Spam (Infinite): GameShark: 81CA244E 0063 Action Replay: D0000040 81CA244E 0063
This gives you 99 Rare Candies. The address changes after you use one, so it doesn't truly loop infinitely. What people mistake for infinite is that you can reuse the code repeatedly to reset the counter back to 99. I've seen guides claim it's unlimited, which is wrong. It's 99 and you manually refresh it. Unlock All Cities (Map Reveal): GameShark: 81CA01F0 00FF

This reveals the entire Johto map. You still need to physically travel to locations. It's useful if you're trying to visit a specific place without grinding through the whole route. I used this when I was testing a glitch run and needed to teleport between cities without dealing with the in-game travel restrictions. Free Items from Shop: GameShark: 81CA2450 0000
Combined with the max money code, this lets you buy anything without spending. The price is read from the shop's internal table, and since your money stays at 99,999, you effectively get everything for free. Some shops have hard caps on how many of an item you can carry though, so you can't stockpile indefinite quantities of Master Balls just because the code says you can afford them.
What Actually Goes Wrong
The most common issue I run into is code conflict. When you stack more than four or five GameShark codes, the console starts misbehaving. Not in a dramatic "the game crashes" way, but in a subtle "your money reads as 0" or "your party member's name is corrupted to garbage characters" way. This happens because the original GameShark hardware on GBAS has a limited code slot buffer, and the emulated versions on modern devices handle it differently depending on how they implement the cheat engine. Another problem I hit repeatedly: certain codes break after evolution. If you level up a Pokémon with the auto-win code active, sometimes the HP value gets locked to whatever evolution set it to rather than maintaining the floor. I discovered this the hard way when I was trying to catch a wild Mewtwo and my Legendary Catcher code stopped working mid-battle because I'd previously evolved another Pokémon. The workaround is to deactivate the code before evolving and reactivate it after. It's a two-step process that nobody mentions in the guides. If you're using an emulator instead of real hardware, there's a separate set of headaches. Desmume and No$GBA handle cheat codes differently. Desmume's cheat system is more forgiving but occasionally applies codes to the wrong memory offset. No$GBA is more accurate but the interface is clunky. I use Desmume for casual work and No$GBA when I need precision. Both require you to re-enter codes after every reset, unlike real hardware where they persist across power cycles once entered.

Where to Get the Codes
I don't host files myself. The most reliable source I've found is the Official Game Shark website's archives, which still has a dedicated Pokemon section. For Action Replay codes, the Cheat Code Database at www.cheatcc.com has a verified Pokemon Crystal section. Third-party ROM hack sites often recycle broken codes, so I skip those entirely. If a code hasn't been tested on real hardware, it probably won't work on yours either. The bottom line is that these codes work fine for single-session experimentation. They're not designed for legitimate long-term playthroughs. If you want a modified experience without code conflicts, speed hacks, or save corruption, a ROM hack is the cleaner route. The code injection method is fast to set up but degrades over time as you stack more cheats on top of each other.