A while ago I made a post about the differences when creating MDL files with GMax or FSDS3. But when I looked again at this problem recently, it seemed to be a little different than I wrote back then.
It’s not the X file that FSDS3 creates that causes the different MDL file, it turned out that FSDS3 uses MakeMDL without the optimize option turned on. As soon as you compile the X file manually with that option turned on, the code of the generated MDL file looks a lot better already. As the name already suggests, the optimize option optimizes your code. This for example means that transformations are only used when needed and all polygons with the some material and texture are put together.
This not only has a positive effect on the performance (although it might be small for simple objects), it also means that you can better tweak the MDL file afterwards. The non-optimized code, for example can not be tweaked afterwards to let the object rotate to the user. This is because of the extra transformation matrices put in, that are not affected by the rotation command.
I do not understand yet why the optimize flag is not used by FSDS3. It is on by default in MakeMDL. But even when I force it on with the makemdl.cfg file in the same folder as my MakeMDL copy, FSDS3 does not seem to use that option. Maybe it is putting its own setting in somewhere, but I could not figure that out yet. Maybe a “heavy” FSDS3 user can help us here. Until then, it seems best to save the X file from FSDS3 and compile it manually with MakeMDL. This also explains why the problem with moved parts on FSDS3 MDL files is solved when you compile the X file manually. That is due to the optimize option as well.