TASVideos

Tool-assisted game movies
When human skills are just not enough

Game Resources / NES / Final Fantasy 3

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


Combined RSS Feed
GameResources/NES/FinalFantasy3 last edited by Ferret Warlord on 2010-11-19 03:13:20
Page info and history | Latest diff | List referrers | View Source