Making your own cheats (NES)

From ROM Detectives Wiki
Jump to navigation Jump to search

If you haven't already, read the Beginner's guide (NES). It will familiarize you with the cheat menu and how memory values work. Once you've used a couple of cheats, you're ready to start making your own!

There are two ways of making your own cheats, and I'll discuss the easy way first.

The Easy Way

The easy way of finding cheats in an NES game involves using the built in cheating dialog. It can quickly find the values you're looking for.

Known Values

Known values are the easiest cheats to make because you already know what you're looking for. In this example, we'll find the lives for the game Super C.

1.) Open up FCEUX, load Super C, and begin a 1 player game.
3.) Let your player fall from the chopper onto the ground, don't move him yet.
3.) On the menu, click "Tools" and "Cheats".
4.) In the cheat menu, click "Reset". This will fill the list with every memory value in the game.


5.) Now, we need to narrow this list down. You have two player medals in reserve, so first, put the number of lives you have into the "Known Value:" text box.
6.) Notice that the value is in hex. If you're not familiar with hex values, read the Hexadecimal Guide.
7.) Click the "Known Value:" button and your list will drop down to around 17 possibilities.


8.) Now go ahead and purposely kill yourself.
9.) After a new player falls to the ground, pause the emulator by clicking in the Menu -> NES -> Game Speed -> Pause. To resume your game, simply click on Pause again. You can also press the Pause button on the keyboard.
10.) Now, on the cheat window, enter your new lives, "1", into the "Known Value:" text box and click the button.
11.) You should now see only one value left in the list memory value 0053.
12.) Now that you know where player one's lives are stored, go ahead and make a cheat for it (as described in the Beginner's guide (NES)).


And there you have it! A simple, but game-altering cheat!

I'd like to remind you that sometimes numbers in the NES games aren't exactly what they seem. When you begin Super C, it tells you that you have 3 guys, but when the game begins, you are using one guy, so you have 2 in reserve. That's why we searched for 2 lives, not 3. As you go about making new cheats for various games, you may need to try searching on values one lower or higher than what is displayed on the screen.

Unknown Values

Searching for values that you already know is easy, but what about when you don't know the value you're searching for? Sometimes games display values as power bars instead of numbers. Take the classic game Mega Man (NES) for example. In Mega Man, it's hard to tell exactly how many hit point you have. This section will help you find the more ambiguous values.

1.) Start up FCEUX, load the Mega Man ROM, start a game, and go into Cut Man's level.
2.) Open the cheat menu and click "Reset" to start a new cheat.
3.) Head left, and get hit by the floating enemy, then immediately pause the game.
4.) On the cheat menu, click the "Less Than" button. This means that the value we're looking for has been decreased.
5.) Resume the game, get hit again, pause, and click the "Less Than" button again. Each time you do this, the list of possibilities should decrease.
6.) Once Mega Man dies, and the level resets you with full power, click the "Greater Than" button, since your hit points are now greater than they used to be.
7.) This should leave only one memory location left in the list 006A with a value of 1C.
8.) Make a new cheat named "Infinite Hit Points". The memory address is "006A" and the "Value" is "1C".

Now you have infinite hit points in Mega Man!

The Hard Way

What if you have no idea what value is associated with the memory you're looking for? What if you don't even know if the value goes up or down? For example, getting a new weapon in Super C (NES) doesn't really increase or decrease any obvious stats. You can play with the cheat dialog all you want, but it will be difficult to find out where the gun is stored in memory.

Well, the hard way to find these values is to look at all of the NES memory in hex form and watch for changes to occur.

1.) Launch FCEUX, load Super C, start a 1 player game.
2.) Work your way into the game and shoot down the first power up (the machine gun), and stand next to it.
3.) Make sure there aren't any bad guys around, and save your game by pressing the letter "I".
4.) In the menu click "Debug" then "Hex Editor", and the Hex Editor dialog will pop up. Notice that values set with cheats will show up blue.


5.) Click back on the game window and load your game by pressing "P".
6.) Now, keep your eyes on the Hex Editor and pick up the power up.
7.) You're looking for a value that stays the same when nothing happens, but the moment you pick up the machine gun power up, it changes value to something else and stays that way.
8.) You probably won't see it at first, so reload the game to before you got the gun by pressing 'P', and get it again. Do this over and over again, while keeping your eyes on the Hex Editor.
9.) You may notice that every time you pick up the machine gun power up, memory address 00B8 changes from 00 to 01.
10.) To test whether this is really the gun, try changing the value to 02 and shooting.


11.) If done correctly, you'll now have the spray gun! Switch the value to 03 and you'll start shooting the laser!
12.) Now that you know where the gun is stored, you can experiment with it. Value 04 gives you the flame thrower, but value 05 gives you something really special, the charged up flame thrower!
13.) Value 06 lets you shoot the mini flames that the charged up flame thrower explodes into, and 07 will cause the game to crash.
14.) If you keep experimenting with power ups you'll find that rapid fire adds 80 to the value, regardless of what it is.
15.) Now you know how the guns work. So, you can add a cheat to let you always have a rapid fire spray gun by setting the address "00B8" to "82".

If you do this with the second player, you'll notice that player two's gun is stored right next to player one, at 00B9. It's a common practice to store player 1 and player 2 values next to each other.

There are several pages of data to look through in the hex editor. You won't always be lucky and find the value on the first page, more often you'll have to look through the first eight pages. However, most values that you're looking for will be found from 0000-07FF. Don't waste your time looking through memory addresses from 0800-1FFF, check the Unused Memory guide to see why.

As you play with the hex editor, you'll discover that, while it's harder to find values than the cheat menu, it offers a lot more flexibility for finding and editing different memory values.

What Next?

Now that you have a pretty good idea how to make cheats, consider trying to fulfill one of the cheat requests, or adding one of the more common cheat ideas to a new or existing game.