"Stronger Weapons" Code Making Guide

Tony Hedstrom
How To Make "Stronger Weapons" Type Game Genie Codes

Version 1.0 June 07, 2011


Written by Tony Hedstrom [email protected]

http://www.angelfire.com/games2/codehut/

http://codehut.gshi.org/ (no ads on this site)



This is a quick guide on how to make Game Genie codes that make your weapons
stronger (ie. inflict more damage). I'll explain how to make individual
weapons stronger, and also how to make ALL weapons stronger (usually with
a single code). Many of these codes are adjustable, so you can make the
weapons as strong as you want (up to a point).

I'll be using Zelda 2 (NES) as an example, but the method applies to other
games and systems as well. This guide is written for people that have at
least a basic understanding of 6502 assembly. I'm using fceuxdsp for my
emulator/debugger.


Part 1 (How to make individual weapons stronger)...

Start off by finding a RAM address for an enemies health. In our Zelda 2
example, the RAM address for one of the blue blob things is $00C5. Set a
'Write' breakpoint for $00C5. Hit the blue blob with your level 1 sword and
this is where the debugger snaps:

$E732:F9 6C E6 SBC $E66C,Y @ $E66D = #$02 (Y = 01)
$E735:95 C2 STA $C2,X @ $00C5 = #$03 (X = 03)

Codes that make individual weapons stronger are pretty easy. In the assembly
above, we can see that the amount of damage that is going to be subtracted
from the enemies health is 02, and it is getting that value from CPU address
$E66C indexed with Y (Y = 01). So $E66C + 01 = $E66D. If we scroll
backwards a little in the debugger, this is what we see at $E66D:

$E66D:02 UNDEFINED
$E66E:03 UNDEFINED
$E66F:04 UNDEFINED
$E670:06 09 ASL $0009 = #$50
$E672:0C UNDEFINED
$E673:12 UNDEFINED
$E674:18

These are all the values for the 8 different levels of swords. Level 1 sword
does 02 damage, level 2 sword does 03 damage, etc. Simple enough. You can
adjust how much damage you want from 00 to 255. Some sample Game Genie codes:
Level 1 sword causes 255 damage = E66D?02:FF = NYVVITZE. Level 2 sword causes
100 damage = E66E?03:64 = GTVVTTLA. And so on. This method should work on lots
of games.



Part 2 (How to make all weapons stronger)...

Making individual weapons stronger is nice, but why not go a step further and
make ALL the weapons stronger with a single code. Here's how...

Using Zelda 2 again, with the same assembly as above...

$E732:F9 6C E6 SBC $E66C,Y @ $E66D = #$02 (Y = 01)
$E735:95 C2 STA $C2,X @ $00C5 = #$03 (X = 03)

We know that the game is getting the sword damage values from CPU addresses
$E66D through $E674 (depending on your sword level). And we know that it's
using a SBC (subtract with carry) at CPU address $E66C indexed with Y (where Y
is your sword level). If we look at CPU address $E66C, this is what we'll see:

$E66A:4C 71 E3 JMP $E371

It's a Jump instruction, but we really don't care what it is. We're just
interested in the value at address $E66C (which is E3). All we have to do
to make it so that all our levels of swords have E3 damage (227) is simply
change the SBC (subtract with carry) instruction so that it's NOT indexed
with Y. That way, it ignores Y and goes straight to $E66C and gets the value
there (E3) no matter which sword you're using.

If you check your 6502 instructions, you'll find that $ED is the replacement
instruction we're looking for, so our Game Genie code would be: E732?F9:ED =
STUTZNON. All levels of swords will do 227 damage.

Obviously, not every game is going to work this way, but this will give you
one idea on how to do it.


Happy Hacking.

Tony H.