Inventory Warping Fundamentals

Jason Lynch <jason@aexoden.com> (Aexoden)

Introduction

A key feature of the current routes that use the 64-floor glitch is the use of inventory warping. The exact technical description of this process is probably beyond the scope of this guide, but the short version is something like this: Certain tiles in the game are trigger tiles, and when you step on one, the game searches a particular area of memory for data about what to do. If a given trigger tile doesn't have any data to find, the game keeps searching memory endlessly until it finds some. These searches can happen to pass through areas of memory that we can modify, like our inventory. As far as I can tell, every trigger tile on a normal map in the game either has an associated trigger or is inaccessible. However, on certain glitch maps, there are trigger tiles that are completely manipulable.

Technical Details

When searching for data regarding a trigger tile, the game is looking for five bytes in the following pattern:

Trigger X
The X-coordinate of the trigger tile
Trigger Y
The Y-coordinate of the trigger tile
Target Map
The ID number of the target map
Target X
The target X-coordinate
Target Y
The target Y-coordinate

Thus, the game searches five bytes at a time until it finds an entry matching the X and Y coordinates of the trigger tile you are stepping on. Each map has a specific location for its trigger data, so the trigger map ID is implied. But again, the game assumes that it will find data, so it searches until it does, even if it goes far beyond the location of the map's trigger data.

Warp descriptions are five bytes long, but inventory entries are two bytes (one byte for the item and one byte for the count), so each warp description actually only takes 2.5 inventory slots. This isn't particularly useful in this case, however, as the trigger tiles we use in the Mage Room have an X-coordinate of 13. The item number with that ID number is the Stardust (rod), which isn't readily available. Therefore, the easiest way to make use of inventory warps is to actually use a six-byte sequence where the first byte can be anything we want (as it's ignored), and the other five bytes correspond to the warp description. We can then insert a new warp every 10 bytes (or every five inventory entries).

Keeping this mind, let's look at exactly how the warp descriptions are structured:

ByteInventory AssocationWarp Component
0Item(padding)
1CountTrigger X
2ItemTrigger Y
3CountTarget Map ID
4ItemTarget X
5CountTarget Y

To summarize, we are going to set our trigger Y-coordinate and target X-coordinate with items, and our trigger X-coordinate, target map ID and target Y-coordinate with item counts.

By using different items, you can set up the warps in various ways, but two very useful items for our purposes are the FireClaw and IceClaw. They're both available for purchase, and have very favorable ID numbers: FireClaw is 1 and IceClaw is 2. the trigger tiles we use in the Glitch Room are stacked vertically. By varying which claw you use as your second item in the sequence, you are actually selecting which Y-coordinate will activate the associated warp.

Warps

The following warps are presented in the order we use them, not necessarily the order they are in the inventory. The first active warp in your inventory is the one that will be used.

The target map for each warp is non-negotiable. We need to access each room in the sequence (through inventory warps or through other means such as RGB). However, the target coordinates are often very flexible so if you screw something up, you may have some easy (and some difficult) alternatives available to you.

Again, the first item in each warp can be anything. We use Cure (staff) mainly because it's available for purchase at a shop we'd already be visiting.

Any% NoCW

The following warps are used in the 12-item route of the Any% NoCW run. The 9-item warps are similar, but different.

Mage Room

Description

This sets up a warp for the trigger at coordinates 13, 2 to travel to map 57 (the Mage Room) at coordinates 15, 1. The purpose of this warp is to help in setting the Mage Room as floor 0.

Items
  • Cure (staff) x13
  • IceClaw x57
  • Staff x1
Bytes
Decimal
(16) 13 2 57 15 1
Hex
(10) 0D 02 39 0F 01
Last Item Variation

For the last item, your target coordinates can actually vary quite a bit. The alternatives you're most likely to have, however, are Cure (staff) x1 or Shadow (sword) x1.

Sealed Cave

Description

This sets up a warp for the trigger at coordinates 13, 1 to travel to map 68 (the Sealed Cave entrance) at coordinates 3, 8.

Items
  • Cure (staff) x13
  • FireClaw x68
  • Thunder (claw) x8
Bytes
Decimal
(16) 13 1 68 3 8
Hex
(10) 0D 01 44 03 08
Last Item Variation

I haven't looked at this one in detail, but some number of rods is a possibility as an alternative.

FuSoYa

Description

This sets up a warp for the trigger at coordinates 13, 2 to travel to map 96 (the Lunarian Palace) at coordinates 16, 20.

Items
  • Cure (staff) x13
  • IceClaw x96
  • Cure (staff) x20
Bytes
Decimal
(16) 13 2 96 16 20
Hex
(10) 0D 02 60 10 14
Last Item Variation

The range of possible values for the Cure (staff) is actually quite large. 20 is optimal, however. Other potential items you could use instead are other staves or rods.

Zeromus

Description

This sets up a warp for the trigger at coordinates 13, 1 to travel to map 114 (Zeromus) at coordinates 16, 13.

Items
  • Cure (staff) x13
  • FireClaw x114
  • Cure (staff) x13
Bytes
Decimal
(16) 13 1 114 16 13
Hex
(10) 0D 01 72 10 0D
Last Item Variation

There are possibilities, but it's kind of tight. An exact list would probably be more useful.

SFC Any% NoCW

The original SFC release of the game is slightly different. The Mage Room used in the U.S. version doesn't exist in the Japanese version, so I had to find a different room, which we've named the Stone Room. The basic idea is the same, but the details are different. I've included both the English and Japanese item names here for reader convenience.

Stone Room

Description

This sets up a warp for the trigger at coordinates 14, 1 to travel to map 232 (the Stone Room) at coordinates 11, 1. The purpose of this warp is to help in setting the Stone Room as floor 0.

Items
  • Cure (staff) (いやしのつえ) x14
  • FireClaw (ほのおのつめ) x232
  • Change (rod) (へんげのロッド) x1
Bytes
Decimal
(16) 14 1 232 11 1
Hex
(10) 0E 01 E8 0B 01

Sealed Cave

Description

This sets up a warp for the trigger at coordinates 14, 2 to travel to map 68 (the Sealed Cave entrance) at coordinates 3, 8.

Items
  • Cure (staff) (いやしのつえ) x14
  • IceClaw (こおりのつめ) x68
  • Thunder (claw) (いかづちのつめ) x8
Bytes
Decimal
(16) 14 2 68 3 8
Hex
(10) 0E 02 44 03 08

FuSoYa

Description

This sets up a warp for the trigger at coordinates 14, 2 to travel to map 96 (the Lunarian Palace) at coordinates 16, 15.

Items
  • Cure (staff) (いやしのつえ) x14
  • IceClaw (こおりのつめ) x96
  • Cure (staff) (いやしのつえ) x15
Bytes
Decimal
(16) 14 2 96 16 15
Hex
(10) 0E 02 60 10 0F

Zeromus

Description

This sets up a warp for the trigger at coordinates 14, 1 to travel to map 114 (Zeromus) at coordinates 16, 15.

Items
  • Cure (staff) (いやしのつえ) x14
  • FireClaw (ほのおのつめ) x114
  • Cure (staff) (いやしのつえ) x15
Bytes
Decimal
(16) 14 1 114 16 15
Hex
(10) 0D 01 72 10 0F