OBD:BINA/PAR3: Difference between revisions
m (fixed image links and header alignment) |
(work in progress...) |
||
Line 8: | Line 8: | ||
http://ssg.oni2.net/images/bin_r_3h.gif | http://ssg.oni2.net/images/bin_r_3h.gif | ||
{ | {{Table}} | ||
{{OBDth}} | |||
| | {{OBDtr| 0x00 | char[4] |FF0000| 33 52 41 50 | PAR3 | signature }} | ||
| | {{OBDtr| 0x04 | int32 |FFFF00| 9C 06 00 00 | 1692 | length of the following 3d particle part from this position }} | ||
{{OBDtr| 0x08 | int16 |00FF00| 9C 06 | 1692 | length again }} | |||
{{OBDtr| 0x0A | int16 |00FF00| 01 20 | 18 | unknown; always the same }} | |||
{{OBDtr| 0x0C | int32 |00FFFF| 01 20 00 00 | 0x2001 | unknown; flags? }} | |||
| PAR3 | {{OBDtr| 0x10 | int32 |00FFFF| 00 00 00 02 | 0x20000000 | unknown; more flags? }} | ||
| | {{OBDtr| 0x14 | int32 |FF00FF| 00 00 00 00 | 0 | unknown; looks like garbage data }} | ||
| | {{OBDtr| 0x18 | int16 |FF8000| 01 00 | 1 | number of variables }} | ||
{{OBDtr| 0x1a | int16 |FF8000| 01 00 | 1 | number of events/actions }} | |||
| 1692 | {{OBDtr| 0x1c | int16 |FF8000| 01 00 | 1 | number of emitted particles }} | ||
| | {{OBDtr| 0x1e | int16 |FF8000| 00 01 | 256 | unknown; always the same }} | ||
| | |||
| | |||
| 1692 | |||
| | |||
| | |||
| | |||
| 18 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| 0 | |||
| | |||
| | |||
| 1 | |||
| | |||
| | |||
| 1 | |||
| | |||
| | |||
| 1 | |||
| | |||
| | |||
| 256 | |||
|} | |} | ||
===Event groups (0x20 - 0x5F)=== | ===Event groups (0x20 - 0x5F)=== | ||
Here we have 16 4-byte slots, which correspond to the following 16 particle event types : | Here we have 16 4-byte slots, which correspond to the following 16 particle event types : | ||
Line 263: | Line 228: | ||
-------- | -------- | ||
==Variables== | ==Variables== | ||
Every variable takes up 52=0x34 bytes. The number of variables is specified at 0x18 in the header. | Every variable takes up 52=0x34 bytes. The number of variables is specified at 0x18 in the header. |
Revision as of 10:11, 5 December 2007
|
The following example is the raw/sep part of 3RAPenv_bomb_e06.BINA (level 0).
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 | 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? |
ONI BINARY DATA |
---|
AKVA << Other file types >> CBPI |
BINA : Binary data |
ONIE << Other BINA >> SABD |
PAR3 : 3D Particle |
[[OBD:File types/{{{family}}}|{{{family}}} file]] |