OBD:BINA/PAR3
| ONIE << Other BINA >> SABD |
| 3D-Particles |
|---|
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 # actions in the file (# is specified at 0x1A above) are bound to a specific event by means of this list.
If the 4-byte slot for event Z reads XX XX YY YY, where XXXX < YYYY < #, then event Z will execute all the actions whose slot is greater or equal to XXXX, and less than YYYY.
- Example
- 3RAPglass_shard.BINA has 10 actions, grouped into 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? |
ONIE << Other BINA >> SABD