OBD:CRSA: Difference between revisions

705 bytes removed ,  25 September 2007
m
besser so... ^_^
m (design)
m (besser so... ^_^)
Line 20: Line 20:
{{OBDtr| 0x01C | int32    |FF8000| 14 00 00 00 | 20        | array capacity }}
{{OBDtr| 0x01C | int32    |FF8000| 14 00 00 00 | 20        | array capacity }}
{{OBDtrBK}}
{{OBDtrBK}}
 
{{OBDtr2|0x000 | char[160]|FFC8C8| _lvl_3_Intro_TCL_A_corpse.dat| space for notes; probably the name of the source file }}
{{OBDtr2|0x000 | char[160]|FFC8C8| _lvl_3_Intro...          | space for notes; probably the name of the source file }}
{{OBDtr| 0x0A0 | link    |FFFFC8| 01 36 02 00 | 566        | link to 00566-TCTF_lite_1.[[OBD:ONCC|ONCC]] }}
{{OBDtr| 0x0A0 | link    |FFFFC8| 01 36 02 00 | 566        | link to 00566-TCTF_lite_1.[[OBD:ONCC|ONCC]] }}
{{OBDtr| 0x0A4 | float    |C8FFC8| C1 74 66 3F | 0.900219  | transformation matrix of the pelvis, xx term }}
|- ALIGN=CENTER VALIGN=TOP
{{OBDtr| 0x0A8 | float    |C8FFC8| 00 78 3E 3D | 0.046501  | transformation matrix of the pelvis, xy term }}
|0xA4||matrix||
{{OBDtr| 0x0AC | float    |C8FFC8| 45 AB DD 3E | 0.432947  | transformation matrix of the pelvis, xz term }}
{|border=1 cellspacing=0 style="white-space:nowrap"
{{OBDtr| 0x0B0 | float    |C8FFC8| A6 8B 7D 3D | 0.061901  | transformation matrix of the pelvis, yx term }}
|-BGCOLOR="#C8FFC8"
{{OBDtr| 0x0B4 | float    |C8FFC8| 19 73 7F BF | -0.997850  | transformation matrix of the pelvis, yy term }}
|C1 74 66 3F||00 78 3E 3D||45 AB DD 3E
{{OBDtr| 0x0B8 | float    |C8FFC8| EE 67 B0 BC | 0.021534  | transformation matrix of the pelvis, yz term }}
|-BGCOLOR="#C8FFC8"
{{OBDtr| 0x0BC | float    |C8FFC8| 03 AE DC 3E | 0.431015  | transformation matrix of the pelvis, zx term }}
|A6 8B 7D 3D||19 73 7F BF||EE 67 B0 BC
{{OBDtr| 0x0C0 | float    |C8FFC8| 82 2C 3D 3D | 0.0461850  | transformation matrix of the pelvis, zy term }}
|-BGCOLOR="#C8FFC8"
{{OBDtr| 0x0C4 | float    |C8FFC8| 8D B2 66 BF | -0.901162  | transformation matrix of the pelvis, zz term }}
|03 AE DC 3E||82 2C 3D 3D||8D B2 66 BF
{{OBDtr| 0x0C8 | float    |C8FFC8| C5 FA E7 41 | 28.997446  | x-position of the pelvis }}
|-BGCOLOR="#C8FFC8"
{{OBDtr| 0x0CC | float    |C8FFC8| 2E 2B CB C1 | -25.396084 | y-position (height) of the pelvis }}
|C5 FA E7 41||2E 2B CB C1||58 B4 45 C1
{{OBDtr| 0x0D0 | float    |C8FFC8| 58 B4 45 C1 | -12.356529 | z-position of the pelvis }}
|}
|
{|border=1 cellspacing=0 style="white-space:nowrap"
|0.900219||0.046501||0.432947
|-
|0.061901||-0.997850||0.021534
|-
|0.431015||0.0461850||-0.901162
|-
|-
|colspan=6| After the pelvis follows the data (same structure as the light green coloured fields) for the other 18 bodyparts (see [[OBD:TRIA#Bones|TRIA]] file). The end of every element contains the bounding box data (see rows below).
|28.997446||-25.396084||-12.356529
{{OBDtr| 0x434 | float    |C8FFFF| D4 22 8C 41 | 17.517006  | minimal x-position of the bounding box }}
|}
{{OBDtr| 0x438 | float    |C8FFFF| 95 50 E9 C1 | -29.164347 | minimal y-position (height) of the bounding box }}
|ALIGN=LEFT|transform matrix for the pelvis (in world space)
{{OBDtr| 0x43C | float    |C8FFFF| BC 31 9C C1 | -19.524284 | minimal z-position of the bounding box }}
{{OBDtrBK|0xD4-0x434 : transform matrices for the other 18 bones}}
{{OBDtr| 0x440 | float    |C8FFFF| 75 E6 14 42 | 37.225056  | maximal x-position of the bounding box }}
|- ALIGN=CENTER VALIGN=TOP
{{OBDtr| 0x444 | float    |C8FFFF| 2E 20 B1 C1 | -22.140713 | maximal y-position (height) of the bounding box }}
|0x434||AABB||
{{OBDtr| 0x448 | float    |C8FFFF| 07 B1 D3 C0 | -6.615360 | maximal z-position of the bounding box }}
{|border=1 cellspacing=0 style="white-space:nowrap"
|-BGCOLOR="#C8FFFF"
|D4 22 8C 41||95 50 E9 C1||BC 31 9C C1
|-BGCOLOR="#C8FFFF"
|75 E6 14 42||2E 20 B1 C1||07 B1 D3 C0
|}
|
{|border=1 cellspacing=0 style="white-space:nowrap"
|17.517006||-29.164347||-19.524284
|-
|37.225056||-22.140713||-6.615360
|}
|ALIGN=LEFT|bounding box for the whole corpse
|}
|}


;Bones
:Here is one of the few places where the bone count 19 is apparently hardcoded.
:I.e., custom characters with weird bone counts won't work. See, e.g., [[OBD:TRIA#Bones|TRIA]]


;What's in a bone?
;What's in a bone?
:The transformation matrix and the offset.
:The transformation matrix (3D rotation/scale/shear/mirror and translation)
 
::can be seen as four 3D vectors '''X''', '''Y''', '''Z''', and '''R''' in world space.
:The transformation matrix can define rotation, stretching, mirroring etc, in the following way.
:It can be seen as three 3D vectors '''x''', '''y''' and '''z''' (see table below).
 
:If a bone mesh has a vertex at (x, y, z) in its native coordinates,
:If a bone mesh has a vertex at (x, y, z) in its native coordinates,
::then the actual position of that vertex in the level will be '''R''' + x '''x''' + y '''y''' + z '''z'''
::then the actual position of that vertex in the level will be '''R''' + x '''X''' + y '''Y''' + z '''Z'''
:That's the transformation defined by the matrix and the offset '''R'''.
:That's the transformation defined by the 3x4 transform matrix.
Reminder : the 2nd coordinate of '''X''', '''Y''', '''Z''', and '''R''' is the height.


Reminder : the 2nd coordinate of '''R''' is the height; same for '''x''', '''y''' and '''z'''.
;Authoring
:The script command [[make_corpse]](filename) creates a separate corpse file in the Oni folder.
:The pose of the corpse is taken from the player character. The format is roughly as above.
:The contents of the files thus created can then be inserted as elements in a level's CRSA.




{{OBD_File_Footer | type=CRSA | prev=CONS | next=DOOR | name=Corpse Array | family=Level}}
{{OBD_File_Footer | type=CRSA | prev=CONS | next=DOOR | name=Corpse Array | family=Level}}