OME: Difference between revisions
mNo edit summary |
|||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
[[Category: File Formats]] | [[Category: File Formats]] | ||
{{Page in progress}} | |||
OME is a model format used in [[Yakuza]], [[Yakuza 2]], and by extension, [[Ryu Ga Gotoku 1 + 2 HD Edition]]. It was phased out and replaced with [[GMD]]. | OME is a model format used in [[Yakuza]], [[Yakuza 2]], and by extension, [[Ryu Ga Gotoku 1 + 2 HD Edition]]. It was phased out and replaced with [[GMD]]. | ||
==Format Overview== | |||
A typical OME file has the following order: | |||
1) File header data | |||
2) Object/physics data* | |||
3) ODBP/MDBP block | |||
MDBP is an earlier version of OME and is not supported by the game, attempting to load one may lead to a crash. | |||
Within ODBP: | |||
1) ODBP File header data | |||
2) Mesh block (pointers, material ids etc.) | |||
3) Armature block | |||
4) File header data | |||
5) Material group** | |||
6) Mesh data (vertex info and face index table) | |||
7) End block | |||
<nowiki>*</nowiki>Does not contain physics collision mesh(stored somewhere else) but does play some role (something physics?) in case of props, otherwise don't know what this does. | |||
<nowiki>**</nowiki>Doesn't seem to control anything related to actual materials, here like materials are grouped together. | |||
== Technical Information == | |||
{| class="wikitable" | |||
|+OME Header Block | |||
!Offset | |||
!Data type | |||
!Description | |||
!Notes | |||
|- | |||
|0x00 | |||
|4 bytes | |||
|File magic | |||
|"OME" | |||
|- | |||
|0x04 | |||
|Uint32 | |||
|Version ID | |||
|Unclear if this does anything | |||
Version ids in Y1: (4, 5, 6, 2, 1, 0) | |||
|- | |||
|0x08 | |||
|Uint32 | |||
|ODBP file pointer | |||
| | |||
|- | |||
|0x10 | |||
|Uint32 | |||
|Count | |||
|Count of the entries in the next block (object/physics data block) | |||
|- | |||
|0x14 | |||
|Uint32 | |||
|Block size | |||
|Here, refers to the size of this struct | |||
|- | |||
|0x18 | |||
|Uint32 | |||
|Model "sheen/glare" strength | |||
|Controls the "glare" of the model, which is controlled by the | |||
model's texture alpha | |||
|- | |||
|0x1c | |||
|Uint32 | |||
|Mesh flag | |||
|Unclear if this does anything | |||
|} | |||
Note: This is still WIP, more info needed on this! | |||
{| class="wikitable" | |||
|+Object/physics data block | |||
! colspan="4" |Entry | |||
(Block size: 32 bytes) | |||
|- | |||
!Offset | |||
!Data type | |||
!Description | |||
!Notes | |||
|- | |||
|0x00 | |||
|Uint32 | |||
|Read flag | |||
|The whole entry will not be read if set to 0, | |||
If 1, will be read. | |||
(assumption) | |||
|- | |||
|0x04 | |||
|Uint32 | |||
|Pointer | |||
|Pointer to a field below the entries | |||
|- | |||
|0x08 | |||
|Uint32 | |||
|Unknown | |||
| | |||
|- | |||
|0x0c | |||
|Uint32 | |||
|Constant | |||
|Always FF FF FF FF | |||
|- | |||
|0x10 | |||
|Uint16 | |||
|Unknown1 | |||
| | |||
|- | |||
|0x12 | |||
|Uint16 | |||
|Unknown2 | |||
| | |||
|- | |||
|0x14 | |||
|Uint32 | |||
|Unknown | |||
| | |||
|- | |||
! colspan="4" |Field A | |||
(Block size: 16 bytes) | |||
|- | |||
!Offset | |||
!Data type | |||
!Description | |||
!Notes | |||
|- | |||
|0x00 | |||
|Uint32 | |||
|count1 | |||
|Unclear on how its used | |||
|- | |||
|0x04 | |||
|Uint32 | |||
|pointer1 | |||
|Unclear on how its used | |||
|- | |||
|0x08 | |||
|Uint32 | |||
|pointer2 | |||
| | |||
|- | |||
|0x0c | |||
|Uint32 | |||
|count2 | |||
| | |||
|- | |||
! colspan="4" |Field B (based from pointer2 and count2) | |||
(Block size: 16 bytes) | |||
|- | |||
!Offset | |||
!Data type | |||
!Description | |||
!Notes | |||
|- | |||
|0x00 | |||
|Float | |||
|X coord | |||
| | |||
|- | |||
|0x04 | |||
|Float | |||
|Y coord | |||
| | |||
|- | |||
|0x08 | |||
|Float | |||
|Z coord | |||
| | |||
|- | |||
|0x0c | |||
|Float | |||
|Unk float | |||
|Don't know what this does so far | |||
|} | |||
{| class="wikitable" | |||
|+ODBP Header Block | |||
!Offset | |||
!Data type | |||
!Description | |||
!Notes | |||
|- | |||
|0x00 | |||
|Uint32 | |||
|File magic | |||
| | |||
|- | |||
|0x04 | |||
|Uint32 | |||
|ODBP struct size | |||
| | |||
|- | |||
|0x08 | |||
|Uint32 | |||
|UNK flag | |||
|Might have a hand in vertex table row size? | |||
|- | |||
|0x0c | |||
|Uint32 | |||
|Filesize | |||
|From the magic till the end block, not till the actual EOF | |||
|- | |||
|0x20 | |||
|Uint32 | |||
|Substruct size | |||
| | |||
|- | |||
|0x24 | |||
|Uint32 | |||
|Mesh count | |||
| | |||
|- | |||
|0x28 | |||
|Uint32 | |||
|Pointer to armature | |||
| | |||
|- | |||
|0x2c | |||
|Uint32 | |||
|Bone count | |||
| | |||
|- | |||
|0x30 | |||
|Uint32 | |||
|UNK pointer | |||
|Assumed to be a pointer | |||
|- | |||
|0x48 | |||
|Uint32 | |||
|Material groups pointer | |||
| | |||
|- | |||
|0x4c | |||
|Uint32 | |||
|Physics object pointer | |||
|Struct will not exist if this is 0 | |||
|- | |||
|0x50 | |||
|Uint32 | |||
|Actual mat groups pointer | |||
|TODO: fix up these naming | |||
|} | |||
This block (Mesh table) is 128 bytes offset from the OBDP magic. | |||
{| class="wikitable" | |||
|+ODBP Block - Mesh table | |||
!Offset | |||
!Data type | |||
!Description | |||
!Notes | |||
|- | |||
|0x00 | |||
|Uint32 | |||
|Vertex table pointer | |||
| | |||
|- | |||
|0x04 | |||
|Uint32 | |||
|"End block" pointer | |||
| | |||
|- | |||
|0x08 | |||
|Uint32 | |||
|Material ID | |||
|You will see the same ID for its TXB file. | |||
If it doesnt exist or ID is not unique, (this) mesh will be untextured | |||
|- | |||
|0x0c | |||
|Uint32 | |||
|UNK variable | |||
| | |||
|- | |||
|0x10 | |||
|UNK | |||
|UNK variable | |||
| | |||
|- | |||
|0x1c | |||
|UNK | |||
|UNK variable | |||
| | |||
|- | |||
|0x20 | |||
|Float | |||
|"Origin" X | |||
| | |||
|- | |||
|0x24 | |||
|Float | |||
|"Origin" Y | |||
|Would be Z in Blender's coordinate system | |||
|- | |||
|0x28 | |||
|Float | |||
|"Origin" Z | |||
|Would be Y in Blender's coordinate system | |||
|- | |||
|0x2c | |||
|Float | |||
|UNK float | |||
| | |||
|- | |||
|0x30 - 0x3c | |||
|Uint32 | |||
|Padding | |||
| | |||
|} | |||
{| class="wikitable" | |||
|+ODBP Block - Armature table | |||
!Offset | |||
!Data type | |||
!Description | |||
!Notes | |||
|- | |||
|0x00 | |||
|Uint32 | |||
|"Sibling" pointer | |||
|It will be parented to the parent of the sibling bone, like siblings..... | |||
|- | |||
|0x04 | |||
|Uint32 | |||
|"Parent to" pointer | |||
|Pointer to what bone this will be parent to | |||
|- | |||
|0x08 | |||
|Uint32 | |||
|Bone ID | |||
| | |||
|- | |||
|0x10 | |||
|Float | |||
|Pos X | |||
| | |||
|- | |||
|0x14 | |||
|Float | |||
|Pos Y | |||
|Would be Z in Blender's coordinate system | |||
|- | |||
|0x18 | |||
|Float | |||
|Pos Z | |||
|Would be Y in Blender's coordinate system | |||
|- | |||
|0x30 | |||
|Float | |||
|UNK variable | |||
| | |||
|- | |||
|0x34 | |||
|Float | |||
|UNK variable | |||
| | |||
|- | |||
|0x38 | |||
|Float | |||
|UNK variable | |||
| | |||
|- | |||
|0x40 | |||
|Float | |||
|UNK variable | |||
| | |||
|- | |||
|0x44 - 0x4c | |||
|Uint32 | |||
|Padding | |||
| | |||
|} |
Latest revision as of 03:43, 24 March 2025
![]() |
This page is under construction Check back later for additional changes |
OME is a model format used in Yakuza, Yakuza 2, and by extension, Ryu Ga Gotoku 1 + 2 HD Edition. It was phased out and replaced with GMD.
Format Overview
A typical OME file has the following order:
1) File header data
2) Object/physics data*
3) ODBP/MDBP block
MDBP is an earlier version of OME and is not supported by the game, attempting to load one may lead to a crash.
Within ODBP:
1) ODBP File header data
2) Mesh block (pointers, material ids etc.)
3) Armature block
4) File header data
5) Material group**
6) Mesh data (vertex info and face index table)
7) End block
*Does not contain physics collision mesh(stored somewhere else) but does play some role (something physics?) in case of props, otherwise don't know what this does.
**Doesn't seem to control anything related to actual materials, here like materials are grouped together.
Technical Information
Offset | Data type | Description | Notes |
---|---|---|---|
0x00 | 4 bytes | File magic | "OME" |
0x04 | Uint32 | Version ID | Unclear if this does anything
Version ids in Y1: (4, 5, 6, 2, 1, 0) |
0x08 | Uint32 | ODBP file pointer | |
0x10 | Uint32 | Count | Count of the entries in the next block (object/physics data block) |
0x14 | Uint32 | Block size | Here, refers to the size of this struct |
0x18 | Uint32 | Model "sheen/glare" strength | Controls the "glare" of the model, which is controlled by the
model's texture alpha |
0x1c | Uint32 | Mesh flag | Unclear if this does anything |
Note: This is still WIP, more info needed on this!
Entry
(Block size: 32 bytes) | |||
---|---|---|---|
Offset | Data type | Description | Notes |
0x00 | Uint32 | Read flag | The whole entry will not be read if set to 0,
If 1, will be read. (assumption) |
0x04 | Uint32 | Pointer | Pointer to a field below the entries |
0x08 | Uint32 | Unknown | |
0x0c | Uint32 | Constant | Always FF FF FF FF |
0x10 | Uint16 | Unknown1 | |
0x12 | Uint16 | Unknown2 | |
0x14 | Uint32 | Unknown | |
Field A
(Block size: 16 bytes) | |||
Offset | Data type | Description | Notes |
0x00 | Uint32 | count1 | Unclear on how its used |
0x04 | Uint32 | pointer1 | Unclear on how its used |
0x08 | Uint32 | pointer2 | |
0x0c | Uint32 | count2 | |
Field B (based from pointer2 and count2)
(Block size: 16 bytes) | |||
Offset | Data type | Description | Notes |
0x00 | Float | X coord | |
0x04 | Float | Y coord | |
0x08 | Float | Z coord | |
0x0c | Float | Unk float | Don't know what this does so far |
Offset | Data type | Description | Notes |
---|---|---|---|
0x00 | Uint32 | File magic | |
0x04 | Uint32 | ODBP struct size | |
0x08 | Uint32 | UNK flag | Might have a hand in vertex table row size? |
0x0c | Uint32 | Filesize | From the magic till the end block, not till the actual EOF |
0x20 | Uint32 | Substruct size | |
0x24 | Uint32 | Mesh count | |
0x28 | Uint32 | Pointer to armature | |
0x2c | Uint32 | Bone count | |
0x30 | Uint32 | UNK pointer | Assumed to be a pointer |
0x48 | Uint32 | Material groups pointer | |
0x4c | Uint32 | Physics object pointer | Struct will not exist if this is 0 |
0x50 | Uint32 | Actual mat groups pointer | TODO: fix up these naming |
This block (Mesh table) is 128 bytes offset from the OBDP magic.
Offset | Data type | Description | Notes |
---|---|---|---|
0x00 | Uint32 | Vertex table pointer | |
0x04 | Uint32 | "End block" pointer | |
0x08 | Uint32 | Material ID | You will see the same ID for its TXB file.
If it doesnt exist or ID is not unique, (this) mesh will be untextured |
0x0c | Uint32 | UNK variable | |
0x10 | UNK | UNK variable | |
0x1c | UNK | UNK variable | |
0x20 | Float | "Origin" X | |
0x24 | Float | "Origin" Y | Would be Z in Blender's coordinate system |
0x28 | Float | "Origin" Z | Would be Y in Blender's coordinate system |
0x2c | Float | UNK float | |
0x30 - 0x3c | Uint32 | Padding |
Offset | Data type | Description | Notes |
---|---|---|---|
0x00 | Uint32 | "Sibling" pointer | It will be parented to the parent of the sibling bone, like siblings..... |
0x04 | Uint32 | "Parent to" pointer | Pointer to what bone this will be parent to |
0x08 | Uint32 | Bone ID | |
0x10 | Float | Pos X | |
0x14 | Float | Pos Y | Would be Z in Blender's coordinate system |
0x18 | Float | Pos Z | Would be Y in Blender's coordinate system |
0x30 | Float | UNK variable | |
0x34 | Float | UNK variable | |
0x38 | Float | UNK variable | |
0x40 | Float | UNK variable | |
0x44 - 0x4c | Uint32 | Padding |