OBD:Data types
General notes
Struct defs
Place here suggestions for data type IDs (for new-gen struct defs).
Appearance
OUP could/should have special GUI settings for some of the types:
- Links to other resources (in the long term, also links by label and non-file ID)
- Vectors, AABBs, planes, transformation matrices, quaternions.
- Bitsets: checkboxes with labels specified in the struct def
- Same for longs with high bits/bytes and more generally, IDs.
Ideally, the labels for recurring bitsets and ID fields should be hardcoded, but it's OK to have them in struct defs ATM.
- Sorta "subtypes" for short, long, etc, depending on what function the field corresponds to (a lot of subtypes)...
- No hurry for that...
Resource links
Level ID
A few special mentions about the x2 thing and the IDs for _Tools files.
Resource ID
Those should certainly be typed: a different ID for every DAT-resource type.
RAW/SEP links
I would type those too: a different ID for every RAW/SEP-resource type.
- Note that the size of the RAW/SEP data is not always provided.
Links by label
Those are special string subtypes. I wouldn't specify them right now.
- (but you can try and draw a list of what links-by-label there are)
Links by ID
- (not to be confused with links by ID to DAT resources)
E.g., vocalization IDs, melee profile IDs, combat behaviour IDs, etc.
- In most cases, they are not links to DAT/RAW/SEP resources, but lookups to hardcoded tables (which are also part of OBD, sort of...)
Strings
checked past BINA...
16 chars
32 chars
- AGDB raw/sep parts
- AISA
- CHAR (BINA raw/sep part)
- CONS (BINA raw/sep part)
- FURN (BINA raw/sep part)
- NEUT (BINA raw/sep part)
- PATR (BINA raw/sep part)
- SNDG (BINA raw/sep part)
- TRGV (BINA raw/sep part)
- TURR (BINA raw/sep part)
- WEAP (BINA raw/sep part)
- ONIE (BINA raw/sep part)
- PAR3 (BINA raw/sep part)
- SABD (BINA raw/sep part)
- TMBD (BINA raw/sep part)
- CONS
- DOOR
- ONCC
- ONCV
- ONGS
- ONWC
- OSAm, OSGr, OSIm (OSBD raw/sep parts)
- TRAM (sound part)
- TRIG
- TURR
48 chars
63 chars
- CONS (BINA raw/sep part)
- DOOR (BINA raw/sep part)
- TRGV (BINA raw/sep part)
- TRIG (BINA raw/sep part)
- TURR (BINA raw/sep part)
64 chars
- AITR
- CHAR (BINA raw/sep part)
- CMBT (BINA raw/sep part)
- MELE (BINA raw/sep part)
- ONIE (BINA raw/sep part)
- PART (BINA raw/sep part)
- ENVP
- IGHH
- OBOA
- ONCC
- ONCP
- ONLD
- ONMA
- TRCM
- TSFL
- TURR
- WMM_
68 chars
128 chars
132 chars
160 chars
256 chars
364 chars
Floats
Float
4-byte IEEE float
- (amount, distance, angle, ...)
Vector
3 floats define a vector in 3D space
- (position, normal, scaling, ...)
Axis-aligned bounding box
2 vectors define a min corner and a max corner
- used in
Plane
4 floats define an oriented plane in 3D
- (see PLEA for algorithm)
Quaternion
4 floats define a quaternion
- (always normalized, i.e., rotation w/o scaling?)
used in
- OBAN (with translation vector after it)
- OBOA (with translation vector before it)
- TRAM (bone rotation for overlay TRAMs, without translation vector)
Translation and rotation
- 3 floats define a translation
- 3 others define a rotation (Euler angles)
- used in
- All OBJC
Transformation matrix
12 floats define a 4x4 transformation matrix
- (translation, rotation, scaling, mirroring)
used in
Integers
Mostly non-negative indices, so possibly unsigned.
- One known exception: the quantized Euler angles in TRAM
char
- ever used?
short
- everywhere...
short with high bit
used as a simple flag? (in a few places... not sure... ^^ ) (OFGA)
long
- everywhere...
long with high bit
The lower bits are used for an ID, the high bit is a flag
- used in
long with high byte
The lower bytes are used for an ID, the high byte is a group ID
- (used for MELE moves)
quantized float
e.g., quantized Euler angles in TRAM_
other stuff
lots of funny stuff in PAR3, maybe...
- funny stuff in OTLF, too...
Bitsets
1 byte
2 bytes
4 bytes
8 bytes
8-byte bitset (keypress events) only in FILM, AFAIK
Misc
32-bit color
stored as BB GG RR AA (byte swapped)
- used in
4-character codes
In various BINA raw/sep parts
OBD:AKVA_0
Pathfinding grids