OBD:Data types
This page is unfinished. Can you fill in any missing information? |
Following are the formats used for the various data fields in Oni's 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 resource type.
Abnormal resource ID
Most of them are "optional" links to a given resource type.
TXMP
Optional link to TXAN.
Mtrl, Impt, and ONCV
Those are just optional links to parents in the Mtrl/Impt/ONCV hierarchy.
- Children link to parent, parent doesn't link to anything.
M3GM
Last link in file (after TXMP). Never used in Oni? "Parent M3GM"? Another TXMP?
IGPG
Link before IGSA links. Never used in Oni?
PSpL and WMCL
Always links to PSpc in Oni.
PSpc
Always link to TXMP in Oni.
TMRA
Defunct resource type. Who cares?
Abnormally normal resource ID
TRAM links in FILM and TRAM are not optional. Neither is the envmap TXMP link in TXMP.
Raw/separate file links
I would type those too: a different ID for every raw/separate file resource type.
- Note that the size of the raw/separate 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 instance file resources)
E.g., vocalization IDs, melee profile IDs, combat behavior IDs, etc.
- In most cases, they are not links to level file resources, but lookups to hardcoded tables (which are also part of OBD, sort of...)
Strings
checked past BINA...
16 chars
32 chars
- AGDB raw/separate file 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, ...)
AABB
- 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/0x24
Pathfinding grids