Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

[PC] Ubisoft's .mmb model files (2d/2.5D? type games)

Featured Replies

Hello, i'm looking for a way to export the mmb file models from games that use Ubisoft's snowdrop engine, I know there's tools that can achieve this already (noesis script for Tom clancys the division) but there are certain mmb files from 2D games with this engine that can't be read by these scripts, I will attach some samples of these files, i have already tried to reverse engineer the model loading functions using IDA but it's too complex for me to do, i'm sure someone with experience can do this tho..i would be very grateful...

i only need exporting to any format really (maya, blender, anything), i don't even need the textures on the model just want the object itself without textures

thanks

 

 

mmb_samples.zip

Edited by notpies

  • Author

i will also attach the noesis script ive mentioned that works for certain mmb files (on 3d games, like tom clancys the division or mario rabbids) but not this one

 

 

fmt_TCTD_mmb.py

  • Author
1 minute ago, notpies said:

i will also attach the noesis script ive mentioned that works for certain mmb files (on 3d games, like tom clancys the division or mario rabbids) but not this one

 

 

fmt_TCTD_mmb.py 18.41 kB · 1 download

and also attaching a mmb that works with that script, however as i mentioned on the first post i need the other samples to work

bmm_workingsample.zip

  • Author
4 hours ago, shak-otay said:

Hello and thanks for the "working sample". But it's too small to draw any conclusions, imho.

thank you for the reply, unfortunately thats the only model file in the game that can be opened by the TCTD script, all the other models are in the other mmb format, so i really didn't expect to get much out of that sample, i can however upload more of the other mmb samples (the ones that i need them to load) if those i uploaded are not enough, the only thing that i know works with the TCTD script is the bone name and ID reader, so maybe that's a start

  • Supporter

ok,

prp_pushpulldestroytest_bucket.mmb has about 135 objects with maybe bounding boxes defined:

group1|floorAndObjects53plane
# 0x7ef: verts= 4
 -1.343468 -0.220959 0.001076
 1.072262 0.224435 0.001076
 1.351039 -0.135603 0.001738
 0.001076 1.218122 1.207865

group1|leftSideWallAndObjects54plane1
# 0x8a6: verts= 4
 0.732678 -0.170821 0.003166
 1.078642 0.175142 0.003166
 1.078805 0.905660 0.002160
 0.003166 0.173881 0.172982

group1|leftSideWallAndObjects18plane1
# 0x95d: verts= 4
 0.359302 0.030990 0.001916
 0.670671 0.342360 0.001916
 0.704139 0.514986 0.186675
 0.001916 0.156494 0.155685

[...]

group17|leftSideWallAndObjects29plane_4
# 0x6959: verts= 4
 -1.637227 -0.043439 0.008500
 -1.391622 0.184675 0.008500
 1.637416 -1.514424 0.070618
 0.008500 0.147115 0.122802

bink_meshplane.mmb

# 0x9f: verts= 4
v -9.599998 -5.399999 0.000000
v 9.599998 5.399999 0.000000
v 11.014533 0.000000 0.000000
v 0.000000 11.014533 9.599998

The following values should define the plane, obviously

# 0x12b: verts= 4
v 9.599998 -5.399999 0.000000
v 9.599998 5.399999 0.000000
v -9.599998 -5.399999 0.000000
v -9.599998 5.399999 0.000000

 

Couldn't find similar for the bucket, only v 32767.000000 32767.000000 32767.000000

but lots of word indices. Maybe they form 2D meshes?

 

  • Author
10 minutes ago, shak-otay said:

ok,

prp_pushpulldestroytest_bucket.mmb has about 135 objects with maybe bounding boxes defined:

group1|floorAndObjects53plane
# 0x7ef: verts= 4
 -1.343468 -0.220959 0.001076
 1.072262 0.224435 0.001076
 1.351039 -0.135603 0.001738
 0.001076 1.218122 1.207865

group1|leftSideWallAndObjects54plane1
# 0x8a6: verts= 4
 0.732678 -0.170821 0.003166
 1.078642 0.175142 0.003166
 1.078805 0.905660 0.002160
 0.003166 0.173881 0.172982

group1|leftSideWallAndObjects18plane1
# 0x95d: verts= 4
 0.359302 0.030990 0.001916
 0.670671 0.342360 0.001916
 0.704139 0.514986 0.186675
 0.001916 0.156494 0.155685

[...]

group17|leftSideWallAndObjects29plane_4
# 0x6959: verts= 4
 -1.637227 -0.043439 0.008500
 -1.391622 0.184675 0.008500
 1.637416 -1.514424 0.070618
 0.008500 0.147115 0.122802

bink_meshplane.mmb

# 0x9f: verts= 4
v -9.599998 -5.399999 0.000000
v 9.599998 5.399999 0.000000
v 11.014533 0.000000 0.000000
v 0.000000 11.014533 9.599998

The following values should define the plane, obviously

# 0x12b: verts= 4
v 9.599998 -5.399999 0.000000
v 9.599998 5.399999 0.000000
v -9.599998 -5.399999 0.000000
v -9.599998 5.399999 0.000000

 

Couldn't find similar for the bucket, only v 32767.000000 32767.000000 32767.000000

but lots of word indices. Maybe they form 2D meshes?

 

hmm..yeah its probably 2d meshes, not 100 percent sure

btw the game the models are from is: https://tcrf.net/South_Park:_The_Fractured_But_Whole (just for more context)

  • notpies changed the title to [PC] Ubisoft's .mmb model files (2d/2.5D? type games)
  • Author
5 hours ago, shak-otay said:

ok,

prp_pushpulldestroytest_bucket.mmb has about 135 objects with maybe bounding boxes defined:

group1|floorAndObjects53plane
# 0x7ef: verts= 4
 -1.343468 -0.220959 0.001076
 1.072262 0.224435 0.001076
 1.351039 -0.135603 0.001738
 0.001076 1.218122 1.207865

group1|leftSideWallAndObjects54plane1
# 0x8a6: verts= 4
 0.732678 -0.170821 0.003166
 1.078642 0.175142 0.003166
 1.078805 0.905660 0.002160
 0.003166 0.173881 0.172982

group1|leftSideWallAndObjects18plane1
# 0x95d: verts= 4
 0.359302 0.030990 0.001916
 0.670671 0.342360 0.001916
 0.704139 0.514986 0.186675
 0.001916 0.156494 0.155685

[...]

group17|leftSideWallAndObjects29plane_4
# 0x6959: verts= 4
 -1.637227 -0.043439 0.008500
 -1.391622 0.184675 0.008500
 1.637416 -1.514424 0.070618
 0.008500 0.147115 0.122802

bink_meshplane.mmb

# 0x9f: verts= 4
v -9.599998 -5.399999 0.000000
v 9.599998 5.399999 0.000000
v 11.014533 0.000000 0.000000
v 0.000000 11.014533 9.599998

The following values should define the plane, obviously

# 0x12b: verts= 4
v 9.599998 -5.399999 0.000000
v 9.599998 5.399999 0.000000
v -9.599998 -5.399999 0.000000
v -9.599998 5.399999 0.000000

 

Couldn't find similar for the bucket, only v 32767.000000 32767.000000 32767.000000

but lots of word indices. Maybe they form 2D meshes?

 

i was fiddling around with the game's code and managed to make a logger for the mmb file reader buffer, don't know if anything useful will come out of it, did it with 4 samples, including the one that works with the TCTD script for comparison (sample 3 is more complex, however i know some more info about it), i also zipped some decompiled code that may help a bit (it contains read funcs that can be viewed on the mmb read logs too)

i have tried to get the models to be view for so long i might even pay for whoever can give me a script for this

dumps.zip

  • Supporter

Did you sum up the bytes logged?

For prp_template_fartkourinspect.mmb, which has a size of 285 bytes I counted 280, so 5 missing? (Maybe I miscalculated...)

See, you skipped the header (signature?)? 4D4D428B

Then the file size to follow: 0x11D

Would be nice if you could give it more structure, the 64 bytes as a matrix,

and the string "temp|spmPlanar1" (with preceding 0F 00, which is the string length, 15)

for example.

In the following sequence 12 12 4 12 the 4 confuses me (while the 12 bytes represent vectors each, imho).

Edited by shak-otay

  • Author
9 hours ago, shak-otay said:

Did you sum up the bytes logged?

For prp_template_fartkourinspect.mmb, which has a size of 285 bytes I counted 280, so 5 missing? (Maybe I miscalculated...)

See, you skipped the header (signature?)? 4D4D428B

Then the file size to follow: 0x11D

Would be nice if you could give it more structure, the 64 bytes as a matrix,

and the string "temp|spmPlanar1" (with preceding 0F 00, which is the string length, 15)

for example.

In the following sequence 12 12 4 12 the 4 confuses me (while the 12 bytes represent vectors each, imho).

turns out the game has another read function and i have seen it uses it for the magic/header and some other stuff, ill redo the logging while hooking that func too, give me a moment

  • 8 months later...
On 6/24/2025 at 9:29 PM, notpies said:

turns out the game has another read function and i have seen it uses it for the magic/header and some other stuff, ill redo the logging while hooking that func too, give me a moment

Hey, anyone made progress on TFBW models?

Found out .mmb files don't store vertices - just 4 corner points per mesh. 
Vertices seem to be generated procedurally from those corners.

Anyone figured out the exact generation algorithm?

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.