[GUI] Meteor v1.00

  • Like
Reactions: Cihparg
Meteor v1.00
by Amigurumi

Description
The hero calls down a meteor, which takes x seconds to call. Deals y/y/y damage with an AOE of z.
Levels
Level 1 - Deals 80 damage, 150 AOE and have a delay of 3.
Level 2 - Deals 160 damage, 150 AOE and have a delay of 3.
Level 3 - Deals 240 damage, 150 AOE and have a delay of 3.
A simple spell, but could be useful. The idea is from diablo 2, from the meteor spell
which the ghoul lords, or the mage can cast.

This spell is MUI/MPI.

Give credits if you use this spell in your map.

v1.00
uploaded the spell


Keywords:
Amigurumi, meteor, AOE, fire, delay, diablo, 2, big
Contents

Spell Template (Map)

Reviews
21:18, 22nd Sep 2009 Deuterium: 1. Again, this is useless: Set M_Index[3] = 1 2. Timer runs at a very low time gap: Time - Every 0.01 seconds of game time Don't use such a low value. Since it's only for counting, use a value ranging...

Moderator

M

Moderator

21:18, 22nd Sep 2009
Deuterium:


1. Again, this is useless:
  • Set M_Index[3] = 1

2. Timer runs at a very low time gap:
  • Time - Every 0.01 seconds of game time
Don't use such a low value. Since it's only for counting, use a value ranging between 0.03 and 0.05 seconds. A 0.02 to 0.04 second delay won't be noticeable and won't do any harm, yet increase efficiency by 3 to 5 times.


3. Another minor issue:
  • Actions
    • -------- Spell --------
    • Set M_Index[3] = 1
    • For each (Integer M_Index[3]) from 1 to M_Index[2], do (Actions)
      • Loop - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • M_Delay[M_Index[3]] Equal to 0.00
            • M_Boolean[M_Index[3]] Equal to True
          • Then - Actions
            • -------- The delay must be 0. --------
            • Set M_Boolean[M_Index[3]] = False
            • -------- Removes the fire circle --------
            • Special Effect - Destroy M_SFX[M_Index[3]]
            • -------- Creates the meteor. --------
            • Special Effect - Create a special effect at M_Point[M_Index[3]] using Units\Demon\Infernal\InfernalBirth.mdl
            • Special Effect - Destroy (Last created special effect)
            • -------- The damage. --------
            • -------- Radius, damage and speed can be changed in the setup trigger. --------
            • Unit - Cause M_Caster[M_Index[3]] to damage circular area after M_Speed[M_Index[3]] seconds of radius M_Radius[M_Index[3]] at M_Point[M_Index[3]], dealing M_Damage[M_Index[3]] damage of attack type Spells and damage type Normal
            • Custom script: call RemoveLocation(udg_M_Point[udg_M_Index[3]])
            • Set M_Index[1] = (M_Index[1] - 1)
          • Else - Actions
            • Set M_Delay[M_Index[3]] = (M_Delay[M_Index[3]] - 0.01)
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • M_Index[1] Equal to 0
      • Then - Actions
        • Set M_Index[2] = 0
        • Trigger - Turn off (This trigger)
      • Else - Actions
    • -------- End Spell --------
You could check for indexing recycling inside the condition for running the actions. It won't be much of a huge deal, but then the computer won't have to check for that condition unless that one time at the end of each instance:
  • Actions
    • -------- Spell --------
    • Set M_Index[3] = 1
    • For each (Integer M_Index[3]) from 1 to M_Index[2], do (Actions)
      • Loop - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • M_Delay[M_Index[3]] Equal to 0.00
            • M_Boolean[M_Index[3]] Equal to True
          • Then - Actions
            • -------- The delay must be 0. --------
            • Set M_Boolean[M_Index[3]] = False
            • -------- Removes the fire circle --------
            • Special Effect - Destroy M_SFX[M_Index[3]]
            • -------- Creates the meteor. --------
            • Special Effect - Create a special effect at M_Point[M_Index[3]] using Units\Demon\Infernal\InfernalBirth.mdl
            • Special Effect - Destroy (Last created special effect)
            • -------- The damage. --------
            • -------- Radius, damage and speed can be changed in the setup trigger. --------
            • Unit - Cause M_Caster[M_Index[3]] to damage circular area after M_Speed[M_Index[3]] seconds of radius M_Radius[M_Index[3]] at M_Point[M_Index[3]], dealing M_Damage[M_Index[3]] damage of attack type Spells and damage type Normal
            • Custom script: call RemoveLocation(udg_M_Point[udg_M_Index[3]])
            • Set M_Index[1] = (M_Index[1] - 1)
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • M_Index[1] Equal to 0
              • Then - Actions
                • Set M_Index[2] = 0
                • Trigger - Turn off (This trigger)
              • Else - Actions
          • Else - Actions
            • Set M_Delay[M_Index[3]] = (M_Delay[M_Index[3]] - 0.01)

4. Instead of the areal damage which damages everyone without any filtering:
  • Unit - Cause M_Caster[M_Index[3]] to damage circular area after M_Speed[M_Index[3]] seconds of radius M_Radius[M_Index[3]] at M_Point[M_Index[3]], dealing M_Damage[M_Index[3]] damage of attack type Spells and damage type Normal
Use a group to which you add units with filtering (maybe the user wants to filter out magic immune units or structures), and damage every unit in the group.


5. Add a boolean user adjustable global which allows the user to pick whether he wants the spell to damage only enemies or allies and self also.



No real problems here, only things worth mentioning. Spell functions and works well, although I must say that idea is simple and not original. However, I'd advice this to anyone searching for such a spell.
 
Level 17
Joined
Mar 17, 2009
Messages
1,350
The 0.01 isn't much of a problem, since it only countdowns... but why keep countdowning every 0.01 when you could countdown every 1 second (maybe you've set it to such a low value in case the user adjusts the value, I understand this), or even just fire a 3 second countdown timer which runs once, and throw the meteor when it expires (this seems the best thing to do)?

You know how to use timers right?

And umm, one thing I don't like:
  • Unit - Cause M_Caster[M_Index[3]] to damage circular area after M_Speed[M_Index[3]] seconds of radius M_Radius[M_Index[3]] at M_Point[M_Index[3]], dealing M_Damage[M_Index[3]] damage of attack type Spells and damage type Normal
I've heard a lot of things about areal damage from advanced scripters, and it's not a good thing to use. So instead, use a dummy unit and a group for units in range. Then loop through the picked units creating dummies and damaging units.

Also, make your trigger more adjustable by using string variables for SFX ;)

Although lacks creativity, good job!
 
well, I try it with a timer.

Deuterium said:
I've heard a lot of things about areal damage from advanced scripters, and it's not a good thing to use. So instead, use a dummy unit and a group for units in range. Then loop through the picked units creating dummies and damaging units.

why creating dummy units, if I also could do this:
  • Unit - Cause M_Caster[M_Index[3]] to damage unit ...blablabla
Deuterium said:
Also, make your trigger more adjustable by using string variables for SFX ;)
hmm, if you think so. I can do this.

Deuterium said:
Although lacks creativity, good job!
lol. thx :p
 
this action does not interrupt the current orders of the unit. It just deals damage, (same if you do 'Set life of Unit to (Life of Unit - 10)) only that he gains exp. That's my experience from using this :p

//edit: but I'm not sure how to implant a timer... maybe you could give me some suggestions? (worked only 2-3 with timers, and not in spells...) (pm?)
 
Level 9
Joined
Aug 2, 2008
Messages
219
Well I don't know how ordering the caster to damage units would affect his current orders, so I tend to create units to stay on the safe side. You can ask someone who might know :p

why not just use a group loop and then do call UnitDamageTarget(caster,target,damagae,etc...) (sorry i don´t know the GUI equivalent). hope this is helpful
 
why not just use a group loop and then do call UnitDamageTarget(caster,target,damagae,etc...) (sorry i don´t know the GUI equivalent). hope this is helpful

then it would ugly: the units will get damage, but the meteor is still in the sky...

Deuterium said:
ummm well on second thought, I'm afraid that it might ruin MUI'ness.. so stick to this method. ;)
hmm okay, thx
 
Level 9
Joined
Nov 25, 2008
Messages
194
Well I dunno, how MUI-ness works with timers in jass, but I'm almost sure, that there is no possibility to make them MUI with GUI. Now checking the actual spell ;)

Nice decent triggering, not too long, basically just a simple MUI-wait. Personally, I don't like the damage circular area.
Reason: Just look at the blizzard-skill inferno: There's also a meteor, but for balancing reasons, it just targets enemies, but just a thing of taste.
About you prob, that it would be instant, you could just add a second if/then/else checking if the duration is under the delay but above the speed.
Ok quite complicated, if you have a question, feel free to ask, I'll add triggers then.

Finally I don't like the tome SFX, but easily changeable, so I just wanna mention.

But nice spell idea, but I guess if I'd use it, I'd completely delete the SFX, because every enemy can easily dodge.

Overall good job 3.75=4
 
Level 17
Joined
Mar 17, 2009
Messages
1,350
off-topic @ Roflcoptor:
Well I'd think of a way of how to use timers while keeping stuff MUI (I guess it's just basically like the indexing for periodic events with a little tweak, but I've got to test that before), but in Jass mostly timers are used and things would still be MUI ;)
 
Level 9
Joined
Aug 2, 2008
Messages
219
[offtopic]
Roflcoptor i don´t know if you know how pass local data between functions in jass but triggers in GUI are compareable to functions in jass. As far as i know when making a GUI spell MUI all variables have to be arrays, so you can instance the spell. So you just need to attatch the index to the timer and then activate the trigger. That means attatch the instance key to the timer and then start the timer, when it expires you get the attatched instance key an go on with the spell.
 
Level 17
Joined
Mar 17, 2009
Messages
1,350

Deuterium's Brief Review:


1. Again, this is useless:
  • Set M_Index[3] = 1

2. Timer runs at a very low time gap:
  • Time - Every 0.01 seconds of game time
Don't use such a low value. Since it's only for counting, use a value ranging between 0.03 and 0.05 seconds. A 0.02 to 0.04 second delay won't be noticeable and won't do any harm, yet increase efficiency by 3 to 5 times.


3. Another minor issue:
  • Actions
    • -------- Spell --------
    • Set M_Index[3] = 1
    • For each (Integer M_Index[3]) from 1 to M_Index[2], do (Actions)
      • Loop - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • M_Delay[M_Index[3]] Equal to 0.00
            • M_Boolean[M_Index[3]] Equal to True
          • Then - Actions
            • -------- The delay must be 0. --------
            • Set M_Boolean[M_Index[3]] = False
            • -------- Removes the fire circle --------
            • Special Effect - Destroy M_SFX[M_Index[3]]
            • -------- Creates the meteor. --------
            • Special Effect - Create a special effect at M_Point[M_Index[3]] using Units\Demon\Infernal\InfernalBirth.mdl
            • Special Effect - Destroy (Last created special effect)
            • -------- The damage. --------
            • -------- Radius, damage and speed can be changed in the setup trigger. --------
            • Unit - Cause M_Caster[M_Index[3]] to damage circular area after M_Speed[M_Index[3]] seconds of radius M_Radius[M_Index[3]] at M_Point[M_Index[3]], dealing M_Damage[M_Index[3]] damage of attack type Spells and damage type Normal
            • Custom script: call RemoveLocation(udg_M_Point[udg_M_Index[3]])
            • Set M_Index[1] = (M_Index[1] - 1)
          • Else - Actions
            • Set M_Delay[M_Index[3]] = (M_Delay[M_Index[3]] - 0.01)
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • M_Index[1] Equal to 0
      • Then - Actions
        • Set M_Index[2] = 0
        • Trigger - Turn off (This trigger)
      • Else - Actions
    • -------- End Spell --------
You could check for indexing recycling inside the condition for running the actions. It won't be much of a huge deal, but then the computer won't have to check for that condition unless that one time at the end of each instance:
  • Actions
    • -------- Spell --------
    • Set M_Index[3] = 1
    • For each (Integer M_Index[3]) from 1 to M_Index[2], do (Actions)
      • Loop - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • M_Delay[M_Index[3]] Equal to 0.00
            • M_Boolean[M_Index[3]] Equal to True
          • Then - Actions
            • -------- The delay must be 0. --------
            • Set M_Boolean[M_Index[3]] = False
            • -------- Removes the fire circle --------
            • Special Effect - Destroy M_SFX[M_Index[3]]
            • -------- Creates the meteor. --------
            • Special Effect - Create a special effect at M_Point[M_Index[3]] using Units\Demon\Infernal\InfernalBirth.mdl
            • Special Effect - Destroy (Last created special effect)
            • -------- The damage. --------
            • -------- Radius, damage and speed can be changed in the setup trigger. --------
            • Unit - Cause M_Caster[M_Index[3]] to damage circular area after M_Speed[M_Index[3]] seconds of radius M_Radius[M_Index[3]] at M_Point[M_Index[3]], dealing M_Damage[M_Index[3]] damage of attack type Spells and damage type Normal
            • Custom script: call RemoveLocation(udg_M_Point[udg_M_Index[3]])
            • Set M_Index[1] = (M_Index[1] - 1)
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • M_Index[1] Equal to 0
              • Then - Actions
                • Set M_Index[2] = 0
                • Trigger - Turn off (This trigger)
              • Else - Actions
          • Else - Actions
            • Set M_Delay[M_Index[3]] = (M_Delay[M_Index[3]] - 0.01)

4. Instead of the areal damage which damages everyone without any filtering:
  • Unit - Cause M_Caster[M_Index[3]] to damage circular area after M_Speed[M_Index[3]] seconds of radius M_Radius[M_Index[3]] at M_Point[M_Index[3]], dealing M_Damage[M_Index[3]] damage of attack type Spells and damage type Normal
Use a group to which you add units with filtering (maybe the user wants to filter out magic immune units or structures), and damage every unit in the group.


5. Add a boolean user adjustable global which allows the user to pick whether he wants the spell to damage only enemies or allies and self also.



No real problems here, only things worth mentioning. Spell functions and works well, although I must say that idea is simple and not original. However, I'd advice this to anyone searching for such a spell.
 
Level 2
Joined
Sep 9, 2009
Messages
20
I realy, realy, think it will be 10 times easier to just do the spell Inferno but editing it so that no Infernal is created. So I will give it a 3 of 5 (cause as I have explained before it is a lot of complications for nothing, but is kind of cool).
 
Top