OME: Difference between revisions

From Ryu Ga Gotoku Wiki
Jump to navigation Jump to search
(Tiny edit to Format Overview)
 
(4 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]].


Line 33: Line 35:




<nowiki>*</nowiki>Unclear yet if this actually does contain physics, there seems to be coordinates for a collision shape in prop/stage object OME files.
<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.
<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

Majima construction.svg 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

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!

Object/physics data block
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
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.

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
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