HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Hurricane

08-25-2006, 09:06 PM#1
Rising_Dusk
Zoom (requires log in)
HURRICANE
v1.2

Description: Creates a torrent of water around the caster if it is standing on water. This hurricane will pick up any unit's it comes in contact with, spinning them around the caster for a few seconds, then damaging and tossing them away.

Background: This spell is made specifically for use in Spell Session #7 on wc3c (Here, duh!). It is fully written in jass and completely follows the JESP manifest.

Quote:
New Stuff:
v1.0: Spell created and submitted for critique.
v1.1: Modified credits to include Vile for the sliding effects.
v1.2: Fixed a minor bug that allowed multiple knockbacks at once, adjusted the code to be more optimized and less laggy on lower-end computers, added constant functions for if the spell requires water to cast, and added additional other fixes. Fixed handles on public objects not using the 'Hurr_' prefix.

Special Thanks: All credits to anything I used are in the map, but I'll also do it here. Thanks to Vex for making JESP, Vile for the knockback particles, and thanks to Wc3c for hosting another fun contest for me to partake in! I'm super happy my spell did so well, it was a close contest and I'm glad there was lots of competition!

I would also like to personally thank Blu for all of his help and support. I seriously think without him around I would die a horrible death.
He helped me so much, I can't even begin to imagine this lil' paragraph being enough credit.
Thanks Blu, I owe ya' one. <3

I would also like to thank the happy people of this site for electing my spell to win the contest.
I'm glad at least I can support the modding community the only way I know how --
With my coding. :3
Attached Images
File type: jpgHurricane.jpg (73.0 KB)
Attached Files
File type: w3xSpellSession7_Hurricane_v1.2.w3x (72.5 KB)
08-26-2006, 08:44 AM#2
Tim.
That image is a little too big. Can you bring it down to 800 width, please?
08-26-2006, 01:54 PM#3
Rising_Dusk
Hrm.. I myself don't consider it too big when it isn't even the entire width of a post --
Maybe it's 'cuz my monitor is widescreen.

I dropped it to 800x460.
It looks to be better sized now.
08-28-2006, 03:36 PM#4
blu_da_noob
Yeah, so ditto other thread. I'm back at home with WE access now, so I'll check this out after homework. Edit in with any fixes or approval.

Ok, here goes:
In general: I recomend you store the hero's level of the ability when he starts casting and use it from that storage thereafter (in case he levels up the ability while channeling etc).

Your function Hurr_CastCheck_Conditions leaks a handle reference because you return without nulling the unit variable. Rather than just fixing that, I would combine the casting condition and the spell effect condition into one, removing the need for the second trigger. Example can be found here: http://www.wc3campaigns.net/showthread.php?t=83132 (self plug yay).

In the Hurr_Cast_Actions you store the timer as an integer and then convert it back to a timer everytime you attach something to it, but inside the attach functions it is converted back to an integer. Using the natives here would so much better ;-) (The same applies to every other function which does the same thing, also applies to GetHandleXXX where natives could be used instead [real, integer etc I can understand it in the case of return bugging ones]).

In function Hurr_HydroCharge, instead of using the BJ to count units (effectively) and check if there is one, you could set a temporary unit variable to FirstOfGroup(g), remove that unit from the group and then check if the new FirstOfGroup(g) is null (then readd the unit afterwards).

For the knockback effect you create a new timer for each unit. You could instead use a single timer with a group containing all the 'knock-backees' attached to it. (Just noticed you create 2 separate timers per unit for effect and knockback, could be much better :) )

I would suggest adding constant functions to allow people to change things such as model paths and a boolean determining whether the spell requires water or not.
08-29-2006, 01:35 AM#5
Rising_Dusk
Quote:
I recomend you store the hero's level of the ability when he starts casting and use it from that storage thereafter (in case he levels up the ability while channeling etc).
I here ya' there, consider it as good as done.
Quote:
Your function Hurr_CastCheck_Conditions leaks a handle reference because you return without nulling the unit variable. Rather than just fixing that, I would combine the casting condition and the spell effect condition into one, removing the need for the second trigger.
I am ashamed to have leaked all over your computer, I shall mend this atrosity.
Quote:
In the Hurr_Cast_Actions you store the timer as an integer and then convert it back to a timer everytime you attach something to it, but inside the attach functions it is converted back to an integer. Using the natives here would so much better ;-) (The same applies to every other function which does the same thing, also applies to GetHandleXXX where natives could be used instead [real, integer etc I can understand it in the case of return bugging ones]).
I have no idea what you just said, so you're going to have to explain that one clearer.
I have never worked with the GetStoredXXXXX() natives, I don't know their behavior directly, nor do I have any clue how to manipulate them.
You'll need to enlighten me on that over AIM sometime.
Quote:
In function Hurr_HydroCharge, instead of using the BJ to count units (effectively) and check if there is one, you could set a temporary unit variable to FirstOfGroup(g), remove that unit from the group and then check if the new FirstOfGroup(g) is null (then readd the unit afterwards).
Easy 'nuff, it shall be done my lord.
Quote:
For the knockback effect you create a new timer for each unit. You could instead use a single timer with a group containing all the 'knock-backees' attached to it. (Just noticed you create 2 separate timers per unit for effect and knockback, could be much better :) )
Boo hiss! That implies keeping a single timer running constantly until the spell is over. I'm not a huge fan of that method...
I'll experiment with it, but no guarantees, it seems questionable to me.
Quote:
I would suggest adding constant functions to allow people to change things such as model paths and a boolean determining whether the spell requires water or not.
Blah, blah. :P
Can't use constant functions to change the model of a dummy unit and I didn't use the single bone dummy to attach an SFX to for ease of implementation.
The constant for the "Is Water Necessary" bit I shall add though, sounds nifty.

I'll get to work on it sometime this week.
I've got some lame-o essays I need to whip out before I can do any intensified work on it though.
Expect the update sometime this weekend if not slightly sooner.
08-29-2006, 10:49 AM#6
blu_da_noob
Quote:
I have no idea what you just said, so you're going to have to explain that one clearer.
I have never worked with the GetStoredXXXXX() natives, I don't know their behavior directly, nor do I have any clue how to manipulate them.
You'll need to enlighten me on that over AIM sometime.

If you're around 'tonight' (my time :P) I can help you with that.

Quote:
Boo hiss! That implies keeping a single timer running constantly until the spell is over. I'm not a huge fan of that method...
I'll experiment with it, but no guarantees, it seems questionable to me.

Not sure about you, but I'd rather have one timer running for the duration of the spell than up to 8 or so running at once ;-).

Quote:
Can't use constant functions to change the model of a dummy unit and I didn't use the single bone dummy to attach an SFX to for ease of implementation.
The constant for the "Is Water Necessary" bit I shall add though, sounds nifty.

I know about that (you mentioned it in the config), so I wasn't referring to the dummy unit. I saw somewhere else that you had an effect immediately created and destroyed. That's what I was talking about.
08-29-2006, 12:54 PM#7
Rising_Dusk
I have an effect immediately created and destroyed?
Man, that's news to me, even I didn't know I had that. *Goes to check it out*

And classes go a little late for me today, it'll be 10+ PM your time by the time I get back. :(
09-02-2006, 11:07 AM#8
blu_da_noob
Please try to get the optimisations done :). Shouldn't take you long to fix it up, and let me know as soon as you do as it should be good to go then.
09-03-2006, 03:23 PM#9
Rising_Dusk
Okay everyone fully updated to match all criteria necessary.
See first post for details.
09-03-2006, 05:23 PM#10
blu_da_noob
Quote:
I would also like to personally thank Blu for all of his help and support. I seriously think without him around I would die a horrible death.
He helped me so much, I can't even begin to imagine this lil' paragraph being enough credit.
Thanks Blu, I owe ya' one. <3

Approved? <3
09-04-2006, 08:31 PM#11
BertTheJasser
I love it (even the code is nasty). +Rep