Spells - Making Nova Spells

Tutorial By denmax

[spoiler]PS: Double slash (//) in triggers are self comments and are not intended to be part of the trigger

This is only the basics and never giving more![/spoiler]

What are Nova spells?

Nova spells are spells where it will create a unit, or missiles, or any other thing that will go through a straight line in all diretions of the caster's position (at least) and then will disappear after finishing its job (at least).

What you will need

You will need, of course, the World Editor. It is recommended that you have at least 1.20a and The Frozen Throne

Prepare:
An instant cast spell (War Stomp, Thunder Clap) with removing the damage, buffs, duration to 0.01 (if it gives buff)

Prepare these variables:
Caster (unit) = casting unit
CasLoc (Point) = position for the casting unit
Real (Real) = essential to make locoffset
LocOffset (Point) = points to where the cast will be target, or the dummy will be ordered to move


Trigger:
  • Basic
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Nova Spell
    • Actions
      • Set Caster = (Triggering Unit)
      • Set CasLoc = (Position of (Triggering unit))
      • Set Real = 0.00
      • For each (Integer A) from 1 to 8, do (Actions)
        • Loop - Actions
          • Unit - Create 1 Dummy Unit for (Owner of Caster) at CasLoc facing default building facing degrees
          • Set LocOffset[(Integer A)] = (TSCasLoc offset by 700.00 towards TSReal degrees)
          • Set Real = (Real + (360.00 / 8.00))


Now this will be the basic trigger.. Now we have 3 types of Nova spells.. The Unit spell, line cast spell and individual spell (unknown for it's real identification)

UNIT NOVA SPELL

A unit nova spell is where you use a dummy unit to be ordered to move to the certain location (LocOffset) with certain things that could damage an enemy unit or do any other effect. An example would be a Blademaster using Bladestorm, or in DotA, the Poison Nova's missiles are dummy units

I will have the example of the Blademaster using Bladestrom..

Prepare:
A dummy unit with Locust and Invulnerability. Since we're having and example of the Blademaster using Bladestorm, it must have Bladestorm, model of the Blademaster, 0 collision, movespeed of about 220 and type Fly (if there are trees in the map, go to Destructibles and set the tree's Fly-Over Height to 0), sight radius to lower than 500 (to disable large sight for the dummy unit)

Trigger:
  • Twisting Slash
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Twisting Slash (Hero)
    • Actions
      • Set Caster = (Triggering Unit)
      • Set CasLoc = (Position of (Triggering unit))
      • Set Real = 0.00
      • For each (Integer A) from 1 to 8, do (Actions)
        • Loop - Actions
          • Unit - Create 1 Spinning Illusion (Dummy) for (Owner of Caster) at CasLoc facing default building facing degrees
          • Unit - Turn collision for (Last created unit) Off
          • Unit - Set level of Twisting Slash (Dummy) for (Last created unit) to (Level of Twisting Slash (Hero) for Caster)
          • Animation - Change (Last created unit)'s vertex coloring to (50.00%, 50.00%, 50.00%) with 50.00% transparency
          • Unit - Order (Last created unit) to Orc Blademaster - Bladestorm
          • Set LocOffset[(Integer A)] = (CasLoc offset by 700.00 towards Real degrees)
          • Unit - Order (Last created unit) to Move To LocOffset[(Integer A)]
          • Unit - Add a 3.50 second Generic expiration timer to (Last created unit)
          • Set Real = (Real + (360.00 / 8.00))
          • Custom script: call RemoveLocation(udg_LocOffset[bj_forLoopAIndex])
      • Custom script: call RemoveLocation(udg_CasLoc)


If you want a detailed information for every use of the action, open this "SPOILER"
[SPOILER]Twisting Slash Events Unit - A unit Starts the effect of an ability Conditions (Ability being cast) Equal to Twisting Slash (Hero) Actions Set Caster = (Triggering Unit) Set CasLoc = (Position of (Triggering unit)) Set Real = 0.00 For each (Integer A) from 1 to 8, do (Actions) Loop - Actions Unit - Create 1 Spinning Illusion (Dummy) for (Owner of Caster) at CasLoc facing default building facing degrees-------------//Create's the dummy unit Unit - Turn collision for (Last created unit) Off ---------------------------------------------------------------------------------------------------------------// Turns off the collision fo the dummy unit Unit - Set level of Twisting Slash (Dummy) for (Last created unit) to (Level of Twisting Slash (Hero) for Caster)-----------------------------------------------//Sets the level of twisting slash dummy (based on bladestorm) to the level of twisting slash to the hero Animation - Change (Last created unit)'s vertex coloring to (50.00%, 50.00%, 50.00%) with 50.00% transparency-----------------------------------------//Optional, just to make the dummies transparent Unit - Order (Last created unit) to Orc Blademaster - Bladestorm ------------------------------------------------------//orders the dummy to do twisting slash dummy (ts dummy is based on bladestorm Set LocOffset[(Integer A)] = (CasLoc offset by 700.00 towards Real degrees)----------------------------------------//sets locoffset Unit - Order (Last created unit) to Move To LocOffset[(Integer A)]--------------------------------------------------//orders the dummy to move to locoffset Unit - Add a 3.50 second Generic expiration timer to (Last created unit)-------------------------------------------------//after "3.5 seconds", the dummy will die Set Real = (Real + (360.00 / 8.00)) ------------------------------------------------------------------------------//essentially sets itself to make locoffset do it's greatest work Custom script: call RemoveLocation(udg_LocOffset[bj_forLoopAIndex]) ------------------------------------------------------------------------------------------------------------------------------//destroys leak Custom script: call RemoveLocation(udg_CasLoc) ---------------------------------------------------------------------//destroys leak [/SPOILER]

Custom Scripts clean these so called "memory leaks".

Then here you have: A succesful "Twisting Slash"

(Image)

Another way to use this is to "slide" these units. Look for the sliding tutorial around here and you might know what I mean.

LINE NOVA SPELLS

Line nova spells are spells where a dummy unit casts a linear spell (shockwave, impale, etc.)

Our example now is using impale as a linear spell..

Prepare:
A dummy unit with no model, no attack enabled, invulnerable, locust, no shadow..

Trigger:
  • Massive Impale
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Massive Impale
    • Actions
      • Set Caster = (Triggering unit)
      • Set Real = 0.00
      • Set CasLoc = (Position of (Triggering unit))
      • For each (Integer A) from 1 to 8, do (Actions)
        • Loop - Actions
          • Unit - Create 1 Dummy Unit for (Owner of Caster) at CasLoc facing default building facing degrees
          • Unit - Turn collision for (Last created unit) Off
          • Unit - Add Massive Impale (Dummy) to (Last created unit)
          • Unit - Set level of Massive Impale (Dummy) for (Last created unit) to (Level of Massive Impale (Hero) for (Triggering unit))
          • Set LocOffset[(Integer A)] = (CasLoc offset by 700.00 towards Real degrees)
          • Unit - Order (Last created unit) to Undead Crypt Lord - Impale LocOffset[(Integer A)]
          • Set Real = (Real + (360.00 / 8.00))
          • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
          • Custom script: call RemoveLocation(udg_LocOffset[bj_forLoopAIndex])
      • Custom script: call RemoveLocation(udg_CasLoc)

If you want information about the actions within the trigger, you may look under the "SPOILER"
[SPOILER]Massive Impale Events Unit - A unit Starts the effect of an ability Conditions (Ability being cast) Equal to Massive Impale Actions Set Caster = (Triggering unit) Set Real = 0.00 Set CasLoc = (Position of (Triggering unit)) For each (Integer A) from 1 to 8, do (Actions) Loop - Actions Unit - Create 1 Dummy Unit for (Owner of Caster) at CasLoc facing default building facing degrees Unit - Turn collision for (Last created unit) Off Unit - Add Massive Impale (Dummy) to (Last created unit) -----------------------------------------------------------------------------------------------//adds the ability massive impale (dummy) -based on impale- to the dummy Unit - Set level of Massive Impale (Dummy) for (Last created unit) to (Level of Massive Impale (Hero) for (Triggering unit)) Set LocOffset[(Integer A)] = (CasLoc offset by 700.00 towards Real degrees) Unit - Order (Last created unit) to Undead Crypt Lord - Impale LocOffset[(Integer A)] -----------------------------------------------------------------------------------------------//massive impale dummy is based on impale and so orders the dummy to cast massive impale dummy to locoffset Set Real = (Real + (360.00 / 8.00)) Unit - Add a 1.00 second Generic expiration timer to (Last created unit) Custom script: call RemoveLocation(udg_LocOffset[bj_forLoopAIndex]) Custom script: call RemoveLocation(udg_CasLoc)[/SPOILER]

And there you go, you have Massive Impale

(Image)

INDIVIDUAL SPELL CAST NOVA

Individual Spell Cast Novas are novas of which different spells (flame strike, warstomp, etc.) will be used to 2, 3, 4 times (or more) around the hero to look alot like a linear spell.

EXAMPLE: Flame Strike

Prepare:
A dummy unit with no model, no attack enabled, invulnerable, locust, no shadow..


Trigger:
  • Sufferings of Hell
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Sufferings of Hell (Hero)
    • Actions
      • Set Real = 0.00
      • Set Caster = (Triggering unit)
      • Set CasLoc = (Position of (Triggering unit))
      • For each (Integer A) from 1 to 8, do (Actions)
        • Loop - Actions
          • -------- first --------
          • Unit - Create 1 Dummy Unit for (Owner of (Triggering unit)) at CasLoc facing default building facing degrees
          • Unit - Add Sufferings of Hell (Dummy) to (Last created unit)
          • Unit - Set level of Sufferings of Hell (Dummy) for (Last created unit) to (Level of Sufferings of Hell (Hero) for (Triggering unit))
          • Set LocOffset[(Integer A)] = (CasLoc offset by 400.00 towards Real degrees)
          • Unit - Order (Last created unit) to Human Blood Mage - Flame Strike LocOffset[(Integer A)]
          • Unit - Add a 10.00 second Generic expiration timer to (Last created unit)
          • -------- second --------
          • Unit - Create 1 Dummy Unit for (Owner of (Triggering unit)) at CasLoc facing default building facing degrees
          • Unit - Add Sufferings of Hell (Dummy) to (Last created unit)
          • Unit - Set level of Sufferings of Hell (Dummy) for (Last created unit) to (Level of Sufferings of Hell (Hero) for (Triggering unit))
          • Set LocOffset[((Integer A) + 3)] = (CasLoc offset by 800.00 towards Real degrees)
          • Unit - Order (Last created unit) to Human Blood Mage - Flame Strike LocOffset[((Integer A) + 3)]
          • Unit - Add a 10.00 second Generic expiration timer to (Last created unit)
          • -------- third --------
          • Unit - Create 1 Dummy Unit for (Owner of (Triggering unit)) at CasLoc facing default building facing degrees
          • Unit - Add Sufferings of Hell (Dummy) to (Last created unit)
          • Unit - Set level of Sufferings of Hell (Dummy) for (Last created unit) to (Level of Sufferings of Hell (Hero) for (Triggering unit))
          • Set LocOffset[((Integer A) + 6)] = (CasLoc offset by 1200.00 towards Real degrees)
          • Unit - Order (Last created unit) to Human Blood Mage - Flame Strike LocOffset[((Integer A) + 6)]
          • Unit - Add a 10.00 second Generic expiration timer to (Last created unit)
          • Set Real = (Real + (360.00 / 8.00))
          • Custom script: call RemoveLocation(udg_LocOffset[bj_forLoopAIndex])
          • Custom script: call RemoveLocation(udg_LocOffset[bj_forLoopAIndex + 3])
          • Custom script: call RemoveLocation(udg_LocOffset[bj_forLoopAIndex + 6])
      • Custom script: call RemoveLocation(udg_CasLoc)


And here you go, a succestul indi cast nova:

(Image)

FAQs:
Q: Since you said that DotA's Poison Nova is a Unit Nova, how did they make that?
A: They did that via unit group. To do so, you would have to force the unit to move via triggers and set a unit group for every ... second (see Sliding Tutorial).. In the unitgroup, you will pick everyone in that group and make another dummy unit cast a spell that does continuous damage..

I know how, but I'm not telling because I'm only giving the basics (besides, I'm too lazy).. maybe in the future I would IF abt a high ratio of ppl want

Q: Could I use a different one than Bladestorm?
A: Of course you can. You could do the one in Q[1] or use Permanent Immolation

Q: What if I use war stomp in the individual spell cast nova?
A: You'd have to set LocOffset first, then create the unit ON LocOffset

Q: Can we use a dummy unit that already has the dummy spell (in Line and Indi Cast)
A: Of course you could. Just remove "Unit - Add Ability"

Q: Could we use another spell besides the first or second spell casted in indi cast nova?
A: Of course you could. The output would be that the nearest will be something, then mid range is another, and the farther will be another and if there is one more farther, then another one etc..

Q: Could we use another distance other than 400 in Indi Cast Nova?
A: Yes you could. Just asking if you would do it >.>

From Windwalk:
Windwalk;818165 wrote:


Q:hi can you help me here cuz i really don't understand this part

Set LocOffset[(Integer A)] = (CasLoc offset by 400.00 towards Real degrees)

A: LocOffset is a Point Array Variable. CasLoc offset by.... is "Point with Polar Offset"...



[RIGHT]`TheHated`denmax / denzel94 Productions™
Genesis of the 3 J's Maximus © 2008 (Gens, James, Junmil, Jomar, Denzel)
[/RIGHT]

Click here to comment on this tutorial.
 
 
Blizzard Entertainment, Inc.
Silkroad Online Forums
Team Griffonrawl Trains Muay Thai and MMA fighters in Ohio.
Apex Steel Pipe - Buys and sells Steel Pipe.