The Weapon List, by ID
As with the spells, it seems best to lay out the exhaustive list of weapons in FF1-DoS before we decode the weapon data in the ROM. There is a grand total of 64 weapons, denoted as 0×01 through 0×40. Any weapon with an ID of 0×29 or greater was not in NES version of Final Fantasy.
|0×0d||Longsword||Great Axe||Falchion||Mythril Knife|
|0×11||Mythril Sword||Mythril Hammer||Mythril Axe||Flame Sword|
|0×15||Ice Brand||Wyrmkiller||Great Sword||Sun Blade|
|0×19||Coral Sword||Werebuster||Rune Blade||Power Staff|
|0×1d||Light Axe||Healing Staff||Mage’s Staff||Defender|
|0×21||Wizard’s Staff||Vorpal Sword||Cat Claws||Thor’s Hammer|
|0×2d||Rune Staff||Judgment Staff||Dark Claymore||Duel Rapier|
|0×35||Viking Axe||Rune Axe||Ogrekiller||Kikuichimonji|
|0×39||Asura||Kotetsu||War Hammer||Assassin Dagger|
|0×3d||Orichalcum (Dagger)||Mage Masher||Gladius||Sage’s Staff|
Table location: 0×19f358 — 0×19fa75.
Data structure size: 28 bytes
|Bytes 1-15||29 00||04 06||0C||00||00||00||00 00||00||00||00||00||00|
|???||Who equips||Attack||Accuracy||Evade+||Spell effect (ID)||Attack bits||Family||Str||Vit||Agil||Int|
|Bytes 16-28||01||00 00 00 00||08 00 00 00||04 00 00 00|
|Critical %||???||Purchase cost||Selling price|
Decoding various bytes of information
The (two) Equip bytes
In our example, the Nunchaku, these bytes are 04 06. The first byte concerns initial character classes, and the second byte governs promoted classes:
|—-||—-||Black Mage||White Mage||Red Mage||Monk||Thief||Warrior|
So… the Monk alone can equip the Nunchaku before promotion. Makes sense. How about after class change?
|—-||—-||Black Wizard||White Wizard||Red Wizard||Master||Ninja||Knight|
The Ninja picks up proficiency with the Nunchaku at class change. Exactly!
The (two) Attack bytes…
The Nunchaku has no additional information… so I’ll just list each set of decoded bits as they appear. This can be borne out by looking at other weapons. The Flame Sword has 10 00 in its attack bytes.
|Byte 1— 10 =||0||0||0||1||0||0||0||0|
|Byte 2— 00 =||0||0||0||0||0||0||0||0|
Obviously, the Flame Sword is fire-elemental, and so its Fire bit is set.
The Family byte…
The Flame Sword again proves instructional here. This byte is used to set whether certain families of monsters prove vulnerable to the weapon. Observe the following based on the Flame Sword’s “Type” byte:
Indeed, the Flame Sword deals extra damage versus Regenerating monsters, as well as any Undead creatures, even if they might be staunch versus Fire!
Other information that may not be obvious
The bytes Evade+, Str, Vit, Agl, Int are all signed 8-bit integers. That means if you want a weapon to lower Strength by 3, make its Str byte fd, as that would resolve to -3 rather than 253.
The Spell effect byte is 00 if the weapon does not have a special effect when used. If it is not 00, then it calls the spell ID specified. See the Spell List to find the IDs of all the spells in the game.
It is important to note that I have not figured out all the information that there is to know about weapons. So there’s an avenue for intrepid hackers to possibly learn something new.