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

[vJASS] Update on vJass systems

Status
Not open for further replies.
Level 16
Joined
Oct 12, 2008
Messages
1,570
Hello,

So I have been out of wc3 modding for quite some time. Did quite some things in my own time, uploaded only a few spells though.

My question is, what are the currently used systems when it comes to vJass? I was used to things like TimerUtils, Table and xe (Vexorian), and GroupUtils (Rising_Dusk), but since I have been away for quite some time, I guess new people have come up with better systems already. I have been looking through the JASS section for quite some time already, and found Table by bribe, so I guess Vexorian's Table can already be cast aside, but what about other systems?

Thanks alot!
 
Level 9
Joined
Jul 10, 2011
Messages
562
afaik used systems are :

xe by Vex
TimerUtils by Vex
GroupUtils by Rising_Dusk
UnitIdexingUtils by Rising_Dusk
Table (i use bribes)
BoundSentinel by Vex
KeyTimers2 by Rising_Dusk

and some others i saw sometimes are:
SimError by Vex
AbortSpells by Rising_Dusk
LastOrder by Rising_Dusk

jassers correct me if im wrong ^^
 
It really depends. A lot of the stuff on wc3c are still used. (like TimerUtils)

However, instead of TimerUtils/T32 for low periods some people use CTL. For higher periods, some people might opt for Timer Tools, which is pretty nice for map making.

For indexing, Unit Indexer is the new option. (it is very easy to use + efficient) For table, bribe's is usually used since it is extended to have better interfacing with all hashtable functions. For damage events, Nestharus also made his own damage event + damage modification functionality.

But it is really up to you. It is a matter of interface preference, regard for speed, and map-making intent. AFAIK if you post something in jass submissions or in the spell sections using one of those old systems, it still can be approved.

Oh, and welcome back. :D
 
Level 31
Joined
Jul 10, 2007
Messages
6,306
Pretty much everything by Magtheridon96, Bribe, and myself (Dummy over MissileRecycler though) in JASS section =).

For GUI, all of Bribe's stuff in Spells

For save/load, Save/Load with Snippets in Spells. New stuff allows you to read/write to/from hard drive and sync that data up though, so save/load codes aren't really needed anymore as wc3 pretty much has banks now =).

edit
Timer Tools also has a bug. There is an update, but it doesn't have modules for it atm and it is untested.
 
Level 17
Joined
Apr 27, 2008
Messages
2,455
Also, it has been benchmarked that group recycling doesn't worth it, just because it's slower and it's not like it's hard to create/destroy a group.
Now the "constant" group spelled GROUP_ENUM in GroupUtils is still useful if you don't already use your own somewhere else.
Same for the functions GroupEnumUnitsInArea and GroupUnitsInArea.

However, the boolexpr true is completely useless with the newest wc3 versions, the "null" filter leak is fixed now.
And about the false one, why the hell you would ever need a false filter ?!

For groups that you don't need to keep over time, using a "constant" group sur as GROUP_ENUM of GroupUtils is just fine, for the other ones you should use an alternative, like UnitLL, or your very own if it doesn't fit your needs or if you don't like it.
Now, if you're ok with code splitting and ghost units you could simply use a group as well.
 
Level 16
Joined
Oct 12, 2008
Messages
1,570
Ok, thanks alot! So I got another question, about some coding conventions. Back in the day, people were almost going crazy at me for using a FirstOfGroup loop, because it was supposedly inefficient, so I started doing everything in the Filter boolexpr. But now, i see FirstOfGroup loops everywhere o_O has anything changed that made it efficient? Or was I wrongly accused of doing wrong?
 
Level 17
Joined
Apr 27, 2008
Messages
2,455
It was simply a lack of tests and knowledge, each time a code or a boolexpr is called by a native function, it creates a new thread which is quite costly in jass.
So yes using a null filter and then a FirstOfGroup loop is far more efficient than using a not null filter because of these threads.

But remember that jass is not multi threaded, once a new thread is open, the previous one is halted.

Also since you keep the code in the same scope you don't need fugly temp globals.

EDIT :

But there was a leak with a null filter used with the GroupEnum... functions, that was the reason in fact.
This leak is fixed now.
 
Last edited:
Level 17
Joined
Apr 27, 2008
Messages
2,455
A null boolexpr is equal to a true one, excepted it's far much efficient because of threads opened with a true boolexpr.
For some silly reasons in the past a null boolexpr created a leak with the GroupEnum... functions, but now that is fixed, a true boolexpr is completely pointless.
 
Status
Not open for further replies.
Top