OBD:BINA/PAR3
ONI BINARY DATA |
---|
AKVA << Other file types >> CBPI |
BINA : Binary data |
Start file |
ONIE << Other BINA >> SABD |
PAR3 : 3D Particle |
Struct def for OUP |
Overview @ Oni Stuff |
The following example is the raw/sep part of 3RAPenv_bomb_e06.BINA (level 0).
Header
The header takes up 780 = 0x30C bytes.
Hex | Translation | Meaning |
33 52 41 50 | PAR3 | particle 3d |
9C 06 00 00 | 1692 | 1692 bytes is the length of the following 3d particle part from this position |
9C 06 | 1692 | file size again |
12 00 | 18 | unknown; always the same |
01 20 00 00 | unknown | unknown; looks like bitsets |
00 00 00 02 | unknown | unknown; looks like bitsets |
00 00 00 00 | 0 | unknown; looks like garbage data |
01 00 | 1 | amount of variables |
01 00 | 1 | amount of events/actions |
01 00 | 1 | amount of emitted particles |
00 01 | 256 | unknown; always the same |
Event groups (0x20 - 0x5F)
Here we have 16 4-byte slots, which correspond to the following 16 particle event types :
0:update | 1:pulse | 2:start | 3:stop |
4:bgfx_start | 5:bgfx_stop | 6:hit_wall | 7:hit_char |
8:lifetime | 9:explode | A:brokenlink | B:create |
C:die | D:newattractor | E:delay_start | F:delay_stop |
The ZZZZ actions in the file (ZZZZ is specified at 0x1A above) are bound to a specific event # by means of this list.
If the 4-byte slot for event # reads XX XX YY YY, where XXXX < YYYY < ZZZZ, then event # will execute all the actions whose slot is greater or equal to XXXX, and less than YYYY.
- Example
- 3RAPglass_shard.BINA has 10 actions, distributed between events as follows :
- (0,4)(4,4)(4,4)(4,4)(4,4)(4,4)(4,7)(7,9)(9,10)(10,10)(10,10)(10,10)(10,10)(10,10)(10,10)(10,10)
- That means :
- actions {0,1,2,3} will be triggered by an update event
- actions {4,5,6} will be triggered by a hit_wall event
- actions {7,8} will be triggered by a hit_char event
- action {9} will be triggered by a lifetime event
- Back to the silly 3RAPenv_bomb_e06.BINA...
Offset | Raw hex | Value | Meaning |
---|---|---|---|
0x20 | 00 00 01 00 | 0, 1 | action 0 (actions 0 to 1) triggered by update event |
0x24 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by pulse event |
0x28 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by start event |
0x2C | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by stop event |
0x30 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by bgfx_start event |
0x34 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by bgfx_stop event |
0x38 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by hit_wall event |
0x3C | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by hit_char event |
0x40 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by lifetime event |
0x44 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by explode event |
0x48 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by brokenlink event |
0x4C | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by create event |
0x50 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by die event |
0x54 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by newattractor event |
0x58 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by delay_start event |
0x5C | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by delay_stop event |
Other crap
First of the 19 variable/constant blocks of the header : | ||
03 00 00 00 | 3 | type (3:float, 0:16-byte string) |
00 00 40 3F | 0.750000 | value |
80 0B 00 00 | unknown | value (string only) |
02 02 00 00 | unknown | value (string only) |
00 00 00 00 | unknown | value (string only) |
E8 01 EF 01 | unknown | unknown; I'd say garbage |
97 3A 42 89 | unknown | unknown; I'd say garbage |
Below follow the remaining colors. | ||
00 00 00 00 | 0.000000 | unknown |
00 00 00 00 | 0.000000 | unknown |
not used | unknown; 16 byte string | |
notfoundtex | texture name; the first 00 is the stop byte; 32 byte string | |
00 00 | 0 | unknown |
00 00 | 0 | unknown |
64 00 | 100 | unknown |
3C 00 | 60 | unknown |
00 00 00 00 | 0 | unknown |
00 00 00 00 | 0 | unknown |
00 00 00 00 | 0 | unknown |
not used | unknown; name of a particle; 64 byte string | |
AC 22 81 0B | unknown | unknown; maybe garbage? |
E0 22 81 0B | unknown | unknown; maybe garbage? |
88 24 81 0B | unknown | unknown; maybe garbage? |
Variables
Every variable takes up 52=0x34 bytes. The number of variables is specified at 0x18 in the header.
Hex | Translation | Meaning |
Variable name and type | ||
rotate | name of the variable | |
02 00 00 00 | 2 | variable type (float) |
30 00 00 00 | 48 | offset of variable data to ??? (incremented by 4 for every next variable) |
Variable value parameters | ||
04 00 00 00 | 4 | 3:single value, 4:min-max (random?), 7:... |
00 00 B4 C3 | -360.000000 | min value (or single value) |
00 00 B4 43 | 360.000000 | max value (or garbage) |
02 02 00 00 | unknown | unknown; I'd say garbage |
00 00 00 00 | unknown | unknown; I'd say garbage |
EC 01 EA 01 | unknown | unknown; I'd say garbage |
97 3A 42 89 | unknown | unknown; I'd say garbage |
Actions
Every action takes up 424=0x1A8 bytes. The number of actions is specified at 0x1A in the header.
The available actions are listed HERE, together with their 2 sets of parameters : A-parameters and B-parameters.
Hex | Translation | Meaning |
22 00 00 00 | 34 | action type (Rotate Y) |
00 00 00 00 | 0 | unknown, looks like a (big) pointer |
First of the eight A-parameters : | ||
not used | name of the parameter (e.g. variable name) | |
00 00 00 00 | 0 | type of the parameter |
00 00 00 00 | 0 | unknown; I'd say garbage |
First of the eight B-parameters : | ||
0A 00 00 00 | 10 | type of the "space" parameter : integer |
01 00 00 00 | 1 | value of the "space" parameter : world, relative, dunno |
00 00 00 00 | unknown | value (string only) |
00 00 00 00 | unknown | value (string only) |
00 00 00 00 | unknown | value (string only) |
00 00 00 00 | unknown | unknown; I'd say garbage |
00 00 00 00 | unknown | unknown; I'd say garbage |
Emitted particles
Every emitted particle takes up 444=0x1BC bytes. The number of emitted particles is specified at 0x1C in the header.
Hex | Translation | Meaning |
env_bomb_p09 | name of the particle to emit (3RAPenv_bomb_p09.BINA); 64 byte string | |
C0 92 62 00 | unknown | unknown; maybe old offset data? |
47 00 00 00 | 71 | unknown |
04 00 | 4 | unknown |
FF FF | -1 | unknown |
00 00 20 41 | 10.000000 | unknown |
00 00 00 00 | 0 | unknown |
00 00 00 00 | 0 | unknown |
00 00 00 00 | 0 | unknown |
03 00 00 00 | 3 | unknown |
00 00 00 00 | 0 | unknown |
0C 00 00 00 | 12 | unknown |
04 00 00 00 | 4 | unknown |
Below follows the first of the twelve blocks of the package. | ||
04 00 00 00 | 4 | identifier |
00 00 00 3E | 0.125000 | unknown |
00 00 00 3F | 0.500000 | unknown |
02 02 00 00 | unknown | unknown; maybe garbage? |
00 00 00 00 | unknown | unknown; maybe garbage? |
F6 01 ED 01 | unknown | unknown; maybe garbage? |
97 3A 42 89 | unknown | unknown; maybe garbage? |
AKVA << Other file types >> CBPI |
BINA : Binary data |
---|
ONIE << Other BINA >> SABD |
PAR3 : 3D Particles |