• 🏆 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!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Zephyr Contest #15 - Poll

What's your favority entry?


  • Total voters
    21
  • Poll closed .
Status
Not open for further replies.
the%20hive%20workshop.png


zephyr.png
contest.png
number.png
1.png
5.png

poll.png




<< Download All Entries >>


Some things to mention:
  • Trying to manipulate the poll or other users to change the result may deal to punishment.
  • Competitors are not allowed to vote for their own entry.
  • Participating in the poll does not explicitly safe you from being disqualified.

Lastly, you're very welcome to make a short statement why/what you liked the most, so the people get a bit of public feedback, too! : )

:fp: Contest Thread | Results
 
Last edited:
Level 28
Joined
Nov 12, 2007
Messages
2,340
As I'm far from proficient in spell-making, what I considered the most was noob-understandable documentation, impressiveness, (what I thought to be) creativity and applicability.

My vote goes to NEL's Prision. Really caught my attention cool and useful ultimate (even though this kind of holding-units-within-a-circle spell isn't the most new and original thing).

It was a difficult tie with PurplePoot's, but in the end I thought Prismatic Spray was too unreliable before level 3 while being too strong at such level. Also balancing would be kinda difficult because of the randomness (although the randomness is the very reason of its sexyness).

Other one I'd like to mention is Loner-Magixxar's Touch of Nature, which was a really creative and captivating spell. Maybe it is the one I enjoyed the most. The problem imo is that it does too much stuff. Also the documentation was very explanatory, but the overload of info with comments and arrows made it kinda confusing! The way you wrote the comments in your Stone Integrity entry was cleaner to read =P
 
Level 9
Joined
Oct 14, 2013
Messages
238
The problem imo is that it does too much stuff. Also the documentation was very explanatory, but the overload of info with comments and arrows made it kinda confusing! The way you wrote the comments in your Stone Integrity entry was cleaner to read =P

Thanks for the feedback.
Yup it does too much to the extent that there was not enough space in the tooltip to include all the info :p I said if I'm going for a diversity skill I might as well go all the way in, but maybe I took it a little too much to the extreme this time. But anyways I'm glad that it was enjoyable at least.
 
Level 37
Joined
Jul 22, 2015
Messages
3,485
For the record, this was me just spending a little over five minutes per entry. These are just my opinions of each entry and not the official reviews!

User / EntryConcept (/10)Code (/10)Effects (/10)
Fruit Forest - Overlord Slam
7
5
8
PurplePoot - Prismatic Spray
8
8
8
NEL - Prison
7
6
8
Tank-Commander - Apex Blizzard
7
9
8
Anachron - The Dark Plague
9
7
7
Loner-Magixxar - Touch of Nature
9
6
7
Marjosh38 - Elementum Spectrum
7
5
6
@Fruit Forest - The concept is a little overused, but the effects were really nice. However, I'm not a big fan of how you coded it. Your loop is always on (a big no no), you call the same function multiple times instead of storing it into a variable (ex: Last created unit), a lot of hardcoded values which should be configurable, you use custom scripts to call BJ functions, and most importantly, you don't document what the child keys represent in your hash. The latter makes it much harder to read your code. I know that you do document what some of the child keys represent in the loop, but you should really have it in both.

@PurplePoot - Your idea of seperating a single spell into multiple libraries / scopes is interesting. I sort of liked it because it helped make the code easier to read. More documentation would have been useful, and there are a few moments in your code where I said "eh you could have just done this." For example, instead of having "three loops" in your init function, you could have used the TriggerRegisterPlayerUnitEvent() in a single loop. There were also a few times where you called the same native multiple times (ex: GetTriggerUnit()) instead of just storing it into a variable. Overall, the randomness really makes this spell stand out, and does a great job representing the Arcanist and the dangers magics can pose!

@NEL - As Naze mentioned, the concept isn't brand new. However, the effects are really awesome! I'm pretty surprised that the FPS didn't drop when I had a few instances running. However, I'm confused with the number of locations and BJs used in your JASS code. One of the benefits of JASS is having direct access to the natives and the ability to use X/Y coordinates a lot easier. I knocked off a lot of "points" for this. You're also not making use of vexorian's dummy model :p you can easily get rid of the three dummy units down to one with it.

@Tank-Commander - The concept is a little meh, but fits the model nicely. Like PurplePoot, the "randomness" is sort of cool. I liked all the effects you chose excluding the explosion at the end. It seemed pretty abrupt, and sort of makes it look way more dramatic than it should. Of course, as usual, your code is well documented and easy to read (except the 3D homing, which is beyond my comprehension).

@Anachron - I'd have to say your spell concept is one of my favorites. I might be bias becuase I'm a fan of green / plague-y stuff :p however, your choice of effects totally killed it for me. I personally don't think they match the spell at all, and are a little underwhelming. I think your code was the shortest out of everyone because of a combination of the spell concept and use of libraries. You have a few hardcoded variables that should have been configurable (ex: the dummy's unit type), having multiple if blocks instead of just making use of elseif, and most importantly, having a single dummy caster for the spell instead of constantly adding the ability and removing it. Some documentation would have also been appreciated :p Also, you shouldn't have "test map" features in the actual spell code!

@Loner-Magixxar - Awesome spell concept, but holy f**k is it long. You should have toned it down a bit to maybe only affect units :p The effects are a little meh, but they are definitely matching and fit the overall theme of the Hero. Your code has gotten a lot better, and it's well documented. However, I must stress the fact that your loop should never always be on (there are a few cases where this is unavoidable like passive spells), and you constantly keep calling the same function over, and over again instead of just storing it in a variable once. This is pretty crucial in big periodic loops like the one you have. One other thing you do is you don't nest your If/Then/Else blocks. From the looks of it, most of your If/Then/Else blocks can only be run once at a time, meaning that there is no need to check for any other conditions if a condition has already been met. You also have a Wait Timer inside ToN Cast, which seems like a lazy fix for something.

@Marjosh38 - The spell concept seems a really random, but I like how you made use of the alternative animations of the Arcanist. The effects also seem lacking, but they do their job. Your code does need some work though. Your variable names are extremely generic, and I will not be surprised if it caused issues if people were to import it into their maps. The most important thing I must address is the number of hardcoded values you have that should have been configurable. I feel being able to configure the spell to your liking (excluding concept) is crucial, so I knocked off a lot of points for this. Sine documentation would have been nice, and like Fruit Forest, you should specify what the child keys represent in the Hash. The random saving and loading makes it really tedious to read your code. You also have a few leaks in your code, all though I am under the impression you were in a bit of a rush to turn this entry in. I also want to emphasize one thing to you: please read the rules before voting. I noticed that you voted yourself, but I must point out that: Competitors are not allowed to vote for their own entry. If this is your first offense, don't worry about it. I'm sure IcemanBo will let it slide, but watch out next time! If it occurs again, you will get disqualified.
 
Level 11
Joined
May 16, 2016
Messages
730
Loop is laways on, but if the group is empty then nothing happened only checking the number of group of involved untis which doesn't load memory no matter how many units you have. No big deal. I guessed you give the mark only according to your way of programming. Do you have tempaltes where you are using hashtables?
 
Last edited:
Level 37
Joined
Jul 22, 2015
Messages
3,485
If the group is empty, theres no need to have the loop on. It's pointless. You should be turning on the loop if there is at least one unit in the unit group, and turn it off if there are no units in the unit group

Do you have tempaltes where you are using hashtables?
Well if you take a look at my entry, I label what each relevant child key represents under each trigger. It's not necessary, but it really helps make code easier to read.
 
Level 12
Joined
Jun 15, 2016
Messages
472
Went for @PurplePoot 's Prismatic spray, seemed to me the most fitting to the model, and it had somehow the feel of a hardcoded ability.

@Anachron I had an error message pop up, something like "can't double free instance: 8194". I think that happened because I casted the spell on an ancient wendigo, and casted it again after he revived. Except for that great spell :grin:
 
Level 9
Joined
Oct 14, 2013
Messages
238
Thanks for the feedback

your loop should never always be on

I can fix that easily.

you don't nest your If/Then/Else blocks. From the looks of it, most of your If/Then/Else blocks can only be run once at a time

I did that because it saved lots of code lines. At first I did each If/Else separately and skipping the rest of the code when a criterion was met, but the amount of code was so much bigger that this one, because there were lots of repetitious code lines.

You also have a Wait Timer inside ToN Cast, which seems like a lazy fix for something.
Nothing important. It just returns the mana spent for the spell to the caster when no cast happens. It has to wait a fraction of time just for the mana to be deducted from the hero. Because if the hero's mana is full, first the mana is added then it is reduced, resulting in a reduction.
 
Level 37
Joined
Jul 22, 2015
Messages
3,485
Maybe this will reveal issues that others dont have, but I feel making a testmap respect the spells issues is cheating.
I'm not sure what you mean. The rules stated that we have to make a test map test all aspects of the spell. That involves air and ground units, hills, cliffs, pathable terrain, etc. I'm sure most of us, including me, just forgot about reincarnation mechanics :p all though my spell does account for dispels!

At first I did each If/Else separately and skipping the rest of the code when a criterion was met, but the amount of code was so much bigger that this one
I might be missing something, but I'm not sure how nesting If/Then/Else would create more code lines. All you're doing is moving the blocks inside each other :p you wouldn't be adding more lines.

It just returns the mana spent for the spell to the caster when no cast happens. It has to wait a fraction of time just for the mana to be deducted from the hero. Because if the hero's mana is full, first the mana is added then it is reduced, resulting in a reduction.
Yeah I figured. There is a way to go about this, but it involves having a queued list and a 0.00 second timer. As mentioned though, I realized it was a lazy fix for something.
 
Level 11
Joined
May 16, 2016
Messages
730
Well duh. Thats why I mentioned that the base spell for the slow effect is Cripple and the base spell for the secondary effect is Curse. I don't know what you expected to happen :p it's an unavoidable mechanic of WC3.
The whole wc3 buff system is stup... has lack of possibilities
Well I'm sure the Cripple ability is spread enough in all maps because of its functionality. Well it is possible to use SpellBook+Aura or Poison Arrow (AEpa) as debuff placer. They probably can't be dispelled, but they aren't conflict with other debuffs.
Anyway player can create own dispel system, it doesn't hard to do..
 
Level 11
Joined
May 16, 2016
Messages
730
Yeah they would have to make their own Buff system. That's why it is good to mention what your base spells are so that the user can change it accordingly. Now that you mention it, I should have used the JASS native to issue the order instead of the GUI so that they don't have to go into the code to make the adjustments.
Anyway i think "consume" two debuffs (crip and curse) is not a good idea. Yes, they can be dispelled, but an user should do own system. If I were you I would try to avoid using debuffs from cripple, curse, inner fire etc.
 
Level 9
Joined
Oct 14, 2013
Messages
238
I might be missing something, but I'm not sure how nesting If/Then/Else would create more code lines. All you're doing is moving the blocks inside each other :p you wouldn't be adding more lines.

All in all, there is not a high level of nesting in my codes, and some of them are necessary; for example, the code should first see what the target is, and then try to evaluate the kind of trees around that target which needs conditions (such as the limit of trees, types of trees, sifting dead trees, etc.). Unnesting some of the conditions really complicates matters at some points. But some of them can be unnested, which I agree, but as I said the level of nestings are not that much to cause any strain.
 
@Anachron i reread your post and realized you might have been referring to my review for your spell. When i said that your spell shouldn't have "test map" features, i was referring to the FogEnable() and FogMaskEnable() in the init function of your spell.
Yeah sorry I wasn't really feeling like adding a new lib just to disable fog. There was no statement in the Contest Thread about this being an issue.
 
It doesn't, but I do recall a judge a couple of contests ago talking about. Also given that these go into the Spell Section, a user unfamiliar with vJass will be wondering why the fog is off :D
You're right, I should maybe have split it. Didn't really pay much attension on it since I was so focussing on finishing the spell in time. My mistake :(
 
Level 9
Joined
Mar 23, 2014
Messages
165
Any clever idea about how can i see the spells without having any software on this office pc? xd
@deepstrasz can you make a video of these entries too?
i'd love to vote for this.

Edit: It's cool how @KILLCIDE put GIFs on his, and even some pictures as others did but i wish they all had a working gif.
 
Last edited:
Level 40
Joined
Dec 14, 2005
Messages
10,532
@PurplePootand there are a few moments in your code where I said "eh you could have just done this." For example, instead of having "three loops" in your init function, you could have used the TriggerRegisterPlayerUnitEvent() in a single loop. There were also a few times where you called the same native multiple times (ex: GetTriggerUnit()) instead of just storing it into a variable.
There were definitely some issues with my code (for example, I didn't bother to write much documentation for parts other than the config, although the code should be self-explanatory in most places), but these are the sorts of habits I had to unlearn once I left the JASS community last time. There's something to be said for fighting the JASS interpreter's quirks when it matters, but the rest of the time writing worse code just to make optimizations that don't matter should be avoided. Thanks for the look though!

Thanks guys for your feedback so far!

I've tested the spell quite a bit and chose the testmap for a reason: It has magic dispell, reincarnation and such things which should be considered.

Maybe this will reveal issues that others dont have, but I feel making a testmap respect the spells issues is cheating.
I'd be perfectly OK with the contest providing a test map for us to use, but otherwise as Killcide mentioned I just kinda threw something together that met the requirements. I don't think anyone was trying to cheat by obscuring major flaws in their spell or anything of the sort.

@PurplePoot has an entry? :eek: Woot, he's here? Amagad!!!!

Been a while since I voted on a contest :)
Had some time to kill during reading week! We'll see if I enter anything else, but it was fun to write some JASS after mostly writing code for work over the past few years.



Quick feedback (I didn't look at the code, this is gameplay-only):

  • Overlord Slam: Wasn't a huge fan: jump spells are a bit overdone and the effects are a bit garish.
  • Prison: Once again, the effects are a bit ugly near the start but the circle of green effects at the end looks really good. The concept would be hard to work into most maps.
  • Apex Blizzard: Liked it a lot. My main concern is that you can't really aim it.
  • The Dark Plague: Wasn't really sure what this spell did. I also got an error from Table at one point while testing it.
  • Touch of Nature: Way too much going on (and I say this as someone whose spell probably had too much going on) and most of it was kind of overly simple.
  • Flame Burst: Pretty neat and not too flamboyant. I'm not a huge fan of the way the "pulses" work (it seems weird to have 8 projectiles rather than an actual nova) and I felt like it kind of tied together a few different unrelated concept, but the execution was solid.
  • Elementum Spectrum: This was pretty buggy plus kind of goes against the idea of only having one spell in the contest. You couldn't level up the spell while it was active, for example, and if you tried to cast one of the morph spells right before it changed to the other one your spell would get cancelled. The effects were also a bit ugly (in particular the sideways aura effect clipped through the ground).

Vote goes to Apex Blizzard.
 
Last edited:
  • Like
Reactions: Rui

Rui

Rui

Level 41
Joined
Jan 7, 2005
Messages
7,550
There's something to be said for fighting the JASS interpreter's quirks when it matters, but the rest of the time writing worse code just to make optimizations that don't matter should be avoided. Thanks for the look though!
This is true. ^^ I remember when writing JASS I was always overly worried about performance. In the real world,
sometimes it's better to sacrifice some for the sake of readability. ;)

Had some time to kill during reading week! We'll see if I enter anything else, but it was fun to write some JASS after mostly writing code for work over the past few years.
:ahug:
 
I quickly went over everyone's entries in game I'll just summarize my experience of the mechanics though I'll abstain from voting since I honestly have no idea what I'd vote for and I haven't really gone over code except in cases where I was curious about specific mechanics - I also added magic immune enemies (granite golems) to the maps to check consistency with in-game mechanics

The Dark Plague:
- Easy to use easy to target, interesting effects on the units afflicted - could use a bit more oomph on the effects but that's my personal opinion
- The spell doesn't wake up sleeping enemies which doesn't mimic normal in game debuffs (to my knowledge)
- The randomness of the spell while intentional gives rise to inconsistent performance, which I'm less of a fan of
- I got the table error that other people have mentioned, which is a shame - lets down the ability a lot
- Couldn't test for magic immunes since I have a 1.28 WC3 and a broken JNGP, I'll err on the side of probably ignores them

Flame Burst:
- Very straightforward point-and-click ability, definitely something that could see a lot of use in maps
- The effects were pretty clean, but otherwise what you'd kind of expect from a fire spell
- it was a bit hard to tell how much damage you'd be doing intuitively since the spell can refresh its own debuff/DoT on other units
- the debuff overwrite was a bit odd to say the least - I mean yes obviously you want the strongest level of the debuff to display but to outright block the spell being cast on the same unit twice (if the other one is lower level) is a bit weird, you can't extend the duration that way (say one is about to expire) Also produces odd behaviour if you consider a FFA situation - the last/highest level cast could come from different players and "steal" a kill a it were on creeps or whatever else, again doesn't really mimic in-game mechanics
- The AOE damage from units dying affects flyers, but no other aspects of the spell do which is inconsistent
- Correctly ignores magic immunes

Overlord Slam:
- easy ability to use/target, a bit inconsistent given the damage is based off slam distance but that's not an issue as such you get the hang of it pretty easily
- The arc is well, not an arc, it's a triangle - looks odd when going over cliffs or up/down hills
- Spell does nothing if cast directly on your position (if you're stationary) you'd do this by casting and clicking on the portrait rather than on the ground will still cost you the mana/cooldown though would've liked to see a sim error or a sort of default state in that scenario but that's a mostly minor issue (since it's a bit weird to do that)
- Correctly ignored flying and magic immune units
- Pretty sure floating texts are "shown" to everybody by default, scanning the code I found that you don't hide it for others just show for the owning player - probably can be seen by other players through the fog of war and whatnot but would need to confirm

Touch of Nature:
- This one is really complex in terms of how many ways you can use it, but it's obvious a lot of effort went into it, bit hard to use effectively as a consequence though
- I enjoyed the effects quite a bit on this one, especially the AOE for the revive effect - though it didn't do much other than be an effect in that case
- The dependence on trees mechanics is interesting, though the tree reviving part of the spell is possibly a bit slow
- The spell didn't confirm tree targets very well, if you made the spell based off channel you could make it so trees could be visibly selected as a target
- Correctly ignored magic immunes, correctly identified trees, though these trees were identified by a list of all tree types rather than normal detection methods

Prison:
- Hard to "aim" due to being instant cast with no range indicator but otherwise pretty easy to use
- The effects could do with a lot more "Introduction" rather than suddenly appearing but were generally clean and pretty good otherwise
- I wonder about the AOE size when you consider that on the test map you're zoomed out, if you have a normal view would the cage fit on the screen?
- The spell does affect air units but doesn't "Intuitively" do so since the cage isn't "tall enough" but that's just a visual comment
- The spell doesn't ignore Magic Immunes
- Kind of an aside but please change the ingame map name away from "Just another Warcraft III Map" too many do that and it gets hard to find the right test map (and the test map generally was just very awkward what with heroes being easily killed)

Prismatic Spray:
- I liked that so long as where your target point was within the effective AOE of the spell it would cast immediately (rather than run up to that point and use it as an origin point as it were, though did have some awkwardness when you want to hit two "groups" of units at the same time
- The effects were very fitting for the model, very chaotic looking which I enjoyed
- I have the same issue with randomness that I mentioned for The Dark Plague but similarly it's more of a preference thing than anything else
- Occasionally there was frame loss during the spell casts, presumably from the amount of effects that were being made simultaneously
- Same issue with testing for magic immunes as I had with The Dark Plague though the code looks like it might not ignore friendly magic immunes (when healing) can't confirm though

Elementum Spectrum:
- Well the main part is easy to use, the rest is actually pretty awkward and difficult just because the timing can cancel your attempt to use one of the two sub-abilities
- Doesn't mimic ingame mechanics at all really for a spell (as mentioned by Purplepoot)
- The fire spell consistently forms that spiral-like effect which is all well and good, except it causes inconsistent performance where what absolute position away from the caster you are affects the potency of the spell, which isn't very good
- The spell is actually 3 spells, which kind of shouldn't be the case, Iceman mentioned having 1 sub ability as fine but this was 2 and I found the water sub ability in a number of ways more useful than the actual spell
- I did enjoy the effect of the final explosion, though I think it could've been done with being a bit shorter of a spell, though that was mostly for effect - didn't serve too much of a purpose
- Correctly ignores magic immunes
- Hits flying units but doesn't intuitively do so

I think everybody had fitting spells for their model so I don't think anybody "failed" their concept
did notice that a lot of people were managing to ignore magic immunes via happenstance (damagetype or spell just unable to target them) rather than programmatically ignoring them, so would be a possible issue if somebody configured them to use different damagetypes
of course all of these comments are without really reading the code much or at all in some cases, this post would probably get over twice as long if I did XD
mechanically I'm torn on which one is my favourite - I enjoy the diversity on Touch of nature though it is probably doing too much, overlord slam is fun to use but the issues with the arcing and the ability to get stuck in a bunch of trees kind of irritates, prismatic spray would be great if I didn't drop frames sometimes. so if I were to vote code-blind I'd probably go for one of those

If I've gotten anything wrong in my analysis of an entry by all means correct me
 
Level 37
Joined
Jul 22, 2015
Messages
3,485
...I'll abstain from voting...
t(-.-)t

...obviously you want the strongest level of the debuff to display but to outright block the spell being cast on the same unit twice (if the other one is lower level) is a bit weird, you can't extend the duration that way (say one is about to expire)
Well why would you want a lower level instance to overwrite a higher level one? xD

...the last/highest level cast could come from different players and "steal" a kill a it were on creeps or whatever else
Is that not how it normally works? The player who deals the killing blow gets the credit.

The AOE damage from units dying affects flyers, but no other aspects of the spell do which is inconsistent
Given the flame burst runs along the ground, it would be awkward for it to hit flying units. I also disabled the ability to cast the original spell on flying units because I didn't have enough time ;D
 
Level 9
Joined
Oct 14, 2013
Messages
238
- The spell didn't confirm tree targets very well, if you made the spell based off channel you could make it so trees could be visibly selected as a target
Could you name the ability? Because I searched for a proper spell but it took me so long, so I gave up and went with this one.

though the tree reviving part of the spell is possibly a bit slow
The duration can be changed by the user

though these trees were identified by a list of all tree types rather than normal detection methods
Unfortunately, I don't know the normal methods to do that.

And thanks for your feedback.
 
Last edited:
Level 40
Joined
Dec 14, 2005
Messages
10,532
Channel is pretty great and is basically your go-to ability for coded spells: it lets you customize more or less everything, including lots of things that are hard to find elsewhere (targeting indicator, targets, channeling time, whether it's universal cast or not, etc) and some things that other abilities just flat out can't do (custom orderIDs in particular).

--

@Tank-Commander: To be completely honest I've been out of wc3 long enough that I forgot magic immune is a thing. I think my spell (almost) entirely ignores it, at least for hostiles, but that's by coincidence.
 
Status
Not open for further replies.
Top