Nintendo Nitro graphics formats

DS game only γ¨γ‚“γŒγ‚Šγƒœγ‚¦γ‚·γ¨γŠγ—γ‚ƒγ‚Œγͺまほう぀かい The field guide documents the DS game's internals.

NCGR / NCLR / NCER / NSCR / NANR byte layouts as the game ships them. Always wrapped in RESO β€” never standalone.

Every Nitro resource lives inside a RESO TOC entry with the corresponding reversed-ASCII type_tag. Magic identifiers on disk are little-endian 4-byte words; the reversed form spells the intuitive name (e.g. RGCN on disk β†’ NCGR read forward).

NCGR (RGCN) β€” tile graphics

Type tag rgcn. 4,337 instances.

OffsetSizeTypeField
0x004char[4]magic = "RGCN"
0x042u16byte_order_mark (0xFEFF)
0x062u16version
0x084u32file_size
0x0C2u16header_size (0x10)
0x0E2u16section_count
0x104char[4]section magic = "RAHC" (CHAR)
0x144u32section_size
0x182u16tiles_h or 0xFFFF
0x1A2u16tiles_w or 0xFFFF
0x1C4u32bpp_code (3 = 4bpp / 16-color, 4 = 8bpp / 256-color)
0x204u32mapping_type (1D / 2D OBJ mapping)
0x244u32linear_flag (0 = 8Γ—8 tiled, 1 = linear NCBR)
0x284u32tile_data_size
0x2C4u32tile_data_offset (typically 0x18, relative to RAHC start + 0x18)
0x30β€”u8[]tile pixels

Tile order in 4bpp tiled mode: 8Γ—8 tiles stored row-major, 4 bits per pixel (two pixels per byte, lo-nibble first). Tile-bank index appears in the NSCR/NCER reference (10-bit field).

0xFFFF dimensions mean "deferred" β€” for OBJ sprites the canvas comes from a paired NCER; for BG screens it comes from a paired NSCR (typically 256Γ—192 = 32Γ—24 tiles).

NCLR (RLCN) β€” palette

Type tag rlcn. 2,600 instances.

OffsetSizeTypeField
0x004char[4]magic = "RLCN"
0x104char[4]section magic = "TTLP" (PLTT)
0x144u32section_size
0x184u32bpp_code (3 = 16-color, 4 = 256-color)
0x1C4u32unknown
0x204u32palette_data_size
0x244u32palette_data_offset (typically 0x10, relative)
0x28β€”u16[]BGR555 colors

Color word layout (16-bit LE): 0BBBBB GGGGG RRRRR β€” 5 bits per channel, top bit ignored on hardware. Slot 0 is conventionally transparent in OBJ palettes.

When section_count β‰₯ 2, a "PMCP" section follows at 0x10 + ttlp_size. It maps each 16-color bank to a VRAM bank index β€” when absent, banks are assumed sequential 0..N-1.

NCER (RECN) β€” cells / OAM

Type tag recn. 1,553 instances.

OffsetSizeTypeField
0x004char[4]magic = "RECN"
0x104char[4]section magic = "KBEC" (CEBK)
0x144u32section_size
0x182u16cell_count
0x1A2u16cell_attr (0 = 8-B entries, 1 = 16-B entries with bbox)
0x1C4u32cell_data_offset (relative to KBEC+8)
0x204u32mapping_type

Cell entry (8 or 16 bytes):

OffsetSizeTypeField
+0x002u16obj_count
+0x022u16attrs
+0x044u32obj_offset (relative to OAM block)
+0x082s16xmax (only if cell_attr=1)
+0x0A2s16ymax
+0x0C2s16xmin
+0x0E2s16ymin

OAM entry (6 bytes per OBJ):

WordBitsField
attr0 (u16)0..7y (signed 8-bit, screen coord)
8rotscale
9double_size / disable
10..11obj_mode (normal/blend/window/bitmap)
12mosaic
13depth (0 = 4bpp, 1 = 8bpp)
14..15shape (square / wide / tall / forbidden)
attr1 (u16)0..8x (signed 9-bit)
9..11rotscale index / unused
12..13hflip, vflip (when rotscale=0)
14..15size
attr2 (u16)0..9tile index (10 bits β†’ into NCGR tilebank)
10..11priority
12..15palette_bank (4 bits β€” selects NCLR 16-color bank)

(shape, size) β†’ (width_px, height_px) lookup (square 0..3: 8 16 32 64; wide 0..3: 16 32 32 64; tall 0..3: 8 8 16 32). Reference: src/translator/_sprite_decode.OBJ_SIZE_LUT.

Optional extra sections after KBEC: "LBAL" (1,778 instances β€” cell state labels like "TAB1_off", "TAB1_on") and "TXEU" (1,778 β€” user extension metadata).

NSCR (RCSN) β€” BG screen / tilemap

Type tag rcsn. 1,128 instances.

OffsetSizeTypeField
0x004char[4]magic = "RCSN"
0x104char[4]section magic = "NRCS" (SCRN)
0x144u32section_size
0x182u16width_px (typically 256)
0x1A2u16height_px (typically 192)
0x1C4u32bpp_code (often 0 β€” actual bpp comes from paired NCGR)
0x204u32screen_data_size
0x24β€”u16[]screen cells, row-major (32Γ—24 = 768 cells for 256Γ—192)

Screen-cell bit layout (16-bit LE, per BG cell):

BitsField
0..9tile_index (10 bits β€” into NCGR tilebank)
10hflip
11vflip
12..15palette_bank (4 bits β€” only used for 4bpp tilesets)

NANR (RNAN) β€” animation

Type tag rnan. 225 instances.

OffsetSizeTypeField
0x004char[4]magic = "RNAN"
0x104char[4]section magic = "KNBA" (ABNK)
+0x082u16bank_count
+0x0A2u16frame_count_total

Per-bank entry: frame_count, loop mode, frame data offset. Per-frame entry: cell_idx, flag, dx, dy, duration. Animation playback is not yet decoded by the project tooling (each cell renders as a static frame).

Section-magic census

Section magicResourceOccurrences
RAHCNCGR CHAR data4,338
TTLPNCLR PLTT colors2,600
PMCPNCLR palette-bank map2,600
LBALNCER cell labels1,778
TXEUNCER user extension1,778
KBECNCER cell block1,553
NRCSNSCR screen data1,128
KNBANANR animation bank225

Cross-format references

A composed image requires resolving references across formats:

Source