1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. Find your way through the deepest dungeon in the 18th Mini Mapping Contest Poll.
    Dismiss Notice
  3. A brave new world lies beyond the seven seas. Join the 34th Modeling Contest today!
    Dismiss Notice
  4. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
Hive 3 Remoosed BETA - NOW LIVE. Go check it out at BETA Hive Workshop! Post your feedback in this new forum BETA Feedback.
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Hoist of the Seven Conundrums v1.0

Submitted by Pharaoh_
This bundle is marked as approved. It works and satisfies the submission rules.
Hoist of the Seven Conundrums

Calls forth the mysticals powers of the Seven Conundrums, the unsolved mysteries of the universe, to create a column of positive energy, that will convert any soul into a healing power.

Creates a column of pure magic; every unit killed by the caster will be slowly dragged towards the column and will be converted into souls, that will heal nearby allies for 20 health and 10 mana each.

Level 1 - Lasts 20 seconds.
Level 2 - Lasts 40 seconds.
Level 3 - Lasts 60 seconds.

This is a spell I just made; I really like it, but, since it's a bit complicated (many triggers and stuff), it's possible you found something weird, so, let me know.

If you use this spell, please give me credits for my work.

Triggers
  • HS1
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Hoist of the Seven Conundrums
    • Actions
      • -------- The first If/Then/Else will help us understand whether the spell has already been casted by this unit or not. --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ((Key dummyunit) is stored as a Handle of (Key (Triggering unit)) in HS_Hashtable) Equal to False
        • Then - Actions
          • Set HS_Points[1] = (Target point of ability being cast)
          • Unit - Create 1 Dummy (Hoist of the Seven Conundrums) for (Owner of (Triggering unit)) at HS_Points[1] facing Default building facing degrees
          • Set HS_MaxHeight = 620.00
          • Animation - Change (Last created unit)'s animation speed to 0.00% of its original speed
          • Animation - Change (Last created unit)'s size to (200.00%, 200.00%, 200.00%) of its original size
          • Animation - Change (Last created unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with 50.00% transparency
          • -------- We save the last created unit to the triggering and back forth, because we are going to use both of the values. --------
          • Hashtable - Save Handle Of(Last created unit) as (Key dummyunit) of (Key (Triggering unit)) in HS_Hashtable
          • Hashtable - Save Handle Of(Triggering unit) as (Key caster) of (Key (Last created unit)) in HS_Hashtable
          • -------- Defines the duration of the spell --------
          • Unit - Add a ((Real((Level of (Ability being cast) for (Triggering unit)))) x 20.00) second Generic expiration timer to (Last created unit)
          • Sound - Play DeathAndDecayLoop1 <gen> at 100.00% volume, attached to (Last created unit)
          • -------- We save the looping sound, so as to stop it, once the spell's duration is up. --------
          • Hashtable - Save Handle Of(Last played sound) as (Key sound) of (Key (Last created unit)) in HS_Hashtable
          • -------- We create the two locations, on which the dummy wisps (that create the actual rotating effect) will be spawned. --------
          • For each (Integer HS_TempLoop) from 1 to 2, do (Actions)
            • Loop - Actions
              • Set HS_Points[2] = (HS_Points[1] offset by 100.00 towards (360.00 / (Real(HS_TempLoop))) degrees)
              • -------- We save the X & Y of the locations in Hashtable, so that there are no leaks. --------
              • Hashtable - Save (X of HS_Points[2]) as (Key (x + (String(HS_TempLoop)))) of (Key (Last created unit)) in HS_Hashtable
              • Hashtable - Save (Y of HS_Points[2]) as (Key (y + (String(HS_TempLoop)))) of (Key (Last created unit)) in HS_Hashtable
              • Hashtable - Save HS_TempLoop as (Key int) of (Key (Last created unit)) in HS_Hashtable
              • Custom script: call RemoveLocation (udg_HS_Points[2])
          • -------- We create the ubersplat on the ground, an additional effect of the spell. --------
          • Ubersplat - Create ubersplat at HS_Points[1] of type Undead Uber Splat with color (80.00%, 0.00%, 80.00%) and 0.00% transparency (Enable paused state, Disable skipping birth time)
          • Ubersplat - Change (Last created ubersplat): Enable render always state
          • Hashtable - Save Handle Of(Last created ubersplat) as (Key splat) of (Key (Last created unit)) in HS_Hashtable
          • -------- The main dummy unit (of which we will obtain the rotating effect) is added in a Unit Group variable. --------
          • Unit Group - Add (Last created unit) to HS_DummyGroup
          • -------- We attach two Unit Groups on the Triggering unit, for further use. --------
          • -------- HS_TrappedGroup will be hosting the dummy wisps for the rotation effect. --------
          • Hashtable - Save Handle OfHS_TrappedGroup as (Key deadcounter) of (Key (Triggering unit)) in HS_Hashtable
          • -------- HS_NewGroup will be hosting the dummy wisps, and kill them on time, once the spell effect ends. --------
          • Hashtable - Save Handle OfHS_NewGroup as (Key newgroup) of (Key (Last created unit)) in HS_Hashtable
          • -------- A special effect will be added on the main dummy and afterwards gets attached to the unit. --------
          • Special Effect - Create a special effect attached to the origin of (Last created unit) using Abilities\Spells\NightElf\Starfall\StarfallCaster.mdl
          • Hashtable - Save Handle Of(Last created special effect) as (Key mainsfx) of (Key (Last created unit)) in HS_Hashtable
          • Custom script: call RemoveLocation (udg_HS_Points[1])
          • -------- Turn on the HS2 <gen> for the creation of the dummy wisps. --------
          • Trigger - Turn on HS2 <gen>
        • Else - Actions
          • -------- In case the spell is already cast, a warning shall prevent a double cast of it. --------
          • Game - Display to (All players) the text: |c00ffcc00You have ...

  • HS2
    • Events
      • Time - Every 0.50 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (HS_DummyGroup is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
          • Unit Group - Pick every unit in HS_DummyGroup and do (Actions)
            • Loop - Actions
              • -------- We use additional loop for restoring the point values (X&Y) from the hashtable. --------
              • For each (Integer HS_Loops[1]) from 1 to (Load (Key int) of (Key (Picked unit)) from HS_Hashtable), do (Actions)
                • Loop - Actions
                  • Set HS_Points[3] = (Point((Load (Key (x + (String(HS_Loops[1])))) of (Key (Picked unit)) from HS_Hashtable), (Load (Key (y + (String(HS_Loops[1])))) of (Key (Picked unit)) from HS_Hashtable)))
                  • Set HS_Points[4] = (Position of (Picked unit))
                  • Unit - Create 1 Dummy (Hoist of the Seven Conundrums) for (Owner of (Picked unit)) at HS_Points[3] facing (360.00 / (Real(HS_Loops[1]))) degrees
                  • Hashtable - Save Handle Of(Picked unit) as (Key mainroad) of (Key (Last created unit)) in HS_Hashtable
                  • Hashtable - Save HS_Loops[1] as (Key int) of (Key (Last created unit)) in HS_Hashtable
                  • Special Effect - Create a special effect attached to the origin of (Last created unit) using units\nightelf\Wisp\Wisp.mdl
                  • Hashtable - Save Handle Of(Last created special effect) as (Key sfx) of (Key (Last created unit)) in HS_Hashtable
                  • Unit - Change color of (Last created unit) to HS_Colors[(Random integer number between 1 and 7)]
                  • Custom script: call RemoveLocation (udg_HS_Points[3])
                  • Custom script: call RemoveLocation (udg_HS_Points[4])
                  • -------- HS_ConunGroup is the rotation group. --------
                  • Unit Group - Add (Last created unit) to HS_ConunGroup
                  • -------- This group has been mentioned before; it will store the same Last created unit, so as to kill it afterwards and prevent its stay in the game. --------
                  • Unit Group - Add (Last created unit) to (Load (Key newgroup) of (Key (Picked unit)) in HS_Hashtable)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (HS3 <gen> is on) Equal to False
                    • Then - Actions
                      • -------- Turn on HS3 <gen> for the actual rotation effect to take place. --------
                      • Trigger - Turn on HS3 <gen>
                    • Else - Actions

  • HS3
    • Events
      • Time - Every 0.05 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (HS_ConunGroup is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
          • Unit Group - Pick every unit in HS_ConunGroup and do (Actions)
            • Loop - Actions
              • -------- HS_Offset is a real value, that relates to how fast the Picked unit will move. --------
              • Set HS_Offset = (Load (Key off) of (Key (Picked unit)) from HS_Hashtable)
              • Hashtable - Save (HS_Offset + 3.00) as (Key off) of (Key (Picked unit)) in HS_Hashtable
              • Set HS_Points[5] = (Position of (Picked unit))
              • Set HS_Points[6] = (Position of (Load (Key mainroad) of (Key (Picked unit)) in HS_Hashtable))
              • -------- The actual rotation --------
              • For each (Integer HS_Loops[2]) from 1 to (Load (Key int) of (Key (Picked unit)) from HS_Hashtable), do (Actions)
                • Loop - Actions
                  • Set HS_Points[7] = (HS_Points[6] offset by 100.00 towards ((Facing of (Picked unit)) + HS_Offset) degrees)
                  • Unit - Move (Picked unit) instantly to HS_Points[7]
                  • Custom script: call RemoveLocation (udg_HS_Points[7])
              • Custom script: call RemoveLocation (udg_HS_Points[5])
              • Custom script: call RemoveLocation (udg_HS_Points[6])
              • -------- The flying height change for the rotation effect --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Current flying height of (Picked unit)) Less than or equal to 620.00
                • Then - Actions
                  • -------- You can change the "3.00" to any number you want, it's how high the unit will get per .05 seconds. --------
                  • Animation - Change (Picked unit) flying height to ((Current flying height of (Picked unit)) + 3.00) at 0.00
                • Else - Actions
                  • Special Effect - Destroy (Load (Key sfx) of (Key (Picked unit)) in HS_Hashtable)
                  • -------- I prefer Generic Expiration timer than Kill unit, but you can use any of them. --------
                  • Unit - Add a 0.01 second Generic expiration timer to (Picked unit)
                  • Unit Group - Remove (Picked unit) from HS_ConunGroup
              • Custom script: call RemoveLocation (udg_HS_Points[4])

  • HS4
    • Events
      • Time - Every 0.05 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (HS_DummyGroup is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
          • Unit Group - Pick every unit in HS_DummyGroup and do (Actions)
            • Loop - Actions
              • Set HS_DummyUnit = (Picked unit)
              • Set HS_DummyUnitUnit = (Picked unit)
              • Set HS_Points[9] = (Position of (Picked unit))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (HS_DummyUnitUnit is alive) Equal to True
                • Then - Actions
                  • -------- The units that are killed by the caster of the spell will be slowly moved towards the Main dummy unit (the actual column you see in-game) --------
                  • Unit Group - Pick every unit in (Load (Key deadcounter) of (Key (Load (Key caster) of (Key HS_DummyUnit) in HS_Hashtable)) in HS_Hashtable) and do (Actions)
                    • Loop - Actions
                      • Set HS_Points[10] = (Position of (Picked unit))
                      • Set HS_Points[11] = (HS_Points[10] offset by 15.00 towards (Angle from HS_Points[10] to HS_Points[9]) degrees)
                      • Special Effect - Create a special effect at HS_Points[11] using Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Unit - Move (Picked unit) instantly to HS_Points[11], facing 270.00 degrees
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Distance between HS_Points[9] and HS_Points[10]) Less than or equal to 15.00
                        • Then - Actions
                          • Unit Group - Remove (Picked unit) from (Load (Key deadcounter) of (Key (Load (Key caster) of (Key HS_DummyUnit) in HS_Hashtable)) in HS_Hashtable)
                          • -------- We now add them into a new group, because they will be slowly dragged in the mid-air. --------
                          • Unit Group - Add (Picked unit) to HS_HeightGroup
                          • -------- We save an initial "0.00" value, which will be used by the Picked unit in the HS5 <gen> trigger and it has to do with its transparency --------
                          • Hashtable - Save 0.00 as (Key trans) of (Key (Picked unit)) in HS_Hashtable
                          • -------- Since the Picked unit will be flying in the HS5 <gen> trigger, it will get the Crow Form ability, that enables flying. --------
                          • Unit - Add Crow Form to (Picked unit)
                          • Unit - Remove Crow Form from (Picked unit)
                          • -------- HS5 <gen> is the trigger where the units, killed by the caster of this spell will slowly be dragged in the mid-air. --------
                          • Trigger - Turn on HS5 <gen>
                        • Else - Actions
                      • Custom script: call RemoveLocation (udg_HS_Points[10])
                      • Custom script: call RemoveLocation (udg_HS_Points[11])
                • Else - Actions
              • Custom script: call RemoveLocation (udg_HS_Points[9])

  • HS5
    • Events
      • Time - Every 0.08 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (HS_HeightGroup is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
          • Unit Group - Pick every unit in HS_HeightGroup and do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Current flying height of (Picked unit)) Less than or equal to 620.00
                • Then - Actions
                  • Set HS_Transparency = (Load (Key trans) of (Key (Picked unit)) from HS_Hashtable)
                  • Hashtable - Save (HS_Transparency + 2.00) as (Key trans) of (Key (Picked unit)) in HS_Hashtable
                  • Animation - Change (Picked unit) flying height to ((Current flying height of (Picked unit)) + 10.00) at 0.00
                  • Animation - Change (Picked unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with HS_Transparency% transparency
                • Else - Actions
                  • Unit - Add a 0.01 second Generic expiration timer to (Picked unit)

  • HS6
    • Events
      • Unit - A unit Dies
    • Conditions
    • Actions
      • -------- This is a death-trigger, as I call it. Every death-related events we need to calculate and consider are held in this trigger. --------
      • -------- The first one checks if the dying unit is in HeightGroup, which means if the dying unit is a unit killed by the caster of the spell --------
      • -------- It takes place, after the unit has been sent in the mid-air and has vanished. --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ((Triggering unit) is in HS_HeightGroup) Equal to True
        • Then - Actions
          • Set HS_Points[13] = (Position of (Triggering unit))
          • For each (Integer HS_Loops[3]) from 1 to 7, do (Actions)
            • Loop - Actions
              • Set HS_Points[14] = (HS_Points[13] offset by 180.00 towards ((Real(HS_Loops[3])) x 51.40) degrees)
              • Unit - Create 1 Dummy (Hoist of the Seven Conundrums) for (Owner of (Load (Key killer) of (Key (Triggering unit)) in HS_Hashtable)) at HS_Points[14] facing Default building facing degrees
              • Special Effect - Create a special effect attached to the origin of (Last created unit) using Abilities\Weapons\SpiritOfVengeanceMissile\SpiritOfVengeanceMissile.mdl
              • Hashtable - Save Handle Of(Last created special effect) as (Key healsfx) of (Key (Last created unit)) in HS_Hashtable
              • Animation - Change (Last created unit) flying height to 620.00 at 0.00
              • Animation - Change (Last created unit)'s size to (200.00%, 200.00%, 200.00%) of its original size
              • Unit Group - Add (Last created unit) to HS_HealGroup
              • Set HS_Points[15] = (HS_Points[13] offset by 700.00 towards ((Real(HS_Loops[3])) x 51.40) degrees)
              • Hashtable - Save (Distance between HS_Points[14] and HS_Points[15]) as (Key dist) of (Key (Last created unit)) in HS_Hashtable
              • Hashtable - Save (X of HS_Points[15]) as (Key (x + (String(HS_Loops[3])))) of (Key (Last created unit)) in HS_Hashtable
              • Hashtable - Save (Y of HS_Points[15]) as (Key (y + (String(HS_Loops[3])))) of (Key (Last created unit)) in HS_Hashtable
              • Hashtable - Save ((Load (Key dist) of (Key (Last created unit)) from HS_Hashtable) / (Real((Integer(2.50))))) as (Key newd) of (Key (Last created unit)) in HS_Hashtable
              • Hashtable - Save 0.00 as (Key par) of (Key (Last created unit)) in HS_Hashtable
              • Custom script: call RemoveLocation (udg_HS_Points[14])
              • Custom script: call RemoveLocation (udg_HS_Points[15])
          • Custom script: call RemoveLocation (udg_HS_Points[13])
          • Unit Group - Remove (Triggering unit) from HS_HeightGroup
          • Hashtable - Clear all child hashtables of child (Key (Triggering unit)) in HS_Hashtable
          • Unit - Remove (Triggering unit) from the game
          • Trigger - Turn on HS8 <gen>
        • Else - Actions
          • -------- If it's not a unit, killed by the caster of this spell, it checks whether it's a dummy-type unit --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Unit-type of (Triggering unit)) Equal to Dummy (Hoist of the Seven Conundrums)
            • Then - Actions
              • -------- It initially tries to check if it's the main dummy unit, the one that holds every effect of the spell. --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Key caster) is stored as a Handle of (Key (Triggering unit)) in HS_Hashtable) Equal to True
                • Then - Actions
                  • Set HS_Points[12] = (Position of (Triggering unit))
                  • Hashtable - Save Handle OfHS_DetectTimer as (Key dtimer) of (Key (Triggering unit)) in HS_Hashtable
                  • Countdown Timer - Start (Load (Key dtimer) of (Key (Triggering unit)) in HS_Hashtable) as a One-shot timer that will expire in 2.00 seconds
                  • Hashtable - Save Handle Of(Triggering unit) as (Key unit1) of (Key (Last started timer)) in HS_Hashtable
                  • Special Effect - Create a special effect at HS_Points[12] using Objects\Spawnmodels\Undead\UDeathSmall\UDeathSmall.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Ubersplat - Destroy (Load (Key splat) of (Key (Triggering unit)) in HS_Hashtable)
                  • Unit Group - Remove (Triggering unit) from HS_DummyGroup
                  • Sound - Stop (Load (Key sound) of (Key (Triggering unit)) in HS_Hashtable) Immediately
                  • Custom script: call RemoveLocation (udg_HS_Points[12])
                • Else - Actions
                  • -------- If it's not the Main dummy unit, it checks whether it's the final dummy that is destinated to heal the units nearby. --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ((Key healsfx) is stored as a Handle of (Key (Triggering unit)) in HS_Hashtable) Equal to True
                    • Then - Actions
                      • Special Effect - Destroy (Load (Key healsfx) of (Key (Triggering unit)) in HS_Hashtable)
                      • Set HS_Points[19] = (Position of (Triggering unit))
                      • Set HS_ActualHealGroup = (Units within 150.00 of HS_Points[19] matching (((((Matching unit) is A structure) Equal to False) and (((Matching unit) belongs to an ally of (Owner of (Triggering unit))) Equal to True)) and (((Matching unit) is alive) Equal to True)))
                      • Unit Group - Pick every unit in HS_ActualHealGroup and do (Actions)
                        • Loop - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Life of (Picked unit)) Not equal to (Max life of (Picked unit))
                            • Then - Actions
                              • Unit - Set life of (Picked unit) to ((Life of (Picked unit)) + 20.00)
                              • Special Effect - Create a special effect attached to the origin of (Picked unit) using Abilities\Spells\Items\AIlm\AIlmTarget.mdl
                              • Special Effect - Destroy (Last created special effect)
                            • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Mana of (Picked unit)) Not equal to (Max mana of (Picked unit))
                            • Then - Actions
                              • Unit - Set mana of (Picked unit) to ((Mana of (Picked unit)) + 15.00)
                              • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Spells\Items\AIma\AImaTarget.mdl
                              • Special Effect - Destroy (Last created special effect)
                            • Else - Actions
                      • Custom script: call DestroyGroup (udg_HS_ActualHealGroup)
                      • Custom script: call RemoveLocation (udg_HS_Points[19])
                      • Hashtable - Clear all child hashtables of child (Key (Triggering unit)) in HS_Hashtable
                      • Unit - Remove (Triggering unit) from the game
                    • Else - Actions
                      • -------- If nothing from the above is happening, but the dying unit is still a dummy-type (which means it's a rotating wisp), it gets its data removed. --------
                      • Hashtable - Clear all child hashtables of child (Key (Triggering unit)) in HS_Hashtable
                      • Unit - Remove (Triggering unit) from the game
            • Else - Actions
              • -------- This will check whether the dying unit has been killed by the actual caster of the spell. --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Key deadcounter) is stored as a Handle of (Key (Killing unit)) in HS_Hashtable) Equal to True
                  • ((Triggering unit) is A Hero) Equal to False
                • Then - Actions
                  • -------- If yes, it will create the same unit-type of the dying unit, change its ownership to Neutral Passive to avoid aggression --------
                  • -------- Given a locust ability, so that it can't be selected, gets the dying animation normally as the original dying unit --------
                  • -------- and given a scale of 70% to actually "fit" in the main column of the wisps. --------
                  • Set HS_Points[14] = (Position of (Triggering unit))
                  • Unit - Create 1 (Unit-type of (Triggering unit)) for Neutral Passive at HS_Points[14] facing Default building facing degrees
                  • Animation - Change (Last created unit)'s size to (70.00%, 70.00%, 70.00%) of its original size
                  • Unit Group - Add (Last created unit) to (Load (Key deadcounter) of (Key (Killing unit)) in HS_Hashtable)
                  • Custom script: call SetUnitAnimation (GetLastCreatedUnit(), "death")
                  • Custom script: call UnitAddAbility (GetLastCreatedUnit(), 'Aloc')
                  • Custom script: call RemoveLocation (udg_HS_Points[14])
                  • -------- We save the killing unit, so as to pick the right owner for the healing effect (since the unit is created for Neutral Passive, --------
                  • -------- the unit has no enemy, so saving the Killing unit will help us restore the owner we want) --------
                  • Hashtable - Save Handle Of(Killing unit) as (Key killer) of (Key (Last created unit)) in HS_Hashtable
                  • -------- HS4 <gen> controls the move of this pseudo-unit, that is slowly dragged in the wisps' column, to finally heal ally units of the caster's. --------
                  • Trigger - Turn on HS4 <gen>
                  • Unit - Remove (Triggering unit) from the game
                • Else - Actions

  • HS7
    • Events
      • Time - HS_DetectTimer expires
    • Conditions
    • Actions
      • -------- This timer detects the death of the Main dummy unit. If we didn't have it, the units that were dragged to the wisps' column would not disappear --------
      • -------- The timer is given a duration of 2 seconds, which relates to the Gameplay Constants "Death time" time. --------
      • Unit Group - Pick every unit in (Load (Key deadcounter) of (Key (Load (Key caster) of (Key (Load (Key unit1) of (Key (Expiring timer)) in HS_Hashtable)) in HS_Hashtable)) in HS_Hashtable) and do (Actions)
        • Loop - Actions
          • Unit - Add a 0.01 second Generic expiration timer to (Picked unit)
          • Unit Group - Remove (Picked unit) from (Load (Key deadcounter) of (Key (Load (Key caster) of (Key (Load (Key unit1) of (Key (Expiring timer)) in HS_Hashtable)) in HS_Hashtable)) in HS_Hashtable)
      • Unit Group - Pick every unit in (Load (Key newgroup) of (Key (Load (Key unit1) of (Key (Expiring timer)) in HS_Hashtable)) in HS_Hashtable) and do (Actions)
        • Loop - Actions
          • Unit - Add a 0.01 second Generic expiration timer to (Picked unit)
      • Special Effect - Destroy (Load (Key mainsfx) of (Key (Load (Key unit1) of (Key (Expiring timer)) in HS_Hashtable)) in HS_Hashtable)
      • Hashtable - Clear all child hashtables of child (Key (Load (Key caster) of (Key (Load (Key unit1) of (Key (Expiring timer)) in HS_Hashtable)) in HS_Hashtable)) in HS_Hashtable
      • Hashtable - Clear all child hashtables of child (Key (Load (Key unit1) of (Key (Expiring timer)) in HS_Hashtable)) in HS_Hashtable
      • Unit - Remove (Load (Key unit1) of (Key (Expiring timer)) in HS_Hashtable) from the game
      • Hashtable - Clear all child hashtables of child (Key (Expiring timer)) in HS_Hashtable

  • HS8
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (HS_HealGroup is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
          • -------- This trigger will pick the dummy units, that are created when a dying unit, killed by the caster of the spell, are vanished in the mid-air. --------
          • -------- It makes them move forward and change their flying height to fit a parabola-shaped one. --------
          • Unit Group - Pick every unit in HS_HealGroup and do (Actions)
            • Loop - Actions
              • Set HS_Points[16] = (Point((Load (Key (x + (String(HS_Loops[4])))) of (Key (Picked unit)) from HS_Hashtable), (Load (Key (y + (String(HS_Loops[4])))) of (Key (Picked unit)) from HS_Hashtable)))
              • Set HS_Points[17] = (Position of (Picked unit))
              • Set HS_Points[18] = (HS_Points[17] offset by 10.00 towards (Angle from HS_Points[16] to HS_Points[17]) degrees)
              • Hashtable - Save ((Load (Key par) of (Key (Picked unit)) from HS_Hashtable) + 10.00) as (Key par) of (Key (Picked unit)) in HS_Hashtable
              • Hashtable - Save ((((4.00 x (Load (Key newd) of (Key (Picked unit)) from HS_Hashtable)) / (Load (Key dist) of (Key (Picked unit)) from HS_Hashtable)) x ((Load (Key dist) of (Key (Picked unit)) from HS_Hashtable) - (Load (Key par) of (Key (Picked unit)) from HS_Hashtable))) x as (Key newheight) of (Key (Picked unit)) in HS_Hashtable
              • Animation - Change (Picked unit) flying height to (Load (Key newheight) of (Key (Picked unit)) from HS_Hashtable) at 0.00
              • Unit - Move (Picked unit) instantly to HS_Points[18]
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Load (Key newheight) of (Key (Picked unit)) from HS_Hashtable) Less than or equal to -1.00
                • Then - Actions
                  • Unit Group - Remove (Picked unit) from HS_HealGroup
                  • Unit - Add a 0.01 second Generic expiration timer to (Picked unit)
                • Else - Actions
              • Custom script: call RemoveLocation (udg_HS_Points[16])
              • Custom script: call RemoveLocation (udg_HS_Points[17])
              • Custom script: call RemoveLocation (udg_HS_Points[18])


Keywords:
column, rotation, wisp, heal, mana, health, gain, sfx, effect
Contents

Hoist of the Seven Conundrums (Map)

Reviews
Moderator
09:20, 3rd Mar 2010 TriggerHappy: Very cool and original spell. I didn't see any leaks.
  1. 09:20, 3rd Mar 2010
    TriggerHappy:

    Very cool and original spell. I didn't see any leaks.
     
  2. Gelyne

    Gelyne

    Joined:
    Jul 29, 2009
    Messages:
    15
    Resources:
    0
    Resources:
    0
    The spell is good, alot of eye candy and it has a very good idea... but 8 triggers... thats a bit to many =\
     
  3. Pharaoh_

    Pharaoh_

    Joined:
    Nov 6, 2008
    Messages:
    8,128
    Resources:
    11
    Icons:
    3
    Skins:
    1
    Spells:
    6
    Tutorials:
    1
    Resources:
    11
    I know they are too many; if you think you can make it with less triggers, go ahead ;)
     
  4. D4RK_G4ND4LF

    D4RK_G4ND4LF

    Joined:
    Feb 4, 2009
    Messages:
    1,196
    Resources:
    20
    Models:
    3
    Spells:
    15
    Tutorials:
    2
    Resources:
    20
    just put all periodic actions in the same trigger :grin:

    however I'd do it like that:

    cast trigger (is necessary anyway)

    loop trigger
    -pick all units within range with live 0 live and drag them to center
    -create wisps
    -if a unit has reached the center make a unitgroup full of blue balls and blast them away from the center dummy (or whenever it should happen)
    -if the main dummy is dead delete this instance
    -something I forgot

    wisp loop trigger
    -rotate wisps
    (since you are using hashtables you could also load these units ids and merge this trigger to the second one)

    however your effects are one of the best as always but your coding could be improved (usually I don't use hashtables except I have to since they are slower then indexing and indexing makes you able to use hashtables as 2D-arrays in combination with unitgroups)

    to create unitgroups check if the current unitgroup is == null (you will probably need JASS for this but you could also add a unit and check if it is in that group if not the group is not created)
    and then use
    set udg_YourGroup[udg_YourIndex] = CreateGroup()
     
  5. Pharaoh_

    Pharaoh_

    Joined:
    Nov 6, 2008
    Messages:
    8,128
    Resources:
    11
    Icons:
    3
    Skins:
    1
    Spells:
    6
    Tutorials:
    1
    Resources:
    11
    The mechanism you describe will not provide the same result. How could I possibly add the wisp loop trigger, that runs every 0.05 seconds into a 0.5 periodic event trigger? Each loop calculates and picks different stuff. If I combine some of them (that they probably have the same periodic event, e.g. 0.05 seconds), well, the pick on the wisps might end, while the other units, the dead ones that are dragged to the wisps' column should be still moving. I mean the trigger should stop for the wisps and keep itself on for the dead units, while I make a condition call to turn it off, once there are no units left in the wisps' group.
    I really believe there are many triggers required, because of the spell's multiple sub-effects:
    The casting trigger, the wisps' rotation, the one that counts the deaths to respectively add the dying unit in the trigger it should go, the drag of the dead units, their elevation and another trigger that works as a debug (the one with the timer) that kills the dragged units, in case the spell's duration is up, before they reach the column.
     
  6. mjllonir

    mjllonir

    Joined:
    May 31, 2009
    Messages:
    432
    Resources:
    3
    Spells:
    3
    Resources:
    3
    What Pharaoh says it's true, but I think you'd be able to merge two of them into one, like those two 0.05 second ones.
     
  7. Kingz

    Kingz

    Joined:
    Jun 5, 2008
    Messages:
    2,470
    Resources:
    6
    Spells:
    5
    Tutorials:
    1
    Resources:
    6
    You can merge all periodic triggers, it is just a matter if you want to.

    I would reduce all periodic triggers into 2 separate ones(0.5 one and a 0.03 one).

    How to:

    Set Interval = Interval + 0.03
    If Interval >= fireOffValue then
    do actions...
    set Interval = 0
    endif
     
  8. cedi

    cedi

    Joined:
    May 19, 2008
    Messages:
    165
    Resources:
    7
    Icons:
    2
    Spells:
    5
    Resources:
    7
    I could create this spell with only one trigger ;). But anyway, nice spell.

    cedi
     
  9. WherewolfTherewolf

    WherewolfTherewolf

    Joined:
    Jul 18, 2008
    Messages:
    2,821
    Resources:
    3
    Models:
    3
    Resources:
    3
    Now that's Eye candy!
     
  10. Piwlady

    Piwlady

    Joined:
    May 31, 2009
    Messages:
    898
    Resources:
    1
    Tutorials:
    1
    Resources:
    1
    I tried this one. One of coolest spells I've ever seen. Looks just so damn awesome
     
  11. Vengeancekael

    Vengeancekael

    Joined:
    Aug 11, 2009
    Messages:
    5,740
    Resources:
    16
    Tools:
    1
    Maps:
    13
    Spells:
    1
    StarCraft II Resources:
    1
    Resources:
    16
    Very nice, nothing else to say about the triggering, since the other people already mentioned everything :D +rep
     
  12. Anachron

    Anachron

    Joined:
    Sep 9, 2007
    Messages:
    6,220
    Resources:
    66
    Icons:
    49
    Packs:
    2
    Tools:
    1
    Maps:
    3
    Spells:
    9
    Tutorials:
    1
    JASS:
    1
    Resources:
    66
    Why is this in GUI?
    Such complicated spells should be made in vJass, GUI isn't really a good choice when it comes to complicated stuff.
     
  13. Pharaoh_

    Pharaoh_

    Joined:
    Nov 6, 2008
    Messages:
    8,128
    Resources:
    11
    Icons:
    3
    Skins:
    1
    Spells:
    6
    Tutorials:
    1
    Resources:
    11
    I have never made a vJass spell. I know how to code them in general, but never tried the actual script. I am fan of complicated stuff and I know that using GUI makes the submission isntantly underestimated, but it's more convenient for me..
     
  14. Aspard

    Aspard

    Joined:
    Jul 2, 2008
    Messages:
    595
    Resources:
    1
    Spells:
    1
    Resources:
    1
    That's truly funny, eye-candy and interesting! :) Good job
     
  15. NFWar

    NFWar

    Joined:
    Jul 27, 2008
    Messages:
    1,314
    Resources:
    228
    Models:
    1
    Icons:
    216
    Packs:
    1
    Skins:
    2
    Spells:
    6
    Tutorials:
    2
    Resources:
    228
    OmFG! Coloorzzz! Dl Dl DL DL!
    Edit: Spell is owesome! Eye candy is so nice ^^
    The only wierd thing is... when unit body is floating to energy portal and it closes before unit reach it, units dies again...
    Also special effect ImpaleTargetDust spawn every 0.05 and cause lags.
    I know what this effect is heavy and user can change it, BUT you shuld make Spam period.
    It is IF when you skip effect spawn:

    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • Spam[i] Greater than or equal to 5
      • Then - Actions
        • Set Spam[i] = 0
        • Special Effect - Create a special effect at Point using Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
        • Special Effect - Destroy (Last created special effect)
      • Else - Actions


    This will descrease spell lag dramaticaly and also you will be able to descrease loop time so spell will have cleaner and faster look :)
     
    Last edited: Mar 4, 2010
  16. Arisato

    Arisato

    Joined:
    Dec 17, 2009
    Messages:
    991
    Resources:
    7
    Models:
    1
    Maps:
    4
    Spells:
    1
    Tutorials:
    1
    Resources:
    7
    Wuah!!! Pharaoh!! I never tot u could do spells!!!!!!!!!!!!

    Teach meeee!
     
  17. Malcous

    Malcous

    Joined:
    Apr 2, 2008
    Messages:
    1,195
    Resources:
    0
    Resources:
    0
    Wow , what an awesome spell !
     
  18. Dynasti

    Dynasti

    Joined:
    Oct 18, 2007
    Messages:
    871
    Resources:
    4
    Maps:
    2
    Spells:
    1
    Tutorials:
    1
    Resources:
    4
    Cool spell you got there mate ;)

    Just found a bug, may not be that big but anyways: When cast after the cd is off I get an error message from your spell "allready invoked " or something. Is it supposed to only be used once? If so, please just add an infinite cd to it instead of tricking players.


    + Eyecandy is nice, but I think the dust effect doesn't quite play along with the rainbowish colours of the spell itself, + you could reduce the dust effects a bit perhaps.


    Btw, since you set the flying units height not taking any Z of the terrain it's standing on it might get affected by trees, buildings but not least cliffs. But it's really not that important, just a nit pick ;P

    You're a really good trigger'r and you should consider vJass, it will open enormous windows of opportunities. ^^
    Nice work, 4/5!


    Edit, just came up with a thing that imo would make it look wicked :p

    If you make the swirl of whisps go crossing eachother like the dna stuff that would be awesome, but you're the creator :)
     
  19. Pharaoh_

    Pharaoh_

    Joined:
    Nov 6, 2008
    Messages:
    8,128
    Resources:
    11
    Icons:
    3
    Skins:
    1
    Spells:
    6
    Tutorials:
    1
    Resources:
    11
    Thank you all for your feedback; I will update it soon. :)