Page 1 of 5

R2 Online models

Posted: Thu Feb 05, 2009 5:16 pm
by pixellegolas
Hi!

In another thread we found tools to open the protected archives for this game. Now I want to know if someone could take a look at the file structure for models to see if we can convert to something useful. Thanks in advance

Here is the thread:

viewtopic.php?f=10&t=3255

Re: R2 Online models

Posted: Fri Feb 06, 2009 5:21 pm
by Theran
Only had a small time to look at it but this is what I got so far using the same file from the thread posted above:

Code: Select all

file name: c00001.rmb (assuming rmb = model and rab = animation)
DWORD unknown1[6]; // sample file had the first 24 bytes set to 0
DWORD textureCount; // (?) value was 1 - total count for all model/objects in file?
DWORD modelCount; // (?) value was 1 - total count for all model/objects in file?
DWORD boneCount; // value was 9 and matches the number of "Bone##" entries in the .rab file. also position 0x1C had the value of 9 in the .rab file so I'm assuming this is correct. 
DWORD dataOffset; // this should be correct as well.
char textureFilename[260]; // file name is 0 terminated and then padded to fit at least 260 bytes (which is the maximum length for a path in Windows)
DWORD unknown2[2]; // no idea what this means, could be file padding, file had the following values: 0x00000000 and 0xFFFFFFFF

// file position: 0x130, contains the word "Box03", will get back to this later since I'm currently at work
char objName[64]; // name/reference or something, 64 bytes long, mainly filled with 0's
char name[64]; // same as above, has the name 'root' but that appears multiple times up to the dataOffset value
DWORD unknown3[2]; // (?) could be the modelCount/textureCount like above for this model/object?
DWORD vertexCount; // should be correct as well
DWORD indexCount; // should be correct

// position 0x1C0 to 0x670 is filled with zeros (no idea why or what this means)
DWORD indexCouint; // again the value is here...

// next 396 bytes are all 0 as well...
DWORD vertexCount; // again the value is here...

// 400 bytes later we get to a value of 0xFFFFFFFF
// now at position 0x998
DWORD count; // no idea. file had the value of 4
DWORD values[count]; // assuming the previous 'count' value means the number of values in some kind of DWORD array. file contained the following values: 1, 2, 5, 8

// 64 bytes later...
// file position 0x9EC
// Bone information!
struct Bone[boneCount] {
    char name[64]; // name of bone
    char parent[64]; // name of parent
    float4x4 matrixInfo[3]; // 3 4x4 matrix structures (pos, scale, rot?)
    DWORD childCount; // ?, possible... or index
    DWORD childrenIndex[]; // something like this
} // this structure is still a bit confusing to me, but I do see some patterns


As mentioned, I'm at work and will get back to this later. I will skip this part though, for now, and start at the data offset position.

Re: R2 Online models

Posted: Fri Feb 06, 2009 5:57 pm
by Theran
Opps..think I got the vertex/index count switched...have a meeting will fix later

Re: R2 Online models

Posted: Fri Feb 06, 2009 8:51 pm
by Theran
Ok, fixed the order for the vertex/index count. I've been looking over the data for the vertex data and, although they are floats, the values don't make much sense to me. I haven't found an order for position, uv coords or anything like that yet. The size is 56 bytes in length which consists of 14 float values; based on the data I saw.

Code: Select all

struct vertex {
    float data[14]; // I don't know the exact structure. yet...
} 

vertex vertices[vertexCount]; 


Immediately following the vertex data is what I believe is the bone weight list. Seems to be a group of 4 floats for each vertex. In the sample file, there were 140 vertex. 140 * 4 * 4 = 2240 bytes, which works out well for this file.

Code: Select all

struct boneWeights {
    float weights[4]; // bone weights? only saw 3 values: 0, 1, 0.5
}

boneWeights weights[vertexCount];
After this seems to be another list of data for each vertex. It's either a list of 2 DWORD values or 4 WORD values. I do not know what this represents.

This brings us to the last 1032 bytes of the file, which represent the index values. Which fits nicely since this file had a value of 516 for indexCount, which gives us 516 WORD pair values totaling 1032 bytes.

Code: Select all

WORD indices[indexCount]; 

Re: R2 Online models

Posted: Sat Feb 07, 2009 2:01 am
by pixellegolas
hm, I am very glad that you started to look at these files. I can in no way help you out when it comes to hexing this so I just hold my thumbs. I looked at the archives and there is no other file format then the ones i provided.

I wish you good luck and hope to see some results

Thanks

Re: R2 Online models

Posted: Sat Feb 07, 2009 5:22 am
by Theran
Ya, I'll take a look at it this weekend now that I have more files to look at.

Re: R2 Online models

Posted: Sat Feb 07, 2009 9:14 am
by Mr.Mouse
Nice going, Theran! :D

Re: R2 Online models

Posted: Mon Feb 09, 2009 3:25 am
by Theran
So I had a thought earlier today while looking at a different file from R2. I'm thinking the vertex data section is in itself in sections. Meaning that the first section is all the position elements (vertexCount * 3 * 4), then follows normals (vertexCount * 3 * 4), uv coords, etc...

I'm still taking a look at them but having it in this way makes a bit more sense with the values. Now I could be wrong on the order since I haven't had a chance to put any of the values into a simple 3d application.

Will need to test this out a bit more, but this layout makes some sense.

Re: R2 Online models

Posted: Mon Feb 09, 2009 7:29 pm
by Theran
Ok, does seem to be in a format like I mentioned. Vertex positional data is first, but after that I don't know. It could be normals, followed by the uv's, but I need to get the texture for it so that'll be something I'll do tonight.

I'm attaching some images for what I got so far. The first image is using what I believe to be the normal values. The second image is using computed normals.
Images rendered with OpenGL

Edit: Seems I can only do one attached file at a time, so next post will have the second image.

Re: R2 Online models

Posted: Mon Feb 09, 2009 7:30 pm
by Theran
And here's the second:

Re: R2 Online models

Posted: Mon Feb 09, 2009 7:47 pm
by chrrox
Wow that is great news you are so close to having a model viewer.
Thanks for all your hard work on this project.

Re: R2 Online models

Posted: Mon Feb 09, 2009 8:44 pm
by Theran
It's definitely a good start, but there's still a lot of info in there that we still don't know yet but we'll get there.

Re: R2 Online models

Posted: Mon Feb 09, 2009 9:52 pm
by pixellegolas
Yeah definitly cool! I saw that objects in game have another format. .r3m

I wonder if a model + texture of a static object would make things easier?

I provide the easist i can see:

R_danger_Alpha.r3m 2kb
R_danger_Alpha.dds 1kb

Re: R2 Online models

Posted: Mon Feb 09, 2009 11:08 pm
by Theran
Ya, I saw some of those as well. I will check tomorrow since I'm getting attacked by my allergies today and heading home.

Re: R2 Online models

Posted: Mon Feb 09, 2009 11:16 pm
by Mr.Mouse
Offtopic: Your allergies? What up? I've got all kinds, though, basically allergic to all kinds of stuff, what are yours?