Use the script below called "rosesmonsterextract.bms", with the free program called Quickbms
http://aluigi.altervista.org/quickbms.htm
to extract just the raw models for each card in the Monster.MRG file:

Use the script below to convert the raw models obtained from
the first script into .3ds files

YugiohMesh136.jpg

Then you can use another script called yugimeshconvert.bms:

to dump the vertexes from the files you obtained from the first script.
This script must be run at the commandline:
Go to commandprompt then type in the path to quickbms.exe followed by -w (must be a lowercase w), followed by the path to yugimeshconvert.bms followed by the path to a file from the first script, followed by the folder where you want to save the vertexes.

Press enter, and the script will ask you to open another file. What it really wants to do is to have the name of the output, so type in any name such as vertexes.dat, and it will create a file called vertexes.dat that contain the vertexes.
This script is not complete, but if you want to view parts of the mesh you can use the free program called INTtoFloatConverter:

to convert the vertexes into 4ByteFloat vertexes (use option 2, the 2byteIntegers)
Then you can use cheat engine, to load the output (from the output folder), into offset 0x6e, in a clean copy of blank.3ds

If everything goes well you will have imported all the pieces of a monster mesh, that are on top of one other, and connected to each other.
Updated versions of this script, will convert better, with all of the pieces in the right spot, just like you see in the game.
Here is an example of the Panther Warrior (file 222):
222panther.jpg

You can make out the sword on the left side of the image.


The models for the creatures are stored in the MONSTER.MRG file. Each model is stored in a subfile exactly 1 Megabyte in size. The first subfile begins at offset 0 and the next one begins right after the last one ends. Their are 683 subfiles composing the entirety of the 683 Megabyte MONSTER.MRG file.

Each subfile begins with the following 4byte header:
"RH0" (which in bytes is "52 48 30 00") which we will denote as "Base"

Each "RH0" subfile is in turn composed of several different sections:

The first section which contains the model itself along with information.
Bones Start=Base + [Base+0X10]
Bones End=Base + [Base+0X10] + [Base+0X14]

Mesh Start=Base + [Base+0X20]
Mesh Division Data Start=Base + [Base+0X18]

Mesh Division End=Base + [Base+0X18] + [Base+0X1C]
Mesh End=Base + [Base+0X20] + [Base+0X24]


The second section contains the texture(s) and has the following 4byte header:
"RH2" (which in bytes is "52 48 32 00")
Texture Section Start=Base + [Base+0X08]


The third section contains animations and each of the several animations for each model have the following 4byte header:
"MOT" which in bytes and including the fourth bit is "4D 4F 54 1A"
Animation Section Start=Base + [Base+0X0C]

There are other sections past the third section that contain things such as additional textures different from the second section textures.

Format for the meshes:
Each mesh is formed of submeshes. Each submesh is either Type 1 or Type 2
Format of the Submesh Headers:

Type 1 Vertex Group Header format
[WW] 80 01 6C
{XX} ($$) 00 00
00 40 1E 30
12 04 00 00
TT 00 00 00
SS 80 (HH) 69

Where $$ is always either 00 or 80
Where XX is the number of total number of MiniSections in the submesh
HH is the size of the submesh divided by 6 counting from after .... SS 80 (HH) 69


Format of the VERTEX section for each Type 1 Submesh:

Each Submesh will have one or more MiniSections.

Each MiniSection will have a MiniHeader followed by MiniData

MiniHeader Format:

{1ByteMultipleofFour, 1ByteUnknown, 1ByteMultipleofFour, 1ByteUnknown,1Byte"Number of Vertexes in MiniSection",1ByteUnknown}
Followed by the MiniData for each vertex.

MiniData Format per each vertex specified in a MiniSection (if more then one vertex they follow each right after each other):

{2ByteSignedNormalMapping(X,Y,Z), 2ByteSignedVertex(X,Y,Z)}
The entire submesh is then padded with zeros until it ends where the next byte is a multiple of 6.
Then possibly padded with an occurrence of
00 00 00 15
Then finally might be padded with zero, one, or more occurrences of
00 00 00 00
See the document below:

Type 2 Vertex Group Header format
[WW] 80 01 68
{XX} ($$) 00 00
00 40 1E 30
12 84 00 00
SS 80 (HH) 69

Where $$ is always either 00 or 80
Where XX is the number of total number of MiniSections in the submesh
HH is the size of the submesh divided by 6 counting from after .... SS 80 (HH) 69

Format of the VERTEX section for each Type 2 Submesh:

Each Submesh will have one or more MiniSections.

Each MiniSection will have a MiniHeader followed by MiniData

MiniHeader format:

{1ByteMultipleofFour, 1ByteUnknown, 1ByteMultipleofFour, 1ByteUnknown,1Byte"Number of Vertexes in MiniSection",1ByteUnknown}
Followed by the MiniData for each vertex.

MiniData Format per each vertex specified in a MiniSection (if more then one vertex they follow each right after each other):

{6ByteUnknown,2ByteSignedNormalMapping(X,Y,Z), 2ByteSignedVertex(X,Y,Z)}
The entire submesh is then padded with zeros until it ends where the next byte is a multiple of 6.
Then possibly padded with an occurrence of
00 00 00 15
Then finally might be padded with zero, one, or more occurrences of
00 00 00 00
See the document below:


The German version needs to be updated.
[DE- German]:
Die Modelle für die Kreaturen in der MONSTER.MRG Datei gespeichert werden. Jedes Modell wird in einer Subdatei genau 1 Megabyte in der Größe gespeichert. Die erste Subdatei beginntbei Offset 0 und das nächste beginnt direkt nach der letzten endet. Deren 683 Unterdateienkomponieren die Gesamtheit der 683 Megabyte-Datei MONSTER.MRG.

Jeder beginnt mit der folgenden, 4Byte Subdatei Header:
"RH0" (das ist in Bytes "52 48 30 00"), die wir als "Basisprodukt" bezeichnet wird

Jeder "RH0" Subdatei ist wiederum aus mehreren verschiedenen Abschnitten zusammen:

Der erste Abschnitt enthält das Modell, das, zusammen mit den Informationen selber.
Bones Start = Base + [Basis +0 x10]
Bones End = Basis + [Basis +0 x10] + [Basis X14 0]

Mesh-Start = Base + [Basis X20 0]
Mesh-Abteilung Daten-Start = Base + [Basis X18 0]

Ende der Mesh-Abteilung = Basis + [Basis X18 0] + [Basis X1C 0]
Mesh-End = Basis + [Basis X20 0] + [Basis 0 x24]


Der zweite Abschnitt enthält die Textur (en) und hat die folgende, 4Byte Header:
"RH2" (das ist in Bytes "52 48 32 00")
Texture Abschnitt Start = Base + [Basis X08 0]


Der dritte Abschnitt enthält mehrere Animationen Animationen für jedes Modell und jeden der folgenden, 4Byte haben den Header:
"MOT" in Bytes einschließlich der vierte Bit gleich "54 1A 4D 4F"
Zeichentrick Abschnitt Start = Base + [Basis x0c 0]


Format für die Maschen:

Format der submesh Headers:
Vertex Group Header Format: Typ 1
[WW] 80 01 6C
{XX} ($ $) 00 00
00 40 1E 30
12 04 00 00
TT 00 00 00
HH 80 (HH) 69
Type 1-Format für jeden Abschnitt des VERTEX submesh
{1ByteMultipleofFour, 1ByteUnknown, 1ByteMultipleofFour, 1ByteUnknown,
01 00, verfügbar 2ByteSignedNormalMappings (X, Y, Z), 2ByteSignedVertexes (X, Y, Z)}

Wo $ $ ist immer entweder 00 oder 80
XX durch die Anzahl von Vertices in der untergeordneten Maschennetz
Multipliziert mit 3 ist immer gleich XX HH

Beachten Sie das Dokument unter: