View Page Source

Revision (current)
Last Updated by Ferret_Warlord on 11/19/2010 3:13 AM
Back to Page

!!!__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:

[http://i354.photobucket.com/albums/r401/Ferret_Warlord/Final_Fantasy_III_J-0.png]

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 __A6__│__01__ 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:

[http://i354.photobucket.com/albums/r401/Ferret_Warlord/Final_Fantasy_III_J-1.png]

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 __A6__│__63__ 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 __A6__│__01__ 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 __A6__│__01__ 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 __A6__│__74__ 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 __A6__│__74__ 04│00 __A6__│__8C__ 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:

[http://i354.photobucket.com/albums/r401/Ferret_Warlord/Final_Fantasy_III_J-2.png]

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 __A6__│__8E__ 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 [http://www.gamefaqs.com/nes/563415-final-fantasy-iii/faqs/13262|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