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

Arctic Blast 1.0.0.5

  • Like
Reactions: Oljin

v1.0.0.0
Initial Releases

v1.0.0.1
Use Unit Indexing Instead of Custom Value.
Added mostly Spell's Configuration.

v1.0.0.2
Filters are now much more readable.
Changed periodic event from 0.02 to 0.03.
Added some needed Variables.
Fixed some minor bugs.

v1.0.0.3
Fixed De-Indexing

v1.0.0.4
Configuration is now more understandable.

v1.0.0.5
Added Import Instruction
Re-write Spell's Discription
New Icon for both Arctic Blast and its Buff.

Credits


Emits a freezing wave that deals damage to enemies and slows their movement for 4 seconds.

Level 1 - 100 Damage, 25% Slow. 600 AoE, 400 Speed.
Level 2 - 200 Damage, 50% Slow. 700 AoE, 450 Speed.
Level 3 - 300 Damage, 75% Slow. 800 AoE, 500 Speed.
Level 4 - 400 Damage, 100% Slow. 900 AoE, 550 Speed.


+The "No Need" folder is basically shows its name which means no need or no related to the spell in this map, same for the "Import Instruction" folder.

To Import:
+The "No Need" folder is basically shows its name which means no need or no related to the spell in this map, same for the "Import Instruction" folder.

To Import:
-Don't forget to check "Automatically create unknown variables while pasting trigger data" (File -> Preferences) and Tick on this line if you haven't.

-Simply copy the Dummy, Arctic Blast Dummy (Unit) and Arctic Blast, Arctic Blast Slow (Abillity) from the Object Edtior, then finally copy the "Arctic Blast" folder and then paste into your map and you're done :)

-Don't forget to give a credit to me if you have plan to use this spell in your map.

-Credit to Valve for the Ice Shards Icon

Arctic Blast by Stork.
Version: 1.0.0.5
Date: 18/07/2015


  • Arctic Blast Config
    • Events
      • Time - Elapsed game time is 0.00 seconds
    • Conditions
    • Actions
      • -------- The ID of Main Abillity, in this case: "Arctic Blast" --------
      • Set ArcticBlast = Arctic Blast
      • -------- The ID of Arctic Blast's Slow --------
      • Set ArcticBlastSlow = Arctic Blast Slow
      • -------- The Effect upon being damaged by Arctic Blast --------
      • Set ArcticBlastDamageEffect = Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl
      • -------- The Effect Attachment --------
      • Set ArcticBlastDamageAttach = origin
      • -------- Arctic Blast's Attack Type --------
      • Set ArcticBlastAttackType = Spells
      • -------- Arctic Blast's Damage Type --------
      • Set ArcticBlastDamageType = Universal
      • -------- The ID of Visual Dummy, which means "spreading out effect" --------
      • Set ArcticBlastVisualDummy = Arctic Blast Dummy
      • -------- The Amount of "Visual Dummy" will be created upon casting Arctic Blast --------
      • Set ArcticBlastEffectAmount[1] = 9
      • Set ArcticBlastEffectAmount[2] = 18
      • Set ArcticBlastEffectAmount[3] = 27
      • Set ArcticBlastEffectAmount[4] = 36
      • -------- The ID of Caster Dummy --------
      • Set ArcticBlastDummy = Dummy
      • -------- Arctic Blast's Damage --------
      • Set ArcticBlastDamage[1] = 100.00
      • Set ArcticBlastDamage[2] = 200.00
      • Set ArcticBlastDamage[3] = 300.00
      • Set ArcticBlastDamage[4] = 400.00
      • -------- Arctic Blast's Speed --------
      • Set ArcticBlastSpeed[1] = 400.00
      • Set ArcticBlastSpeed[2] = 450.00
      • Set ArcticBlastSpeed[3] = 500.00
      • Set ArcticBlastSpeed[4] = 550.00
      • -------- Arctic Blast's Maximum AoE --------
      • Set ArcticBlastMaxAoE[1] = 600.00
      • Set ArcticBlastMaxAoE[2] = 700.00
      • Set ArcticBlastMaxAoE[3] = 800.00
      • Set ArcticBlastMaxAoE[4] = 900.00
      • -------- Arctic Blast Damage Radius --------
      • Set ArcticBlastDamageRadius[1] = 100.00
      • Set ArcticBlastDamageRadius[2] = 125.00
      • Set ArcticBlastDamageRadius[3] = 150.00
      • Set ArcticBlastDamageRadius[4] = 175.00
  • Arctic Blast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to ArcticBlast
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ArcticBlastIndex Equal to 0
        • Then - Actions
          • Trigger - Turn on Arctic Blast Expand <gen>
        • Else - Actions
      • Set ArcticBlastIndex = (ArcticBlastIndex + 1)
      • Custom script: if udg_ArcticBlastDamagedGroup[udg_ArcticBlastIndex] == null then
      • Custom script: set udg_ArcticBlastDamagedGroup[udg_ArcticBlastIndex] = CreateGroup()
      • Custom script: endif
      • Custom script: if udg_ArcticBlastDummyGroup[udg_ArcticBlastIndex] == null then
      • Custom script: set udg_ArcticBlastDummyGroup[udg_ArcticBlastIndex] = CreateGroup()
      • Custom script: endif
      • Set ArcticBlastCaster[ArcticBlastIndex] = (Triggering unit)
      • Set ArcticBlastLevel[ArcticBlastIndex] = (Level of ArcticBlast for ArcticBlastCaster[ArcticBlastIndex])
      • Set ArcticBlastEffectAmount[ArcticBlastIndex] = ArcticBlastEffectAmount[ArcticBlastLevel[ArcticBlastIndex]]
      • Set ArcticBlastMaxAoE[ArcticBlastIndex] = ArcticBlastMaxAoE[ArcticBlastLevel[ArcticBlastIndex]]
      • Set ArcticBlastDamage[ArcticBlastIndex] = ArcticBlastDamage[ArcticBlastLevel[ArcticBlastIndex]]
      • Set ArcticBlastSpeed[ArcticBlastIndex] = ArcticBlastSpeed[ArcticBlastLevel[ArcticBlastIndex]]
      • Set ArcticBlastDamageRadius[ArcticBlastIndex] = ArcticBlastDamageRadius[ArcticBlastLevel[ArcticBlastIndex]]
      • Set ArcticBlastSpreadOutSpeed[ArcticBlastIndex] = (ArcticBlastSpeed[ArcticBlastLevel[ArcticBlastIndex]] x 0.03)
      • Set ArcticBlastTriggerPlayer[ArcticBlastIndex] = (Owner of ArcticBlastCaster[ArcticBlastIndex])
      • Set ArcticBlastDistance[ArcticBlastIndex] = 0.00
      • Set ArcticBlastPoint = (Position of ArcticBlastCaster[ArcticBlastIndex])
      • Set ArcticBlastReal = 0.00
      • Unit - Create 1 ArcticBlastDummy for ArcticBlastTriggerPlayer[ArcticBlastIndex] at ArcticBlastPoint facing ArcticBlastReal degrees
      • Set ArcticBlastDummySlowUnit[ArcticBlastIndex] = (Last created unit)
      • Unit - Add ArcticBlastSlow to ArcticBlastDummySlowUnit[ArcticBlastIndex]
      • Unit - Set level of ArcticBlastSlow for ArcticBlastDummySlowUnit[ArcticBlastIndex] to ArcticBlastLevel[ArcticBlastIndex]
      • For each (Integer ArcticBlastInteger) from 1 to ArcticBlastEffectAmount[ArcticBlastIndex], do (Actions)
        • Loop - Actions
          • Set ArcticBlastReal = (ArcticBlastReal + (360.00 / (Real(ArcticBlastEffectAmount[ArcticBlastIndex]))))
          • Set ArcticBlastOffset = (ArcticBlastPoint offset by ArcticBlastDistance[ArcticBlastIndex] towards ArcticBlastReal degrees)
          • Unit - Create 1 ArcticBlastVisualDummy for ArcticBlastTriggerPlayer[ArcticBlastIndex] at ArcticBlastOffset facing ArcticBlastReal degrees
          • Unit Group - Add (Last created unit) to ArcticBlastDummyGroup[ArcticBlastIndex]
          • Custom script: call RemoveLocation(udg_ArcticBlastOffset)
      • Custom script: call RemoveLocation(udg_ArcticBlastPoint)
  • Arctic Blast Expand
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer ArcticBlastLoopIndex) from 1 to ArcticBlastIndex, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ArcticBlastDistance[ArcticBlastLoopIndex] Greater than or equal to ArcticBlastMaxDistance[ArcticBlastLoopIndex]
            • Then - Actions
              • Unit Group - Pick every unit in ArcticBlastDummyGroup[ArcticBlastLoopIndex] and do (Actions)
                • Loop - Actions
                  • Unit - Kill (Picked unit)
              • -------- De-Index --------
              • -------- Removing Leaks --------
              • Unit - Remove ArcticBlastDummySlowUnit[ArcticBlastLoopIndex] from the game
              • Custom script: call DestroyGroup(udg_ArcticBlastDummyGroup[udg_ArcticBlastLoopIndex])
              • Custom script: call DestroyGroup(udg_ArcticBlastDamagedGroup[udg_ArcticBlastLoopIndex])
              • Set ArcticBlastCaster[ArcticBlastLoopIndex] = ArcticBlastCaster[ArcticBlastIndex]
              • Set ArcticBlastTriggerPlayer[ArcticBlastLoopIndex] = ArcticBlastTriggerPlayer[ArcticBlastIndex]
              • Set ArcticBlastLevel[ArcticBlastLoopIndex] = ArcticBlastLevel[ArcticBlastIndex]
              • Set ArcticBlastDummySlowUnit[ArcticBlastLoopIndex] = ArcticBlastDummySlowUnit[ArcticBlastIndex]
              • Set ArcticBlastDistance[ArcticBlastLoopIndex] = ArcticBlastDistance[ArcticBlastIndex]
              • Set ArcticBlastMaxDistance[ArcticBlastLoopIndex] = ArcticBlastMaxDistance[ArcticBlastIndex]
              • Set ArcticBlastDamage[ArcticBlastLoopIndex] = ArcticBlastDamage[ArcticBlastIndex]
              • Set ArcticBlastSpeed[ArcticBlastLoopIndex] = ArcticBlastSpeed[ArcticBlastIndex]
              • Set ArcticBlastRadius[ArcticBlastLoopIndex] = ArcticBlastRadius[ArcticBlastIndex]
              • Set ArcticBlastEffectAmount[ArcticBlastLoopIndex] = ArcticBlastEffectAmount[ArcticBlastIndex]
              • Set ArcticBlastSpreadOutSpeed[ArcticBlastLoopIndex] = ArcticBlastSpreadOutSpeed[ArcticBlastIndex]
              • Set ArcticBlastDummyGroup[ArcticBlastLoopIndex] = ArcticBlastDummyGroup[ArcticBlastIndex]
              • Set ArcticBlastDamagedGroup[ArcticBlastLoopIndex] = ArcticBlastDamagedGroup[ArcticBlastIndex]
              • Custom script: set udg_ArcticBlastDummyGroup[udg_ArcticBlastIndex] = null
              • Custom script: set udg_ArcticBlastDamagedGroup[udg_ArcticBlastIndex] = null
              • Set ArcticBlastLoopIndex = (ArcticBlastLoopIndex - 1)
              • Set ArcticBlastIndex = (ArcticBlastIndex - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ArcticBlastIndex Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
            • Else - Actions
              • Set ArcticBlastDistance[ArcticBlastLoopIndex] = (ArcticBlastDistance[ArcticBlastLoopIndex] + ArcticBlastSpreadOutSpeed[ArcticBlastLoopIndex])
              • Set ArcticBlastPoint = (Position of ArcticBlastCaster[ArcticBlastLoopIndex])
              • Unit Group - Pick every unit in ArcticBlastDummyGroup[ArcticBlastLoopIndex] and do (Actions)
                • Loop - Actions
                  • Set ArcticBlastVisualDummyUnit = (Picked unit)
                  • Set ArcticBlastReal = (Facing of ArcticBlastVisualDummyUnit)
                  • Set ArcticBlastOffset = (ArcticBlastPoint offset by ArcticBlastDistance[ArcticBlastLoopIndex] towards ArcticBlastReal degrees)
                  • Unit - Move ArcticBlastVisualDummyUnit instantly to ArcticBlastOffset
                  • Set ArcticBlastGroup = (Units within ArcticBlastRadius[ArcticBlastLoopIndex] of ArcticBlastOffset)
                  • Unit Group - Pick every unit in ArcticBlastGroup and do (Actions)
                    • Loop - Actions
                      • Set ArcticBlastDamagedUnit = (Picked unit)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (ArcticBlastDamagedUnit is A structure) Equal to False
                          • (ArcticBlastDamagedUnit is Magic Immune) Equal to False
                          • (ArcticBlastDamagedUnit is alive) Equal to True
                          • (ArcticBlastDamagedUnit belongs to an enemy of ArcticBlastTriggerPlayer[ArcticBlastLoopIndex]) Equal to True
                          • (ArcticBlastDamagedUnit is in ArcticBlastDamagedGroup[ArcticBlastLoopIndex]) Equal to False
                        • Then - Actions
                          • -------- Since the picked is only damaged for 1 time in a loop, so its added to a unit group --------
                          • -------- Damaging and Slow --------
                          • Unit Group - Add ArcticBlastDamagedUnit to ArcticBlastDamagedGroup[ArcticBlastLoopIndex]
                          • Unit - Cause ArcticBlastCaster[ArcticBlastLoopIndex] to damage ArcticBlastDamagedUnit, dealing ArcticBlastDamage[ArcticBlastLoopIndex] damage of attack type ArcticBlastAttackType and damage type ArcticBlastDamageType
                          • Unit - Order ArcticBlastDummySlowUnit[ArcticBlastLoopIndex] to Human Sorceress - Slow ArcticBlastDamagedUnit
                          • Special Effect - Create a special effect attached to the origin of ArcticBlastDamagedUnit using ArcticBlastDamageEffect
                          • Special Effect - Destroy (Last created special effect)
                        • Else - Actions
                  • Custom script: call DestroyGroup(udg_ArcticBlastGroup)
                  • Custom script: call RemoveLocation(udg_ArcticBlastOffset)
              • Custom script: call RemoveLocation(udg_ArcticBlastPoint)
Keywords:
Shiva's Guard, Dota, Arctic Blast, Frost Blast
Contents

Arctic Blast v1.0.0.5 (Map)

Reviews
Submission: Arctic Blast 1.0.0.5 Date: 20.07.2015 Status: Approved Rating: 3/5 Review Link Moderator: IcemanBo
Level 19
Joined
Mar 18, 2012
Messages
1,716
Hi thanks for posting your ideas in the spell section. :)

Public resources in this form section follow a certain style of coding, guided by the spell submission rules.
I would like to point out a few things you have to and some which can be done different.

1. Your spell requires a configuration trigger, where you set up i.e level based data.
The config trigger should also cover information like the spell ability raw, aswell as dummy raw.
Store configurable data in variables, so users can quickly manipulate these value to his needs.
You also should use these variables in your code, instead of hardcoded values.
If you're not sure how-to-do a config trigger, check out already approved GUI resources.

2 Your instancing should be be done via dynamic indexing,
there are a few different allocation possibilities ( various linked list , ... )
However dynamic indexing remains most convinient for GUI spells.
For non public spells, you may stick to your style, for public releases not.

3. By our rules the manipulation CustumValue of a unit is strictly reserved to UnitIndexer systems.

4. The total amount of nova shards should be configurable for users. You have to
calculate the angle offset to each other ( 360/amount ).

5. You agree that this location is useless.
  • Set ArcticBlastPoint = (Position of (Picked unit))
  • Unit - Kill (Picked unit)
  • Custom script: call RemoveLocation(udg_ArcticBlastPoint)

6. Do not use harcoded values in your code ( effects, damage, ... )
Everything should be configurable and stored in variables in your config trigger.
Then use these variables in your code.

Currently your spell has the status Need Fix.
 
Level 5
Joined
Jun 28, 2010
Messages
110
Hi thanks for posting your ideas in the spell section. :)

Public resources in this form section follow a certain style of coding, guided by the spell submission rules.
I would like to point out a few things you have to and some which can be done different.

1. Your spell requires a configuration trigger, where you set up i.e level based data.
The config trigger should also cover information like the spell ability raw, aswell as dummy raw.
Store configurable data in variables, so users can quickly manipulate these value to his needs.
You also should use these variables in your code, instead of hardcoded values.
If you're not sure how-to-do a config trigger, check out already approved GUI resources.

2 Your instancing should be be done via dynamic indexing,
there are a few different allocation possibilities ( various linked list , ... )
However dynamic indexing remains most convinient for GUI spells.
For non public spells, you may stick to your style, for public releases not.

3. By our rules the manipulation CustumValue of a unit is strictly reserved to UnitIndexer systems.

4. The total amount of nova shards should be configurable for users. You have to
calculate the angle offset to each other ( 360/amount ).

5. You agree that this location is useless.
  • Set ArcticBlastPoint = (Position of (Picked unit))
  • Unit - Kill (Picked unit)
  • Custom script: call RemoveLocation(udg_ArcticBlastPoint)

6. Do not use harcoded values in your code ( effects, damage, ... )
Everything should be configurable and stored in variables in your config trigger.
Then use these variables in your code.

Currently your spell has the status Need Fix.

Thanks for your reply. I will change all the details that listed above as soon as possible :)
 
I saw your post in T&S forum so I guess you will make some changes.

Some more notes to http://www.hiveworkshop.com/forums/triggers-scripts-269/dynamic-indexing-usage-266859/#post2696778.

- Store responses into variables if used more often. (PickedUnit for example)
- Don't use IntegerA, but your own integer variable instead.
- " Set ArcticBlastGroup = (Units within 200.00 of ArcticBlastOffset matching ((((Matching"...
^This line is very unreadable. Pick all units in range, and then better filter them via If/Then/Else - multiple check.
- Some points by BPower still needs to be changed.
 
  • Don't use Integer A. Use your own custom integer instead.
  • Index TriggeringPlayer onCast.
    It is used over and over again onLoop.
  • Store responses like "CreatedUnit", "PickedUnit"
    into temp variables to reduce function calls.
  • Set ArcticBlastReal = 0.00 -> redundant operation onCast.
    • (Ability being cast) Equal to Arctic Blast
    If I'm not mistaken you use the data from object editor in here. (can't test it)
    If so, please change it to the ArticBlast spell variable.
  • PickedUnit needs to be stored into a variable onLoop.
  • When you assign your variable "Set ArcticBlastGroup" onLoop, filter the units
    with help if a multiple If/Then/Else statement.
    1. You can use a variable for unit.
    2. Much more readable.
  • You currently create for each PickedUnit a dummy to cast "slow".
    Try to reduce the amount of unit creation.
    Best scenario would be to use only one global dummy at all.
  • If a group will be destroyed, there no need to remove units from it before.
  • Could you explain, please why you should do this onDeindex:
    • Custom script: set udg_ArcticBlastDummyGroup[udg_ArcticBlastIndex] = CreateGroup()
    • Custom script: set udg_ArcticBlastDamagedGroup[udg_ArcticBlastIndex] = CreateGroup()
  • The periodic trigger should be initialy be turned off,
    and it is good you turn it on only if there is an instance.
    Now it also should be turned off again, when there is none anymore.
    It can and should be done onDeindex in your loop.
  • The recommended value for periodic event in GUI is 0.03.

Please read all points carefuly before updating.
The screenshot from spell looks good. :)
 
Level 5
Joined
Jun 28, 2010
Messages
110
If I'm not mistaken you use the data from object editor in here. (can't test it)
If so, please change it to the ArticBlast spell variable.

It was my mistake, i'll change it later on.

The periodic trigger should be initialy be turned off,
and it is good you turn it on only if there is an instance.
Now it also should be turned off again, when there is none anymore.
It can and should be done onDeindex in your loop.

Yes it should be turned off again, and i already done this :).
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • ArcticBlastIndex Equal to 0
    • Then - Actions
      • Trigger - Turn off (This trigger)
    • Else - Actions
PickedUnit needs to be stored into a variable onLoop.

I remembered i have done this but only in my old version i forgot to do it again when come to update the new version.

  • Custom script: set udg_ArcticBlastDummyGroup[udg_ArcticBlastIndex] = CreateGroup()
  • Custom script: set udg_ArcticBlastDamagedGroup[udg_ArcticBlastIndex] = CreateGroup()
Could you explain, please why you should do this onDeindex:

Because of these lines:
  • Custom script: call DestroyGroup(udg_ArcticBlastDummyGroup[udg_ArcticBlastLoopIndex])
  • Custom script: call DestroyGroup(udg_ArcticBlastDamagedGroup[udg_ArcticBlastLoopIndex])
I removed those 2 unit groups, if i don't create them again, it will mark as "null" and my spell stop working immidiatetly. Since visual dummies are stored in this unit group, and also the damaged unit stored in another one, it need to stay in there for the duration of the spell, otherwise they will be non-affected in this spell.

The recommended value for periodic event in GUI is 0.03.
I want a "smooth" visual effect so i set to 0.02, and its way easier to calculate numbers in there, its not approximately but its exactly equal. And more importantly, it doesnt cause any serious lag so i might get your permession to stick with this 0.02 periodic :)

Summary: Things are not quoted above mean that i agreed with you.
 
The LastIndex won't be used currently if you deIndex, I have problems to understand atm
what should cause a bug then when you don't re-create group[lastIndex].
It will be used again when you index again, but then you anyway will re-create it,
because you have a check "if group[index]== null] then CreateGroup()".

Will it be unsmooth with 0.03? Also when calculating you can use it will end up in "value*0.03".
So would not really change something.
Could you test it, it still should look all smooth?:)
 
Level 5
Joined
Jun 28, 2010
Messages
110
The LastIndex won't be used currently if you deIndex, I have problems to understand atm
what should cause a bug then when you don't re-create group[lastIndex].
It will be used again when you index again, but then you anyway will re-create it,
because you have a check "if group[index]== null] then CreateGroup()".

Will it be unsmooth with 0.03? Also when calculating you can use it will end up in "value*0.03".
So would not really change something.
Could you test it, it still should look all smooth?:)

"if group[index]== null] then CreateGroup()".
Yes of course i have to have that line. But somehow that line only being triggered on the first cast, after the first cast, it stop working and i can't figure out so i have to re-create new unit group

There are 2 issues:
*1: if i don't re-create the DummyGroup, its stop working after the first cast
*2: if i don't re-create the DamagedGroup, picked units will be damaged every loop after the first cast

0.03 works better than i thought, and i did change it to 0.03 already :)

btw
You currently create for each PickedUnit a dummy to cast "slow".
Try to reduce the amount of unit creation.
Best scenario would be to use only one global dummy at all.

I understand that reduce the amount of unit creation will avoid lagging. But i'm struggling with the "use only one", what does that mean? Does it mean i use only 1 dummy to slow all the damaged unit? how can i do that? how can i use only 1 dummy to slow all the damaged units at the same time?
 
I understand that reduce the amount of unit creation will avoid lagging. But i'm struggling with the "use only one", what does that mean? Does it mean i use only 1 dummy to slow all the damaged unit? how can i do that? how can i use only 1 dummy to slow all the damaged units at the same time?
Rheiko made a tutorial at Tutorial Section sometime ago for this, just check it.
 
Level 19
Joined
Mar 18, 2012
Messages
1,716
Just set ArcticBlastReal always to 0.
The if then else condition add unwanted overhead.
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • ArcticBlastReal Not equal to 0.00
    • Then - Actions
      • Set ArcticBlastReal = 0.00
    • Else - Actions
ArcticBlastEffect amount could be based on the ability level.

Within the dummy creation, you should replace OwnerOf(TriggeringUnit) with
the stored player handle in ArcticBlastTriggerPlayer.

Use RemoveUnit() for killing the dummy caster unit.

Your de-indexing is not done correctly. You overwrite existing group handles
by using the CreateGroup native. You have to set it from max index to current index
set group[index] = group[maxIndex]

offset in x/y is constant per loop and could be calculated once in your cast trigger.
 
Level 5
Joined
Jun 28, 2010
Messages
110
Your de-indexing is not done correctly. You overwrite existing group handles
by using the CreateGroup native. You have to set it from max index to current index
set group[index] = group[maxIndex]

I don't really understand what are you trying to tell me. i don't think my de-indexing is not done correctly, can you explain further?
And also i did set from max index to current index.

  • Set ArcticBlastDummyGroup[ArcticBlastLoopIndex] = ArcticBlastDummyGroup[ArcticBlastIndex]
  • Set ArcticBlastDamagedGroup[ArcticBlastLoopIndex] = ArcticBlastDamagedGroup[ArcticBlastIndex]
 
Last edited:
  • In config "radius" and "distance" might come in conflict of undestanding.
    The "radius" variable is meant for AoE damage (when it hits unit) and also should be called so.
  • Index the position of caster. Dummy's movement should not depend on the current position of caster.
    For example, if caster moves fast, it looks a bit weird, and if caster would teleport away,
    it would make no sense because then all dummies also would teleport with him.
  • Or don't make the periodic interval configurable, or also use the variable for event of your trigger.
    At the moment, it is configurable, but hardcoded in event as "0.03".

Group indexing looks good now. Spell is fine and seams to work good.

This can be approved soon.
 
Level 5
Joined
Jun 28, 2010
Messages
110
In config "radius" and "distance" might come in conflict of undestanding.
The "radius" variable is meant for AoE damage (when it hits unit) and also should be called so.

I will do it soon.

Index the position of caster. Dummy's movement should not depend on the current position of caster.
For example, if caster moves fast, it looks a bit weird, and if caster would teleport away,
it would make no sense because then all dummies also would teleport with him.

Basically, i make this based on Shiva's Guard from DotA which means the Blast will attach to the caster's position till the max distance reached!
Of course it doesnt cause any problems for me to change it but i want to maintain the idea from dota :D.
 
Level 13
Joined
Mar 29, 2012
Messages
530

QUICK REVIEW|Arctic Blast|1.0.0.4

Rating: 4/5

PROS
  • Trigger is coded well and neat.
  • Spell comes along with buff.
CONS
  • Laggy. With just 2 casts at the same time, my fps drop to almost 25.
SUGGESTIONS
  • To move the dummies, use this instead:
    • Custom script: call SetUnitX(udg_ArcticBlastVisualDummyUnit, GetLocationX(udg_ArcticBlastOffset))
    • Custom script: call SetUnitY(udg_ArcticBlastVisualDummyUnit, GetLocationY(udg_ArcticBlastOffset))
[/TD][/tr]
If you have any question about this review, PM or VM me
 
Submission:
Arctic Blast 1.0.0.5


Concept: 3/5

The caster circulary shoots projectiles that damage and slow enemies on touch.
The projectiles are relative to the position of the caster, and not independant.
It mimics "Shiva's Guard" from dota, and so the concept is used already.


Code: 3.5/5

The code is written in GUI.
The core is pretty simple, but it's executed well.

- One global dummy could be used for slowing affected units.


Visuals: 3/5

Visuals could be imporved a bit.
The used effect looks freezing, yes, but it more reminds of kind of splash/AoE damage.
The armor as icon is not very fitting in my opinion.
Icon is changed.


Conclusion: 3.2 -> 3/5

Approved

All looks okay
but add proper import instructions and spell description and I will approve it.
You can or post here or just contact me when done.
 
Last edited:
Level 5
Joined
Jun 28, 2010
Messages
110
Concept: 3/5

The caster circulary shoots projectiles that damage and slow enemies on touch.
The projectiles are relative to the position of the caster, and not independant.
It mimics "Shiva's Guard" from dota, and so the concept is used already.


Code: 3.5/5

The code is written in GUI.
The core is pretty simple, but it's executed well.

- One global dummy could be used for slowing affected units.


Visuals: 3/5

Visuals could be imporved a bit.
The used effect looks freezing, yes, but it more reminds of kind of splash/AoE damage.
The armor as icon is not very fitting in my opinion.


Conclusion: 3.2 -> 3/5

All looks okay
but add proper import instructions and spell description and I will approve it.
You can or post here or just contact me when done.

Updated 1.0.0.5 with all features you mentioned above, including new icon for spell.
 
Level 5
Joined
Jun 28, 2010
Messages
110
- Add proper spell description as mentioned.
- Give proper credits for used imports.
- Also mention needed object data in import instructions.
- You changed from 1dummy/cast to 1dummy/instance I think? One dummy for all instances that is never removed would also do the job.

Actually the icon comes from Dota 2, so crediting to Valve in my opinion is not necessary :p. But anyway i will still give a credit for Valve.

Hmm i don't think 1 global dummy that never got removed is good. Because sometimes you need to add more conditions (which i don't want to) to check, because once created, the owner of that dummy need to be changed constantly or the Spell that the dummy uses need to be able to cast on both ally and enemy, again i don't want it. Finally, i want to keep mine as simple as it can. Anw, thanks for your opinion

p/s: I updated mine too, but its still 1.0.0.5, which include things that you mentioned above
- Give proper credits for used imports.
- Also mention needed object data in import instructions.
 
Level 3
Joined
Aug 22, 2015
Messages
42
Great spell. Just question please.

I would like to change it to my liking please. I want to keep it as it is but instead of having 4 levels I want just 1 and decrease the damage from 400 to 200. When I changed those in the objects manager none of them applied and the animation changed too. How can I change those 2 settings?
Edit : also to make it structable, I changed targets allowed but no structures are being blasted.
 
Last edited:
Level 5
Joined
Jun 28, 2010
Messages
110
Great spell. Just question please.

I would like to change it to my liking please. I want to keep it as it is but instead of having 4 levels I want just 1 and decrease the damage from 400 to 200. When I changed those in the objects manager none of them applied and the animation changed too. How can I change those 2 settings?
Edit : also to make it structable, I changed targets allowed but no structures are being blasted.

Its all triggered, you need to read the Spell Configuration and other things in order to change some settings that you would like to.
 
Level 1
Joined
Aug 31, 2020
Messages
4
wait im confused with the last install instruction ''-Simply copy the Dummy, Arctic Blast Dummy (Unit) and Arctic Blast, Arctic Blast Slow (Abillity) from the Object Edtior, then finally copy the "Arctic Blast" folder and then paste into your map and you're done'' so i open the arctic blast map>trigger editor> then copy paste the Arctic Blash folder from my custom map>trigger editor? sorry im new to this site.
 
Level 39
Joined
Feb 27, 2007
Messages
4,989
You need to copy the object editor data before you copy over the trigger data. The triggers refer to the rawcodes (unit-type for units) of the various objects, so they must exist first when pasting the trigger otherwise it won't know what to put there. Likewise, if some objects depend on other objects (ex: a unit that has a spell in its spell list or an ability that has a buff) you must copy the dependency before the dependent object (for the same reason).
 
Level 1
Joined
Aug 31, 2020
Messages
4
You need to copy the object editor data before you copy over the trigger data. The triggers refer to the rawcodes (unit-type for units) of the various objects, so they must exist first when pasting the trigger otherwise it won't know what to put there. Likewise, if some objects depend on other objects (ex: a unit that has a spell in its spell list or an ability that has a buff) you must copy the dependency before the dependent object (for the same reason).
I already did the instruction from first to last from what i did is i open the (Arctic Blast Map\Object Editor Data\Units\Copy the 'Arctic Blast Dummy' and 'Dummy' and also (Arctic Blast Map\Object Editor\Abilities\Arctic Blast Slow and Arctic Blast) the last is to copy the ''Arctic Blast'' Folder which is in Trigger Editor from ''Arctic Blast Map'' then i copy and paste it to my map. I also import some texture img file's for the icon skill of Arctic Blast, Import Manager full path already did i just copy from Arctic Blast Map. Then when i try it on my map to see if its working the skill icon is fine the only problem is the animation effect is missing when casting it or maybe this custom spell is not working anymore since its too old. :sad:
 
Level 1
Joined
Aug 31, 2020
Messages
4
Did you check the Config trigger and make sure the variables are correct?
yes the config trigger is all fine and its the same like the arctic blast map config trigger i dont know what to do the animation effect is still bothering me anyway heres my map you can check if theres somthing i did wrong but im sure i did it correctly from import instruction.
 

Attachments

  • (12)IceCrown.w3x
    381.9 KB · Views: 0
Top