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

Soul Extract v1.0

  • Like
Reactions: BUP
Extracts the very soul of a unit into visible light. Damages the source unit if the soul is damaged by any means.

Level 1 - 1 second extract per soul, soul lasts for 2 seconds, spell duration lasts for 3 seconds.
Level 2 - 0.75 second extract per soul, soul lasts for 4 seconds, spell duration lasts for 4 seconds.
Level 3 - 0.5 second extract per soul, soul lasts for 6 seconds, spell duration lasts for 5 seconds.


  • SE Setup
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Custom script: set udg_SE_Hashtable = InitHashtable()
      • -------- \\\\\\\\\\ --------
      • -------- CONFIGURABLES --------
      • -------- \\\\\\\\\\ --------
      • -------- The ability --------
      • Set SE_Ability = Soul Extract
      • -------- \\\\\\\\\\ --------
      • -------- The dummy unit (Soul) --------
      • Set SE_DummyType = Soul Extract (Dummy)
      • -------- \\\\\\\\\\ --------
      • -------- Interval per Soul Extract --------
      • Set SE_IntervalSetup[1] = 1.00
      • Set SE_IntervalSetup[2] = 0.75
      • Set SE_IntervalSetup[3] = 0.50
      • -------- \\\\\\\\\\ --------
      • -------- The spell duration --------
      • Set SE_DurationSetup[1] = 3.00
      • Set SE_DurationSetup[2] = 4.00
      • Set SE_DurationSetup[3] = 5.00
      • -------- \\\\\\\\\\ --------
      • -------- The soul duration --------
      • Set SE_SoulDurationSetup[1] = 2.00
      • Set SE_SoulDurationSetup[2] = 4.00
      • Set SE_SoulDurationSetup[3] = 6.00
  • SE Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to SE_Ability
    • Actions
      • Set SE_MaxIndex = (SE_MaxIndex + 1)
      • Set TempInt = (Level of SE_Ability for (Triggering unit))
      • Set SE_Duration[SE_MaxIndex] = SE_DurationSetup[TempInt]
      • Set SE_Interval[SE_MaxIndex] = SE_IntervalSetup[TempInt]
      • Set SE_IntervalCounter[SE_MaxIndex] = SE_Interval[SE_MaxIndex]
      • Set SE_Target[SE_MaxIndex] = (Target unit of ability being cast)
      • Set SE_SoulDuration[SE_MaxIndex] = SE_SoulDurationSetup[TempInt]
      • Trigger - Turn on SE Loop <gen>
  • SE Hit
    • Events
      • Game - DamageEvent becomes Equal to 1.00
    • Conditions
      • (DamageEventTarget is in SE_Group) Equal to True
    • Actions
      • Custom script: set udg_SE_Key = GetHandleId(udg_DamageEventTarget)
      • Unit - Cause DamageEventSource to damage (Load 0 of SE_Key in SE_Hashtable), dealing DamageEventAmount damage of attack type Hero and damage type Normal
  • SE Die
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to SE_DummyType
    • Actions
      • Set TempUnit = (Triggering unit)
      • Custom script: set udg_SE_Key = GetHandleId(udg_TempUnit)
      • Hashtable - Clear all child hashtables of child SE_Key in SE_Hashtable
      • Unit Group - Remove TempUnit from SE_Group
      • Unit - Remove TempUnit from the game
  • SE Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer SE_CurrentIndex) from 1 to SE_MaxIndex, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SE_Duration[SE_CurrentIndex] Greater than 0.00
              • (SE_Target[SE_CurrentIndex] is alive) Equal to True
            • Then - Actions
              • Set SE_Duration[SE_CurrentIndex] = (SE_Duration[SE_CurrentIndex] - 0.03)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SE_IntervalCounter[SE_CurrentIndex] Less than SE_Interval[SE_CurrentIndex]
                • Then - Actions
                  • Set SE_IntervalCounter[SE_CurrentIndex] = (SE_IntervalCounter[SE_CurrentIndex] + 0.03)
                • Else - Actions
                  • Set TempLoc = (Position of SE_Target[SE_CurrentIndex])
                  • Unit - Create 1 SE_DummyType for Neutral Hostile at TempLoc facing Default building facing degrees
                  • Set TempUnit = (Last created unit)
                  • Animation - Change TempUnit's vertex coloring to (100.00%, 0.00%, 0.00%) with 50.00% transparency
                  • Unit - Add a SE_SoulDuration[SE_CurrentIndex] second Generic expiration timer to TempUnit
                  • Custom script: set udg_SE_Key = GetHandleId(udg_TempUnit)
                  • Hashtable - Save Handle OfSE_Target[SE_CurrentIndex] as 0 of SE_Key in SE_Hashtable
                  • Unit Group - Add TempUnit to SE_Group
                  • Set SE_IntervalCounter[SE_CurrentIndex] = 0.00
                  • Custom script: call RemoveLocation(udg_TempLoc)
            • Else - Actions
              • Set SE_Duration[SE_CurrentIndex] = SE_Duration[SE_MaxIndex]
              • Set SE_Interval[SE_CurrentIndex] = SE_Interval[SE_MaxIndex]
              • Set SE_IntervalCounter[SE_CurrentIndex] = SE_IntervalCounter[SE_MaxIndex]
              • Set SE_Target[SE_CurrentIndex] = SE_Target[SE_MaxIndex]
              • Set SE_SoulDuration[SE_CurrentIndex] = SE_SoulDuration[SE_MaxIndex]
              • Set SE_CurrentIndex = (SE_CurrentIndex - 1)
              • Set SE_MaxIndex = (SE_MaxIndex - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SE_MaxIndex Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
v1.0
- Initial release


Bribe - Damage Detection System


Keywords:
dynamic, indexing, hashtable, soul, extract, wisp, transparenct, dat tags, damage, detection, system.
Contents

Just another Warcraft III map (Map)

Reviews
01:27, 31st Dec 2012 Magtheridon96: Approved.
Level 33
Joined
Mar 27, 2008
Messages
8,035
@Wolf_Wing
It's up to your creativity, lol.

Let's say in an AoS-styled map such as DotA, if the actual Hero gets away, enemy units can still damage it by damaging the Soul which will could result in death for the unit that got away.

@BUP
I don't know, 100% RED and 50% transparency does the job quite well.
 
Top