• 🏆 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!
  • 🏆 Hive's 6th HD Modeling Contest: Mechanical is now open! Design and model a mechanical creature, mechanized animal, a futuristic robotic being, or anything else your imagination can tinker with! 📅 Submissions close on June 30, 2024. Don't miss this opportunity to let your creativity shine! Enter now and show us your mechanical masterpiece! 🔗 Click here to enter!

DEMONIC RAGE

This bundle is marked as awaiting update. A staff member has requested changes to it before it can be approved.
The hero calls down the devil to aid him, who transforms him into an unstoppable death machine that kills anything standing its way.
This is my first spell, hope you like it :).



Special thanks to
_Guhun_
for explaining the issue to me



Chronosphere model by: PGRU-Unexpected

Triggers:
  • Demonic Rage Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Caster Unit-Type --------
      • -------- ----------------------------- --------
      • Set Demonic_CasterType = Tester
      • -------- In case of more than 1 unit-type with this ability --------
      • Set Demonic_CasterType2 = No unit-type
      • Set Demonic_CasterType3 = No unit-type
      • Set Demonic_CasterType4 = No unit-type
      • Set Demonic_CasterType5 = No unit-type
      • -------- you can easily add more types, by just editing the main trigger's conditions --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Damage dealt to enemies.__________________________ --------
      • -------- ----------------------------- --------
      • Set Demonic_Damage = 200.00
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Duration of the ability --------
      • -------- ----------------------------- --------
      • Set Demonic_AbilityDuration = 60.00
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Area of Effect(AOE).______________________ --------
      • -------- ----------------------------- --------
      • Set Demonic_Radius = 850.00
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Damage over time Radius(1/don't change it) and the real Damage (2)_________ --------
      • -------- ----------------------------- --------
      • Set DemonicTimeRadius = 530.00
      • -------- ----------------------------- --------
      • Set Demonic_DamageOverTime = 50.00
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Ending damage____________________ --------
      • -------- ----------------------------- --------
      • Set Demonic_Ending_Damage = 300.00
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Strength, Agility and Intelligence gained and the rate of increase per level___________ --------
      • -------- ----------------------------- --------
      • Set Demonic_Strength_Gained = 10
      • -------- ----------------------------- --------
      • Set Demonic_Agility_Gained = 10
      • -------- ----------------------------- --------
      • Set Demonic_Intelligence_Gained = 10
      • -------- ----------------------------- --------
      • Set Demonic_Agility_Rule = 10
      • -------- ----------------------------- --------
      • Set Demonic_Strength_Rule = 10
      • -------- ----------------------------- --------
      • Set Demonic_Intelligence_Rule = 10
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Speed gained______________________ --------
      • -------- ----------------------------- --------
      • Set Demonic_Speed_bonus = 300.00
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Main dummies timer___________________ --------
      • -------- ----------------------------- --------
      • Set Demonic_Effectdummies_timer = 63.00
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Lesser wind duration (damage per second)__________ --------
      • -------- ----------------------------- --------
      • Set Demonic_LesserWind_duration = 0.40
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Initial Damage levels______________________ --------
      • -------- ----------------------------- --------
      • Set Demonic_LVL_Main = 100.00
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Repeated damage levels (loop)______________ --------
      • -------- ----------------------------- --------
      • Set Demonic_LVL_Loop = 34.00
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- Special effects' frequency part 1 --------
      • Set Demonic_SpecialEffects = 0.12
      • -------- ----------------------------- --------
      • -------- Special effects' frequency part 2 (includes the lesser periodic damage) --------
      • Set Demonic_SpecialEffects2 = 0.33
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • Set Demonic_Damage_Type = Universal
      • Set Demonic_Attack_Type = Chaos
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- To change the time of the spell go to Demonic Rage trigger, last "Set" action. --------
      • -------- The main skill's timer (time taken for the ability to end.)Default: 63____________ --------
      • -------- You have to decrease the time in Object Editor --> Spell --------
      • -------- Rule: write the time --> Desired Time + 3 --------
      • -------- Example: If you want 20 secs, write 20 in Object Editor and 23 here. --------
      • -------- Note: Don't forget to change the duration of the Main Effects (same rule). --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
      • -------- ----------------------------- --------
  • Demonic Rage
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to DEMONIC RAGE
      • Or - Any (Conditions) are true
        • Conditions
          • (Unit-type of (Triggering unit)) Equal to Demonic_CasterType
          • (Unit-type of (Triggering unit)) Equal to Demonic_CasterType2
          • (Unit-type of (Triggering unit)) Equal to Demonic_CasterType3
          • (Unit-type of (Triggering unit)) Equal to Demonic_CasterType4
          • (Unit-type of (Triggering unit)) Equal to Demonic_CasterType5
    • Actions
      • -------- IMPORTANT SYSTEM PART START --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Demonic_timer Equal to 0
        • Then - Actions
          • Trigger - Turn on Demonic Rage Loop <gen>
        • Else - Actions
      • -------- Increase the index size --------
      • Set Demonic_timer = (Demonic_timer + 1)
      • -------- Dynamic Index --------
      • -------- Dynamic Index End --------
      • -------- Setup those arrays --------
      • Set Demonic_TempPoint[Demonic_timer] = (Position of (Triggering unit))
      • Set Demonic_Caster[Demonic_timer] = (Triggering unit)
      • Set Demonic_Total_Strength[Demonic_timer] = 0
      • Set Demonic_Total_Agility[Demonic_timer] = 0
      • Set Demonic_Total_Intelligence[Demonic_timer] = 0
      • Set LVL_Demonic[Demonic_timer] = (Level of DEMONIC RAGE for Demonic_Caster[Demonic_timer])
      • Set Demonic_SpellTime[Demonic_timer] = 60.00
      • Unit - Create 1 Dummy (big) for Neutral Passive at Demonic_TempPoint[Demonic_timer] facing Default building facing degrees
      • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
      • Unit - Create 1 Dummy (crono) for Neutral Passive at Demonic_TempPoint[Demonic_timer] facing Default building facing degrees
      • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
      • Unit - Create 1 Dummy (small) for Neutral Passive at Demonic_TempPoint[Demonic_timer] facing Default building facing degrees
      • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
      • Unit - Create 1 Dummy2 (raising skull/howl) for Neutral Passive at Demonic_TempPoint[Demonic_timer] facing Default building facing degrees
      • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
      • Unit - Set Demonic_Caster[Demonic_timer] movement speed to ((Current movement speed of Demonic_Caster[Demonic_timer]) + Demonic_Speed_bonus)
      • Custom script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units within Demonic_Radius of Demonic_TempPoint[Demonic_timer]) and do (Actions)
        • Loop - Actions
          • Set Demonic_pickedunits = (Picked unit)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Demonic_pickedunits is Magic Immune) Equal to False
              • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_timer])) Equal to True
            • Then - Actions
              • Unit - Cause Demonic_Caster[Demonic_timer] to damage Demonic_pickedunits, dealing (Demonic_Damage + (Demonic_LVL_Main x (Real(LVL_Demonic[Demonic_timer])))) damage of attack type Demonic_Attack_Type and damage type Demonic_Damage_Type
            • Else - Actions
  • Demonic Rage Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Demonic_LoopIndex) from 1 to Demonic_timer, do (Actions)
        • Loop - Actions
          • Set TempInt = Demonic_LoopIndex
          • Set DemonicPoint = (Position of Demonic_Caster[Demonic_LoopIndex])
          • Set Dem_Rage_Timer3[TempInt] = (Dem_Rage_Timer3[TempInt] + 0.03)
          • Set Dem_Rage_Timer2[TempInt] = (Dem_Rage_Timer2[TempInt] + 0.03)
          • Set Dem_Rage_Timer[TempInt] = (Dem_Rage_Timer[TempInt] + 0.03)
          • -------- Condition... --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Dem_Rage_Timer3[TempInt] Equal to Demonic_SpecialEffects
            • Then - Actions
              • Set Dem_Rage_Timer3[TempInt] = 0.00
              • Set Demonic_Temp_Point = (DemonicPoint offset by (180.00, 0.00))
              • Unit - Create 1 Dummy3 for Neutral Passive at Demonic_Temp_Point facing Default building facing degrees
              • Unit - Add a 0.01 second Generic expiration timer to (Last created unit)
              • Custom script: call RemoveLocation(udg_Demonic_Temp_Point)
              • Set Demonic_Temp_Point = (DemonicPoint offset by (0.00, 180.00))
              • Unit - Create 1 Dummy3 for Neutral Passive at Demonic_Temp_Point facing Default building facing degrees
              • Unit - Add a 0.01 second Generic expiration timer to (Last created unit)
              • Custom script: call RemoveLocation(udg_Demonic_Temp_Point)
              • Set Demonic_Temp_Point = (DemonicPoint offset by (-180.00, 0.00))
              • Unit - Create 1 Dummy3 for Neutral Passive at Demonic_Temp_Point facing Default building facing degrees
              • Unit - Add a 0.01 second Generic expiration timer to (Last created unit)
              • Custom script: call RemoveLocation(udg_Demonic_Temp_Point)
              • Set Demonic_Temp_Point = (DemonicPoint offset by (0.00, -180.00))
              • Unit - Create 1 Dummy3 for Neutral Passive at Demonic_Temp_Point facing Default building facing degrees
              • Unit - Add a 0.01 second Generic expiration timer to (Last created unit)
              • Custom script: call RemoveLocation(udg_Demonic_Temp_Point)
            • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Dem_Rage_Timer2[TempInt] Equal to Demonic_SpecialEffects2
            • Then - Actions
              • Set Dem_Rage_Timer2[TempInt] = 0.00
              • Unit - Create 1 Dummy (small) for Neutral Passive at DemonicPoint facing Default building facing degrees
              • Unit - Add a Demonic_LesserWind_duration second Generic expiration timer to (Last created unit)
              • Unit - Create 1 Dummy2 (lightning) for Neutral Passive at DemonicPoint facing Default building facing degrees
              • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
              • Unit Group - Pick every unit in (Units within DemonicTimeRadius of DemonicPoint) and do (Actions)
                • Loop - Actions
                  • Set Demonic_pickedunits = (Picked unit)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Demonic_pickedunits is Magic Immune) Equal to False
                      • (Demonic_pickedunits is dead) Equal to False
                      • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[TempInt])) Equal to True
                    • Then - Actions
                      • Unit - Cause Demonic_Caster[TempInt] to damage Demonic_pickedunits, dealing (Demonic_DamageOverTime + (Demonic_LVL_Loop x (Real(LVL_Demonic[Demonic_LoopIndex])))) damage of attack type Demonic_Attack_Type and damage type Demonic_Damage_Type
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Demonic_pickedunits is dead) Equal to True
                        • Then - Actions
                          • Set Demonic_Temp_Point = (Position of Demonic_pickedunits)
                          • Unit - Create 1 Dummy4 for Neutral Passive at Demonic_Temp_Point facing Default building facing degrees
                          • Custom script: call RemoveLocation(udg_Demonic_Temp_Point)
                          • Unit - Add a 0.01 second Generic expiration timer to (Last created unit)
                        • Else - Actions
                    • Else - Actions
            • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Dem_Rage_Timer[TempInt] Greater than or equal to 0.99
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Demonic_SpellTime[TempInt] Greater than 0.00
                • Then - Actions
                  • -------- Actions --------
                  • Unit - Create 1 Dummy (small) for Neutral Passive at DemonicPoint facing Default building facing degrees
                  • Unit - Add a Demonic_LesserWind_duration second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy2 (lightning) for Neutral Passive at DemonicPoint facing Default building facing degrees
                  • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
                  • Unit Group - Pick every unit in (Units within DemonicTimeRadius of DemonicPoint) and do (Actions)
                    • Loop - Actions
                      • Set Demonic_pickedunits = (Picked unit)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Demonic_pickedunits is Magic Immune) Equal to False
                          • (Demonic_pickedunits is dead) Equal to False
                          • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[TempInt])) Equal to True
                        • Then - Actions
                          • Unit - Cause Demonic_Caster[TempInt] to damage Demonic_pickedunits, dealing (Demonic_DamageOverTime + (Demonic_LVL_Loop x (Real(LVL_Demonic[Demonic_LoopIndex])))) damage of attack type Demonic_Attack_Type and damage type Demonic_Damage_Type
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Demonic_pickedunits is dead) Equal to True
                            • Then - Actions
                              • Set Demonic_Temp_Point = (Position of Demonic_pickedunits)
                              • Unit - Create 1 Dummy4 for Neutral Passive at Demonic_Temp_Point facing Default building facing degrees
                              • Custom script: call RemoveLocation(udg_Demonic_Temp_Point)
                              • Unit - Add a 0.01 second Generic expiration timer to (Last created unit)
                            • Else - Actions
                        • Else - Actions
                  • Hero - Modify Agility of Demonic_Caster[TempInt]: Add (Demonic_Agility_Gained + (Demonic_Agility_Rule x LVL_Demonic[TempInt]))
                  • Set Demonic_Total_Agility[TempInt] = (Demonic_Total_Agility[TempInt] + (Demonic_Agility_Gained + (LVL_Demonic[TempInt] x Demonic_Agility_Rule)))
                  • Hero - Modify Strength of Demonic_Caster[TempInt]: Add (Demonic_Strength_Gained + (Demonic_Strength_Rule x LVL_Demonic[TempInt]))
                  • Set Demonic_Total_Strength[TempInt] = (Demonic_Total_Strength[TempInt] + (Demonic_Strength_Gained + (LVL_Demonic[TempInt] x Demonic_Strength_Rule)))
                  • Hero - Modify Intelligence of Demonic_Caster[TempInt]: Add (Demonic_Intelligence_Gained + (Demonic_Intelligence_Rule x LVL_Demonic[TempInt]))
                  • Set Demonic_Total_Intelligence[TempInt] = (Demonic_Total_Intelligence[TempInt] + (Demonic_Intelligence_Gained + (LVL_Demonic[TempInt] x Demonic_Intelligence_Rule)))
                  • Custom script: set bj_wantDestroyGroup = true
                  • Unit Group - Pick every unit in (Units within Demonic_Radius of Demonic_TempPoint[TempInt]) and do (Actions)
                    • Loop - Actions
                      • Set Demonic_pickedunits = (Picked unit)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Demonic_pickedunits is Magic Immune) Equal to False
                          • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[TempInt])) Equal to True
                        • Then - Actions
                          • Unit - Cause Demonic_Caster[TempInt] to damage Demonic_pickedunits, dealing (Demonic_Damage + (Demonic_LVL_Main x (Real(LVL_Demonic[TempInt])))) damage of attack type Demonic_Attack_Type and damage type Demonic_Damage_Type
                        • Else - Actions
                  • Set Demonic_SpellTime[TempInt] = (Demonic_SpellTime[TempInt] - 0.99)
                  • Set Dem_Rage_Timer[TempInt] = 0.00
                • Else - Actions
                  • Set DemonicPoint = (Position of Demonic_Caster[TempInt])
                  • Hero - Modify Agility of Demonic_Caster[TempInt]: Subtract Demonic_Total_Agility[TempInt]
                  • Set Demonic_Total_Agility[TempInt] = 0
                  • Hero - Modify Strength of Demonic_Caster[TempInt]: Subtract Demonic_Total_Strength[TempInt]
                  • Set Demonic_Total_Strength[TempInt] = 0
                  • Hero - Modify Intelligence of Demonic_Caster[TempInt]: Subtract Demonic_Total_Intelligence[TempInt]
                  • Set Demonic_Total_Intelligence[TempInt] = 0
                  • Unit - Set Demonic_Caster[TempInt] movement speed to (Default movement speed of Demonic_Caster[TempInt])
                  • Unit - Create 1 Dummy (big) for Neutral Passive at DemonicPoint facing Default building facing degrees
                  • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
                  • Custom script: set bj_wantDestroyGroup = true
                  • Unit Group - Pick every unit in (Units within Demonic_Radius of DemonicPoint) and do (Actions)
                    • Loop - Actions
                      • Set Demonic_pickedunits = (Picked unit)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Demonic_pickedunits is Magic Immune) Equal to False
                          • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
                        • Then - Actions
                          • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_Ending_Damage damage of attack type Demonic_Attack_Type and damage type Demonic_Damage_Type
                        • Else - Actions
                  • Custom script: call RemoveLocation(udg_Demonic_TempPoint[udg_TempInt])
                  • -------- IMPORTANT SYSTEM PART START --------
                  • Set Demonic_TempPoint[Demonic_LoopIndex] = Demonic_TempPoint[Demonic_timer]
                  • Set Demonic_Caster[Demonic_LoopIndex] = Demonic_Caster[Demonic_timer]
                  • Set Demonic_Total_Strength[Demonic_LoopIndex] = Demonic_Total_Strength[Demonic_timer]
                  • Set Demonic_Total_Agility[Demonic_LoopIndex] = Demonic_Total_Agility[Demonic_timer]
                  • Set Demonic_Total_Intelligence[Demonic_LoopIndex] = Demonic_Total_Intelligence[Demonic_timer]
                  • Set Demonic_SpellTime[Demonic_LoopIndex] = Demonic_SpellTime[Demonic_timer]
                  • Set LVL_Demonic[Demonic_LoopIndex] = LVL_Demonic[Demonic_timer]
                  • Set Dem_Rage_Timer3[Demonic_LoopIndex] = (Dem_Rage_Timer3[Demonic_timer] + 0.00)
                  • Set Dem_Rage_Timer2[Demonic_LoopIndex] = (Dem_Rage_Timer2[Demonic_timer] + 0.00)
                  • Set Dem_Rage_Timer[Demonic_LoopIndex] = (Dem_Rage_Timer[Demonic_timer] + 0.00)
                  • -------- RecycleIndex --------
                  • Set Demonic_timer = (Demonic_timer - 1)
                  • Set Demonic_LoopIndex = (Demonic_LoopIndex - 1)
                  • -------- Turn the trigger again off if the index_size is below 0... --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Demonic_timer Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
            • Else - Actions
      • Custom script: call RemoveLocation(udg_DemonicPoint)

How to import: Copy dummies, triggers, spell and files in import section.



Hope you like it.

Update 1.1:fixed some leaks.Special Thanks to EdgeOfChaos for helping me fixing them.
Update 1.2:Fixed all leaks.Special Thanks to EdgeOfChaos for helping me fixing them.Also deleted the strength bonus.
Update 2.0:Many things changed.3 more triggers,new effect and dummy and Damage Over Time(Every 2 seconds Damage occurs) appearing in the hero location(not where the spell is casted,it is where the hero is).

2016:
Update 3.0: Well I'm back after 2 years with bigger imagination. I cant describe everything so you should try it better than reading. Added 2 effects, made everything (or most things) customizable (for people who want the effect permanent or short), the STR bonus is back and added AGI bonus (and finally without wait action), added a speed bonus (I'm not sure if it really increases the speed, tell me in comments). Changed the wind rate to 1 from half per second (but at the cost of half the damage), added an ending damage and an effect to express it (damage at the end of the ability + wind), and added a damage at the position of the main area of the ability (so it can go with the long period of the main effects.) And that's it. I hope it get approved because I've put much effort on it and I'll be sad to see all that effort goes for nothing.

Update 3.1

Update 3.2

Update 3.3 (Modifiers are bugged)

Update 3.4

Update 4.0 MUI: All the excess triggers and folders will be removed on approval. Any thing which can be noticed easily is made on purpose. This is finally MUI. There is a small problem with decreasing the number of indexes but it doesn't affect gameplay.

Update 4.1 MUI

Update 5: Supports 3 levels, fixed speed bonus, Loop turns off successfully. I believe it can be approved now.

Update 5.1: I made an alternative for the "Demonic_index = ___ -1" and similar triggers. Not because it isn't what it should be means it's wrong. (But it could be wrong, test it.)

Update 5.2: "Unit begins casting" and "Unit starts the effect" are now optional (with different functions). Attributes gained now supports multiple levels. Some fixes.

Update 5.3: Intelligence, variable for the duration of the spell, more fixes.

Update 6: Complete MUI. I used:
[GUI] Dynamic Indexing Template
Credits to: Hanky
This is all what I can do for recycling and MUI.


Update 6.1: Fixes and cleans. 2 more effects WITHOUT lag.

Update 7: Updated the recycling triggers, changed the colors of the models and decreased the lag. Special thanks to _Guhun_

Update 7.1: The effects frequency can now be changed. Fixed location leaks. Removed Or conditions. Attack and Damage type are now configurable. Better tooltip.

Update 8.0: Fixed an issue in recycling. Event made to "starts effect". Added unit-type conditions to solve some bugs. The second part of the special effects and periodic damage timer made configurable. Fixed some leaks. Ability's duration is now configurable. Special thanks to Dr Super Good.


Keywords:

Demon, Rage, Evil, Rampage, Chaos, Death, Demonic, Deadly, Illidan.

Use this however you like, just give credits.
Contents

DEMONIC RAGE (Map)

Reviews
MyPad
As jarring as the spell might be, the issue of indexing has been resolved, at least partially. However, getting this spell to work handily with custom durations is another thing to address, since the spell considers the hard-coded duration of the base...
that's not quite what I meant, it ought to be
  • Set Group = Unit within radius of point
  • Unit Group - Pick every unit in Group and do (Actions)
    • Set unit = (Picked Unit)
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • ((unit) is Magic Immune) Equal to False
        • ((unit) belongs to en enemy of (player) Equal to True
      • Then - Actions
        • ----------- actions ------------
      • Else - Actions
  • Custom script: call DestroyGroup(udg_Group)
 

NightKnight

Hosted Project RUID
Level 14
Joined
Sep 3, 2014
Messages
222
like that?
  • Demonic Rage
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to DEMONIC RAGE
    • Actions
      • Trigger - Turn on Demonic Loop <gen>
      • Set CasterDR = (Triggering unit)
      • Set Demonic_Caster = CasterDR
      • Set TempPoint = (Position of CasterDR)
      • Custom script: set bj_wantDestroyGroup=true
      • -------- --------------------------------------------------------- --------
      • -------- Damage and AOE (area of effect) --------
      • Set Demonic_UnitGroup = (Units within Demonic_Radius of TempPoint)
      • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
        • Loop - Actions
          • Set Demonic_pickedunits = (Picked unit)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Demonic_pickedunits is Magic Immune) Equal to False
              • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster)) Equal to True
            • Then - Actions
              • Unit - Cause Demonic_Caster to damage Demonic_pickedunits, dealing Demonic_Damage damage of attack type Chaos and damage type Universal
            • Else - Actions
      • Custom script: call DestroyGroup(udg_Group)
      • -------- --------------------------------------------------------- --------
      • -------- Those first 8 actions is for the effect (Dummies) --------
      • Unit - Create 1 Dummy (small) for Neutral Passive at TempPoint facing Default building facing degrees
      • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
      • Unit - Create 1 Dummy (big) for Neutral Passive at TempPoint facing Default building facing degrees
      • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
      • Unit - Create 1 Dummy (crono) for Neutral Passive at TempPoint facing Default building facing degrees
      • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
      • Unit - Create 1 Dummy2 (raising skull/howl) for Neutral Passive at TempPoint facing Default building facing degrees
      • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
      • -------- Demonic Rage Str gained --------
      • Hero - Modify Strength of Demonic_Caster: Add Demonic_Strength_Gained
      • Hero - Modify Agility of Demonic_Caster: Add Demonic_Agility_Gained
      • Trigger - Turn on Demonic Loop Config <gen>
      • Trigger - Turn on Demonic Loop <gen>
      • Trigger - Turn on Demonic End <gen>
 

NightKnight

Hosted Project RUID
Level 14
Joined
Sep 3, 2014
Messages
222
I did it... didn't I? :eek::eek::eek:
  • Demonic Rage
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to DEMONIC RAGE
    • Actions
      • Set Demonic_Index = (Demonic_Index + 1)
      • Trigger - Turn on Demonic Loop <gen>
      • Set CasterDR[Demonic_Index] = (Triggering unit)
      • Set Demonic_Caster[Demonic_Index] = CasterDR[Demonic_Index]
      • Set TempPoint[Demonic_Index] = (Position of Demonic_Caster[Demonic_Index])
      • Custom script: set bj_wantDestroyGroup=true
      • -------- --------------------------------------------------------- --------
      • -------- Damage and AOE (area of effect) --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Demonic_Index Equal to 1
        • Then - Actions
          • Set Demonic_UnitGroup = (Units within Demonic_Radius of TempPoint[Demonic_Index])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Demonic_pickedunits is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_Index])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_Index] to damage Demonic_pickedunits, dealing Demonic_Damage damage of attack type Chaos and damage type Universal
                  • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
                  • -------- --------------------------------------------------------- --------
                  • -------- Those first 8 actions is for the effect (Dummies) --------
                  • Unit - Create 1 Dummy (small) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy (big) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy (crono) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy2 (raising skull/howl) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
                  • -------- Demonic Rage Str gained --------
                  • Hero - Modify Strength of Demonic_Caster[Demonic_Index]: Add Demonic_Strength_Gained
                  • Hero - Modify Agility of Demonic_Caster[Demonic_Index]: Add Demonic_Agility_Gained
                  • Trigger - Turn on Demonic Loop Config <gen>
                  • Trigger - Turn on Demonic Loop <gen>
                  • Trigger - Turn on Demonic End <gen>
                • Else - Actions
        • Else - Actions
 
You'll know when you've done it when you can put more than one caster in and have them all cast it one after another and it continues to work for all of them at the same time, from reading that it won't work given that you only run the events if demonic_index is 1 - at any rate that's the kind of thing you can test for working rather than asking
 

NightKnight

Hosted Project RUID
Level 14
Joined
Sep 3, 2014
Messages
222
Well I need help. First part (first damage and effects) works perfectly (except that the STR/AGI modifier is a bit crazy), but the second trigger doesn't work, only 1 instance at a time and the effects/dummies persist permanent if another instance is cast or skill ended. (Note: When I was trying I disabled Demonic End.)

  • Demonic Rage
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to DEMONIC RAGE
    • Actions
      • Set Demonic_Index = (Demonic_Index + 1)
      • Set Demonic_Counter[Demonic_Index] = 0
      • Set CasterDR[Demonic_Index] = (Triggering unit)
      • Set Demonic_Caster[Demonic_Index] = CasterDR[Demonic_Index]
      • Set TempPoint[Demonic_Index] = (Position of Demonic_Caster[Demonic_Index])
      • Custom script: set bj_wantDestroyGroup=true
      • -------- --------------------------------------------------------- --------
      • -------- Damage and AOE (area of effect) --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Demonic_Index Greater than or equal to 1
        • Then - Actions
          • Set Demonic_UnitGroup = (Units within Demonic_Radius of TempPoint[Demonic_Index])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Demonic_pickedunits is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_Index])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_Index] to damage Demonic_pickedunits, dealing Demonic_Damage damage of attack type Chaos and damage type Universal
                  • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
                  • -------- --------------------------------------------------------- --------
                  • -------- Those first 8 actions is for the effect (Dummies) --------
                  • Unit - Create 1 Dummy (small) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy (big) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy (crono) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy2 (raising skull/howl) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
                  • -------- Demonic Rage Str gained --------
                  • Hero - Modify Strength of Demonic_Caster[Demonic_Index]: Add Demonic_Strength_Gained
                  • Hero - Modify Agility of Demonic_Caster[Demonic_Index]: Add Demonic_Agility_Gained
                  • Trigger - Turn on Demonic Loop Config <gen>
                  • Trigger - Turn on Demonic Loop Copy <gen>
                  • Trigger - Turn on Demonic End <gen>
                • Else - Actions
        • Else - Actions
  • [trigger/]
  • [trigger]
  • Demonic Loop Copy
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Demonic_LoopIndex) from 1 to Demonic_Index, do (Actions)
        • Loop - Actions
          • Unit - Set Demonic_Caster[Demonic_LoopIndex] movement speed to Demonic_Speed_bonus
          • Unit - Create 1 Dummy (small) for Neutral Passive at DemonicPoint[Demonic_LoopIndex] facing Default building facing degrees
          • Unit - Add a Demonic_LesserWind_duration second Generic expiration timer to (Last created unit)
          • Unit - Create 1 Dummy2 (lightning) for Neutral Passive at DemonicPoint[Demonic_LoopIndex] facing Default building facing degrees
          • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
          • -------- Damage Over Time --------
          • Set Demonic_UnitGroup = (Units within DemonicTimeRadius of DemonicPoint[Demonic_LoopIndex])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Demonic_pickedunits is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_DamageOverTime damage of attack type Chaos and damage type Universal
                • Else - Actions
          • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
          • -------- Continuous Damage inside the main place --------
          • Set Demonic_UnitGroup = (Units within Demonic_Radius of TempPoint[Demonic_LoopIndex])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Picked unit) is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_Damage damage of attack type Chaos and damage type Universal
                • Else - Actions
          • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
 
Last edited:

NightKnight

Hosted Project RUID
Level 14
Joined
Sep 3, 2014
Messages
222
This is recycling? Or what is recycling?
  • Demonic Loop Copy
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Demonic_LoopIndex) from 1 to Demonic_Index, do (Actions)
        • Loop - Actions
          • Set Demonic_Counter[Demonic_LoopIndex] = (Demonic_Counter[Demonic_LoopIndex] + 1.00)
          • Unit - Set Demonic_Caster[Demonic_LoopIndex] movement speed to Demonic_Speed_bonus
          • Unit - Create 1 Dummy (small) for Neutral Passive at DemonicPoint[Demonic_LoopIndex] facing Default building facing degrees
          • Unit - Add a Demonic_LesserWind_duration second Generic expiration timer to (Last created unit)
          • Unit - Create 1 Dummy2 (lightning) for Neutral Passive at DemonicPoint[Demonic_LoopIndex] facing Default building facing degrees
          • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
          • -------- ----------------------------------------------------------- --------
          • -------- Damage Over Time --------
          • -------- ------------------------------------------------------------------------ --------
          • Set Demonic_UnitGroup = (Units within DemonicTimeRadius of DemonicPoint[Demonic_LoopIndex])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Demonic_pickedunits is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_DamageOverTime damage of attack type Chaos and damage type Universal
                • Else - Actions
          • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
          • -------- Continuous Damage inside the main place --------
          • Set Demonic_UnitGroup = (Units within Demonic_Radius of TempPoint[Demonic_LoopIndex])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Picked unit) is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_Damage damage of attack type Chaos and damage type Universal
                • Else - Actions
          • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
          • -------- Ability ends --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Demonic_Counter[Demonic_LoopIndex] Greater than or equal to 63.00
            • Then - Actions
              • Hero - Modify Strength of Demonic_Caster[Demonic_LoopIndex]: Subtract Demonic_Strength_Gained
              • Hero - Modify Agility of Demonic_Caster[Demonic_LoopIndex]: Subtract Demonic_Agility_Gained
              • Unit - Set Demonic_Caster[Demonic_LoopIndex] movement speed to (Default movement speed of Demonic_Caster[Demonic_LoopIndex])
              • Unit - Create 1 Dummy (big) for Neutral Passive at DemonicPoint[Demonic_LoopIndex] facing Default building facing degrees
              • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
              • Set Demonic_UnitGroup = (Units within Demonic_Radius of DemonicPoint[Demonic_LoopIndex])
              • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
                • Loop - Actions
                  • Set Demonic_pickedunits = (Picked unit)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Demonic_pickedunits is Magic Immune) Equal to False
                      • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
                    • Then - Actions
                      • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_Ending_Damage damage of attack type Chaos and damage type Universal
                    • Else - Actions
              • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
              • Set Demonic_Caster[Demonic_LoopIndex] = Demonic_Caster[Demonic_Index]
              • Set Demonic_Counter[Demonic_LoopIndex] = Demonic_Counter[Demonic_Index]
              • Set Demonic_Index = (Demonic_Index - 1)
              • Set Demonic_LoopIndex = (Demonic_LoopIndex - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Demonic_Index Equal to 0
                • Then - Actions
                  • Trigger - Turn off Demonic Loop Config <gen>
                  • Trigger - Turn off (This trigger)
                • Else - Actions
            • Else - Actions
 
Level 18
Joined
Oct 17, 2012
Messages
822
You have the general structure down.

Some notes:

You do not need two variables for the caster and the location. Keep reusing one.

Even more so, you do not need the array location as well as the loop config trigger. I see no point in allowing users config the center of secondary effects since, according to your spell description, secondary effects revolve around the caster. Plus, having one configurable separated from the rest is just strange code-wise.

Directly using the position of the caster can replace the array location in the loop trigger.

Temporary variables should not be arrays as they should only be used within the trigger.

Other notes:
Having five different dummy units is a bit of a pain to import. Try to use one. Attach as many special effects and scale as necessary. I recommend using this model for the dummy unit.
 
Last edited:

NightKnight

Hosted Project RUID
Level 14
Joined
Sep 3, 2014
Messages
222
Whats the problem in these triggers? (why does it pick every unit with no regard to the condition and to demonic_caster variable) and how to fix and the effects are permanent:
  • Demonic Rage
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to DEMONIC RAGE
    • Actions
      • Set Demonic_Index = (Demonic_Index + 1)
      • Set Demonic_Counter[Demonic_Index] = 0.00
      • Set CasterDR[Demonic_Index] = (Triggering unit)
      • Set Demonic_Caster[Demonic_Index] = CasterDR[Demonic_Index]
      • Set TempPoint[Demonic_Index] = (Position of Demonic_Caster[Demonic_Index])
      • Custom script: set bj_wantDestroyGroup=true
      • -------- --------------------------------------------------------- --------
      • -------- Damage and AOE (area of effect) --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Demonic_Index Greater than or equal to 1
        • Then - Actions
          • Set Demonic_UnitGroup = (Units within Demonic_Radius of TempPoint[Demonic_Index])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Demonic_pickedunits is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_Index])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_Index] to damage Demonic_pickedunits, dealing Demonic_Damage damage of attack type Chaos and damage type Universal
                  • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
                  • -------- --------------------------------------------------------- --------
                  • -------- Those first 8 actions is for the effect (Dummies) --------
                  • Unit - Create 1 Dummy (small) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy (big) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy (crono) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a Demonic_Effectdummies_timer second Generic expiration timer to (Last created unit)
                  • Unit - Create 1 Dummy2 (raising skull/howl) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
                  • -------- Demonic Rage Str gained --------
                  • Hero - Modify Strength of Demonic_Caster[Demonic_Index]: Add Demonic_Strength_Gained
                  • Hero - Modify Agility of Demonic_Caster[Demonic_Index]: Add Demonic_Agility_Gained
                  • Trigger - Turn on pos test <gen>
                  • Trigger - Turn on Demonic Loop Config <gen>
                  • Trigger - Turn on test <gen>
                • Else - Actions
        • Else - Actions
  • [trigger]
  • pos test
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in (Units owned by Player 1 (Red)) and do (Actions)
        • Loop - Actions
          • Unit - Create 1 Dummy (small) for Player 1 (Red) at ((Position of (Picked unit)) offset by (0.00, 0.00)) facing Default building facing degrees
          • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
  • [trigger]
  • test
    • Events
      • Time - Every 4.00 seconds of game time
    • Conditions
      • Demonic_Index Greater than or equal to 2
    • Actions
      • Game - Display to (All allies of (Owner of Demonic_Caster[Demonic_Index])) for 2.00 seconds the text: yep!
      • Unit Group - Pick every unit in (Units in (Playable map area) owned by (Owner of Demonic_Caster[Demonic_Index])) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Picked unit) Equal to Demonic_Caster[Demonic_Index]
            • Then - Actions
              • Unit - Create 1 Dummy (small) for Neutral Passive at ((Position of (Picked unit)) offset by (0.00, 0.00)) facing Default building facing degrees
              • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
            • Else - Actions
              • Unit - Kill (Picked unit)
      • Unit Group - Pick every unit in (Units owned by Player 1 (Red)) and do (Actions)
        • Loop - Actions
      • Trigger - Turn on test2 <gen>
  • -----------------------------------------
  • condition isnt working
  • ----------------------------------------------
  • [trigger]
  • test
    • Events
      • Time - Every 4.00 seconds of game time
    • Conditions
      • Demonic_Index Greater than or equal to 2
    • Actions
      • Game - Display to (All allies of (Owner of Demonic_Caster[Demonic_Index])) for 2.00 seconds the text: yep!
      • Unit Group - Pick every unit in (Units in (Playable map area) owned by (Owner of Demonic_Caster[Demonic_Index])) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Picked unit) Equal to Demonic_Caster[Demonic_Index]
            • Then - Actions
              • Unit - Create 1 Dummy (small) for Neutral Passive at ((Position of (Picked unit)) offset by (0.00, 0.00)) facing Default building facing degrees
              • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
            • Else - Actions
              • Unit - Kill (Picked unit)
      • Unit Group - Pick every unit in (Units owned by Player 1 (Red)) and do (Actions)
        • Loop - Actions
      • Trigger - Turn on test2 <gen>
  • [trigger]
  • test2
    • Events
      • Time - Every 8.00 seconds of game time
    • Conditions
      • Demonic_Index Equal to 4
    • Actions
      • Game - Display to (All players) for 8.00 seconds the text: 46521
  • [trigger/]
 
Level 39
Joined
Feb 27, 2007
Messages
5,040
IMO this spell is just not at all written properly/efficiently/intelligently. It is incredibly laggy, you don't recycle instances, and the spell doesn't even really do what it's supposed to with the bonus stats (cast the spell and you gain ~6000 STR/AGI that doesn't go away at the end). Being that it's been in submissions for over 2 years I would really like to help you out in understanding how best to structure the code for a spell like this because you have put a lot of effort into it already. Unfortunately I think you ultimately need to recode it from the ground up (again).

I am perfectly willing to talk with you via skype/some other IM client to explain the process if you would like but basically this is the general outline of this type of spell:

  • On Cast
    • Events
      • -------- This is the proper event, not "begins casting" --------
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to <ABILITY>
    • Actions
      • -------- Create a new instance of the spell --------
      • Set Instances = Instances + 1
      • -------- Assign this instance's variables --------
      • Set Caster[Instances] = (Triggering Unit)
      • Set RemainingLoops[Instances] = Integer(<SPELL DURATION>/<Period of periodic trigger>)
      • etc.
      • -------- Do anything you need to do at the beginning of the cast --------
      • Hero - Modify strength of Caster[Instances]: add <STR BONUS>
      • Special Effect - Create...
      • -------- You may need to save things like special effects in other variables so you can destroy them later: --------
      • Set SFX1[Instances] = (last created special effect)
      • Special Effect - Create...
      • Set SFX2[Instances] = (last created special effect)
      • etc.
      • -------- If the periodic trigger is not going then turn it on --------
      • If (all conditions) then do (actions) else do (actions)
        • If - Conditions
          • Instances equal to 1
          • -------- Either above or below method, but not both; depends on how/why you might turn the trigger off --------
          • (Periodic <gen> is on) equal to false
        • Then - Actions
          • Trigger - Turn on Periodic <gen>
        • Else - Actions
  • Periodic (DISABLED BY DEFAULT)
    • Events
      • Time - Every 0.03125 seconds of game-time
      • -------- I would recommend you never go below this number, which corresponds to 32 runs per second --------
      • -------- 0.01 is WAY too often and will cause serious lag --------
      • -------- For most spells you could probably get away with something like 0.20 to 0.50
    • Conditions
    • Actions
      • For Each (integer LoopInt) from 1 to Instances do (Actions)
        • -------- Now you use LoopInt to reference the different instances instead of Instances like in the On Cast trigger --------
        • -------- First check to see if the instance should be ended --------
        • Set RemainingLoops[LoopInt] = RemainingLoops[LoopInt] - 1
        • If (all conditions) then do (actions) else do (actions)
          • If - Conditions
            • Or - Any conditions are true
              • -------- Needs to be < 0 so that it still runs on the 'last' time --------
              • RemainingLoops[LoopInt] less than 0
              • -------- Check for other things that might end the spell early --------
              • (Caster[LoopInt] is dead) equal to true
          • Then - Actions
            • -------- To properly deallocate this index, first destroy/remove everything that needs to be gotten rid of --------
            • Special Effect - Destroy SFX1[LoopInt]
            • Special Effect - Destroy SFX2[LoopInt]
            • etc.
            • -------- Then move the last instance into the slot of 'this' (the ending) instance --------
            • Set Caster[LoopInt] = Caster[Instances]
            • Set SFX1[LoopInt] = SFX1[Instances]
            • Set SFX2[LoopInt] = SFX2[Instances]
            • Set RemainingLoops[LoopInt] = RemainingLoops[Instances]
            • etc.
            • -------- Then reduce Instances and LoopInt so you don't skip over the 'last' instance you just moved --------
            • Set Instances = Instances - 1
            • Set LoopInt = LoopInt - 1
            • -------- Check if you should stop the periodic trigger because there are no active instances --------
            • If (all conditions) then (actions) else (actions)
              • If - Conditions
                • Instances equal to 0
              • Then - Actions
                • Trigger - Turn off Periodic <gen>
                • -------- When the last instance expires it will keep reducing LoopInt and running the code repeatedly so we just tell it to stop because we know it should --------
                • Skip remaining actions
              • Else - Actions
          • Else - Actions
            • -------- Do whatever you need to do for each instance every iteration --------
            • Set TempLoc = Position of Caster[LoopInt]
            • Custom script: set bj_wantDestroyGroup = true
            • Unit Group - Pick every unit within <RANGE> of TempLoc matching <TARGET MATCHING CONDITIONS> and do (Actions)
              • Loop - Actions
                • Unit - Cause Caster[LoopInt] to damage (Picked unit) for <DAMAGE> of attack type Spells and damage type Normal
            • Custom script: call RemoveLocation(udg_TempLoc)
 

NightKnight

Hosted Project RUID
Level 14
Joined
Sep 3, 2014
Messages
222
This doesn't work. Permanent effects
  • (changed [demonic_index to loop_index in removing still nothing is removed.]
  • Then - Actions
    • Unit - Cause Demonic_Caster[Demonic_Index] to damage Demonic_pickedunits, dealing Demonic_Damage damage of attack type Chaos and damage type Universal
    • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
    • -------- --------------------------------------------------------- --------
    • -------- Those first 8 actions is for the effect (Dummies) --------
    • Unit - Create 1 Dummy (small) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
    • Set MainEffectDem1[Demonic_Index] = (Last created unit)
    • Unit - Create 1 Dummy (big) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
    • Set MainEffectDem2[Demonic_Index] = (Last created unit)
    • Unit - Create 1 Dummy (crono) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
    • Set MainEffectDem3[Demonic_Index] = (Last created unit)
    • Unit - Create 1 Dummy2 (raising skull/howl) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
    • Set MainEffectDem4[Demonic_Index] = (Last created unit)
    • -------- Demonic Rage Str gained --------
    • Hero - Modify Strength of Demonic_Caster[Demonic_Index]: Add Demonic_Strength_Gained
    • Hero - Modify Agility of Demonic_Caster[Demonic_Index]: Add Demonic_Agility_Gained
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • Demonic_Index Greater than or equal to 1
      • Then - Actions
        • Trigger - Turn on Demonic Loop Config <gen>
        • Trigger - Turn on Demonic Loop Copy <gen>
      • Else - Actions
  • -----------------------------------------
  • Then - Actions
    • Unit - Remove MainEffectDem1[Demonic_Index] from the game
    • Unit - Remove MainEffectDem2[Demonic_Index] from the game
    • Unit - Remove MainEffectDem3[Demonic_Index] from the game
    • Hero - Modify Strength of Demonic_Caster[Demonic_LoopIndex]: Subtract Demonic_Strength_Gained
    • Hero - Modify Agility of Demonic_Caster[Demonic_LoopIndex]: Subtract Demonic_Agility_Gained
    • Unit - Set Demonic_Caster[Demonic_LoopIndex] movement speed to (Default movement speed of Demonic_Caster[Demonic_LoopIndex])
    • Unit - Create 1 Dummy (big) for Neutral Passive at DemonicPoint[Demonic_LoopIndex] facing Default building facing degrees
    • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
    • Set Demonic_UnitGroup = (Units within Demonic_Radius of DemonicPoint[Demonic_LoopIndex])
    • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
      • Loop - Actions
        • Set Demonic_pickedunits = (Picked unit)
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • (Demonic_pickedunits is Magic Immune) Equal to False
            • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
          • Then - Actions
            • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_Ending_Damage damage of attack type Chaos and damage type Universal
          • Else - Actions
    • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
    • Set Demonic_Caster[Demonic_LoopIndex] = Demonic_Caster[Demonic_Index]
    • Set Demonic_Counter[Demonic_LoopIndex] = Demonic_Counter[Demonic_Index]
    • Set Demonic_Index = (Demonic_Index - 1)
    • Set Demonic_LoopIndex = (Demonic_LoopIndex - 1)
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • Demonic_Index Equal to 0
      • Then - Actions
        • Trigger - Turn off Demonic Loop Config <gen>
        • Trigger - Turn off (This trigger)
      • Else - Actions
 
Level 39
Joined
Feb 27, 2007
Messages
5,040
Can you post the whole triggers you're using now? I'm not sure what part of the code this is supposed to be. My hunch is that you're destroying the wrong group in the second line:

Custom script: call DestroyGroup(udg_Demonic_UnitGroup) should be udg_Demonic_pickedunits.
 

NightKnight

Hosted Project RUID
Level 14
Joined
Sep 3, 2014
Messages
222
  • Demonic Rage
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to DEMONIC RAGE
    • Actions
      • Set Demonic_Index = (Demonic_Index + 1)
      • Set Demonic_Counter[Demonic_Index] = 0.00
      • Set CasterDR[Demonic_Index] = (Triggering unit)
      • Set Demonic_Caster[Demonic_Index] = CasterDR[Demonic_Index]
      • Set TempPoint[Demonic_Index] = (Position of Demonic_Caster[Demonic_Index])
      • Custom script: set bj_wantDestroyGroup=true
      • -------- --------------------------------------------------------- --------
      • -------- Damage and AOE (area of effect) --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Demonic_Index Greater than or equal to 1
        • Then - Actions
          • Set Demonic_UnitGroup = (Units within Demonic_Radius of TempPoint[Demonic_Index])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Demonic_pickedunits is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_Index])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_Index] to damage Demonic_pickedunits, dealing Demonic_Damage damage of attack type Chaos and damage type Universal
                  • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
                  • -------- --------------------------------------------------------- --------
                  • -------- Those first 8 actions is for the effect (Dummies) --------
                  • Unit - Create 1 Dummy (small) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Set MainEffectDem1[Demonic_Index] = (Last created unit)
                  • Unit - Create 1 Dummy (big) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Set MainEffectDem2[Demonic_Index] = (Last created unit)
                  • Unit - Create 1 Dummy (crono) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Set MainEffectDem3[Demonic_Index] = (Last created unit)
                  • Unit - Create 1 Dummy2 (raising skull/howl) for Neutral Passive at TempPoint[Demonic_Index] facing Default building facing degrees
                  • Set MainEffectDem4[Demonic_Index] = (Last created unit)
                  • -------- Demonic Rage Str gained --------
                  • Hero - Modify Strength of Demonic_Caster[Demonic_Index]: Add Demonic_Strength_Gained
                  • Hero - Modify Agility of Demonic_Caster[Demonic_Index]: Add Demonic_Agility_Gained
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Demonic_Index Greater than or equal to 1
                    • Then - Actions
                      • Trigger - Turn on Demonic Loop Config <gen>
                      • Trigger - Turn on Demonic Loop Copy <gen>
                    • Else - Actions
                • Else - Actions
        • Else - Actions
  • Demonic Loop Copy
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Demonic_LoopIndex) from 1 to Demonic_Index, do (Actions)
        • Loop - Actions
          • Set Demonic_Counter[Demonic_LoopIndex] = (Demonic_Counter[Demonic_LoopIndex] + 1.00)
          • Unit - Set Demonic_Caster[Demonic_LoopIndex] movement speed to Demonic_Speed_bonus
          • Unit - Create 1 Dummy (small) for Neutral Passive at DemonicPoint[Demonic_LoopIndex] facing Default building facing degrees
          • Unit - Add a Demonic_LesserWind_duration second Generic expiration timer to (Last created unit)
          • Unit - Create 1 Dummy2 (lightning) for Neutral Passive at DemonicPoint[Demonic_LoopIndex] facing Default building facing degrees
          • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Demonic_Counter[Demonic_LoopIndex] Greater than or equal to 2.00
            • Then - Actions
              • Unit - Remove MainEffectDem4[Demonic_LoopIndex] from the game
            • Else - Actions
              • -------- ----------------------------------------------------------- --------
          • -------- Damage Over Time --------
          • -------- ------------------------------------------------------------------------ --------
          • Set Demonic_UnitGroup = (Units within DemonicTimeRadius of DemonicPoint[Demonic_LoopIndex])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Demonic_pickedunits is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_DamageOverTime damage of attack type Chaos and damage type Universal
                • Else - Actions
          • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
          • -------- Continuous Damage inside the main place --------
          • Set Demonic_UnitGroup = (Units within Demonic_Radius of TempPoint[Demonic_LoopIndex])
          • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
            • Loop - Actions
              • Set Demonic_pickedunits = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Picked unit) is Magic Immune) Equal to False
                  • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
                • Then - Actions
                  • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_Damage damage of attack type Chaos and damage type Universal
                • Else - Actions
          • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
          • -------- Ability ends --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Demonic_Counter[Demonic_LoopIndex] Greater than or equal to 20.00
            • Then - Actions
              • Unit - Remove MainEffectDem1[Demonic_Index] from the game
              • Unit - Remove MainEffectDem2[Demonic_Index] from the game
              • Unit - Remove MainEffectDem3[Demonic_Index] from the game
              • Hero - Modify Strength of Demonic_Caster[Demonic_LoopIndex]: Subtract Demonic_Strength_Gained
              • Hero - Modify Agility of Demonic_Caster[Demonic_LoopIndex]: Subtract Demonic_Agility_Gained
              • Unit - Set Demonic_Caster[Demonic_LoopIndex] movement speed to (Default movement speed of Demonic_Caster[Demonic_LoopIndex])
              • Unit - Create 1 Dummy (big) for Neutral Passive at DemonicPoint[Demonic_LoopIndex] facing Default building facing degrees
              • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
              • Set Demonic_UnitGroup = (Units within Demonic_Radius of DemonicPoint[Demonic_LoopIndex])
              • Unit Group - Pick every unit in Demonic_UnitGroup and do (Actions)
                • Loop - Actions
                  • Set Demonic_pickedunits = (Picked unit)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Demonic_pickedunits is Magic Immune) Equal to False
                      • (Demonic_pickedunits belongs to an enemy of (Owner of Demonic_Caster[Demonic_LoopIndex])) Equal to True
                    • Then - Actions
                      • Unit - Cause Demonic_Caster[Demonic_LoopIndex] to damage Demonic_pickedunits, dealing Demonic_Ending_Damage damage of attack type Chaos and damage type Universal
                    • Else - Actions
              • Custom script: call DestroyGroup(udg_Demonic_UnitGroup)
              • Set Demonic_Caster[Demonic_LoopIndex] = Demonic_Caster[Demonic_Index]
              • Set Demonic_Counter[Demonic_LoopIndex] = Demonic_Counter[Demonic_Index]
              • Set Demonic_Index = (Demonic_Index - 1)
              • Set Demonic_LoopIndex = (Demonic_LoopIndex - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Demonic_Index Equal to 0
                • Then - Actions
                  • Trigger - Turn off Demonic Loop Config <gen>
                  • Trigger - Turn off (This trigger)
                • Else - Actions
            • Else - Actions
 
Level 39
Joined
Feb 27, 2007
Messages
5,040
Use Starts Effect of an Ability instead.
What is the Demonic Loop Config trigger?

The set bj_wantDestroyGroup = true makes it so you don't have to use a unit group variable (Demonic_UnitGroup). In fact you don't need the first big If block either because it will always be true. Finally everything inside the Pick every unit... loop runs for every unit it finds, so it attempts to destroy Demonic_UnitGroup an additional 8 times. If it finds 100 units to damage then the triggers are getting turned on 100 times and the Str/Agi bonus is applied 100 times! So with that in mind you should restructure it like:
  • Set <all your variables>
  • Custom script: set bj_wantDestroyGroup = true
  • -------- Notice how Demonic_UnitGroup isn't used, so you don't have to delete it in the loop below! --------
  • Unit Group - Pick every unit in (Units within DemonicRadius of TempPoint[Demonic_Index]) and do (Actions)
    • Loop - Actions
      • If (All conditions) then blah blah do unit damage stuff
  • Hero - Modify Strength and Agility
  • If (Demonic Index > 1 and Demonic Loop Copy is off) then (Turn Demonic Loop Copy on)
Unit - Set Demonic_Caster[Demonic_LoopIndex] movement speed to Demonic_Speed_bonus doesn't take into account the unit's current speed, so you should just use an item bonus move speed ability instead. Most item abilities don't have command card icons so you won't even have to do the disabled spellbook thing. Also this runs every loop; you should set everything that only happens once in the cast trigger!

Where in your triggers do you set DemonicPoint[Demonic_LoopIndex]?? I don't see it.

Why can't you just add a 2 second expiration timer to MainEffectDem4 instead of removing it manually? In any case it should simply be = 2.00 to prevent the if block running every time after 2 as well.

Again you don't need to use Demonic_UnitGroup here either as long as you bj_wantDestroyGroup properly. Same goes for the ending damage loop.



Then upload an updated map so I can see it in action.
 
So whats the next step? Send instructions not just useless tutorials.
reyo, it is actually your job to get it working.
You can not sit in your submission thread and wait for accurate instructions what to change in code step by step.
You should consider to use your own time for arranging to fix it instead of waiting for others.

If you really have too much trouble in getting something to work, as already said, open a thread in help forum so people can teach you, and then you can apply it yourself.

Very benevolent to make such posts like Pyrogasm, and absolutly not required. Very appreciated.
 
V4.0:
- The code is still full of point and group leaks, you need to use call RemoveLocation(loc) to clean up points and bj_WantDestroyGroup() = true or call DestroyGroup(group) to clean up groups
- Clean up the test map, the actual triggers aren't even in the DEMONIC RAGE folder and all the trigger names are improper
- Why do you have a trigger run every 1 second? this gives inconsistent behaviour of up to 0.99 seconds out variance
- I have no idea what the point of having Demonic_Point[Index] and Demonic_Point[LoopIndex] only one of these is needed are arguably neither is, could just set a temporary point variable (no array) to the point of the caster
- The spell doesn't support multiple levels
- Your variable names are too generic, please make use of prefix for your variables which is used consistently ("Demonic_" is fine for example)
- Use "Unit starts the effect of an ability" not "Unit starts casting"
- Please remove debug text from your triggers
- Please attach a version number to the map itself, makes updates easier to keep track of (and knowing we have the latest version)
That should just about cover it

That should just about cover it for this version, I hope you'll continue to work on it
 

NightKnight

Hosted Project RUID
Level 14
Joined
Sep 3, 2014
Messages
222
I don't want to delete Demonic_Point to avoid any bug or glitch happen.
The version is written in "DEMONIC RAGE.w3x"
"Unit starts effect" causes a bug in the ability.
I made the ability as an ultimate ability, that's why I didn't support levels.
I can't remove locations as they are still used in the loop.
 
Most of that can be covered by "It's in the rules" that being:
Rules said:
The spell/system must be leakless. To find out more about leaks, click here.
You have to clear the point leaks & group leaks wherever they occur
Supporting usage of multiple levels would fall under Mimicing ingame mechanics & Configuration rules, it doesn't matter if you made it as an ultimate - even ultimate spells in the game support multiple levels if the user wants them
Your version number should be displayed in an intuitive location like the map name or the file name, not somewhere obscure like the map header
Unit starts casting causes a glitch "as well", in fact when I tested the spell I experienced the exact same glitch both times (even after all instances have expired I still get the number "4" repeatedly sent as a message to the screen, this should surely be "0" as an aside I have some additional notes:
- The spell lacks a proper tooltip (no hotkey displayed)
- I wouldn't use metamorphosis as the base ability, it can cause glitches (particularly if it can be casted twice by the same unit)
- Your loop trigger should be turned off when all instances end
- AttackType and DamageType could be configurable
- You reference (Picked unit) after setting a variable to (Picked unit) I presume this was a leftover mistake
 
V5.0:
This version has almost all of the same problems as the previous ones
- Location leaks still
- Group leaks still
- Multiple levels are supported normally though configuration variables either base + per level * level values (where a variable is there for base and per level) or through stat[level] where it's an array. Not through adding additional if statements for every level as it's not practical or scale-able for users
- You are still using a unit begins casting
- various other notes (see the previous reviews)
- What on earth happened to the recycling? it just doesn't exist anymore?
 
Please don't post trivial or incomplete updates to the spell. There are other sections for troubles you're having as have been previously linked - all I can do is just set this back to awaiting update as my previous reviews still apply, continually doing it will result in the resource being moved to substandard instead of awaiting update.
 

NightKnight

Hosted Project RUID
Level 14
Joined
Sep 3, 2014
Messages
222
I update the map continuously so you tell me if the problem/bug/whatever is fixed. so I know if I should continue work on this thing or its done.
By the way, tell me all the problems again for the newest version, as all the stated are for older version.
Group leaks: I've already made the "Custom script: set bj_wantDestroyGroup = true"
Location leaks: I've made 4 scripts at the end of the loop trigger.
These are what I understood from the past 4 comment pages.
 
Level 37
Joined
Jul 22, 2015
Messages
3,485
Group leaks: I've already made the "Custom script: set bj_wantDestroyGroup = true"
The script needs to be right before the unit group loop. Creating a unit can fire off multiple events, which means other triggers will run. If a user were to use a unit group loop in any of those triggers, your unit group on cast will leak. You also still leak a unit group in your loop.


In regard to locations used, you store the same location reference into two seperate variables. This is completely unnecessary and can pose problems if you were to remove one of them. I also advise you fix all the hardcoded values in your code.
 
bj_WantDestroyGroup() == True has to be set every time you are about to create a group that will leak
location leaks have to be cleared every time you set a location to a new point, not once at the end of the spell
you lack proper recycling still
a unit begins casting is still being used
multilevel support is still incomplete (this should range for all possible attributes ideally, at least half), also they should be calculated on cast and not calculated every loop
loop timer should run every 0.03 seconds or 0.04, not every 1 (has up to 0.99 second latency/inaccuracy)
damagetype and weapontype are still not configurable
 
Top