OBD:BINA/PAR3
|
The following example is the raw/sep part of 3RAPenv_bomb_e06.BINA (level 0). (Another example: http://ssg.oni2.net/test.htm )
Particle dialogs: http://ssg.oni2.net/subfold/bluebox/3d-part.htm
Header
The header takes up 780 = 0x30C bytes.
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x00 | char[4] | 33 52 41 50 | PAR3 | signature |
0x04 | int32 | 9C 06 00 00 | 1692 | length of the following 3d particle part from this position |
0x08 | int16 | 9C 06 | 1692 | length again |
0x0A | int16 | 01 20 | 18 | unknown; always the same |
0x0C | int32 | 01 20 00 00 | 0x2001 | unknown; flags? |
0x10 | int32 | 00 00 00 02 | 0x20000000 | unknown; more flags? |
0x14 | int32 | 00 00 00 00 | 0 | unknown; looks like garbage data |
0x18 | int16 | 01 00 | 1 | number of variables |
0x1a | int16 | 01 00 | 1 | number of events/actions |
0x1c | int16 | 01 00 | 1 | number of emitted particles |
0x1e | int16 | 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 | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x20 | int16,int16 | 00 00 01 00 | 0, 1 | action 0 (actions 0 to 1) triggered by update event |
0x24 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by pulse event |
0x28 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by start event |
0x2C | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by stop event |
0x30 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by bgfx_start event |
0x34 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by bgfx_stop event |
0x38 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by hit_wall event |
0x3C | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by hit_char event |
0x40 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by lifetime event |
0x44 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by explode event |
0x48 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by brokenlink event |
0x4C | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by create event |
0x50 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by die event |
0x54 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by newattractor event |
0x58 | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by delay_start event |
0x5C | int16,int16 | 01 00 01 00 | 1, 1 | no action (actions 1 to 1) triggered by delay_stop event |
Particle Properties
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
float property Lifetime (seconds, 0 = live forever) | ||||
0x60 | int32 | 03 00 00 00 | 3 | value type: float |
0x64 | float | 00 00 40 3F | 0.750000 | value |
0x68 | unused for float values | |||
0x74 | E8 01 EF 01 | unknown; I'd say garbage | ||
0x78 | 97 3A 42 89 | unknown; I'd say garbage | ||
float property Collision radius | ||||
0x7C | int32 | 03 00 00 00 | 3 | value type: float |
0x80 | float | 00 00 00 00 | 0.0 | value |
0x84 | unused for float values | |||
0x90 | 00 00 00 00 | unknown; I'd say garbage | ||
0x94 | 00 00 00 00 | unknown; I'd say garbage | ||
Others | ||||
0x98 | float | 00 00 00 00 | 0.000000 | unknown (AI dodge radius ?) |
0x9C | float | 00 00 00 00 | 0.000000 | unknown (AI alert radius ?) |
0xA0 | char[16] | 00 | "" | flyby sound name |
float property Scale | ||||
0xB0 | int32 | 03 00 00 00 | 3 | value type: float |
0xB4 | float | 00 00 80 3F | 1.0 | value |
0xB8 | unused for float values | |||
0xC4 | 00 00 00 00 | unknown; I'd say garbage | ||
0xC8 | 00 00 00 00 | unknown; I'd say garbage | ||
float property Y Scale | ||||
0xCC | int32 | 03 00 00 00 | 3 | value type: float |
0xD0 | float | 00 00 80 3F | 1.0 | value |
0xD4 | unused for float values | |||
0xE0 | 00 00 00 00 | unknown; I'd say garbage | ||
0xE4 | 00 00 00 00 | unknown; I'd say garbage | ||
float property Rotation | ||||
0xE8 | int32 | 00 00 00 00 | 0 | value type: variable |
0xEC | char[16] | "rotate" | value | |
0xFC | 00 00 00 00 | unknown; I'd say garbage | ||
0x100 | 00 00 00 00 | unknown; I'd say garbage | ||
float property Alpha | ||||
0x104 | int32 | 03 00 00 00 | 3 | value type: float |
0x108 | float | 00 00 80 3F | 1.0 | value |
0x10C | unused for float values | |||
0x118 | 00 00 00 00 | unknown; I'd say garbage | ||
0x11C | 00 00 00 00 | unknown; I'd say garbage | ||
Others | ||||
0x120 | char[32] | notfoundtex | texture name or geometry name | |
float property X Offset | ||||
0x140 | int32 | 03 00 00 00 | 3 | value type: float |
0x144 | float | 00 00 00 00 | 0.0 | value |
0x148 | unused for float values | |||
0x154 | 00 00 00 00 | unknown; I'd say garbage | ||
0x158 | 00 00 00 00 | unknown; I'd say garbage | ||
float property X Shorten | ||||
0x15C | int32 | 03 00 00 00 | 3 | value type: float |
0x160 | float | 00 00 00 00 | 0.0 | value |
0x164 | unused for float values | |||
0x170 | 00 00 00 00 | unknown; I'd say garbage | ||
0x174 | 00 00 00 00 | unknown; I'd say garbage | ||
color property Tint | ||||
0x178 | int32 | 07 00 00 00 | 3 | value type: color |
0x17C | float | FF FF FF FF | white | value |
0x180 | unused for color values | |||
0x18C | 00 00 00 00 | unknown; I'd say garbage | ||
0x190 | 00 00 00 00 | unknown; I'd say garbage | ||
float property Edge Fade Min (min value used: 0, max value used: 0.95) | ||||
0x194 | int32 | 03 00 00 00 | 3 | value type: float |
0x198 | float | 00 00 00 00 | 0.0 | value |
0x19C | unused for float values | |||
0x1A8 | 00 00 00 00 | unknown; I'd say garbage | ||
0x1AC | 00 00 00 00 | unknown; I'd say garbage | ||
float property Edge Fade Max (min value used: 0, max value used: 1) | ||||
0x1B0 | int32 | 03 00 00 00 | 3 | value type: float |
0x1B4 | float | 00 00 00 3F | 0.5 | value |
0x1B8 | unused for float values | |||
0x1C4 | 00 00 00 00 | unknown; I'd say garbage | ||
0x1C8 | 00 00 00 00 | unknown; I'd say garbage | ||
float property Max Contrail (min value used: 0, max value used: 100) | ||||
0x1CC | int32 | 03 00 00 00 | 3 | value type: float |
0x1D0 | float | 00 00 00 00 | 0.0 | value |
0x1D4 | 00 00 00... | unused | unused for float values | |
0x1E0 | 00 00 00 00 | unknown; I'd say garbage | ||
0x1E4 | 00 00 00 00 | unknown; I'd say garbage | ||
float property Lens Flare Distance (min value used: 0, max value used: 9000) | ||||
0x1E8 | int32 | 03 00 00 00 | 3 | value type: float |
0x1EC | float | 00 00 00 00 | 0.0 | value |
0x1F0 | unused for float values | |||
0x1FC | 00 00 00 00 | unknown; I'd say garbage | ||
0x200 | 00 00 00 00 | unknown; I'd say garbage | ||
Others | ||||
0x204 | 00 00 | 0 | unknown | |
0x206 | 00 00 | 0 | unknown | |
0x208 | 64 00 | 100 | unknown | |
0x20A | 3C 00 | 60 | unknown | |
float property Decal Wrap Angle (min value used: 20, max value used: 120) | ||||
0x20C | int32 | 03 00 00 00 | 3 | value type: float |
0x210 | float | 00 00 70 42 | 60.0 | value |
0x214 | unused for float values | |||
0x220 | 00 00 00 00 | unknown; I'd say garbage | ||
0x224 | 00 00 00 00 | unknown; I'd say garbage | ||
Others | ||||
0x228 | 00 00 00 00 | 0 | unknown | |
0x22C | 00 00 00 00 | 0 | unknown | |
0x230 | 00 00 00 00 | 0 | unknown | |
0x234 | char[64] | 00 | "" | unknown; name of a particle |
float property Unknown Property 1 (min value used: 12, max value used: 2000) | ||||
0x274 | int32 | 03 00 00 00 | 3 | value type: float |
0x278 | float | 00 00 16 43 | 150.0 | value |
0x27C | unused for float values | |||
0x288 | 00 00 00 00 | unknown; I'd say garbage | ||
0x28C | 00 00 00 00 | unknown; I'd say garbage | ||
float property Unknown Property 2 (min value used: 15, max value used: 180) | ||||
0x290 | int32 | 03 00 00 00 | 3 | value type: float |
0x294 | float | 00 00 F0 41 | 30.0 | value |
0x298 | 00 00 00... | unused | unused for float values | |
0x2A4 | 00 00 00 00 | unknown; I'd say garbage | ||
0x2A8 | 00 00 00 00 | unknown; I'd say garbage | ||
float property Unknown Property 3 (min value used: 3, max value used: 180) | ||||
0x2AC | int32 | 03 00 00 00 | 3 | value type: float |
0x2B0 | float | 00 00 40 40 | 3.0 | value |
0x2B4 | unused for float values | |||
0x2C0 | 00 00 00 00 | unknown; I'd say garbage | ||
0x2C4 | 00 00 00 00 | unknown; I'd say garbage | ||
float property Unknown Property 4 (min value used: 20, max value used: 180) | ||||
0x2C8 | int32 | 03 00 00 00 | 3 | value type: float |
0x2CC | float | 00 00 A0 41 | 20.0 | value |
0x2D0 | unused for float values | |||
0x2DC | 00 00 00 00 | unknown; I'd say garbage | ||
0x2E0 | 00 00 00 00 | unknown; I'd say garbage | ||
float property Unknown Property 5 (min value used: 1, max value used: 100) | ||||
0x2E4 | int32 | 03 00 00 00 | 3 | value type: float |
0x2E8 | float | 00 00 40 40 | 3.0 | value |
0x2EC | unused for float values | |||
0x2F8 | 00 00 00 00 | unknown; I'd say garbage | ||
0x2FC | 00 00 00 00 | unknown; I'd say garbage | ||
Others | ||||
0x300 | AC 22 81 0B | 0B 81 22 AC | old offset data; start line of part 1 (variables) | |
0x304 | E0 22 81 0B | 0B 81 22 E0 | old offset data; start line of part 2 (events / actions) | |
0x308 | 88 24 81 0B | 0B 81 24 88 | old offset data; start line of part 3 (emitted particles) |
- Value types
- 0 - variable
- 1 - int16
- 2 - random int16:
- 3 - float
- 4 - random float (2 floats, range, min and max value)
- 5 - random float (normal distribution;)
- 6 - instance name
- 7 - color
- 8 - random color
- 9 - random color (normal distribution)
- 10 - int32
- 11 - time
Variables
Every variable takes up 52=0x34 bytes. The number of variables is specified at 0x18 in the header.
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x00 | char[16] | "rotate" | name of the variable | |
0x10 | int32 | 02 00 00 00 | 2 | variable type: float |
0x14 | int32 | 30 00 00 00 | 48 | offset of variable data to ??? (incremented by 4 for every next variable) |
Initial value | ||||
0x18 | int32 | 04 00 00 00 | 4 | value type: random |
0x1c | float | 00 00 B4 C3 | -360.000000 | min value |
0x20 | float | 00 00 B4 43 | 360.000000 | max value |
0x24 | not used for random float | |||
0x2c | int32 | EC 01 EA 01 | unknown | unknown; I'd say garbage |
0x30 | int32 | 97 3A 42 89 | unknown | unknown; I'd say garbage |
- Variable types
- 1 - int16
- 2 - float
- 4 - string?
- 8 - color
- 4096 - int32
- 8192 - string?
- 16384 - string?
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. (Not so verbose but a bit more i-candy: http://ssg.oni2.net/oni_b_32.htm )
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x00 | int32 | 22 00 00 00 | 34 | action: Rotate Y, see action types (or here) |
0x04 | int32 | 00 00 00 00 | 0 | unknown |
First variable reference | ||||
0x00 | char[16] | 00 | "" | variable name, if empty this block is not used |
0x10 | int32 | 00 00 00 00 | 0 | runtime only |
0x14 | int32 | 00 00 00 00 | 0 | unknown; I'd say garbage |
First action parameter | ||||
0x00 | int32 | 0A 00 00 00 | 10 | value type: int32 |
0x04 | int32 | 01 00 00 00 | 1 | value (rotation space) |
0x08 | not used for int32 values | |||
0x14 | int32 | 00 00 00 00 | unknown | unknown; I'd say garbage |
0x18 | int32 | 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.
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x00 | char[64] | "env_bomb_p09" | name of the particle to emit (3RAPenv_bomb_p09.BINA) | |
0x40 | int32 | C0 92 62 00 | unknown | unknown; maybe old offset data? |
0x44 | int32 | 47 00 00 00 | 71 | unknown (from 0 to 775) |
0x48 | int16 | 04 00 | 4 | unknown (from 0 to 100) |
0x4A | int16 | FF FF | -1 | unknown (from -1? to 53083?) |
0x4C | float | 00 00 20 41 | 10.000000 | amount of (sprite) copies |
0x50 | int32 | 00 00 00 00 | 0 | interval; requieres element 1; the following intervals are possible (values in dec):
(I'm not sure about this. Maybe only the next row is the interval value and requires element 1 and 2 and this row is something else.) |
0x54 | int32 | 00 00 00 00 | 0 | the same as above; requires element 2 |
0x58 | int32 | 00 00 00 00 | 0 | type; requieres element 3, 4 and 5; the following types are possible (values in dec):
|
0x5C | int32 | 03 00 00 00 | 3 | option; requieres element 6, 7 and 8; the following options are possible (values in dec):
|
0x60 | int32 | 00 00 00 00 | 0 | rate; requieres element 9 and 10; the following rates are possible (values in dec):
|
0x64 | int32 | 0C 00 00 00 | 12 | direction, requires element 11; the following directions are possible (values in dec):
|
0x68 | int32 | 04 00 00 00 | 4 | the same as above, requires element 12 |
First element (black outline) | ||||
0x00 | int32 | 04 00 00 00 | 4 | value type: random float |
0x04 | float | 00 00 00 3E | 0.125000 | attractor - recharge time min value |
0x08 | float | 00 00 00 3F | 0.500000 | attractor - recharge time max value |
0x0C | int32 | 02 02 00 00 | unused | not used for random float values |
0x10 | int32 | 00 00 00 00 | unknown | not used for random float values |
0x14 | int32 | F6 01 ED 01 | unknown | unknown; maybe garbage? |
0x18 | int32 | 97 3A 42 89 | unknown | unknown; maybe garbage? |
ONI BINARY DATA |
---|
AKVA << Other file types >> CBPI |
BINA : Binary data |
ONIE << Other BINA >> SABD |
PAR3 : 3D Particle |
[[OBD:File types/{{{family}}}|{{{family}}} file]] |