OBD:BINA/PAR3: Difference between revisions
| No edit summary | No edit summary | ||
| Line 57: | Line 57: | ||
| {{OBDtr| 0x18 | int16      |FF8000| 01 00       | 1          | number of variables }} | {{OBDtr| 0x18 | int16      |FF8000| 01 00       | 1          | number of variables }} | ||
| {{OBDtr| 0x1a | int16      |FF8000| 01 00       | 1          | number of events/actions }} | {{OBDtr| 0x1a | int16      |FF8000| 01 00       | 1          | number of events/actions }} | ||
| {{OBDtr| 0x1c | int16      |FF8000| 01 00       | 1          | number of  | {{OBDtr| 0x1c | int16      |FF8000| 01 00       | 1          | number of emitters }} | ||
| {{OBDtr| 0x1e | int16      |FF8000| 00 01       | 256        | unknown; always the same }} | {{OBDtr| 0x1e | int16      |FF8000| 00 01       | 256        | unknown; always the same }} | ||
| |} | |} | ||
| Line 313: | Line 313: | ||
| ---- | ---- | ||
| == | ==Emitters== | ||
| Every  | Every emitter takes up 444=0x1BC bytes. The number of emitters is specified at 0x1C in the header. Each emitter has space for 12 parameters but it appears that the last 2 are never used. | ||
| http://ssg.oni2.net/images/bin_r_33.gif | http://ssg.oni2.net/images/bin_r_33.gif | ||
| Line 327: | Line 327: | ||
| {{OBDtr| 0x4C | float    |FF00FF| 00 00 20 41 | 10.000000 | amount of (sprite) copies }} | {{OBDtr| 0x4C | float    |FF00FF| 00 00 20 41 | 10.000000 | amount of (sprite) copies }} | ||
| {{OBDtr| 0x50 | int32    |FFC8C8| 00 00 00 00 | 0         | unknown }} | {{OBDtr| 0x50 | int32    |FFC8C8| 00 00 00 00 | 0         | unknown }} | ||
| {{OBDtr| 0x54 | int32    |FFC8C8| 00 00 00 00 | 0         | emit rate; can use  | {{OBDtr| 0x54 | int32    |FFC8C8| 00 00 00 00 | 0         | emit rate; can use parameters 1 and 2; possible values (in dec): | ||
| :0 - continuous (emit interval) | :0 - continuous (emit interval) | ||
| :1 - random (min interval, max interval) | :1 - random (min interval, max interval) | ||
| Line 333: | Line 333: | ||
| :3 - distance (distance) | :3 - distance (distance) | ||
| :4 - attractor (recharge time, check interval) }} | :4 - attractor (recharge time, check interval) }} | ||
| {{OBDtr| 0x58 | int32    |FFC8C8| 00 00 00 00 | 0         | position; can use  | {{OBDtr| 0x58 | int32    |FFC8C8| 00 00 00 00 | 0         | position; can use parameters 3, 4 and 5; possible values (in dec): | ||
| :0 - point | :0 - point | ||
| :1 - line (radius) | :1 - line (radius) | ||
| Line 342: | Line 342: | ||
| :6 - body-surface (offset radius) | :6 - body-surface (offset radius) | ||
| :7 - body-bones (offset radius)}} | :7 - body-bones (offset radius)}} | ||
| {{OBDtr| 0x5C | int32    |FFC8C8| 03 00 00 00 | 3         | direction; can use  | {{OBDtr| 0x5C | int32    |FFC8C8| 03 00 00 00 | 3         | direction; can use parameters 6, 7 and 8; possible values (in dec): | ||
| :0 - straight | :0 - straight | ||
| :1 - random | :1 - random | ||
| Line 350: | Line 350: | ||
| :5 - inaccurate (base angle, inaccuracy, center bias) | :5 - inaccurate (base angle, inaccuracy, center bias) | ||
| :6 - attractor}} | :6 - attractor}} | ||
| {{OBDtr| 0x60 | int32    |FFC8C8| 00 00 00 00 | 0         | speed; can use  | {{OBDtr| 0x60 | int32    |FFC8C8| 00 00 00 00 | 0         | speed; can use parameters 9 and 10; possible values (in dec): | ||
| :0 - uniform (speed) | :0 - uniform (speed) | ||
| :1 - stratified (speed 1, speed 2)}} | :1 - stratified (speed 1, speed 2)}} | ||
| {{OBDtr| 0x64 | int32    |FFC8C8| 0C 00 00 00 | 12        | orientation dir | {{OBDtr| 0x64 | int32    |FFC8C8| 0C 00 00 00 | 12        | orientation dir; possible values (in dec): | ||
| :0 - parent +X | :0 - parent +X | ||
| :1 - parent -X | :1 - parent -X | ||
| Line 370: | Line 370: | ||
| :14 - towards-emitter | :14 - towards-emitter | ||
| :15 - awayfrom-emitter}} | :15 - awayfrom-emitter}} | ||
| {{OBDtr| 0x68 | int32    |FFC8C8| 04 00 00 00 | 4         | orientation up;  | {{OBDtr| 0x68 | int32    |FFC8C8| 04 00 00 00 | 4         | orientation up; same possible values as for orientation dir }} | ||
| {{OBDtrBK}} | {{OBDtrBK|First emitter parameter }} | ||
| {{OBDtr| 0x00 | int32    |FFFFC8| 04 00 00 00 | 4         | value type: random float }} | {{OBDtr| 0x00 | int32    |FFFFC8| 04 00 00 00 | 4         | value type: random float }} | ||
| {{OBDtr| 0x04 | float    |C8FFC8| 00 00 00 3E | 0.125000  | attractor - recharge time min value }} | {{OBDtr| 0x04 | float    |C8FFC8| 00 00 00 3E | 0.125000  | attractor - recharge time min value }} | ||
| Line 379: | Line 379: | ||
| {{OBDtr| 0x18 |          |FFC8FF|             |           | not used for random float values }} | {{OBDtr| 0x18 |          |FFC8FF|             |           | not used for random float values }} | ||
| |} | |} | ||
| ---- | ---- | ||
| ---- | ---- | ||
| {{OBD BINA Footer|prev=ONIE|type=PAR3|next=SABD|name=3D Particle|onistuff=b_3d}} | {{OBD BINA Footer|prev=ONIE|type=PAR3|next=SABD|name=3D Particle|onistuff=b_3d}} | ||
Revision as of 16:39, 8 February 2008
| 
 |  |   | 
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 | 12 00 | 18 | version | 
| 0x0C | int32 | 01 20 00 00 | 0x2001 | flags1; used flags (from left to right): 
 | 
| 0x10 | int32 | 00 00 00 02 | 0x02000000 | flags2; used flags (from left to right): 
 | 
| 0x14 | int32 | 00 00 00 00 | 0 | unknown; looks like garbage data; maybe thelast one (if you read it from right to left) is a bitset too | 
| 0x18 | int16 | 01 00 | 1 | number of variables | 
| 0x1a | int16 | 01 00 | 1 | number of events/actions | 
| 0x1c | int16 | 01 00 | 1 | number of emitters | 
| 0x1e | int16 | 00 01 | 256 | unknown; always the same | 
Sprite modes:
- 0 - sprite (face camera orient to screen)
- 1 - rotated sprite (face camera orient to particle)
- 2 - beam (parallel face camera)
- 3 - arrow (parallel orient to particle)
- 7 - discus (parallel orient to particle)
- 4 - flat (perpendicular)
Contrail modes:
- 5 - contrail (orient to particle)
- 6 - contrail (face camera)
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 | not used for float values | |||
| float property Collision radius | ||||
| 0x7C | int32 | 03 00 00 00 | 3 | value type: float | 
| 0x80 | float | 00 00 00 00 | 0.0 | value | 
| 0x84 | not used for float values | |||
| Others | ||||
| 0x98 | float | 00 00 00 00 | 0.000000 | AI dodge radius | 
| 0x9C | float | 00 00 00 00 | 0.000000 | 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 | not used for float values | |||
| float property Y Scale | ||||
| 0xCC | int32 | 03 00 00 00 | 3 | value type: float | 
| 0xD0 | float | 00 00 80 3F | 1.0 | value | 
| 0xD4 | not used for float values | |||
| float property Rotation | ||||
| 0xE8 | int32 | 00 00 00 00 | 0 | value type: variable | 
| 0xEC | char[16] | "rotate" | value | |
| 0xFC | int32 | 00 00 00 00 | runtime: storage type | |
| 0x100 | int32 | 00 00 00 00 | runtime: storage offset | |
| float property Alpha | ||||
| 0x104 | int32 | 03 00 00 00 | 3 | value type: float | 
| 0x108 | float | 00 00 80 3F | 1.0 | value | 
| 0x10C | not used for float values | |||
| 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 | not used for float values | |||
| float property X Shorten | ||||
| 0x15C | int32 | 03 00 00 00 | 3 | value type: float | 
| 0x160 | float | 00 00 00 00 | 0.0 | value | 
| 0x164 | not used for float values | |||
| color property Tint | ||||
| 0x178 | int32 | 07 00 00 00 | 3 | value type: color | 
| 0x17C | float | FF FF FF FF | white | value | 
| 0x180 | not used for color values | |||
| 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 | not used for float values | |||
| 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 | not used for float values | |||
| 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 | not used for float values | |||
| 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 | not used for float values | |||
| Others | ||||
| 0x204 | int16 | 00 00 | 0 | fade in frames | 
| 0x206 | int16 | 00 00 | 0 | fade out frames | 
| 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 | not used for float values | |||
| Others | ||||
| 0x228 | int32 | 00 00 00 00 | none | particle attractor type 
 | 
| 0x22C | int32 | 00 00 00 00 | distance | particle attractor selection 
 | 
| 0x230 | 00 00 00 00 | 0 | runtime only | |
| 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 | not used for float values | |||
| 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 | not used for float values | |||
| 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 | not used for float values | |||
| 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 | not used for float values | |||
| 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 | not used for float values | |||
| Others | ||||
| 0x300 | AC 22 81 0B | 0B 81 22 AC | runtime pointer to variables | |
| 0x304 | E0 22 81 0B | 0B 81 22 E0 | runtime pointer to events/actions | |
| 0x308 | 88 24 81 0B | 0B 81 24 88 | runtime pointer to emissions | |
- 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 | storage type: float | 
| 0x14 | int32 | 30 00 00 00 | 48 | storaget offset (incremented by the storage type size 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 | not used for random float | |||
| 0x30 | not used for random float | |||
- Storage types
- 1 - int16 (storage size: 2)
- 2 - float (storage size: 4)
- 4 - string? (storage size: 16)
- 8 - color (storage size: 4)
- 4096 - pingpong state (storage size: 4)
- 4112 - action index (storage size: 4)
- 4128 - emitter (storage size: 4)
- 4144 - blast falloff (storage size: 4)
- 4160 - coord frame (storage size: 4)
- 4176 - collision orient (storage size: 4)
- 4192 - boolean (storage size: 4)
- 4208 - ambient sound (storage size: 4)
- 4224 - impulse sound (storage size: 4)
- 4240 - impact modifier (storage size: 4)
- 4256 - damage type (storage size: 4)
- 0 - normal
- 1 - minor stun
- 2 - major stun
- 3 - minor knockdown
- 4 - major knockdown
- 5 - blownup
- 6 - pickup
 
- 8192 - string? (storage size: 16)
- 16384 - string? (storage size: 16)
Actions
Every action takes up 424=0x1A8 bytes. The number of actions is specified at 0x1A in the header.
 
| Offset | Type | Raw Hex | Value | Description | 
|---|---|---|---|---|
| 0x00 | int32 | 22 00 00 00 | 34 | Action type: Rotate Y | 
| 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: storage type | 
| 0x14 | int32 | 00 00 00 00 | 0 | runtime: storage offset | 
| 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 | not used for int32 values | |||
| 0x18 | not used for int32 values | |||
Emitters
Every emitter takes up 444=0x1BC bytes. The number of emitters is specified at 0x1C in the header. Each emitter has space for 12 parameters but it appears that the last 2 are never used.
 
| 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 | runtime pointer to emitted particle class | |
| 0x44 | int32 | 47 00 00 00 | 71 | flags (from 0 to 775) | 
| 0x48 | int16 | 04 00 | 4 | unknown (from 0 to 100) | 
| 0x4A | uint16 | FF FF | 65535 | emit probability (scaled by 65535) | 
| 0x4C | float | 00 00 20 41 | 10.000000 | amount of (sprite) copies | 
| 0x50 | int32 | 00 00 00 00 | 0 | unknown | 
| 0x54 | int32 | 00 00 00 00 | 0 | emit rate; can use parameters 1 and 2; possible values (in dec): 
 | 
| 0x58 | int32 | 00 00 00 00 | 0 | position; can use parameters 3, 4 and 5; possible values (in dec): 
 | 
| 0x5C | int32 | 03 00 00 00 | 3 | direction; can use parameters 6, 7 and 8; possible values (in dec): 
 | 
| 0x60 | int32 | 00 00 00 00 | 0 | speed; can use parameters 9 and 10; possible values (in dec): 
 | 
| 0x64 | int32 | 0C 00 00 00 | 12 | orientation dir; possible values (in dec): 
 | 
| 0x68 | int32 | 04 00 00 00 | 4 | orientation up; same possible values as for orientation dir | 
| First emitter parameter | ||||
| 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 | not used for random float values | |||
| 0x14 | not used for random float values | |||
| 0x18 | not used for random float values | |||
| ONI BINARY DATA | 
|---|
| AKVA << Other file types >> CBPI | 
| BINA : Binary data | 
| ONIE << Other BINA >> SABD | 
| PAR3 : 3D Particle | 
| [[OBD:File types/{{{family}}}|{{{family}}} file]] |