How were codes for Game Genie/Gameshark/Action Replay found/created back in the day?

1.25K views

How were codes for Game Genie/Gameshark/Action Replay found/created back in the day?

In: Technology

Developers make the cheats.

Cheat codes were built into the game to make development testing easier. The codes to activate the cheats do not get deleted and instead were posted for public use or to be sold on something like gameshark.

The other answer is talking about something different, actual cheat codes.

Most game genie devices that I’m aware of don’t do that. They alter memory addresses.

The console stores everything in memory. Ammo, weapon, lives, points. The game genie forces the value to whatever it wants.

As for how it’s found (I e. How to make the code), trial and error.

You can take a dump of everything currently in memory. It will be in hex, it won’t be in English and won’t make sense to a naked eye.
Then lose a life and take another dump. Compare what has changed. Even if it doesn’t make sense reading on its own, your can still spot the difference

Do it enough and maybe you learn that line 4, character 6 is where the life value is stored.

The “code” can then be made as an instruction of what location in memory to edit and what value to insert.

The Game Genie literally manipulated in-game code, so “finding” the codes was a matter of finding lines of code relating to in-game “variables” (I’m currently failing at finding the word I’m looking for here) that possess a number value, and manipulating that number would manipulate things like HP, MP, money and item count.

These devices could look at all of the numbers stored in the memory of the console. To make a cheat work, you would have to find a memory value that matters (like the player’s HP or number of lives or whatever) and tell the Game Genie what value you want it to have.

To make it more clear, let’s look at an example card for Final Fantasy IX using the GameShark. Here’s the code:

8008B7B0 FFFF

The first portion “8008B7B0” is the memory address that the GameShark is modifying. Like 1234 Sycamore St. is the address where Steve Smith lives. For this code it’s the place where the amount of money the player has is stored. The second portion “FFFF” is just the largest number that can be stuck in that memory address. It’s hexadecimal for 65,535. So the GameShark in this case is forcing the player’s money to always be 65,535 by screwing with the console’s memory.

So how is this code found? By checking all the different numbers in the different memory addresses in the console until you found the address you want. A lot of these devices could do this on the fly. Many GameShark models had a little button that you pushed and it would pause the game and do this. So it pauses the game, then you tell it to search for a number. If I’m looking for player money in FFIX and I had 125 at that point in the game, I could punch in 125. Then it tells you all the different memory addresses that currently have that value. To narrow it down, you could earn or spend a little money and do the process again until you keep getting the same memory address show up in your search results repeatedly. That’s your new cheat code: 8008B7B0 for the memory address and then whatever number after that that you want.

Old cheat codes like `Up Up B A B A Left Right` were actually programmed in specifically by the devs. Action-Replay/Gecko/Gameshark codes were basically editing the game’s code itself as it was running.

(WARNING: the following is more ELI20)

In computers, numbers like health, ammo, player position, etc. are all stored in memory addresses. You can think of this as a “slot number,” and the data stored in that slot.

EX: `0001 0150` would store the number `150` in memory slot `#1`

Except in reality there are 2 differences. First difference is that numbers are written in something called “Hexadecimal,” which instead of 0-9, we use 0-9 *and* A-F (this means larger numbers use less space); Second we can also store system instructions as well as numbers (the actual “number,” that represents an instruction is arbitrary and changes from system to system).

EX: Lets say the instruction number for “store number,” on the console is 122. In Hex 122 would be `7A`. So if by using specialized tools we figured out the player’s money is stored in address `0F2A` we could write the following:

007A 270F //store_number | 9999 (270F is 9999 in Hex)
0F2A 0000 //in address 3882 (0F2A in Hex) | 0000 is just a “blank space.”

On our imaginary console this would set the player’s money to 9999.

If you’re interested in actually doing this, I’d recommend using an emulator on PC and looking up “How to write your own [AR codes](https://www.codedonut.com/ds-hacking/action-replay/make-action-replay-codes/),” (or [Gecko codes for Wii](https://mkwii.com/showthread.php?tid=830)). It’s actually super easy, and you’ll learn a LOT about how games and computers work.