Many of you, like me, feel that the current tutorial system is simply inadequate when it comes to providing solid methods for fixing problems encountered in the MMA forum. Here is my proposal to improve the functionality of tutorials. Simply changing the aim of tutorials, to solve issues instead of explaining them, is absolutely essential. Currently, our tutorials provide very generic information. While generic information has its place, it needs detailed topical information to compliment it for maximize effectiveness. I recommend new tutorials combining both general information and topical information. These should be placed as individual, pinned topics in the MMA forum for easy access for quoting by experienced users and an easy-to-find source of information for newcomers.
I am aware Tuxedo_Templar is also proposing tutorial system changes, but this should be much easier to implement, maintain, and use. At the very least, the new tutorials could be used for the duration of SEN V4.1 or until Tuxedo_Templar's proposal is implemented.
I have written a tutorial concerning VHP using the macro/micro information complementation format described above. Although the tutorial is not fully completed, it still performs its purpose.
Virtual Hit Point(VHP) is a method of tracking HP through virtual data (such as death counters) as opposed to the unit HP bar. This virtual data(which is usually stored in death counters - which I'll be referring to it as from now on) has much more versatility due to many more related trigger scripts.
This is a list of how triggers function with standard unit HP and VHP:
QUOTE
Standard HP
CONDITIONS
none
ACTIONS
modify unit hitpoints(%)
VHP
CONDITIONS
deaths
ACTION
set deaths
modify unit hitpoints(%)
It is evident that VHP has relatively much more trigger functions. Death related trigger functions are for the virtual arithmentic calculations(adding, subtracting, etc.), while 'modify unit hitpoints' is used to express the final value of these calculations. Mathmatical calculations are impossible using only standard HP. As seem in the listing above, standard HP has no method for detecting HP and has no calculation actions(excluding an output action - 'modify unit hitpoints').
Above was a comparison between VHP and standard HP and a brief look at the mathematical functions of VHP. Next is a look into how values can be inputted into the 'system' and two different major formats for VHP. From this point on, VHP divides into two branches - Unit-Based(AKA Semi) VHP and Total VHP*.
TVHP is an incredibly diverse form of VHP with a broad classification. Different methods range from incredibly simple to enormously complicated. For the more complicated forms, it can result in a very different style of gameplay(usually much slower and 'calmer'). On the plus side, it allows the mapmaker to 'modify' some of the hard-coded unit values, such as speed and attack range. Some of the simpler methods are easier to use and understand than UBVHP and are good introductions to VHP. On the other hand, the advanced methods are not recommended for anyone not experienced with both VHP and mapmaking in general. This form of VHP will be discussed in later.
The much simpler and more popular branch of VHP is UBVHP, which will be referred to as VHP unless otherwise mentioned. VHP utilizes a vincible secondary unit(SU), which serves as a 'damage soaker' for an invincible primary unit(PU) and also as a method of input. The SU will be moved(recentered) onto the PU so attacks directed toward it will appear to be hitting the PU. Enemies will attack the SU instead of the PU because of the latter's invinciblity. The SU is usually a burrowed unit(Spider Mines are considered burrowed) - a Zergling will be used for the purpose of this tutorial - although it may be a ground or air units as well. The order of preferred SU are burrowed, air, and lastly, ground units, for reasons that will be explained later. The reasons for using a burrowed SU are that ground-attack units are able to attack it and that it is asthetically-pleasing. Therefore, a burrowed SU should be used as often as possible. As a note, VHP is usually used for ground PU due to popularity, but also functionality. Due to unwalkable terrain, such as water, air PU will not be able to use a ground-based SU on that terrain. A solution will be examined later.
The 'industry standard' is a 1HKO burrowed Zergling. The term '1HKO*(1 hit knockout)' applies to an SU with a maximum life of 1 HP or, otherwise, is always killed by a single attack. When a Zergling is killed, it represents 1% damage to the PU. Upon the death of a Zergling, one death is subtracted from a death counter(DC) - starting with 100 deaths. The deaths can be translated into unit HP at any time, usually immediately. Next, a new Zergling is created and made to follow the PU.
This is an example of an input and some output triggers:
P1 is the owner of the PU(Marine)
P2 is the owner of the SU(Zergling)
'PU tracker' is the location follow the PU
Description:
Input trigger
Conditions:
¤ P2 commands at most 0 Zerglings
Actions:
¤ Preserve trigger
¤ create 1 zergling at 'PU tracker' for player 2. Apply properties(burrowed)
¤ modify death counts for P1: subtract 1 death for Zerglings
Description:
Output trigger after 1 attack
Conditions:
¤ P1 has suffered as exactly 99 deaths of Zerglings
Actions:
¤ Preserve trigger
¤ set hit points for 1 Marine owned by P1 at 'PU tracker' to 99%
Description:
Output trigger after 2 attacks
Conditions:
¤ P1 has suffered as exactly 98 deaths of Zerglings
Actions:
¤ Preserve trigger
¤ set hit points for 1 Marine owned by P1 at 'PU tracker' to 98%
In point form, what is required for VHP to function:
-an invincible PU
-a vincible SU(preferably a burrowed unit) that recenters onto the PU
-a 'recentering' trigger to move the SU onto the PU
-an 'input' trigger which detects the death of Zerglings and recreate them
-'output' triggers to modify the PU's unit HP
The principle of VHP is that a unit's death is detectable, but damage to it is not . So, logically, in order to detect a hit, a unit would need to die. It can't be the PU, so a sacrifical unit is needed to be the target - the SU. Once the SU is dead, the 'knowledge' of its death can be used in conjunction with 'modify unit hit points' for HP manipulation.
Now that a basic understanding of VHP has been achieved, it is possible to explore the many variations of VHP and resolve its problematic issues via specific topics:
Secondary Unit Choices
As was stated before there are multiple choices for a SU. The alternatives to the burrowed unit are air and ground units. Ground units are simply ground units that cannot burrow. They are an exceptionally poor choice for a SU. A ground unit will hamper ground movement, melee attacks, and look asthetically-poor. Under no circumstances is a ground SU recommended nor should they ever be used. The better alternative is an air unit. Although it still has the drawback of not attackable by ground-attack units, this deficiency is not as sever as those associated with a ground SU. On the other hand, it does possess the advantage of including air-attack units into the VHP system. Yet another advantage of this is air PU functionality. An air SU is not hampered by unwalkable terrain in the same way ground and burrowed SU are. Of course, the disadvantage is that the SU will be created off-center due to StarCraft's no-stacking function. All in all, burrowed SU are the best option for ground PU while air SU fit well with air PU.
A-Symmetrical Damage
Under the standard '1HKO' method, units with the faster attack rates dealt the most damage, not the ones with more attacking power, as preferred. To correct the issue, SU must be given more HP, and possibly represent more than 1% damage. The HP increase must be large enough that at least a portion of the enemy attacks will not result in a instant kill. This will result in units with more attacking power killing SU faster and negate the effects of a faster attack rate.
The following issue arises from the use of A-symmetrical damage(ASD):
Secondary Unit Hit-Point Regeneration
After sustaining an attack, a Zerg SU will begin to regenerate HP and a Protoss SU will regenerate its shields. The shield regeneration is easily solved by setting shields to 0. Zerg burrowed SU can simply be replaced by a Spider Mine. Zerg ground SU should be replaced by a Protoss probe with no shields. Likewise, a Zerg air SU should be replaced by an observer with no shields. Terran SU(excluding the Spider Mine) usage should be avoided due to the possiblity of repairs and healing.
Spatial Inconsistencies
When using VHP, space and SU size must be taken into consideration. Each type of SU will experience problems. Burrowed SU will only experience a problem relating to differences in SU/PU sizes. The problem arises when the PU enters a tight passageway the SU would not be able to enter in an unburrowed state. As a consequence, the SU will be created off-center in an area with enough space if at all. Air SU space issues are due to the spawning area containing other air units. This will cause the SU to be spawned even further away or not at all. Ground SU will experience the most issues, due to their space requirement on walkable ground. Issues will result from both tight terrain and occupied spawning area problems experienced individually by burrowed and air SU, respectively.
Speed Lag
Speed lag is a reduction in unit speed caused by the constant recentering of the SU onto the PU. This problem is a result of StarCraft's internal mechanics. The severity of the speed lag is based upon the occurence of the recentering trigger, more occurences will lead to more speed lag. However, the problem is easily resolved through any of several simple trigger modifications. Three seperate methods will be shown.
#1 - Wait-Delayed Centering
This method is not recommended for use with hyper triggers.
Conditions:
¤ P2 brings at least 1 Zerglings to 'Anywhere
Actions:
¤ Preserve trigger
¤ Wait for 250 milliseconds
¤ Move all Zerglings for player 2 at 'Anywhere' to 'PU tracker'
#2 - Counter-Delayed Centering
While the deaths of the second trigger may be modified for recentering frequency, it must remain greater than or equal to 3 in order to prevent speed lag.
Conditions:
¤ P2 brings at least 1 Zerglings to 'Anywhere'
Actions:
¤ Preserve trigger
¤ Modify death counts for Player 1: add 1 death for Timer
Conditions:
¤ Player 1 has suffered at least 3 deaths of Timer
Actions:
¤ Preserve trigger
¤ modify death counts for P1: set to 0 deaths for Timer
¤ Move all Zerglings for player 2 at 'Anywhere' to 'PU tracker'
#3 - Proximity Centering
Conditions:
¤ P1 brings at most 0 Marines to 'PU tracker'
Actions:
¤ Preserve trigger
¤ Center location labeled 'PU tracker' on Marine owned by Player 1 at 'Anywhere'
¤ Move all Zerglings for Player 2 at 'Anywhere' to 'PU tracker'
As you can see, the opening portion of the tutorial contains very generic information, while the ending phases address specific topics.