• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Matrix Eater 3D Model Editor

[NOTE: Before downloading this program, consider downloading Reteras Model Studio instead. It is a better graphical model editor combined with a model viewer that shares code with this project but is 5 years ahead in terms of updates. This version is here only for people who want the old UIs and stuff for my code libraries, but to be honest Retera Model Studio is really greatly improved and I use it in all cases instead of this program.]

The Matrix Eater

With support from the community, I've been working on this tool for years. More so, I became a user of it, much to the dismay of the people who asked for the best and brightest features, because I have hardly added any features in favor of just using the program how it is.

What does the Matrix Eater do?

You can think of the Matrix Eater as an alternative to Magos's Model Editor or MdlVis, but I usually use all three of them in conjunction.

The Matrix Eater is visually like a multi-geoset version of Oinkerwinkle's Vertex Modifier from years ago, but it has the purple icon on the View Controller window which lets you move and edit Pivot Points also.

In addition, if you do Tools > Mirror and mirror a selection that includes pivot points, it will mirror the animation data. So you can make a Portrait model that faces the opposite way, or something, and still animates correctly.

The program understands the MDL format in its entirely, and has support for MDX that is newer and slightly less tested. If it spits out a broken MDX, then save as MDL and convert to MDX using other software. It can do this for you, if you go to View -> Use Native MDX Parser and turn it off, then it uses MDLX converter instead of its own code to convert to and from MDX ( so it's less likely to have any bugs ).

If you use File -> Import it can be like magic and do what you need, or break things. This new version includes pictures along with names to try to show you what part of the model you're looking at. The general idea is that it takes literally everything from a new model, dumps that into the interface alongside the model you already have open, and gives you choices of how to combine them and which new components to include. You can mash "leave all" a bunch and only include an attachment point, or you can import a grunt onto a dragon complete with animations and have an animated orc dragon rider. You just have to micromanage the little buttons and tell the pelvis of the grunt, and everything below it, to attach to the dragon's main body root.

Which version is this?

This is the official upload of the latest version of the Matrix Eater.

If there is anyone using an older version of the Matrix Eater, please stop using it and use this one. Until now, the program was only shared on forums here and there from links which were often broken and pointing to outdated versions.

If this one cannot do what an old version does, please comment on this upload and tell me why so I can fix it.

I really wanted to revamp this program and add new features and write a tutorial before I uploaded it onto the Hive, but I just haven't had time recently, and I want to stop sitting on this updated version because it has several internal fixes that should make it less likely to save buggy MDX models and so I feel the community deserves this new version in case anybody is using the program -- regardless of whether I end up getting the time to improve it to match up with my dreams or not.


I didn't check the box for Linux because I haven't tested it on there for a while, but if you're a Linux user and you want to run it on Linux, just run the JAR. Theoretically it should work, if you have a Warcraft install folder on the linux machine. I've tested that before and it seemed to work.

The real source code the program on Github is this Eclipse workspace:
GitHub - Retera/JWC3: Retera's Java WC3 libraries.

There is a similar one but it is way older and out of date.
Contents

Matrix Eater 3D Model Editor (Binary)

Reviews
eejin
A great tool for editing meshes and animations. There is a lot of functionality there and this tool surely makes editing models a lot easier! Having an undo option in the UV editor would be nice. The program also gives an error that it is missing...
Level 4
Joined
Aug 9, 2012
Messages
27
Hi people,
It happens I need a marine-like model with the footman animations for my map, specially the 'defend' one. I've used the AnimTransfer app (with the default War3 marine model as base), the result looks great in the model editor but it doesn't work in the world editor, no matter what I do the model can't be seen ingame.
Does anyone have any ideas?
 
Hi Marcraft22,

I spent some time and investigated what it would be like to do what you're saying with my unreleased updated version of the Matrix Eater.
In general, with these new updates, it seemed like this mostly was working. So, after I get a few more bugs out, I'm going to have to get a copy of this new stuff to you guys.

PS: I'll attach a copy of the model created in the video, but it was about 6 minutes to make it, as you can see.

Edit: For those who might appreciate the entertainment value, this video was how I first responded the first time that I got the Matrix Eater to render character animation, which was the first animated 3d model rendering code I have ever put together:
 

Attachments

  • DefendMarine.mdx
    91.5 KB · Views: 155
Last edited:
Level 4
Joined
Jul 26, 2017
Messages
66
This program is amazing but it boggles me why it has not been fully approved yet and not universally used!!! Thank you for making this!
Anyway I would like to make a suggestion, would it be possible to add a function that reduces the polygon count of a model in order to reduce it's size?
Thanks again
 
One of the reasons that it is not universally accepted is probably that 6 years ago when I started writing it I was a high school kid who knew JASS and how to make MDL models with Oinkerwinkle's tools and I just started writing it after a year long programming class in high school because I wanted it.

So, for example, BlinkBoy closed the original Matrix Eater thread and basically said, "If you want to do this rightly, use a parser generator like JFlex." The way it parses MDL models is still that code from high school, so it is written how you would write it in Warcaft III JASS, or maybe vJASS. It is just many, many "if" statements, like "if nextLine == 'Geoset' then parseGeoset() else if nextLine == 'GeosetAnim' then parseGeosetAnim()" and it just goes on like that. It's pretty impossible for a programmer to respect that because of how human ego computer programming works. Now that I've been to college to become a software engineer because I got inspired by what computers could do via this program, I'm pretty sure that this way it loads MDL files is about a thousand or a jillion times slower than JFlex or other parser generators. I never cared enough to fix it, because despite all that other stuff, it works.

If you want to support the future of this program, checkout this topic:

Tool Idea: Magos + MdlVis + Matrix Eater combined
 
Level 7
Joined
Sep 16, 2016
Messages
185
When I try to transfer an animation to another, this error keeps popping up for me, any way to fix this?

(These two models are customs, and both anime so they arent made by blizzard or anything at all.

Unknown error occurred:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com.matrixeater.src.Geoset.getMatrix(Geoset.java:180)
at com.matrixeater.src.Geoset.updateToObjects(Geoset.java:531)
at com.matrixeater.src.MDL.read(MDL.java:633)
at com.matrixeater.imp.AnimationTransfer.doTransfer(AnimationTransfer.java:361)
at com.matrixeater.imp.AnimationTransfer.actionPerformed(AnimationTransfer.java:352)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Image: https://i.imgur.com/Qs97i6j.png
 
This means that one of the two models has a Geoset with a "VertexGroup" block where a Vertex is assigned 0 as the group number, but then the Matrices block that this 0 is supposed to index into is empty. You can fix it in Notepad in like 20 seconds in the MDL if you know which Geoset has the out of bounds VertexGroup. But a lot of people seem to be having this problem lately, I was also asked about this on Discord and fixed a model for a friend rather than writing a general fix in the Matrix Eater code. So, I need to upgrade the code to accept models which have invalid vertex groups IDs in this way.

Edit: Somebody reminded me that "Edit Animations" to change lengths will destroy your model if you make an animation shorter. This bug is fixed in the next version I am working on, but if you download any Matrix Eater version that is currently available as of this posting, then your version will also have this bug.
 
Level 4
Joined
Aug 9, 2012
Messages
27
Hi Marcraft22,

I spent some time and investigated what it would be like to do what you're saying with my unreleased updated version of the Matrix Eater.
In general, with these new updates, it seemed like this mostly was working. So, after I get a few more bugs out, I'm going to have to get a copy of this new stuff to you guys.

PS: I'll attach a copy of the model created in the video, but it was about 6 minutes to make it, as you can see.

Edit: For those who might appreciate the entertainment value, this video was how I first responded the first time that I got the Matrix Eater to render character animation, which was the first animated 3d model rendering code I have ever put together:

Hi Retera, I was in my finals so I couldn't answer before.
Thank you very much for the result, it is exactly what I was looking for :D
 
Level 7
Joined
Sep 16, 2016
Messages
185
This means that one of the two models has a Geoset with a "VertexGroup" block where a Vertex is assigned 0 as the group number, but then the Matrices block that this 0 is supposed to index into is empty. You can fix it in Notepad in like 20 seconds in the MDL if you know which Geoset has the out of bounds VertexGroup. But a lot of people seem to be having this problem lately, I was also asked about this on Discord and fixed a model for a friend rather than writing a general fix in the Matrix Eater code. So, I need to upgrade the code to accept models which have invalid vertex groups IDs in this way.

Edit: Somebody reminded me that "Edit Animations" to change lengths will destroy your model if you make an animation shorter. This bug is fixed in the next version I am working on, but if you download any Matrix Eater version that is currently available as of this posting, then your version will also have this bug.

I see! Can I add you on Discord as well? My name is null#2675

edit: Found you, sent a FRQ!
 

eejin

Tool Moderator
Level 12
Joined
Mar 6, 2017
Messages
221
A great tool for editing meshes and animations. There is a lot of functionality there and this tool surely makes editing models a lot easier!

Having an undo option in the UV editor would be nice. The program also gives an error that it is missing war3patch.mpq (which was removed in 1.29), but still functions nonetheless.
 
Level 7
Joined
Jun 5, 2018
Messages
180
Matrix Eater, a great 3D modeling software for wc3. I am glad to see the new update of it.

Now I have some suggestions in order to make it to be more perfect, because I love it so much.

Suggestions: The user interface of menus can be polished or standardized. "Recent" should be "Recent files", and should be placed under "File" menu as a submenu. "Add" should be placed under "Edit" menu as submenu. Furthermore, hot keys can be considered to add for the menus. For example, caption "File" is converted to be "&File". An "Exit" submenu should be added under the "File" menu.
 
Last edited:
Level 3
Joined
Jun 9, 2010
Messages
17
I've been transferring animation the hard way before. Now, everything is just a piece of cake..saving a lot of time..looking forward for more features later :)
 
Level 15
Joined
Dec 21, 2013
Messages
910
Can it transfer to specific animation? And can it transfer only some bones?

I’m thinking to have a dummy unit that I can animate and export animation to the actuall model. Really lazy to do IK rigging all the time. And I really like animating
 
Can it transfer to specific animation? And can it transfer only some bones?

I’m thinking to have a dummy unit that I can animate and export animation to the actuall model. Really lazy to do IK rigging all the time. And I really like animating

@Idaero Ace Yes, it should be able to do all of that, if you click the correct buttons.

Here is a video where I combine Matrix Eater and Disarm to do *fast* transfer of a single animation:


Here is a video where I play with importing 1 arm's bone animation into a different model:


This video begins to drag on a after the initial arm animation transfer. I ramble a bit, and try to transfer the arm 3 or 4 more times into the same model to get it right. If you do not follow that part, just try to understand the first import.

Here is an older video where I transfer an animation from a Furbolg to a Beastmaster, despite their different bone structures:


This video shows what is possible but involves a lot of extra clicking.

Here is a video of how to make Furion have "Stand Alternate" and other "Alternate" animations, where Furion becomes a Wildkin in the alternate animations:


When I start my import in this video, I said that the first Geosets tab contains "Animation datas" but actually meant to say "Mesh data". Clearly the second tab, labeled "Animation" is the one with Animation data.

Here is a video of adding "Bird Form" Alternate animation set from Medivh into the Paladin:


Some of these videos appear to feature different Matrix Eater GUIs that look different from the real Matrix Eater. Don't let that slow you down. I have been playing with experimental versions over the years, and I need to finish them and do a release. The version you can download here should still be able to do all of the stuff shown in these videos. Most of my recent work has been attempts to combine features from Mdlvis and Magos to get to a point of unification where I can work out of one single program; but that goal is not reached yet.
 
Last edited:

Remixer

Map Reviewer
Level 31
Joined
Feb 19, 2011
Messages
1,955
I can't seem to get the program to load my custom textures, any clue why? It just shows the grey surface view no matter what I do. I can't make it view my custom textures in the editor view? I can only make it show it during the UV wrapping, but that does not help me at all. Also any way to set the coordinates rather than dragging them?
 

Remixer

Map Reviewer
Level 31
Joined
Feb 19, 2011
Messages
1,955
I believe it uses the MPQs that came with earlier versions of Wc3; have you updated already & where is Matrix Eater located?
Do the MPQ locations really matter if I am using custom texture file? Also, I did try to configure the 'installation folder' to my MPQ folders but it has no effect at all.
 
Level 27
Joined
Jun 20, 2013
Messages
752
Ok, after suffering from several headaches i got how to deal with my Init.gl. Is the same than MDLVIS using a custom directory with the MPQ archives instead of War3.

@Remixer What about this, copy your custom textures into the Folder with your mpq files. Is worth of a try.
 

Remixer

Map Reviewer
Level 31
Joined
Feb 19, 2011
Messages
1,955
Ok, after suffering from several headaches i got how to deal with my Init.gl. Is the same than MDLVIS using a custom directory with the MPQ archives instead of War3.

@Remixer What about this, copy your custom textures into the Folder with your mpq files. Is worth of a try.
Well, perhaps so, but I already found a smoother solution. Just using the .obj file synergy and doing the actual models with Blender. A lot more convenient texture wrapping as long as I am not using Warcraft MPQs. Not sure how far this goes in terms of animation transfer and so on, but so far shapes seem to be transferred just perfectly with very little work.
 
Level 11
Joined
Jul 4, 2016
Messages
627
What I meant was that if the texture path is Abilities\whatever\filename.blp then the folder path that contains your texture must also be Abilities\whatever.
 

Kyrbi0

Arena Moderator
Level 45
Joined
Jul 29, 2008
Messages
9,492
In any model (custom or not), the model itself most know where to look to find the texture(s) (custom or not). It does this with a filepath for each texture.

If your model is working fine in-game or in the World Editor, then this means it's doing that "texture filepath look-up" successfully.

Simply open your model in Magos & open the Texture Editor: it should contain a full list of all the textures used, & their (correct?) filepath. While the in-game textures will likely have the whole nine yards (e.g. "Abilities\Spells\Orcs\Shaman\Bloodlust.blp", or "Textures\HeroMountainKing.blp"), often custom textures will not have a filepath & simply need to be "right next to" the custom model (i.e. in the same exact folder as the model); in which case the filepath will simply be "YOURCUSTOMTEXTURE.blp".

Does that help?
 
Ok, after suffering from several headaches i got how to deal with my Init.gl. Is the same than MDLVIS using a custom directory with the MPQ archives instead of War3.

@Remixer What about this, copy your custom textures into the Folder with your mpq files. Is worth of a try.

I need to do more debugging for initGL stuff because generally debugging the graphics code is a headache.

But please do not make stabs in the dark guessing how to load the MPQs. You have to do this for other old bad software but Matrix Eater is open source and you should be able to download the code and type in a different folder if you want to change where it loads MPQs.
But to save the headache, I set "View -> Change Game Directory" to be a command to let YOU CHOOSE where to load the Warcraft 3 MPQs from because you need to be able to configure this, sometimes.

In general, I discovered that whether deliberately or not the Hive has a server that serves all MPQ game files. If people are willing to allow Matrix Eater on the internet, this would actually be a huge advantage now that Blizzard messed up the game with CASC, since I could just make the Matrix Eater download the necessarily textures and such from the Hive while it's running so that it doesn't need MPQ configuration. But then it would require always having the internet, which might annoy some users.

This stuff is getting annoying enough that the next version will probably have an installer or something where you can choose setup stuff like "Load MPQ Files from Hive" or "Load MPQ Files from MPQ" and maybe even "Load MPQ Files from CASC" if we get there but I'm not promising that I or the open source community is going to be there any time soon. DrSuperGood worked on some CASC Java stuff but he said it's not working yet. He also coded it with Java 10 so he's envisioning that if I was going to use it I would have to make the Matrix Eater require Java 10 instead of Java 8 like it requires right now. In general, if I was going to sell this program, I probably should rewrite it in C++ and make it an EXE so that users do not have to install Java. However, I'm not making any money off of it, and rewriting it in C++ would take me longer than writing it in Java, and writing it in Java took me years, and uses Java libraries written by Hive users like DrSuperGood and oger-lord that would take me even longer to find equivalent stuff in C++. I played with some C++ in Visual Studio and after using gcc it just stressed me out and was annoying and I went back to Java.
 
Well, you raise a good point. After I added 3D into the Matrix Eater, I stopped focusing on support for Matrix Eater without 3D, and I'm pretty sure running it without 3D stuff totally doesn't work now. So, I might run the risk of a similar problem with the internet stuff if I wasn't careful, and then if the Hive site changed, it would be an issue.

Maybe I could host my own MPQ data service on my personal server, and use that for the Matrix Eater. But maybe people would not like that and feel that it was a shady "calling-home" design, even if I was trying to do it to make the software easier to use. I'm not sure whether I would like a software that behaved like that if someone else offered it to me. That's something for me to think about.
 

Remixer

Map Reviewer
Level 31
Joined
Feb 19, 2011
Messages
1,955
I think that locating the MPQs from a folder works just fine (as long as it is easy, I just couldn't find the button to do so, perhaps include a 'Locate MPQs' button on the UV wrapping window).

As a side note, when is saving in .obj format becoming an option? If it is I mean.
Also, would it be possible to get an option to open an .obj file and then save it as .mdx file? For example 'Open and convert into .mdx' option?
Would make it easier to work meshes in for example Blender and then just convert them using your tool.

PS: when you open an .obj file and try to 'save as' it, the proposed file name is [InsertModelNameHere].obj, instead of [InsertModelNameHere].mdx/mdl, even if you click on 'save as .mdx file'.
 
I used a pre-written OBJ parser that I dumped into the code without bothering to learn how OBJ is formatted, and it did not include an OBJ writer. Also, I want to be as compliant with Blizzard as possible (while still accomplishing my WC3 modding goals) and I have no interest in converting WC3 models into other games. As such I have no intention of creating an OBJ writer at this time, because it's not something that I personally would use, but the program is open source and if somebody wants to code one in I'd be happy to merge their pull request on github or whatever. Thus far, nobody has actually ever asked to do that so I haven't built up experience giving access to others to be contributors to the project on GitHub, but I'd be happy to do that if anyone ever wanted to.

Although the MDX is not immediately generated when you open an OBJ, opening an OBJ and then saving as MDX should work, right? I did that in the past to confirm that the OBJ parser was working. It is also supposed to convert PNGs to BLPs when you do that.
 

Remixer

Map Reviewer
Level 31
Joined
Feb 19, 2011
Messages
1,955
I used a pre-written OBJ parser that I dumped into the code without bothering to learn how OBJ is formatted, and it did not include an OBJ writer. Also, I want to be as compliant with Blizzard as possible (while still accomplishing my WC3 modding goals) and I have no interest in converting WC3 models into other games. As such I have no intention of creating an OBJ writer at this time, because it's not something that I personally would use, but the program is open source and if somebody wants to code one in I'd be happy to merge their pull request on github or whatever. Thus far, nobody has actually ever asked to do that so I haven't built up experience giving access to others to be contributors to the project on GitHub, but I'd be happy to do that if anyone ever wanted to.

Although the MDX is not immediately generated when you open an OBJ, opening an OBJ and then saving as MDX should work, right? I did that in the past to confirm that the OBJ parser was working. It is also supposed to convert PNGs to BLPs when you do that.
Don't know about the texture changes as I do them manually, but yes, the model is converted properly.
 
Okay, interesting. So you're just hoping it would do that conversion immediately / more quickly?

Also, thinking about this Matrix Eater project again, I made a video today about the current state of my software codebase for the next version of the Matrix Eater that I am working on:

 

Remixer

Map Reviewer
Level 31
Joined
Feb 19, 2011
Messages
1,955
Interesting video.

Yeah, well I find software like Blender to be pretty ultimately superior to Magos, or MDLVis, or even your program right now (I don't think it should surprise anyone). The only issue is the file type. Now with your tool one can open .obj file (that Blender can export) and then save it as .mdx file for example.

There is quite a lot of time spent on conversion however. First I need to create the model in Blender, export it as .obj, open it as .obj in your program, save it as .mdx, open it in magos as .mdx, import textures, save it as .mdx, open it with MDLVIS (as only has the texture view and UV wrapping of WC3 softwares) (this part is crucial, as something happens to the UV wrapping in the conversion, and the texture is messed up, slight nudge to the vertexes in MDLVIS fixes the problem), then save it as .mdx and finally I can import it into Warcraft.

So in a nutshell:
Blender->Matrix->Magos->MDLVIS

So I'd appreciate anything that would bring convenience to the conversion work, as it is away from the actual modelling (so I am excited to hear about your texture/UV wrap manager in the tool). So anything would be appreciated, even a 'Open and convert' would help or a multi-select 'Convert to MDX' would be really amazing, so I wouldn't need to open a model, just so that I can save it in different format.

In any case, your tool is very helpful (mandatory) and seems to be getting better.
 
I have on multiple occasions taken my codebase and done things like:
"for each file in folder XXX:
--If the file is MDX, convert to MDL, linearize animations, run my own version of MDX squisher, convert back
--If the file is BLP, convert to tga, use command line version of BLP lab to convert back with additional compression to reduce file size
"

Something like this was how I made "build3" which was a 100 MB playable installation of Warcraft 3. I was thinking that I should make a way to write plugins with the Matrix Eater so that the average user would have something like Warcraft III's Trigger Editor, but where the available options were things like "Open Model" and "Convert to MDX" and "Add clickable menu item to Plugins" or something.
If you freeze frame my previous video at 11:11 you can see that there is an option in "Windows -> Views -> Matrix Eater Script" that uses Java's Nashorn parser to run JavaScript code that is able to interact with my existing matrix eater codebase, so you could potentially hack the program while it was running or fix data corruption in a model while it's still open, or do something like the scripting mentioned above. But I tried to use it after setting it up and it was a big pain. Recently for fun I made a basic WC3 JASS interpreter using ANTLR (which is Java, so it would be compatible with the Matrix Eater codebase) so I am highly tempted to use this in combination with jasshelper in a future update of the Matrix Eater, so that you could script some model code with a language so similar to JASS that after I make functions and globals, then jasshelper will allow you to use structs and libraries in your Matrix Eater plugins.
But that's a very far-off idea, right now if you want to convert 1000 models from MDX to MDL you can just download my code and type a "for" loop in Java directly into the codebase and it will only require maybe 4 lines of code. That's what I currently do.

Edit:
If you think you'd be willing to learn enough Java to try to do this, you can check out the Scripts folder in my codebase:
Retera/JWC3

I have used this on multiple occasions for things like generating the Bonus Mod abilities into a .w3a file, making a bunch of screenshots of a model rotated 45 degrees per screenshot, so that it was like a "turntable", and other things like this. I do not officially support those programs because I wrote them in 10 or 20 minutes and forgot how they work. But there might be some interesting examples there. The Matrix Eater codebase lately includes Unit Data read/write code as well as MDX/MDL read/write, BLP read/write (from DrSuperGood's code), and MPQ reading (although not writing, but you could use JMPQ if you needed this, which I have never tried to use but I think is used by Wurst).

It's also worthy of note that Ghostwolf gave me a list of bugs in the oger-lord MDX parser that I'm currently using. Basically there are about 12 model features that if you use them will disappear, even just by opening your model in the Matrix Eater and saving it back to MDX. My MDL parser that I wrote myself is not like this, and uses more text parsing so that it will do everything in its power to retain the contents of the model file, even when it does not understand them.

So, for example, when I do batch conversion of the entire WC3 game's MDX files to MDL and back via the Matrix Eater codebase, there are a notable percent of models which fail or become corrupted. I always address issues when I find them, but it's not like I got my code from Blizzard or anything, so the only MDL/MDX converter that you can actually trust in all cases is the one called YobGul's, which uses a hacked version of the RoC game.dll file to convert between the formats, so that it has an unparalleled understanding of the MDL/MDX format when you convert between them. But that program is very buggy because it's such a hack, so, sometimes we give up certain things in return for ease of use.

 
Last edited:
Level 65
Joined
Dec 23, 2013
Messages
1,406
MdlVis user here - I went to check this program out as an alternative.

Unfortunately after I was greeted with a page of errors and the program asking me if I had installed Warcraft 3 correctly, I found that the program couldn't play the animations of any of my Mdx models :\

Somehow I think I took a wrong step somewhere, what's going on?
 
Nope, that sounds about like how it works. It's just that bad.
The one that plays animations hasn't been published yet. This version is buggy and requires a pre 1.29 installation, ideally.

The only thing that's really any good about the version of this program that is available here as a binary is the "Import" feature.
It's really time I should post the updated one. And also innovate on the installation process.
 
When I use the Matrix Eater to move an entire model (like the Frost Wyrm is moved in this video - around 6:50), all attachments and particle emitters are left behind in their original position. Am I missing something or is it a bug?
You will need to enable selection of attachments and particle emitters (pivot points) and select them along with the mesh perhaps?
 
This is not a bug, it was deliberate. The particle emitters and attachments are not "Parents of active geosets", they are technically children of the bones to which the geosets are attached, or children of the parents of those bones. So, because I was being as literal as possible with the "Only show parents of active geosets" button, it only will show:
  1. Bones to which the geoset(s) are attached
  2. Helpers and bones that are parents of those bones
This means that while the "Only show parents of active geosets" button is active, attachment points and particle emitters will NOT have their "pivot points" be modified. In order to modify the pivot points of these extra nodes, you must select them individually and separately while the "Only show parents of active geosets" box is toggled to the OFF state. Otherwise they will not be shown, will not be selected, and will not be modified.

The new work-in-progress Matrix Eater uses a node tree view (similar to how Magos displays nodes) where you can toggle the root and all children on/off in one click. This allows you to show only 1 root in a model while merging (such as arthas + frostwyrm) and this method will then allow you to only edit frost wyrm attachments in a combined model -- once I release the newer version.

Edit: The Troll Batrider model is the only one that I have ever seen in my 15 years that has an Attachment point as a parent of mesh in the skeleton. So maybe the specific Attachment point that is a parent of a bone in the Batrider model will be modified when using "Only show parents of active geosets" button. But that attachment point generally causes model corruption if you do a Matrix Eater import on the Batrider because of a design flaw in the import function. So, if you were going to work with that model, it would probably be wise to fix Blizzard's mistake and link the bone back to the skeleton instead of to an Attachment point -- even though it is legal for the game's rendering engine to be a child of an attachment point.
 
Top