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

Zephyr Contest #11 - My aura, Your aura

Status
Not open for further replies.
Another Update

HC 7? Hero Contest #7?Edit:
Fleshed out the aura system for my aura. Hopefully it's good enough! Here is the current snapshot of my aura.Edit:
Added a second snapshot of my aura. Most of the work is done, just need to solve a little bug and optimize/clean the code.Edit:
Well, time for a list of bugs for my spell that I'll have to address.
  1. The aura sometimes targets a null unit.
  2. Targets are only added to the unit group, not removed. Once you are tagged by the aura, you're stuck with it forever.
  3. My dummy casters don't like listening to me, and won't cast my spells.
  4. Unit filtering is on the fritz
  5. The radius of the aura can't be changed.
  6. Getting access to the aura instance is rather difficult and inconsistent from within the associated triggers for my aura spell.
  7. The code looks ugly, and probably needs optimization.
 

Attachments

  • (Spell) Aspect of Lightning.w3x
    33 KB · Views: 77
Last edited:
Level 13
Joined
Jun 20, 2014
Messages
479
Savior's Aura (Entry)

Hi, this is my entry for the contest. Nothing has changed since the last update of the spell. The active spell is based on Taunt, the aura is based on devotion aura and the container is from spellbook


Emits an aura that heals nearby allied units whenever the bearer of the aura is attacked. Also allows you to force enemy units within 250 radius to attack you.

Level 1 - Heals nearby units based on 30% of the bearer's strength.
Level 2 - Heals nearby units based on 60% of the bearer's strength.
Level 3 - Heals nearby units based on 90% of the bearer's strength.
Level 4 - Heals nearby units based on 120% of the bearer's strength.

Area of Effect: 500
Units that has this ability will not be healed by this aura.



  • SaviorAuraTriggerConfiguration
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- set the ability that will be the basis for the aura --------
      • -------- - --------
      • Set SA_A_PassiveAbility = Savior's Aura (Container)
      • Set SA_A_ActiveAbility = Savior's Aura (Active)
      • -------- - --------
      • -------- set the buff that the ability will emit --------
      • -------- - --------
      • Set SA_BF_Buff = Savior's Aura
      • -------- - --------
      • -------- if set to true, the amount healed will be based on the percentage of strength of the hero --------
      • -------- if set to false, the number will directly heal units --------
      • -------- please note that 20% is 20.00 and not 0.2 --------
      • -------- - --------
      • Set SA_B_UseStat = True
      • -------- - --------
      • Set SA_R_Heal[1] = 30.00
      • Set SA_R_Heal[2] = 60.00
      • Set SA_R_Heal[3] = 90.00
      • Set SA_R_Heal[4] = 120.00
      • -------- - --------
      • -------- special effects configurables --------
      • -------- attachment point --------
      • -------- - --------
      • Set SA_S_Attach = origin
      • -------- - --------
      • -------- special effects attached to unit --------
      • -------- - --------
      • Set SA_S_SFX = Abilities\Spells\Undead\VampiricAura\VampiricAuraTarget.mdl
      • -------- - --------
      • -------- if true, it will heal structures only if they have the buff from the aura --------
      • -------- - --------
      • Set SA_B_HealStructures = False
      • -------- - --------
      • -------- if true, it will heal magic immunes only if they have the buff from the aura --------
      • -------- - --------
      • Set SA_B_HealImmune = False
      • -------- - --------
      • -------- Area of effect of the aura --------
      • -------- - --------
      • Set SA_R_AoE[1] = 500.00
      • Set SA_R_AoE[2] = 500.00
      • Set SA_R_AoE[3] = 500.00
      • Set SA_R_AoE[4] = 500.00
      • -------- - --------
      • -------- list abilities that unlearns all hero skills --------
      • -------- SA_A_Total is the total number of abilities that can unlearn the spell --------
      • -------- - --------
      • Set SA_I_Total = 1
      • -------- - --------
      • Set SA_A_Unlearn[1] = Tome of Retraining
      • -------- - --------
      • -------- Disable spellbook --------
      • -------- - --------
      • For each (Integer SA_I_TempInt) from 1 to 12, do (Actions)
        • Loop - Actions
          • -------- - --------
          • -------- Disable the spellbook --------
          • -------- - --------
          • Player - Disable SA_A_PassiveAbility for (Player(SA_I_TempInt))
      • Custom script: set bj_wantDestroyGroup=true
      • -------- - --------
      • -------- Check if any there are units that already learnt the ability --------
      • -------- - --------
      • Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
        • Loop - Actions
          • -------- - --------
          • -------- add the picked unit into a variable --------
          • -------- - --------
          • Set SA_U_Picked = (Picked unit)
          • -------- - --------
          • -------- Check if the unit has leveled the ability --------
          • -------- - --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Level of SA_A_ActiveAbility for SA_U_Picked) Greater than 0
            • Then - Actions
              • -------- - --------
              • -------- add the actual aura to the picked unit --------
              • -------- - --------
              • Unit - Add SA_A_PassiveAbility to SA_U_Picked
            • Else - Actions
  • SaviorAuraEffect
    • Events
      • Unit - A unit Is attacked
    • Conditions
      • (Level of SA_A_ActiveAbility for (Attacked unit)) Greater than 0
      • ((Attacking unit) belongs to an enemy of (Owner of (Attacked unit))) Equal to True
    • Actions
      • -------- - --------
      • -------- Set the attacked unit --------
      • -------- - --------
      • Set SA_U_AtkUnit = (Attacked unit)
      • -------- - --------
      • -------- Determine the owner of the unit --------
      • -------- - --------
      • Set SA_PL_Player = (Owner of SA_U_AtkUnit)
      • -------- - --------
      • -------- set the level of the ability into a variable --------
      • -------- - --------
      • Set SA_I_Level = (Level of SA_A_ActiveAbility for SA_U_AtkUnit)
      • -------- - --------
      • -------- Checks on what value should be applied on the aura's healing effect --------
      • -------- - --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SA_B_UseStat Equal to True
        • Then - Actions
          • -------- - --------
          • -------- if this is applied then the heal value is equal to a certain percentage of the attacked unit's strength --------
          • -------- - --------
          • Set SA_R_HealAmt = ((Real((Strength of SA_U_AtkUnit (Include bonuses)))) x (SA_R_Heal[SA_I_Level] x 0.01))
        • Else - Actions
          • -------- - --------
          • -------- if this is applied, then the heal amount is equal to the predefined value in the trigger configuration --------
          • -------- - --------
          • Set SA_R_HealAmt = SA_R_Heal[SA_I_Level]
      • -------- - --------
      • -------- sets the position of the attacked units into a variable --------
      • -------- - --------
      • Set SA_P_AtkPos = (Position of SA_U_AtkUnit)
      • -------- - --------
      • -------- selects the valid units that can be healed --------
      • -------- - --------
      • Set SA_UG_UnitGroup = (Units within SA_R_AoE[SA_I_Level] of SA_P_AtkPos matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) belongs to an ally of SA_PL_Player) Equal to True) and ((((Matching unit) is A structure) Equal to SA_B_HealStructures) and ((((Match
      • -------- - --------
      • -------- heals the picked units --------
      • -------- - --------
      • Unit Group - Pick every unit in SA_UG_UnitGroup and do (Actions)
        • Loop - Actions
          • -------- - --------
          • -------- sets the picked unit into a variable --------
          • -------- its ok to recycle this variable isn't it? --------
          • -------- - --------
          • Set SA_U_Picked = (Picked unit)
          • -------- - --------
          • -------- Heals the picked unit --------
          • -------- - --------
          • Unit - Set life of SA_U_Picked to ((Life of SA_U_Picked) + SA_R_HealAmt)
          • -------- - --------
          • -------- Add some visuals --------
          • -------- - --------
          • Special Effect - Create a special effect attached to the SA_S_Attach of SA_U_Picked using SA_S_SFX
          • -------- - --------
          • -------- destroy visuals to prevent leaks --------
          • -------- - --------
          • Special Effect - Destroy (Last created special effect)
      • -------- - --------
      • -------- Clean up --------
      • -------- - --------
      • -------- SA_UG_UnitGroup.Clear(); --------
      • -------- Clear the unit group --------
      • -------- - --------
      • Unit Group - Remove all units from SA_UG_UnitGroup
      • -------- - --------
      • -------- Destroy the instance of the unit group --------
      • -------- - --------
      • Custom script: call DestroyGroup(udg_SA_UG_UnitGroup)
      • -------- - --------
      • -------- Destroy the point --------
      • -------- - --------
      • Custom script: call RemoveLocation(udg_SA_P_AtkPos)


EDIT: Ta da! thanks for noticing cakemaster
 

Attachments

  • Savior's Aura.w3x
    38.4 KB · Views: 79
  • Savior's Aura Image.png
    Savior's Aura Image.png
    512.9 KB · Views: 141
Last edited:
Don't feel like getting into any problems to waiting too long for a WiP so here is my entry currently. This is my WiP.


I usually like coming into contests at last minute to surprise people however I think I will pass on doing that for this contest.

Oh, and I hope that the dummy ability to show aura's in the status bar don't count as your sub? My aura stacks with any aura in-game standard/custom. :thumbs_up:

Sadly only half of it is complete however that is not just sad but good because this is meant to be the WiP. :grin:

Enjoy the preview, I am hoping to be at least equal with everyone else on awesomely made cool aura's. :wink:


Edit: Be warned, nothing is documented yet.
 

Attachments

  • wip.jpg
    wip.jpg
    64.7 KB · Views: 97
  • angry birds aura contest hive.w3x
    54.3 KB · Views: 50
Last edited:
Level 13
Joined
Jul 16, 2012
Messages
679
My Final Entry v1.01

Dark Circle
By GywGod133

DESCRIPTION
  • The Death Knight wields his dark sword that can devise a dark circle which summons a mysterious energy at an enemy. The energy reduces 1 to 10 armor for 5 seconds that deals random damage. The circle can increases the hit point regeneration in Death Knight by (Current Maximum Health) hit points per second.
    If a marked unit dies, restores hit points to nearby friendly units.
    The circle lasts 15 seconds.

    Level 1 - Deals 50 - 80 damage, Heals for 150 hit points.
    Level 2 - Deals 60 - 90 damage, Heals for 200 hit points.
    Level 3 - Deals 70 - 100 damage, Heals for 250 hit points.
    Level 4 - Deals 80 - 110 damage, Heals for 300 hit points.

    Manacost: 75
    Cooldown: 35

TRIGGERS

    • DrkC Setup
      • Events
        • Map initialization
      • Conditions
      • Actions
        • -------- ======================== -------- ======================== --------
        • -------- D A R K C I R C L E --------
        • -------- By GywGod133 --------
        • -------- ======================== -------- ======================== --------
        • -------- P E R I O D I C T I M E --------
        • -------- ======================== --------
        • -------- > Loop --------
        • Custom script: set udg_DrkC_Loop = 0.03125000
        • -------- > Trigger Event --------
        • Trigger - Add to DrkC Loop Main <gen> the event (Time - Every DrkC_Loop seconds of game time)
        • Trigger - Add to DrkC Loop Sub <gen> the event (Time - Every DrkC_Loop seconds of game time)
        • -------- ======================== --------
        • -------- A B I L I T Y --------
        • -------- ======================== --------
        • -------- > Ability ID (Main) --------
        • Set DrkC_Ability = Dark Circle
        • -------- > Ability ID (Armor Reduce) --------
        • Set DrkC_ArmorReduce = DrkC_Armor
        • -------- ======================== --------
        • -------- N E G A T I V E A R M O R ( A B I L I T Y ) --------
        • -------- ======================== --------
        • -------- > Maximum Level of Negative Armor --------
        • Set DrkC_ArmorReduce_MaxLvl = 10
        • -------- > Duration --------
        • Set DrkC_ArmorReduce_Duration[1] = 5.00
        • Set DrkC_ArmorReduce_Duration[2] = 5.00
        • Set DrkC_ArmorReduce_Duration[3] = 5.00
        • Set DrkC_ArmorReduce_Duration[4] = 5.00
        • -------- ======================== --------
        • -------- D P S M I N / M A X --------
        • -------- ======================== --------
        • -------- > Min --------
        • Set DrkC_DPSMin[1] = 50.00
        • Set DrkC_DPSMin[2] = 60.00
        • Set DrkC_DPSMin[3] = 70.00
        • Set DrkC_DPSMin[4] = 80.00
        • -------- > Max --------
        • Set DrkC_DPSMax[1] = 80.00
        • Set DrkC_DPSMax[2] = 90.00
        • Set DrkC_DPSMax[3] = 100.00
        • Set DrkC_DPSMax[4] = 110.00
        • -------- ======================== --------
        • -------- H E A L --------
        • -------- ======================== --------
        • -------- > Heal Dmg --------
        • Set DrkC_Heal[1] = 150.00
        • Set DrkC_Heal[2] = 200.00
        • Set DrkC_Heal[3] = 250.00
        • Set DrkC_Heal[4] = 300.00
        • -------- > Heal AoE --------
        • Set DrkC_HealAoE[1] = 300.00
        • Set DrkC_HealAoE[2] = 300.00
        • Set DrkC_HealAoE[3] = 300.00
        • Set DrkC_HealAoE[4] = 300.00
        • -------- ======================== --------
        • -------- A R E A O F E F F E C T --------
        • -------- ======================== --------
        • Set DrkC_AoE[1] = 300.00
        • Set DrkC_AoE[2] = 300.00
        • Set DrkC_AoE[3] = 300.00
        • Set DrkC_AoE[4] = 300.00
        • -------- ======================== --------
        • -------- S P E L L D U R A T I O N --------
        • -------- ======================== --------
        • Set DrkC_Duration[1] = 15.00
        • Set DrkC_Duration[2] = 15.00
        • Set DrkC_Duration[3] = 15.00
        • Set DrkC_Duration[4] = 15.00
        • -------- ======================== --------
        • -------- A T T A C K / D A M A G E T Y P E --------
        • -------- ======================== --------
        • -------- > Attack --------
        • Set DrkC_AttackType = Spells
        • -------- > Damage --------
        • Set DrkC_DamageType = Normal
        • -------- ======================== --------
        • -------- S P E C I A L E F F E C T --------
        • -------- ======================== --------
        • -------- > Damage --------
        • Set DrkC_SFX[1] = Abilities\Spells\Undead\AnimateDead\AnimateDeadTarget.mdl
        • -------- > Healed --------
        • Set DrkC_SFX[2] = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
        • Set DrkC_SFX_Attachment = chest
        • -------- ======================== --------
        • -------- S O U N D E F F E C T --------
        • -------- ======================== --------
        • Set DrkC_Sound = GateEpicBash <gen>
        • -------- ======================== --------
        • -------- T R A N S P A R E N C Y ( I N / O U T ) S P E E D --------
        • -------- ======================== --------
        • -------- > Transparency In --------
        • Set DrkC_TransparentIn_Speed = 5.00
        • -------- > Transparency Out --------
        • Set DrkC_TransparentOut_Speed = 5.00
        • -------- ======================== --------
        • -------- V I S I B I L I T Y M O D I F I E R --------
        • -------- ======================== --------
        • Set DrkC_VM_AoE[1] = 400.00
        • Set DrkC_VM_AoE[2] = 400.00
        • Set DrkC_VM_AoE[3] = 400.00
        • Set DrkC_VM_AoE[4] = 400.00
        • -------- ======================== --------
        • -------- D U M M I E S F U N C T I O N --------
        • -------- ======================== --------
        • -------- > Circle Main / Sub --------
        • Set DrkC_DummyTypes[1] = DrkC_Circle (Black - Main)
        • Set DrkC_DummyTypes[2] = DrkC_Circle (Black - Sub)
        • -------- > Rune --------
        • Set DrkC_DummyTypes[3] = DrkC_Circle (Red - 1)
        • Set DrkC_DummyTypes[4] = DrkC_Circle (Red - 2)
        • Set DrkC_DummyTypes[5] = DrkC_Circle (Red - 3)
        • Set DrkC_DummyTypes[6] = DrkC_Circle (Red - 4)
        • Set DrkC_RuneCount = 4
        • -------- > Circle Sub Offset --------
        • Set DrkC_CCircle_Offset = 200.00
        • -------- > Circle Sub Spin Speed (Angle) --------
        • Set DrkC_CCircle_Speed_Angle = 4.00
        • -------- > Circle Sub Spin Speed (Facing) --------
        • Set DrkC_CCircle_Speed_Facing = 3.00
        • -------- > Black Circle Spin Speed --------
        • Set DrkC_Spin_CCircle = 2.00
        • -------- > Rune Spin Speed --------
        • Set DrkC_Spin_CRune = 3.00
        • -------- > Tree Chopper (Destroy Trees) --------
        • Set DrkC_TempPoint[1] = (Center of (Playable map area))
        • Unit - Create 1 Peasant for Neutral Passive at DrkC_TempPoint[1] facing Default building facing degrees
        • Set DrkC_TreeChopper = (Last created unit)
        • Custom script: call UnitAddAbilityBJ( 'Aloc', udg_DrkC_TreeChopper )
        • Unit - Hide DrkC_TreeChopper
        • -------- ======================== --------
        • -------- Remove / Destroy --------
        • Custom script: call DestroyTrigger( GetTriggeringTrigger())
        • Custom script: call RemoveLocation( udg_DrkC_TempPoint[1])
        • -------- ======================== --------
    • DrkC Start
      • Events
        • Unit - A unit Starts the effect of an ability
      • Conditions
        • (Ability being cast) Equal to DrkC_Ability
      • Actions
        • -------- ======================== -------- ======================== --------
        • -------- T U R N O N T H E T R I G G E R L O O P ( M A I N ) --------
        • -------- ======================== -------- ======================== --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • DrkC_Y Equal to 0
          • Then - Actions
            • Trigger - Turn on DrkC Loop Main <gen>
          • Else - Actions
        • -------- ======================== -------- ======================== --------
        • -------- I N D E X I N G ( M U I ) F U N C T I O N --------
        • -------- ======================== -------- ======================== --------
        • Set DrkC_Y = (DrkC_Y + 1)
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • DrkC_Y Greater than DrkC_Y_maxSize
          • Then - Actions
            • Set DrkC_Y_Index[DrkC_Y] = DrkC_Y
            • Set DrkC_Y_maxSize = DrkC_Y
          • Else - Actions
        • Set DrkC_XY_TempInt = DrkC_Y_Index[DrkC_Y]
        • -------- ======================== -------- ======================== --------
        • -------- S A V E T H E I M P O R T A N T D A T A --------
        • -------- ======================== -------- ======================== --------
        • -------- Caster --------
        • Set DrkC_Caster[DrkC_XY_TempInt] = (Triggering unit)
        • -------- Player --------
        • Set DrkC_Player[DrkC_XY_TempInt] = (Triggering player)
        • -------- Current Level of Ability --------
        • Set DrkC_Level[DrkC_XY_TempInt] = (Level of DrkC_Ability for DrkC_Caster[DrkC_XY_TempInt])
        • -------- Spell Duration Function --------
        • Set DrkC_Duration_Real[DrkC_XY_TempInt] = DrkC_Duration[DrkC_Level[DrkC_XY_TempInt]]
        • -------- DPS Duration --------
        • Set DrkC_PerSec[DrkC_XY_TempInt] = 0.00
        • -------- ======================== -------- ======================== --------
        • -------- D U M M I E S F U N C T I O N --------
        • -------- ======================== -------- ======================== --------
        • -------- Create Black Circle (Main) --------
        • Set DrkC_TempPoint[1] = (Target point of ability being cast)
        • Unit - Create 1 DrkC_DummyTypes[1] for Neutral Passive at DrkC_TempPoint[1] facing (Random angle) degrees
        • Set DrkC_CCircle[DrkC_XY_TempInt] = (Last created unit)
        • -------- ======================== --------
        • -------- Circle (Sub) --------
        • -------- > Save Angle --------
        • Set DrkC_CCircle_Sub1_Angle[DrkC_XY_TempInt] = (Random angle)
        • Set DrkC_CCircle_Sub2_Angle[DrkC_XY_TempInt] = (DrkC_CCircle_Sub1_Angle[DrkC_XY_TempInt] + 90.00)
        • Set DrkC_CCircle_Sub3_Angle[DrkC_XY_TempInt] = (DrkC_CCircle_Sub1_Angle[DrkC_XY_TempInt] + 180.00)
        • Set DrkC_CCircle_Sub4_Angle[DrkC_XY_TempInt] = (DrkC_CCircle_Sub1_Angle[DrkC_XY_TempInt] + 270.00)
        • -------- > Check Point --------
        • Set DrkC_TempPoint[2] = ((Target point of ability being cast) offset by DrkC_CCircle_Offset towards DrkC_CCircle_Sub1_Angle[DrkC_XY_TempInt] degrees)
        • Set DrkC_TempPoint[3] = ((Target point of ability being cast) offset by DrkC_CCircle_Offset towards DrkC_CCircle_Sub2_Angle[DrkC_XY_TempInt] degrees)
        • Set DrkC_TempPoint[4] = ((Target point of ability being cast) offset by DrkC_CCircle_Offset towards DrkC_CCircle_Sub3_Angle[DrkC_XY_TempInt] degrees)
        • Set DrkC_TempPoint[5] = ((Target point of ability being cast) offset by DrkC_CCircle_Offset towards DrkC_CCircle_Sub4_Angle[DrkC_XY_TempInt] degrees)
        • -------- > Create / Save Dummy Sub --------
        • Unit - Create 1 DrkC_DummyTypes[2] for Neutral Passive at DrkC_TempPoint[2] facing (Random angle) degrees
        • Set DrkC_CCircle_Sub1[DrkC_XY_TempInt] = (Last created unit)
        • Unit - Create 1 DrkC_DummyTypes[2] for Neutral Passive at DrkC_TempPoint[3] facing (Random angle) degrees
        • Set DrkC_CCircle_Sub2[DrkC_XY_TempInt] = (Last created unit)
        • Unit - Create 1 DrkC_DummyTypes[2] for Neutral Passive at DrkC_TempPoint[4] facing (Random angle) degrees
        • Set DrkC_CCircle_Sub3[DrkC_XY_TempInt] = (Last created unit)
        • Unit - Create 1 DrkC_DummyTypes[2] for Neutral Passive at DrkC_TempPoint[5] facing (Random angle) degrees
        • Set DrkC_CCircle_Sub4[DrkC_XY_TempInt] = (Last created unit)
        • -------- > Save Facing --------
        • Set DrkC_CCircle_Sub1_Facing[DrkC_XY_TempInt] = (Facing of DrkC_CCircle_Sub1[DrkC_XY_TempInt])
        • Set DrkC_CCircle_Sub2_Facing[DrkC_XY_TempInt] = (Facing of DrkC_CCircle_Sub2[DrkC_XY_TempInt])
        • Set DrkC_CCircle_Sub3_Facing[DrkC_XY_TempInt] = (Facing of DrkC_CCircle_Sub3[DrkC_XY_TempInt])
        • Set DrkC_CCircle_Sub4_Facing[DrkC_XY_TempInt] = (Facing of DrkC_CCircle_Sub4[DrkC_XY_TempInt])
        • -------- > Transparency --------
        • Set DrkC_Transparent[DrkC_XY_TempInt] = 100.00
        • Set DrkC_Boolean_TransparentIn[DrkC_XY_TempInt] = True
        • Set DrkC_Boolean_TransparentOut[DrkC_XY_TempInt] = True
        • Animation - Change DrkC_CCircle[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
        • Animation - Change DrkC_CCircle_Sub1[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
        • Animation - Change DrkC_CCircle_Sub2[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
        • Animation - Change DrkC_CCircle_Sub3[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
        • Animation - Change DrkC_CCircle_Sub4[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
        • Animation - Change DrkC_CRune[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
        • -------- ======================== --------
        • -------- Rune --------
        • -------- > Check Point --------
        • Set DrkC_TempPoint[6] = (Target point of ability being cast)
        • Set DrkC_TempPoint[7] = (Target point of ability being cast)
        • -------- > Create / Save Rune --------
        • Unit - Create 1 DrkC_DummyTypes[(Random integer number between 3 and (DrkC_RuneCount + 2))] for Neutral Passive at DrkC_TempPoint[6] facing (Random angle) degrees
        • Set DrkC_CRune[DrkC_XY_TempInt] = (Last created unit)
        • -------- > Sound Effect --------
        • Sound - Play DrkC_Sound at 100.00% volume, located at DrkC_TempPoint[7] with Z offset 0.00
        • -------- ======================== --------
        • -------- Visibility Modifier --------
        • -------- > Check Point --------
        • Set DrkC_TempPoint[8] = (Target point of ability being cast)
        • -------- > Create / Save Visibility Modifier --------
        • Visibility - Create an initially Enabled visibility modifier for DrkC_Player[DrkC_XY_TempInt] emitting Visibility from DrkC_TempPoint[8] to a radius of DrkC_VM_AoE[DrkC_Level[DrkC_XY_TempInt]]
        • Set DrkC_VisibilityModifier[DrkC_XY_TempInt] = (Last created visibility modifier)
        • -------- ======================== -------- ======================== --------
        • -------- R E M O V E L E A K S --------
        • -------- ======================== -------- ======================== --------
        • Custom script: call RemoveLocation( udg_DrkC_TempPoint[1])
        • Custom script: call RemoveLocation( udg_DrkC_TempPoint[2])
        • Custom script: call RemoveLocation( udg_DrkC_TempPoint[3])
        • Custom script: call RemoveLocation( udg_DrkC_TempPoint[4])
        • Custom script: call RemoveLocation( udg_DrkC_TempPoint[5])
        • Custom script: call RemoveLocation( udg_DrkC_TempPoint[6])
        • Custom script: call RemoveLocation( udg_DrkC_TempPoint[7])
        • Custom script: call RemoveLocation( udg_DrkC_TempPoint[8])
        • -------- ======================== --------
    • DrkC Loop Main
      • Events
      • Conditions
      • Actions
        • -------- ======================== -------- ======================== --------
        • -------- PLEASE DO NOT MODIFY UNLESS YOU KNOW WHAT YOU ARE DOING!! --------
        • -------- ======================== -------- ======================== --------
        • For each (Integer DrkC_X) from 1 to DrkC_Y, do (Actions)
          • Loop - Actions
            • Set DrkC_XY_TempInt = DrkC_Y_Index[DrkC_X]
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • DrkC_Boolean_TransparentOut[DrkC_XY_TempInt] Equal to False
              • Then - Actions
                • -------- ======================== --------
                • -------- Destroy / Remove --------
                • Visibility - Destroy DrkC_VisibilityModifier[DrkC_XY_TempInt]
                • Unit - Remove DrkC_CCircle[DrkC_XY_TempInt] from the game
                • Unit - Remove DrkC_CRune[DrkC_XY_TempInt] from the game
                • Unit - Remove DrkC_CCircle_Sub1[DrkC_XY_TempInt] from the game
                • Unit - Remove DrkC_CCircle_Sub2[DrkC_XY_TempInt] from the game
                • Unit - Remove DrkC_CCircle_Sub3[DrkC_XY_TempInt] from the game
                • Unit - Remove DrkC_CCircle_Sub4[DrkC_XY_TempInt] from the game
                • -------- ======================== --------
                • -------- Recycle Index --------
                • Set DrkC_PerSec[DrkC_XY_TempInt] = 0.00
                • Set DrkC_Duration_Real[DrkC_XY_TempInt] = 0.00
                • Set DrkC_DPS_Real[DrkC_XY_TempInt] = 0.00
                • Set DrkC_CRune[DrkC_XY_TempInt] = No unit
                • Set DrkC_CCircle[DrkC_XY_TempInt] = No unit
                • Set DrkC_CCircle_Sub1[DrkC_XY_TempInt] = No unit
                • Set DrkC_CCircle_Sub2[DrkC_XY_TempInt] = No unit
                • Set DrkC_CCircle_Sub3[DrkC_XY_TempInt] = No unit
                • Set DrkC_CCircle_Sub4[DrkC_XY_TempInt] = No unit
                • Set DrkC_CCircle_Sub1_Angle[DrkC_XY_TempInt] = 0.00
                • Set DrkC_CCircle_Sub2_Angle[DrkC_XY_TempInt] = 0.00
                • Set DrkC_CCircle_Sub3_Angle[DrkC_XY_TempInt] = 0.00
                • Set DrkC_CCircle_Sub4_Angle[DrkC_XY_TempInt] = 0.00
                • Set DrkC_CCircle_Sub1_Facing[DrkC_XY_TempInt] = 0.00
                • Set DrkC_CCircle_Sub2_Facing[DrkC_XY_TempInt] = 0.00
                • Set DrkC_CCircle_Sub3_Facing[DrkC_XY_TempInt] = 0.00
                • Set DrkC_CCircle_Sub4_Facing[DrkC_XY_TempInt] = 0.00
                • Set DrkC_Y_Index[DrkC_X] = DrkC_Y_Index[DrkC_Y]
                • Set DrkC_Y_Index[DrkC_Y] = DrkC_XY_TempInt
                • Set DrkC_X = (DrkC_X - 1)
                • Set DrkC_Y = (DrkC_Y - 1)
                • -------- ======================== --------
                • -------- > When the value of Y is 0, you must turn off this Trigger --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • DrkC_Y Equal to 0
                  • Then - Actions
                    • Trigger - Turn off (This trigger)
                    • Skip remaining actions
                  • Else - Actions
                • -------- ======================== --------
              • Else - Actions
                • -------- ======================== --------
                • -------- Transparent Function ( I N ) --------
                • -------- > When the Dark Circle has been summoned --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • DrkC_Boolean_TransparentIn[DrkC_XY_TempInt] Equal to True
                  • Then - Actions
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • DrkC_Transparent[DrkC_XY_TempInt] Less than or equal to 0.00
                      • Then - Actions
                        • -------- ======================== --------
                        • -------- When the value of DrkC_TransparentIn[DrkC_XY_TempInt] is equal to 0 --------
                        • Set DrkC_Boolean_TransparentIn[DrkC_XY_TempInt] = False
                        • -------- ======================== --------
                        • -------- > Change the color of CCircle into Black --------
                        • Animation - Change DrkC_CCircle[DrkC_XY_TempInt]'s vertex coloring to (0.00%, 0.00%, 0.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                        • -------- ======================== --------
                      • Else - Actions
                        • -------- ======================== --------
                        • -------- > Decreases DrkC_TransparentIn[DrkC_XY_TempInt] --------
                        • Set DrkC_Transparent[DrkC_XY_TempInt] = (DrkC_Transparent[DrkC_XY_TempInt] - DrkC_TransparentIn_Speed)
                        • Animation - Change DrkC_CCircle[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                        • Animation - Change DrkC_CRune[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                        • Animation - Change DrkC_CCircle_Sub1[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                        • Animation - Change DrkC_CCircle_Sub2[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                        • Animation - Change DrkC_CCircle_Sub3[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                        • Animation - Change DrkC_CCircle_Sub4[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                        • -------- ======================== --------
                    • -------- ======================== --------
                  • Else - Actions
                    • -------- ======================== --------
                    • -------- Transparent Function ( O U T ) --------
                    • -------- > When the value of DrkC_Duration_Real[DrkC_XY_TempInt] is equal to -0.000 --------
                    • -------- > DrkC_Duration_Real[DrkC_XY_TempInt] is a SPELL DURATION --------
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • DrkC_Boolean_TransparentOut[DrkC_XY_TempInt] Equal to True
                        • DrkC_Duration_Real[DrkC_XY_TempInt] Less than or equal to 0.00
                      • Then - Actions
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • DrkC_Transparent[DrkC_XY_TempInt] Greater than or equal to 100.00
                          • Then - Actions
                            • -------- ======================== --------
                            • -------- When the value of DrkC_TransparentOut[DrkC_XY_TempInt] is equal to 0 --------
                            • Set DrkC_Boolean_TransparentOut[DrkC_XY_TempInt] = False
                            • -------- ======================== --------
                          • Else - Actions
                            • -------- ======================== --------
                            • -------- > Increases DrkC_TransparentOut[DrkC_XY_TempInt] --------
                            • Set DrkC_Transparent[DrkC_XY_TempInt] = (DrkC_Transparent[DrkC_XY_TempInt] + DrkC_TransparentOut_Speed)
                            • Animation - Change DrkC_CCircle[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                            • Animation - Change DrkC_CRune[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                            • Animation - Change DrkC_CCircle_Sub1[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                            • Animation - Change DrkC_CCircle_Sub2[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                            • Animation - Change DrkC_CCircle_Sub3[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                            • Animation - Change DrkC_CCircle_Sub4[DrkC_XY_TempInt]'s vertex coloring to (100.00%, 100.00%, 100.00%) with DrkC_Transparent[DrkC_XY_TempInt]% transparency
                            • -------- ======================== --------
                        • -------- ======================== --------
                      • Else - Actions
                        • -------- ======================== --------
                        • -------- Spell Duration Function --------
                        • -------- > Decreases 0.0312500 in DrkC_Duration_Real[DrkC_XY_TempInt] --------
                        • Set DrkC_Duration_Real[DrkC_XY_TempInt] = (DrkC_Duration_Real[DrkC_XY_TempInt] - DrkC_Loop)
                        • -------- ======================== --------
                        • -------- Damage Per Sec Function --------
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • DrkC_PerSec[DrkC_XY_TempInt] Less than or equal to 0.00
                          • Then - Actions
                            • Set DrkC_UnitGroup[DrkC_XY_TempInt] = (Units within DrkC_AoE[DrkC_Level[DrkC_XY_TempInt]] of (Position of DrkC_CCircle[DrkC_XY_TempInt]))
                            • Unit Group - Pick every unit in DrkC_UnitGroup[DrkC_XY_TempInt] and do (Actions)
                              • Loop - Actions
                                • Set DrkC_TempUnit = (Picked unit)
                                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                  • If - Conditions
                                    • (DrkC_TempUnit is alive) Equal to True
                                    • (DrkC_TempUnit is Magic Immune) Equal to False
                                    • (DrkC_TempUnit belongs to an enemy of DrkC_Player[DrkC_XY_TempInt]) Equal to True
                                  • Then - Actions
                                    • -------- ======================== --------
                                    • -------- > Special Effect --------
                                    • Set DrkC_TempPoint[1] = (Position of DrkC_TempUnit)
                                    • Special Effect - Create a special effect at DrkC_TempPoint[1] using DrkC_SFX[1]
                                    • Special Effect - Destroy (Last created special effect)
                                    • -------- ======================== --------
                                    • -------- > Do Damage --------
                                    • Set DrkC_DPS_Real[DrkC_XY_TempInt] = (Random real number between DrkC_DPSMin[DrkC_Level[DrkC_XY_TempInt]] and DrkC_DPSMax[DrkC_Level[DrkC_XY_TempInt]])
                                    • Unit - Cause DrkC_Caster[DrkC_XY_TempInt] to damage DrkC_TempUnit, dealing DrkC_DPS_Real[DrkC_XY_TempInt] damage of attack type DrkC_AttackType and damage type DrkC_DamageType
                                    • -------- ======================== --------
                                    • -------- > Armor Reduce --------
                                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      • If - Conditions
                                        • (DrkC_TempUnit is in DrkC_ArmorReduce_UnitGroup) Equal to False
                                      • Then - Actions
                                        • -------- ======================== --------
                                        • -------- > Turn On Trigger Loop --------
                                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                          • If - Conditions
                                            • DrkC_Yr Equal to 0
                                          • Then - Actions
                                            • Trigger - Turn on DrkC Loop Sub <gen>
                                          • Else - Actions
                                        • -------- ======================== --------
                                        • -------- Indexing Function --------
                                        • Set DrkC_Yr = (DrkC_Yr + 1)
                                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                          • If - Conditions
                                            • DrkC_Yr Greater than DrkC_Yr_maxSize
                                          • Then - Actions
                                            • Set DrkC_Yr_Index[DrkC_Yr] = DrkC_Yr
                                            • Set DrkC_Yr_maxSize = DrkC_Yr
                                          • Else - Actions
                                        • Set DrkC_XYr_TempInt = DrkC_Yr_Index[DrkC_Yr]
                                        • -------- ======================== --------
                                        • -------- Save All Data --------
                                        • -------- > Save Enemy Unit --------
                                        • Set DrkC_rUnit[DrkC_XYr_TempInt] = DrkC_TempUnit
                                        • -------- > Save Player --------
                                        • Set DrkC_rPlayer[DrkC_XYr_TempInt] = DrkC_Player[DrkC_XY_TempInt]
                                        • -------- > Save Level --------
                                        • Set DrkC_rLevel[DrkC_XYr_TempInt] = DrkC_Level[DrkC_XY_TempInt]
                                        • -------- > Save Armor Reduce Duration --------
                                        • Set DrkC_rDuration_Real[DrkC_XYr_TempInt] = DrkC_ArmorReduce_Duration[DrkC_Level[DrkC_XY_TempInt]]
                                        • -------- ======================== --------
                                        • -------- > Add Armor Reduce in saved unit --------
                                        • Unit - Add DrkC_ArmorReduce to DrkC_rUnit[DrkC_XYr_TempInt]
                                        • -------- > Add the saved unit in Unit Group --------
                                        • Unit Group - Add DrkC_rUnit[DrkC_XYr_TempInt] to DrkC_ArmorReduce_UnitGroup
                                        • -------- ======================== --------
                                      • Else - Actions
                                        • -------- ======================== --------
                                        • -------- Stacking Negative Armor --------
                                        • -------- > When the unit stay in Dark Circle, his armor decreases until the Dark Circle disappear --------
                                        • -------- So, longer stay in Dark Circle, more armor decreases --------
                                        • For each (Integer DrkC_Xr) from 1 to DrkC_Yr, do (Actions)
                                          • Loop - Actions
                                            • Set DrkC_XYr_TempInt = DrkC_Yr_Index[DrkC_Xr]
                                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                              • If - Conditions
                                                • DrkC_rUnit[DrkC_XYr_TempInt] Equal to DrkC_TempUnit
                                                • (DrkC_rUnit[DrkC_XYr_TempInt] is in DrkC_ArmorReduce_UnitGroup) Equal to True
                                                • (Level of DrkC_ArmorReduce for DrkC_rUnit[DrkC_XYr_TempInt]) Not equal to DrkC_ArmorReduce_MaxLvl
                                              • Then - Actions
                                                • Set DrkC_rDuration_Real[DrkC_XYr_TempInt] = DrkC_ArmorReduce_Duration[DrkC_Level[DrkC_XY_TempInt]]
                                                • Unit - Set level of DrkC_ArmorReduce for DrkC_rUnit[DrkC_XYr_TempInt] to ((Level of DrkC_ArmorReduce for DrkC_rUnit[DrkC_XYr_TempInt]) + 1)
                                              • Else - Actions
                                        • -------- ======================== --------
                                    • -------- ======================== --------
                                    • -------- > Remove Leak --------
                                    • Custom script: call RemoveLocation( udg_DrkC_TempPoint[1])
                                    • -------- ======================== --------
                                  • Else - Actions
                            • -------- ======================== --------
                            • -------- HP Regen --------
                            • -------- > Maximum Health% Hp Regen --------
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • (Distance between (Position of DrkC_CCircle[DrkC_XY_TempInt]) and (Position of DrkC_Caster[DrkC_XY_TempInt])) Less than or equal to DrkC_AoE[DrkC_Level[DrkC_XY_TempInt]]
                              • Then - Actions
                                • Unit - Set life of DrkC_Caster[DrkC_XY_TempInt] to ((Life of DrkC_Caster[DrkC_XY_TempInt]) + ((Max life of DrkC_Caster[DrkC_XY_TempInt]) / 100.00))
                              • Else - Actions
                            • -------- ======================== --------
                            • -------- > DPS Real Refill --------
                            • Set DrkC_PerSec[DrkC_XY_TempInt] = 1.00
                            • -------- ======================== --------
                            • -------- > Remove Leak --------
                            • Custom script: call DestroyGroup( udg_DrkC_UnitGroup[ udg_DrkC_XY_TempInt])
                            • -------- ======================== --------
                          • Else - Actions
                            • -------- ======================== --------
                            • -------- > DPS Duration --------
                            • Set DrkC_PerSec[DrkC_XY_TempInt] = (DrkC_PerSec[DrkC_XY_TempInt] - DrkC_Loop)
                            • -------- ======================== --------
                • -------- ======================== --------
                • -------- Dummy Spin Function --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • DrkC_Duration_Real[DrkC_XY_TempInt] Greater than 0.00
                    • DrkC_Boolean_TransparentIn[DrkC_XY_TempInt] Equal to False
                  • Then - Actions
                    • -------- ======================== --------
                    • -------- > Dont Spin the CCircle in Trans In and Trans Out --------
                    • Set DrkC_TempPoint[2] = (Position of DrkC_CCircle[DrkC_XY_TempInt])
                    • Unit - Make DrkC_CCircle[DrkC_XY_TempInt] face ((Facing of DrkC_CCircle[DrkC_XY_TempInt]) + DrkC_Spin_CCircle) over 0.00 seconds
                    • -------- ======================== --------
                    • -------- Tree Chopper (Destroy Trees) --------
                    • Destructible - Pick every destructible within DrkC_AoE[DrkC_Level[DrkC_XY_TempInt]] of DrkC_TempPoint[2] and do (Actions)
                      • Loop - Actions
                        • Set DrkC_TempDest = (Picked destructible)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (DrkC_TempDest is alive) Equal to True
                            • (DrkC_TempDest is invulnerable) Equal to False
                          • Then - Actions
                            • Unit - Order DrkC_TreeChopper to Harvest DrkC_TempDest
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • (Current order of DrkC_TreeChopper) Equal to (Order(harvest))
                              • Then - Actions
                                • Destructible - Kill DrkC_TempDest
                              • Else - Actions
                            • Unit - Order DrkC_TreeChopper to Stop
                          • Else - Actions
                    • -------- ======================== --------
                    • -------- Remove Leak --------
                    • Custom script: call RemoveLocation( udg_DrkC_TempPoint[2])
                    • -------- ======================== --------
                  • Else - Actions
                • -------- ======================== --------
                • -------- > The CRune spin always until the SPELL DURATION reach -0.000 --------
                • Unit - Make DrkC_CRune[DrkC_XY_TempInt] face ((Facing of DrkC_CRune[DrkC_XY_TempInt]) - DrkC_Spin_CRune) over 0.00 seconds
                • -------- ======================== --------
                • -------- Dummy Sub Function --------
                • -------- > Check Point --------
                • Set DrkC_TempPoint[3] = ((Position of DrkC_CCircle[DrkC_XY_TempInt]) offset by DrkC_CCircle_Offset towards DrkC_CCircle_Sub1_Angle[DrkC_XY_TempInt] degrees)
                • Set DrkC_TempPoint[4] = ((Position of DrkC_CCircle[DrkC_XY_TempInt]) offset by DrkC_CCircle_Offset towards DrkC_CCircle_Sub2_Angle[DrkC_XY_TempInt] degrees)
                • Set DrkC_TempPoint[5] = ((Position of DrkC_CCircle[DrkC_XY_TempInt]) offset by DrkC_CCircle_Offset towards DrkC_CCircle_Sub3_Angle[DrkC_XY_TempInt] degrees)
                • Set DrkC_TempPoint[6] = ((Position of DrkC_CCircle[DrkC_XY_TempInt]) offset by DrkC_CCircle_Offset towards DrkC_CCircle_Sub4_Angle[DrkC_XY_TempInt] degrees)
                • -------- > Move Instant --------
                • Unit - Move DrkC_CCircle_Sub1[DrkC_XY_TempInt] instantly to DrkC_TempPoint[3], facing DrkC_CCircle_Sub1_Facing[DrkC_XY_TempInt] degrees
                • Unit - Move DrkC_CCircle_Sub2[DrkC_XY_TempInt] instantly to DrkC_TempPoint[4], facing DrkC_CCircle_Sub2_Facing[DrkC_XY_TempInt] degrees
                • Unit - Move DrkC_CCircle_Sub3[DrkC_XY_TempInt] instantly to DrkC_TempPoint[5], facing DrkC_CCircle_Sub3_Facing[DrkC_XY_TempInt] degrees
                • Unit - Move DrkC_CCircle_Sub4[DrkC_XY_TempInt] instantly to DrkC_TempPoint[6], facing DrkC_CCircle_Sub4_Facing[DrkC_XY_TempInt] degrees
                • -------- > Decreases DrkC_CCircle_Sub_Facing / Angle --------
                • Set DrkC_CCircle_Sub1_Angle[DrkC_XY_TempInt] = (DrkC_CCircle_Sub1_Angle[DrkC_XY_TempInt] - DrkC_CCircle_Speed_Angle)
                • Set DrkC_CCircle_Sub2_Angle[DrkC_XY_TempInt] = (DrkC_CCircle_Sub2_Angle[DrkC_XY_TempInt] - DrkC_CCircle_Speed_Angle)
                • Set DrkC_CCircle_Sub3_Angle[DrkC_XY_TempInt] = (DrkC_CCircle_Sub3_Angle[DrkC_XY_TempInt] - DrkC_CCircle_Speed_Angle)
                • Set DrkC_CCircle_Sub4_Angle[DrkC_XY_TempInt] = (DrkC_CCircle_Sub4_Angle[DrkC_XY_TempInt] - DrkC_CCircle_Speed_Angle)
                • Set DrkC_CCircle_Sub1_Facing[DrkC_XY_TempInt] = (DrkC_CCircle_Sub1_Facing[DrkC_XY_TempInt] - DrkC_CCircle_Speed_Facing)
                • Set DrkC_CCircle_Sub2_Facing[DrkC_XY_TempInt] = (DrkC_CCircle_Sub2_Facing[DrkC_XY_TempInt] - DrkC_CCircle_Speed_Facing)
                • Set DrkC_CCircle_Sub3_Facing[DrkC_XY_TempInt] = (DrkC_CCircle_Sub3_Facing[DrkC_XY_TempInt] - DrkC_CCircle_Speed_Facing)
                • Set DrkC_CCircle_Sub4_Facing[DrkC_XY_TempInt] = (DrkC_CCircle_Sub4_Facing[DrkC_XY_TempInt] - DrkC_CCircle_Speed_Facing)
                • -------- ======================== --------
                • -------- Remove Leaks --------
                • Custom script: call RemoveLocation( udg_DrkC_TempPoint[3])
                • Custom script: call RemoveLocation( udg_DrkC_TempPoint[4])
                • Custom script: call RemoveLocation( udg_DrkC_TempPoint[5])
                • Custom script: call RemoveLocation( udg_DrkC_TempPoint[6])
                • -------- ======================== --------
    • DrkC Loop Sub
      • Events
      • Conditions
      • Actions
        • -------- ======================== -------- ======================== --------
        • -------- PLEASE DO NOT MODIFY UNLESS YOU KNOW WHAT YOU ARE DOING!! --------
        • -------- ======================== -------- ======================== --------
        • For each (Integer DrkC_Xr) from 1 to DrkC_Yr, do (Actions)
          • Loop - Actions
            • Set DrkC_XYr_TempInt = DrkC_Yr_Index[DrkC_Xr]
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • DrkC_rDuration_Real[DrkC_XYr_TempInt] Less than or equal to 0.00
              • Then - Actions
                • -------- ======================== --------
                • -------- Destroy / Remove --------
                • Unit Group - Remove DrkC_rUnit[DrkC_XYr_TempInt] from DrkC_ArmorReduce_UnitGroup
                • Unit - Remove DrkC_ArmorReduce from DrkC_rUnit[DrkC_XYr_TempInt]
                • -------- ======================== --------
                • -------- Recycle Index --------
                • Set DrkC_rUnit[DrkC_XYr_TempInt] = No unit
                • Set DrkC_rDuration_Real[DrkC_XYr_TempInt] = 0.00
                • Set DrkC_Yr_Index[DrkC_Xr] = DrkC_Yr_Index[DrkC_Yr]
                • Set DrkC_Yr_Index[DrkC_Yr] = DrkC_XYr_TempInt
                • Set DrkC_Xr = (DrkC_Xr - 1)
                • Set DrkC_Yr = (DrkC_Yr - 1)
                • -------- ======================== --------
                • -------- > When the value of Yr is 0, you must turn off this Trigger --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • DrkC_Yr Equal to 0
                  • Then - Actions
                    • Trigger - Turn off (This trigger)
                    • Skip remaining actions
                  • Else - Actions
                • -------- ======================== --------
              • Else - Actions
                • -------- ======================== --------
                • -------- Unit Died --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • (DrkC_rUnit[DrkC_XYr_TempInt] is alive) Equal to False
                  • Then - Actions
                    • -------- ======================== --------
                    • -------- Heal those nearby allied units --------
                    • Set DrkC_HealedGroup[DrkC_XYr_TempInt] = (Units within DrkC_HealAoE[DrkC_rLevel[DrkC_XYr_TempInt]] of (Position of DrkC_rUnit[DrkC_XYr_TempInt]))
                    • Unit Group - Pick every unit in DrkC_HealedGroup[DrkC_XYr_TempInt] and do (Actions)
                      • Loop - Actions
                        • Set DrkC_TempUnit = (Picked unit)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (DrkC_TempUnit is alive) Equal to True
                            • (DrkC_TempUnit is A structure) Equal to False
                            • (DrkC_TempUnit is Mechanical) Equal to False
                            • (DrkC_TempUnit is Magic Immune) Equal to False
                            • (DrkC_TempUnit belongs to an ally of DrkC_rPlayer[DrkC_XYr_TempInt]) Equal to True
                            • (Percentage life of DrkC_TempUnit) Not equal to 100.00
                          • Then - Actions
                            • Special Effect - Create a special effect attached to the DrkC_SFX_Attachment of DrkC_TempUnit using DrkC_SFX[2]
                            • Special Effect - Destroy (Last created special effect)
                            • Unit - Set life of DrkC_TempUnit to ((Life of DrkC_TempUnit) + DrkC_Heal[DrkC_rLevel[DrkC_XYr_TempInt]])
                          • Else - Actions
                    • -------- ======================== --------
                    • -------- Remove Leak --------
                    • Custom script: call DestroyGroup( udg_DrkC_HealedGroup[ udg_DrkC_XYr_TempInt])
                    • -------- ======================== --------
                    • -------- Duration --------
                    • Set DrkC_rDuration_Real[DrkC_XYr_TempInt] = 0.00
                    • -------- ======================== --------
                  • Else - Actions
                    • -------- ======================== --------
                    • -------- Duration Function --------
                    • Set DrkC_rDuration_Real[DrkC_XYr_TempInt] = (DrkC_rDuration_Real[DrkC_XYr_TempInt] - DrkC_Loop)
                    • -------- ======================== --------

SCREENSHOTS

Dark Circle

Damage in enemy units

Heal the nearby allied units

attachment.php
attachment.php
attachment.php

CREDITS
 

Attachments

  • [GUI] Dark Circle v1.01 (Zephyr Contest).w3x
    49.1 KB · Views: 61
  • ScreenShot 01.png
    ScreenShot 01.png
    301.7 KB · Views: 539
  • ScreenShot 02.png
    ScreenShot 02.png
    327.5 KB · Views: 713
  • ScreenShot 03.png
    ScreenShot 03.png
    314.9 KB · Views: 691
Last edited:

Bannar

Code Reviewer
Level 26
Joined
Mar 19, 2008
Messages
3,140
You can not judge script by it's size. His script involves lot of line breaks for readability and comments for description. Actuall code size is much much lower. Whatmore, it often happens, that system/spell should not really be large, in case usually algorithm could be simplified.

If we do judge via code size..
Let me find ma trash text generator. I do hope that 1mln lines will be enough for me to win.
 
I agree Tank made quite a nice spell however it shouldn't win due to size alone, the amount of skill he has kind of makes the effort seem a bit lower. The only effort I saw was the idea and the creation, not the size. No offense or jealousy intended.

You guys are forgetting the others entries which are well done as well. Besides currently his spell only fires once or the victims die unless u kite/move around far enough away to re-set the aura debuff. =P Coolest thing I think was how he added terrain level/cliff damage.
 

Deleted member 219079

D

Deleted member 219079

I didn't even know moyack is on hive :O The god of Atan3!
 
I'll try to get an entry today. Just today I have time so I hope it can count as WIP and final entry...
Rules:
Any submission must follow a Work In Progress (WiP), before it is published and labelled as the final piece.
This rule doesn't let space for an exception to combine WIP and final entry.
 
I agree Tank made quite a nice spell however it shouldn't win due to size alone

Absolutely, it would be frustrating for everybody I think if that was a primary factor in winning regardless of which entry won

Dat-C3 said:
the amount of skill he has kind of makes the effort seem a bit lower. The only effort I saw was the idea and the creation, not the size. No offense or jealousy intended.

That's rather flattering, though I would say I did put a lot of effort into it, I pulled a double all-nighter to get it all done that fast XD

Dat-C3 said:
You guys are forgetting the others entries which are well done as well.

Indeed, as I've said earlier I think the contest is more evenly matched than some of you are giving credit for it being - some of those entries have some very cool and unique effects

Edit: for anybody who cares, when I remove ALL commenting and Linespacing turning it into a solid brick wall of code, the lines of code go from 1432 -> 594 making the commenting and readability lines about 60% of the code (this includes things like the readme)
 
Last edited:
Absolutely, it would be frustrating for everybody I think if that was a primary factor in winning regardless of which entry won



That's rather flattering, though I would say I did put a lot of effort into it, I pulled a double all-nighter to get it all done that fast XD



Indeed, as I've said earlier I think the contest is more evenly matched than some of you are giving credit for it being - some of those entries have some very cool and unique effects

Ah, sorry. Make sure to double-check that code then. :grin: When your tired you can sometimes slack on some area's of coding/triggering. Good to see that you did spend a lot of time and effort into it. :thumbs_up:
 
Semi-Final Submission

This is my semi-final submission! It works as advertised. I will polish this code later on to make it simpler and more efficient. I have a few bits to clean up and more to document I think. I have a scoring question; this is based on the aura itself, and not the supporting systems around it right?
 

Attachments

  • (Spell) Aspect of Lightning.w3x
    33.4 KB · Views: 76
Final Submission for Aspect of Lightning

This is my final submission post for this contest (barring any discovered bugs of course). Below is a list of configurables for Aspect of Lightning (the configurables for the support systems are not listed). Below this list is the code specific to Aspect of Lightning.
Normal aura look.
161106-albums6511-picture86880.png
Empowered aura look.
161106-albums6511-picture86881.png

Normal

Empowered

Aspect of Lightning (Z)

Active: Purges all nearby enemy units, removing all buffs from them and immobilizing them for 3 seconds. Their movement speed is reduced for 15 seconds. Deals 400 damage to summoned units.
Passive: Periodically hurls bolts of lightning at nearby enemy units dealing 25 damage.

Right-click to empower the aura.
Aspect of Lightning (Z)

Active: Purges all nearby enemy units, removing all buffs from them and immobilizing them for 3 seconds. Their movement speed is reduced for 15 seconds. Deals 400 damage to summoned units.
Passive: Periodically hurls bolts of lightning at nearby enemy units dealing 25 damage.

Empowered: The bolts of lightning bounces to two additional targets. Drains 25 mana each second.
Right-click to unempower the aura.
Configurables
JASS:
constant integer    AoL_AbilityId       ='A000' // This is the spell's object id for the aura.
constant integer    AoL_PurgeId         ='A001' // This is the object id for the purge aspect of the aura.
constant integer    AoL_LightningId     ='A002' // This is the object id for the unempowered chain lightning aspect of the aura.
constant integer    AoL_EmpoweredId     ='A003' // This is the object id for the empowered chain lightning aspect of the aura.
constant integer    AoL_Index           =StringHash("Aspect of Lightning") // This is where I index auras to units.
constant integer    AoL_PurgeOrderId    =852111 // This is the order id for "purge".
constant integer    AoL_LightningOrderId=852119 // This is the order id for "chainlightning".
constant integer    AoL_UnempowerOrderId=852544 // This is the order id for when a unit turns off autocasting for the aura.
constant integer    AoL_EmpowerOrderId  =852543 // This is the order id for when a unit turns on the autocasting for the aura.
constant real       AoL_ManaUseage      =25 // This is how much mana is drained each second to have the aura empowered.
constant string     AoL_LightningType   ="CLSB" // The type of lightning the aura creates.
constant string     AoL_EmpoweredType   ="AFOD" // The type of lightning the aura creates while empowered.
Aspect of Lightning
JASS:
//***************************************************************************
//*
//*  Aspect of Lightning.
//*
//***************************************************************************
//===========================================================================
// AoL_Tick
//   takes   nothing
//   returns nothing
//
//   Handles the periodic effect of Aspect of Lightning (defaulted at 1 second).
//      This is called internally by the aura system with Aura_Index set to the aura's id number.
//===========================================================================
function AoL_Tick takes nothing returns nothing
    // ***** Local variables *****
    local unit    Caster =Aura_Caster[Aura_Index]                         // The owner of the aura.
    local unit    Target =GroupPickRandomUnit(Aura_TargetsAdd[Aura_Index])// The potential target for the aura to zap.
    local real    X      =GetUnitX(Caster)                                // The x coordinate of the owner of the aura.
    local real    Y      =GetUnitY(Caster)                                // The y coordinate of the owner of the aura.
    local unit    Dummy                                                   // The potential dummy caster to zap the potential target.
    local integer SpellId=AoL_LightningId                                 // The zap spell's object id.
    local real    Mana   =GetUnitState(Caster,UNIT_STATE_MANA)            // How much mana the owner of the aura has.
    local integer Number =25                                              // How many lightning bolts to create.
    local real    Angle                                                   // The start point of the lightning bolt.
    local real    Angle2                                                  // The end point of the lightning bolt.
    local real    Radius =Aura_Radius[Aura_Index]                         // The radius of the aura.
    // ***** Zap random target *****
    if(Target!=null)then // If a target exists, zap it.
        // ***** Check empowered *****
        if(AoL_Empowered[Aura_Index])then
            // Check the mana of the caster to see if we can be empowered.
            if(Mana>=AoL_ManaUseage)then
                set SpellId=AoL_EmpoweredId
                call SetUnitState(Caster,UNIT_STATE_MANA,Mana-AoL_ManaUseage)
                // ***** Create lightning pulse effect denoting the AoE of the aura *****
                loop
                    exitwhen Number==0
                    set Angle=GetRandomReal(0,TWO_PI)
                    set Angle2=Angle+GetRandomReal(.5,1.5)
                    call Bolt(AoL_EmpoweredType,X+Radius*Cos(Angle),Y+Radius*Sin(Angle),X+Radius*Cos(Angle2),Y+Radius*Sin(Angle2),GetRandomReal(0.5,1))
                    set Number=Number-1
                endloop
            else // Not enough mana, unempower the aura.
                call IssueImmediateOrderById(Caster,AoL_UnempowerOrderId)
            endif
        endif
        set Dummy=CreateUnit(GetOwningPlayer(Caster),Cast_DummyId,X,Y,Atan2(GetUnitY(Target)-Y,GetUnitX(Target)-X))
        call UnitAddAbility(Dummy,SpellId)
        call SetUnitAbilityLevel(Dummy,SpellId,GetUnitAbilityLevel(Caster,AoL_AbilityId))
        call IssueTargetOrderById(Dummy,AoL_LightningOrderId,Target)
        call UnitApplyTimedLife(Dummy,'BTLF',1)
        set Dummy=null
        set Target=null
    endif
    // ***** Clean-up *****
    set Caster=null
endfunction
//===========================================================================
// AoL_Update
//   takes   nothing
//   returns nothing
//
//   Updates the aura every Aura_TIMEOUT seconds. Called internally by the
//      aura system with Aura_Index set to the aura's id number.
//===========================================================================
function AoL_Update takes nothing returns nothing
    local unit Caster=Aura_Caster[Aura_Index]
    local string LightningType=AoL_LightningType
    local real Angle=GetRandomReal(0,TWO_PI)
    local real Angle2=Angle+GetRandomReal(.5,1.5)
    local real X=GetUnitX(Caster)
    local real Y=GetUnitY(Caster)
    local real Radius=Aura_Radius[Aura_Index]
    if(AoL_Empowered[Aura_Index])then
        set LightningType=AoL_EmpoweredType
    endif
    call Bolt(LightningType,X+Radius*Cos(Angle),Y+Radius*Sin(Angle),X+Radius*Cos(Angle2),Y+Radius*Sin(Angle2),GetRandomReal(0.5,1))
    set Caster=null
endfunction
//===========================================================================
// AoL_Enter
//   takes   nothing
//   returns boolean - true means add the unit to the aura's targets, false means don't add the unit to the aura's targets.
//
//   This is called in response to a unit entering the area of effect of the aura.
//      The trigger has the aura's id number stored in it. This aura filters based
//      on if the unit is allied. Only enemies are added.
//===========================================================================
function AoL_Enter takes nothing returns boolean
    return not IsUnitAlly(GetTriggerUnit(),GetOwningPlayer(Aura_Caster[LoadInteger(Hash,GetHandleId(GetTriggeringTrigger()),0)]))
endfunction
//===========================================================================
// AoL_Create
//   takes   unit Unit   - The unit to attach the aura to.
//           real Radius - How big the aura is.
//   returns integer     - The aura id of the newly created aura.
//
//   Creates a new instance of the Aspect of Lightning aura.
//      Attaches the aura to the unit via hashtable.
//===========================================================================
function AoL_Create takes unit Unit,real Radius returns integer
    local integer AuraId=AS_Create(Unit,Radius,1,AoL_EnterFilter,AoL_TickFilter,AoL_UpdateFilter)
    set AoL_Empowered[AuraId]=false
    call SaveInteger(Hash,GetHandleId(Unit),AoL_Index,AuraId)
    return AuraId
endfunction
//===========================================================================
// AoL_SwitchState
//   takes   nothing
//   returns nothing
//
//   This switches the aura's empowered state from on to off and off to on
//      based on handling issued unit orders. This catches right-clicking
//      the aura's icon (autocast toggling).
//===========================================================================
function AoL_SwitchState takes nothing returns nothing
    set AoL_Empowered[LoadInteger(Hash,GetHandleId(GetTriggerUnit()),AoL_Index)]=GetIssuedOrderId()==AoL_EmpowerOrderId
endfunction
//===========================================================================
// AoL_Cast
//   takes   nothing
//   returns nothing
//
//   Triggers when the owner of the aura activates the aura by left-clicking it (casting).
//      The triggering unit has the aura id number attached to it.
//===========================================================================
function AoL_Cast takes nothing returns nothing
    // ***** Local variables *****
    local unit    Caster      =GetTriggerUnit()                               // The owner of the aura that just activated it.
    local player  Owner       =GetTriggerPlayer()                             // The player that owns the aura's owner.
    local integer AuraId      =LoadInteger(Hash,GetHandleId(Caster),AoL_Index)// The aura id the aura's owner is attached to.
    local integer Level       =GetUnitAbilityLevel(Caster,AoL_AbilityId)      // The level of the aura.
    local group   GroupIterate=Aura_TargetsAdd[AuraId]                        // The group of targets to iterate over.
    local group   GroupAdd    =Aura_TargetsPtr[AuraId]                        // The new group of targets to add iterated targets to.
    local unit    Unit                                                        // The current target.
    local unit    Dummy                                                       // Dummy casters to cast 'Purge' on the iterated targets.
    // ***** Iterate over targets *****
    loop
        // ***** Set-up loop *****
        set Unit=FirstOfGroup(GroupIterate)
        exitwhen Unit==null // Exit once iterated group is empty.
        // ***** Swap the unit *****
        call GroupRemoveUnit(GroupIterate,Unit)
        call GroupAddUnit(GroupAdd,Unit)
        // ***** Cast 'Purge' on the unit *****
        set Dummy=CreateUnit(Owner,Cast_DummyId,GetUnitX(Unit),GetUnitY(Unit),0)
        call UnitAddAbility(Dummy,AoL_PurgeId)
        call SetUnitAbilityLevel(Dummy,AoL_PurgeId,Level)
        call IssueTargetOrderById(Dummy,AoL_PurgeOrderId,Unit)
        call UnitApplyTimedLife(Dummy,'BTLF',1)
        // ***** Clean-up loop *****
        set Dummy=null
        set Unit=null
    endloop
    // ***** Swap unit groups *****
    set Aura_TargetsAdd[AuraId]=GroupAdd
    set Aura_TargetsPtr[AuraId]=GroupIterate
    // ***** Clean-up *****
    set GroupAdd=null
    set GroupIterate=null
    set Caster=null
    set Owner=null
endfunction
Updates
  1. Fixed documentation, and added a minor optimization.
  2. Inlined a function to gain a bit more performance and reduce the function count. Made the aura only consume mana when it actually has a target to cast an empowered chain lightning on.
  3. Added a list of all work in progress posts and concept idea posts relating to this final entry.
  4. Added screenshots and re-added the aura instances for the creeps and spawned units.
  5. Something must've changed, just in case last minute update; also, now more scary with only 666 lines of code.
 

Attachments

  • (Spell) Aspect of Lightning.w3x
    34.7 KB · Views: 111
Last edited:

Deleted member 219079

D

Deleted member 219079

Though many may deem it insane and out of the question, is a GUI configuration for a JASS entry frowned upon?

I bet not. When I was a GUI user, I was afraid of configuring vJass spells via JASS interface. So I bet GUI interface of configuration might be even better :D
 

Deleted member 219079

D

Deleted member 219079

Oh you guys, submitting your final submissions in time, watch and learn as I fail to submit my over 1k code in time >_>
 

Deleted member 219079

D

Deleted member 219079

TimerUtils StillDummy Table PUI, then solely for the spell only I created Tileset modifier library.
 
Status
Not open for further replies.
Top