Shop Merchandise Table locations
0×1e09b0 — 0×1e0a95. This is the important table, the one that the game seems to use exclusively.
0×1dfc9c — 0×1dfd81. It is unclear to me why this bit-for-bit equivalent table is found in the ROM, but it does not seem to serve any purpose.
The data structure size is variable, and is driven by the shop pointer table. Again, this will be discussed later.
Shop Data
To illustrate the merchandise available in all the shops in Final Fantasy 1 DOS, I’ve decided to list the data in a table format that shows exactly where to find the data, and the data you’ll find there. I have not ascertained exactly where some of the shops are, as some of them are in Dawn of Souls dungeons. There are 51 shops in the game.
Hex | Location | Merchandise | Hex Data |
0×1e09b0 | Coneria | Weapons | FD 01 02 03 04 05 |
0×1e09b6 | Coneria | Armor | FC 01 02 03 |
0×1e09ba | Coneria | Items | FE 01 0b 09 10 |
0×1e09bf | Coneria | White Magic | 01 02 03 04 |
0×1e09c3 | Coneria | Black Magic | 21 22 23 24 |
0×1e09c7 | Pravoka | Weapons | FD 05 06 07 08 |
0×1e09cc | Pravoka | Armor | FC 02 03 04 1c 3a |
0×1e09d2 | Pravoka | Items | FE 01 04 0b 0d 09 |
0×1e09d8 | Pravoka | White Magic | 05 06 07 08 |
0×1e09dc | Pravoka | Black Magic | 25 26 27 28 |
0×1e09e0 | Elfheim | Weapons | FD090a0b0c |
0×1e09e5 | Elfheim | Armor | FC040b1d2a2b |
0×1e09eb | Elfheim | Items | FE010b0c0e11 |
0×1e09f1 | Elfheim | White Magic, Lv. 3 | 090a0b0c |
0×1e09f5 | Elfheim | White Magic, Lv. 4 | 0d0e0f10 |
0×1e09f9 | Elfheim | Black Magic, Lv. 3 | 29 2a 2b 2c |
0×1e09fd | Elfheim | Black Magic, Lv. 4 | 2d 2e 2f 30 |
0×1e0a01 | Melmond | Weapons | FD 0b 0c 0d 0f |
0×1e0a06 | Melmond | Armor | FC 05 0c 2c 3b 3c |
0×1e0a0c | Melmond | White Magic | 11 12 13 14 |
0×1e0a10 | Melmond | Black Magic | 31 32 33 34 |
0×1e0a14 | Crescent Lake | Weapons | FD 10 11 12 13 |
0×1e0a19 | Crescent Lake | Armor | FC 06 1e 23 2d 3d |
0×1e0a1f | Crescent Lake | Items | FE 01 02 04 09 11 |
0×1e0a25 | Crescent Lake | White Magic | 15 16 17 18 |
0×1e0a29 | Crescent Lake | Black Magic | 35 36 37 38 |
0×1e0a2d | Onlac | Items | FE 02 04 0a 0c 12 |
0×1e0a33 | Onlac | White Magic | 1b 1c |
0×1e0a35 | Onlac | Black Magic | 3b 3c |
0×1e0a37 | Gaia | Weapons | FD 23 |
0×1e0a39 | Gaia | Armor | FC 0d 41 |
0×1e0a3c | Gaia | Items | FE 02 04 09 11 12 |
0×1e0a42 | Gaia | White Magic, Lv. 7 | 19 1a |
0×1e0a44 | Gaia | White Magic, Lv. 8 | 1e 1f 20 |
0×1e0a47 | Gaia | Black Magic, Lv. 7 | 39 3a |
0×1e0a49 | Gaia | Black Magic, Lv. 8 | 3e 3f 40 |
0×1e0a4c | Lefein | White Magic | 1d |
0×1e0a4d | Lefein | Black Magic | 3d |
0×1e0a4e | Caravan | Bottle | 0f |
0×1e0a4f | Caravan | Items | 1f 20 21 22 23 |
0×1e0a54 | Dawn of Souls | Items | FD 30 3f FC 1a FE 02 22 |
0×1e0a5c | Dawn of Souls | Items | FD 35 3e FC 17 FE 05 09 |
0×1e0a64 | Dawn of Souls | Items | FD 3a FC 14 28 38 FE 0a |
0×1e0a6c | Dawn of Souls | Items | FD 3b 37 FC 39 29 FE 1c |
0×1e0a74 | Dawn of Souls | White Magic | 19 1a 1b 1c |
0×1e0a78 | Dawn of Souls | White Magic | 1d 1e 1f 20 |
0×1e0a7c | Dawn of Souls | Black Magic | 39 3a 3b 3c |
0×1e0a80 | Dawn of Souls | Black Magic | 3d 3e 3f 40 |
0×1e0a84 | Dawn of Souls | Weapons | FD 21 24 1e 1f 1d |
0×1e0a8a | Dawn of Souls | Armor | FC 0f 10 24 41 3e |
0×1e0a90 | Dawn of Souls | Items | FE 17 18 19 1a 1b |
Merchandise specification conventions
Merchandise can be preceded by one of three special characters, as can be deduced from the above table. FD denotes that the IDs to follow will denote weapons. FC denotes that the IDs to follow will specify armor, shields, helmets, or gauntlets. FE denotes that the IDs to follow will denote a non-equipable item. If the merchandise is not preceded by one of these special IDs, they pertain to magic spells.
It is possible to have different merchandise types in a store. It is also possible to have more than five items in a store, as the developers allowed for scrolling merchandise windows without any extra hacking!
Shop Pointer Table
0×1e070c — 0×1e08a3. This is the real pointer table, that the game uses.
0×1dfb04 — 0×1dfc8b. As above, this bit-for-bit equivalent of the table above is found in the ROM and I do not know why it is there. In my mod, I actually made this table point to the same table as the first pointer table above, without ill effects.
Data structure size: 8 bytes
Let’s take a look at the first record, at 0×1e070c:
15 | 00 00 00 | b0 09 1e 08 |
Contents | Zeroes | Pointer |
The “Contents” byte
This byte is broken up into two 4-bit sections. The first four bits in the above example, rendered as 1, specifies the graphic to be displayed when navigating shop menus. The last four bits, rendered as 5, specify how many bytes to read for this shop. This is not necessarily the number of items sold! This count does not account for any FC’s, FD’s, and FE’s present in the data string. Therefore, a 5 could signify an shop string like this: FD 01 02 03 04 05.
Here’s a list of the Graphic IDs:
- 1— Weapon Shop
- 2— Armor Shop
- 3— Item Shop
- 4— Caravan
- 5— White Magic
- 6— Black Magic
The pointer
Remember, all pointers are stored in Little Endian style, so the above pointer would read data from 0×081e09b0.
Sorry to bug you but I have been trying to locate the address of the items shop in Corneria. You say that the address is 0×1e09ba but the items listed aren’t those listed in the actual game. In the game’s item shop, potions, antidotes, mind balms, phoenix downs, as well as sleeping bags are sold. However, at the aforementioned address, only four items are listed: fe 01 0d 09 10. So, obviously, the modded DoS doesn’t use the address you specified. So, what would be the correct address for this items shop in the modded DoS?
— Slish · Jun 23, 02:22 AM · #