Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
Warsmash is a mostly "clean-room engineered" rewrite of Warcraft III. A combination of LibGDX game engine, and the "mdx-m3-viewer" by Ghostwolf (used in "View in 3D" button on Hive model download section) are used to emulate the Warcraft III experience without running the actual Warcraft III game. However, this emulator must get the Warcraft III assets from somewhere on your computer, and does not include them.
Using a complete remake of Warcraft III in this way creates a ton of bugs. Unlike Reforged, where bugs are introduced by breaking existing code, on this project the bugs exist because the non-bugged version -- the way we "expect" the game to operate -- never existed. Because it is completely rewritten from nothing in a totally different language (Java). For example, some people think that Warsmash is in competition with Warcraft III: Community Edition because both of these can potentially provide a platform for playing games of Warcraft III with fan upgrades. But this is an extremely odd comparison. When we launch "Warcraft III Community Edition," on a technological level the computer is running the Warcraft III software written by Blizzard Entertainment in that case. However, when we play Warsmash, the computer is not running the Warcraft III software written by Blizzard Entertainment. If people think that the two projects are the same, but only one of them is a complete remake from scratch, this would seemingly speak very well of the facade achieved by the emulated remake.
Accordingly, what is presented here is a vertical slice of features that still has many known issues:
Campaign - It is possible to click on "Campaign" to play single player campaign missions, but they will not automatically launch they following mission and the in-game cinematics are not working. So about half of the campaign missions probably crash from script errors, and the other half will simply be a bunch of preplaced units where the scripted map events might not work as expected
Custom Game - It is possible to click on "Single Player" and then "Custom Game" to play a custom game. The map selection UI is not finished and is missing the capability to descend into sub-directories. (Thanks to @bear_369 for contributing on GitHub to improve the map preview to show melee/custom status and player count!) You can play both melee maps and some custom games. For example, when I tried playing WarChasers I was able to pick a hero and run around, but eventually after about 2 bosses the player will be stuck and unable to progress.
"Battle.net" button - This button will connect to a Warsmash server of your choice specified in your warsmash.ini. The default one is warsmash.net which is always running and maintained by Retera. The code for this server is on the GitHub if you want to spin up your own. It is not using PvPGN and is a rewrite, so accordingly the features are minimal. /join XYZ might be able to join a custom channel, but /j XYZ shortcut is missing, etc. The only menu button on the server that works is the Custom Games button. It allows you to host games that can be joined by other players on the same server. The menus use TCP connection but when you get into a game session we switch to UDP. For some people, if their ISP blocks UDP, this may prevent the game from working as expected. If you get into a UDP multiplayer game, there is no desync detector, so in case of a desync happening the game will stupidly keep playing. This can have odd consequences
Versions:
Jass - the Warsmash script engine is not as picky as Warcraft III and will allow you to use a new Reforged version of the script environment that declares Jass natives which do not exist on Warsmash, and it will also allow you to use a very old Patch 1.22 version of the script environment that does not declare Jass natives that Warsmash would have supported, if they had been declared. This means that we can traverse up and down Warcraft 3 game version without changing our Warsmash emulator build - we only have to change the warsmash.ini config and possibly some of the [EmulatorConstants] within it.
If you call a native function that is declared but has no behavior on Warsmash, the script engine will log an error but do nothing and continue running. This can be changed to be more strict with a compile setting
You cannot call a native function that is not declared, even if Warsmash would have had a binding for what it does
1.32 - You can emulate some of the Reforged graphics on Warsmash, which load natively (without being ported), but the shaders on Warsmash are not as pretty as the ones on Reforged, and the PKB files do not work because the guys at PopcornFX replied to my email about open source projects by saying that they only support Amazon Lumberyard or O3DE or something like that, and not any other open source projects. You can also emulate classic graphics from a 1.32 install but the experience is inferior to using a legacy version of Warcraft 3, because some of the sound data fails to parse and unit responses are missing. (This is due to Reforged changes for the lip sync of Reforged graphics, which similar to PKB files use a 3rd party technology that Warsmash does not even try to emulate.)
1.31 - To emulate this on Warsmash you might have to recompile and get a different CASC parser. Typically I was using a folder of extracted 1.31 assets (which doesn't require a recompile)
1.29 - This should work fine. Warsmash will detect the RoC/TFT button on the menu and hook it to Warsmash functionality for changing version
1.22 - 1.28 - These should work fine with the warsmashLegacy.ini file provided. Note that they use 16 players instead of 28 in the [EmulatorConstants].
For more information on how the versions are different from each other, see the Warsmash GitHub linked at the bottom of this page.
Project Setup:
Originally I only tested this binary distribution with the English Warcraft III edition, Patch 1.22. However, more recently, I was trying to use Patch 1.29 when possible to prepare for W3CE as the future. So if you already have Patch 1.29 and W3CE on your computer, what I mean here is that you could launch Warsmash emulation using that installation as your source of Warcraft III assets. Based on my tests, this program should be able to function if you reconfigure warsmash.ini to point to your Reforged 1.32 installation, however when you do so, some of the features of this program will be missing. And 1.33 and beyond are not supported. So if you have the latest patch, the Patch 2.0, the Warcraft 3 assets in that installation are not the correct format for Warsmash and I haven't bothered to rewrite how I parse 3D models to match the whims of Activision, so until I change this note it isn't possible for you to use those Warcraft 3 assets in your Patch 2.0 install.
For Patch 1.22 or similar patches, unzip the contents of Warsmash.zip and create a folder as a subdirectory of your Warcraft III installation, like this:
Then, inside this Warsmash folder, you should see the Warsmash EXE as well as the necessary files.
It should look like this:
If you are going to use Patch 1.28 or older, rename the "warsmashLegacy.ini" file to be named "warsmash.ini". Otherwise, if you are going to use Patch 1.29 (such as from a W3CE installation) then keep the "warsmash.ini" that comes with the ZIP.
If you double-click on the Warsmash EXE, then this should launch the Warcraft III game using the Warsmash Mod Engine (so a lot of the features that are not Warsmash-supported yet will be disabled, but you should be able to click around and maybe even have some fun!). If your virus protection deletes Warsmash.exe, you may find it more ideal to trust your virus protection software instead of trusting Retera. In that case, you can create a batch script that should be functionally identical to the EXE, by putting the following line of text inside of Warsmash.bat in the Warsmash folder:
Code:
.\bin\warsmash.bat
For some users the game will not launch at this time, because your hardware is not supported, so do not be surprised if it does not work. However, when that happens, feel free to report back here and discuss the nature of the problem. Most likely I will very soon publish a build of this tool that has improved error logging support. Based on my hardware tests thus far, I am currently requiring OpenGL 4.5 for Warsmash even though there is a solid case to be made that OpenGL 4.5 should not be required ideologically. So, backwards compatibility might be improved in the future, but on OpenGL 4.5 compatible systems right now is where I find that Warsmash really works.
Command-Line Options
At the time of writing, Warsmash supports two possible command line arguments. You can make a shortcut to Warsmash and either of these arguments to your shortcut:
Code:
-windowed
-loadfile <name>
The "loadfile" argument searches within the Warsmash game data, and not in any maps folder yet, so it is best if you test with builtin maps. One example would be "-loadfile (2)bootybay.w3m" that should work regardless of your Warcraft III version, for example. It should also load map files from the "Warsmash" folder in your game install if you are using the default configuration suggested above.
The "windowed" argument currently fights with the mouse capture system and can create nuisances that squash the render window and crash the game because it cannot process having a pixel height of 0 for the game window. When I settle on what the best bug tracker should be for this project, we can add that to the list of known bugs.
Open Source
Most of the entire point of Warsmash is to be an open source project. If you would like to build Warsmash yourself from source, you can download all of the necessary files at this location: GitHub - Retera/WarsmashModEngine: An emulation engine to improve Warcraft III modding
Warsmash is a Gradle Java project, which means that some of the dependencies are not included in the repo above, and instead they are downloaded as a part of the build process from their respective online locations.
The source code of the Warsmash EXE that I have included in this binary build for ease of use is here: GitHub - Retera/WarsmashWindowsWrapper: An EXE for Windows to launch Warsmash
(This is a very tiny do-nothing program that launches Java, as well as forwarding the -loadfile style arguments to the Java program.)
A very cool project that shows a lot of promise. Launching it is kind of inconvenient as you have to obtain the Warcraft 1.22 game data files from somewhere. I think it would really help in adoption if you'd make it default to loading data from the...
The error you listed should be re labelled as Map Not Found later in my opinion. So it is actually not finding MyMap.w3x in this case. Could there be a typo, such as map saved as "MyMap.w3x" but then you launched with "-loadfile MyMap.w3m"? In that case, the m at the end would be the problem typo.
The error you listed should be re labelled as Map Not Found later in my opinion. So it is actually not finding MyMap.w3x in this case. Could there be a typo, such as map saved as "MyMap.w3x" but then you launched with "-loadfile MyMap.w3m"? In that case, the m at the end would be the problem typo.
But just the first build without an error (except for 'wasting memory' or 'can't load mdx' but the map runned), I tested with other maps and is the same case.
What is probably happening is that the -loadfile is not looking in the correct directory. The name "(2)BootyBay.w3m" refers to a file inside of the game MPQs so it will always find that file but it is not actually finding the map you were looking at in the editor. You could try modifying the "(2)BootyBay.w3m" map that you are trying to load, then launching again... I bet you won't see your modifications in-game.
I suggest resting this tutorial about the INI files to fix this problem. Essentially, -loadfile only looks for maps within the folders added as type "Folder" in the INI, and does not look in the current Warsmash program build folder, unless you add that build folder to the INI. One way to usually add it would be to add the folder name "." which refers to current directory on most systems. But, then it will still depend on the current working directory of the Warsmash application when you launch it, which can easily be somewhere weird when running from an IDE such as IntelliJ.
Edit:
So, as an example, I usually put my Warsmash maps in some folder that is something similar to
It's an obvious folder where I'm just dumping maps for Warsmash to find, written out as full path in the INI.
Make sure that when you add an entry to the INI, such as the example above that has index 06, that then you put the "Count" at the top to +1 of that number, so for example if you have 0 to 6 then you need to have Count=7 at the top.
@Retera I'm not sure if that is the reason, I think is because the Gradle is old, because also throws me this message:
Code:
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.6/userguide/command_line_interface.html#sec:command_line_warnings
The IOUtils null pointer exception that you listed is happening in my code and not in gradle, so it is not affected by gradle other than with the current working directory of your program, which gradle may decide for you. If you want to fix it, you will need the map to be located in one of the folders listed in the INI data sources section.
You yourself said that the program was able to load "w3m" files, specifically Booty Bay. If the engine was able to load any map at all, then your gradle configuration is able to run, as far as I'm concerned.
Did you try the EXE binary distribution? If you really believe gradle is the problem, notably that binary does not use gradle. Getting familiar with it could be a starting point.
Anyway I totally know the feeling of interacting with a technology that feels unfinished or incomplete. I think a lot of us have that feeling. If you try running the Warsmash again in a year or two, I think that for sure I will have added the "Custom Games" feature where you choose a map from the "Maps" folder and you play the map that you click in the in-game UI. Once it gets to that point, it should feel exactly like Frozen Throne and you would not need to worry about this anymore. So, if you would like, you could wait until that time when that feature gets added.
You yourself said that the program was able to load "w3m" files, specifically Booty Bay. If the engine was able to load any map at all, then your gradle configuration is able to run, as far as I'm concerned.
In reality, now I don't know what is the real problem, I think is not the type file because I have a custom map that is a w3m file and didn't run.
The gradle I'm also not sure, the version is auto-generated so I don't think is repairable.
Did you try the EXE binary distribution? If you really believe gradle is the problem, notably that binary does not use gradle. Getting familiar with it could be a starting point.
Anyway I totally know the feeling of interacting with a technology that feels unfinished or incomplete. I think a lot of us have that feeling. If you try running the Warsmash again in a year or two, I think that for sure I will have added the "Custom Games" feature where you choose a map from the "Maps" folder and you play the map that you click in the in-game UI. Once it gets to that point, it should feel exactly like Frozen Throne and you would not need to worry about this anymore. So, if you would like, you could wait until that time when that feature gets added.
The reason I wanted participate in this is I wanna know how the programs are created (in this case, this game), also to learn where they can fail, I don't wanna just "wait patiently" until the problem was "fixed" while I can do something.
Ok, this is stupid, but while I'm doing what you asked to me I realized that there are 2 ini files, one in the builded Warsmash and other in the pre-builded, and I was editing that is in the builded, then I edited that is in the pre-builded and then I finally can run the maps (not every map but now what they have a little edits in the World Editor).
Really, I asking to the gods why this dumb things are still happening to me???
Ok, now that I finally can run the maps I add the life regeneration, it wasn't hard (I'm not sure how to upload it).
To do the other things that you asked me I need the IDs of the data and for some reason the modified editors don't show me them and the only way to look at them is using the Reforged Editor and I don't wanna open it, close it, use the Regedit and open again the 1.26 editor everytime.
Edit: Ok I can list them myself, but I just asked in case you already did it.
Edit2: Nah, it will take me hours, did you have a list of the IDs?
for some reason the modified editors don't show me them and the only way to look at them is using the Reforged Editor and I don't wanna open it, close it, use the Regedit and open again the 1.26 editor everytime.
I didnt have a list ready to go at this moment other than just looking in Units/UnitMetaData.slk but a person could try to reformat what is in that file to a list that was more easy to read if they wanted.
For upgrades, there is also Units/UpgradeMetaData.slk
At some point, maybe I should consider rewriting the Warsmash unit data parser to query based on SLK column name instead of the 4 letter meta data ID. Over time, I have become convinced the original game was querying SLK column name. But for now, my code APIs basically require us to live off of those *MetaData.slk files.
I tried that of checking the daytime to consider it in the regeneration, the problem there is no way to reffer the actual simulation outside the class until I see, because every time I wanna add a reference, always there is another reference for the actual instance of the other classes, since I don't wanna screw the code I need a direction to do this.
At the end I achieve it, I just add in the CSimulation class:
Java:
private static CSimulation Instance;
And in the constructor:
Java:
Instance = this;
And I can do this:
Java:
public static boolean IsDayTime() {
final float time = Instance.getGameTimeOfDay();
return (Instance.gameplayConstants.getDawnTimeGameHours() < time &&
Instance.gameplayConstants.getDuskTimeGameHours() > time);
}
And to the regeneration (I did a some other things, but principally):
Hey, that's cool that you got this to work! I was trying to avoid static state where possible, just for the sake of the kinds of code design ideas that I was using.
Later on when we are not using -loadfile, and there is a button in the game to play a map, then exit the map to the menu, then play a different map, it will be possible for one instance of Java to have multiple CSimulation instances representing two different "simulation play sessions". I think that the original Warcraft 3 uses a lot of static state, and that is why we have bugs in the game where sometimes certain maps say "you need to exit Warcraft III and start it again before playing this map" because the Blizzard Entertainment Warcraft III program code will store variables statically, and then not clear them out when someone quits to the menu and then starts playing a different map.
So, knowing that there is this possible for errors, I was trying to avoid static state as much as possible. But I still used static state in one or two places for some of the attack type and damage tables. So I have not followed my own rule perfectly on this.
Because there will only ever be one CSimulation instance at a time then I think it is true that your change will always work in all cases. The only time this would not be true would be if someone made a very crazy mod of the game where players were jumping between two maps in a multiplayer session where the game engine was getting asked to "keep both maps running" or something like that. It's still a crazy idea. That will probably never happen.
So, in general, I think if what you're doing is working then it's great!
Edit: A week or two ago after I suggested implementing the hit point regeneration like this, I tried implementing it, too. I might update the github repo with my latest branch that includes my change in case you want to compare against a different solution for fun. It was really similar to yours but I used my instanceable paradigm and so the function to update HP only is called from CUnit.update(CSimulation) and then it takes a CSimulation passed in as an argument.
Hey, that's cool that you got this to work! I was trying to avoid static state where possible, just for the sake of the kinds of code design ideas that I was using.
Later on when we are not using -loadfile, and there is a button in the game to play a map, then exit the map to the menu, then play a different map, it will be possible for one instance of Java to have multiple CSimulation instances representing two different "simulation play sessions". I think that the original Warcraft 3 uses a lot of static state, and that is why we have bugs in the game where sometimes certain maps say "you need to exit Warcraft III and start it again before playing this map" because the Blizzard Entertainment Warcraft III program code will store variables statically, and then not clear them out when someone quits to the menu and then starts playing a different map.
So, knowing that there is this possible for errors, I was trying to avoid static state as much as possible. But I still used static state in one or two places for some of the attack type and damage tables. So I have not followed my own rule perfectly on this.
Because there will only ever be one CSimulation instance at a time then I think it is true that your change will always work in all cases. The only time this would not be true would be if someone made a very crazy mod of the game where players were jumping between two maps in a multiplayer session where the game engine was getting asked to "keep both maps running" or something like that. It's still a crazy idea. That will probably never happen.
So, in general, I think if what you're doing is working then it's great!
Edit: A week or two ago after I suggested implementing the hit point regeneration like this, I tried implementing it, too. I might update the github repo with my latest branch that includes my change in case you want to compare against a different solution for fun. It was really similar to yours but I used my instanceable paradigm and so the function to update HP only is called from CUnit.update(CSimulation) and then it takes a CSimulation passed in as an argument.
That's great, so I think I can continue with other thing, you telled me about the constructions not working, so I can work with that, so I need a direction.
PD: Isn't there a chat that we can talk instead of here?
Hey, sometimes for example last night I don't know if you are tracking all my posts or whatever but I posted some random opinion on an off topic hive thread while I was getting into bed. And I think at a time like that when I am getting into bed and post some opinion on some topic somewhere, for me it is easier in my mind to do that than it is to give meaningful and accurate instructions on how you can improve the construction system. I'm sorry if that's trouble for you, but it is something that happens as a result of how I am a hobbyist. I spent a lot of time on Warsmash already to this point and I really want to make my vision for it be achieved, but I have a job that I am working at 5 days a week, all or almost all the day long, so I usually only get to care about Warsmash and focus on this creative space on the weekends, primarily. Even then, yesterday I didn't do that and instead of communicating online much, I was digging into a custom faction on Warcraft 3 that a modding friend I met 8 or 10 years ago online recently created. This guy made a faction just for me to use as a possible future mod on Warsmash to help advertise it, and I think that's very cool. Rather than only play his faction, I was breaking it apart and trying to make it run outside of his map and learning about what I could do with it. I have made a lot of disorganized Warcraft 3 mods and certain parts of his generated jass script were fascinatingly well organized, in their own way.
Then yesterday evening when I was still at the computer, I forgot to reply to you and I played Diablo 2 Resurrected instead. I suppose I am not above the hypocrisy of playing Diablo 2 Resurrected. It has been fun for me.
So, it's just self serving really. From time to time I am doing whatever I want, and when I remeber I am happy to chat and help you learn this project.
I use Discord often, probably because other people use it. I never bothered to deeply evaluate whether it was good or not, but I have used it extensively. So, for better or worse, if you have a discord account, Discord could be one place to try to reach me that might possibly reach me faster.
@Retera I said that because you took days to answer me, I understand that you are busy or you wanna relax, but I though at least you can tell me about the place we can chat, speaking of which, yes I have a discord, but where can I find you there (I'm not sure is the Retera Model Studio Users Group).
Hi, it’s been a while since I posted here but I wanted to ask if there are some features which don’t need finishing quickly and no one is working on yet. I don’t have a lot of time to work on something at the moment, but I would love to contribute and may have a bit more time this month.
Hi, it’s been a while since I posted here but I wanted to ask if there are some features which don’t need finishing quickly and no one is working on yet. I don’t have a lot of time to work on something at the moment, but I would love to contribute and may have a bit more time this month.
Sure. There is probably more that is not done than that is done. I have three or four Windows 10 machines that I use regularly recently because I was preparing for the pandemic and never got rid of the old ones when I got replacements and although at least one of them is junk and cannot handle the GLSL shaders of Warsmash without modifications due to hardware limitations, basically at least three of them have their own local clone of the Warsmash git repo and they have all forked down their own path with modifications and have not merged back together yet. So it's about time for me to do that merging. There are also two remote mirrors, one that is public on GitHub for the world to see and one that is private, and the private mirror is sitting a few months ahead of the public GitHub mirror with my more recent updates. I'm not sure how extensively you've tested but as an example I believe the current public GitHub sourcecode is not actually capable of playing WarChasers in the manner that I presented in my most recent public showcase video on my YouTube account.
I was letting the public repo fall behind and updating the private repo for a bit because I was thinking that the private repo would only be marginally useful to the public while it's still under heavy development. In particular, because I enabled my Jass interpreter to execute during play, crashes are more frequent and dependent on map script which heavily restricts the number of maps that can be playtested without problems/crashes. Nevertheless, my goal is that the outcome will be that I can support a subset of Jass including map "config" functions, so that I can create the single player custom games experience where the user chooses a map from a list UI.
Once that's working, after that I was thinking of trying to take the hacked together multiplayer engine and see if I could get something functional for the holidays so that I could do multiplayer holiday fun with the engine.
But when I talk about a multiplayer experience on this engine, it still is not going to achieve my the goal at all for a very long time. Only the Orcs are actually anything close to a playable RTS gameplay if we fire up the engine with War3 unit stats and no modifications. The human build mechanics are missing, so humans can only harvest resources but not spend them on much. Night Elven build exists as a copy of Orc build, but isn't finished. Undead build was implemented enough that it looked functional in one video one time but it is largely untested. I think that on one of my computers the Undead build will actually alert "We cannot summon there" when the player clicks outside of a blighted region but I forget if that's included in the public GitHub mirror at the moment. Ghoul lumber harvest works and includes the eye candy to turn trees into a blighted state, but Undead buildings ability to spawn blight when finished constructing is probably missing if I recall and the Haunted Gold Mine systems are not in place so Undead can't get gold. Similarly, the Night Elves cannot get gold or lumber in any version except for two nights ago I was tinkering before bed and drafted a first iteration of wisp lumber harvesting that works for a few workers at a time but will give up instead of harvesting if the wisp can't find a tree quickly enough due to side effects of how the movement system is implemented.
Even if we added a way for all these races to get gold and create structures so that the Orcs were not the only "playable" race, the Research system is not implemented and crashes if we enable it from sourcecode and try performing any research at a building. There's some skeleton code but it's not finished. Similarly, the icon will show appearing to offer a way to upgrade a town hall to tier 2 in some of the recent versions, but the code to actually run a loadbar (but WITHOUT a unit queue UI) and then transform the unit to a new kind of unit with more HP and a different name is not implemented. I think the hardest part of that will be implementing a morph mechanic to transform a unit to a new unit type, but once that is done it will get re-used frequently. Maybe the Root ability will use that? But probably not; initially I am targeting emulating a Frozen Throne experience, and only after that I would like to mod my own engine to build something superior. So for the first draft, I would probably just hack together Root in a way that feels similar to how it was clearly hacked together on Frozen Throne. Don't know, because I did not implement it yet.
Even in a theoretical future where we fix everything I just listed and have a game where all races can access all their units and structures, heroes are not yet applying the "Techtree - Requirements Tier 2" stuff yet to limit to one hero per tech tier. Also, when they limit to one of a kind of hero at a time, the Jass native for this applies a limit that is implemented incorrectly. It allows us to train the hero a second time up until the train bar finishes for the first hero of that kind, so you can make two Blademasters for example, which is silly and broken. But the problem is the abstract concept of setting player unit availability from jass. Speaking of Jass, if I upload that version so you could try to fix that, the Jass debug system and the tracebacks it gives pointing to what line of jass caused the crash is still quite hacky and annoying to work with, so any improvements on that would be great.
A lot of the WC3 modders who are really into it on Hive's Discord told me that implementing Jass into my engine instead of just dumping in a lua library from online and having all maps convert jass to lua on the fly was a terrible idea, but I did it anyway. I am not yet building an idealistic engine to serve all purposes (yet!) -- at first I want an emulator of my childhood Frozen Throne experience, and then afterwards I may try to upgrade and innovate and make my own things from what I learned. Only then, I will be able to do my own Reforging and learn if my claims for years that Reforged developers were not doing a good job are actually true, or if what they did was actually best and I simply did not respect them.
If I did not have the rule of constraining myself to an emulator of Frozen Throne, the well-reasoned feature creep would make everything that I am doing into nothing, and I would have created something totally different. You can actually already play Warcraft III on the Starcraft II engine, and a lot of people spent more time collectively inventing Starcraft II to be the future of RTS moreso than what I have spent on this project. But I remained on Frozen Throne engine for years and did not move my projects to Starcraft II in part because I enjoyed the simplicity. Now Reforged made it more complicated, even though it's hard to point a finger at anything in Reforged and say it was wrong. So, when I get the opportunity to do my own Reforging in a few years, I want to start from an emulator of the actual simple experience that I know I value, and not be trying to start from a Reforged emulator for example. This has been my goal and yet most builds of Warsmash engine still have systems for loading MDX1000 models because they include so much stuff from Hive community that changed too quickly before I could save how I liked it, and also because of societal pressures on me from people I know who are somehow convinced it's a good thing when I can dump this engine on a PC that only has Patch 1.32 and then play the engine anyway.
So anyway what I was originally going to say is that even little things like training a hero is broken. Ability levels are broken. Accordingly, there is no system for leveling a skill on a hero, just some skeleton code that started implementing it but was not finished in CAbilityHero. I have systems for ability menus though, so even if they're a bit obtuse to use it's conceivable to me that implementing learnable hero skills probably wouldn't take that long. But some stuff will have to change.
I'm sorry this is not a bulleted list but if anything through all of that reaches out and grabs your attention and calls out to you as something you would enjoy tinkering with, I would say to have at it. Even if I end up egotistical and don't use your work or something, or even if I forget to check your fork like how I implemented my own HP regen solution instead of looking at yours, I think that the experiences we have when tinkering with this system and adding stuff can be good experiences. The sky is the limit, you can learn anything, and it builds you into a better person even if Activision Corporate emails me tomorrow morning with a C&D on this project and I delete all Retera accounts and disappear forever. Even the original devs of War3 basically say this -- just do whatever and have fun and keep learning.
( To be clear, though, I had it on decent authority that Activision will not care what I do as long as I continued to make no money and I just mod Warcraft 3 however I want for fun, though. Sounds to me like maybe Activision will not be making any more RTS games, and their lawyers probably cost $1000 per hour for a consultation, so they're not going to even bother to consult their lawyers for something worth $0 like my Warcraft 3 modding habbits. )
Sorry for taking that long to reply. Unfortunately, the time of the month when I have more time has not yet arrived and things got even more stressful than expected. I wanted to take my time and read your message properly and not skim through it.
Yeah, keeping different project versions consistent over multiple devices is a problem I know too well.
The Jass interpreter sounds very interesting, but I can imagine that it is a pain to get running consistently.
Fixing some of the construction stuff sounds like something I’d (hopefully) be able to pull off. Maybe even the blight mechanic or the hero training mechanic. I’ll have to look at the code again next week to see if I understand it well enough yet to properly integrate these things but I’m looking forward to it.
Thank you for letting me know about what I could try!
Absolutely, I agree that doing things like that for the sake of the experience is the best way to approach it. And it is exciting to experiment with the code and learn something while doing so.
(That’s good to hear. I mean, it would still be a real shame if they shut it down.)
Missing yellow arrow icons for Sentinels and Alliance Campaign and some of the missions in the list.
Cannot choose the Difficulty in the campaign screen (no combo box).
I cannot choose any map when I go to "Custom Game". There is no list of maps. (I have an old English Warcraft pre Reforged).
Reforged support would be cool. If I place it in the Reforged folder it doesn't work from scratch. That would be useful for Reforged users even if you don't like Reforged. You will get more users = more feedback.
The text on the loading screen of The Durotar campaign is placed wrongly. It covers the title text.
Starting the Durotar campaign crashes the game. I guess this is because it does not support all the triggers yet? Maybe instead of crashing you could just load the terrain and not execute the unsupported code stuff (it's just a guess maybe it is something different since I am able to start other missions).
Maybe add the Reign of Chaos campaigns to the campaign screen.
I just started one mission of the Frozen Throne Undead campaign and got a revealed map with all the units on it and I think wrong alliances since units were killing each other from start. Maybe the units were placed there for the cinematic so I might be wrong.
Opening the main menu in a single player campaign map does not pause the game.
I cannot see the square of my view on the minimap so I do not know where I am with my camera.
No chat in the singleplayer mission -> no cheats.
No hero icons on the left after training a hero.
Can't click on the unit portrait to move the camera to its position.
Orc UI although I am playing Undead.
Cannot hit barrels/destructibles with right click order (I need to explicitly order the attack).
No options yet -> no permanent health bars, volume, resolution, wide screen support.
No fog of war?
Crashes when starting several scenarios of the campaign.
Maybe when you fix/improve these things and no more crashes happen you can start supporting JASS functions one by one. I am really impressed with this project!
Funny thing I discovered here, but when I go to the bottom of the main tool page and navigate to the "hosted project forum" and check the teaser videos section, it looks like the author of this project, Retera, has a version of this tool that is ahead of the one we have available for download. For example, the last two videos feature a single player menu that is clearly able to choose a map, as well as a video claiming to be footage of multiplayer support that also features jass triggers in multiplayer, automatic right click of barrels, and a bunch of other stuff that doesn't seem to be in this download (like you noted).
Maybe Retera intends to publish that newer version at some point in the future for us? @Retera
As mentioned in other thread, I've been playing with GUI configured multiplayer. This bundle has now been updated with a test build for that. More info here:
Is there any way to download/test your version. Sure. Reforged is 30 GB, but Warsmash is 1 MB, so that is 30000x smaller, which is entertaining. Obviously this is because it does not include the assets. I have attached a copy of the 1 MB repo to this post. If you're more interested, I already...
www.hiveworkshop.com
Edit: Would it bother anyone if I take down the older alpha binary from last year? There is a huge version jump in the multiplayer client because it uses JASS.
As an update to anyone trying to use this, after I posted the note about multiplayer I forgot to test the live server powering the multiplayer to check that it worked similarly to how things had been on my local machine.
I found that there was a bug preventing games from starting where the IP : port of the hostbot sent to each client was incorrect. It was sending 127.0.1.1 to each client (for the handshake to switch from TCP chat lobby server to the UDP lock step gameplay endpoint) even though it had the valid port number, so then games would not start. (Technically they would start, and then ingame the world would be frozen.)
No one reported this issue to me so I do not know if anyone had tested the multiplayer capability yet. However, the "warsmash.net" server deployment version now has this issue fixed. I will probably get the changes committed and pushed to the public github sometime soon (for anyone who is trying to use only their own gaming network server instance and not use mine).
Edit:
Updated with a few fixes, but still a ton of stuff yet to be fixed.
Edit 2:
Updated with a few more fixes. After some multiplayer with Hayate/BlenderBoi, we ran into some stuff that should be fixed in this later round of updates.
As mentioned in other thread, I've been playing with GUI configured multiplayer. This bundle has now been updated with a test build for that. More info here:
Is there any way to download/test your version. Sure. Reforged is 30 GB, but Warsmash is 1 MB, so that is 30000x smaller, which is entertaining. Obviously this is because it does not include the assets. I have attached a copy of the 1 MB repo to this post. If you're more interested, I already...
www.hiveworkshop.com
Edit: Would it bother anyone if I take down the older alpha binary from last year? There is a huge version jump in the multiplayer client because it uses JASS.
Maybe so, but I've used Hive longer than I have used GitHub and it feels natural to me to put a binary in the Hive's tools section even if I'm being a little oldschool by doing that.
If this version would work well, it could add features to improve the quality of maps which are missing from Reforged and bring back the feeling of the original Frozen Throne at the same time. I like the old GUI of the main menu and Battle.net.
Some features which could be added in this project which are missing from Reforged/Frozen Throne:
24h servers where more than 24 players could join and leave at any time. This would allow RPG servers.
Map transitions/campaigns in multiplayer.
A proper JASS debugger with break points, stack traces etc.
Many new natives to access more from the game engine.
Fixes of all the known bugs in Warcraft which Blizzard simply does not fix.
Remove limitations: All tilesets/cliff types in one single map, gigantic map sizes and player numbers in one map.
Since Blizzard doesn't add many requested features and does not fix most of the bugs, this could at least provide them to make more interesting maps in the future.
Some feedback for the current version:
Clicking on the Reign of Chaos icon in the main menu does nothing for me and the game freezes or something.
Having multiple units selected like Peasants I cannot see the build icon.
The teams combo boxes in the lobby do not work.
The color combo boxes in the lobby do not work.
When I start a melee game, I have instant victory for some maps (not all).
Map folders are not shown in the lobby.
Maps are simply listed with their file name (not that important I know).
Minimaps do not show neutral building icons.
Advanced Options do not open.
The background sound in the main menu is a bit weird.
No minimap square, buttons, icons etc.
No tooltips in Time of Day, gold, food etc.
Loading screen does not show minimap and no player names + races.
Portals do not work. I guess the whole war3map.j has to be interpreted to make everything work including the victory stuff, enabled portals etc.
No chat.
No log GUI.
Battle.net UI could show the online users on the right side.
Creating a custom game in your Battle.net and starting it led to a freezing game.
I think you know most of these issues but it would be cool to see them fixed soon. A JASS interpreter is probably a lot of work but at least interpreting the basic functions like Waygates and everything else for melee maps would be nice.
I am actually really impressed with the Battle.net support. I have joined a custom game with your name in it. Maybe it is hosted permanently. Good multiplayer support with some join functionality for running games would attract more players.
When an open-source engine recreation gets far enough in quality, it becomes superior to an undeveloped proprietary engine to keep the game alive. This isn't very common, because getting an engine to that point with hobbyists is very difficult. But it's possible. For example Caesar 3 has Julius (open-source engine sticking to vanilla gameplay but with loads of QoL changes) and Augustus (variant of Julius with loads of gameplay improvements). The game experience is much better than with the original.
I would love to see this engine get to the point where it's a reasonable alternative to using Vanilla 1.29.
I haven't tried it out for now, I haven't been playing W3 lately. But I think that the concept and what you have achieved so far are promising, and that there is a much better chance for it to work long term than of Blizzard sorting out the mess they've created. I'll let you know about my impression when I come around to testing it.
I had problems with it. You have to recompile JCASC for the other version of CASC, and then if you get that working there was some encryption problem with the 1.31 version of the WAV files when they would load via JCASC or something.
What does work, in my experience, is to use JCASC to extract the exact contents of 1.31 to a folder and then mount that folder as a Warsmash data source. You can read more about how to probably do that in the README of Warsmash that has WC3 version-specific descriptions of how to configure this technology:
It allows source-code modifying of behaviors, so that means that we can do stuff like adding WoW features or porting to mobile phones:
Or the 3x3 inventory that can hold 9 items like in this video, which would probably never work on Reforged UI Frame APIs:
As a note, I published an update to the binary download today that includes a bunch of additional changes from the past several months, including a pausable jass VM that supports TriggerSleepAction as well as the JSON ability system contributed to the GitHub by the user Glasir/Glasislundr
hello my friend Please add many new features to particle emmitAR 2. For example, I would like to ask you to add filters that make the 3x3 textures look intact in the game and the extremely transparent textures of the emmitar texture.
And one more request, can you invent a program to make an easier ribbon emmiter animation for warcraft3 itself? that is, you animate in it, for example, you write the animation time of your model 0-200 (for example, "stand" state), you animate in the program, and when you are ready, you enter the generated codes of that animation into your war 3 model editor and connect to bone transfer the value to the rotation translation places of the ribbon emitter and the problem is solved.
I apologize if google translator translated some of my words incorrectly
my goal is similar to yours bro. that is, the difference is in particle states. I say popcorn fx effects should be similar to ordinary warcaft3 classic effects. I will soon send pictures and concepts of my dream particle emmiter, ribbon emmiter and new emmiter coupler, which I hope you will use in your project. thank you very much in advance!
Although this is possible, it would probably require players to use a recompiled version of the engine. For example, when I was using MDX1300 in the engine and loading from the WoW alpha build someone sent me, those have a different particle emitter format for PRE2 and so if the model version is 1300 the parser would have to jump over a bunch of extra data. Rather than to render that data, since I was not familiar with the WoW stuff I skipped it while parsing, effectively removing it. However, if it was desired, like you are thinking it would be possible to use your own particle logic in a custom recompiled version of this project.
But I might hesitate to throw that into the mainline engine itself unless if it was blocked behind some notably unique version information that would not conflict with any present or future model versions. Maybe a separate chunk type like PRE3, or perhaps a different model file version that isn't 800/900/1000/1100 nor 1300/1400/1500 from WoW alpha (which stupidly are from 2005 from "the other time that the version number increased above 800" and is an independent reinvention of bone weights and other stuff that was added in Reforged)
Although this is possible, it would probably require players to use a recompiled version of the engine. For example, when I was using MDX1300 in the engine and loading from the WoW alpha build someone sent me, those have a different particle emitter format for PRE2 and so if the model version is 1300 the parser would have to jump over a bunch of extra data. Rather than to render that data, since I was not familiar with the WoW stuff I skipped it while parsing, effectively removing it. However, if it was desired, like you are thinking it would be possible to use your own particle logic in a custom recompiled version of this project.
But I might hesitate to throw that into the mainline engine itself unless if it was blocked behind some notably unique version information that would not conflict with any present or future model versions. Maybe a separate chunk type like PRE3, or perhaps a different model file version that isn't 800/900/1000/1100 nor 1300/1400/1500 from WoW alpha (which stupidly are from 2005 from "the other time that the version number increased above 800" and is an independent reinvention of bone weights and other stuff that was added in Reforged)
Hello bro!
I have posted a picture of what I have in mind now and I will let you know if there are any other thoughts
1-Emitter Latitude: this is a function that tilts the effect moving along Z to 0-180 degrees, a function that must be placed in each of 3 segments
2- Flags-Team Color Ingame: that is, a function that moves to Z by coloring the emission particles in 12 or 24 different colors. You can say that there is a correct Replaceable ID feature 2, but the bug feature where he can't switch from that Hero Glow form to anything else could have removed him from PE2.
3- Circular Emitter: This is a function that directs the distance between the X-Y axes to Z. Its activation options are: -1 to Z from the left side, 1 to Z from the right side, and finally 0 to no Z direction
4- Filter Mode:
Blend-Additive- type of filter added together XD. This is more like Reforged emitters.
Mega-Blur- This is a type of effect that emits sound from heat.
For example: (Time: 1:25)
Shadow-Blend - A strange type of smoke effect.
2D and 3D filter types are the perfect way to improve the functionality of Tail.
Bro I have some more thoughts. I hope to share the rest of my thoughts with you in a few days. Yes, I would like to share the Flare Emitter function with you, but the messages with pictures are not ready. After a few days, I will introduce you again with my ideas. I think you will analyze my ideas. Many thanks in advance for the thoughts!
Although this is possible, it would probably require players to use a recompiled version of the engine. For example, when I was using MDX1300 in the engine and loading from the WoW alpha build someone sent me, those have a different particle emitter format for PRE2 and so if the model version is 1300 the parser would have to jump over a bunch of extra data. Rather than to render that data, since I was not familiar with the WoW stuff I skipped it while parsing, effectively removing it. However, if it was desired, like you are thinking it would be possible to use your own particle logic in a custom recompiled version of this project.
But I might hesitate to throw that into the mainline engine itself unless if it was blocked behind some notably unique version information that would not conflict with any present or future model versions. Maybe a separate chunk type like PRE3, or perhaps a different model file version that isn't 800/900/1000/1100 nor 1300/1400/1500 from WoW alpha (which stupidly are from 2005 from "the other time that the version number increased above 800" and is an independent reinvention of bone weights and other stuff that was added in Reforged)
Hey, sorry I didn't do any of that stuff you asked about inventing a new particle format. However, I remain committed to the idea that Warsmash should be a free (as in "libre"/liberated) software, wherein the user is liberated to be allowed to make their own version if they want. If you make a version that follows the rules and design that you described, and publish it here, I will enjoy seeing your work. To reinforce the openness of Warsmash, and to resolve a license issue, the project is now AGPL licensed instead of MIT licensed.
Hope you are doing well.
Edit: If you want to see how Warsmash parsed World of Warcraft PRE2 chunks, there is code for that here. It is, however, not very novel. It is a poorly implemented parse of the format described here.
Hi,
currently I get this with the latest version from Hive and Frozen Throne:
JASS:
Renderer: NVIDIA GeForce RTX 3070/PCIe/SSE2
Wasting memory with conversion from InputStream to buffer in MdxModel
Loading TOC file: UI\FrameDef\FrameDef.toc
line 1:0 token recognition error at: '?'
Loading TOC file: UI\FrameDef\SmashFrameDef.toc
Wasting memory with conversion from InputStream to buffer in MdxModel
Wasting memory with conversion from InputStream to buffer in MdxModel
Wasting memory with conversion from InputStream to buffer in MdxModel
Wasting memory with conversion from InputStream to buffer in MdxModel
Wasting memory with conversion from InputStream to buffer in MdxModel
Attempting to load non-existant file: ReplaceableTextures\.blp
java.lang.IllegalArgumentException: input == null!
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1358)
at com.etheller.warsmash.viewer5.handlers.blp.BlpTexture.load(BlpTexture.java:30)
at com.etheller.warsmash.viewer5.Resource.loadData(Resource.java:28)
at com.etheller.warsmash.viewer5.ModelViewer.load(ModelViewer.java:197)
at com.etheller.warsmash.viewer5.handlers.mdx.MdxModel.load(MdxModel.java:186)
at com.etheller.warsmash.viewer5.handlers.mdx.MdxModel.load(MdxModel.java:315)
at com.etheller.warsmash.viewer5.Resource.loadData(Resource.java:28)
at com.etheller.warsmash.viewer5.ModelViewer.load(ModelViewer.java:197)
at com.etheller.warsmash.viewer5.handlers.w3x.War3MapViewer.loadModelMdx(War3MapViewer.java:2392)
at com.etheller.warsmash.parsers.fdf.GameUI.setSpriteFrameModel(GameUI.java:1495)
at com.etheller.warsmash.viewer5.handlers.w3x.ui.MenuUI.main(MenuUI.java:845)
at com.etheller.warsmash.WarsmashGdxMenuScreen.show(WarsmashGdxMenuScreen.java:208)
at com.badlogic.gdx.Game.setScreen(Game.java:61)
at com.etheller.warsmash.desktop.DesktopLauncher$1.run(DesktopLauncher.java:122)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.executeRunnables(LwjglApplication.java:309)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:236)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:138)
Wasting memory with conversion from InputStream to buffer in MdxModel
Wasting memory with conversion from InputStream to buffer in MdxModel
Exception in thread "LWJGL Application" java.lang.NullPointerException: Cannot invoke "com.etheller.warsmash.parsers.fdf.frames.UIFrame.setVisible(boolean)" because "this.battleNetChangeEmailPanel" is null
at com.etheller.warsmash.viewer5.handlers.w3x.ui.menu.BattleNetUI.<init>(BattleNetUI.java:170)
at com.etheller.warsmash.viewer5.handlers.w3x.ui.MenuUI.main(MenuUI.java:1404)
at com.etheller.warsmash.WarsmashGdxMenuScreen.show(WarsmashGdxMenuScreen.java:208)
at com.badlogic.gdx.Game.setScreen(Game.java:61)
at com.etheller.warsmash.desktop.DesktopLauncher$1.run(DesktopLauncher.java:122)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.executeRunnables(LwjglApplication.java:309)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:236)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:138)
It closes immediately after running the .exe.
The parent folder contains Frozen Throne English version 1.27.1.7085.
// This file defines the emulator settings,
// such as where to find the Warcraft III assets.
// It should be located in the current working
// directory when the Warsmash engine launches.
[DataSources]
Count=2
Type00=CASC
Path00="C:\Program Files (x86)\Warcraft III"
Prefixes00=war3.w3mod,war3.w3mod\_deprecated.w3mod,war3.w3mod\_locales\enus.w3mod
//Prefixes00=war3.w3mod,war3.w3mod\_deprecated.w3mod,war3.w3mod\_locales\enus.w3mod,war3.w3mod\_hd.w3mod,war3.w3mod\_hd.w3mod\_locales\enus.w3modType01=MPQ
Type01=Folder
Path01="resources"
Type02=Folder
Path02="C:\Users\Tamino\Documents\Warcraft III\Maps"
[GamingNetwork]
Server=warsmash.net
[Emulator]
// Player settings: use 28 for the "24 player" patches,
// and use 16 for the "12 player" patches, because
// this constant includes Neutrals
MaxPlayers=28
// Game version:
// 0: RoC (not well supported)
// 1: TFT (very supported)
// 2: some code comment says this could be used for mods, but don't for now
GameVersion=1
// Catch cursor -- eventually this should probably be decided based on windowed mode
CatchCursor=1
// My tileset loader is "always on top", even for local files. This is different
// from some MPQ loader engines that would use
// load index as a numeric value and could be changed. For now, I have this
// workaround to fix it if you need the local files
// to take priority over built-ins for tilesets.
FixFlatFilesTilesetLoading=0
EnableMusic=1
// This setting, if turned back on, might cause us to load
// ingame units based on the map editor data instead of loading
// based on the map script. It is not well tested, and is always
// left off lately.
LoadUnitsFromWorldEditData=0
// Does nothing for now
CrashOnIncompatible132Features=0
// Hotkey mode:
// 0: hotkey data from the map editor or game units
// 1: hotkey is forced to use QWER/ASDF/ZXCV grid
InputHotkeyMode=1
// If you need the model loader to accept RoC Beta assets, you can use this,
// however this only changes MDX parsing and not BLP0 parsing so the BLP0 parsing
// would most likely fail unless you're using flat files. So in practice, I was
// using RoC Beta MDX assets with TFT format converted textures while activating
// this setting, meaning that it probably won't work for you unless you know
// what you're doing.
ParseReignOfChaosBetaModelsInstead=0
and I basically have a black screen with only FPS showing:
FPS goes from 0 to 30 and I have clear menu sound which is really loud.
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.