Condensed equipment lists for Final Fantasy IV, specifically the Super Nintendo release ("Final Fantasy II")

Replaying FF4 for the first time in many years, I searched the web for a refresher on the various equipment options and found myself bewildered at the profusion of releases. By the early '90s there were already three competing versions, and in the meantime there have been so many ports and reissues, each tinkering with the formula, that it was hard to find a source. Not that there aren't comprehensive guides on virtually every aspect of every version, but I was hoping for an at-a-glance reference to my version rather than an exhaustive collation. I decided to "quickly" dump the data I cared about from the ROM and got a little carried away.

This is a crude HTML rendition of the source document, ff2eq.txt, a fixed-width text file.

80%FireClaw (Fire)
80%IceClaw (Ice)
80%Thunder [Claw] (Lit) (bonus v. Mech)
50%Charm [Claw] (Charm) (bonus v. Giant) Agil +3
90%Poison [Claw] (Poison) Str +3
99%CatClaw (Sleep) Str/Agil +5
340%Rod (use for non-elemental damage)
545%IceRod (Ice) (bonus v. Lizard) (use for Ice-1)
745%FlameRod (Fire) (use for Fire1) Wis +3
1050%Thunder [Rod] (Lit) (use for Lit-1) Wis +3
1550%Change [Rod] (use for Pig) Wis +5
3055%Charm [Rod] (use for Charm) Wis +10
4560%Stardust [Rod] (use for Comet) Wis +15
1310%Lilith [Rod] (Drain) (bonus v. Undead) (use: Psych) Wis +5
445%Staff (use to remove poison)
850%Cure [Staff] (use to restore HP to all party members)
M1255%Silver [Staff] (bonus v. Undead) (use v. Charm &c) Will +3
3099%Power [Staff] (Bersk) Str +10
3660%Lunar [Staff] Will +10
4865%Life [Staff] (use for Life1) Will +15
C5260%Silence [Staff] (Mute) (bonus v Mage) (use: Mute) Will +10
M1080%Shadow [Sword] (Dark)
M2085%Darkness [Sword] (Dark)
M3090%Black [Sword] (Dark, Death) Str/Agil/Vit/Wis +5, Will -10
M4099%Legend [Sword] (White) Will +3
MT9999%Light [Sword] (White) Str/Will +3
MT16099%Excalbur (White) Str +10
M6580%Fire [Sword] (Fire)
M7580%IceBrand (Ice)
MT10590%Defense [Sword] Vit +15
MT4550%Drain [Sword] (Drain) (bonus: Undead, Slime, Giant) All -5
MT3577%Ancient [Sword] (Curse) (bonus v. Spirit)
MT5577%Slumber [Sword] (Sleep) (use for Sleep)
MT7766%Medusa [Sword] (Stone)
M999%Spear (Wind)
M5580%Wind [Spear] (Wind)
M6680%Flame [Spear] (Wind, Fire) (use for Fire2)
M7780%Blizzard [Spear] (Wind, Ice) (use for Ice-2)
MT9980%Dragoon [Spear] (Wind) (bonus v. Dragon)
MT10980%White [Spear] (Wind, White) (bonus v. Spirit) (use: White)
MT8822%Drain [Spear] (Drain) (bonus Undead, Slime, Giant) All -10
MT9280%Gungnir [Spear] (Wind) Vit +15
MT2590%Short [Katana]
M3290%Middle [Katana]
M4090%Long [Katana]
MT4890%Ninja [Katana] Str +5
MT5590%Murasame [Katana] Str/Vit/Wis +5, Agil/Will -5
MT6599%Masamune [Katana] (use for Fast) Agil +3
MT2955%Assassin [Knife] (Death) Str/Agil/Vit +5, Wis/Will -10
MT3575%Mute [Knife] (Mute) (bonus v. Mage) Wis +5
RC2050%Whip (Hold)
MRC3055%Chain [Whip] (Hold)
RC4060%Blitz [Whip] (Hold, Lit)
RC5065%Flame [Whip] (Hold, Fire) Str/Agil/Vit +5, Wis/Will -5
RC5575%Dragon [Whip] (Hold) (bonus v. Dragon) S/A/V +5, W/W -5
MT3550%HandAxe Str +3
MRC6269%Dwarf [Axe] Str/Vit +5, Agil/Wis/Will -5
MC8085%Ogre [Axe] (bonus v. Giant)
MT2099%Silver [Knife] (bonus v. Spirit)
MT2894%Dancing [Knife] (use for non-elemental damage)
M5080%Silver [Sword] (bonus v. Spirit)
MT25599%Spoon
MC20099%Crystal [Sword] (White) (bonus v. Undead) Str/Vit/Will +15
MTR4099%Shuriken [Star] (Wind)
MTRC8099%Ninja [Star] (Wind)
R2080%Boomrang (Wind)
R4085%FullMoon [Boomerang] (Wind)
RW885%Dreamer [Harp] (Sleep)
RW1890%Charm [Harp] (Charm)
MW9560%Poison [Axe] (Poison) (bonus v. Giant) (use for Venom)
MW10060%RuneAxe (bonus v. Mage)
W4575%Wooden [Wrench] (bonus v. Mech)
MW5575%Silver [Wrench] (bonus v. Spirit, Mech)
MW6575%Earth [Wrench] (Fire) (bonus v Mech) (use: Quake) Str +5
MTW8095%Avenger [Sword] Str/Agil/Vit +10, Wis/Will -10
R1030%ShortBow (Wind)
R2035%CrossBow (Wind)
R3040%GreatBow (Wind) Str +3
R4050%Archer [Bow] (Wind) Str +5
R5075%ElvenBow (Wind) (bonus v. Mage) Wis +5
R6060%Samurai [Bow] (Wind) Str +10
R8070%Artemis [Bow] (Wind) Str/Agil/Vit +10, Wis/Will -10
MR5Iron [Arrow]
R10White [Arrow] (White) (bonus v. Undead, Spirit)
R15Fire [Arrow] (Fire)
R15Ice [Arrow] (Ice)
R15Lit [Arrow] (Lit) (bonus v. Mech)
R20Darkness [Arrow] (Blind)
R30Poison [Arrow] (Poison)
R35Mute [Arrow] (Mute) (bonus v. Mage)
R40Charm [Arrow] (Charm) (bonus v. Giant)
R50Samurai [Arrow]
R1Medusa [Arrow] (Stone)
R75Artemis [Arrow] (bonus v. Dragon)
Mmetallic/magnetic (relevant for Cave Magnes)
Tthrowable
Rranged weapon (can be used from the back row without penalty)
Ccapped (no critical hits)
Wtwo-handed

Who can equip what?

M120%Iron [Shield]
M122%Shadow [Shield]
M224%1%Black [Shield]
M224%11%Paladin [Shield] (bonus v. Undead) Will +3
M326%22%Silver [Shield] (bonus v. Spirit)
M328%22%Fire [Shield] (Ice)
M330%22%Ice [Shield] (Fire) (bonus v. Lizard)
432%23%Diamond [Shield] (Lit)
M434%54%Aegis [Shield] (Stone) (bonus v. Mage) Wis +3
M536%34%Samurai [Shield]
638%35%Dragoon [Shield] (Fire, Ice, Lit) (bonus v. Dragon)
740%46%Crystal [Shield] (bonus v. Undead) Will +3
M3Iron [Helmet]
M4Shadow [Helmet]
M51Darkness [Helmet]
M611%Black [Helmet]
M721%Paladin [Helmet] (bonus v. Undead) Will +3
M822%Silver [Helmet] (bonus v. Spirit)
922%Diamond [Helmet] (Lit)
1063%Samurai [Helmet]
1174%Dragoon [Helmet] (Fire/Ice/Lit) (bonus v. Dragon)
1285%Crystal [Helmet] (F/I/L) (bonus v. Undead) Will +3
15%11%Cap
26%33%Leather [Helmet]
37%55%Gaea [Helmet] Wis/Will +3
58%77%Wizard [Helmet] (bonus v. Undead) Will +5
M710%109%Tiara (Lit) (bonus v. Dragon) Wis +10
912%1212%Ribbon (Fire, Ice, Lit, *) (bonus v. Mage)
110%11%Headband (Charm) Str +5
312%11%Bandanna Str/Vit +5
514%11%Ninja [Helmet] (Sleep) Str/Agil/Vit +3
3099%Glass [Helmet]
M41Iron [Armor]
M51Shadow [Armor]
M72Darkness [Armor]
M93Black [Armor]
M1131%Paladin [Armor] (bonus v. Undead) Will +3
M1342%Silver [Armor] (bonus v. Spirit)
M1542%Fire [Armor] (Ice)
M1742%Ice [Armor] (Fire)
1942%Diamond [Armor] (Lit)
2174%Samurai [Armor]
2385%Dragoon [Armor] (Fire, Ice, Lit) (bonus v. Dragon)
25106%Crystal [Armor] (*) (bonus v. Undead) Will +3
110%Cloth [Robe]
210%11%Leather [Robe]
310%33%Gaea [Robe] (Stone)
510%55%Wizard [Robe] Will +5
810%77%Black [Robe] Will +5
1210%99%Sorcerer [Robe] (Lit) (bonus v. Undead) Wis/Will +5
1810%106%White [Robe] (Blind) (bonus v. Undead, Spirit) Will +15
1510%Power [Robe] Str +15
2040%55%Heroine [Robe] (Hold) Str/Agil/Vit +15, Wis/Will -15
110%1Prisoner [Robe] (Sleep)
210%1Bard [Robe] (Mute)
520%21%Karate [Robe] Str +3
1030%32%Bl.Belt [Robe] Str/Vit +5
10099%2012%Adamant [Armor] (F/I/L, Charm, Hold, Sleep, *) All +15
2470%158%Ninja [Robe] Agil +3
M2Iron [Glove]
M2Shadow [Glove]
M3Darkness [Glove]
M4Black [Glove]
M511%Paladin [Glove] (bonus v. Undead) Will +3
M622%Silver [Glove] (bonus v. Spirit)
733%Diamond [Glove] (Lit)
10Zeus [Glove] (Mini) (bonus v. Giant) Str/Vit +10
853%Samurai [Glove]
963%Dragoon [Glove] (Fire, Ice, Lit) (bonus v. Dragon)
1074%Crystal [Glove] (bonus v. Undead) Will +3
M210%21%IronRing
10%32%RubyRing (Pig)
M410%44%Silver [Ring] (bonus v. Spirit)
M210%22%Strength [Ring] Str +5
510%88%Rune [Ring] (Mute) (bonus v. Mage) Wis/Will +3
2015%1210%Crystal [Ring] (Charm/Hold/Sleep) (bonus Dragon) Agi +5
610%86%Diamond [Ring] (Lit)
1015%1210%Protect [Ring] (Fire, Ice, Lit) Vit +15
Cursed [Ring] (absorbs elemental damage) All -15
(*)The Ribbon, Crystal armor, and Adamant armor all protect against various status ailments: Blind, Mute, Pig, Mini, and Toad. In addition, the Crystal armor protects against Bersk, while the Ribbon and Adamant armor confer immunity to Poison, Stone, Curse, and Death.

Who can equip what?

Item data begins at 0x79100 (no header). There are 96 weapons followed by 80 pieces of armor (some blank or unused).

00Metallic flag packed with weapon flags or MAG DEF%
hi7metallic
lo6-0MAG DEF% or . . .
6throwable
5long-range
0critical hits disabled (other bits unused or unknown)
01ATTACK or DEFENSE power
02Unknown flag (high bit) packed with ATTACK% or DEFENSE%
03Spell number (for the spellcasting items) or MAG DEF
04Shield flag (high bit) packed w/ element, status attribute code
05Monster bitmask (if set, especially effective against . . .)
hi7Undead
6Mage
5Slime
4Giant
3Spirit
2Lizard
1Mech
lo0Dragon
06Weapon-type flags packed with eligibility (who can equip)
hi7Bow
6Arrow
5Two-handed
lo4-0Eligibility code (table lookup)
07Stat bonus(es)
hi7-3Str. Agil. Vit. Wis. Will: if set, add A; if clear, deduct B.
lo2-0
AB
00030
00150
010100
011150
10055
1011010
1101515
111510

Deathlike2's Item/Equipment Guide on GameFAQs

https://gamefaqs.gamespot.com/mobile/974825-final-fantasy-iv/faqs/79748
was helpful for confirming the effects of the item-only spells. Where the tables above are a crude summary, this guide is the whole story.

Also useful for spot checks was Inven's equipment spreadsheet linked from the Free Enterprise wiki:

https://wiki.ff4fe.com/doku.php?id=guides_resources

I don't expect to revisit it and haven't bothered to clean it up -- it was written in haste -- but here's the code for the table dump. The output will differ a bit from the above because I spent some time editing it to fit within 72 columns and to expand on special properties and custom resistances.

(use srfi.13)
(use gauche.uvector)

(define (main args)
  (cond
   ((not (length=? args 2))
    (print #"Usage: ~(sys-basename (car args)) ROMFILE"))
   (else
    (with-input-from-file (cadr args)
      (lambda ()
        (load-item-names)
        (load-spell-names)
        (weapon-table)
        (armor-table)))))
  0)

(define item-icon-codes (make-vector 176))
(define item-names (make-vector 176))
(define spell-names (make-vector 72))

(define (load-item-names)
  (port-seek (current-input-port) #x78000)
  (dotimes (i 176)
    (vector-set! item-icon-codes i (read-byte))
    (vector-set! item-names i (encode (read-bytevector 8)))))

;; Offsets assume an unheadered ROM file.

(define (encode v)
  (string-trim-right
   (list->string
    (map
     (cut alist-ref text-table <> eqv?)
     (u8vector->list v)))))

;; TEXT-TABLE and ICON-TABLE were taken from

;;     https://datacrystal.tcrf.net/wiki/Final_Fantasy_IV_(SNES)/TBL

;; They're defined at the end of this file.

(define (load-spell-names)
  (port-seek (current-input-port) #x78900)
  (dotimes (i 72)
    (read-byte)
    (vector-set! spell-names i (encode (read-bytevector 5)))))

(define (weapon-table)
  (port-seek (current-input-port) #x79100)
  (let loop ((i 0))
    (if (<= 96 i)
      'done
      (let* ((record (read-bytevector 8))
             (weapon-flags (u8vector-ref record 0)))
        (format
         #t
         "~a~a~a~a~a ~3@a ~a ~a~a~a~a~a\n"
         (if (logbit? 7 weapon-flags) "M" " ")
         (if (logbit? 6 weapon-flags) "T" " ")
         (if (logbit? 5 weapon-flags) "R" " ")
         (if (logbit? 0 weapon-flags) "C" " ")
         (if (logbit? 5 (u8vector-ref record 6)) "W" " ")
         (u8vector-ref record 1)
         (hit% (logand #x7F (u8vector-ref record 2)))
         (item-name i)
         (attribute (logand #x7F (u8vector-ref record 4)))
         (monster (u8vector-ref record 5))
         (spell (u8vector-ref record 3))
         (stat-summary (u8vector-ref record 7)))
        (loop (+ 1 i))))))

(define (hit% c) (if (zero? c) "   " (format "~a%" c)))

(define (item-name i)
  (let ((body (vector-ref item-names i))
        (icon (alist-ref icon-table (vector-ref item-icon-codes i))))
    (if (and icon (string-scan body icon))
      body
      (format "~a [~a]" body icon))))

(define (attribute n)
  (fmt " (~a)" (alist-ref element-table n eqv? "Cust.")))

;; ELEMENT-TABLE is defined below.  It was adapted from the highly
;; educational FFIV Disassembly project:

;;     https://github.com/everything8215/ff4

(define (fmt template value)
  (if (zero? (string-size value))
    ""
    (format template value)))

(define (spell n)
  (fmt " (use for ~a)" (vector-ref spell-names n "Custom")))

(define (monster c)
  (fmt
   " (bonus v. ~a)"
   (string-join
    (filter-map
     (lambda (b)
       (and (logbit? b c)
            (case b
              ((0) "Dragon")
              ((1) "Mech")
              ((2) "Lizard")
              ((3) "Spirit")
              ((4) "Giant")
              ((5) "Slime")
              ((6) "Mage")
              ((7) "Undead"))))
     '(7 6 5 4 3 2 1 0))
    ", ")))

(define (stat-summary c)
  (define (plus n) (case n ((0) 3) ((1 4 7) 5) ((2 5) 10) ((3 6) 15)))
  (define (minus n) (case n ((4) 5) ((5 7) 10) ((6) 15)))
  (define (stat n)
    (case n
      ((7) "Str")
      ((6) "Agil")
      ((5) "Vit")
      ((4) "Wis")
      ((3) "Will")))
  (let ((lo (bit-field c 0 3))
        (pos (filter (cut logbit? <> c) '(7 6 5 4 3)))
        (neg (if (logbit? 2 c)
               (remove (cut logbit? <> c) '(7 6 5 4 3))
               '())))
    (let ((spos (and (pair? pos) (string-join (map stat pos) "/")))
          (sneg (and (pair? neg) (string-join (map stat neg) "/"))))
      (cond ((and spos sneg)
             (format " ~a +~a, ~a -~a" spos (plus lo) sneg (minus lo)))
            (spos (format " ~a +~a" spos (plus lo)))
            (sneg (format " ~a -~a" sneg (minus lo)))
            (else "")))))

(define (armor-table)
  (port-seek (current-input-port) #x79400)
  (let loop ((i 96))
    (if (<= 176 i)
      'done
      (let1 record (read-bytevector 8)
        (format
         #t
         "~a ~3@a ~3@a ~2@a ~3@a ~a~a~a~a\n"
         (if (logbit? 7 (u8vector-ref record 0)) "M" " ")
         (u8vector-ref record 1)
         (hit% (logand #x7F (u8vector-ref record 2)))
         (u8vector-ref record 3)
         (hit% (logand #x7F (u8vector-ref record 0)))
         (item-name i)
         (attribute (logand #x7F (u8vector-ref record 4)))
         (monster (u8vector-ref record 5))
         (stat-summary (u8vector-ref record 7)))
        (loop (+ 1 i))))))

(define
  text-table
  '((#x42 . #\A)
    (#x43 . #\B)
    (#x44 . #\C)
    (#x45 . #\D)
    (#x46 . #\E)
    (#x47 . #\F)
    (#x48 . #\G)
    (#x49 . #\H)
    (#x4A . #\I)
    (#x4B . #\J)
    (#x4C . #\K)
    (#x4D . #\L)
    (#x4E . #\M)
    (#x4F . #\N)
    (#x50 . #\O)
    (#x51 . #\P)
    (#x52 . #\Q)
    (#x53 . #\R)
    (#x54 . #\S)
    (#x55 . #\T)
    (#x56 . #\U)
    (#x57 . #\V)
    (#x58 . #\W)
    (#x59 . #\X)
    (#x5A . #\Y)
    (#x5B . #\Z)
    (#x5C . #\a)
    (#x5D . #\b)
    (#x5E . #\c)
    (#x5F . #\d)
    (#x60 . #\e)
    (#x61 . #\f)
    (#x62 . #\g)
    (#x63 . #\h)
    (#x64 . #\i)
    (#x65 . #\j)
    (#x66 . #\k)
    (#x67 . #\l)
    (#x68 . #\m)
    (#x69 . #\n)
    (#x6A . #\o)
    (#x6B . #\p)
    (#x6C . #\q)
    (#x6D . #\r)
    (#x6E . #\s)
    (#x6F . #\t)
    (#x70 . #\u)
    (#x71 . #\v)
    (#x72 . #\w)
    (#x73 . #\x)
    (#x74 . #\y)
    (#x75 . #\z)
    (#x80 . #\0)
    (#x81 . #\1)
    (#x82 . #\2)
    (#x83 . #\3)
    (#x84 . #\4)
    (#x85 . #\5)
    (#x86 . #\6)
    (#x87 . #\7)
    (#x88 . #\8)
    (#x89 . #\9)
    (#xC0 . #\')
    (#xC1 . #\.)
    (#xC2 . #\-)
    (#xC3 . #\…)
    (#xC4 . #\!)
    (#xC5 . #\?)
    (#xC6 . #\%)
    (#xC7 . #\/)
    (#xC8 . #\:)
    (#xC9 . #\,)
    (#xFF . #\space)))

(define
  icon-table
  '((#x29 . "Claw")
    (#x2A . "Rod")
    (#x2B . "Staff")
    (#x2C . "Sword")
    (#x2D . "Sword")
    (#x2E . "Sword")
    (#x2F . "Spear")
    (#x30 . "Knife")
    (#x31 . "Katana")
    (#x32 . "Star")
    (#x33 . "Boomerang")
    (#x34 . "Axe")
    (#x35 . "Wrench")
    (#x36 . "Harp")
    (#x37 . "Bow")
    (#x38 . "Arrow")
    (#x39 . "Hammer")
    (#x3A . "Whip")
    (#x3B . "Shield")
    (#x3C . "Helmet")
    (#x3D . "Armor")
    (#x3E . "Glove")
    (#x7B . "Robe")
    (#x7C . "Ring")))

(define
  element-table
  '((0 . "")
    (1 . "Fire")
    (2 . "Ice")
    (3 . "Lit")
    (4 . "Dark")
    (5 . "White")
    (6 . "Wind")
    (7 . "Drain")
    (10 . "Bersk")
    (11 . "Charm")
    (12 . "Sleep")
    (13 . "Hold")
    (14 . "Float")
    (15 . "Curse")
    (16 . "Poison")
    (17 . "Blind")
    (18 . "Mute")
    (19 . "Pig")
    (20 . "Mini")
    (21 . "Toad")
    (22 . "Stone")
    (23 . "Death")))