v1100+ differences?

I'm considering updating my C++ MDLX parser so it can read v1200 models (although it's been so long I basically need to relearn C++ and my own code, so I might change my mind). My question is, what are the differences? I understand there is a new Shadow Intensity field for Lights, but is there anything else? I'm having a hard time finding other differences, if there are any, reading through @Retera's and @eejin's code. It's hard to compare directly to my own library because they're structured quite differently.

Edit: it appears I never updated to v1100 either, so I guess I'm also asking what the differences are there.
Edit 2: also, I'm confused about my optimizer, some options seem to be missing from the code, or at least I can't find them xD maybe I somehow lost the latest changes. edit3: yeah it seems the last version (1.2.1) was somehow lost :( now I'm really not sure if I'm actually start working on this anymore, because that update contained some important fixes which I'm not sure I can replicate anymore.
 
Last edited:
In my experience the v1100 update was much more different and involved on Retera Model Studio. The v1200 update was tiny. As far as I know it was only a light shadow parameter that was added. [Although, admittedly, I think the change was made by @BogdanW3 and I pretty much just merged his code change request.] But for v1100 we had some issues. I have a YouTube video that describes the issues v1100 caused with the game itself for over a year:


It's not a well documented story, but hundreds of lines of code on Retera Model Studio changed in order to pretend v1100 and v1000 are the same and auto-port between them based on the model's version setting. It increased my resentment for Microsoft Activision. But I felt okay doing this work to give back to the Hive, because at the time I was feeling some remorse for the Warsmash social media crap and how people believed it was taken down by a Cease & Desist letter even though it was not taken down by a Cease & Desist letter.
 
It's not a well documented story, but hundreds of lines of code on Retera Model Studio changed in order to pretend v1100 and v1000 are the same and auto-port between them based on the model's version setting.
Well, then it will probably be too difficult for me to implement that. So I think I'll just leave it be.

Edit: I looked into a bit, it seems that the material layers thing is the only difference, is that correct? If so, maybe it won't be too difficult. I don't think I would need to do the "pretend v1100 and v1000 are the same" thing.
 
Last edited:
I looked into a bit, it seems that the material layers thing is the only difference, is that correct?
From what I recall that's correct, but if you're going to render the models to the screen it has a lot of annoying implications for how things render and what can and cannot be expressed when we change that.

Also, historically anything that could have either animated or static values such as a Layer would always either have 1 animated value or 1 static value for a given type of parameter [at least in MDL, obviously in MDX the fixed-width structures meant that the space for a static value remained when an animated value was present]. For example, a layer might have animated Alpha, or it might have static Alpha. It might have animated TextureID, or it might have static TextureID. We see the same pattern all over in the MDX format. A particle emitter might have animated Gravity, or it might have static Gravity. It might have animated EmissionRate, or it might have static EmissionRate.

Whenever a particular parameter is animated, it has a unique 4-letter key for that parameter to encode its animated timeline of values.

This paradigm breaks down in v1100 because of Animated TextureID. The texture ID changed, and allows multiple possible texture IDs each on a slot index. For example maybe slot 0 is the diffuse color and slot 1 is the color decoded as normal map. Both of those Texture IDs can be animated, but instead of the old days where maybe "animated diffuse Texture ID" would have a 4-letter key and "animated NormalMap texture ID" would have a different 4-letter key, the geniuses at Activision gave them the same 4-letter as the old "Animated TextureID" from classic -- the key being KMTF -- but they repeat the KMTF block interwoven against texture IDs within the Layer structure, instead of as part of the animation timelines at the end of the Layer designated by key like how it used to be.

It's honestly so confusing how they did it that the game itself was broken for 1 year after this formatting change released, wherein Classic model files with animated textures mysteriously didn't work -- but only sometimes. For example all Naga buildings, in their "birth" animation where they show animated water in a puddle with a tentacle coming out, would show glitchy stuff instead of water. There were a few like the Rising Water Doodad that still worked and I was never able to isolate or understand why or what was different about those few Classic graphics with KMTF chunks that still worked.
 
From what I recall that's correct, but if you're going to render the models to the screen it has a lot of annoying implications for how things render and what can and cannot be expressed when we change that.
Fortunately I don't need to render anything. If someone wanted to use my MDLX parser (to my knowledge no one has and probably never will) they'd have to write the rendering logic themselves if they needed it. If I do get back into programming, I might try my hand at a simple model editor that would work similarly to Magos (i.e. basically a fancy MDL text editor GUI), but I probably wouldn't bother adding a viewer as I have no idea how to even get started with that, and it would just be way too much work for it to be worth it.

Thanks for the insight in the rest of you post, that's pretty interesting.
 
Hmmm, as far as I can tell I'm doing everything right, but RMS is refusing to open v1100 models put out by MOP/MDLX Parser :(

Edit: yes, it works now! :D I was includiing the size of the shader string from v900 and v1000 in the material size, but it's not included anymore in the material for v1100 ^^
 
Last edited:
Back
Top