Four RESO type_tag values sit outside the standard Nitro set.
All appear only in variant-0 (16-byte TOC entry) RESO containers.
Tag census
| type_tag | Reads as | Description | Occurrences |
|---|---|---|---|
szl | lzs | Nested LZ11-compressed sub-RESO | 34,464 |
tad | dat | Widget placement table | 694 |
sfo | ofs | Nested uncompressed RESO | 333 |
nib | bin | Per-container blob (variable schema) | 251 |
tad β widget placement table
Static table of UI widget records used by overlay-driven 2D screens. Found
in shop/menu containers (2d/buyitem.lzs,
2d/defcos.lzs, etc.).
The buyitem.lzs tad blob holds 76 records,
each 28 bytes = 26 bytes data + 2-byte FF FF terminator
(per notes/phaseA_ghidra/DISCOVERIES.md). The richer layout
for screen-control records (used by the 12-byte sprite-place tables that
live inside the overlay code at 0x0215A538, see
sprite pipeline)
is 12 bytes:
| Offset | Size | Type | Field |
|---|---|---|---|
+0x00 | 2 | u16 | cell_id (which NCER cell to draw) |
+0x02 | 2 | u16 | palette / style bank |
+0x04 | 2 | u16 | sub_index (secondary index for compound widgets) |
+0x06 | 2 | u16 | flags |
+0x08 | 2 | u16 | screen_x (0..256) |
+0x0A | 2 | u16 | screen_y (0..192) |
Example: buyitem screen widget table at 0x0215A538
| # | cell | pal | sub | flags | X | Y | Notes |
|---|---|---|---|---|---|---|---|
| 0 | 6 | 9 | 21 | 0 | 10 | 92 | Left-side icon |
| 1 | 6 | 9 | 21 | 0 | 220 | 92 | Right-side icon |
| 2 | 7 | 9 | 22 | 0 | 128 | 107 | Center icon |
| 3 | 3 | 9 | 18 | 0 | 125 | 100 | Center near-button |
| 4 | 4 | 12 | 19 | 24 | 128 | 96 | Main center |
| 5 | 5 | 13 | 20 | 25 | 128 | 96 | Main center alt |
| 6 | 0 | 10 | 15 | 0 | 128 | 96 | BG center |
| 7 | 8 | 14 | 23 | 27 | 128 | 96 | Effect center |
| 8 | 1 | 10 | 16 | 0 | 128 | 96 | UI alt 1 |
| 9 | 2 | 11 | 17 | 0 | 128 | 96 | UI alt 2 |
| 10 | 0 | 0 | 0 | 0 | 0 | 0 | Zero terminator |
nib β per-container binary
No single schema β each container's nib payload uses its own
layout. Notable instances:
global.lzs#33,#36,#37β system tables2d/designcloth.lzs#206..207β 256-byte recipe blobs for designer-cloth slots
sfo β nested uncompressed RESO
The payload is itself a full RESO container with its own 16-byte header. Parse recursively.
global.lzs#34, #51β sub-RESOs containing fonts / metadata2d/scrollbar.ofs#0β nested chrome assets- 6 RESO containers in the corpus are "nested-sfo" (mostly chrome)
szl β nested LZ11 sub-blob
Payload is an LZ11 stream with no LZS wrapper. Decompress with
decompress_lz11() (skip the wrapper-strip step). After
decompression the bytes are typically another RESO container.
Example: title_pack.ofs has 5 szl entries, each
decompressing to an ~80β90 KB inner RESO holding two 256Γ192 8bpp BG
screens (top + bottom of the title for one season-of-day variant).
Container shapes
| Pattern | Count |
|---|---|
| Only empty TOC entries (placeholders) | 1,477 |
| Non-UI script / message / text | 348 |
| 3D-only (tbsn / mbsn / cbsn) | 186 |
| NCER-bearing, no static recipe (code-driven) | 123 |
| LZS-wrapped atlases | 123 |
| NCER-bearing + recipe: 37 rnan-only, 8 tad, 5 nib | 50 |
| NCER-less (BG-only) containers | 30 |
| Nested-sfo containers | 6 |
Source
notes/all_sections/01_full_survey.txtβ full type_tag histogramnotes/phaseA_ghidra/BUYITEM_RECIPE_CRACKED.mdβ widget table decodenotes/phaseA_ghidra/DISCOVERIES.mdβ Konami quirks index