. It was just a guess/rumor that was spread around the mapping community. There isn't any proof of it though. That feels a little off-topic. I would probably remove it. It seems more like you're forcing your agenda in this part. Ultimately, it is up to you, but it is best to keep everything relevant to the topic at hand: learning JASS! After all, you have a section that later explains your technique. It is a bit weird to have that in your introduction. --- "Our First JASS Trigger" starts off rather quickly. When someone converts a blank trigger, they'll end up with a trigger action and an initialization function. But you changed it to a more "modern" trigger style. However, the issue with it is that you end up jumping to a whole bunch of new concepts at once: locals, returning a value, nulling, natives, etc. Generally, JASS tutorials are heavily dependent on structure. You must give simple examples to start off so that people get the concept down. From there, they can move on to creating "efficient" or "modern" JASS-type codes. See Ghan's tutorial: it starts off by explaining every aspect of an empty converted trigger. Or look at GhostWolf's, his starts off with an isolated function and goes through the process of explaining the entirety of what functions are about. Even though we use combined conditions and actions in our current scripts, GUI users won't necessarily understand that right away. They might question: "why are our actions placed inside condition functions?" You have to make sure you explain that properly. I'm not sure what you mean by "more modifiable". It'd probably be better said as "it adds additional features to JASS" (which is why it needs its own syntax checker). jassnewgenpack 2.0 already has the latest jasshelper, so you don't have to do any of that. That used to be a required step because the JNGP on wc3c had an older jasshelper, so people had to replace it with the latest jasshelper 0.A.2.B. 2 years ago, Mag uploaded the "standard" updated version to our tools section "JassNewGenPack 5d", and that problem has generally subsided since then. JNGP 2.0 also came out, which has the latest jasshelper, so that step isn't necessary (as long as they download it from our site or moyack's version). You have to be sure to both show and explain. You showed scopes and an "initializer", but you didn't mention it in the text. You have to explain what scopes are used for and what initializers are. It is good that you explained encapsulation (private/public), but I might add a little more information on it. Right now, you show what causes an error, but you need to give it some context in order for it to make sense. For example: "Normally, JASS won't allow you to have two functions with the same name. Scopes (and libraries) allow you to encapsulate them by adding the keyword "private" or "public". This will allow you to have common names such as "Act", "Init", etc. without worrying about colliding with other functions' names. However, those keywords have additional purposes: "private" will prevent the function from being called outside the scope. "public" will allow the function to be called outside the scope, but you must add the scope name as a prefix, followed by the underscore." Then you could provide examples or whatever. That is a rough example of a thorough explanation. There is quite a bit of information that can be covered. (you did a good job of covering the "public" keyword though, so you don't need to change much of that) It might be better if you explain a little bit more about how libraries are useful. This is how I always thought of it: in normal JASS, if you wanted to call a function from any trigger, you would have to place that function in the map's header. That can be inconvenient, unorganized, and it can clutter the map header really quickly. vJASS's libraries move those functions to the top of the script for you, allowing you to use them anywhere! Then you could explain a bit more on what "requiring" does. It allows you to "order" libraries, so if you want to use a function from library "A" in library "B", you simply need to add "requires A" to library B's declaration. Change the word "define" to "assign". This section suffers a bit from information overload. So many concepts are thrown out so rapidly, but the user won't know how to do anything with any of it. He will know what a struct looks like, but where should he use it? What is it used for? What are instances? What does it mean to overwrite the "create" method? Structs are a rather large topic, sufficient for an entire tutorial. There is so much to them. You should explain what rawcodes are. GUI users won't be familiar with it (most likely). You should go over loops in a much earlier section. Just the general syntax of looping. In GUI, you're familiar with loops (e.g. 1 to 10), but JASS behaves differently, particularly with the use of exitwhen . At this point, users might not know how to do a simple loop, so you should go over that first before showing a first of group loop. endif -> endloop Also, in the first of group loop section, you should mention that it empties the group. If you want to preserve the units in the group, you should use ForGroup (in general). If you just need to perform an instant action over some group of units (where you don't need the units stored later), you can use the FirstOfGroup loop. You should show the syntax of elseif. It will be a new feature to GUI users, and since it has its own syntax, you should include it in the example. It is good that you made a section for it. I think you should link to this section or write "see below" from the GetSpellAbilityId() == 'AHtc' line, otherwise readers might be confused. You should change the last part to Condition(function groupFilter). Yours won't cause an error in vJASS (because jasshelper will automatically wrap it in Condition() for you. it is a weird feature), but it will cause an error in regular JASS. ------ Ultimately, I agree with edo and death's reviews. You try to cover everything, but by being too ambitious with the topic, you end up having only a little information in each section. It is nice as a "light" tutorial, or an overview, but IMO this wouldn't help new JASSers much. It would serve as a reference for beginner JASSers so they can look back and see how to do things. If I were you, I'd try to just stick with basic JASS or basic vJASS. Doing both is a ton of information. Sorry if this review was a little harsh at times. As such, I want to let you know that this tutorial still has a lot of redeeming qualities. The layout of the tutorial is great and pretty. The code examples are pretty good. Sometimes I like that it is brief. It serves as a good reference to check back on how to use particular features. In fact, I used a similar tutorial when I was learning vJASS. The manual is rather dense and technical, so I just needed a quick overview so I could get the gist of things (it was this tutorial to be exact). Still, this tutorial needs to decide what it wants to be. Does it want to be a reference? Does it want to be an in-depth tutorial? Does it want to cover JASS or vJASS (or both?)? Is it for moving on to JASS, or is it for mixing JASS with GUI? It is important for tutorials (and any writing in general) to have a clear focus. Being too broad and far-reaching is usually detrimental.