Jump to content

Recommended Posts

Posted (edited)

Hello! I'm delving into the BMDL format from the Darkspore game, which encompasses 3D elements like meshes, and potentially bones and animations. This format appears to share similarities with SPORE's GMDL, both from RenderWare engine, though BMDL is from a more recent version.

the original game is dead, EA abandoned the game by closing the servers, but it is still possible to download the game via steam with a link, despite being named as Demo, inside the folder the game is complete with all files.

I believe that the engine used to create Darkspore is the same as that of SPORE, because their files are very similar from the outside (.package and folders). Using a software to create SPORE mods by emd4600, I was able to extract the Darkspore .package files, however it only supports files used in SPORE (like .gmdl) and .bmdl is not included.

There is broader support for GMDL thanks to developer emd4600, who focuses on SPORE files:

https://github.com/emd4600/SporeModder-Blender-Addons

Meanwhile, BMDL has limited support, with an old Blender script by emd4600, effective only for some BMDL files:

https://raw.githubusercontent.com/JeanxPereira/BMDL-Importer/main/bmdlImporter_new.py

I've made modifications to the script with ChatGPT's help to enhance compatibility with BMDL files:

https://raw.githubusercontent.com/JeanxPereira/BMDL-Importer/main/BMDL-Importer_2.8.py

These changes aim to identify 3D meshes (vertices, faces, points, normals) in the file. However, the absence of a clear pattern in BMDL's operation hampers progress. Unfortunately, I don't have extensive knowledge in Reverse Engineering.

here have some bmdl files for example:

https://github.com/JeanxPereira/BMDL-Importer

I'm grateful in advance for any help and insights on reverse engineering this format.🙂

Edited by JeanxPereira
  • JeanxPereira changed the title to Darkspore *.bmdl format
  • Engineer
Posted (edited)

Hello.

The bmdl mesh format appears to be simple. I'm pretty sure we solved this on former xentax already.

(You won't expect someone to dig into gmdl py scripts, would you?)

 

citadel_factoryarm_o1-bmdl.png

Edited by shak-otay
  • Like 1
Posted (edited)
14 hours ago, shak-otay said:

Hello.

The bmdl mesh format appears to be simple. I'm pretty sure we solved this on former xentax already.

(You won't expect someone to dig into gmdl py scripts, would you?)

 

citadel_factoryarm_o1-bmdl.png

Nice! Is it possible to establish a standard for exporting these meshes? For example, this model is one of the few I can't handle; it seems to have bones and animations, which prevents me from obtaining the meshes:
https://github.com/JeanxPereira/BMDL-Importer/raw/main/creatureeditor_el_anime_arm.bmdl
 

I couldn't find anything about these models on the internet. I even created a post on Xentax, but received no response.

Sorry, I thought that perhaps the GMDL script would be useful.
 

Edited by JeanxPereira
Posted (edited)
On 1/19/2024 at 11:06 AM, shak-otay said:

I don't see why 8k of unknown data should be a hurdle?

 

creatureeditor_el_anime.png

that is incredible, with this information it gave me a good path to follow and maybe try to create a script to convert this files

 

thank you! you are the best

 

Do you have any idea how to interpret bones in files like this?

Edited by JeanxPereira
  • Engineer
Posted (edited)

It's almost always the same procedure: search for the bone names (at 0xCD830 here), find the hierarchy table (block of numbers where the highest ones are bone count and FFFF= -1),

find the matrices.

Once you have the 3 start addresses put them into SkelFinder from Durik or use the tool from Bigchillghost.

Edited by shak-otay
  • Like 2
  • Engineer
Posted (edited)

edir: [omg I forgot that if the name length is specified as -1 then the line will be read until the first zero byte, so I now just added a [TO ZERO] type for the same thing. е_е]

-1.png.4385b59c32959535eea7ebb02c48b4dc.png

Edited by Durik256
  • Like 2
Posted
1 hour ago, Durik256 said:

edir: [omg I forgot that if the name length is specified as -1 then the line will be read until the first zero byte, so I now just added a [TO ZERO] type for the same thing. е_е]

-1.png.4385b59c32959535eea7ebb02c48b4dc.png

nice!! excellent tool

within the file is it necessary to locate a block that contains weights information?

  • Engineer
Posted (edited)
4 hours ago, JeanxPereira said:

weights information?

attrb:

VERT 12 as [3 FLOAT]
UNK 8
UVS 8 as [2 FLOAT]
COLOR? 4
WEIGHT 16 as [4 FLOAT]
BONEID 4 as [4 UBYTE]

bandicam2024-01-2219-17-36-469.gif.8cdd068fbf2ac197716aff55245c2ade.gif

*also invert bones matrices

Edited by Durik256
  • Like 2

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...