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

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
100% made by me, wolfman.
Got the idea from TaMeD, who wanted this spell for his map :D

Stores the soul of enemies that you kill, allowing you to summon them. Can store up to 6 souls, after you have 6 souls, each enemy you kill after that replaces the other souls of units you have already killed

Duration of summoned units can be changed (look at "Init" trigger)

Currently does not have any mana cost/cooldown, but that is obviously very easy to change depending on how you want to use this.

There are script functions in the trigger that tell you when the summon is cast, when a unit is set to one of the summons, when there is no unit set to the summon, and when you start to replace your summons. These can be deleted, you probably wont need them (except for probably the one that tells you when there is no unit stored for that summon).
Also, when there is no soul in a slot, and you try to summon from that slot, it will give the catser back the mana that it used to summon nothing. Just be sure to set ManaCost in the Init trig.

The Triggers:

  • Init
    • Events
      • Time - Elapsed game time is 0.10 seconds
    • Conditions
    • Actions
      • Set Duration = 30.00
      • Set ManaCost = 0.00
  • SetCreep
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Killing unit)) Equal to (==) Footman
      • ((Dying unit) belongs to an enemy of (Owner of (Killing unit))) Equal to (==) True
    • Actions
      • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SpellABool[(Player number of (Owner of (Killing unit)))] Equal to (==) True
          • SpellBBool[(Player number of (Owner of (Killing unit)))] Equal to (==) True
          • SpellCBool[(Player number of (Owner of (Killing unit)))] Equal to (==) True
          • SpellDBool[(Player number of (Owner of (Killing unit)))] Equal to (==) True
          • SpellEBool[(Player number of (Owner of (Killing unit)))] Equal to (==) True
        • Then - Actions
          • Set SpellABool[(Player number of (Owner of (Killing unit)))] = False
          • Set SpellBBool[(Player number of (Owner of (Killing unit)))] = False
          • Set SpellCBool[(Player number of (Owner of (Killing unit)))] = False
          • Set SpellDBool[(Player number of (Owner of (Killing unit)))] = False
          • Set SpellEBool[(Player number of (Owner of (Killing unit)))] = False
          • Game - Display to (All players) the text: reset
        • Else - Actions
      • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SpellABool[(Player number of (Owner of (Killing unit)))] Equal to (==) False
        • Then - Actions
          • Set SpellASummon[(Player number of (Owner of (Killing unit)))] = (Unit-type of (Dying unit))
          • Set SpellABool[(Player number of (Owner of (Killing unit)))] = True
          • Game - Display to (All players) the text: spell a set
        • Else - Actions
          • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SpellBBool[(Player number of (Owner of (Killing unit)))] Equal to (==) False
            • Then - Actions
              • Set SpellBSummon[(Player number of (Owner of (Killing unit)))] = (Unit-type of (Dying unit))
              • Set SpellBBool[(Player number of (Owner of (Killing unit)))] = True
              • Game - Display to (All players) the text: spell b set
            • Else - Actions
              • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SpellCBool[(Player number of (Owner of (Killing unit)))] Equal to (==) False
                • Then - Actions
                  • Set SpellCSummon[(Player number of (Owner of (Killing unit)))] = (Unit-type of (Dying unit))
                  • Set SpellCBool[(Player number of (Owner of (Killing unit)))] = True
                  • Game - Display to (All players) the text: spell c set
                • Else - Actions
                  • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • SpellDBool[(Player number of (Owner of (Killing unit)))] Equal to (==) False
                    • Then - Actions
                      • Set SpellDSummon[(Player number of (Owner of (Killing unit)))] = (Unit-type of (Dying unit))
                      • Set SpellDBool[(Player number of (Owner of (Killing unit)))] = True
                      • Game - Display to (All players) the text: spell d set
                    • Else - Actions
                      • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • SpellEBool[(Player number of (Owner of (Killing unit)))] Equal to (==) False
                        • Then - Actions
                          • Set SpellESummon[(Player number of (Owner of (Killing unit)))] = (Unit-type of (Dying unit))
                          • Set SpellEBool[(Player number of (Owner of (Killing unit)))] = True
                          • Game - Display to (All players) the text: spell e set
                        • Else - Actions

  • SummonCreep
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
    • Actions
      • Set TempLoc[0] = (Position of (Triggering unit))
        • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • (Ability being cast) Equal to (==) SpellA
          • Then - Actions
            • Unit - Create 1 SpellASummon[(Player number of (Owner of (Triggering unit)))] for (Owner of (Triggering unit)) at TempLoc[0] facing Default building facing (270.0) degrees
              • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SpellASummon[(Player number of (Owner of (Triggering unit)))] Equal to (==) No unit-type
                • Then - Actions
                  • Game - Display to (Player group((Owner of (Triggering unit)))) the text: No soul in slot A
                  • Unit - Set mana of (Triggering unit) to ((Mana of (Triggering unit)) + ManaCost)
                • Else - Actions
                  • Game - Display to (All players) the text: spell a cast
          • Else - Actions
        • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • (Ability being cast) Equal to (==) SpellB
          • Then - Actions
            • Unit - Create 1 SpellBSummon[(Player number of (Owner of (Triggering unit)))] for (Owner of (Triggering unit)) at TempLoc[0] facing Default building facing (270.0) degrees
              • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SpellBSummon[(Player number of (Owner of (Triggering unit)))] Equal to (==) No unit-type
                • Then - Actions
                  • Game - Display to (Player group((Owner of (Triggering unit)))) the text: No soul in slot B
                  • Unit - Set mana of (Triggering unit) to ((Mana of (Triggering unit)) + ManaCost)
                • Else - Actions
                  • Game - Display to (All players) the text: spell b cast
          • Else - Actions
        • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • (Ability being cast) Equal to (==) SpellC
          • Then - Actions
            • Unit - Create 1 SpellCSummon[(Player number of (Owner of (Triggering unit)))] for (Owner of (Triggering unit)) at TempLoc[0] facing Default building facing (270.0) degrees
              • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SpellCSummon[(Player number of (Owner of (Triggering unit)))] Equal to (==) No unit-type
                • Then - Actions
                  • Game - Display to (Player group((Owner of (Triggering unit)))) the text: No soul in slot C
                  • Unit - Set mana of (Triggering unit) to ((Mana of (Triggering unit)) + ManaCost)
                • Else - Actions
                  • Game - Display to (All players) the text: spell c cast
          • Else - Actions
        • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • (Ability being cast) Equal to (==) SpellD
          • Then - Actions
            • Unit - Create 1 SpellDSummon[(Player number of (Owner of (Triggering unit)))] for (Owner of (Triggering unit)) at TempLoc[0] facing Default building facing (270.0) degrees
              • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SpellDSummon[(Player number of (Owner of (Triggering unit)))] Equal to (==) No unit-type
                • Then - Actions
                  • Game - Display to (Player group((Owner of (Triggering unit)))) the text: No soul in slot D
                  • Unit - Set mana of (Triggering unit) to ((Mana of (Triggering unit)) + ManaCost)
                • Else - Actions
                  • Game - Display to (All players) the text: spell d cast
          • Else - Actions
        • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • (Ability being cast) Equal to (==) SpellE
          • Then - Actions
            • Unit - Create 1 SpellESummon[(Player number of (Owner of (Triggering unit)))] for (Owner of (Triggering unit)) at TempLoc[0] facing Default building facing (270.0) degrees
              • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SpellESummon[(Player number of (Owner of (Triggering unit)))] Equal to (==) No unit-type
                • Then - Actions
                  • Game - Display to (Player group((Owner of (Triggering unit)))) the text: No soul in slot E
                  • Unit - Set mana of (Triggering unit) to ((Mana of (Triggering unit)) + ManaCost)
                • Else - Actions
                  • Game - Display to (All players) the text: spell e cast
          • Else - Actions
        • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • Duration Not equal to (!=) 0.00
          • Then - Actions
            • Unit - Add a Duration second Generic expiration timer to (Last created unit)
          • Else - Actions
      • Special Effect - Create a special effect attached to the origin of (Last created unit) using Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
      • Special Effect - Destroy (Last created special effect)
      • Custom script: call RemoveLocation(udg_TempLoc[0])
Keywords:
summon, wolfman, creeps, soul
Contents

Just another Warcraft III map (Map)

Reviews
12th Dec 2015 IcemanBo: Too long time as NeedsFix. Rejected. 15:50, 30th May 2011 Maker: Make the unit types with which this works somehow configurable. Use triggering unit instead of dying unit. Store the player number into a variable and use...

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long time as NeedsFix. Rejected.

15:50, 30th May 2011
Maker:
Make the unit types with which this works somehow configurable.
Use triggering unit instead of dying unit.
Store the player number into a variable and use the variable instead of repeatedly calling the function.
Not a good idea to display the (debug) messges to all players.
Change the if/then/else structure in the cast trigger.
Add some summon limit.
I recommend adding some follow through time in the object editor for the ability.
Don't use an array for the point.
 
Level 3
Joined
Sep 25, 2010
Messages
33
This spell can bug with heroes (i think)
and spell A's hotkey clashes with the attack hotkey
one suggestion: maybe a trigger to clear those souls if the player(s) wants to
 
Level 11
Joined
May 31, 2008
Messages
698
Added the triggers.

And it really isn't a learnable hero ability, but i might decide to make it have levels and be compatible with heroes, maybe with the spellbook ability?
Also that way the hotkeys wont get in the way of attack or anything.

And i will consider the locking, but there wouldnt really be any point in clearing the slots.. cause that would just not allow you to use that summoning. New units that you kill automatically replace the other summons that you already have if all your slots are full
 
Level 11
Joined
May 31, 2008
Messages
698
Well if i want to do the lock thing, then i would probably have to make a lock spell for each summoning, so there would just be too many spell icons, especially if this were to be used by a hero with other abilities
 
Top