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

World's End v.1.0f

  • Like
Reactions: Doomlord
My first spell!

Totally dependent on Kingz' projectile system, this spell will create 4 waves of 7 flame missiles (At level 1) that spin it's way onto the target, dealing damage to everything the missiles encounter.

I would like to add some things in the spell that would make it more complete, i.e. make it wait in certain parts of the loop to reduce change of lagging, stop the target from moving when hit, so that the missiles would look more accurate, and making it deal a proper AoE damage; but alas, I do not yet possess the knowledge in triggering to do this, so I thought uploading it would also give me what I'm looking for.

In the spell's current state, I would personally give it a 3/5, but it is still pretty usable in-game, despite some problems I've been having.

I would like and love to hear feedback from the great spell makers of the Hive, especially for their reviews and insights on the spell.

I will gladly take your criticisms and comments about this spell, including the reviewer's feedback, and I will not do so under the assumption that 'a student is only as good as his teacher'.

Now, for the remaining parts:


Since this is just version 1.0, these will be bound to change.

  • WE Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Configuration --------
      • -------- -------------------------------------------------- --------
      • -------- How far the flames are summoned from the target: --------
      • Set WE_Offset[1] = 300.00
      • Set WE_Offset[2] = 400.00
      • Set WE_Offset[3] = 500.00
      • -------- How much the flames damage the target every 0.03 seconds: --------
      • Set WE_Damage[1] = 10.00
      • Set WE_Damage[2] = 20.00
      • Set WE_Damage[3] = 30.00
      • -------- How long it will take each wave of flames to reach the target: (taken in percent) --------
      • Set WE_TimeToReach[1] = 0.50
      • Set WE_TimeToReach[2] = 0.40
      • Set WE_TimeToReach[3] = 0.20
      • -------- Waves of flames created: --------
      • Set WE_Maxloop[1] = 4
      • Set WE_Maxloop[2] = 5
      • Set WE_Maxloop[3] = 6
      • -------- Missiles created with each wave: --------
      • Set WE_MaxMissiles[1] = 5
      • Set WE_MaxMissiles[2] = 6
      • Set WE_MaxMissiles[3] = 7
      • -------- Should the flames arc whilst moving? --------
      • Set WE_Arcs[1] = True
      • Set WE_Arcs[2] = True
      • Set WE_Arcs[3] = True
      • -------- Distance of the arcs with each wave: (Formula: MaxLoop * arc_dist = increment between arcs with each wave) --------
      • Set WE_ArcDist[1] = 75.00
      • Set WE_ArcDist[2] = 85.00
      • Set WE_ArcDist[3] = 95.00
      • -------- Missiles move in a parabolic form: --------
      • Set WE_ParabolaBoolean[1] = True
      • Set WE_ParabolaBoolean[2] = True
      • Set WE_ParabolaBoolean[3] = True
      • -------- Maximum height missiles reach: --------
      • Set WE_ParabolaHeight[1] = 200.00
      • Set WE_ParabolaHeight[2] = 300.00
      • Set WE_ParabolaHeight[3] = 400.00
      • -------- The missile's model path: --------
      • Set WE_MSFX[1] = Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl
      • Set WE_MSFX[2] = Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl
      • Set WE_MSFX[3] = Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl
      • -------- The sfx created on the missile's impact: --------
      • Set WE_MISFX[1] = Abilities\Spells\Other\Doom\DoomDeath.mdl
      • Set WE_MISFX[2] = Abilities\Spells\Other\Doom\DoomDeath.mdl
      • Set WE_MISFX[3] = Abilities\Spells\Other\Doom\DoomDeath.mdl
      • -------- -------------------------------------------------- --------
      • -------- End Configuration --------



  • WE Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to World's End
    • Actions
      • Set WE_Caster = (Triggering unit)
      • Set WE_Target = (Target unit of ability being cast)
      • Set WE_Level = (Level of World's End for WE_Caster)
      • Set MS_dmg_source = WE_Caster
      • Set MS_owner = (Owner of WE_Caster)
      • Set MS_create_point = (Position of WE_Caster)
      • Set MS_target_point = (Position of WE_Target)
      • Set MS_damage = 10.00
      • Set MS_seconds_to_reach = 0.20
      • Set MS_angle = (Angle from MS_create_point to MS_target_point)
      • Set MS_distance = (Distance between MS_create_point and MS_target_point)
      • Set MS_missile_gfx = WE_MSFX[WE_Level]
      • Set MS_impact_gfx = WE_MISFX[WE_Level]
      • Set MS_unit_hit_eff = <Empty String>
      • Set MS_arcs = False
      • Set MS_arc_dist = 0.00
      • Set MS_arc_type = 1
      • Set MS_parabola = False
      • Set MS_parabola_height = 0.00
      • Trigger - Run MS init <gen> (ignoring conditions)
      • Set WE_TempPoint = (Position of WE_Target)
      • Unit - Create 1 Dummy/Missile for MS_owner at WE_TempPoint facing Default building facing degrees
      • Set WE_Dummy = (Last created unit)
      • Unit - Add War Stomp to WE_Dummy
      • Unit - Order WE_Dummy to Orc Tauren Chieftain - War Stomp
      • Unit - Add a 0.80 second Generic expiration timer to WE_Dummy
      • Unit - Remove War Stomp from WE_Dummy
      • For each (Integer WE_LoopInt) from 1 to WE_Maxloop[WE_Level], do (Actions)
        • Loop - Actions
          • Unit - Order WE_Target to Stop
          • For each (Integer WE_TempInt) from 1 to WE_MaxMissiles[WE_Level], do (Actions)
            • Loop - Actions
              • Set MS_dmg_source = WE_Caster
              • Set MS_create_point = (WE_TempPoint offset by WE_Offset[WE_Level] towards ((Real(WE_TempInt)) x (360.00 / (Real(WE_MaxMissiles[WE_Level])))) degrees)
              • Set MS_target_point = WE_TempPoint
              • Set MS_damage = WE_Damage[WE_Level]
              • Set MS_seconds_to_reach = ((Real(WE_LoopInt)) x WE_TimeToReach[WE_Level])
              • Set MS_angle = (Angle from MS_create_point to MS_target_point)
              • Set MS_distance = (Distance between MS_create_point and MS_target_point)
              • Set MS_missile_gfx = WE_MSFX[WE_Level]
              • Set MS_impact_gfx = WE_MISFX[WE_Level]
              • Set MS_unit_hit_eff = Objects\Spawnmodels\Orc\Orcblood\BattrollBlood.mdl
              • Set MS_arcs = WE_Arcs[WE_Level]
              • Set MS_arc_dist = ((Real(WE_LoopInt)) x WE_ArcDist[WE_Level])
              • Set MS_arc_type = 1
              • Set MS_parabola = WE_ParabolaBoolean[WE_Level]
              • Set MS_parabola_height = WE_ParabolaHeight[WE_Level]
              • Trigger - Run MS init <gen> (ignoring conditions)
      • Custom script: call RemoveLocation(udg_MS_create_point)
      • Custom script: call RemoveLocation(udg_MS_target_point)
      • Custom script: call RemoveLocation(udg_WE_TempPoint)





  • MS init
    • Events
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • MS_index[1] Equal to 0
        • Then - Actions
          • Set MS_dyn_index = 0
          • Trigger - Turn on MS loop <gen>
        • Else - Actions
      • Set MS_index[1] = (MS_index[1] + 1)
      • Set MS_index_selected = False
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • MS_dyn_index Less than MS_index[2]
          • MS_dyn_index Not equal to 0
          • MS_empty_index[MS_dyn_index] Equal to True
        • Then - Actions
          • Set MS_index_selected = True
        • Else - Actions
          • For each (Integer MS_index[0]) from 1 to MS_index[2], do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • MS_empty_index[MS_index[0]] Equal to True
                  • MS_index_selected Equal to False
                • Then - Actions
                  • Set MS_dyn_index = MS_index[0]
                  • Set MS_index_selected = True
                • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • MS_index_selected Equal to False
            • Then - Actions
              • Set MS_index[2] = (MS_index[2] + 1)
              • Set MS_dyn_index = MS_index[2]
            • Else - Actions
      • Set MS_empty_index[MS_dyn_index] = False
      • Unit - Create 1 Dummy/Missile for MS_owner at MS_create_point facing MS_angle degrees
      • Unit - Add Storm Crow Form to (Last created unit)
      • Unit - Remove Storm Crow Form from (Last created unit)
      • Unit - Turn collision for (Last created unit) Off
      • Unit - Move (Last created unit) instantly to MS_create_point
      • Special Effect - Create a special effect attached to the chest of (Last created unit) using MS_missile_gfx
      • Set MS_missile_eff[MS_dyn_index] = (Last created special effect)
      • Set MS_missile[MS_dyn_index] = (Last created unit)
      • Set MS_dmg_source_ex[MS_dyn_index] = MS_dmg_source
      • Set MS_distance_max[MS_dyn_index] = MS_distance
      • Set MS_angle_ex[MS_dyn_index] = MS_angle
      • Set MS_speed_ex[MS_dyn_index] = ((MS_distance_max[MS_dyn_index] / MS_seconds_to_reach) x 0.03)
      • Set MS_player_check[MS_dyn_index] = MS_owner
      • Set MS_damage_ex[MS_dyn_index] = MS_damage
      • Set MS_arcs_ex[MS_dyn_index] = MS_arcs
      • Set MS_parabola_ex[MS_dyn_index] = MS_parabola
      • Set MS_impact_gfx_ex[MS_dyn_index] = MS_impact_gfx
      • Set MS_unit_hit_eff_ex[MS_dyn_index] = MS_unit_hit_eff
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • MS_arc_type Equal to 1
        • Then - Actions
          • Set MS_arc_core_angle[MS_dyn_index] = (MS_angle_ex[MS_dyn_index] + 90.00)
          • Set MS_arc_distance_ex[MS_dyn_index] = MS_arc_dist
        • Else - Actions
          • Set MS_arc_core_angle[MS_dyn_index] = (MS_angle_ex[MS_dyn_index] - 90.00)
          • Set MS_arc_distance_ex[MS_dyn_index] = MS_arc_dist
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • MS_parabola Equal to True
        • Then - Actions
          • Set MS_parabola_height_ex[MS_dyn_index] = MS_parabola_height
        • Else - Actions
          • Set MS_parabola_height_ex[MS_dyn_index] = (Current flying height of MS_missile[MS_dyn_index])
      • Set MS_distance_current[MS_dyn_index] = 0.00
      • Set MS_calc_real[1] = (X of MS_create_point)
      • Set MS_calc_real[2] = (Y of MS_create_point)
      • Set MS_calc_real[3] = (X of MS_target_point)
      • Set MS_calc_real[4] = (Y of MS_target_point)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • MS_calc_real[1] Equal to MS_calc_real[3]
          • MS_calc_real[2] Equal to MS_calc_real[4]
        • Then - Actions
          • Set MS_speed_ex[MS_dyn_index] = 10.00
          • Set MS_distance_max[MS_dyn_index] = MS_speed_ex[MS_dyn_index]
        • Else - Actions
      • Set MS_build_point[MS_dyn_index] = (Position of MS_missile[MS_dyn_index])
      • Set MS_get_X[MS_dyn_index] = (X of MS_build_point[MS_dyn_index])
      • Set MS_get_Y[MS_dyn_index] = (Y of MS_build_point[MS_dyn_index])
      • Custom script: call RemoveLocation(udg_MS_build_point[udg_MS_dyn_index])



  • MS loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer MS_index[3]) from 1 to MS_index[2], do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • MS_missile[MS_index[3]] Not equal to No unit
            • Then - Actions
              • Set MS_temp_point[0] = (Point(MS_get_X[MS_index[3]], MS_get_Y[MS_index[3]]))
              • Set MS_temp_point[1] = (Position of MS_missile[MS_index[3]])
              • Set MS_distance_current[MS_index[3]] = (MS_distance_current[MS_index[3]] + MS_speed_ex[MS_index[3]])
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • MS_arcs_ex[MS_index[3]] Equal to True
                • Then - Actions
                  • Set MS_calc_real[1] = MS_arc_distance_ex[MS_index[3]]
                  • Set MS_calc_real[2] = MS_distance_max[MS_index[3]]
                  • Set MS_calc_real[3] = MS_distance_current[MS_index[3]]
                  • Custom script: set udg_MS_calc_real[4] = ( 4 * udg_MS_calc_real[1] / udg_MS_calc_real[2] ) * ( udg_MS_calc_real[2] - udg_MS_calc_real[3] ) * ( udg_MS_calc_real[3] / udg_MS_calc_real[2] )
                  • Set MS_temp_point[2] = (MS_temp_point[0] offset by MS_speed_ex[MS_index[3]] towards MS_angle_ex[MS_index[3]] degrees)
                  • Set MS_temp_point[3] = (MS_temp_point[2] offset by MS_calc_real[4] towards MS_arc_core_angle[MS_index[3]] degrees)
                  • Set MS_calc_real[5] = (Angle from MS_temp_point[1] to MS_temp_point[3])
                  • Unit - Move MS_missile[MS_index[3]] instantly to MS_temp_point[3], facing MS_calc_real[5] degrees
                  • Set MS_build_point[MS_index[3]] = (MS_temp_point[0] offset by MS_speed_ex[MS_index[3]] towards MS_angle_ex[MS_index[3]] degrees)
                  • Set MS_get_X[MS_index[3]] = (X of MS_build_point[MS_index[3]])
                  • Set MS_get_Y[MS_index[3]] = (Y of MS_build_point[MS_index[3]])
                  • Custom script: call RemoveLocation(udg_MS_temp_point[2])
                  • Custom script: call RemoveLocation(udg_MS_temp_point[3])
                  • Custom script: call RemoveLocation(udg_MS_build_point[udg_MS_index[3]])
                • Else - Actions
                  • Set MS_temp_point[2] = (MS_temp_point[1] offset by MS_speed_ex[MS_index[3]] towards MS_angle_ex[MS_index[3]] degrees)
                  • Unit - Move MS_missile[MS_index[3]] instantly to MS_temp_point[2], facing MS_angle_ex[MS_index[3]] degrees
                  • Custom script: call RemoveLocation(udg_MS_temp_point[2])
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • MS_parabola_ex[MS_index[3]] Equal to True
                • Then - Actions
                  • Set MS_calc_real[1] = MS_parabola_height_ex[MS_index[3]]
                  • Set MS_calc_real[2] = MS_distance_max[MS_index[3]]
                  • Set MS_calc_real[3] = MS_distance_current[MS_index[3]]
                  • Custom script: set udg_MS_calc_real[4] = ( 4 * udg_MS_calc_real[1] / udg_MS_calc_real[2] ) * ( udg_MS_calc_real[2] - udg_MS_calc_real[3] ) * ( udg_MS_calc_real[3] / udg_MS_calc_real[2] )
                  • Animation - Change MS_missile[MS_index[3]] flying height to MS_calc_real[4] at 0.00
                • Else - Actions
              • Set MS_temp_point[4] = (Position of MS_missile[MS_index[3]])
              • Custom script: if udg_MS_temp_group[udg_MS_index[3]] == null then
              • Custom script: set udg_MS_temp_group[udg_MS_index[3]] = CreateGroup()
              • Custom script: endif
              • Set MS_temp_group[MS_index[3]] = (Units within 85.00 of MS_temp_point[4] matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of MS_player_
              • Unit Group - Pick every unit in MS_temp_group[MS_index[3]] and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ((Current flying height of MS_missile[MS_index[3]]) - (Current flying height of (Picked unit))) Less than 35.00
                      • ((Current flying height of MS_missile[MS_index[3]]) - (Current flying height of (Picked unit))) Greater than -35.00
                    • Then - Actions
                      • Unit - Cause MS_dmg_source_ex[MS_index[3]] to damage (Picked unit), dealing MS_damage_ex[MS_index[3]] damage of attack type Spells and damage type Normal
                      • Special Effect - Create a special effect attached to the chest of (Picked unit) using MS_unit_hit_eff_ex[MS_index[3]]
                      • Special Effect - Destroy (Last created special effect)
                    • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • MS_distance_current[MS_index[3]] Greater than or equal to MS_distance_max[MS_index[3]]
                • Then - Actions
                  • Special Effect - Destroy MS_missile_eff[MS_index[3]]
                  • Special Effect - Create a special effect at MS_temp_point[4] using MS_impact_gfx_ex[MS_index[3]]
                  • Special Effect - Destroy (Last created special effect)
                  • Unit - Remove MS_missile[MS_index[3]] from the game
                  • Custom script: set udg_MS_missile[udg_MS_index[3]] = null
                  • Set MS_index[1] = (MS_index[1] - 1)
                  • Set MS_empty_index[MS_index[3]] = True
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • MS_index_selected Equal to False
                    • Then - Actions
                      • Set MS_dyn_index = MS_index[3]
                      • Set MS_index_selected = True
                    • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • MS_index[3] Equal to MS_index[2]
                      • MS_index[1] Not equal to 0
                    • Then - Actions
                      • Set MS_index[2] = (MS_index[2] - 1)
                    • Else - Actions
                • Else - Actions
              • Custom script: call DestroyGroup(udg_MS_temp_group[udg_MS_index[3]])
              • Custom script: set udg_MS_temp_group[udg_MS_index[3]] = null
              • Custom script: call RemoveLocation(udg_MS_temp_point[0])
              • Custom script: call RemoveLocation(udg_MS_temp_point[1])
              • Custom script: call RemoveLocation(udg_MS_temp_point[4])
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • MS_index[3] Equal to MS_index[2]
                  • MS_index[1] Not equal to 0
                • Then - Actions
                  • Set MS_index[2] = (MS_index[2] - 1)
                • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • MS_index[1] Equal to 0
        • Then - Actions
          • Set MS_index[2] = 0
          • Set MS_dyn_index = 0
          • Trigger - Turn off (This trigger)
        • Else - Actions




As this spell is simple, I would also like to know if a spell or spells like these have been created before, as for my search for an identical spell like this have proven no significant result, I would gladly appreciate it if you found something like this and link it in your post below.

CREDITS:
Kingz - Projectile System
Almia - Inspiration, help
deathismyfriend - help


Version 1.0f
-Improved the Tooltip a little bit.
-Corrected the wrong highlighted letter of the Learn tooltip
-Set the Day/Night vision of the dummy to 0

Version 1.0e
-Added two more configurable variables to the spell, namely the missiles' sfx and the missile-impact sfx.
-Removed the indexing, to make the spell instant.
-Tweaked the dummy object.
-Fixed some nasty leaks.
-Changed the ability's description

Version 1.0d (Maker's initial review given here)
-Added more configurables to the spell
-Optimized the spell a little bit more

Version 1.0c
-Fixed the Hotkey in the description
-Updated the Spell's Description
-Optimized the code a bit
-Remove "Casting Dummy" unit in the Object Editor

Version 1.0b
-Changed Hotkey for testing purposes
-Added special effects that are created when the missiles hit a unit

Version 1.0a
-Uploaded the Spell


Still to do:
-None currently

Keywords:
Flame, Phoenix Missiles, Projectile System's spell, MasterTrainer, World's End, fiery, fiery destruction.
Contents

World's End v1.0 (Map)

Reviews
World's End v.1.0e | Reviewed by Maker | 2nd Jun 2013 APPROVED The spell is leakless and MUI I found the spell to be fun to cast and good looking. It uses the the projectile system well, in fact, most of the spell's work is done...

Moderator

M

Moderator


World's End v.1.0e | Reviewed by Maker | 2nd Jun 2013
APPROVED


126248-albums6177-picture66521.png


  • The spell is leakless and MUI

    I found the spell to be fun to cast and good looking. It uses the the
    projectile system well, in fact, most of the spell's work is done by that
126248-albums6177-picture66523.png


  • Improve the tooltip, look for standard Blizzard abilities
    for reference
  • There's a wrong hotkey highlighted in the lear tooltip
  • Reduce the sight range of the dummy
[tr]



World's End v.1.0d | Reviewed by Maker | 1st Jun 2013
NEEDS FIX


126248-albums6177-picture66522.png


  • The dummy gives vision, uses upgrades and has build ability
  • Load the ability level from a variable in WE Loop
126248-albums6177-picture66523.png


  • There's a wrong hotkey highlighted in the learn tooltip
    and there is one spelling error
  • The dummy doesn't need invulnerability ability, it has Locust
  • You could set the effect for the projectile system in setup trigger,
    not during every loop
  • The hardcoded value of 7 in the looping trigger could be
    configurable
  • The main loop only runs once per cast, therefore it is a 0.03 second delay
    What do you need that for, you could make it instant and get rid of the indexing
[tr]
 
Level 20
Joined
Apr 14, 2012
Messages
2,901
Lul, Almia will check this spell first :D
Better take the second slot :p

Edit :

What is the use of this variable :
  • Set MS_unit_hit_eff=<Effect>
Can you explain mate?

That's the effect that is created when the missiles hit a unit. I figured that all I need was the effect when the missiles expired/reached their target, so I did not bother to put in a string variable there.

But now as I think about it again it might be useful... I might add it in the spell too tomorrow, because, at my place it is really late and I am tired.

Actually, I change 'I might' to 'I will'.
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
one thing i dont like is this
  • Unit - Create 1 Casting Dummy for (Owner of WE_Caster[WE_CurrentIndex]) at WE_TempPoint facing Default building facing degrees
ik u use a timer to remove the unit but creating a unit every .03 is insane lol. u can use one dummy to do all ur spell instances just create the dummy on map init. then move the dummy to the unit to do the effect / buff or whatever. ur creating 34 units a second.
Also u should store the lvl of the ability when the unit casts it.
umm y not make this an instant spell ? it would be in one trigger and u could get rid of the loop and it will still be MUI.
 
Level 20
Joined
Apr 14, 2012
Messages
2,901
one thing i dont like is this
  • Unit - Create 1 Casting Dummy for (Owner of WE_Caster[WE_CurrentIndex]) at WE_TempPoint facing Default building facing degrees
ik u use a timer to remove the unit but creating a unit every .03 is insane lol. u can use one dummy to do all ur spell instances just create the dummy on map init. then move the dummy to the unit to do the effect / buff or whatever. ur creating 34 units a second.
Also u should store the lvl of the ability when the unit casts it.
umm y not make this an instant spell ? it would be in one trigger and u could get rid of the loop and it will still be MUI.

I don't think the dummy units will be created every .03 seconds because it will only be created MaxIndex times, and within that 'For each CurrentIndex' loop is the turn off trigger, so I don't think there would be a problem. Also, to support this, may game should have lagged while I was creating the spell.

Oh and I would also like to know what the difference is when I store the lvl of the ability when the units casts it or if I store the lvl in the loop.

And when I do make it an instant spell, won't that remove the 'select target' part of the spell?

@Pr0blemBr0 thanks! Though the reason I made the hotkey like that was because of the reason that the hotkeys with other spells might interfere with it, so I thought the user could just change it himself, but then again, just for testing purposes, I will change the hotkey.
 
Level 20
Joined
Apr 14, 2012
Messages
2,901
umm i dont even see the select unit thing lol. also u dont show all of the triggers.
  • Trigger - Run MS init <gen> (ignoring conditions)

Oh the 'select target' happens when you click on the spell icon and then you select which unit it's supposed to target. Pretty weird that you don't see this. It happens all the time with single-target spells like storm bolt, aerial shackles, death coil, etc.

Anyways the MS init is the projectile system's trigger so I don't think I need to show that.
 
Level 33
Joined
Apr 24, 2012
Messages
5,113
Uhmmm, Camel-casing are only done for struct globals,methods and locals. So the variables here Should_BeNamedLikeThis.

All of the constants(configurables) here should be moved in the Setup Trigger:
  • Set MS_dmg_source = WE_Caster[WE_CurrentIndex]
    • Set MS_owner = (Owner of WE_Caster[WE_CurrentIndex])
    • Set MS_create_point = (WE_TempPoint offset by WE_Offset[WE_Level] towards ((Real(WE_TempInt)) x (360.00 / 7.00)) degrees)
    • Set MS_target_point = WE_TempPoint
    • Set MS_damage = WE_Damage[WE_Level]
    • Set MS_seconds_to_reach = ((Real(WE_LoopInt)) x WE_TimeToReach[WE_Level])
    • Set MS_angle = (Angle from MS_create_point to MS_target_point)
    • Set MS_distance = (Distance between MS_create_point and MS_target_point)
    • Set MS_missile_gfx = Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl
    • Set MS_impact_gfx = Abilities\Spells\Other\Doom\DoomDeath.mdl
    • Set MS_unit_hit_eff = <Empty String>
    • Set MS_arcs = True
    • Set MS_arc_dist = ((Real(WE_LoopInt)) x 75.00)
    • Set MS_arc_type = 1
    • Set MS_parabola = True
    • Set MS_parabola_height = 300.00
    • Trigger - Run MS init <gen> (ignoring conditions)[/stable]
Just refer them. Same goes to the other one.

Set MS_owner = (Owner of WE_Caster[WE_CurrentIndex])
Use this in the Create Dummy Action.

Do you use dummy.mdx? Why not use the Projectile System's dummy? Its a waste of object.

When creating the missiles in that For Loop Integer,remove this line:
Set MS_owner = (Owner of WE_Caster[WE_CurrentIndex])

Max integer of For Loop should be configurable.

Actually,it was a nice spell. It reminds me a lot of my Projectile System Demo Spell :D
 
Level 20
Joined
Apr 14, 2012
Messages
2,901
This... this is what I was waiting for.

It will take me some time to process this lot, but I think I can pull it off later tonight or first thing tomorrow.

Also, I now see the waste of object, thanks for pointing that out.

Oh and Almia, when you say move the constants in the Setup trigger, do you mean the variables I initialize for the projectile system to use that uses the variables in the setup trigger? (i.e. damage, time to reach, and offset)

@deathismyfriend I see your point now too, I did not know that because this is my first. I will post them later when I have figured my remaining hours of the day out.
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
@deathismyfriend I see your point now too, I did not know that because this is my first. I will post them later when I have figured my remaining hours of the day out.

lol thats ok i couldve explained a little better y it was better off as the other choice lol.

i was just busy making my first spell lol. provided a quick explanation here.
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
Oh I understand that I can shorten it to two triggers, but can you explain why the player shouldn't need a specific target for the spell?

Oh and @Almia/deathismyfriend what does this mean (Almia mentioned earlier this) Should_BeNamedLikeThis. What does it mean?

an instant spell can use a target lol. u dont have to change that.

he means the way u name things. Any constants ( things u dont change after setting them once) should be named
JASS:
LIKE_THIS
any other variables should be
JASS:
likeThis

any custom functions should be
JASS:
LikeThis
 
Level 20
Joined
Apr 14, 2012
Messages
2,901
I know... I don't like it in some way too, primarily because it doesn't have a homing missile function yet.

I tried many other projectile systems, but most of them have their limitations. I tried Almia's projectile system at Hordestudio, but I can't seem to properly import it.

But give me some time maybe 5 mins and I will post it

EDIT: Took me a while because of the long desc., but I have uploaded the triggers. The Projectile System's triggers.
 
Level 8
Joined
Dec 22, 2008
Messages
207
I know... I don't like it in some way too, primarily because it doesn't have a homing missile function yet.

I tried many other projectile systems, but most of them have their limitations. I tried Almia's projectile system at Hordestudio, but I can't seem to properly import it.

But give me some time maybe 5 mins and I will post it

EDIT: Took me a while because of the long desc., but I have uploaded the triggers. The Projectile System's triggers.

I'm still working on my projectile system, but it should totally pwn every GUI projectile system on the Hive as soon as I release it. :3 .. I hope. :DD

In any case, adding homing to Kingz' system is something I've done before. Where exactly do you need it?
 
Level 20
Joined
Apr 14, 2012
Messages
2,901
I'm still working on my projectile system, but it should totally pwn every GUI projectile system on the Hive as soon as I release it. :3 .. I hope. :DD

In any case, adding homing to Kingz' system is something I've done before. Where exactly do you need it?

I'm not sure I can exactly answer your question 'where' as I don't understand projectile systems very much.

But I was planning to use it so that even as the target unit moves the missiles will move along the target/ to the position of the target.
 
Level 8
Joined
Dec 22, 2008
Messages
207
I'm not sure I can exactly answer your question 'where' as I don't understand projectile systems very much.

But I was planning to use it so that even as the target unit moves the missiles will move along the target/ to the position of the target.

Let me download the spell (I have only looked at it from triggers:p)
I'll know exactly where and how to add the homing part, after that. If you want, I could show you how ^.^ I know this missile system like the back of my hand.

EDIT 1:
First thing I noticed is you use Firebolt to trigger your spell. I have to advise against this, since it ministuns your target which I believe is an unwanted side effect, and you can't set the "stun duration" in the object editor to 0. If you DID mean for the ministun to happen, disregard this. Otherwise use "Channel", a spell that has no real effect other than registering you triggering your abilities.
 
Level 8
Joined
Dec 22, 2008
Messages
207
Alright. First of all, the formula for calculating arcs is right there. Secondly you have a lot of unnecessary things going on in this whole trigger, I've realized now. This reduces efficiency and thus the performance of the spell (and ultimately of the game too).

Do you want me to edit it, document what I edit so you know what I changed, and send you an optimized version?
 
Level 20
Joined
Apr 14, 2012
Messages
2,901
So I move these lines to the Configuration trigger?
  • Set MS_damage = WE_Damage[WE_Level]
  • Set MS_create_point = (WE_TempPoint offset by WE_Offset[WE_Level] towards ((Real(WE_TempInt)) x (360.00 / 7.00)) degrees)
    • Set MS_seconds_to_reach = ((Real(WE_LoopInt)) x WE_TimeToReach[WE_Level])
Because these are the only configurables I see in the loop... I'm getting a sense that I am wrong; I hope I'm not.
 
Level 33
Joined
Apr 24, 2012
Messages
5,113
Exact non-changing values so, these?
------------------------------------------------
((Real(WE_LoopInt)) x 75.00) {arc distance} //
300.00 (Parabola Height) //
1 (Arc type) //
True (Missile arcs; boolean) //
-----------------------------------------------

WE_LoopInit is not a constant. But 75 does.
The other three yes.

If you are lost,why not look for some examples?
http://www.hiveworkshop.com/forums/spells-569/dark-portal-v1-5-a-221829/
http://www.hiveworkshop.com/forums/spells-569/void-sphere-v1-4-a-224044/
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
Im just saying the truth. Specially when doing something in vJASS. Everytime I code a vJASS code,it always results into Trash. Perhaps not in Spells XD

it really is backwards on this site lol.
If its more efficient than GUI and a gui version is up it should be approved. Getting my systems approved is a joke right now. its been pending for months. Updated them plenty of times to were its just about as efficient as possible and still nothing.
 
Top