At a glance

Magic
none - static data in SCUS_942.54
Where
DAT_80074368, 12-byte stride, 256 ids; name pointers read as PTR_DAT_8007436C[id*3]
Id range
0x00..=0xFF; id 0 = "no item"
Parser
legaia_asset::item_names::ItemNameTable
Confidence
Confirmed - index form read off the MES substitution dispatch; prices verified live; disc-gated item_names_real
Used by
Enemy table (drop / steal names), Shops page, Shop subsystem, Inventory

Record layout

DAT_80xxxxxx / PTR_DAT_80xxxxxx are Ghidra labels for fixed RAM addresses; the table is static data, so each maps one-to-one back to bytes in the SCUS_942.54 file on the disc.

kind index price (u16) name_ptr (u32) desc_ptr (u32) +0 +1 +2 +4 +8 one record per item id, 12 bytes, 256 records from DAT_80074368
One item record. The MES text engine indexes the table 4 bytes in, at the name pointer.
OffsetTypeFieldMeaning
+0u8kind1 = equipment, 2 = item / consumable / key
+1u8per-kind indexequipment (kind 1): index into the stat-bonus table; items (kind 2): effect subtype into the item-effect table, which also carries the accessory-passive index
+2u16shop pricegold the buy/sell UI charges; 0 = quest / found-only item the shop never prices
+4u32name_ptrpointer to the NUL-terminated display name
+8u32desc_ptrpointer to the info-window description the pause menu prints below the name; consumables carry an effect sentence, accessories their class word, many equipment ids share an empty / Best:-class slot
  • The record proper starts at DAT_80074368; the MES 0xC2/0xC4 substitution indexes by the name pointer at +4, which is why the name view reads PTR_DAT_8007436C[id*3].
  • The price at +2 is decisive - verified live: War God Band = 21000, Healing Leaf = 100, Ra-Seru / quest items = 0.
  • The table's extent is found by reading until the name_ptr words leave the PSX-EXE data segment.

Name and description strings

The strings carry the same control prefixes as every other in-game string (MES, the game's text markup): a leading 0x01 icon escape and 0xCE XX colour-control bytes. Descriptions use the MES 0x7C line-break token, decoded to '\n' by the parser. The parser strips control bytes (keeping printable ASCII) and trims whitespace. A handful of ids (0x00, 0x12, 0x1A, 0x52, 0xB9, 0xFD) have empty names - reserved / gap slots.

How we know

EvidenceAddress / testWhat it proves
MES substitution dispatch0xC2/0xC4 opcode handlersThe PTR_DAT_8007436C[id*3] index form - table base, stride, and that this is the game's own name lookup.
Item info-window rendererFUN_801D0F1C (menu overlay); funcs/overlay_menu_801d0f1c.txtDraws the +4 name at the window origin and the +8 string one text row below (WY + 0x10) - +8 is the description pointer.
Live price checksbuy/sell UI capturesThe +2 halfword is the charged price.
Disc-gated testitem_names_realPins a span of ids against the real executable through ItemNameTable's PSX-EXE t_addr → file-offset resolver.

Consumers in the project: the web viewer's enemy table joins drop ids to names through the parser; the shop randomizer reads the price slot (legaia_asset::item_names::price_slot / legaia_patcher::item_price) to drop quest items from the for-sale pool and price chest-found equipment.

See also