Author: hobbitdur

The menu module describes its UI sprites (icons, portraits, card animations, magazine pictures) with two small quad-list formats. Both map sprite ids to lists of textured quads; they differ in directory layout and quad size. The texture itself lives elsewhere (a TIM already uploaded to VRAM) — these files only carry UV/CLUT rectangles and draw offsets.

.sp1 format (icon.sp1)

Offset Size Description
0x00 4 UInt32 icon count (329 in icon.sp1)
0x04 4×N Directory, one UInt32 per icon id: {UInt16 offset from file start, UInt16 quad count}
- Quads (8 bytes each)

Each quad is 8 bytes, two packed UInt32:

  • DWord 0: bits 0-15 = texture UV (byte U, byte V) · bits 16-26 = CLUT selector (the primitive CLUT is 0x3810 + these bits) · bit 27 = semi-transparency (ABE) · bits 30-31 = texture page (E1 bits 5-6).
  • DWord 1: byte 0 = width · byte 1 = signed X offset · byte 2 = height · byte 3 = signed Y offset.

Icon ids 128-139 are not read from the file: they are the confirm/cancel/etc. button icons, redirected to a dedicated renderer that remaps them through the controller key configuration.

The text engine draws icons with control code 0x05+n (see MenuModuleRuntime); n is the icon id in this file.

.sp2 format (face.sp2, cardanm.sp2, mngrp Pos 4)

Offset Size Description
0x00 4 UInt32 sprite count
0x04 4×N UInt32 offsets from file start, one per sprite id (0 = unused id)
- Sprite records

Each sprite record is a UInt32 quad count followed by 12 bytes per quad:

Offset Size Description
0x00 1 Texture U
0x01 1 Texture V
0x02 2 CLUT id
0x04 2 Width
0x06 2 Height
0x08 1 Signed X offset from the sprite draw position
0x09 1 Signed Y offset
0x0A 2 Texture page (PS1 GPU E1 bits, masked with 0x9FF)

Known files

File Sprites Content
icon.sp1 329 UI icons (element/status symbols, cursors, button icons…)
face.sp2 64 Character and GF portraits (32×48)
cardanm.sp2 12 Triple Triad card flip animation frames (64×64)
mngrp.bin Pos 4 79 (39 used) Magazine and Chocobo World screen pictures

Addresses (FF8 PC 2000 EN)

Address Name Description
0x4B75B0 Menu_DrawSp1Icon SP1 icon renderer
0x4B73F0 Menu_GetSp1IconSize Bounding box (max width/height incl. offsets)
0x4FDCA0 Menu_DrawSp2Sprite Generic SP2 sprite renderer