• 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.

Clonestar



Description

Launches a fabolous pony star (LOL! It's not, that was a joke) at the targeted angle for some distance.

After hitting one lucky bastard, the missile will split into 5 stars which will turn other colliding units into a clone of

the first one for some time. The stars will split again into 3 after hitting another unit.

How it Works


[trigger=Gui]Cast
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Clonestar
Actions
Set TempUnitA = (Triggering unit)
Set TempPlayerA = (Triggering player)
Set TempPointA = (Position of TempUnitA)
Set TempPointB = (Target point of ability being cast)
Set TempRealA = (Angle from TempPointA to TempPointB)
Set TempRealB = (Real((Level of (Ability being cast) for TempUnitA)))
-------- --------
Set StarSize = 0.00
Set StarModel = Abilities\Spells\Other\HealingSpray\HealBottleMissile.mdl
Set StarTail = Abilities\Weapons\FaerieDragonMissile\FaerieDragonMissile.mdl
Set StarInterval = 0.03
Set StarSpeed = 60.00
Set StarDistance = (800.00 + (200.00 x TempRealB))
Set StarCollision = 60.00
Set StarEffects = Abilities\Spells\Other\HealingSpray\HealBottleMissile.mdl
Set StarAttachment = chest
Set StarSplit = 5
Set StarWeaken = 2
Set StarRadius = 360.00
Set StarDuration = (7.00 x TempRealB)
-------- --------
Trigger - Run Init <gen> (checking conditions)




[/trigger]


[trigger=Gui]Init
Events
Conditions
Actions
Unit - Create 1 Dummy for TempPlayerA at TempPointA facing TempRealA degrees
Set TempUnitB = (Last created unit)
Unit Group - Add TempUnitB to GroupStar
Animation - Change TempUnitB flying height to 50.00 at 0.00
Animation - Change TempUnitB's size to (StarSize%, 0.00%, 0.00%) of its original size
Special Effect - Create a special effect attached to the origin of TempUnitB using StarModel
Custom script: set udg_TempRealB = ( udg_TempRealA * bj_DEGTORAD )
Custom script: call SetUnitX( udg_TempUnitB, GetUnitX( udg_TempUnitA ) + 50 * Cos( udg_TempRealB))
Custom script: call SetUnitY( udg_TempUnitB, GetUnitY( udg_TempUnitA ) + 50 * Sin( udg_TempRealB))
Custom script: call RemoveLocation ( udg_TempPointA )
Custom script: call RemoveLocation ( udg_TempPointB )
-------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
Custom script: set udg_TempIntegerA = GetHandleId( udg_TempUnitB )
Hashtable - Save Handle OfTempUnitA as 0 of TempIntegerA in HashtableStar
Hashtable - Save TempRealA as 1 of TempIntegerA in HashtableStar
Hashtable - Save Handle Of(Last created special effect) as 2 of TempIntegerA in HashtableStar
Hashtable - Save StarTail as 3 of TempIntegerA in HashtableStar
Hashtable - Save StarInterval as 4 of TempIntegerA in HashtableStar
Hashtable - Save StarSpeed as 5 of TempIntegerA in HashtableStar
Hashtable - Save StarDistance as 6 of TempIntegerA in HashtableStar
Hashtable - Save StarCollision as 7 of TempIntegerA in HashtableStar
Hashtable - Save StarEffects as 8 of TempIntegerA in HashtableStar
Hashtable - Save StarAttachment as 9 of TempIntegerA in HashtableStar
Hashtable - Save StarSplit as 10 of TempIntegerA in HashtableStar
Hashtable - Save StarWeaken as 11 of TempIntegerA in HashtableStar
Hashtable - Save StarRadius as 12 of TempIntegerA in HashtableStar
Hashtable - Save StarDuration as 13 of TempIntegerA in HashtableStar
-------- --------
Hashtable - Save StarSize as -1 of TempIntegerA in HashtableStar
Hashtable - Save StarModel as -2 of TempIntegerA in HashtableStar
-------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Loop <gen> is on) Equal to False
Then - Actions
Trigger - Turn on Loop <gen>
Else - Actions





[/trigger]


[trigger=Gui]Loop
Events
Time - Every 0.03 seconds of game time
Conditions
Actions
Unit Group - Pick every unit in GroupStar and do (Actions)
Loop - Actions
Set TempUnitA = (Picked unit)
Custom script: set udg_TempIntegerA = GetHandleId( udg_TempUnitA )
Set TempUnitB = (Load 0 of TempIntegerA in HashtableStar)
Set TempPlayerA = (Owner of TempUnitB)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(3 is stored as a String of TempIntegerA in HashtableStar) Equal to True
Then - Actions
Set StarSize = (Load -1 of TempIntegerA from HashtableStar)
Set StarModel = (Load -2 of TempIntegerA from HashtableStar)
Set StarTail = (Load 3 of TempIntegerA from HashtableStar)
Set StarInterval = (Load 4 of TempIntegerA from HashtableStar)
Set StarSpeed = (Load 5 of TempIntegerA from HashtableStar)
Set StarDistance = (Load 6 of TempIntegerA from HashtableStar)
Set StarCollision = (Load 7 of TempIntegerA from HashtableStar)
Set StarEffects = (Load 8 of TempIntegerA from HashtableStar)
Set StarAttachment = (Load 9 of TempIntegerA from HashtableStar)
Set StarSplit = (Load 10 of TempIntegerA from HashtableStar)
Set StarWeaken = (Load 11 of TempIntegerA from HashtableStar)
Set StarRadius = (Load 12 of TempIntegerA from HashtableStar)
Set StarDuration = (Load 13 of TempIntegerA from HashtableStar)
-------- --------
Set TempRealA = (Load 1 of TempIntegerA from HashtableStar)
Set TempRealB = ((Load -6 of TempIntegerA from HashtableStar) + StarSpeed)
Custom script: set udg_TempRealC = ( udg_TempRealA * bj_DEGTORAD )
Custom script: call SetUnitX( udg_TempUnitA, GetUnitX( udg_TempUnitA ) + udg_StarSpeed * Cos( udg_TempRealC))
Custom script: call SetUnitY( udg_TempUnitA, GetUnitY( udg_TempUnitA ) + udg_StarSpeed * Sin( udg_TempRealC))
Set TempPointA = (Position of TempUnitA)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TempRealB Less than StarDistance
(Terrain pathing at TempPointA of type Walkability is off) Equal to False
Then - Actions
Hashtable - Save TempRealB as -6 of TempIntegerA in HashtableStar
Set TempRealB = ((Load -4 of TempIntegerA from HashtableStar) + 0.03)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TempRealB Greater than or equal to StarInterval
Then - Actions
Hashtable - Save 0.00 as -4 of TempIntegerA in HashtableStar
Special Effect - Create a special effect at TempPointA using StarTail
Special Effect - Destroy (Last created special effect)
Else - Actions
Hashtable - Save TempRealB as -4 of TempIntegerA in HashtableStar
Set TempGroupA = (Units within StarCollision of TempPointA matching (((((Matching unit) is alive) Equal to True) and (((Matching unit) is A ground unit) Equal to True)) and (((Matching unit) is A structure) Equal to False)))
Unit Group - Pick every unit in (Random 1 units from TempGroupA) and do (Actions)
Loop - Actions
Set TempUnitC = (Load -3 of TempIntegerA in HashtableStar)
Set TempUnitD = (Picked unit)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TempUnitD Not equal to TempUnitC
(TempUnitD is an illusion) Equal to False
(TempUnitD is Magic Immune) Equal to False
(Unit-type of TempUnitD) Not equal to (Unit-type of TempUnitC)
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TempUnitC Equal to No unit
Then - Actions
Set TempUnitC = TempUnitD
Hashtable - Save Handle OfTempUnitC as -3 of TempIntegerA in HashtableStar
Special Effect - Create a special effect attached to the StarAttachment of TempUnitC using StarEffects
Else - Actions
Set TempPlayerB = (Owner of TempUnitD)
Unit - Create 1 Dummy for TempPlayerB at TempPointA facing Default building facing degrees
Set TempUnitE = (Last created unit)
Custom script: call SetUnitX( udg_TempUnitE, GetUnitX( udg_TempUnitC ))
Custom script: call SetUnitY( udg_TempUnitE, GetUnitY( udg_TempUnitC ))
Unit - Add clonestar to TempUnitE
Custom script: call IssueTargetOrderById(udg_TempUnitE, 852274, udg_TempUnitC)
Custom script: call SetUnitX( udg_TempUnitF, GetUnitX( udg_TempUnitD ))
Custom script: call SetUnitY( udg_TempUnitF, GetUnitY( udg_TempUnitD ))
Special Effect - Create a special effect attached to the StarAttachment of TempUnitF using StarEffects
Unit - Set life of TempUnitF to (Percentage life of TempUnitD)%
Unit - Remove TempUnitE from the game
-------- --------
Unit - Hide TempUnitD
Unit - Pause TempUnitD
For each (Integer TempIntegerB) from 1 to 12, do (Actions)
Loop - Actions
Set TempPlayerB = (Player(TempIntegerB))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(TempUnitD is selected by TempPlayerB) Equal to True
Then - Actions
Selection - Add TempUnitF to selection for TempPlayerB
Else - Actions
Custom script: set udg_TempIntegerB = GetHandleId( udg_TempUnitD )
Hashtable - Save Handle OfTempUnitF as 0 of TempIntegerB in HashtableStar
Hashtable - Save StarDuration as 1 of TempIntegerB in HashtableStar
Unit Group - Add TempUnitD to GroupStar
Hashtable - Save StarDistance as -6 of TempIntegerA in HashtableStar
Special Effect - Destroy (Last created special effect)
-------- --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
StarSplit Greater than 0
Then - Actions
For each (Integer TempIntegerB) from 1 to StarSplit, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
StarSplit Greater than 1
Then - Actions
Set TempRealB = ((StarRadius / (Real(StarSplit))) x (Real(TempIntegerB)))
Set TempRealB = ((TempRealA + TempRealB) - (StarRadius / 1.66))
Else - Actions
Set TempRealB = TempRealA
Unit - Create 1 Dummy for TempPlayerA at TempPointA facing TempRealB degrees
Set TempUnitE = (Last created unit)
Unit Group - Add TempUnitE to GroupStar
Animation - Change TempUnitE flying height to 50.00 at 0.00
Animation - Change TempUnitE's size to (StarSize%, 0.00%, 0.00%) of its original size
Special Effect - Create a special effect attached to the origin of TempUnitE using StarModel
Custom script: call SetUnitX( udg_TempUnitE, GetUnitX( udg_TempUnitA ))
Custom script: call SetUnitY( udg_TempUnitE, GetUnitY( udg_TempUnitA ))
-------- --------
Custom script: set udg_TempIntegerC = GetHandleId( udg_TempUnitE )
Hashtable - Save Handle OfTempUnitB as 0 of TempIntegerC in HashtableStar
Hashtable - Save TempRealB as 1 of TempIntegerC in HashtableStar
Hashtable - Save Handle Of(Last created special effect) as 2 of TempIntegerC in HashtableStar
Hashtable - Save StarTail as 3 of TempIntegerC in HashtableStar
Hashtable - Save StarInterval as 4 of TempIntegerC in HashtableStar
Hashtable - Save StarSpeed as 5 of TempIntegerC in HashtableStar
Hashtable - Save StarDistance as 6 of TempIntegerC in HashtableStar
Hashtable - Save StarCollision as 7 of TempIntegerC in HashtableStar
Hashtable - Save StarEffects as 8 of TempIntegerC in HashtableStar
Hashtable - Save StarAttachment as 9 of TempIntegerC in HashtableStar
Hashtable - Save (StarSplit - StarWeaken) as 10 of TempIntegerC in HashtableStar
Hashtable - Save StarWeaken as 11 of TempIntegerC in HashtableStar
Hashtable - Save StarRadius as 12 of TempIntegerC in HashtableStar
Hashtable - Save StarDuration as 13 of TempIntegerC in HashtableStar
-------- --------
Hashtable - Save StarSize as -1 of TempIntegerC in HashtableStar
Hashtable - Save StarModel as -2 of TempIntegerC in HashtableStar
Hashtable - Save Handle OfTempUnitC as -3 of TempIntegerC in HashtableStar
Else - Actions
Else - Actions
Custom script: call DestroyGroup ( udg_TempGroupA )
Else - Actions
Special Effect - Destroy (Load 2 of TempIntegerA in HashtableStar)
Unit - Remove TempUnitA from the game
Unit Group - Remove TempUnitA from GroupStar
Hashtable - Clear all child hashtables of child TempIntegerA in HashtableStar
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in GroupStar) Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
Custom script: call RemoveLocation ( udg_TempPointA )
Else - Actions
Set TempRealA = ((Load 1 of TempIntegerA from HashtableStar) - 0.03)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TempRealA Greater than 0.00
(TempUnitB is alive) Equal to True
Then - Actions
Unit - Make TempUnitA face (Facing of TempUnitB) over 0.00 seconds
Custom script: call SetUnitX( udg_TempUnitA, GetUnitX( udg_TempUnitB ))
Custom script: call SetUnitY( udg_TempUnitA, GetUnitY( udg_TempUnitB ))
Hashtable - Save TempRealA as 1 of TempIntegerA in HashtableStar
Else - Actions
Unit - Unhide TempUnitA
Unit - Unpause TempUnitA
Unit - Set life of TempUnitA to (Percentage life of TempUnitB)%
Unit - Kill TempUnitB
Custom script: call SetUnitX( udg_TempUnitA, GetUnitX( udg_TempUnitB ))
Custom script: call SetUnitY( udg_TempUnitA, GetUnitY( udg_TempUnitB ))
For each (Integer TempIntegerB) from 1 to 12, do (Actions)
Loop - Actions
Set TempPlayerB = (Player(TempIntegerB))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(TempUnitB is selected by TempPlayerB) Equal to True
Then - Actions
Selection - Add TempUnitA to selection for TempPlayerB
Else - Actions
-------- --------
Unit Group - Remove TempUnitA from GroupStar
Hashtable - Clear all child hashtables of child TempIntegerA in HashtableStar
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in GroupStar) Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions



[/trigger]
Read This

- Don't tell me to use the "prop angle" thing, I used "Pause" intentionally.
- And please, don't comment about the font being black. Here's my reply in advance: I like it that way!

Keywords:
COOL, EYE-CANDY, clone, star, missile, splitting, illusion, pony
Contents

Clonestar (Map)

Reviews
Clonestar | Reviewed by Maker | 25th Feb 2013 APPROVED The ability is MUI and leakless and has nice effects I recommend that you use a setup trigger where you create the hashtable, set up variables for the...

Moderator

M

Moderator


Clonestar | Reviewed by Maker | 25th Feb 2013
APPROVED


126248-albums6177-picture66521.png


  • The ability is MUI and leakless and has nice effects
126248-albums6177-picture66523.png


  • I recommend that you use a setup trigger where you create
    the hashtable, set up variables for the ability, dummy type
    and effects
[tr]



Clonestar | Reviewed by Maker | 24th Feb 2013
APPROVED


126248-albums6177-picture66521.png


  • The ability is MUI and leakless and has nice effects
126248-albums6177-picture66523.png


  • I recommend that you use a setup trigger where you create
    the hashtable, set up variables for the ability, dummy type
    and effects
  • Selected enemy units are removed from selection
  • Use in-game screenshot
[tr]
 

Wrda

Spell Reviewer
Level 28
Joined
Nov 18, 2012
Messages
1,993
And please, don't comment about the font being black. Here's my reply in advance: I like it that way!
Black font isn't good here...It doesn't have anything to do with like or dislike, but it's hard to read...
Launches a fabolous pony star (LOL! It's not, that was a joke) at the targeted angle for some distance. After hitting one lucky bastard, the missile will split into 5 stars which will turn other colliding units into a clone of the first one for some time. The stars will split again into 3 after hitting another unit.
This needs proper description, not jokes. xd
 
Don't modify a unit for your dummy, create your own unit, and use that, additionally the dummy unit should be a configurable, additionally, attach the ability to a hero unit rather than a regular unit.

I'd also suggest adding "Base" values and "Per level" values to your configuration to allow greater control of statisticss.

And definitely change that tooltip to something more useable in a normal map rather than being a joke-tooltip.

Also you don't need to add/remove crow form if your dummy has movement speed and a movement type of flying, I'd suggest basing it off the locust unit for undead
 
@Lichkings slave - Hell yeah! You're so cool! xD
*Bro-fist*

@Tank-Commander - Sorry, I didn't know WCIII modding is a serious business xD
I think the description is okay, as I already had explained the effects of the ability.
But I don't understand the point of using a Hero unit. Every time you test it, you will need to select the hero, press the "Red-Plus" button then level-up the ability, and once the ability is level 3, you cannot change it back to its previous level, or if you do, I'm sure you will use a trigger too, I don't like it. I think 'unit + pressing ESC' is the fastest way to test a spell.
 
The only thing that is important here is the configuration
and also the prefixes.

Also,don't use locations in SetUnitX/Y, it looks ugly :D
Just use GetUnitX(unit) + dist * Cos(angle * bj_DEGTORAD)
GetUnitY(unit) + dist * Sin(angle * bj_DEGTORAD)

JASS:
function PolarProjectionBJ takes location source, real dist, real angle returns location

    local real x = GetLocationX(source) + dist * Cos(angle * bj_DEGTORAD)

    local real y = GetLocationY(source) + dist * Sin(angle * bj_DEGTORAD)

    return Location(x, y)

endfunction

Blizzard uses that kind of method too,though they use locations.They love leaky things
 
The only thing that is important here is the configuration
and also the prefixes.
Agreed! Thank you for pointing that out.

But I'm using that location (TempPointB) for picking units & for creating special effects too, I can't use your method, sadly.

I'm really excited to get some comments about the SPELL guys. I appreciate the help, but can you at least say something like "the spell is cool" or "this spell sucks!" after the criticism? But if you don't want to, that's okay.
 
Even better, before Getting the x/y multiply the angle by bj_DEGTORAD so that you only run that calculation once

I.e.

  • Custom script: set udg_Angle = udg_Angle * bj_DEGTORAD
  • Custom script: SetUnitX(GetUnitX(udg_unit) + udg_distance * Cos(udg_angle))
  • Custom script: SetUnitY(GetUnitY(udg_unit) + udg_distance * Sin(udg_angle))
Edit: As for comments on the effect, it looks pretty neat, though it shouldn't really be able to change units into the same type as it already is, i.e. turn a peon into a peon, miught want to consider that as a check in the conditions. other than that I'm rather fond of the effects
 
@Almia & Tank-Commander - Thank you masters, I've learned another trick!

@Archange1 - What's with that PM? Prove to me that you are a better spell maker, then I will listen. I won't bother editing my spell (nor the description) just for the likes of you right now, sorry.
Btw, I can't get your screenshot working so I made one. At least your screenshot is better. Lol!

@xgeneralthorx - Yeah, this is a bamboo spell. Thanks for the comment.

Updated!
 
Level 14
Joined
Dec 29, 2009
Messages
931
@Archange1 - What's with that PM? Prove to me that you are a better spell maker, then I will listen. I won't bother editing my spell (nor the description) just for the likes of you right now, sorry.
Btw, I can't get your screenshot working so I made one. At least your screenshot is better. Lol!
I never said your spell was bad, but that I liked it.

I was simply saying that the jokes were unnecessary and that you would need a screenshot.
I even liked the spell so much I gave you a screenshot. :(

Sorry to hear it wouldn't work.
But there's no need for me to prove anything.
 
Level 10
Joined
Jun 9, 2012
Messages
826
Neat spell there, buddy! I'd like to see this spell in the hands of a pro :). This spell could really turn the tide of war easily, or bring mishap to his own allies lol.

Edit: Noticed a lil something...when i turned into a peon, the caster automatically re-cast the spell at where he cast it again even when i try to stop it. Is that intentional?
 
Top