|
|
|
|
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"
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
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
- 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)
- 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)
- 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:
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.
|
|
|
|
|
Designed by Arkheno
2005 Blizzard
Entertainment®
Blizzard Entertainment is a trademark or registered trademark of Blizzard
Entertainment, Inc. in the U.S. and/or other countries. All rights
reserved. |
|