petitcoq Posted November 19, 2023 Posted November 19, 2023 Hello, I'm currently in the process of documenting the 3DF format of Moto Racer for Windows, using 3D Model Researcher. Frist step, all Moto Racer files are packed in BFK files, and can be extracted using QuickBMS and the corresponding script. Second step, all 3DF files are the 3D models, and are organized the following way: typedef struct vec3_t vec3_t; struct vec3_t { float x; float y; float z; }; uint16_t unknown1 uint16_t number_of_vertices vec3_t vertices[number_of_vertices]; ??? unknown2[???]; // list of faces? For now I'm unable to properly render the faces, despite all of my tweaks. If anyone more experienced than me want to continue from where I left, and report its progress here, please do so. A demo of Moto Racer for Windows is available on the Internet Archive. Best regards.
theone_32 Posted July 17 Posted July 17 (edited) hi i have reversed most of the game files, including 3d models files. these are my findings on 3df and map files: 3DF file field size in bytes note header magic 2 must be = 1 vertex list vertex_count 2 number of vertices vertex 12*vertex_count 3 floats face repeated until face_vertices = 0 face_vertices 2 number of vertices per face (3 or 4) unknown 2 vertices_index 2*face_vertices indices on the vertex list MAP file field size in bytes note MAGIC 2 0x8001 (01 80) unknown 510 all zeroes face block 128*faces in 3DF see face block format face block format UV per face 2 number of UV coords per face when < 3 no UV, color is provided color 2 RGB555 unknown 124 when 3 unknown 32 U1 4 integers 0..255 U2 4 U3 4 dummy 4 V1 4 V2 4 V3 4 dummy 4 unknown 62 when 4 unknown 32 U1 4 integers 0..255 U2 4 U3 4 U4 4 V1 4 V2 4 V3 4 V4 4 unknown 62 I've also dumped SKL and ROT files entirely, presumably skeleton and poses, but I don't have enough experience to know what to do with these. I am attaching some dumper tools you can use on the game demo in the first post; i might have misnamed or misinterpreted some values; if anyone wants to give some hints it would be appreciated. rot_dumper.py skldumper.py Edited July 18 by theone_32 1
theone_32 Posted July 29 Posted July 29 (edited) hi, could you please help me decode the skl file? here's a dump of its content https://pastebin.com/raw/iRfGiw67 don't look at names i gave to the data, they might be totally wrong. the vertex list in this has the same count of the vertex list of the 3df file. this is the 3d file in obj format https://pastebin.com/raw/2xyZiHiJ any hint on what that data could mean would be appreciated! Edited July 29 by theone_32
Members marty Posted July 30 Members Posted July 30 6 hours ago, theone_32 said: hi, could you please help me decode the skl file? here's a dump of its content https://pastebin.com/raw/iRfGiw67 don't look at names i gave to the data, they might be totally wrong. the vertex list in this has the same count of the vertex list of the 3df file. this is the 3d file in obj format https://pastebin.com/raw/2xyZiHiJ any hint on what that data could mean would be appreciated! You should probably make this a seperate post
theone_32 Posted July 30 Posted July 30 (edited) Ok I partially interpreted the SKL file. Apparently it also contains the mesh again; first number of the "subentries" triplet is the face index, second and third are unknown. I don't know how to interpret the rest of the file data. here's a sample file and a quick viewer for it. thank you very much skl_viewer.py Edited August 2 by theone_32
Engineers shak-otay Posted July 30 Engineers Posted July 30 You could build an SMD file for the skeleton using the bone list and the bone translations. (I didn't see the rotations, though.)
theone_32 Posted July 30 Posted July 30 (edited) On 7/30/2025 at 3:15 PM, shak-otay said: You could build an SMD file for the skeleton using the bone list and the bone translations. (I didn't see the rotations, though.) Thank you for looking into it. I guess rotations are in the separate ROT files. Would you mind to recap what should I look for in order to reconstruct skeleton and animations? Thank you rot_dumper.py Edited August 2 by theone_32
Engineers shak-otay Posted July 30 Engineers Posted July 30 54 minutes ago, theone_32 said: Would you mind to recap what should I look for in order to reconstruct skeleton and animations? Dunno what you mean exactly, here's an example of an smd with skeleton, all rotations are 0.0 0.0 0.0, the 3 floats before are the translation values.
theone_32 Posted August 1 Posted August 1 hi, I mean I'm not sure how to interpret the data. I tried to output association between the meshes, their bones and the two lists at the beginning of the file and got this below. beside that, there are lots of other data to interpret any hint would be helpful
Engineers shak-otay Posted August 1 Engineers Posted August 1 Here's the smd I wrote of. Rotations missing as can be seen clearly, right part of picture. version 1 nodes 0 "Bone[0]" -1 1 "Bone[1]" 0 2 "Bone[2]" 1 3 "Bone[3]" 0 4 "Bone[4]" 3 5 "Bone[5]" 0 6 "Bone[6]" 5 7 "Bone[7]" 6 8 "Bone[8]" 7 9 "Bone[9]" 6 10 "Bone[10]" 9 11 "Bone[11]" 6 12 "Bone[12]" 11 13 "Bone[13]" 12 14 "Bone[14]" 11 15 "Bone[15]" 11 16 "Bone[16]" 15 end skeleton time 0 0 -0.024687 9.352681 20.445915 0.000000 0.000000 0.000000 1 -0.097155 16.245146 31.394335 0.000000 -0.000000 0.000000 2 0.744174 -0.234390 42.392040 0.000000 -0.000000 0.000000 3 0.123649 3.273157 12.504241 0.000000 -0.000000 0.000000 4 -0.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 5 -0.029245 7.080516 37.484844 0.000000 -0.000000 0.000000 6 0.054734 12.327949 10.013249 0.000000 -0.000000 0.000000 7 -2.791994 19.900967 8.992334 0.000000 -0.000000 0.000000 8 -10.755936 6.774695 11.045544 0.000000 -0.000000 0.000000 9 2.378305 19.918173 8.983233 0.000000 -0.000000 0.000000 10 10.252177 6.774122 11.059205 0.000000 -0.000000 0.000000 11 -0.044937 24.558884 10.011847 0.000000 -0.000000 0.000000 12 -4.897781 34.411449 9.759144 0.000000 -0.000000 0.000000 13 -6.013847 32.879711 17.078512 0.000000 -0.000000 0.000000 14 -0.035207 35.666115 9.207969 0.000000 -0.000000 0.000000 15 4.893816 34.444054 9.874687 0.000000 -0.000000 0.000000 16 5.889601 32.951267 17.116529 0.000000 -0.000000 0.000000 end
theone_32 Posted August 2 Posted August 2 (edited) this has been a bit tougher than I expected, but here it is, a (basic and potentially buggy) .skl viewer/.rot editor, just in case anyone finds it interesting or wants to infer files format from it. thanks @shak-otay for the hints and ideas skl_viewer6.py Edited Friday at 02:45 PM by theone_32
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now