WarsmashModEngine
WarsmashModEngine copied to clipboard
Suggestion: Create a new fork that is fundamentally the same, but still not WC3 (basically a twin with some twists)
Maybe you can borrow the assets from this open source game https://github.com/0ad/0ad for now, till the fork has its own assets in the unforeseen future. ( A YouTube video about the game: https://www.youtube.com/watch?v=_8HUuR8jGGg )
0 A.D. license: https://github.com/0ad/0ad/blob/master/LICENSE.txt
Due to the nature of the current codebase doing what you are asking would likely take an incredible of time to do, but I appreciate the sentiment and honestly wish that I had planned more for that because at some point I probably WILL want to do what you are saying.
A potentially interesting stepping stone in that effort could be trying to replicate both Warcraft 3 and Starcraft 2 off the same core codebase (considering SC2 engine has a lot in common, like .m3 models)
This would also attract interest in the AI community who currently have to use an official client, which is not cross-platform (although Wine + free starter account work) and not open-source (although, it has a very extensive API)
By the way, if we ever start working on this OSS Starcraft 2 client, we'd need to re-implement the protocols used in this API https://github.com/Blizzard/s2client-api
These engines do not have M3 models in common. There is almost nothing in common between SC2 and WC3 engine other than the visual experience. Running SC2 on a WC3 emulator is technologically akin to trying to run Windows 7 experience using XWindows. As a user they may look similar, but they are not compatible technologies. You might be able to create a mod that would run on Warsmash using space themed character assets and behaviors, but even after a large technical undertaking like that in the end you would have a very different, new game experience that would not match SC2.
Some reasons why SC2 will not run on Warsmash:
- Warsmash pathfinding is clunkier than Warcraft 3, which is clunkier than Starcraft 2. So you would be trying to use a cheap open source copy of Wikipedia's A* pseudocode algorithm and then using it to play a million dollar experience where players expect some fancy navmesh searching and units pushing each other out of the way
- Starcraft 2 Shields light up an area of a sphere when being struck by an attack. Warsmash using a 2002 simple diffuse 3d model render pipeline has nothing like that, and would require you to write new shaders for this kind of shield (basically like writing a new engine anyway)
- Starcraft 2 Colossus unit can walk up a cliff with one foot up the cliff and the other foot down the cliff. I don't really know how they do that, but it's probably either IK rigging or some halfway hack that at least approximates that concept. Warsmash has nothing like that because it is a Warcraft 3 emulator -- all 3D models have simple skeletal mesh, with matrices being computed top down
- Starcraft 2 has heat and vortex effects that distort the visualization, probably in some postprocessing after rendering. I don't do that, because for the kind of hobby I am doing that would be a waste of time
- Starcraft 2 terrain is drawn by layering gradient fills of multiple textures spread around in some fancy system that people say looks better. The Warsmash terrain render is copied from the HiveWE project to look like Warcraft 3. It is literally a giant grid where each tile has its own texture cell asset. The granularity of control that we have over this large grid is much less than what was expected in Starcraft 2.
- Starcraft 2 stores unit data in XML format. Instead of that, I am emulating a 2002 hacked together engine where units were made in Microsoft Excel, so Warsmash loads units from the SLK spreadsheet format.
- Starcraft 2 has its own scripting language called Galaxy Script. Currently Warsmash includes a JASS2 interpetter for the Warcraft 3 scripting language. All the smart people told me I shouldn't do that and I should just use some existing lua thing instead. I didn't listen and I did it anyway. I am trying to emulate my childhood experience of Warcraft 3 modding by immortalizing that technology. If you want a big game engine with all the best engineering, we already have Starcraft 2 and Unity and Unreal and such.
So, I am not saying anything would stop you from going to the Hive Workshop modding site and downloading a ton of ported Starcraft 2 assets, then opening Microsoft Excel and providing hp and damage values for these guys in each their own row and saving it to the format Warsmash expects and then playing it. You could totally do that. I could probably do that in a day or two if I was on vacation and my life depended on it. But it would probably look nothing like the Starcraft 2 that you know.
Alternatively, since an emulated warcraft mod like that probably doesn't interest you, you could write your own engine and make your own open source Starcraft 2 emulator project from scratch. I don't know if a project like thay already exists, but obviously you could copy any of my code that you needed to help with that. I am just incredibly skeptical that literally any of my code would help with that... at all...
I am aware of differences between SC2 and WC3 engines, and I don't agree that they are severe. Each subsystem has been improved over the years (like the upgrade from MDX/M2 in WC3/WoW and to M3 in SC2), but those are (in my humble opinion) just that: upgrades.
Most of the things you mentioned could be fixed by
- improving existing code (rewriting path-finding)
- making subsystems pluggable (i.e. provide 2 different implementations for unit data loaders, XML and SLK)
- adding things on top of the existing engine, having them disabled for "Warcraft 3 mode" (postprocessing, shader effects, etc.)
I was not trying to convince you to do any of that, just want to know the direction of this project, so as to gauge whether I could contribute in a useful manner.
I am trying to emulate my childhood experience of Warcraft 3 modding by immortalizing that technology. That explains it perfectly, thank you. I might have been under the wrong impression that this project is about providing a platform to make modding easier.
By "a potentially interesting stepping stone in that effort (of making the engine re-useable)" I did not mean "crudely imitate SC2's gameplay". Of course, there are many gameplay differences.
For instance, in SC2 the limit on units in one control group has been lifted.
And the way I see it, that is what could make this an interesting platform for mods. Imagine being able to pick and choose game play mechanics from these two games?
Warcraft 3 adventure map that has a giant golem chasing you through the cliffs like a Colossus sounds fun to me. But you're probably right, it might be easier to do this with Starcraft 2 Editor.
I am trying to emulate my childhood experience of Warcraft 3 modding by immortalizing that technology.
That explains it perfectly, thank you. I might have been under the wrong impression that this project is about providing a platform to make modding easier.
I feel like this comment is meant as an emotional jab at me given that the front page of this project says that it intends to make modding easier. To be honest, as I write this, I am actually laughing out loud quite a lot. Somehow this is humorous to my tired mind. You're not wrong; obviously I like the idea of making modding easier. Maybe I was writing without thinking to say that I want to emulate my childhood. But are these two goals not the same? I think they only become separate if we decide to separate them. It begs the question, what is modding?
Have a look at the first few seconds of this video: https://youtu.be/klYVCdpk7u8
The user CanFight sent me a Warcraft 3 map he made that lets you walk around in a minecraft world and place blocks. You can already do that with Reforged, but you cannot change the selection cap to more than 12 units or change a hero to hold more than 6 items. This is really counter intuitive if you think about it. From my standpoint it feels like because the modding community encouraged Blizzard to try to make Warcraft III into some open-ended game engine, we completely skipped over offering the possibility to make basic changes to the Warcraft III RTS experience in any reasonable or short amount of time.
But I think the world is kind of at a time where we collectively struggle to even understand what that is. Is Warcraft 3 the pathfinding system? Is it the selection cap? Or is it the (exceedingly broken) concept of the Ability Editor that lets us tweak magic values in property maps while prohibiting us from actually creating new abilities without a grotesque slew of a workarounds? Or is Warcraft 3 simply a brand name of Arthas and Uther that was bought to be used to help hype Arclight Rumble Mobile?
I am well aware that what I am building is ostensibly not reasonable. If we spent the time to make absolutely everything in the entire engine pluggable like Unreal Engine or whatever, then we could probably have considered this project done about the time that it had the capacity to render a 3D model. Maybe everything beyond that is up to the user? But then, why not just use LibGDX? If one were to use Box2D for collision and LibGDX's ModelBuilder and ModelInstance stuff for 3D or whatever they advocate these days, you would have a camera class and the ability to load 3D models and what else do you need? You could maybe draw some units in blender, drop those in and give them Box2D collision nodes, and then use Scene2D to draw some nice buttons for unit abilities or something like that.
Warsmash does almost none of that. Warsmash is crazy town. I have a local copy of World Editor where I can draw a world and press Test Map and it opens Warsmash. Are you going to link Galaxy Editor's Test Map button to directly launch Warsmash? I do not think that would be easy to do.
I am in part exploring the extent to which my very human creative mannerisms could have gone if Warcraft 3 were more modular, like you say. But, because I know that will take a long time to do, in many cases I started off by emulating the Warcraft 3 and then I just hardcoded the behaviors. So, for now in those cases, modularity is achieved by simply editing the sourcecode.
I have played with several forks like that, where I did stuff that (unlike the game of Minecraft) would be generally not reasonable or not possible to build on Reforged:
Here's one where the command card grid is 3x5 like Starcraft 2, and the unit train queue has 9 slots instead of 7: https://www.youtube.com/watch?v=F_apm4lGemI
And here's one where the hero inventories can have up to a 3x3 item grid of 9 items, instead of being locked to either 3x2 (or else a popout window custom system that can't show cooldowns and can't distinguish right click from left click): https://youtu.be/VDowmZA8L3s
So, surely it would be nice to eventually rip out my UI spaghetti code and make a modular userscript UI on a system composed of model instances and UI buttons. But I hardcoded a lot of things and got a little bit away from that in my first iterations of a Warcraft 3 emulator.
Glad I've made you laugh! 🙂 I was being a bit quippish, hope that no offense was taken.
The last video looks very fun indeed; fix a camera behind the hero's 3D model and it will look like World of Warcraft pre-Alpha. I wonder whether this is how the project started...
Anyway, I guess for the time being it's best not to set wide goals like the original issue suggests so as not to spread efforts too thin.
Thanks for extensive replies!