OME

From Ryu Ga Gotoku Wiki
Revision as of 03:43, 24 March 2025 by Gabehen (talk | contribs) (→‎Technical Information)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
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