The structures table (STRUCTS) consists of a number of contiguous definitions (STRUCTs), each of which contains all the information about a specific user-defined structure: there are no default data types in this table.
The location (relative to the file) and the number of elements in the table are specified by the HEADER.STRUCTSOFF and HEADER.STRUCTSCNT fields, respectively.
Structure definition
A structure (STRUCT) consists of the following information:
Name |
Offset |
Type |
Description |
---|---|---|---|
ID |
+0 |
U32 |
Structure type ID Note: only values 0x00010000-0xFFFFFE; values 0 and 0xFFFFFF are special meaning IDs. |
|
+4 |
U8[2] |
(reserved, runtime use) |
FLAGS |
+6 |
U16 |
Structure settings: 0x0001 Uncompressed TEXT field (NCF0). 0x0002 Uncompressed MODIFIER field (NCF1). |
NAME |
+8 |
U32 |
Offset structure name (relative to strings). |
TEXT |
+12 |
U32 |
Offset structure description (relative to compressed strings, or strings if NCF0). |
VARSOFF |
+16 |
U32 |
Variable table offset (relative to file) (#1) |
VARSCNT |
+20 |
U32 |
Variable table size |
SIZE |
+24 |
U32 |
Structure size [bytes] |
SRCID |
+28 |
U32 |
Source identifier of the structure |
OBCID |
+32 |
U32 |
Reference OB class ID (0=none)(#2,#3) |
ATTRIB |
+36 |
U32 |
Structure attributes: 0x000001 Structure referred to OB class (AREFOBC)(#2) 0x000002 Main structure OB class (AISOBC)(#2,#3) |
MODIFIER |
+40 |
U32 |
Offset modifiers of structure (related to compressed strings, or strings if NCF1). |
REFID |
+44 |
U32 |
Structure type reference ID (#4) |
(#1) The structure definition uses a normal variable definition table to define its elements. In this case, variable IDs are meaningless and should always be 0.
(#2) At equal non-0 OBCID value with AREFOBC attribute, there can be only one structure with AISOBC flag, while there can be 0 or more structures without AISOBC attribute.
(#3) A structure is called an "orphan" structure if it is in the condition of AREFOBC attribute set and OBCID field = 0: this condition happens when updating/removing an OB class, there are still variables (or other) referencing it.
(#4) In case of AREFOBC attribute the REFID field contains the ID of the structure as defined of the source OBB file (0 in case of AISOBC attribute).