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

Kinetic Orb [v1.2c]

  • Like
Reactions: Mgeterno11
Spell Description

Active Ability
Spell Type: Point Target
Cast Range: 1350 Range
Storm sends an orb filled with high magnetic energy towards the target point. When the orb lands at the target point, all nearby enemies around the orb will receive damage. The orb will then seek for the nearest hero within a certain limit of range of radius and pull the hero to the position of the orb over time, burning away the mana of the target over time.
Level 1: 200 landing damage with 275 AoE, up to 60 mana burn/sec over 1 second
Level 2: 275 landing damage with 300 AoE, up to 90 mana burn/sec over 1.25 seconds
Level 3: 350 landing damage with 325 AoE, up to 120 mana burn/sec over 1.5 seconds

Thanks to Cokemonkey11 for the video he made. Kinetic Orb[v1.2b]

This spell is actually just alter from Lightning Grappler as I thought of different idea. So, I made another spell that uses the same effects but it works differently.
WARNING: This spell requires camera bounds

  • Kinetic Orb Initialization
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- ======================================================== --------
      • -------- --------------------------------------------- Configurable --------------------------------------------- --------
      • -------- The ability being cast --------
      • Set KO_ability = Kinetic Orb
      • -------- The height of the dummy and the lightning --------
      • Set KO_height = 90.00
      • -------- The delay for the KO_intervalEffect --------
      • Set KO_effectCountDelay = 0.20
      • -------- The effect created at the position of dummy every 0.03 seconds --------
      • Set KO_dummyEffect = war3mapImported\OrbLightningX.mdx
      • -------- The effect that created at interval --------
      • Set KO_intervalEffect = Abilities\Weapons\Bolt\BoltImpact.mdl
      • -------- The effect that created when the target's being pulled --------
      • Set KO_pulledEffect = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
      • -------- The boolean that set whether to destroy trees when the nearest target is being pulled --------
      • Set KO_destroyTree = True
      • -------- Whenever a tree is within this range of radius of the target, the tree is destroyed --------
      • Set KO_destroyTreeRange = 170.00
      • -------- ----------------------------------------- Configurable End ----------------------------------------- --------
      • -------- ======================================================== --------
      • -------- ------------------------------------ Destroy Only Tree Setup ------------------------------------ --------
      • Set tempPoint = (Center of (Playable map area))
      • Unit - Create 1 Peasant for Neutral Passive at tempPoint facing Default building facing degrees
      • Set TreeDestroyer = (Last created unit)
      • Unit - Hide TreeDestroyer
      • Unit - Make TreeDestroyer Invulnerable
      • Custom script: call RemoveLocation (udg_tempPoint)
      • -------- ---------------------------------------------------- End --------------------------------------------------- --------
      • -------- ======================================================== --------
  • Kinetic Orb
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to KO_ability
    • Actions
      • Set tempUnit = (Triggering unit)
      • Set tempPoint = (Target point of ability being cast)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Terrain pathing at tempPoint of type Walkability is off) Equal to False
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • KO_indexSize Equal to 0
            • Then - Actions
              • Trigger - Turn on Kinetic Orb loop <gen>
            • Else - Actions
          • Set KO_indexSize = (KO_indexSize + 1)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • KO_indexSize Greater than KO_indexMax
            • Then - Actions
              • Set KO_index1[KO_indexSize] = KO_indexSize
              • Set KO_indexMax = KO_indexSize
            • Else - Actions
          • Set KO_index2 = KO_index1[KO_indexSize]
          • -------- ======================================================== --------
          • Set KO_caster[KO_index2] = tempUnit
          • -------- ======================================================== --------
          • -------- --------------------------------------------- Configurable --------------------------------------------- --------
          • Set tempReal = (Real((Level of KO_ability for KO_caster[KO_index2])))
          • -------- The duration (in seconds) for the dummy to reach the target point --------
          • Set KO_duration[KO_index2] = (1.75 - (0.25 x tempReal))
          • -------- The duration (in seconds) for the target to pull over to reach the dummy's position --------
          • Set KO_pullDuration[KO_index2] = (0.75 + (0.25 x tempReal))
          • -------- The damage dealt when the dummy reach the target point --------
          • Set KO_landDamage[KO_index2] = (125.00 + (75.00 x tempReal))
          • -------- The amount of mana burned (in second) when the nearest target is being pulled --------
          • Set KO_burnedMana[KO_index2] = (30.00 + (30.00 x tempReal))
          • -------- The area of effect for the damage dealt when the dummy reach the target point --------
          • Set KO_landDamageAoE[KO_index2] = (250.00 + (25.00 x tempReal))
          • -------- The area of effect that detects the nearest hero. If no hero is within this range, then the spell will immediately end. --------
          • Set KO_pullAoE[KO_index2] = (600.00 + (100.00 x tempReal))
          • -------- ----------------------------------------- Configurable End ----------------------------------------- --------
          • -------- ======================================================== --------
          • Set KO_target[KO_index2] = No unit
          • Set KO_spellEnd[KO_index2] = False
          • Set KO_getNearbyHero[KO_index2] = False
          • Set KO_pullDistance[KO_index2] = KO_pullAoE[KO_index2]
          • Set tempPoint2 = (Position of KO_caster[KO_index2])
          • Set KO_distance[KO_index2] = (Distance between tempPoint and tempPoint2)
          • Unit - Create 1 Kinetic Orb (dummy) for (Owner of KO_caster[KO_index2]) at tempPoint2 facing Default building facing degrees
          • Animation - Change KO_dummy[KO_index2] flying height to KO_height at 0.00
          • Set KO_dummy[KO_index2] = (Last created unit)
          • Set tempPoint3 = (Position of KO_dummy[KO_index2])
          • Set KO_angle[KO_index2] = (Angle from tempPoint3 to tempPoint)
          • Set KO_distanceTravel[KO_index2] = (0.03 x (KO_distance[KO_index2] / KO_duration[KO_index2]))
          • Custom script: set udg_tempZReal = GetLocationZ (udg_tempPoint2) + udg_KO_height
          • Custom script: set udg_tempZReal2 = GetLocationZ (udg_tempPoint3) + udg_KO_height
          • Custom script: set udg_KO_lightning[udg_KO_index2] = AddLightningEx("CLPB", true, GetLocationX(udg_tempPoint2), GetLocationY(udg_tempPoint2), udg_tempZReal, GetLocationX(udg_tempPoint3), GetLocationY(udg_tempPoint3), udg_tempZReal2)
          • Custom script: call RemoveLocation (udg_tempPoint3)
          • Custom script: call RemoveLocation (udg_tempPoint2)
        • Else - Actions
          • Set tempPlayerGroup = (Player group((Owner of tempUnit)))
          • -------- Use SimError if you want a better error message. I do not know how to use it. --------
          • Game - Display to tempPlayerGroup for 2.50 seconds the text: ...
          • -------- This tempReal is the value of mana cost by the spell --------
          • Set tempReal = 0.00
          • Set tempInteger = (Level of KO_ability for tempUnit)
          • Unit - Remove KO_ability from tempUnit
          • Unit - Add KO_ability to tempUnit
          • Unit - Set level of KO_ability for tempUnit to tempInteger
          • Unit - Set mana of tempUnit to ((Mana of tempUnit) + tempReal)
          • Custom script: call DestroyForce (udg_tempPlayerGroup)
      • Custom script: call RemoveLocation (udg_tempPoint)
  • Kinetic Orb loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer spellIndex) from 1 to KO_indexSize, do (Actions)
        • Loop - Actions
          • Set KO_index2 = KO_index1[spellIndex]
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • KO_spellEnd[KO_index2] Equal to False
              • (KO_caster[KO_index2] is alive) Equal to True
            • Then - Actions
              • -------- Just For Effect Purpose --------
              • Set tempPoint = (Position of KO_dummy[KO_index2])
              • Special Effect - Create a special effect at tempPoint using war3mapImported\OrbLightningX.mdx
              • Special Effect - Destroy (Last created special effect)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • KO_effectCount[KO_index2] Less than KO_effectCountDelay
                • Then - Actions
                  • Set KO_effectCount[KO_index2] = (KO_effectCount[KO_index2] + 0.03)
                • Else - Actions
                  • Set KO_effectCount[KO_index2] = 0.00
                  • Special Effect - Create a special effect at tempPoint using KO_intervalEffect
                  • Special Effect - Destroy (Last created special effect)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • KO_getNearbyHero[KO_index2] Equal to True
                    • Then - Actions
                      • Set tempPoint2 = (Position of KO_target[KO_index2])
                      • Special Effect - Create a special effect at tempPoint2 using KO_pulledEffect
                      • Special Effect - Destroy (Last created special effect)
                      • Custom script: call RemoveLocation (udg_tempPoint2)
                    • Else - Actions
              • Custom script: call RemoveLocation (udg_tempPoint)
              • -------- Functional Triggers --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • KO_distance[KO_index2] Greater than 0.00
                • Then - Actions
                  • Set KO_distance[KO_index2] = (KO_distance[KO_index2] - KO_distanceTravel[KO_index2])
                  • Set tempPoint = (Position of KO_caster[KO_index2])
                  • Set tempPoint2 = (Position of KO_dummy[KO_index2])
                  • Set tempPoint3 = (tempPoint2 offset by KO_distanceTravel[KO_index2] towards KO_angle[KO_index2] degrees)
                  • Unit - Move KO_dummy[KO_index2] instantly to tempPoint3
                  • Custom script: set udg_tempZReal = GetLocationZ (udg_tempPoint2) + udg_KO_height
                  • Custom script: set udg_tempZReal2 = GetLocationZ (udg_tempPoint3) + udg_KO_height
                  • Custom script: call MoveLightningEx (udg_KO_lightning[udg_KO_index2], true, GetLocationX(udg_tempPoint), GetLocationY(udg_tempPoint), udg_tempZReal, GetLocationX(udg_tempPoint3), GetLocationY(udg_tempPoint3), udg_tempZReal2)
                  • Custom script: call RemoveLocation (udg_tempPoint3)
                  • Custom script: call RemoveLocation (udg_tempPoint2)
                  • Custom script: call RemoveLocation (udg_tempPoint)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • KO_getNearbyHero[KO_index2] Equal to False
                    • Then - Actions
                      • Set tempPoint = (Position of KO_dummy[KO_index2])
                      • Custom script: set bj_wantDestroyGroup = true
                      • Unit Group - Pick every unit in (Units within KO_pullAoE[KO_index2] of tempPoint matching (((((Matching unit) is Magic Immune) Equal to False) and (((Matching unit) is in KO_pullGroup) Equal to False)) and ((((Matching unit) is A Hero) Equal to True) and ((((Matching unit) is alive) Equal t and do (Actions)
                        • Loop - Actions
                          • Set tempUnit = (Picked unit)
                          • Set tempPoint2 = (Position of tempUnit)
                          • Set tempReal = (Distance between tempPoint and tempPoint2)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • tempReal Less than KO_pullDistance[KO_index2]
                            • Then - Actions
                              • Set KO_pullDistance[KO_index2] = tempReal
                              • Set KO_pullDistanceTravel[KO_index2] = (0.03 x (KO_pullDistance[KO_index2] / KO_pullDuration[KO_index2]))
                              • Set KO_angle[KO_index2] = (Angle from tempPoint2 to tempPoint)
                              • Set KO_target[KO_index2] = tempUnit
                            • Else - Actions
                          • Custom script: call RemoveLocation (udg_tempPoint2)
                      • Custom script: set bj_wantDestroyGroup = true
                      • Unit Group - Pick every unit in (Units within KO_landDamageAoE[KO_index2] of tempPoint matching (((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Mechanical) Equal to False) and (((Matching unit) is Magic Immune) Equal to False))) and ((((Matching unit) is alive) and do (Actions)
                        • Loop - Actions
                          • Unit - Cause KO_caster[KO_index2] to damage tempUnit, dealing KO_landDamage[KO_index2] damage of attack type Spells and damage type Normal
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • KO_target[KO_index2] Equal to No unit
                        • Then - Actions
                          • Set KO_spellEnd[KO_index2] = True
                        • Else - Actions
                          • Set tempPoint2 = (Position of KO_target[KO_index2])
                          • Special Effect - Create a special effect at tempPoint using Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl
                          • Special Effect - Destroy (Last created special effect)
                          • Unit Group - Add KO_target[KO_index2] to KO_pullGroup
                          • Unit - Turn collision for KO_target[KO_index2] Off
                          • Lightning - Destroy KO_lightning[KO_index2]
                          • Custom script: set udg_KO_lightning[udg_KO_index2] = AddLightningEx("FORK", true, GetLocationX(udg_tempPoint), GetLocationY(udg_tempPoint), udg_tempZReal, GetLocationX(udg_tempPoint2), GetLocationY(udg_tempPoint2), udg_tempZReal2)
                          • Custom script: call RemoveLocation (udg_tempPoint2)
                          • Set KO_getNearbyHero[KO_index2] = True
                      • Custom script: call RemoveLocation (udg_tempPoint)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • KO_pullDistance[KO_index2] Greater than 0.00
                          • (KO_target[KO_index2] is alive) Equal to True
                        • Then - Actions
                          • Set KO_pullDistance[KO_index2] = (KO_pullDistance[KO_index2] - KO_pullDistanceTravel[KO_index2])
                          • Set tempPoint = (Position of KO_dummy[KO_index2])
                          • Set tempPoint2 = (Position of KO_target[KO_index2])
                          • Set tempPoint3 = (tempPoint2 offset by KO_pullDistanceTravel[KO_index2] towards KO_angle[KO_index2] degrees)
                          • Unit - Move KO_target[KO_index2] instantly to tempPoint3
                          • Set tempReal = (0.03 x KO_burnedMana[KO_index2])
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Mana of KO_target[KO_index2]) Less than or equal to tempReal
                            • Then - Actions
                              • Unit - Set mana of KO_target[KO_index2] to 0.00
                            • Else - Actions
                              • Unit - Set mana of KO_target[KO_index2] to ((Mana of KO_target[KO_index2]) - tempReal)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • KO_destroyTree Equal to True
                            • Then - Actions
                              • Destructible - Pick every destructible within KO_destroyTreeRange of tempPoint3 and do (Actions)
                                • Loop - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • (Current life of (Picked destructible)) Greater than 0.00
                                    • Then - Actions
                                      • Unit - Order TreeDestroyer to Harvest (Picked destructible)
                                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        • If - Conditions
                                          • (Current order of TreeDestroyer) Equal to (Order(harvest))
                                        • Then - Actions
                                          • Destructible - Kill (Picked destructible)
                                        • Else - Actions
                                      • Unit - Order TreeDestroyer to Stop
                                    • Else - Actions
                            • Else - Actions
                          • Custom script: call MoveLightningEx (udg_KO_lightning[udg_KO_index2], true, GetLocationX(udg_tempPoint), GetLocationY(udg_tempPoint), udg_tempZReal, GetLocationX(udg_tempPoint3), GetLocationY(udg_tempPoint3), udg_tempZReal2)
                          • Custom script: call RemoveLocation (udg_tempPoint3)
                          • Custom script: call RemoveLocation (udg_tempPoint2)
                          • Custom script: call RemoveLocation (udg_tempPoint)
                        • Else - Actions
                          • Set KO_spellEnd[KO_index2] = True
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • KO_getNearbyHero[KO_index2] Equal to True
                • Then - Actions
                  • Unit - Turn collision for KO_target[KO_index2] On
                  • Unit Group - Remove KO_target[KO_index2] from KO_pullGroup
                • Else - Actions
              • Lightning - Destroy KO_lightning[KO_index2]
              • Unit - Explode KO_dummy[KO_index2]
              • Set KO_index1[spellIndex] = KO_index1[KO_indexSize]
              • Set KO_index1[KO_indexSize] = KO_index2
              • Set KO_indexSize = (KO_indexSize - 1)
              • Set spellIndex = (spellIndex - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • KO_indexSize Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)


Changelog

v1.2c
- maximise the level of Hero
- disable fog of war and black mask
- hide dummy unit in minimap display
- make a note that I imported an icon

v1.2b
- added a .1 seconds follow through time
- renamed the Map Initialization trigger (misunderstood moderator's comment)

v1.2 (updated from moderator's comment)
- removed visibility modifying actions
- renamed "Map Initialisation" trigger to "Map Initialization";
- removed an unneeded native
- added variables to check whether to destroy trees and also the range to destroy trees
- used the ability variable, KO_ability for
  • Set tempReal = (Real((Level of Kinetic Orb for KO_caster[KO_index2])))
  • Set tempInteger = (Level of Kinetic Orb for tempUnit)
v1.1
- added more configurable at Map Initialisation
- added "How to Import";

v1.0
- spell released
Please feel free to give any constructive critics/comments

Credits

Special thanks to Tank-Commander for helping me so hard with this spell as I couldn't add a height to the lightning
Thanks to Codemonkey11 for the updates of 1.2c and the video he made
Thanks to Frankster for the model of the dummy: Orb of Lightning
Thanks to Hanky for his dynamic indexing system: [GUI] Dynamic Indexing Template
Keywords:
Jay the Editor, Kinetic Orb, Drag, Shock, Lightning, Electric
Contents

Kinetic Orb (Map)

Reviews
Approved Suggested changes Add some follow through time Rename Map Initialisation trigger to something like Kinetic Orb init Remove visibility modifying actions from Map Initialisation trigger There's an unneeded Custom script: call...

Moderator

M

Moderator

Reviewed by Maker, Kinetic Orb v1.2, 16th Mar 2012

Approved

Suggested changes
  • Add some follow through time
  • Rename Map Initialisation trigger to something like Kinetic Orb init
  • Remove visibility modifying actions from Map Initialisation trigger
  • There's an unneeded Custom script: call RemoveLocation (udg_tempPoint)
    in the THEN in Kinetic Orb trigger
  • Use the ability variable in Set tempReal = (Real((Level of Kinetic Orb for KO_caster[KO_index2])))
    and in Set tempInteger = (Level of Kinetic Orb for tempUnit)
  • Add "destroys trees" boolean tree destroy range real variable
 

Cokemonkey11

Spell Reviewer
Level 29
Joined
May 9, 2006
Messages
3,534
Hey there! The spell looks quite nice in game. I've made a video of it in action for you for users who are curious but don't want to spend the time downloading it themselves.

http://www.xfire.com/video/55ae5e/

Sorry for the music, I didn't realize xfire would record external sound.


In Review -

You should either make a better test map, or use a test map template. Both are good options. I dislike your test map because:

* Your 3 pre-placed heroes always fight with creeps
* There is no fast way to level up your hero
* There is no way to reset your hero's health/mana
* There is no way to reset creeps
* The Fog Mask is enabled

Here are examples of templates -
http://www.thehelper.net/forums/showthread.php/65846-Spell-Test-Map-Templates
http://www.hiveworkshop.com/forums/spells-569/redscores-spell-template-v1-02-a-110386/

Your Object Data:
* You did something that looks quite nice with 1 dummy unit! Very nice. Ideally however, you should attach the correct effects and stats to a standard dummy (dummy.mdx by Vexorian - see xe http://www.wc3c.net/showthread.php?t=101150)
* You should make a note that you've also imported a custom BTN

Triggering:
* You programmed a linear stack in GUI! I'm impressed, but also disappointed because it's GUI.
* It's very concise and, from what I can tell, doesn't leak.


Overall: You should learn vJass so you can make this without locations or public globals. But other than that your spell is simply too good to not give you at least 4/5.
 
Level 12
Joined
Aug 12, 2008
Messages
349
Hey there! The spell looks quite nice in game. I've made a video of it in action for you for users who are curious but don't want to spend the time downloading it themselves.

http://www.xfire.com/video/55ae5e/

Sorry for the music, I didn't realize xfire would record external sound.
Thanks for that :) I'll update my description later on. I never thought of till such extent because it's just a spell anyway. And, I'm don't know how to make it. haha.. :))

You should either make a better test map, or use a test map template. Both are good options. I dislike your test map because:

* Your 3 pre-placed heroes always fight with creeps
* There is no fast way to level up your hero
* There is no way to reset your hero's health/mana
* There is no way to reset creeps
* The Fog Mask is enabled
I'll fix that up for the 1st and 2nd comment and the 5th comment too.
The hero's health and mana is reaching a values that I don't think it will reach 0 by just receiving damage from the creeps unless you're going to test it for an hour or more.
I don't know how to reset creeps :p

Your Object Data:
* You did something that looks quite nice with 1 dummy unit! Very nice. Ideally however, you should attach the correct effects and stats to a standard dummy (dummy.mdx by Vexorian - see xe http://www.wc3c.net/showthread.php?t=101150)
* You should make a note that you've also imported a custom BTN
I'll take a look on it later on how's the stats of a standard dummy.
Yes, thank you. I'll make a note later on. Thanks for reminding that. :)

Triggering:
* You programmed a linear stack in GUI! I'm impressed, but also disappointed because it's GUI.
* It's very concise and, from what I can tell, doesn't leak.
I use triggering because I don't know anything about Jass/vJass scripts and I afraid spending my time in learning the scripts might consumes a lot of time. I now just got my result of public examination and preparing to further my studies. I always take these kind of editing as a pastime and never intend to master it. :)
 

Cokemonkey11

Spell Reviewer
Level 29
Joined
May 9, 2006
Messages
3,534
Thanks for that :) I'll update my description later on. I never thought of till such extent because it's just a spell anyway. And, I'm don't know how to make it. haha.. :))

I also don't know how to make a good one :D Try xfire video recorder though, it's literally that easy.

By the way it's not necessary to make a video of your spell if you don't want to. I just did it to be helpful.


I'll fix that up for the 1st and 2nd comment and the 5th comment too.
The hero's health and mana is reaching a values that I don't think it will reach 0 by just receiving damage from the creeps unless you're going to test it for an hour or more.
I don't know how to reset creeps :p

The 1st 2nd and 5th should be the most important ones anyway ^^

I use triggering because I don't know anything about Jass/vJass scripts and I afraid spending my time in learning the scripts might consumes a lot of time. I now just got my result of public examination and preparing to further my studies. I always take these kind of editing as a pastime and never intend to master it. :)

I'm in the same boat as you. I used to be adamant about sticking to GUI forever but after nearly 7 years of doing this as a past time, I finally decided to try out JASS and see what all the fuss is about, and I regret having waited so long. I'd be more than happy to teach you if you're interested to learn.

Otherwise, congrats again on the spell.
 
Level 12
Joined
Aug 12, 2008
Messages
349
I'm in the same boat as you. I used to be adamant about sticking to GUI forever but after nearly 7 years of doing this as a past time, I finally decided to try out JASS and see what all the fuss is about, and I regret having waited so long. I'd be more than happy to teach you if you're interested to learn.
But what's the difference between GUI and Jass? It's only about efficiency, isn't it?
 

Cokemonkey11

Spell Reviewer
Level 29
Joined
May 9, 2006
Messages
3,534
But what's the difference between GUI and Jass? It's only about efficiency, isn't it?

Efficient in many ways, yes. More efficient at the script end, more efficient for the programmer, more efficient for the reader, and more efficient when one wants to modify code.

There are additionally plenty of things that GUI simply can't do.

vJass let's you keep things modular and aesthetically pleasing - that's the important bit.
 
Level 12
Joined
Aug 12, 2008
Messages
349
Cokemonkey11 said:
Efficient in many ways, yes. More efficient at the script end, more efficient for the programmer, more efficient for the reader, and more efficient when one wants to modify code.

There are additionally plenty of things that GUI simply can't do.

vJass let's you keep things modular and aesthetically pleasing - that's the important bit.

I see. I'll try to dig up some time to learn about it bit by bit. My ideas currently still can be created through GUI and it will be boring if I would to search one-by-one of the Jass scripts on how to write it instead of using GUI. haha..

Alain.Mark said:
I spammed the spell by casting one after the other, and after that the kinetic orb would still move but its effects won't activate. :O
Probably because there are no any nearby heroes that are not being pulled. It detects only hero that is NOT being pulled within a range. The range can be adjust through KO_pulledAoE in "Kinetic Orb" trigger, under "Configurable" section.
 
Level 12
Joined
Aug 12, 2008
Messages
349
I already tried that, it doesn't work and it doesn't even deal damage. :O

edit: I thought this should deal damage to non-hero units. sorry for that. :|
No prob :) If you wanna make it to detect units too. You can try edit the condition in the loop trigger under "Functional triggers" section. This line:
  • Unit Group - Pick every unit in (Units within KO_pullAoE[KO_index2] of tempPoint matching (((((Matching unit) is Magic Immune) Equal to False) and (((Matching unit) is in KO_pullGroup) Equal to False)) and ((((Matching unit) is A Hero) Equal to True) and ((((Matching unit) is alive) Equal t and do (Actions)
 

Cokemonkey11

Spell Reviewer
Level 29
Joined
May 9, 2006
Messages
3,534
I see. I'll try to dig up some time to learn about it bit by bit. My ideas currently still can be created through GUI and it will be boring if I would to search one-by-one of the Jass scripts on how to write it instead of using GUI. haha..

Jass Newgen Pack has a really nice function list that looks like this -

H3nTf.png


And anyway if you can't figure out what function does what you need you can simply convert a gui trigger (edit -> convert to custom text)
 
Level 20
Joined
Aug 13, 2013
Messages
1,696
Review


Kinetic Orb [ v1.2c ]
This spell had been reviewed by jakeZinc
http://www.hiveworkshop.com/forums/members/jakezinc/#visitor_messaging

Trigger Code
  • Set tempPlayerGroup = (Player group((Owner of tempUnit)))
You can just use TriggeringPlayer instead of this.
  • Unit - Create 1 Kinetic Orb (dummy) for (Owner of KO_caster[KO_index2]) at tempPoint2 facing Default building facing degrees
you can use also TriggeringPlayer.You misplaced setting the variable here:
  • Animation - Change KO_dummy[KO_index2] flying height to KO_height at 0.00
  • Set KO_dummy[KO_index2] = (Last created unit)
. You can just filter the units inside the group block instead of matching unit...()... in here:
  • Unit Group - Pick every unit in (Units within KO_pullAoE[KO_index2] of tempPoint matching (((((Matching unit) is Magic Immune) Equal to False) and (((Matching unit) is in KO_pullGroup) Equal to False)) and ((((Matching unit) is A Hero) Equal to True) and ((((Matching unit) is alive) Equal t and do (Actions)
and here
  • Unit Group - Pick every unit in (Units within KO_landDamageAoE[KO_index2] of tempPoint matching (((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Mechanical) Equal to False) and (((Matching unit) is Magic Immune) Equal to False))) and ((((Matching unit) is alive) and do (Actions)
. Other than that none.
Documentation
The documentation is well good.
Configuration
The configuration of values must be in initialization not in execution because may the user harm the code:.
  • -------- ======================================================== --------
  • -------- --------------------------------------------- Configurable --------------------------------------------- --------
  • Set tempReal = (Real((Level of KO_ability for KO_caster[KO_index2])))
  • -------- The duration (in seconds) for the dummy to reach the target point --------
  • Set KO_duration[KO_index2] = (1.75 - (0.25 x tempReal))
  • -------- The duration (in seconds) for the target to pull over to reach the dummy's position --------
  • Set KO_pullDuration[KO_index2] = (0.75 + (0.25 x tempReal))
  • -------- The damage dealt when the dummy reach the target point --------
  • Set KO_landDamage[KO_index2] = (125.00 + (75.00 x tempReal))
  • -------- The amount of mana burned (in second) when the nearest target is being pulled --------
  • Set KO_burnedMana[KO_index2] = (30.00 + (30.00 x tempReal))
  • -------- The area of effect for the damage dealt when the dummy reach the target point --------
  • Set KO_landDamageAoE[KO_index2] = (250.00 + (25.00 x tempReal))
  • -------- The area of effect that detects the nearest hero. If no hero is within this range, then the spell will immediately end. --------
  • Set KO_pullAoE[KO_index2] = (600.00 + (100.00 x tempReal))
  • -------- ----------------------------------------- Configurable End ----------------------------------------- --------
  • -------- ======================================================== --------
The lightning model can be configurable:
  • AddLightningEx(&quot;CLPB&quot;, true, GetLocationX(udg_tempPoint2), GetLocationY(udg_tempPoint2), udg_tempZReal, GetLocationX(udg_tempPoint3), GetLocationY(udg_tempPoint3), udg_tempZReal2)
The special effect can be configurable:
  • Special Effect - Create a special effect at tempPoint using war3mapImported\OrbLightningX.mdx
  • Special Effect - Destroy (Last created special effect)
and this:
  • Special Effect - Create a special effect at tempPoint using Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl
  • Special Effect - Destroy (Last created special effect)
Pros
The spell is completely MUI and leakless.
Cons
The enemy units can get instantly killed which looks like odd, other than that none.
Importing Instruction
There's importing instruction tho.
Special Effects
The special effects are well executed and the movement of the lightning orb with the lightning effects is spiced up the spell which looks good =)).
Usefulness
Useful from Hero Arenas, it does pull units.
Suggestions
This can be merged into 3 line:
  • Set tempPoint = (Center of (Playable map area))
  • Unit - Create 1 Peasant for Neutral Passive at tempPoint facing Default building facing degrees
  • Set TreeDestroyer = (Last created unit)
  • Unit - Hide TreeDestroyer
  • Unit - Make TreeDestroyer Invulnerable
  • Custom script: call RemoveLocation (udg_tempPoint)
add a locust and harvest ability to the peasant because what if the user remove the harvest ability to the peasant so safety first ^^.
Description Tooltip
I like the style of the tooltip that makes the spell alive ! and it does support every levels, castrange and spell type.

jakeZinc Score Board
Rejected: 1-10
Unacceptable : 11-30
Lacking : 31-49
Useful : 50-69
Recommended : 70-90
Highly Recommended : 91-100
Director Cut : 101-105
Scores
1) Triggering - 15/20
2) Documentation - 8/10
3) Importing Instruction - 7/10
4) Special Effects - 12/15
5) Usefulness - 16/20
6) Tooltip - 10/10
7) Configuration - 5/10
Ratings
Total Score - 73/105
jakeZinc Rating - 3.5/5
Status - Recommended
 
Top