- Joined
- Jul 29, 2008
- Messages
- 9,838





Contest Theme: Neutral/Tavern
Contest Style: Team ~ Custom (Team-Made) Resources
IT'S DONE! Honestly one of the most challenging & exciting forms of Contest we can run here; a Joint Hero Contest! Several awexome entries, and some excellent competition! But in the end, only one can be the winner... And that's what we're all here to see.
On to the Results!
[[Please refer to the attached "Voting Calculations" Excel spreadsheet]]
(Image also attached for those without Microsoft Excel (you can always open an account via SkyDrive & get free Web-Office apps, by the way)
===
===DESIGN (Kam)
===
//NOTE// Due to a discrepancy in the values chosen for certain Criteria (i.e. Balance/Integration & Creativity/Originality), I have taken the liberty of adjusting them proportionally to the correct "out of X" values.
Permission here:
Go ahead and adjust. I used the same method I use for techtree contests, I didn't think to check the rules on that.
---------------------------------------
Mur'gul Warlock
---------------------------------------
Design Criteria
Theme/Form: 14/15
I would imagine an undersea creature to have all of these but Fel Meteor, but that is where there Warlock aspect comes in. The model you chose compliments the hero well, I wish you had taken the time to choose more fitting icons though.
Role/Function: 15/15
Support caster. This hero works well behind melee units dealig AoE damage while providing a self regeneration method (Dark respite) that rewards successful battles.
Balance/Integration: 15/15
Abilities that play/stack/combine from each other are one of the best hero ability conventions in gaming. It adds another level of strategy in choosing an order for leveling abilities. With some aesthetic changes I can absolutely see this hero in the vanilla Tavern - in fact it makes me wonder why there was not a more creep-oriented set of heroes in the Tavern. Dark Respite should have also interacted with other abilities but it's concept was original.
As far as stat balance I found all four spells to be fair in playing against the AI and while creeping. I think Dark Respite should be able to heal any friendly unit.
Creativity/Originality: 14/15
You based this on an existing premise that has been well explored Naga/Murloc/Mur'gul) but you managed to create a set of fun and well thought out abilities. The ultimate being rather simple holds your entry back.
Overall: 58/60
---------------------------------------
Murloc Fisherman
---------------------------------------
Design Criteria
Theme/Form: 9/15
While these are all nautical themed spells there is not much more to them than the name suggests. You can move units between points, chain stun, and use a form of bloodlust. The model was interesting and I like that you actually have a fishing hat to throw. I know you were going for a Murloc but this model would have suited your theme well: Turtle fisher
Role/Function: 12/15
Support caster / DPS (Steroid Fish) You did better here because there are some useful combinations for spells. Mainly using bait to draw casters from safety to your units, and jumping out of combat once Steroid Fish wears off.
Balance/Integration: 12/15
This is not developed enough to fit into the Tavern, but it could. I would suggest making it a hero killer as the abilities you chose mostly affect a single target.
Creativity/Originality: 8/15
Move unit from point A to point B x2, chain stun, and metamorphosis. These are not original ideas, and their implementation was lacking.
Overall: 41/60
---------------------------------------
SeaDruid
---------------------------------------
Design Criteria
Theme/Form: 14/15
Normally I would wonder why such a massive creature would be an intelligence hero, but the head octopus sells it. I feel like I would see this at the vanilla Tavern. Geyser and Ink need better icons. I suggest:
BTNTorrent
Btncrblood (Recolor)
The casting effect on Mass Brainwash is fitting.
And maybe for Mass Brainwash:
BTNVoidEye
Role/Function: 15/15
Support caster. Scald is an excellent way to give further utility to a passive. Normally they are a spell you learn and forget about, but having extra effects means a player can time spells to their advantage. My favorite was the pushback bonus on Mass Brainwash.
Balance/Integration: 14/15
Mass Brainwash should channel longer and deal more of an adverse effect. The wording for the % move/attack speed decay is backwards as read. Scald could also affect more than one action as having to activate it so much is annoying.
Creativity/Originality: 13/15
Geyser is one of the most prevalant water spells, I don't know how many variatons I've seen. Ink is fairly standard. Scald by itself is ok but it's really a mixer so it can't be judged on it's own. Mass Brainwash is far more original.
Overall: 56/60
---------------------------------------
Silithid Devourer
---------------------------------------
Design Criteria
Theme/Form: 14/15
This fits into the vanilla Tavern. I love the channel spell animation. You chose in-game icons well, although I think Blood Boil could use a new icon:
BTNSpell_Shadow_BloodBoil
Role/Function: 15/15
Tank. You've combined the spells well to work with each other. I run in with Rupturing Stab, drop Corpse Crusher, and then target a hero with Leech Life - all boosted if I had Blood Boil at the time. There's all the incentive for this guy to be in the thick of it.
Balance/Integration: 13/15
10 HP/second on Blood Boil is too much, it almost makes the spell not usable, or rather requires the player to use other spells to offset the HP cost. I think Leech Life is also too good for the mana cost/cooldown. I was able to regen extremely quickly by targeting low level creeps.
Creativity/Originality: 12/15
As fun as this hero is to play it lacks originality. The three basic abilities are fairly standard, as is the ultimate with exception to the bonuses. You have combined them in a unique way. Corpse Crusher is the most original of the set.
Overall: 54/60
---------------------------------------
Windlord
---------------------------------------
Theme/Form: 13/15
Elemental heroes are tough. I can see this in the vanilla Tavern, however you may want to choose a different model as it appears to also be a snow/wonter based hero. The three standard ability icons need to be revised.
Role/Function: 13/15
Support/caster. There is the potential for a combination between Fel Gate and Maelstrom that works well in practice. Otherwise I would not say this hero has tactical synergy. The abilties fill the role well enough but seem like they could be any number of hero types.
Balance/Integration: 12/15
Stormform has a -33.33% armor reduction at level 3, which I think is too much. It is supposed to be a situational spell but that much of a negative makes it too narrow. Maelstrom is the problem though. It is an invulnerable passive AoE summon with no range limit and a long lifespan. I was able to sit in the map center and severely disrupt the enemy base. On top of this it is a portal for friendly units to excape death and bring new units in.
Creativity/Originality: 10/15
The three standard abilties are nothing new. There are many variations of them in the spell database. The primary function of Maelstrom is also mostly a vanilla spell, but the secodnary teleporting function is a fantastic idea.
Overall: 48/60
---------------------------------------
Swashbuckler
---------------------------------------
Design Criteria
Theme/Form: 14/15
I have never been a fan or realistic or life like models in wc3. They simply don't fit the aesthetic of the game. The model is a small portion of your grade as it can so easily be adjusted. The icon choices were not the best either. That said his abilites are original and engaging. I can see a pirate using these on the high seas in ship to ship combat.
Role/Function: 15/15
Assasin / anti-hero. In playing the AI I quickly started targeting heroes. Snare Trap and Persecute are a potent combination. If targeting a melee hero it is unlikely they can escape the 20% move speed bonus and are foced to fight, except now they deal with Riposte. I'm not sure if you intended to create a hero killer but you succeeded.
Balance/Integration: 14/15
With the above considerations for a new model/icon set this absolutely fits into the Tavern. Turmoil has that bit of humor in the flinging furniture that I expect from Blizzard.
Unfortunately I do not think Turmoil works. I changed the cloud model to the dummy model so I could see and sure enough all enemy units simply attack the hero or allied units as usual. Is the description wrong?
A 10 second stun to a hero almost always results in death. It's simply too long. Persecute is fine at 20 seconds as there is the possibility of escape, or driving off the attacker(s). I did not like that Turmoil affected the Swashbuckler. The ability is not so good that it needs that kind of downside.
Creativity/Originality: 12/15
I have seen all of these before, granted not in such a refined form. I would say Turmoil is the most original but even then I am reminded of a spell from 2007: Enrage - Wc3C.net It was one of my favorite spells which is why I remembered it.
What you have done extremely well is create a anti-hero hero better than most I've seen. The only thing I can think of that's missing is somethign to sap mana.
Overall: 55/60
===
===ART (MiniMage)
===
---------------------------------------
Mur'gul Warlock
---------------------------------------
Model:
Originality: 8/10
Fit with ingame models: 5/10
Animations: 7/10
Particle Effects: 7/10
Texture Quality: Medium
Texture Wrap: 8/10
Filesize: Medium
Theme: 6/10
Quality vs Filesize Ratio: 7/10
Mesh: 4/5
Special Effects:
Originality: 6/10
Quality: 8/10
Distribution of effects: 10/10
Consistency in theme: 6/10
Icons:
Fit with spells: 2/4
________________________
Total count of points: (52+30+2) 84/109
The model has a destinct style and is well animated, the skin is very well wrapped. The mesh itself differs a bit in height, posture and design from a Mur'gul. It's attack animations are water projectiles, but all the spells but one deal with some kind of green magic flame. It would've been more consistent if the projectile effect was something that match the theme established so far. Possible some kind of form of poison or flame.
The quality of the spells are very well shown, there is no lack of effects and it's not much either. Granted, the appearance of the health orbs made me question if there was a bug with the model, due to the close similarity to the orb that the mur'gul hero is carrying around.
As for the icons. Two of them match the theme, the two others taht does not, match in color, but not in design. There's nothing about a backfin that speaks of a large shockwave spell, nor does glowing arm with a sword speak of health boosts from slain mobs.
---------------------------------------
Murloc Fisherman
---------------------------------------
Model:
Originality: 6/10
Fit with ingame models: 9/10
Animations: 6/10
Particle Effects: 7/10
Texture Quality: Low
Texture Wrap: 4/10
Filesize: High
Theme: 9/10
Quality vs Filesize Ratio: 4/10
Mesh: 3/5
Special Effects:
Originality: 6/10
Quality: 2/10
Distribution of effects: 4/10
Consistency in theme: 10/10
Icons:
Fit with spells: 1/4
________________________
Total count of points: (48+22+1) 71/109
The model has a destinct theme, my has numerous glitches and animation problems. Sometimes when attacking it would split into its morph form and sometimes animations would get interupted or generally just flip out on my computer screen. Meshwise, it's not complex, but it would fit extremely well given some more work with the wrap.
The special effects score suffers from the glitchy nature of the model, as in concept, the theme, is very well followed and very original. However, the distribution of the special effects are rather lacking as it either has too much or none at all and heavily relies on its animations.
The Icons basically don't fit it at all. The first icon looks like a hook. The rest of them doesn't match their spells. Most notably, the description is also very poor. It has hook enemy, hook ally, throw hat extremely slowly and basically the alchemist morph spell. None of these remaining icons represent the spell in any shape or form.
---------------------------------------
Sea Druid
---------------------------------------
Model:
Originality: 3/10
Fit with ingame models: 10/10
Animations: 8/10
Particle Effects: 5/10
Texture Quality: Medium
Texture Wrap: 10/10
Filesize: Medium
Theme: 9/10
Quality vs Filesize Ratio: 7/10
Mesh: 3/5
Special Effects:
Originality: 8/10
Quality: 7/10
Distribution of effects: 9/10
Consistency in theme: 9/10
Icons:
Fit with spells: 3/4
________________________
Total count of points: (55+33+3) 91/109
The model looks very nice, now, the originality falls a bit since it's obviously an edited sea giant, but the animations are very good and the tentacles are animated very well.
Almost all icons fit their intended purpose besides one for the ink spell, which has absolutely has no resemble to ink whatsoever.
---------------------------------------
Silitid Devourer
---------------------------------------
Model:
Originality: 6/10
Fit with ingame models: 7/10
Animations: 10/10
Particle Effects: 9/10
Texture Quality: High
Texture Wrap: 10/10
Filesize: Medium
Theme: 10/10
Quality vs Filesize Ratio: 9/10
Mesh: 4/5
Special Effects:
Originality: 7/10
Quality: 9/10
Distribution of effects: 5/10
Consistency in theme: 10/10
Icons:
Fit with spells: 4/4
________________________
Total count of points: (65+31+4) 100/109
Well made model, granted, it's an edit of the undead bug hero so it loses a bit in originality. But it has been done remarkably well. A few animations have been granted a huge overhaul. Not to mention a suberbly well crafted skin for the model.
The special effects rely very much on the animations of the model, special effects are very scarce, but they are used fairly well. The blood sucking giant bug. I feel that ultimate felt a tad lacking, special effect wise.
The icons fit perfectly and it's very intuitive to figure out what is what.
---------------------------------------
Swashbuckler
---------------------------------------
Model:
Originality: 10/10
Fit with ingame models: 5/10
Animations: 7/10
Particle Effects: 7/10
Texture Quality: Medium
Texture Wrap: 6/10
Filesize: Medium
Theme: 10/10
Quality vs Filesize Ratio: 7/10
Mesh: 3/5
Special Effects:
Originality: 7/10
Quality: 9/10
Distribution of effects: 8/10
Consistency in theme: 10/10
Icons:
Fit with spells: 3/4
________________________
Total count of points: (55+34+3) 92/109
Well made model, original, but very different from a typical warcraft design, it will always stick out, always look out of place. However, it's well made.
The animations are well made, entertaining and well executed.
The icons are matching very well, except for riposte, that I struggle to figure out what it even is.
---------------------------------------
Windlord
---------------------------------------
Model:
Originality: 8/10
Fit with ingame models: 7/10
Animations: 5/10
Particle Effects: 9/10
Texture Quality: Low
Texture Wrap: 7/10
Filesize: High
Theme: 5/10
Quality vs Filesize Ratio: 3/10
Mesh: 3/5
Special Effects:
Originality: 9/10
Quality: 6/10
Distribution of effects: 5/10
Consistency in theme: 8/10
Icons:
Fit with spells: 2/4
________________________
Total count of points: (47+28+2) 77/109
Well made model, it's original, but it has areas where it is lacking, primarily in its concept. The model is called windlord, but the cape and shoulder protectors feel out of place. Personally, for it to fit the theme of the spells, I would've wrapped the cape with a swirling lightning texture and added something like a lightning effect to the shoulder protectors.
The spells are very well made, granted, the spell that crushes its target with wind projectiles is very hard to aim with. By all accounts it looks like a aoe spell, but it's a single target spell, yet it strikes an area. Looking it at from the perspective of eyecandy though, it's very well made. The tornado works as intended, although I am surprised that you can't move it, also mobs can attack it. Looks about the same as a normal tornado does tho. As for the final spell, the ultimate, that makes me wonder why you didn't name the hero "stormlord" as it diverges from the concept as a windlord towards the concept of stormlord.
The icons fit decently well, excluding the icons for the first spell and the third spell. They don't seem to intuitvely match what they actually do. You're able to grasp what they do from the description, allthough this has nothing to do with the icon choice.
===
===CODE (AGD & Purgeandfire)
===
Hero Contest #8 Entries Code Review
Code Criteria
1. Interface with Computer (15)
* Efficiency (10)
* Leaklessness (5)
2. Interface with User (15)
* Configurability (5)
* Documentation (5)
* Structure and Readability (5)
Total = 30 Points
Entries
Close
SwashBuckler
Murloc Fisherman
Windlord
Silithid Devourer
Mur'gul Warlock
Sea Druid
Entry by CockroachesInYourPants (HappyCockroach & Quilnez)
Ratings:
Interface with Computer (15) – 12
* Efficiency (10) – 7
* Leaklessness (5) - 5
Interface with User (15) - 14
* Configurability (5) – 4.5
* Documentation (5) – 4.5
* Structure and Readability (5) – 5
Total (30) – 26
General Evaluation:
The code is well documented not only within the script introduction but also with important details spread over parts of the script and yet still able to remain very readable. Though I suggest you take advantage of vjass’s delimited comments instead of using the default jass comments especially for the header because the precompiler removes them, resulting in a smaller compiled script size. However, it isn’t considered in the rating. The configuration also seems very good, providing dynamic configurations aside from the static ones plus it also provides users full control of what will be allowed as the spells’ targets.
Overall, it is well coded, efficient, and readable code. I also find no leaks. There are still room for optimization however as listed below.
Specific Evaluation:
Snare Trap:
You can save struct’s instance members to a variable when you use them many times in a single function because doing such is analogous to repeatedly calling function calls when it’s better to cache them. I see this especially in the onPeriodic method. Also this, still under onPeriodic method, the (targetX – x) and (targetY – y) are better to be cached here: (if ((.targetX-x)*(.targetX-x)+(.targetY-y)*(.targetY-y) > .aoe*.aoe) then
)
Instead of clearing the group and nulling fog after the loop when fog is not null, you can do it inside the if statement inside the loop just beforeexitwhen true
. This is very minor though.
Persecute:
Instead of returning nothing, if you make the method initializeSpell return a boolean value, you could reduce the static method onLearn into 1 line and save 1 line in method onDeindex by joining initializeSpell in the if statement.
Instead of refreshing DetectTrigger periodically, I guess it would be more efficient to refresh the trigger if the numbers of wasted events reach a certain amount because there are times where the trigger need not be refreshed yet within certain duration.
Riposte:
You don’t need an allocator/deallocator to the Stun struct because you can just save its data to the index of the unit since you’re using a unit indexer and since you’re only limiting a single instance per unit anyway. Instead of checking ifIndex[data]
is 0, you can have a boolean array with the unit user data as the index for checking. And by doing this, you’ll also be able to make the struct extend an array.
Some nested if statements under the onAttack method can be combined.
Turmoil:
Like above, you don’t need an allocator/deallocator for the TurmoilAI struct and same thing can be done as stated above and it’s also better to combine the 2 onInit methods. There are also values that could better be cached such as arithmetic operations and instance struct members under the onPeriodic method of the TurmoilAI struct.
Other things:
Across the scripts, there are lines which can be combined such as those 1 line inside an if statement that returns a boolean value.
I think it’s also better if you can add to the configuration the option to make the active spells deal damage since you could just set its default value to 0 and adding 1 line of UnitDamageTarget() to some parts in the script is easy and yet that one additional option given to the users can be significant.
Entry by Dat-S? (Hayate & Dat-C3)
Ratings:
Interface with Computer (15) – 12.5 (- 2 for errors) = 10.5
* Efficiency (10) – 7.5
* Leaklessness (5) - 5
Interface with User (15) - 6
* Configurability (5) – 1
* Documentation (5) – 1
* Structure and Readability (5) – 4
Total (30) – 16.5
General Evaluation:
I can’t say that the code itself is ugly however, the code is really lacking in configurability (you should provide a separate trigger for configuring each spell) and documentation as well as instructions for users in importing. The spells also lack proper tooltip as it fails in elaborating what the spells do and some of its object editor values do not even match with what is in the description of the spell such as the allowed targets.
Instead of writing your custom functions in the custom script section of the map, you could’ve just written it in a separate trigger.
Specific Evaluation:
Grapple Hook:
The first thing I noticed was the incorrect formula for arcs. Height should be equal to ((4.00*maxHeight/maxDistance)*currentDistance/maxDistance)*(maxDistance - currentDistance)).
The way you cache values can be made more efficient. Take this for example:
You can instead do
Custom script: set x1 = GetUnitX(udg_DatGHcaster[udg_DatGHmax])
Custom script: set y1 = GetUnitY(udg_DatGHcaster[udg_DatGHmax])
Custom script: set x2 = GetUnitX(udg_DatGHtarget[udg_DatGHmax])
Custom script: set y2 = GetUnitY(udg_DatGHtarget[udg_DatGHmax])
Custom script: set udg_DatGHmaxdistance[udg_DatGHmax] = SquareRoot((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))
And you can do the same for the Grapple Hook Run trigger.
Custom script: set dx = GetUnitX(udg_DatGHcaster[udg_DatGHmax]) - GetUnitX(udg_DatGHtarget[udg_DatGHmax])
Custom script: set dy = GetUnitY(udg_DatGHcaster[udg_DatGHmax]) - GetUnitY(udg_DatGHtarget[udg_DatGHmax])
Custom script: set udg_DatGHmaxdistance[udg_DatGHmax] = SquareRoot(dx*dx +dy*dy)
Also, upon the end of the Grapple Hook, you should set the fly height of the caster to its default fly height instead of zero because not all units have 0 as their default fly height.
Bait:
The spell is synonymous to the above spell except that the target is the one to be grabbed instead of the caster. Basically, the issues here are just the same with the above spell.
Surf Up:
According to the spell description, if I understood correctly, the hero will throw a hat that is supposed to bounce between units within certain range from the first target and while bouncing, it would cause damage and a stun for certain duration. However, this is not what the code does, as also evident when I tested the spell in-game. The spell only damages and stuns the first target, neglecting the other units being bounced with the hat afterwards.
Steroid Fish:
There’s nothing I can say here.
Other things:
There are lots of things that the code needs to improve on. These include, but are not limited to spell configurability, documentations, importing instructions, efficiency, etc.
However, I could not find any leak in the code.
Entry by Proxby-Oh (PROXY & Kyrbi0)
Ratings:
Interface with Computer (15) – 11.5
* Efficiency (10) – 6.5
* Leaklessness (5) – 5
Interface with User (15) – 10
* Configurability (5) – 2.5
* Documentation (5) – 3.5
* Structure and Readability (5) – 4
Total (30) – 21.5
General Evaluation:
The spell codes are too short making it hard for me to evaluate the code while following the criteria, but anyway I understand it’s because you focused more on simplicity and uniqueness I guess. The documentation is fine although it could still be improved, same goes for the spell description. It might have been better if you provided a more detailed spell description, such that the users will already have a picture in mind of what the spell does even without actually testing the map especially that spells are OE dependent. Despite its very short length, there are still things it can improve on as will be stated below.
Specific Evaluations:
Fell Gate:
The following values are better to be cached – Target unit of ability being cast, Last created unit, and Triggering unit. It’s always a good practice to store values from function calls to a variable whenever they’re used more than once.
Doldrums:
You could have elaborated the spell description better as it will also guide the users on how the values in the OE would affect the spell i.e., to give users context of what they would want to configure.
Storm Form:
You could’ve just used one trigger for the spell. It’s easy to do since the event is the same and they only differ in one condition. And btw, you don’t have to use
in the conditions since that is already the default setup of the GUI conditions by default. You just made it redundant.
And - All (Conditions) are true
You should’ve stored Triggering unit into a variable since you refer to it many times.
Maelstrom:
And again, many values should be stored to a variable as you refer to them more than once.
Other things:
You should use Triggering unit whenever possible, instead of Casting unit, etc. because I’ve read across some posts saying Triggering unit is faster than other event responses for units.
Entry by Special Ops (A.R. & Tank-Commander)
Ratings:
Interface with Computer (15) – 12.5 (- 0.5 for the typo resulting in error) = 12
* Efficiency (10) – 7.5
* Leaklessness (5) - 5
Interface with User (15) – 14
* Configurability (5) – 4
* Documentation (5) – 5
* Structure and Readability (5) - 5
Total (30) – 26
General Evaluation:
The code is well organized and structured, efficient, and most of all, has an elaborated documentation provided for the users covering all aspects of the spells starting from importing instructions, configuration, and all the way to internal code captions. The spell configurations provided seems fine although you could still have provided constant functions for users to configure what type of units are allowed as the spells’ targets. Other than that, the code is very good.
Specific Evaluation:
Rupturing Stab:
The function RS_IsNotBleeding can be replaced with an integer array or hashtable as an instance counter which counts the current Rupturing Stab stacked upon a specific unit and you can simply check if its value is zero for that unit. This way, it would be more efficient and the operation would be O(1).
Leech Life:
It’s better to make the system squareLL_MaxRange()
automatically instead of relying on the users to calculate the value they should put in the configuration in order to get the desired range. The speed gain for doing this is very little anyway and I don’t think it’s a better trade off for the users.
Also there is one function call inside an if-statement that can just be combined to it (if-statement).
Aside from these minor things, there are no other issues I can see and the code looks good.
Corpse Crusher:
The code is very good and there are only 2 very minor things I can point out for improvement.
Under the CC_Cast function, (x2 - x) and (y2 – y) can better be saved to a variable because you refer to them 3 times.
Under the CC_Loop function, this can be simplified toset b = not b
JASS:if b then set b = false else set b = true endif
Blood Boil:
The BB_IsNotBuffed function can instead be replaced with a more efficient method the same to what I suggested in the Rupturing Stab spell above. Another thing is the typo you madeset level = GetUnitAbilityLevel(udg_LL_Caster[Node], LL_Ability())
.
Other things:
I suggest you to use a unit indexer to save the spell effect instance count for a specific unit for the spells Rupturing Stab and Blood Boil, or you could just use a hashtable for efficiency.
Entry by The Flaming Skull of Waddles (Direfury & KILLCIDE)
Ratings:
Interface with Computer (15) – 14
* Efficiency (10) – 9
* Leaklessness (5) – 5
Interface with User (15) – 13.5
* Configurability (5) – 4
* Documentation (5) – 4.5
* Structure and Readability (5) - 5
Total (30) – 27.5
General Evaluation:
The spells are well coded, neat, and provides documentation and instructions for users well. Though I can see an important option that is lacking in the spells’ configuration i.e., the option for users to customize what type of units they want to allow as the spell’s targets. Furthermore, the spells’ configurability can still be extended a bit as will be stated below. Nevertheless, the overall coding is good. I also found it nice that you’ve put the configurations into arrays, giving users more freedom in the spell stats’ scaling.
Specific Evaluation:
Noxious Cloud, Conflagrate, Fel Meteor:
These three spells share a common structure and they share similar too so I just coupled my evaluation for them.
Within the loop trigger, some array variables in which you refer many times should better be saved to a variable.
Aside from this, there aren’t any other problems I can notice.
Dark Respite:
I think it would be better for the Dark Respite spell to have an option for health restoration in case the users want it to restore health also. Then you can just set its default value to zero.
Other things:
You should probably move the PeriodicTimer and DummyOwner variable up into the configuration section. Also, you could probably add an option for users in the configuration if they want to ignore a noxious cloud when casting a spell or not.
For the users to be able to customize the type of units allowed as the spells’ targets, you can have something like this in the conditions:
Then you just put the AllowStructure and AllowImmuned booleans in the configurations.
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Or – Any condition is true
(Unit is A structure) Equal to False
(AllowStructure) Equal to True
Or – Any condition is true
(Unit is Magic Immune) Equal to False
(AllowImmuned) Equal to True
Then - Actions
Entry by This is not a Team (Freddyk & Cokemonkey11)
>> Review by Purgeandfire
Interface with Computer (15) – 15
* Efficiency (10) – 10
* Leaklessness (5) – 5
Interface with User (15) – 14
* Configurability (5) – 5
* Documentation (5) – 4
* Structure and Readability (5) - 5
Total (30) – 29
General Evaluation:
I had a lot of fun messing around with these spells. There are numerous configurables to tweak the spells to your liking, and everything just works flawlessly.
These spells are quite tricky to get right: (1) you have a spell that enhances all other spells (2) you have spells that apply buffs, which need to take into account stacking/removal/etc. They are a pain in the ass to get right, and the fact that you account for all that is a testament to the code's resilience against bugs.
I loved the overall design of the code. It was easy to see where the configurables were, the code flowed well, the names were self-documenting, and big props for implementing scald so seamlessly. Documentation was great, although 1 point was docked since I think more of the constants could've been documented, i.e. KNOCKUP_POWER_, AIR_CONTROL, FX_ORBIT_OFFSET, CHANNEL_FIDELITY, etc. They are named well, but it takes a bit of familiarity with the spell's code to find out what they affect.
Great job overall. The amount of work you guys put in really shows.
Specific Evaluation:
Geyser:
Nothing to criticize here. Great job. Unit tests, wow!
Ink:
Fantastic code. As a side recommendation, it'd be cool to be able to configure the number of units affected by the ink. It would take a bit of extra work, but you'd have to create a function that picks the N closest units instead of the 3 closest units. You could maybe use a linked list instead of a vec4, and insert based on distance.
Scald:
Again, nothing to criticize here. Funnily enough, most of this spell's code is outside its main script itself! Great choice. I feel like I could customize the scald effects without any difficulty. Great job!
Mass Brainwash:
A proof of this is left to the reader.
>:|
Jokes aside, great design. You implemented everything in states, which made the spell's flow very easy to follow. There are quite a few object instances involved, but you always cleared everything appropriately, even if the spell ended prematurely. As mentioned above, this spell had quite a bit of complexity involved. MUI for this spell isn't about just making sure everything has their own instance--you have to worry about stacking and the different phases of the spell. You handled it really well.
Overall, fantastic job. I'm sure you expected more criticism, but I honestly couldn't imagine doing them better myself. Hell, I would've probably coded them worse.


Score | Rep | Entry | Team (Contestants) |
84.21 | 50+5 | Mur'gul Warlock | The Flaming Skull of Waddles (Direfury & KILLCIDE) |
80.53 | 35+5 | Silithid Devourer | Special Ops (A.R. & Tank-Commander) |
77.84 | 25+5 | Swashbuckler | CockroachesInYourPants (HappyCockroach & Quilnez) |
76.87 | 5 | Sea Druid | This is not a Team (Freddyk & Cokemonkey11) |
63.05 | 5 | Windlord | Proxby-Oh (PROXY & Kyrbi0) |
50.77 | 5 | Murloc Fisherman | Dat-S? (Hayate & Dat-C3) |
HONORABLE MENTIONS | |
Best in Design | Mur'gul Warlock |
Best in Art | Silithid Devourer |
Best in Code | Sea Druid |
Most Popular | Mur'gul Warlock |
I'll be quite honest; I was a little surprised. I figured we had a top-2 toss-up (Sea Druid & Silithid Devourer), since the art was simply top-notch & had the coding to back it up. But the Mur'gul Warlock did get the highest number of Votes & the highest Design score. Anyway:
Congratulations to Direfury/KILLCIDE, A.R./Tank-Commander, and HappyCockroach/Quilnez for their winning entries, and congratulations to all who entered! And on a personal note, thanks for letting me live the dream I've had since 2008; to participate in another one of these amazing Joint Hero Contests (not to mention Host it!). They are honestly my favorite Contest & I look forward to more in the future. Keep it alive!
===
Poll || Old Poll || Contest || Proposition
Attachments
Last edited: