- Joined
- Sep 6, 2013
- Messages
- 6,742
Not sure we understood each other, as I said it doesn't make sense to go fully away from GUI in first place, so finaly I also won't "go back". It's just part of possibilities I use.
just a mouse...little mouseNani?!
The ideal solution would be a programming IDE, where you have a context-sensitive GUI suggestion when typing something. Just like how I choose "Unit" in the GUI, then move on to choose, "Create Unit Facing Angle" it is convenient when an IDE provides the ability for me to type the letter "u", it suggests "unit", then I type the ".c", and it suggests "create", so that I result in coding:
Try Zinc, it has some aspects.I would like to see more or less pure java as in android programming
GUI is very tedius, the clicks sounds make me crazy, jass and vjass are my favorite options, the sound of keyboard keys is opera for me.
GUI in moderation is extremely good though. I much prefer being able to select unit and ability visually rather than through rawcodes. Same with accessing preplaced units - you can't make gg_unit_hfoo_0001 (gg == game generated, aka preplaced) without GUI.
Yeah you won't find anyone talking about what a joy it is to concatenate strings or do arithmatic in GUI. It's so horrible.Yes, GUI has these features that jass does not have, I think all the moders started with GUI and thought it is a creation of the Gods (including me), but GUI is not comfortable to work with. The arithmetic is a pain in the ass, obviously if you combine jass and gui through Custom Script it is a bit better.
Yeah you won't find anyone talking about what a joy it is to concatenate strings or do arithmatic in GUI. It's so horrible.
Oh my GOODNESS. This So Hard. I completely forgot about that, but it was be so supremely useful in so many ways; so many interesting & unique spells can only be made by abusing Classification categories....and second something a lot of ppl would like too: allow the user to customize Unit Classification as a String instead of checkboxes and allow the trigger editor to read it as Strings too instead of Booleans. That would allow unlimited Classifications.
Oh wow, all of these, too.Mirage1 said:- Why there are more Specific Unit Events than Generic Unit Events when almost the totality of triggers needs to use generic units? Also Generic Unit can easily become Specific Unit through conditions.
- Why there is a damage detection system inside WE which is not available in Generic Unit Event? Allowing it to work in generic events and to detect not only spell and physical damage but also Attack, Damage and Armor Type would be a great addition to WE in general. Also detecting Healing without further conditions other than a single boolean would be nice.
- Region/Range/Life&Mana events could also be Generic Unit Events. In the case of regions we could say which region has been entered/left in conditions. In the case of range we could use a specific unit to call in conditions (e.g.: Approached Unit) as the triggering unit will be the one which is approaching.
GUI in moderation is extremely good though. I much prefer being able to select unit and ability visually rather than through rawcodes. Same with accessing preplaced units - you can't make gg_unit_hfoo_0001 (gg == game generated, aka preplaced) without GUI.
I had no idea that GUI would be so overwhelmingly voted-for.
am i the only one who thinks each one of those languages are useful depending of what you're making in a wc3 map?
GUI is really simple to understand and it's cool for beginners.
JASS is very practical for those which want to develope a map more deeply.
VJASS, CJASS, WURST and rest could be very useful what people use them for.
i'd want to know why does every person here use some of those languages and tell me its benefits, and why don't use other languages to know why i should not use them.
i only know about GUI and JASS, but i've never learnt another programming language. so this is why i could not vote only for one language if i don't know how are the rest of them.
ooh, thanks for explain your point. i think i'll learn more about wurst or lua; jass is really tedious and boring as you said. this is why i think we can't vote only for a language if you don't know how are the rest of them. i'd vote gui or jass just for being the only languages i know; wurst could be more cool than those.It depends entirely on your background.
GUI is indeed an excellent tool for beginners, but people with background in programming will inevitably find it more clunky to use. Navigating UIs is always going to be slower than typing code in the comfort of your favourite IDE for any competent programmer. But, this discussions is mainly related to programming languages, and GUI is not a programming language per se. It's a visual programming tool.
If you really want to understand the perspective of those who bash JASS or vJASS, learn a modern language that is actively developed. It can be anything - Java, Kotlin, Python, JS, Lua, etc. Spend some time working in those languages. When you come back to JASS or vJASS, chances are, you're going to find that they are incredibly archaic and inconvenient compared to other modern languages.
I don't quite understand what you mean by "developing a map more deeply". If you're comparing JASS to GUI, then, yes, JASS gives you more options. vJASS goes one step further and gives you even more options which make writing code easier. By comparison, Wurst leaps miles ahead of anything else the WC3 community had before, and offers sleek, modern syntax, features, performance and more.
Seriously, try it. There's nothing you can do in JASS that you can't in Wurst. The only difference is that you're probably going to spend 5x times more time writing something in JASS than in Wurst. Time is a valuable commodity.
There's also another huge problem with JASS. A lot of the time, GUI users eventually hit some kind of wall or limitation in it (leaks, lack of some natives, etc. etc.), and ask for help. They get pointed to JASS.
But JASS is horrible. It makes writing code tedious, painful and error-prone. I can't imagine how many people looked at JASS, shook their heads, and said, "No, this is too uncomfortable. Programming is painful, I'll just stick to my guns." And then never look back. vJASS is only slightly better in that regard. Writing in JASS is boring, awkward, inconvenient, and often painful, and it leaves a wrong impression of what programming really should be - elegant, beautiful and satisfying.
Imagine if only we had a proper language like Lua instead of JASS? I can only begin to fathom how many more modders would've stayed, instead of leaving the scene out of frustration or boredom.
This is why almost everyone who tries Wurst switches to it entirely. It's good. Like, really really good. It is still hampered by many of the limitations of JASS, but Frotty and co. did an incredible job with what they had, and apart from a few rough edges it really feels like a modern language. And best of all, it teaches you skills and patterns that are easily transferable to other languages, it teaches you that programming can and should be fun, beautiful and pleasant.
That's why.
If we're even remotely considering having another inbuilt scripting language, my vote goes for Python. Then again, I'm a fanboy of that language, so![]()
Then you guys would like Wurst (if not just for its indentation-based syntax).It's the programming language I'm learning (I'd learn more about JASS's syntax, but learning Python is much better for me in the future), so I support!![]()
I got used to pure Jass, but I do it in a very unusual way, I use notepad++ and code directly in war3map.j, so I can do whatever I want with it. Meaning i DO NOT use WE for script at all, only for making units/abilities, etc. I will demonstrate part of it, in case it will be bothersome I will remove it, so let's begin:
1. Ablility to customize Main function without any OP limits or confusion and even config.
View attachment 299828View attachment 299827 View attachment 299829
I do know ExecuteFunc is slower, etc, but I dislike Call(), because it's logic is to literally put code from where you call it, however this makes me unable to use another ExecuteFunc normally, without causing threading problems, but I've never had problems with it.
And yes, I do not use InitBlizzard, I only use some globals from blizzard.j, so I don't need to declare them again.
2. Free of any limitation of WE / Compiler.
Yes, this means an external syntax check and manual labour, but working like this for like 4+ years made me just stick with it.
3. Ease of use / Transfer.
By working directly with "out" part of the code you get used to working with any maps code, meaning ultimately you get the ability to pick things from others and easily adapt them to yourself.
4. Time saving.
Some of you might say, that using pure Jass is in fact slower, I would argue. I can pop my code in MPQ Editor and instantly test the changes, or use external syntax check, so I don't need to load the whole map in WE, etc. As for systems I can adapt them from wherever I want and then optimize them to what I see fit.
There are many other points, but I don't want to take up too much space, all in all, this is by no means good for beginners / normal people, but for some people that are like me, this is certainly good.
Now as for things I would like to see as natives:
1. Change unit model with code: native SetUnitModel takes unit WhichUnit, string WhichModel returns nothing
2. Change unit HP/MP regen with code: native SetUnitHPRegen takes unit WhichUnit, real amount, real Rate <- same with MP.
3. Add possibility to edit UI, so we can add CUSTOM STATS or change the amount of abilities that fit in one line, you can see that in RenderEdge.
So far those are the things I would LOVE to see and would benefit a lot.
Firstly I'll discuss on your 3 requests, and then I have a few different opinions on how you make maps, hope you are not mad on me.
1. Search for the "chaos" abilities and have try. A neat API is always good, but for now, chaos would do the most job without too much hassle.
2. If you are not happy with the default regens, you can set those in game contants. "Menu" -> "Advanced" -> "Gameplay Constants". If you already know that, but you just want to change the regen values at runtime. Just set those constants to 0 and code it on your own. It shouldn't be too hard since you already know how to code in JASS. Create a forever running Timer, and loop through all units in map every second and set their MP/HP based on some global variables.
3. That is not a easy job. Most of this functionality is done by injecting external dlls to wc3, i.e. it's not official. I believe they have more important bugs to fix right now. But I also wanted UI editing.
Hope that helps.
Now let's talk about how you make your map. I write this because I fear that newcomers would learn an inappropriate way to modding.
Directly editing war3map.j is just fine. But I might not be a preferable way in terms of Ease of use / Transfer / maintainability and Time Saving.
Again, I recommend newcomers NOT to learn to code JASS in such way.
1. It's not easy. To deal with thousands or tens of thousands of code (especially awful language like JASS, yes JASS is awful!) is never a easy job. You need to define sections of functionality by yourself and only you know about that. Modern programming languages introduces low coupling high cohesion and modularity. Why is that? Because it's better. Of course if you are familiar with procedural languages or low level programming. It's totally fine that you do it in such way.
2. Not sure what you mean by transfer. If you are bootstrapping your other maps with some common codes in your war3map.js, yes it's good, because you know what you are doing after all. But if you mean to share your code with others, at least I have not seen any one doing that.
3. Say you want to change a spell later. In a well implemented modern language, you just need to find the spell file, and update it. In the entire war3map.j, you have to perform a whole context search and modify those lines. And it has a higher chance to produce new bugs because there's no interfaces defined as clearly as how it's done in a modern language. Even in GUI you can easily target the spell trigger you want to modify, and you are very confident that by modifying that very piece of trigger, other trigger won't be affected for the most cases.
4. Time saving has different dimensions, if you are making a quick map. It could be faster. But for the long run, because of its low performance on portability and maintainability. The foreseeable time cost will be huge.
Again, if you (@Unryze) get used to code in this way, it is totally and absolutely fine.
But if you are reading this post and planning to port from GUI to JASS, I sincerely recommend you to learn wurst.