The GameShark is a product developed by InterAct
Accessories, Inc. that fits between your Game Boy and the game cartridge.
It brings up a menu upon bootup that can be used to enter codes, find
codes, or blank the cartridge's memory.

Different versions of the GameShark have different levels of
functionality. Many old versions do not function on Game Boy Color, and
there have been some complaints with new versions as well. Many GameSharks
now come with the instruction that it is not to be used with the Pokémon
games. The GameShark actually works fine with Pokémon. This message is
included to prevent angry parents calling when their children accidentally
mess up their game.

This is not a technical reference for general GameShark questions. Help
with generic questions can be found at the official GameShark web site, or right here at
Azure's Sakaki
Tower.

**WARNING:** It is possible that the GameShark can glitch and erase
your game. This does not happen frequently, but it *can* happen. We
take no responsibility if you accidentally ruin your game, but we do our
best to make sure that the codes we offer here are safe.

A GameShark code is simply a method for writing data into RAM. For the
purposes of this document, a GameShark code consists of four parts:

01 XX LL HH

The 01 is constant among all codes discussed.
The XX is the numeric value that will be placed
into RAM and held there for as long as the GameShark switch (the switch on
the top, not the button) is in the "on" (leftmost) position. LL and HH refer to where in
RAM this value is placed. This number is actually swapped: the actual hex
position that the code goes into is HHLL.

As an example:

015477D1

This code will place the hex value 54 into
the RAM position D177 (also a hex value). Please
note that hexadecimal is just another way of writing a number, as
explained in the Hexadecimal section below.

Similar data is usually grouped together in memory. So it makes sense
that data like "HP for monster 1" is near data like "Special for monster
1" and that all of the "X for monster 1" data would be together (and right
next to the "X for monster 2" data).

The codes listed are for the monster in the first position in your
party, unless otherwise specified.

"Hex" is short for "hexadecimal". Hexadecimal is just a way of writing
numbers. The numbers you are familiar with are written in decimal, which
means "base ten". Hexadecimal means "base sixteen". Binary means "base
two".

If I want to write about twelve things, that quantity can be
represented by a 1 followed by a 2, the decimal number "12". The 1
signifies that there is one 10 of the things. The 2 signifies that there
are two 1s of the thing. Add them together and you get

1*(10) +
2*(1) =
12.

Let's use the decimal number 452 as another example:

4*(10*10) +
5*(10) +
2*(1) =
452.

Every time you move one position to the left, you could say that the
value contained is 10 times as significant as the previous value. When you
write down a number, you are actually writing a brief formula that must be
evaluated before the number is available. Before this position-based
system, only symbolic systems (like Roman numerals) were available.

Hexadecimal is based on the same premise, but the increasing powers are
of 16, not 10. Also, the value that is multiplied by that number can range
from 0-15 instead of 0-9. For the remainder of this document, I will write
"h" following any number that is written in hexadecimal. So the number
452h can be expanded as:

4*(16*16) +
5*(16) +
2*(1).

Evaluate this and you will find that the decimal equivalent of 452h is
1106.

Note that in all those "infinite item" codes, the third and fourth
hexadecimal values (the second byte, used as the data byte in Game Boy
GameShark codes) are "63". Here's why:

63h =
6*(16) +
3*(1) =
99.

6 times 16 is 96, and then add 3 for 99. It sets the value equal to 99,
which is the maximum amount of any item that can be held at one time.

The instructions for use of these codes tell you to keep the GameShark
switch on, which causes the specified byte to remain constant. When you
use one of these items the game subtracts 1 from 99, gets 98, writes it
back and then the GameShark changes it back to 99 again.

What about the letters? The value of hexadecimal digits can range from
0-15 and it is necessary to express these values in one character. Since
we only have ten numerals to work with (0-9), the letters A-F have been
chosen to represent the values 10-15. The hexadecimal number A5Dh can
therefore be expanded as:

Ah*(16*16) +
5h*(16) +
Dh*(1) =

10*(16*16) +
5*(16) +
14*(1) =
2654.

Note that the highest value that can be stored in one hexadecimal digit
is Fh, or 15. The highest value that can be stored in two hexadecimal
digits is FFh, or:

Fh*(16) +
Fh*(1) =

15*(16) +
15*(1) =
255.

The Game Boy likes to store values in two digit chunks, which is why
255 is such an important number in Game Boy mathematics.

The Accuracy of attacks, for example, is based on a 00h to FFh scale.
So when we say an attack is 99.6% accurate, what we mean is that if a
random number chosen between 00h and FFh (0 and 255) is lower than FFh
(ie, any number from 00h to FEh), then the attack will hit. The chances of
hitting are 255 out of 256, or, roughly, 99.6%.