• 🏆 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!

7 Spells in each Element

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
NOT FIXED YET!


Coding: GUI (/ JASS)
Multi instance: MUI


Description

This is the first spell map I submit here, so please go easy on me. Spell map contains 7 different 1 and 3 level spells which is designed as ultimates and powerful spells. This was originally made for the wc3c elemental spell contest.


Spells:

Hellfire
Frostsphere
Wind Sailing
Torture Cage
Thunder Ball
Earth Barrier
Divine Smite


1.0:
First version

1.1:
Improved the demon cage spell to make a perfect circle formation on any terrain and obstacles
Thunder ball does now destroy trees in bigger area when the charge level is increasing
Divine Smite does now destroy trees
Demon Cage Spikes tear down trees just before spawn
Added additional visual effects to the Divine Smite Spell
Added additional visual effects to the Demon Cage Spell

1.2:
Wind spell no longer causes you to move though obstacles
Added blink item as a unstuck countermeasure
Fixed a location leak in earth spell
Slightly improved the performance of the Hellfire spell
AI now control the human player if he left the game

1.3:
Added 3 levels to hellfire, frost sphere, divine smite and thunder ball
Made Spiked Cage MUI
Improved the AI

1.3:
Fixed a multi spawn bug with the hellfire
Fixed a delay bug with the divine hammer
Fixed a bug with the AI



The spell map is a small arena where you can go killing creeps, or test the spells against other human players. You will automatically respawn when you die.

Keywords:
Fire, Ice, Wind, Demon, Light, Earth, Lighting, Thunder, Thunderball, Hellfire, Frost, Frostsphere, Wind Sailing, Hellcage, Flamestrike, Smite, Divine
Contents

7 Element Spell Map TKF v1.31 (Map)

Reviews
12th Dec 2015 IcemanBo: Too long time as NeedsFix. Rejected. 17:02, 11th Jul 2010 TriggerHappy: Don't use Waits. Use hashtables instead of Custom Value. And make it MUI. If you update this one more time without actually changing...

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long time as NeedsFix. Rejected.

17:02, 11th Jul 2010
TriggerHappy:

Don't use Waits.
Use hashtables instead of Custom Value.

And make it MUI.

If you update this one more time without actually changing anything I asked, I'm going to reject it permanently.
 

TKF

TKF

Level 19
Joined
Nov 29, 2006
Messages
1,266
You are supposed to go through obstacles when you're wind sailing. The spells purpose is you allow you to move extremely fast and through anything.

The demon cage spikes are supposed to be selectable and destroyable.


Can you point out what leaks? I'm not an expert of leak removal, but I know the targetpoint is leaking, but the spells depend on the point not being cleaned.


Also it was made on PUI for AoS maps (where players control 1 unit/hero).
 

TKF

TKF

Level 19
Joined
Nov 29, 2006
Messages
1,266
But if they can do that, they could just skip a whole area, and thats bad, it could go to an hidden area.
Well, if anyone going to use this spell, he can just remove the action turn off unit collision if he don't want that to happen. It's very easy to modify it in the editor.

I tried to make it easier with more detailed infos for people about editing the spells and info what each spell is using what variable. You can edit the spells in any way you can.


In this spell map I allowed the wind sailing spell to also function as a unstuck spell, in case you got respawned on a closed area.
 
Level 17
Joined
Mar 17, 2009
Messages
1,349
Divine Smite fucks the crap out of the caster :p InstaKill...
You need to fix groups so that they don't pick allies or the caster.

Well umm, some ideas such as the earth one might not be THAT nice...
Fire one is extremely imba and laggy...

The Wind one is NICE! :) however, adjust the collision as on by default, little are the people who want heroes jumping from one place to another...

Well triggering is good if these are your first attempts, but and however, innefficient...

+ They are not Jass so fix that in your thread description...

I would have loved to tell you how to improve your triggers, but look at my signature :p
But look at the GUI spells of some good spell makers (I'd advice baassee's as his are easy to understand and easy to deal with, but there are also Rmx's, Kingz', Paladon's, mine, etc... calex3 too...)

Best of luck!

Btw, here's something to help you remove the Waits which are inefficient and another to make spells MUI (if you're gonna bother make it MPI, then make it directly MUI)

Waits:
  • UW Main
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Unholy Wave
    • Actions
      • Set UW_TrigUnit[0] = (Triggering unit)
      • Trigger - Turn on UW Loop <gen>
  • UW Loop
    • Events
      • Time - Every 0.01 seconds of game time
    • Conditions
    • Actions
      • -------- This is a variable which would be recording the time the trigger has been running --------
      • Set UW_WaitCounter[0] = (UW_WaitCounter[0] + 0.01)
      • -------- Condition to check if the time we wanted to wait passed --------
      • -------- & another boolean condition used to let this run only once as wanted instead of having to turn trigger off then turn on another one to continue actions --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • UW_RanOnce[0] Equal to False
          • UW_WaitCounter[0] Greater than or equal to 0.10
        • Then - Actions
          • -------- Setting boolean to true to announce that these actions have run --------
          • Set UW_RanOnce[0] = True
          • -------- your actions --------
          • Set UW_TrigUnitLoc[0] = (Position of UW_TrigUnit[0])
          • Unit - Create 1 dummy unhwave for (Owner of UW_TrigUnit[0]) at UW_TrigUnitLoc[0] facing Default building facing degrees
          • Set UW_Dummy[0] = (Last created unit)
          • Custom script: call RemoveLocation(udg_UW_TrigUnitLoc[0])
          • -------- all the other actions bla bla bla --------
          • -------- from now on i'll just say what should be done and wont include actions --------
        • Else - Actions
      • -------- let's say you want to wait now another 0.15 before running another actions once --------
      • -------- it's all about basic math... 0.25-0.10=0.15 --------
      • -------- some people might not do it my way but this is the simplest and allows you to keep all this in one trigger :) --------
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • -------- Condition to check if the time we wanted to wait passed --------
      • -------- & another boolean condition used to let this run only once as wanted instead of having to turn trigger off then turn on another one to continue actions --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • UW_WaitCounter[0] Greater than or equal to 0.25
          • UW_RanOnce[1] Equal to False
        • Then - Actions
          • Set UW_RanOnce[1] = True
          • -------- all the actions here again --------
        • Else - Actions
      • -------- let's say now you want to loop --------
      • -------- bit more complex but if I'm to do it that's how --------
      • -------- simple math again, we want to loop for 1 second every 0.05 seconds --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • UW_WaitCounter[0] Greater than or equal to 0.25
          • UW_WaitCounter[0] Less than 1.25
        • Then - Actions
          • Set UW_LoopTimer[0] = (UW_LoopTimer[0] + 0.01)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • UW_LoopTimer[0] Greater than or equal to 0.05
            • Then - Actions
              • -------- all the loop actions here --------
              • -------- then reset loop timer for it to loop again --------
              • Set UW_LoopTimer[0] = 0.00
            • Else - Actions
        • Else - Actions
      • -------- ok so now ur done at t=1.25 seconds and no more actions are needed --------
      • -------- then reset counters and booleans and turn off trigger --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • UW_WaitCounter[0] Greater than or equal to 1.25
        • Then - Actions
          • Set UW_RanOnce[0] = False
          • Set UW_RanOnce[1] = False
          • Set UW_LoopTimer[0] = 0.00
          • Set UW_WaitCounter[0] = 0.00
          • Trigger - Turn off (This trigger)
        • Else - Actions
I just use arrays here because I'm used to; you don't need to


& MUI:
  • Main Trigger
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Ability being cast) Equal to Animate Dead
    • Actions
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • -------- Ok to start with, let me explain a bit --------
      • -------- Index[1] doesn't do anything other than check how may instances of the spell is running --------
      • -------- if Index[1] equal to 0, then no one is using the spell, if it's 1, then there's one unit --------
      • -------- if it's equal to n then there are n units using the abilities --------
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • -------- Since all the units here are using the same Loop Trigger (the point of MUI) we make a condition --------
      • -------- if Index[1] is originally zero, which means that no unit was using the ability which mean the Loop was off --------
      • -------- we make a condition to check if Index[1] equal to zero --------
      • -------- if it returns true then we turn on the Loop Trigger --------
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DT_Index[1] Equal to 0
        • Then - Actions
          • Trigger - Turn on Loop Trigger <gen>
        • Else - Actions
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • -------- Now to announce the number of units using the spell, we keep track of that by adding 1 to the value of Index[1] --------
      • -------- Suppose there were no units using the ability, now there's one, so this makes the value of Index[1] to 1 --------
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • Set DT_Index[1] = (DT_Index[1] + 1)
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • -------- Now, to make the whole thing MUI, we are going to use a different array for each unit --------
      • -------- Which is exactly like using a different variable --------
      • -------- So we using another index, Index[2] --------
      • -------- This is gonna hold a different number for each instance so that each unit has his own array and thus his own variables --------
      • -------- Let's say the value of Index[2] is already 3 units using the ability, it'll become 4 for this intance --------
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • Set DT_Index[2] = (DT_Index[2] + 1)
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • -------- This is a Boolean, which checks if the Loop Trigger should be running for that specific unit --------
      • -------- since the Loop might be running for different units having the ability, we don't want it to affect the unit who has it done --------
      • -------- it will be used as a condition in the Loop Trigger --------
      • -------- having it True announces that the unit is using the Loop Trigger and so it will get affected by the Loop Trigger --------
      • -------- As you see, it's indexed, and thus it's specific for each unit --------
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • Set DT_LoopIsOn[DT_Index[2]] = True
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • -------- Now in the main trigger we use Index[2] as an array for all variables with no exceptions (unless it's a universal variable which holds the same info for all the units) --------
      • -------- here go all your actions prior to the Looping --------
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • Set DT_VariableExamplePoint[DT_Index[2]] = (Position of (Triggering unit))
      • Unit - Create 1 Footman for (Owner of (Triggering unit)) at DT_VariableExamplePoint[DT_Index[2]] facing Default building facing degrees
      • Set DT_VariableExampleUnit[DT_Index[2]] = (Last created unit)
      • Custom script: call RemoveLocation(udg_DT_VariableExamplePoint[udg_DT_Index[2]])
  • Loop Trigger
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • -------- here we work slightly different --------
      • -------- to have the same Loop Trigger to run for all the units seperatly, we use a Loop actions :) --------
      • -------- this Loop Action uses Index[3] as it's integer, which is basically a different variabel then Index[1] and Index[2] --------
      • -------- This Loop runs from integer 1 (which is the minimal possible array number possible for Index[2]) to Index[2] (which is the highest number possible) --------
      • -------- Thus all the units using the spell whose Index[2] varies from 1 to n, will have their actions running in variables with the same specific array integer used in the Main Trigger for each unit --------
      • -------- ------------------------------------------------------------------------------------------------------------- --------
      • For each (Integer DT_Index[3]) from 1 to DT_Index[2], do (Actions)
        • Loop - Actions
          • -------- ------------------------------------------------------------------------------------------------------------- --------
          • -------- now Index[3] is used for all the arrays instead of Index[2] --------
          • -------- ------------------------------------------------------------------------------------------------------------- --------
          • -------- This condition checks whether the Boolean is true or false, if it's true, it'll run for that specific unit --------
          • -------- If it's false, then it'll skip the actions for this specific array number and move on to the other array number and so on --------
          • -------- ------------------------------------------------------------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DT_LoopIsOn[DT_Index[3]] Equal to True
            • Then - Actions
              • -------- ------------------------------------------------------------------------------------------------------------- --------
              • -------- The WaitCounter which counts how long the loop has been running --------
              • -------- You can see the number which I add is equal to the timer event --------
              • -------- ------------------------------------------------------------------------------------------------------------- --------
              • Set DT_WaitCounter[DT_Index[3]] = (DT_WaitCounter[DT_Index[3]] + 0.03)
              • -------- ------------------------------------------------------------------------------------------------------------- --------
              • -------- Condition to check your counter and all your actions --------
              • -------- ------------------------------------------------------------------------------------------------------------- --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • DT_WaitCounter[DT_Index[3]] Less than 10.00
                • Then - Actions
                  • -------- the actionss --------
                  • Unit - Make DT_VariableExampleUnit[DT_Index[3]] face Default building facing over 0.00 seconds
                  • -------- the actionss --------
                • Else - Actions
                  • -------- ------------------------------------------------------------------------------------------------------------- --------
                  • -------- Now the counter exceeded the time you specified so we reset the counter and announce that we're done of this instance --------
                  • -------- We also destroy whatever has to be destroyed or removed --------
                  • -------- ------------------------------------------------------------------------------------------------------------- --------
                  • Unit - Add a 0.01 second Generic expiration timer to DT_VariableExampleUnit[DT_Index[3]]
                  • Set DT_WaitCounter[DT_Index[3]] = 0.00
                  • -------- ------------------------------------------------------------------------------------------------------------- --------
                  • -------- We announce that this unit is done of it's actions by setting the Boolean to False --------
                  • -------- ------------------------------------------------------------------------------------------------------------- --------
                  • Set DT_LoopIsOn[DT_Index[3]] = False
                  • -------- ------------------------------------------------------------------------------------------------------------- --------
                  • -------- We subtract the value of Index[1] by 1 since one instance is done, and as we've said, Index[1] records the number of INSTANCES RUNNING only --------
                  • -------- ------------------------------------------------------------------------------------------------------------- --------
                  • Set DT_Index[1] = (DT_Index[1] - 1)
                  • -------- ------------------------------------------------------------------------------------------------------------- --------
                  • -------- Now this condition checks if there are no more instance running --------
                  • -------- So, if Index[1] is zero, that implies that there are no instance running --------
                  • -------- in that case, we set the value of Index[2] back to zero (a sort of recycling method so that the value doesn't keep on summing up to a high value) --------
                  • -------- and then since there are no instance running and using the Loop (all the Booleans would be False in that case) --------
                  • -------- we turn the trigger off for the sake of efficiency --------
                  • -------- ------------------------------------------------------------------------------------------------------------- --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DT_Index[1] Equal to 0
                    • Then - Actions
                      • Set DT_Index[2] = 0
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
            • Else - Actions
You've got some reading to do :p

And oh, delete the Imports for they're unnecessary...
 
Last edited:

TKF

TKF

Level 19
Joined
Nov 29, 2006
Messages
1,266
Divine Smite fucks the crap out of the caster :p InstaKill...
You need to fix groups so that they don't pick allies or the caster.
Friendly fire. All spells does hurt the caster if you use it on yourself.

Deuterium said:
The Wind one is NICE! :) however, adjust the collision as on by default, little are the people who want heroes jumping from one place to another...
Well, if I'm going to add collision, you can't get away from the stuck places. Well then I have to add a anti-stuck blink ability.

Deuterium said:
+ They are not Jass so fix that in your thread description...
Well the trigger causing the wind spell to work is Jass. Or does that count as GUI?



And I submitted these spells at wc3c 8 months ago, but the competition has stalled it seems... :(



Also I no longer make spells, so I'm probably not going to update this thrash. If it's going to get instant rejection like at wc3c requires inhumanly perfect spell maps, I don't care.

atm I'm spending all my attention working on a map project called Naval Battle, which is going to be the best naval aos map there is which going to pwn the crappy autofire lame battleship maps.... I think there is no good enough battleship maps so i made one (I know it sounds very ego but that what it is)...
 
Level 17
Joined
Mar 17, 2009
Messages
1,349
TKF said:
Also I no longer make spells, so I'm probably not going to update this thrash. If it's going to get instant rejection like at wc3c requires inhumanly perfect spell maps, I don't care.
Well it doesn't get instantly rejected unless it doesn't comply with the rules...
You read them eh?

And well, some things that are usually set by default when making a spell is that the spell doesn't damage you or your allies, and that you can't go through objects...

Such things are usually off, unless that's what makes the spells perfect (ex: a spell through which a unit poisons himself to damage units around him).

About the collision thing, you should adjust it so that the unit can't go over walls and trees at the first place...

And about the Jass thing, well yes it is Jass...


And I don't think it'll get rejected since it is MPI and leaks seem to have been removed, but won't get much of a high rating due to inefficiency compared to the other GUI spells...

You forgot to remove this leak in Death Rock Dust:
  • Set TempPoint3 = (TempPoint1 offset by 77.00 towards (20.00 x (Real((Integer A)))) degrees)
 

TKF

TKF

Level 19
Joined
Nov 29, 2006
Messages
1,266
Well, some spells are actually MUI, but a few like frostsphere, demon cage, and divine smite is unfortunately MPI cuz I only use 1 unit variable/group pr player or some other reason.

I think the rest is MUI, but I'm not totally sure. I knew it for half year ago..... Blame me if I'm mistaken.
 

TKF

TKF

Level 19
Joined
Nov 29, 2006
Messages
1,266
you should download lastest patch then ^^. Altough , I recommend you this instead of hashtable.
http://www.hiveworkshop.com/forums/trigger-gui-editor-tutorials-279/dynamic-values-storage-121558/


Well I use the latest version. I don't see any hash table action in the newgen editor at all. Tried to look through everything 2 times.


Also the spell I submit was intended for GUI users and easy to understand and was made simple as possible. I had no intention of implementing systems to make it easier to understand for GUI beginners.

Why isn't Custom unit value good to use? Why does triggerhappy say I should use hashtables instead when its not in the editor?


Also what spells is not MUI? I was pretty sure all spells are MUI now. The triggers with waits can be runned several times simultaneously since it checks for triggering unit.
 
Level 7
Joined
Dec 19, 2009
Messages
249
Well I use the latest version. I don't see any hash table action in the newgen editor at all. Tried to look through everything 2 times.


Also the spell I submit was intended for GUI users and easy to understand and was made simple as possible. I had no intention of implementing systems to make it easier to understand for GUI beginners.

Why isn't Custom unit value good to use? Why does triggerhappy say I should use hashtables instead when its not in the editor?


Also what spells is not MUI? I was pretty sure all spells are MUI now. The triggers with waits can be runned several times simultaneously since it checks for triggering unit.


Hummm no clue about hashtable but for MUI simply make 2 hero and make them cast the spell in same time , if one of them bug , it mean the spell isn't MUI
 
Level 2
Joined
Oct 28, 2008
Messages
14
Hey guys, I've got a question.

If I want some of those spells in another map what am I supposed to copy (triggers)?

Thanks.

Edit:
I think I'm missing something since the spells are invisible whenever I try them in another map, for example, the Divine Smite is missing the shockwave after the hammer hits the ground and the Hellfire spell is missing the flamestrike visuals, what am I doing wrong or what am I missing?
 

TKF

TKF

Level 19
Joined
Nov 29, 2006
Messages
1,266
Hey guys, I've got a question.

If I want some of those spells in another map what am I supposed to copy (triggers)?

Thanks.

Edit:
I think I'm missing something since the spells are invisible whenever I try them in another map, for example, the Divine Smite is missing the shockwave after the hammer hits the ground and the Hellfire spell is missing the flamestrike visuals, what am I doing wrong or what am I missing?
You must check the dummies, the buffs, everything about a spell

Simplest thing is to copy the entire trigger folder, then check the spells, dummy units and buffs.
 

TKF

TKF

Level 19
Joined
Nov 29, 2006
Messages
1,266
TriggerHappy said:
If you update this one more time without actually changing anything I asked, I'm going to reject it permanently.

What's not MUI with the spells? All heroes can can the same spell simultaneously. Which of the spells isn't? Does it has to be that 2 units from same team has to be able to cast the spells simultaneously? Not enough with MPI?

And also I cannot use hashtables cuz it doesn't exist in the newgen editor. I don't know how to use them either.


I'll wait with using wc3, until sc2 beta is down.... in a week. Please don't reject it yet.
 
Top