• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Soul Blast v1.1

My submission for the Spells & Systems Mini-Contest #20
Score: 26/30
Mentioned changes made, other efficiency improvements and improved blast effect.

  • Soul Blast
    • Events
      • Unit - A unit Begins channeling an ability
    • Conditions
      • (Ability being cast) Equal to Soul Blast
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SBHas[SBLastRecycled] Equal to True
        • Then - Actions
          • Set SBMax = (SBMax + 1)
          • Set SBIndex = SBMax
        • Else - Actions
          • Set SBIndex = SBLastRecycled
          • Set SBLastRecycled = SBRecycledList[SBLastRecycled]
      • Set SBCaster[SBIndex] = (Triggering unit)
      • Set SBCasterPoint[SBIndex] = (Position of SBCaster[SBIndex])
      • Set SBTargetPoint[SBIndex] = (Target point of ability being cast)
      • Set SBDistance[SBIndex] = 50.00
      • Set SBLevel[SBIndex] = (Level of Soul Blast for SBCaster[SBIndex])
      • Set SBMaxDistance[SBIndex] = (1000.00 + (250.00 x (Real((Level of Soul Blast for SBCaster[SBIndex])))))
      • Set SBAngle[SBIndex] = (Angle from SBCasterPoint[SBIndex] to SBTargetPoint[SBIndex])
      • Set SBTempPoint = (SBCasterPoint[SBIndex] offset by 50.00 towards SBAngle[SBIndex] degrees)
      • Set SBEffectDelayer[SBIndex] = 0
      • Custom script: set udg_SBDummyGroup[udg_SBIndex] = CreateGroup()
      • Unit - Create 1 Missile Body 1 for Neutral Passive at SBCasterPoint[SBIndex] facing SBAngle[SBIndex] degrees
      • Unit Group - Add (Last created unit) to SBDummyGroup[SBIndex]
      • Animation - Change (Last created unit)'s animation speed to 5.00% of its original speed
      • Unit - Create 1 Missile Body 2 for Neutral Passive at SBCasterPoint[SBIndex] facing SBAngle[SBIndex] degrees
      • Unit Group - Add (Last created unit) to SBDummyGroup[SBIndex]
      • Unit - Create 1 Missile Head for Neutral Passive at SBTempPoint facing SBAngle[SBIndex] degrees
      • Unit Group - Add (Last created unit) to SBDummyGroup[SBIndex]
      • Custom script: set udg_SBChannelGroup[udg_SBIndex] = CreateGroup()
      • For each (Integer A) from 1 to 2, do (Actions)
        • Loop - Actions
          • Set SBScale[SBIndex] = (100.00 x (Real((Integer A))))
          • Unit - Create 1 Channel Effect for Neutral Passive at SBCasterPoint[SBIndex] facing SBAngle[SBIndex] degrees
          • Animation - Change (Picked unit)'s size to (SBScale[SBIndex]%, SBScale[SBIndex]%, SBScale[SBIndex]%) of its original size
          • Unit Group - Add (Last created unit) to SBChannelGroup[SBIndex]
      • Set SBHas[SBIndex] = True
      • Set SBCount = (SBCount + 1)
      • Set SBTimer[SBIndex] = 3.00
      • Custom script: call RemoveLocation (udg_SBTempPoint)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Soul Blast Loop <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on Soul Blast Loop <gen>
        • Else - Actions
  • Soul Blast Halt
    • Events
      • Unit - A unit Stops casting an ability
      • Unit - A unit Finishes casting an ability
    • Conditions
      • (Ability being cast) Equal to Soul Blast
    • Actions
      • For each (Integer A) from 0 to SBMax, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SBCaster[(Integer A)] Equal to (Triggering unit)
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SBTimer[(Integer A)] Greater than 0.00
                • Then - Actions
                  • Unit Group - Pick every unit in SBDummyGroup[(Integer A)] and do (Unit - Kill (Picked unit))
                  • Unit Group - Pick every unit in SBChannelGroup[(Integer A)] and do (Unit - Remove (Picked unit) from the game)
                  • Custom script: call DestroyGroup (udg_SBChannelGroup[GetForLoopIndexA()])
                  • Custom script: call DestroyGroup (udg_SBDummyGroup[GetForLoopIndexA()])
                  • Set SBTimer[(Integer A)] = 0.00
                  • Custom script: call RemoveLocation (udg_SBTargetPoint[GetForLoopIndexA()])
                  • Custom script: call RemoveLocation (udg_SBCasterPoint[GetForLoopIndexA()])
                  • Set SBHas[(Integer A)] = False
                  • Set SBRecycledList[(Integer A)] = SBLastRecycled
                  • Set SBLastRecycled = (Integer A)
                  • Set SBCount = (SBCount - 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • SBCount Equal to 0
                    • Then - Actions
                      • Set SBRecycledList[(Integer A)] = 0
                      • Set SBLastRecycled = 0
                      • Set SBMax = 0
                      • Trigger - Turn off Soul Blast Loop <gen>
                    • Else - Actions
                • Else - Actions
            • Else - Actions
  • Soul Blast Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer SBInteger) from 0 to SBMax, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SBHas[SBInteger] Equal to True
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SBTimer[SBInteger] Greater than 0.00
                • Then - Actions
                  • Set SBTimer[SBInteger] = (SBTimer[SBInteger] - 0.03)
                  • Set SBScale[SBInteger] = (SBScale[SBInteger] - 10.00)
                  • Set r = SBScale[SBInteger]
                  • Set SBEffectDelayer[SBInteger] = (SBEffectDelayer[SBInteger] + 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (SBEffectDelayer[SBInteger] mod 2) Equal to 0
                    • Then - Actions
                      • Unit - Create 1 Blast Effect for Neutral Passive at SBCasterPoint[SBInteger] facing Default building facing degrees
                      • Unit - Add a 0.10 second Generic expiration timer to (Last created unit)
                    • Else - Actions
                  • Unit Group - Pick every unit in SBChannelGroup[SBInteger] and do (Actions)
                    • Loop - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • r Less than 110.00
                        • Then - Actions
                          • Set r = 200.00
                        • Else - Actions
                          • Set r = (r - 100.00)
                      • Animation - Change (Picked unit)'s size to (r%, r%, r%) of its original size
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Number of units in SBChannelGroup[SBInteger]) Not equal to 0
                    • Then - Actions
                      • Unit Group - Pick every unit in SBChannelGroup[SBInteger] and do (Unit - Remove (Picked unit) from the game)
                    • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • SBDistance[SBInteger] Less than SBMaxDistance[SBInteger]
                    • Then - Actions
                      • Set SBEffectDelayer[SBInteger] = (SBEffectDelayer[SBInteger] + 1)
                      • Set SBDistance[SBInteger] = (SBDistance[SBInteger] + 40.00)
                      • Set SBTempPoint = (SBCasterPoint[SBInteger] offset by SBDistance[SBInteger] towards SBAngle[SBInteger] degrees)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (SBEffectDelayer[SBInteger] mod 2) Equal to 0
                        • Then - Actions
                          • Unit - Create 1 Wave Effect for Neutral Passive at SBTempPoint facing (Angle from SBCasterPoint[SBInteger] to SBTargetPoint[SBInteger]) degrees
                          • Animation - Change (Last created unit)'s animation speed to 150.00% of its original speed
                          • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
                        • Else - Actions
                      • Unit Group - Pick every unit in SBDummyGroup[SBInteger] and do (Actions)
                        • Loop - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Unit-type of (Picked unit)) Equal to Missile Head
                              • ((3.00 - SBTimer[SBInteger]) mod 0.06) Greater than or equal to 10.00
                            • Then - Actions
                              • Set SBTempPoint2 = (SBCasterPoint[SBInteger] offset by (SBDistance[SBInteger] + 40.00) towards SBAngle[SBInteger] degrees)
                              • Unit - Move (Picked unit) instantly to SBTempPoint2
                              • Custom script: call RemoveLocation (udg_SBTempPoint2)
                            • Else - Actions
                              • Unit - Move (Picked unit) instantly to SBTempPoint
                      • Set SBTempGroup = (Units within 100.00 of SBTempPoint matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of SBCa
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (SBTempGroup is empty) Equal to True
                        • Then - Actions
                        • Else - Actions
                          • Custom script: call RemoveLocation (udg_SBTargetPoint[udg_SBInteger])
                          • Custom script: call RemoveLocation (udg_SBCasterPoint[udg_SBInteger])
                          • Unit Group - Pick every unit in SBDummyGroup[SBInteger] and do (Unit - Kill (Picked unit))
                          • Unit Group - Pick every unit in SBChannelGroup[SBInteger] and do (Unit - Remove (Picked unit) from the game)
                          • Custom script: call DestroyGroup (udg_SBDummyGroup[udg_SBInteger])
                          • Custom script: call DestroyGroup (udg_SBChannelGroup[udg_SBInteger])
                          • Custom script: set bj_wantDestroyGroup = true
                          • Unit Group - Pick every unit in (Units within 250.00 of SBTempPoint matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of SBCa and do (Actions)
                            • Loop - Actions
                              • Unit - Cause SBCaster[SBInteger] to damage (Picked unit), dealing (100.00 x (Real(SBLevel[SBInteger]))) damage of attack type Spells and damage type Magic
                          • Unit - Create 1 Blast Effect for Neutral Passive at SBTempPoint facing Default building facing degrees
                          • Animation - Change (Last created unit)'s animation speed to 50.00% of its original speed
                          • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
                          • Unit - Create 1 Blast Effect 2 for Neutral Passive at SBTempPoint facing Default building facing degrees
                          • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
                          • Set SBHas[SBInteger] = False
                          • Set SBCount = (SBCount - 1)
                          • Set SBRecycledList[SBInteger] = SBLastRecycled
                          • Set SBLastRecycled = SBInteger
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • SBCount Equal to 0
                            • Then - Actions
                              • Trigger - Turn off (This trigger)
                            • Else - Actions
                      • Custom script: call DestroyGroup (udg_SBTempGroup)
                      • Custom script: call RemoveLocation (udg_SBTempPoint)
                    • Else - Actions
                      • Set SBHas[SBInteger] = False
                      • Custom script: set bj_wantDestroyGroup = true
                      • Unit Group - Pick every unit in SBDummyGroup[SBInteger] and do (Unit - Kill (Picked unit))
                      • Unit Group - Pick every unit in SBChannelGroup[SBInteger] and do (Unit - Remove (Picked unit) from the game)
                      • Custom script: call DestroyGroup (udg_SBDummyGroup[udg_SBInteger])
                      • Custom script: call DestroyGroup (udg_SBChannelGroup[udg_SBInteger])
                      • Custom script: call RemoveLocation (udg_SBTargetPoint[udg_SBInteger])
                      • Custom script: call RemoveLocation (udg_SBCasterPoint[udg_SBInteger])
                      • Set SBCount = (SBCount - 1)
                      • Set SBRecycledList[SBInteger] = SBLastRecycled
                      • Set SBLastRecycled = SBInteger
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • SBCount Equal to 0
                        • Then - Actions
                          • Set SBRecycledList[SBInteger] = 0
                          • Set SBLastRecycled = 0
                          • Set SBMax = 0
                          • Trigger - Turn off (This trigger)
                        • Else - Actions
            • Else - Actions
Keywords:
soul, avencast, rise, of, the, mage, channel, spell, purple, kick-ass effects
Contents

Just another Warcraft III map (Map)

Reviews
07:32, 19th Jul 2011 Maker: Approved.
Top