Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ROB File Format

Binary container format. Holds multiple 3D model segments — either embedded inline or as references to external .3DC files.

ROB stores model geometry buckets, not per-instance scene placement transforms. World/object placement comes from scene files (RGM), which reference these models.

Overall Structure

[Header — 20 bytes]
[Segment 0 — 80-byte header + data]
[Segment 1 — 80-byte header + data]
...
[Segment N-1]
[Footer — 4 bytes: "END "]

Some fields use big-endian encoding (a remnant of the original Sega Saturn development), while most use little-endian. Endianness is noted per field.

Header (20 bytes)

OffsetSizeTypeEndianNameDescription
0x004[u8; 4]magic"OARC" — possibly “Object ARChive”; exact expansion unknown.
0x044u32BEunused_04Always 4. Unused at runtime — the engine reads the file but never dereferences or tests this field. Likely a build-tool artifact.
0x084u32LEnum_segmentsNumber of segments.
0x0C4[u8; 4]magic2"OARD" — possibly “Object ARchive Data”; exact expansion unknown.
0x104u32BEpayload_sizeFile size minus 24 (= file size - 20-byte header - 4-byte footer).

Segment Header (80 bytes)

Each segment has a fixed 80-byte header followed by data_size bytes of payload.

OffsetSizeTypeEndianNameDescription
0x004u32LEtotal_sizeData size + 80 (total segment size including header).
0x048[u8; 8]nameSegment name, ASCII null-padded. Model name or external .3DC filename stem.
0x0C2u16LEsegment_type0 = embedded 3D data, 512 = external .3DC reference. See below.
0x0E2u16LEsegment_flagsRender mode flags. Only the high byte (at file offset 0x0F) is used at runtime — it becomes a render mode selector. A value of 0 defaults to 0xFF (normal rendering). See Segment Flags below.
0x101u8segment_attribsPer-segment attribute flags. Only this single byte is read at runtime. Bit 1 (0x02) triggers texture pre-loading. Value 0x40 marks special objects (inventory items, shop objects). See Segment Attributes below.
0x113face_count_lowBuild tool artifact: the last byte (0x13) equals face_count mod 256. Not read at runtime.
0x144u32BEunused_14Unused — never read at runtime. Most commonly 1 (3,690 segments), but other values exist.
0x184u32reserved_18Always 0.
0x1C4u32LEbbox_extent_xBounding box total X extent.
0x204u32LEbbox_extent_yBounding box total Y extent.
0x244u32LEbbox_extent_zBounding box total Z extent.
0x284u32reserved_28Always 0.
0x2C4u32reserved_2CAlways 0.
0x304u32reserved_30Always 0.
0x344u32LEbbox_positive_xPositive X extent from center.
0x384u32LEbbox_positive_yPositive Y extent from center.
0x3C4u32LEbbox_positive_zPositive Z extent from center.
0x404u32LEbbox_negative_xNegative X extent from center.
0x444u32LEbbox_negative_yNegative Y extent from center.
0x484u32LEbbox_negative_zNegative Z extent from center.
0x4C4u32LEdata_sizeByte count of the data payload that follows. 0 for external references.

Bounding Box Invariant

bbox_extent == bbox_positive + bbox_negative for all three axes.

For symmetric models: bbox_positive == bbox_negative (center at origin). For asymmetric models, the difference encodes the center offset.

Segment Types

TypeDescription
0Embedded 3D model data. Payload is a complete 3D file (v5.0 format).
256Embedded 3D model data (menu-specific). Only in MENU.ROB. Structurally identical to type 0 — payload is a complete 3D file. Uses versions v4.0 and v4.02 (v4.02 is unique to these segments).
512External reference. name is the .3DC filename stem (e.g. "CYRSA001"CYRSA001.3DC). data_size is 0.

Segment Flags (0x0E)

The engine reads only the high byte (file offset 0x0F) of this u16 field. The low byte is always 0x00 and is ignored. The high byte is stored as a render mode selector in the model’s internal data — a value of 0 defaults to 0xFF (standard rendering).

ValueHigh byteNamesRender mode
0x00000x00 → 0xFF(all normal)Standard (default)
0x8C000x8CDR_WA01, DR_WA02, LH_MIRRTransparency / mirror
0xC8000xC8WATERWATWater
0x80000x80VR_OHTStored as render-mode metadata
0x5A000x5ABEAMA001Beam / light effect

Segment Attributes (0x10)

A single byte of per-segment attribute flags.

ValueSegmentsMeaning
0x00(all normal)No special attributes
0x02PALMTR01–04 (CAVERNS, EXTPALAC, ISLAND)Texture pre-load trigger (bit 1). Engine calls a texture pre-caching function for all face textures in this segment.
0x40SS_OBJ01–06, IGRING, IWATER1 (shop items, inventory)Special object flag (bit 6). Stored as model metadata.

Segment Data

For segment_type == 0 (embedded): the data payload is a complete 3D model file starting with its own 64-byte header. Parse with the standard 3D parser.

For segment_type == 256 (menu-specific embedded): same as type 0 — payload is a complete 3D model file. Parse identically. See MENU.ROB Segments below.

For segment_type == 512 (external reference): no data payload. Load the referenced .3DC file from the asset directory using name as the filename stem. External references are exclusively .3DC (animated models) — static .3D geometry is always embedded inline as type 0 segments, never referenced externally.

MENU.ROB is the only ROB file containing type 256 segments. It holds 3D models used for the game’s menu screens.

#NameTypeSizeVersionNotes
0MENUA00125679,328v4.0Menu character model (also exists as standalone MENUA001.3DC in /fxart)
1MB_TABLE0886v5.0Small prop
2MB_PG0125642,208v4.02Menu page model
3MB_PG0225642,208v4.02Menu page model (same size as PG01)
4MB_PG0325642,208v4.02Menu page model (same size as PG01)
5SCROLL08,136v5.0Scroll decoration prop

Version v4.02 appears only in these three MB_PG segments — it is not found in any other ROB file or standalone 3D/3DC file.

4-byte ASCII marker: "END " (with trailing space). Always present.

External References