The Upgrade Trick

The upgrade trick in Final Fantasy 3 is a bug that allows you to take items gained in combat and use them to turn other items in your inventory into other things and upgrade your lead character. There are plenty of methods stated on the internet for getting this to work, but are all needlessly complicated in execution. This article focuses on the causes of the glitch and is somewhat technical; a simpler explanation focusing more on the execution will be forthcoming. For clarity's sake, I used screenshots taken from a translated ROM.

Memory

Memory block 60C0-610F contains the values for your inventory and the first line of your lead character's stats. Its in-battle format is as follows:
       ┌─────Index
       │  ┌──Quantity
       V  V
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00─┐
60Dx: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00 │
60Ex: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00 ├Inventory
60Fx: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00─┘ 
610x: 00│00│00│00 00 00│00 00 00 00 00 00│00 00│00 00<─Lead stats
       ^  ^  ^ └──┬───┘ └───────┬───────┘ └─┬─┘ └─┬─┘  (1st line)
  Job──┘  │  │    │             │           │     └──Max HP
  Level───┘  │    └──Experience └───Name    └────Current HP
  Status─────┘
Each slot in your inventory is split between two bytes. The first is the "index", or what the stack contains. The second is the stack's "quantity", how many of an item is in the stack. Immediately following your inventory is your first character's vital statistics, but we'll get into that later. For now we'll focus on the inventory.
***IMPORTANT!*** The way your inventory is formatted when you're not in combat is different from when you're in combat. Keep this in mind when you're poking around the memory for yourself. The bug is the result of the battle's format, so we'll deal exclusively with that format.
Example:
Just after finishing the Earth Shrine and de-equipping your party, your inventory would look something like this:
And, when in combat, the inventory memory block would look like this:
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: B2 02│A6 05│1E 04│72 04│62 04│58 02│00 00│00 00
60Dx: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00
60Ex: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00
60Fx: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00
B2 is the index for SouthWind, and you have two; A6 is the index for Potion, and you have five; 1E is the index for Knife, and you have four; etc.

Item Drops

The largest a stack can be is 99. If you have 99 in a stack, and you get an item drop, then the game deals with the extra item by finding the next empty quantity byte after the stack, dropping its index there and dropping its quantity in the next index. Let's demonstrate using potions.
During combat...
       ┌───A6 is the index for potions
       │  ┌63 is hex for 99
       V  V
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 00│00 00│00 00│00 00│00 00│00 00│00 00
Now, combat is over, and you win a potion.
        ┌───Stack is full, drop potion into next empty quantity
        │
        │       ┌Here's the next empty quantity
      ┌─┴─┐     v
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 00│00 00│00 00│00 00│00 00│00 00│00 00
So what you end up with is...
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 A601 00│00 00│00 00│00 00│00 00│00 00
So now you have 166 of nothing, and no kaiser claws (item at index 01). These values are meaningless, so they get zeroed when the inventory is reorganized.
Now, what would happen if you had a stack of four leather helmets two slots after your potion stack? Arranged, your inventory would look like this:
And in battle memory would look like this:
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 00│62 04│00 00│00 00│00 00│00 00│00 00
Get into combat and win a potion.
                ┌──The index for the dropped potion
                │  is added to the next empty quantity...
                v  
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 A663 04│00 00│00 00│00 00│00 00│00 00
                   ^
                   └──But the quantity of the dropped potion
                      (quantity 1) is added to the leather
                      helmet's index!
So now the helmet stack no longer refers to index 62, but index 63, since the dropped potion's quantity got added to its index. Congratulations, you now have four onion helmets!

Two Item Drops

Sometimes, you may win more than one of the same item in combat. If your stack of that item is full, the game treats each extra as a separate item and simply iterates the process described above. The good news is that you're almost always garaunteed glitchy behavior because of this. Let's use potions again as an example.

Spawning Kaiser Claws

Before combat, you have a stack of 99 potions.
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 00│00 00│00 00│00 00│00 00│00 00│00 00
You win two potions. It handles the first normally.
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 A601 0│00 00│00 00│00 00│00 00│00 00
But the second one...
                      ┌──Here's an empty quantity!
                      V
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 A6│01 00│00 00│00 00│00 00│00 00│00 00
And so...
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 A6│01 A601 00│00 00│00 00│00 00│00 00
It doesn't bother checking to see if the slot is occupied. This results in 166 of nothing, a stack of no kaiser claws, and a stack of 166 kaiser claws. You just spawned claws out of nothing. The other two meaningless stacks get discarded and the other stack gets reset to 99 since you can't have any more than that.

Upgrading Two Items in One Shot

So, now you have an onion helmet, but want to get the rest of the onion armor. You buy four leather robes and four copper rings, and arrange them in your inventory with your potions thusly.
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 00│73 04│00 00│8B 04│00 00│00 00│00 00
73 and 8B are the indexes for leather robes and copper rings respectively. You get into combat and win two potions.
                 ┌──First dropped potion is dealt with as
                 │  described; index 73 becomes 74.
                 │
                 │    ┌─Second potion isn't dropped here;
                 │    │ there's a quantity here.
               ┌─┴─┐  V
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 A674 04│00 00│8B 04│00 00│00 00│00 00
                            ^
                            └──But this one is empty.
And so you have...
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Cx: A6 63│00 A674 04│00 A68C 04│00 00│00 00│00 00
In one shot, your robe and ring have become an onion armor and onion glove respectively.
This method can be done with any number of dropped items. Just remember that the process iterates itself with each dropped item and arrange your inventory accordingly.

Upgrading the Lead Character

Here's a tip: the way the game checks for a quantity byte is by checking each odd byte in sequence after the full stack. It also fails to go back to the beginning of the inventory once it reaches the end of your pack. This means that there's opportunity to corrupt other pieces of data.
Look back at the chart at the beginning of the article. You'll see that your lead character's data comes immediately after your party's inventory. It is possible to abuse the game's method for dealing with extra items in order to give your lead character an edge.
Place a potion at the end of your inventory like this:
Cropping off the first three lines of your inventory, the memory block should now look something like this when in combat.
       ┌─────Index
       │  ┌──Quantity
       V  V
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Fx: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│A6 63<─Inventory
610x: 00│02│00│5D 00 00│8D B2 A6 AE FF FF│28 00│32 00<─Lead stats
       ^  ^  ^ └──┬───┘ └───────┬───────┘ └─┬─┘ └─┬─┘  (1st line)
  Job──┘  │  │    │             │           │     └──Max HP
  Level───┘  │    └──Experience └───Name    └────Current HP
  Status─────┘
Some notes: Like most systems, multi-byte numbers are read from right to left, so the larger digits are on the right. Strings, like your character's name, are read from left to right.
With this setup, enter combat and win a potion. Here's what happens:
 
       The dropped potion will look for an empty
       odd byte after the potion in your inventory.
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Fx: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│A6 63
610x: 00│02│00│5D 00 00│8D B2 A6 AE FF FF│28 00│32 00
          ^     ^     ^
This one──┘     │     └──But this one is!
isn't empty...  │        Let's drop it here.
                │
And neither─────┘
is this one.
This results in...
       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
60Fx: 00 00│00 00│00 00│00 00│00 00│00 00│00 00│A6 63
610x: 00│02│00│5D 00 A68E B2 A6 AE FF FF│28 00│32 00
The rightmost byte for your character's experience was set to A6. And since this byte represents the upper range of this number, this means your character just gained 10,878,976 experience in one round of combat. The game will reset this to 9,999,999 in a bit, but still, your character has the maximum amount of experience allowable. Since the game is programmed to prevent gaining more than one level per combat, this means your character will gain one level per round of combat. Note that also the lead's name gets affected; in this case, Dock's name is changed to Eock.
You can do some other things with this too. Place the potion stack one space back and you can change your character's class. However, this is mostly pointless: Stat changes aren't made unless you go through the job menu. All glitching yourself a job does is allow you to equip different equipment; all other stats are transferred to the new job. You can also crash the game if you try this as a ninja.
Also, if you have already performed the mass experience bug and get two potions with the same setup, or if you get three potions in one round without having done the bug, the character's max HP will shoot up to 9999.
Plus, you can chain the bugs together. Place a stack to be upgraded at the end of your inventory, place the potion stack two spaces back, and get two potion drops in one combat round. You'll upgrade the stack and gain a ton of experience that way.
Can you upgrade your other characters?
Theoretically, yes, but you'd have to keep everyone else dead up until the ancient's labyrinth, and that's probably not practical.
Can you do other things with the bug?
Everything else is too far removed from the inventory to be of use.

Item Index List

This list was pulled directly from EmeraldThunder21's savestate hacking guide.
00	Nothing
01	Kaiser Claw
02	CatClaw
03	Dragon Claw
04	Elven Claw
05	HellClaw
06	Nunchuck
07	Tonfa
08	3-Part
09	Mithril Rod
0A	Flame Rod
0B	Ice Rod
0C	Light Rod
0D	Ultimate Rod
0E	Staff
0F	Burning Staff
10	Freezing Staff
11	Shining Staff
12	Golem Staff
13	Rune Staff
14	Eldest Staff
15	Hammer
16	Thor Hammer
17	Battle Axe
18	GreatAxe
19	M. Star Axe
1A	Thunder Spear
1B	Wind Spear
1C	Blood Spear
1D	Holy Spear
1E	Knife
1F	Dagger
20	Mithril
21	M. Gauche
22	Orialcon
23	AirKnife
24	Long Sword
25	W. Slayer Sword
26	Shiny Sword
27	Mithril Sword
28	Serpent Sword
29	IceBlade
2A	Tyrving Sword
2B	Salamand Sword
2C	King Sword
2D	Tomahawk
2E	Ancient Sword
2F	Ashura 
30	Blood Sword
31	Defender Sword
32	Triton Hammer
33	Kotetsu
34	Kiku
35	Break
36	Excalibur
37	Masamune
38	Ragnarok
39	Onion Sword
3A	Flame Book
3B	Ice Book
3C	Inferno Book
3D	Light Book
3E	Illumina Book
3F	Boomerang
40	Full Moon
41	Shuriken
42	Blizzard Book
43	Giyaman
44	Earth
45	Rune
46	Madora Harp
47	Dream Harp
48	Lamia Harp
49	Loki Harp
4A	Bow
4B	GreatBow
4C	Killer Bow
4D	Rune Bow
4E	Yoichi Bow
4F	Wooden Arrows
50	Holy Arrows
51	Iron Arrows
52	Bolt Arrows
53	Fire Arrows
54	Ice Arrows
55	Medusa Arrows
56	Yoichi Arrows
57	Nothing
58	Leather Shield
59	Onion Shield
5A	Mithril Shield
5B	Ice Shield
5C	Hero Shield
5D	Demon Shield
5E	Diamond Shiled
5F	Aegis Shield
60	Genji Shield
61	Crystal Shield
62	Leather Helmet
63	Onion Helmet
64	Mithril Helmet
65	Carapace Helmet
66	Ice Helmet
67	Headband
68	Scholar Helmet
69	DarkHood
6A	Chakra Helmet
6B	Viking Helmet
6C	Dragon Helmet
6D	Feather Helmet
6E	Diamond Helmet
6F	Genji Helmet
60	Crystal Helmet
71	Ribbon
72	Cloth Robe
73	Leather Robe
74	Onion Armor
75	Mithril Armor
76	Carapace Armor
77	Ice Armor
78	Flame Mail
79	Kenpo Armor
7A	Darksuit
7B	Wizard Robe
7C	Viking Armor
7D	BlackBelt
7E	Kinght Armor
7F	Dragon Armor
80	Bard Robe
81	Scholar Robe
82	Gaia Robe
83	Demon Armor
84	Diamond Armor
85	Reflect Armor
86	White Robe
87	Black Robe
88	Genji Armor
89	Crystal Armor
8A	Rusted Armor
8B	Copper Ring
8C	Onion Glove
8D	Mithril Glove
8E	Mithril Ring
8F	Thief Glove
90	Gauntlet
91	Power Ring
92	Rune Ring
93	Diamond Ring
94	Diamond Glove
95	Protect Ring
96	Genji Glove
97	Crystal Glove
98	Magic Key
99	Carrot
9A	Horn
9B	Eye
9C	Time Gear
9D	Eureka Key
9E	Wind Fang
9F	Fire Fang
A0	Water Fang
A1	Earth Fang
A2	Lute
A3	Sylx Key
A4	Midget Bread
A5	?
A6	Potion
A7	HiPotion
A8	Elixir
A9	FenixDown
AA	Soft
AB	Maiden Kiss
AC	EchoHerb
AD	Luck Mallet
AE	Eyedrop
AF	Antidote
B0	Otter Head
B1	Bomb Shard
B2	South Wind
B3	Zeus' Rage
B4	Bomb R. Arm
B5	North Wind
B6	Gods' Rage
B7	Earth Drum
B8	Lamia Scale
B9	Gods' Wine
BA	Turtle Shell
BB	Devil's Sigh
BC	Black Hole
BD	Dark Scent
BE	Lilith Kiss
BF	Imp's Yawn
C0	Split Shell
C1	Paralyzer
C2	Mute Charm
C3	Pillow
C4	Bomb Head
C5	Barrier
C6	Chocobo Rage
C7	White Scent
C8	Flare
C9	Death
CA	Meteo
CB	W. Wind
CC	Life 2
CD	Holy
CE	Bahamut
CF	Quake
D0	Break 2
D1	Drain
D2	Cure 4
D3	Heal
D4	Wall
D5	Leviathan
D6	Fire 3
D7	Bio
D8	Warp
D9	Aero 2
DA	Soft
DB	Haste
DC	Odin
DD	Bolt 3
DE	Kill
DF	Erase
E0	Cure 3
E1	Life
E2	Safe
E3	Titan
E4	Break
E5	Ice 3
E6	Shade
E7	Libra
E8	Confuse
E9	Mute
EA	Ifrit
EB	Fire 2
EC	Ice 2
ED	Bolt 2
EE	Cure 2
EF	Exit
F0	Wash
F1	Ramuh
F2	Bolt
F3	Venom
F4	Blind
F5	Aero
F6	Toad
F7	Mini
F8	Shiva
F9	Fire
FA	Ice
FB	Sleep
FC	Cure
FD	Pure
FE	Sight
FF	Chocobo

GameResources/NES/FinalFantasy3 last edited by Ferret_Warlord on 11/19/2010 3:13 AM
Page History Latest diff List referrers View Source