• 🏆 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!

Retera's Model Studio

This bundle is marked as director's cut. It exceeds all expectations and excels in every regard.
This is Retera's Model Studio v0.04 Public Beta. It is not finished! But it is something that works and is better than the Matrix Eater application, and is compatible with Patch 1.32.

Retera's Model Studio is the second evolution of the Matrix Eater project. It is a standalone MDL and MDX model editor. The project has diverged from the Matrix Eater that is available here on the Hive, and become a different program with features that do not totally overlap -- although my goal is for this to entirely replace the Matrix Eater.

Features:
  • Open and view MDL and MDX model files
  • CASC Data browser with double-click to view model, or texture, using JCASC from DrSuperGood
  • Attempts to support every single Warcraft III Patch up to and including Patch 1.31
  • MPQ Data browser seamlessly replaces CASC browser when using older patches of the game
  • 24 color "Team Color" menu will seamlessly swap to 12 colors when using an older patch of the game
  • Edit the model geometry (Select by Vertex, Select by Face, Select by Group)
  • Editor hotkeys that were not present in the Matrix Eater predecessor (QWER for edit mode, ASDF for select mode)
  • Control which Geosets are editable at one time
  • Animation Previewing (No particles or ribbons yet)
  • An "Open Internal" menu for loading game models quickly
  • Can open and save MDX to MDL or MDL to MDX using a converter that supports features such as ReplaceableId on Particle Emitters better than some alternatives
  • Includes a basic UV map editor
  • Multiple GUI themes available in the Preferences Window
Experimental Features:
  • Create a new blank model with basic planes and boxes
  • Can open BLP or PNG images for previewing (similar to Magos application)
  • Includes an Edit Textures menu to view the list of used textures, and quickly change used paths.
  • Quick Browse: Opening a new model in the Data Browser will close unsaved old ones (can be turned off in preferences)
  • Customizable layout, allowing you to draw components of the UI into different places
  • Window -> Reset Layout to reload the default layout
  • T-Pose edit mode, which can move mesh based on assigned bones in a more intelligent way
  • Cluster selection mode, similar to Group mode but using connected mesh rather than assigned VertexGroup
  • Animation edit mode, which can edit and modify animations (Warning: uses Hermite and Bezier by default, and inserts incorrect inward and outward tangents that will cause visual "vibrations" of nonlinear models in some cases, this is a fixable bug, needs more time)
  • Hive Browser is a feature that does not work and was added only as a UI mockup to discuss technology, and was included by accident in V0.01. It will be removed in V0.02, as to my knowledge, the required server technology for the hypothetical feature to work was not built.
Limitations:
  • Unlike Matrix Eater, this application cannot pin a Geoset to be visible but not editable
  • Unlike Matrix Eater, this application gives no indication of a node's name graphically in the 2D editing space
  • No user interface to control mounting system for MPQ/CASC hybrid loading system, so it will break again in Patch 1.32 or whenever Blizzard moves data once again
  • Inherits WC3 cached install directory information from Matrix Eater, which can be removed in the case of incompatibility and is located at C:\Users\<name>\AppData\Roaming\JWC3\user.profile
  • After running this application, configuration settings from the Matrix Eater application may become corrupted and not work correctly, causing strange white background errors (This application will not be affected)
Required for running Retera's Model Studio:
  • A Java SE Runtime Environment. A bundle is included with a Windows 64-bit EXE launcher but if you want the application to run on Linux or Mac then you must install the Java SE Runtime Environment separately.
  • The above statement means that if you are a 32-bit Windows XP user, the EXE application will not function (only tested with Windows 7 64-bit, and Windows 10 64-bit)
  • A valid Warcraft III Installation (only tested with Patch 1.22 through Patch 1.31)
Additionally bundled applications (main methods in the same Java application included as EXE files):
  • Includes the AnimTransfer EXE that was previously included with Matrix Eater, which will use the Retera Model Studio MDL and MDX parser, which has significant subtle improvements over the one in the Matrix Eater application thanks to contributions from Ghostwolf.
  • Includes the ObjectEditor EXE shown in YouTube videos that has custom folders based on unit race, and can be opened multiple times simultaneously and can select, copy, and paste multiple Units between two running instances of the software. (Known to have bugs, requires Windows Clipboard, fails on Linux)
  • BlpConv EXE that can be used to convert TGA to BLP using DrSuperGood's blp-iio-plugin on systems where Magos or BLP Lab are not working (although these two alternative tools are typically superior to mine)
v0.04.2b
  • Fixed a bug in "Edit/delete model components" reported by Hive user @Makkad (retains FaceFX chunks now)
v0.04.2
  • Tiny change requested by discord user VictorZ that allows "Rotate Type-In" to work in the Animation Editor. (The code for this was copied almost directly from the Twilac version of 0.05, so you should seriously probably just use 0.05!)

v0.04.1
  • Opening a file in a folder does not walk the directory tree of that folder
  • Scripts -> Skin Splice function added upon request from Vulfar
v0.04 for 1.32.10
  • Fixes the program to work with the new Warcraft III Patch 1.32.10 that changed the TFVS formatting for some reason.
  • Includes some really minor internal bug fixes over the previous version
v0.04:
  • Merged the version known as "Retera Model Studio Reforged Hack" to be the mainline version of the tool going forward (this version includes all of the fixes listed here)
  • Added support for Reforged assets and a bunch of bug fixes related to working with those
  • Added "Scripts -> Assign FormatVersion 800" to convert Reforged Classic Models to the legacy classic model format, as well as "Scripts -> Assign FormatVersion 1000" to convert legacy game client models to match the format used by the "Classic Graphics" of Reforged.
  • Added a "Reforged Graphics Mode" and "Classic Graphics Mode" in the data sources chooser panel
  • Added the "Model" tab which is buggy and unfinished
v0.03:
  • Changed the program to use Java 11. Had trouble exporting the JAR from Eclipse, so I changed it back to Java 8 for now.
  • Changed the program to use the latest version of DrSuperGood's JCASC, which requires Java 11 to use, then I modified his code so that it did not require Java 11 so that we could continue deployment in the previous fashion.
  • Changed the startup sequence to use a "data source chooser" view, which is also available in Preferences. This allows users to load CASC or MPQ data in a way that is intended to be straightforward and clear to the user, and for CASC data the user able to choose the locale to load from the game. Locales that are present in the CASC's list but have not been downloaded from Blizzard are shown in dark red. These dark red options won't work until you launch Warcraft III at least one time using that locale.
  • Changed the startup sequence to return the user to the "data source chooser" any time that the program crashes during startup, so that the user is always able to reconfigure their settings.
  • Changed the model previewer to include the rendering of Particle Emitters, so that users can have a better feel for how their models might look in-game. This is a nontrivial task that involves many hundreds of lines of code replicating the behavior of the game and it was only possible because of the works of Ghostwolf, which I translated nearly directly from JavaScript into Java.
    • "Squirt" mode particles will emit at random times when they should not because of a difference between my code and Ghostwolf's code (his does not have this bug).
    • Also, priority plane and layering are known to have issues.
  • Added a JSON parser that loads the "filealiases.json" data when using CASC. This file is used by the 1.30 and 1.31 clients to support removed legacy files inside the Warcraft III game, and it will now be supported by the Retera Model Studio when viewing models. This will fix missing textures in some instances when the textures were not missing in-game.
  • Changed the default application data folder to be named "ReteraStudio" instead of "JWC3". This change removes bad interactions with the "Matrix Eater" application where the "Retera Model Studio" and "Matrix Eater" would write clashing versions of the same data to the same settings file (see "AppData/Roaming/ReteraStudio" on your computer).
    • This will cause a reset of all user settings for the Retera Model Studio version v0.03.
    • If you wish to avoid a settings reset, copy your settings file from "AppData/Roaming/JWC3". However I do not promise backwards compatibility.
  • Fixed an issue with the Quick Browse option so that turning it off and on will work correctly.
  • Added a scroll bar to the "Change Animation Lengths (by Scaling)" popup. (Thanks Mythic!) This popup is now listed under the "Scripts" menu.
  • Added 3 new GUI Themes: HiFi, Acryl, and Aluminium. These are all from the JTattoo library. Also, the "Dark" theme was technically the "Noire" theme from the JTattoo library, and it has been renamed accordingly. Aluminium is now the default theme (this can still be changed in the Preferences Window).
  • Changed code in the BLP loading pipeline used for rendering models and icons that aims to avoid destruction of texture data that is beneath an alpha channel yet loaded on a model's surface regardless of the alpha channel. Previously visual artifacts were visible in some cases that were not in accordance with how the textures would display in the Warcraft III game.
  • Added an "Edit" button in the Time Bound Chooser panel, but it does not actually work yet and will be fixed in a future version.
  • Changed some code with the "X" button on the program and how closing model files functions, so that it should not be able to bug out and fail to close a model or fail to close the application in a way unexpected by the user.
  • Added a system in the 3D displays that compares the aspect ratios known to the application with the aspect ratios known to the graphics card that attempts to use this information to fix the renderer when used on desktops that have the UI Scale setting specified. This was tested on Windows 10 with the UI scale, and it still fails on multiple monitor configurations where the second or third monitor have differing UI Scale specified. However, it should always work correctly on the main display when previously it may not have worked correctly at all.
  • Added a Preferences option to disable rendering particle emitters, as well as a separate option to disable rendering particle emitters in the Editor view.
  • Changed the "Use Boxes for Pivot Points" option so that it also affects the 2D displays in the Animation Editor.
  • Changed the Right-Click mouse button not to do anything on the Outliner widget, so that it can popup an "Edit" option on a popup menu in a future version of the software.
  • Changed the code that converts program data to MDX at Save time, so that some models that previously would not save due to state corruption inside the Model Studio will now be able to save. There may be more similar bugs yet to be fixed.
  • Changed the SLK parser used to load Unit Data so that it should be able to load data from the Reign of Chaos and from Project Revolution, in case users wish to load that data using the new game data source choosing settings.
  • Changed the Unit Browser to reload its contents when the program data source is changed. Previously, the "View -> Change Game Directory" option was likely to change the internal setting but keep previously cached information in the Unit Browser.
  • Added a command line option, "-forcedataprompt" to force the program to start with the Data Source Chooser window, so that users can specify their Warcraft III game data source without launching the application.
  • Changed how missing textures resolve so that they should resolve to a white surface. This should hopefully remove the irritating popup.
  • Attempted to make the Perspective view constantly repaint itself to always update dynamically, however in practice this is still not working in some cases.
  • Changed the texture loader so that a default Tree texture will be loaded when the replaceable texture ID is not known. This does not yet help with previewing cliff models but it means that the Mountain Giant and similar models should preview decently.
  • Added a scroll bar to the Texture Manager shown with "Tools -> Edit Textures" for use on models with many textures
  • Reorganized some of the program menus to attempt to make them more logical (Based on some suggestions from Hayate, many thanks! If only this program could be updated as quickly as his mockup UI!) More changes to these may be added in a future version, as they are still rather disorganized.
    • The new "Scripts" is a place for one-off script utilities that don't fit anywhere else, and maybe be user modifiable to include custom code in the future. At this time, it is only a preset list.
    • "Scripts -> Export Animated to Static Mesh" is a new option to build snapshot models. Unfortunately, it only snapshots the currently timeline in the Editor view, not in the Viewer that you see when you start the application. Also, it discards all node information, including Billboarded nodes, so camera-centric planes will be left to face forward instead of the camera.
    • "Edit -> Optimize" now include an option to merge all geosets that share like materials and visibility that is called "Minimize Geosets". Misha and a few other users have been asking for this option for years. I have not tested it very extensively and there may still be bugs in it. It worked on one or two sample cases that I experimented with.
  • In v0.01/v0.02 I added an option in Program Preferences to allow loading Non-BLP textures, so that users can open a PNG file or a model that references a PNG file even though these are generally not valid MDX files when used inside the Warcraft III game. This option may have been changed in the newer one to fix bugs, according to some of my code history information.
  • Fixed a crash relating to parsing WTS files for unit data, such as when the Data Source Chooser is used to load a custom map file as an MPQ.
  • Changed "Error: A matrix's bone id was not referencing a real bone!" to be a console log line instead of a popup, so that users do not receive a spamming wave of popups when opening a model file.
  • Changed the model parser to accept models with missing Pivot Points (as the Warcraft III game does), so that the Retera Model Studio is able to open some MDX models that previously would have caused a crash popup.
v0.02:
  • Removed Hive Browser UI mockup that did not work
  • Wrapped the startup code in a block that will catch and display errors in a GUI
  • Fixed an issue where users who had never run the Matrix Eater application in the past would have the Retera Model Studio application crash the first time it was run
Personal note: On the Matrix Eater application, I left a note where I said:
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.

This application does not solve that concern of mine. I am not uploading this as a finished product. But as we have seen with Patch 1.31, some times, software is pushed into production when it isn't ready. That is the case with this application. I want more than I have. I just can't stand not to share with the community what I have anymore, because I feel a deep sense of guilt for anyone who is using the Matrix Eater application and forcing themselves to mod on Patch 1.26 or some nonsense, while the above application existed on my computer and has for almost a year.

I believe in the power of open source, and this application is entirely open source. I have been developing it for about two years since the Matrix Eater was posted, and it has evolved out of the same codebase. This is the same GitHub link that was included on the Matrix Eater program, but it now contains the source for Retera Model Studio:
Retera/JWC3
Previews
Contents

Retera Model Studio 0.04.4m (For Patch 1.33) (Binary)

Retera's Model Studio 0.4.5j (Experimental) (Binary)

Reviews
Archian
If it wasn't for this tool, Reforged Modeling wouldn't have become what it is today. In recognition of this, the Hive Administration team awards Retera's Model Studio a Director's Cut status. @Retera
what causes objecteditor to fail to open?
The EXE is a light wrapper that runs CMD command "java -jar some.file.path.to.object.editor.with.dots.instead.of.slashes.ObjectEditorFrame"

At some point the file path to the object editor changed. If you still knew what that file path was, you could skip the EXE entirely and just launch it from CMD.

Would still work fine if you do this, probably. I ran the object editor in 2021 no doubt. But I have not made efforts to support it for other people because I don't care about it much.

Other reasons it might fail to launch could potentially be configuration issues. You have to open RMS first and get the startup prompt for configuration to find the game. Once you do that, the object editor loads the same settings data. But the object editor is bugged and doesn't offer the prompt if it's not configured
 
Level 17
Joined
Feb 25, 2013
Messages
303
Edit: Hive is again not showing me new posts correctly, my reply was meant for Ravager's message from 12h ago
I did not say it doesn't exist, I said you cannot open it from the redistributed Jar :p

if you want to throw yourself into that, you can try building it from github, then prepare to fix any possible issues you encounter.
As I said previously, my first issue was with Image4J not being included, and I have stopped at that point as even fixing that would change the jar.
 
Level 10
Joined
May 31, 2019
Messages
137
Getting this when trying to build v0.05
retera build bug.png



Is it possible to add/modify/remove EventObjects on a model with 0.04? I can't seem to figure out how. It was very straightforward in Magos, but ofc that tool has nasty bugs with light objects, so I hope this can replace it!
 
Level 11
Joined
Jul 4, 2016
Messages
626
You can add /remove/copy/paste event objects, but afaik it doesn't have the ability to modify them. You will still need to need magos or other modeling software for that. Regarding the bug with light objects, have you tried editing the model in mdl format?
 
Level 17
Joined
Feb 25, 2013
Messages
303
As I said, attempting to build RMS in its current state is a fight against all the possible issues that it has.
That specific issue seems to with getting the dds library it uses, as Maven repositories can just randomly stop working or stop offering a file, just like how old War3 forums go down. I also can't really know if you're indeed trying to build 0.5 but that doesn't matter, the error you're seeing there will be the same.

As for editing event-objects, you can always try it out yourself, or in the worst case scenario save as MDL and edit directly.
 
Getting this when trying to build v0.05
I was able to build 0.04 tonight just fine with a quick test. But when I use eclipse for 0.04, I always use a certain out of date version that actually works correctly how I expect. To me it feels a bit like Reforged, where all the updates and stuff that get piled onto these systems eventually reach a point where they do not work properly anymore in all cases. I can get old eclipse with old RMS to build, and I can get new RMS in new Eclipse to build, but I am not sure that I would be able to get old RMS in new Eclipse to build.

Conversely, if you use IntelliJ which has a business plan and a way to profit off of the users like you, there are no issues universally in all cases. Money talks.

Which specific version do you want to build?
 
Level 17
Joined
Feb 25, 2013
Messages
303
0.05 is not one version, and you are correct that the repository you linked is one of the 0.05 versions (but an old one so not one I'd recommend to build if you really want cutting edge 0.05; if you're after the object editor, it doesn't change anything, and 0.04 will probably build more easily as there's no dds stuff there). Your error is not caused by eclipse version, but rather by gradle not being able to find the library it needs. No change in IDE will change this. Retera's message does contain a crucial bit of truth though, he keeps all the old stuff, so he also has cached versions of dependies that Gradle uses, in this case specifically the dds dependency's caching helping the builds still pass (relative to yours, and all this just going off of the error message you posted)
 
Level 17
Joined
Feb 25, 2013
Messages
303
Hmm. It should be easier to get the 'most up-to-date' version!
0.05 versions are betas, one could even call most of them unofficial in some ways, and most progress on them is done by other people, most notably Twilac and GhostWolf. They are not hard to get though as Twilac keeps the code public on her Github and posts builds of 0.05 on the Retera Model Studio Discord server. Now whether the server is completely public I am not sure, as its invites do get shared from time to time but I don't see it included in the tool's main post.
 
Last edited:
he also has cached versions of dependies that Gradle uses
Strange that Warsmash and Retera's Model Studio which I build regularly on at least 3 machines all have this cached even when I do gradle refresh operations on the repos, but I'll admit I've not studied gradle in so much detail.

What DDS library or provider does twilac use?

Okay, didn't know that. When you boot up 0.04 it urges you to upgrade to 0.05, so I assumed it was the thing to do.
Yeah, this is because I've been too lazy to maintain the program, so supporting versions made by other people is a general good, since I got lazy.
But since there are multiple versions and stuff, it's hard to say which one you want to use. It's up to you.

Edit 2: if it makes you feel better, probably on April 1st of this year I might update RMS to have a new welcome message more like this:
1643518492710.png
 
Level 17
Joined
Feb 25, 2013
Messages
303
Strange that Warsmash and Retera's Model Studio which I build regularly on at least 3 machines all have this cached even when I do gradle refresh operations on the repos, but I'll admit I've not studied gradle in so much detail.

What DDS library or provider does twilac use?
The way Gradle caches is not project-dependent, once a library is downloaded, it's permanently stored in the User's data folder (C:\Users\Retera\.gradle\caches\modules-2\files-2.1\net.nikr\dds\1.0.0 for this particular library) but it is also completely possible that it's only Pies' setup that cannot download this library anymore. I have not had time to clear my cache and redownload RMS to test what happens for me.
 
Level 4
Joined
Aug 4, 2007
Messages
96
I recently downloaded this and having a problem. So I use a mac and in order to run this I have to use the jar file. But in the space the model should be I get this black box that sometimes flashes red. Am I doing something wrong?
 

Attachments

  • rms.jpg
    rms.jpg
    81.7 KB · Views: 33
They've been using something called Metal for at least a few years now.
Okay, that's probably the issue then. Retera's Model Studio is not written using Metal.

However, the fact that it opened at all suggests that the problem might just be the "legacy" (non-Metal) OpenGL drivers on Mac behaving slightly differently. This makes me think that if I had a Mac in front of me with the source code open I could probably tinker around and do some online research until I found out what part of the OpenGL function calls that I used were not supported. But unfortunately I do not have a Mac at the moment.

On a different topic, recently I published a super basic video about Retera Model Studio. Primarily I wanted this video to be something clean and informative that I could put on a resume, but apparently some users in the YouTube comments actually said that this was still useful information to them and that they did not already know some of this stuff. So I figured I would link this here for anyone interested:
 
Level 4
Joined
Aug 4, 2007
Messages
96
Okay, that's probably the issue then. Retera's Model Studio is not written using Metal.

However, the fact that it opened at all suggests that the problem might just be the "legacy" (non-Metal) OpenGL drivers on Mac behaving slightly differently. This makes me think that if I had a Mac in front of me with the source code open I could probably tinker around and do some online research until I found out what part of the OpenGL function calls that I used were not supported. But unfortunately I do not have a Mac at the moment.
Yeah, here is what the wikipedia page says about it. Metal (API) - Wikipedia

"Metal combines functions similar to OpenGL and OpenCL in one API. It is intended to improve performance by offering low-level access to the GPU hardware for apps [...]" Hope this info is helpful enough for something.
 
Hello sir! How can I copy a block of animations from a specific frame (not 'Copy Frame (whole model)') and paste it?
Retera1.png

The 'Copy' function leads to an orange-red Key Frame when you use 'Paste', meaning that it has all the bones' movements and adds Scaling of each bone and has the same result as 'Copy Frame (whole model)' function:
Retera2.png
To avoid this I have to copy each bone's movement one by one and paste it one by one into the frame I need.

Big thanks for your answer in advance!
 
but how can I fix the issue where the textures are not showing?
To fix this, go to "Edit > Preferences Window" and then find the rightmost top tab, labelled, "Warcraft Data Sources" or something like that. On that tab, choose "Clear All" then choose "Add War3 Install" and select the folder "C:/Program Files/Warcraft III" to add your Warcraft III: Reforged installation.

It doesn't work, when I want to change the team color. It's always white...
What do I wrong?
Rendering team colors in this program version is only working for the 2002 "Reign of Chaos" edition models (often called "classic" or "SD" models) because of technical limitations. Due to the ORMT texture layout used in Reforged technology where the Alpha component of the third layer determines the ratio of the diffuse color to replace with Team Color, the Reforged team colors can only display on a graphics technology that uses custom shader programs instead of fixed pipeline rendering. As such, I always figured the render pipeline from this 8 year old codebase would have to be specifically rewritten entirely in order to support the Reforged team color. So I just did not bother back when I was retrofitting it to preview Reforged models.

If you want to test a version where I tried to sort of hack my own code to use shaders, you could try this experimental build of the "Demon Retera Model Studio" version: pastebin of some DRMS build
 
Level 7
Joined
Jun 9, 2020
Messages
96
To fix this, go to "Edit > Preferences Window" and then find the rightmost top tab, labelled, "Warcraft Data Sources" or something like that. On that tab, choose "Clear All" then choose "Add War3 Install" and select the folder "C:/Program Files/Warcraft III" to add your Warcraft III: Reforged installation.


Rendering team colors in this program version is only working for the 2002 "Reign of Chaos" edition models (often called "classic" or "SD" models) because of technical limitations. Due to the ORMT texture layout used in Reforged technology where the Alpha component of the third layer determines the ratio of the diffuse color to replace with Team Color, the Reforged team colors can only display on a graphics technology that uses custom shader programs instead of fixed pipeline rendering. As such, I always figured the render pipeline from this 8 year old codebase would have to be specifically rewritten entirely in order to support the Reforged team color. So I just did not bother back when I was retrofitting it to preview Reforged models.

If you want to test a version where I tried to sort of hack my own code to use shaders, you could try this experimental build of the "Demon Retera Model Studio" version: pastebin of some DRMS build
Holy shit... It works! Thank u so much bro <3

Nice weekend!
< Vulac >
 
Level 10
Joined
May 31, 2019
Messages
137
Trying the program on linux. Adding my Reforged install directory was successful, it prompted for my locale. Then after clicking OK, I get this error:

Code:
Unknown error occurred:
java.lang.NullPointerException
    at com.matrixeater.src.MainPanel.createMenuBar(MainPanel.java:2654)
    at com.matrixeater.src.MainFrame.<init>(MainFrame.java:364)
    at com.matrixeater.src.MainFrame$1.run(MainFrame.java:307)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
 
Last edited:
Level 28
Joined
May 14, 2021
Messages
1,095
Trying the program on linux. Adding my Reforged install directory was successful, it prompted for my locale. Then after clicking OK, I get this error:

Code:
Unknown error occurred:
java.lang.NullPointerException
    at com.matrixeater.src.MainPanel.createMenuBar(MainPanel.java:2654)
    at com.matrixeater.src.MainFrame.<init>(MainFrame.java:364)
    at com.matrixeater.src.MainFrame$1.run(MainFrame.java:307)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
I heard that RMS doesn't currently support Linux, but I can tell it's your app problem.
If you are using this tool, then this is the main reason it's not working since it's outdated for the most recent versions of Reforged.
 
Level 1
Joined
May 8, 2022
Messages
2
I have a question: after I added the hero halo to the custom model and saved it, when I opened the model again, it didn't change at all.

I mean, for "PEP Hero_Glow" that I copied and pasted here from other models, RMS can't save this "PEP Hero_Glow".
 
Last edited:

Ardenaso

HD Model Reviewer
Level 32
Joined
Jun 22, 2013
Messages
1,804
Last edited:
Level 2
Joined
Apr 7, 2021
Messages
9
Hi, error in attachment right after start :(
And this error when i tried to choose WCIII directory

Code:
Unknown error occurred:
com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException: inconsistent size
    at com.hiveworkshop.blizzard.casc.vfs.VirtualFileSystem$PathResult.readFile(VirtualFileSystem.java:171)
    at com.hiveworkshop.blizzard.casc.io.WarcraftIIICASC$FileSystem.readFileData(WarcraftIIICASC.java:123)
    at com.hiveworkshop.wc3.gui.datachooser.DataSourceChooserPanel.addDefaultCASCPrefixes(DataSourceChooserPanel.java:707)
    at com.hiveworkshop.wc3.gui.datachooser.DataSourceChooserPanel.addWarcraft3Installation(DataSourceChooserPanel.java:485)
    at com.hiveworkshop.wc3.gui.datachooser.DataSourceChooserPanel.access$3(DataSourceChooserPanel.java:480)
    at com.hiveworkshop.wc3.gui.datachooser.DataSourceChooserPanel$2.actionPerformed(DataSourceChooserPanel.java:143)
    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 com.jtattoo.plaf.BaseButtonListener.mouseReleased(BaseButtonListener.java:60)
    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$400(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$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.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$1.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.pumpEventsForFilter(Unknown Source)
    at java.awt.WaitDispatchSupport$2.run(Unknown Source)
    at java.awt.WaitDispatchSupport$4.run(Unknown Source)
    at java.awt.WaitDispatchSupport$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(Unknown Source)
    at java.awt.Dialog.show(Unknown Source)
    at javax.swing.JOptionPane.showOptionDialog(Unknown Source)
    at javax.swing.JOptionPane.showConfirmDialog(Unknown Source)
    at javax.swing.JOptionPane.showConfirmDialog(Unknown Source)
    at com.matrixeater.src.MainFrame$1.run(MainFrame.java:286)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(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$1.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)
 

Attachments

  • img-2022-05-20-11-38-45.png
    img-2022-05-20-11-38-45.png
    68.8 KB · Views: 18
Level 17
Joined
Feb 25, 2013
Messages
303
Hi, error in attachment right after start :(
And this error when i tried to choose WCIII directory

Code:
Unknown error occurred:
com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException: inconsistent size
    at com.hiveworkshop.blizzard.casc.vfs.VirtualFileSystem$PathResult.readFile(VirtualFileSystem.java:171)
    at com.hiveworkshop.blizzard.casc.io.WarcraftIIICASC$FileSystem.readFileData(WarcraftIIICASC.java:123)
    at com.hiveworkshop.wc3.gui.datachooser.DataSourceChooserPanel.addDefaultCASCPrefixes(DataSourceChooserPanel.java:707)
    at com.hiveworkshop.wc3.gui.datachooser.DataSourceChooserPanel.addWarcraft3Installation(DataSourceChooserPanel.java:485)
    at com.hiveworkshop.wc3.gui.datachooser.DataSourceChooserPanel.access$3(DataSourceChooserPanel.java:480)
    at com.hiveworkshop.wc3.gui.datachooser.DataSourceChooserPanel$2.actionPerformed(DataSourceChooserPanel.java:143)
    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 com.jtattoo.plaf.BaseButtonListener.mouseReleased(BaseButtonListener.java:60)
    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$400(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$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.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$1.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.pumpEventsForFilter(Unknown Source)
    at java.awt.WaitDispatchSupport$2.run(Unknown Source)
    at java.awt.WaitDispatchSupport$4.run(Unknown Source)
    at java.awt.WaitDispatchSupport$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(Unknown Source)
    at java.awt.Dialog.show(Unknown Source)
    at javax.swing.JOptionPane.showOptionDialog(Unknown Source)
    at javax.swing.JOptionPane.showConfirmDialog(Unknown Source)
    at javax.swing.JOptionPane.showConfirmDialog(Unknown Source)
    at com.matrixeater.src.MainFrame$1.run(MainFrame.java:286)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(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$1.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)
From this error and the cropped attachment, you may be using an old version of RMS. Alternatively, note that new versions of RMS 0.04 will not work with versions between 1.30 and 1.32.9
 
Level 2
Joined
Apr 7, 2021
Messages
9
Hi, i get this error when tried to convert SD wow model to HD
Code:
Unknown error occurred:
java.lang.NullPointerException
    at com.hiveworkshop.wc3.gui.modeledit.PerspectiveViewport.render(PerspectiveViewport.java:973)
    at com.hiveworkshop.wc3.gui.modeledit.PerspectiveViewport.render(PerspectiveViewport.java:898)
    at com.hiveworkshop.wc3.gui.modeledit.PerspectiveViewport.paintGL(PerspectiveViewport.java:561)
    at org.lwjgl.opengl.AWTGLCanvas.paint(AWTGLCanvas.java:339)
    at org.lwjgl.opengl.AWTGLCanvas.update(AWTGLCanvas.java:368)
    at sun.awt.RepaintArea.updateComponent(Unknown Source)
    at sun.awt.RepaintArea.paint(Unknown Source)
    at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(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$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.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$1.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)
 
Level 28
Joined
May 14, 2021
Messages
1,095
Hi, i get this error when tried to convert SD wow model to HD
Code:
Unknown error occurred:
java.lang.NullPointerException
    at com.hiveworkshop.wc3.gui.modeledit.PerspectiveViewport.render(PerspectiveViewport.java:973)
    at com.hiveworkshop.wc3.gui.modeledit.PerspectiveViewport.render(PerspectiveViewport.java:898)
    at com.hiveworkshop.wc3.gui.modeledit.PerspectiveViewport.paintGL(PerspectiveViewport.java:561)
    at org.lwjgl.opengl.AWTGLCanvas.paint(AWTGLCanvas.java:339)
    at org.lwjgl.opengl.AWTGLCanvas.update(AWTGLCanvas.java:368)
    at sun.awt.RepaintArea.updateComponent(Unknown Source)
    at sun.awt.RepaintArea.paint(Unknown Source)
    at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(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$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.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$1.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)
Which version of RMS are you using? According to Bogdan's post above, you should never use the older versions of RMS and get the RMS from this thread.
 
Level 19
Joined
Jul 12, 2010
Messages
1,713
so I just found DRMS in pastebin by accident and I was surprised by the HUGE difference:
Demon vs Retera.jpg
are there any downsides from using Demon version?? I mainly use it as a reforged model viewer.

one MAJOR thing that bothers me is that V0.04.2 takes 13 seconds to open while Demon V0.04.3 only takes 5 sec LOL!

also where can I find V0.05.0??
 
Level 17
Joined
Feb 25, 2013
Messages
303
so I just found DRMS in pastebin by accident and I was surprised by the HUGE difference:
View attachment 400894
are there any downsides from using Demon version?? I mainly use it as a reforged model viewer.

one MAJOR thing that bothers me is that V0.04.2 takes 13 seconds to open while Demon V0.04.3 only takes 5 sec LOL!

also where can I find V0.05.0??
DRMS is a test, its main downside is that it won't guarantee the degree of stability, but as you saw it's much more powerful in some ways.
As for 0.05, those are beta versions made by Twilac, they can do way way more but it has a giant load-time and it changes around the user interface somewhat. The 0.5 beta versions are distributed through the RMS Discord server and the current latest ones can be found at this link.
 

Ardenaso

HD Model Reviewer
Level 32
Joined
Jun 22, 2013
Messages
1,804
so I just found DRMS in pastebin by accident and I was surprised by the HUGE difference:
View attachment 400894
are there any downsides from using Demon version?? I mainly use it as a reforged model viewer.

one MAJOR thing that bothers me is that V0.04.2 takes 13 seconds to open while Demon V0.04.3 only takes 5 sec LOL!

also where can I find V0.05.0??
sometimes DRMS bugs out and shows just black even though the model works in game
 
one MAJOR thing that bothers me is that V0.04.2 takes 13 seconds to open while Demon V0.04.3 only takes 5 sec LOL!
So, @DrSuperGood here was asking if this difference is from shader compilation. 0.04.2 here on hive currently used ancient fixed pipeline programming and doesnt use shaders because I had no idea what the flux I was doing when I wrote the first 3d previews into this codebase in 2014.

It's actually on the 0.04.3 build that shaders are used, and this is the one that you say is giving you a faster load time. So, my theory is that the 0.04.2 build which is using JCASC backported to Java 8 and which is probably using a 32 bit Java 8 JRE, probably is slower due to the 32 bit emulation on our modern 64 bit computers. But I did that for maximum compatibility because I had people come and tell me that they still used 32 bit computers over the last 10 years of the lifetime of this codebase and its ancestors.

DRMS is reconstituted to be bundled with adoptium jre 17 using jpackage and the "badass runtime plugin" for java which automates doing the jpackage for me. So it has a more updated version of things, and I might even have switched it to using the official JCASC code instead of a Java 8 backport but I forget and would have to double check.

Those subtle differences probably affect the load times. You could try running the 0.04.2 version's jar using a Java 17 64bit runtime and see if it is equally as fast. It might be.
If so, that probably means that the older builds were published with a 32 bit java bundle whereas when I used the program myself I would often run from a code editor that wouldve used a 64 bit JDK, so perhaps I was always getting faster load times on my machine than what you guys are getting out in the field on the release versions. Would also explain yet another reason why I didnt care.

If you want load speed, use an old patch like 1.27. I find that the MPQ parser loads faster than the CASC parser for some reason. If you want HD models then obvious that wouldnt work normally, but maybe you could make an MPQ or folder of extracted hd models and compare the load times.
 
Level 2
Joined
Feb 12, 2020
Messages
13
Is it possible to add attachment points to a model? I've tried importing only attachment points from standard units onto the model im working on, but I have not managed to make it work. Wc3 crashes whenever I try to load the map with said unit.
 
PSA:
Hello all. As you may know, Blizzard has announced a new patch of Warcraft 3 Reforged that will go live on August 17th, 2022. After that date, all existing versions of Retera Model Studio that you may have downloaded from the Hive Workshop will be unable to open ingame Warcraft 3 models, including classic "SD" models, because of the new patch using its own new format.
After that, you will need to download a newer version of Retera Model Studio that is not released yet in order to solve the problem, or move to the twilac version from GitHub.

I've tried importing only attachment points from standard units onto the model im working on, but I have not managed to make it work
In theory what you are trying to do is correct. Maybe some part of it went wrong. Try checking the model with Sanity Test

Hi Retera!

Can you explain me, how to adjust the height of healthbars (higher or lower)?
I tried the function "recalculate extents" and it worked a bit, but it is a random adjustment.
I think you may have already found the solution to this in another thread, but the answer is to edit the MinimumExtent and MaximumExtent and BoundsRadius of the model. I forget which one is the determining factor, but together they should allow you to manually control the invisible bounding box(es) of your model.


if you use magos, you can manually set the extensions
Some versions of Retera Model Studio also allow this in the "Model" tab.
 
Top