Jump to content

Darkspore *.bmdl format


JeanxPereira

Recommended Posts

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
Link to comment
Share on other sites

  • JeanxPereira changed the title to Darkspore *.bmdl format
  • Engineer

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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

  • Engineer

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
Link to comment
Share on other sites

  • Engineer

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
Link to comment
Share on other sites

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?

Link to comment
Share on other sites

  • Engineer
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
Link to comment
Share on other sites

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...