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

Arcane Watch v1.00

A month and ten days ago, I suggested a hero with this spell to PlayDotA. However, IceFrog never seems to look at the forums, so I decided to drop it and use it for myself.

-----------------------
The Watcher gathers all her knowledge of the enemy, and causes magical implosions depending on a base damage and the information she has gathered.

Level 1 - Deals base damage x (1.5x Charges) damage, gives +1 charge every 3 seconds the target was visible to the Watcher. 65 base damage.
Level 2 - Deals base damage x (1.6x Charges) damage, gives +1 charge every 2 seconds the target was visible to the Watcher. 75 base damage.
Level 3 - Deals base damage x (1.7x Charges) damage, gives +1 charge every 1 seconds the target was visible to the Watcher. 85 base damage.

Loses one charge every second the target goes out of sight.

Takes 60/40/20 seconds to deal full damage of 900/1275/1445. Cast repeatedly to maximize effect.


  • Arcane Watch Setup
    • Events
      • Time - Elapsed game time is 0.00 seconds
    • Conditions
    • Actions
      • -------- The multiplier in which the base damage is multiplied --------
      • Set AW_ChargesMultiplier[1] = 1.50
      • Set AW_ChargesMultiplier[2] = 1.60
      • Set AW_ChargesMultiplier[3] = 1.70
      • -------- The Implosion Effect --------
      • Set AW_ImplodeEffect = Abilities\Weapons\DragonHawkMissile\DragonHawkMissile.mdl
      • -------- The Watch Effect --------
      • Set AW_WatchEffect = Abilities\Spells\Human\MagicSentry\MagicSentryCaster.mdl
      • -------- The base damage --------
      • Set AW_BaseDamage[1] = 65.00
      • Set AW_BaseDamage[2] = 75.00
      • Set AW_BaseDamage[3] = 85.00
      • Custom script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
        • Loop - Actions
          • Custom script: set udg_TempUnit = GetEnumUnit()
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Level of Implode for TempUnit) Equal to 0
              • (Level of Arcane Watch for TempUnit) Greater than 0
            • Then - Actions
              • Unit - Add Implode to TempUnit
            • Else - Actions
          • Custom script: set udg_TempUnit = null
  • Arcane Watch Learn
    • Events
      • Unit - A unit Learns a skill
    • Conditions
      • (Level of Implode for (Triggering unit)) Equal to 0
      • (Learned Hero Skill) Equal to Arcane Watch
    • Actions
      • Unit - Add Implode to (Triggering unit)
  • Arcane Watch
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Arcane Watch
        • Then - Actions
          • Trigger - Turn on Arcane Watch Loop <gen>
          • Set AW_Index = (AW_Index + 1)
          • Set AW_Caster[AW_Index] = (Triggering unit)
          • Set AW_Target[AW_Index] = (Target unit of ability being cast)
          • Set TempInteger = (Level of (Ability being cast) for AW_Caster[AW_Index])
          • Set AW_Duration[AW_Index] = 60.00
          • Set AW_StackCounter[AW_Index] = AW_StackIncrement[TempInteger]
          • Set AW_Stacks[AW_Index] = 1
          • Set TempPoint = (Position of AW_Target[AW_Index])
          • Unit - Create 1 Dummy for (Owner of AW_Caster[AW_Index]) at TempPoint facing Default building facing degrees
          • Custom script: set udg_AW_Dummy[udg_AW_Index] = bj_lastCreatedUnit
          • Unit - Add Permanent Invisibility (Literal) to AW_Dummy[AW_Index]
          • Special Effect - Create a special effect attached to the chest of AW_Dummy[AW_Index] using AW_WatchEffect
          • Custom script: set udg_AW_Effect[udg_AW_Index] = bj_lastCreatedEffect
          • Custom script: call RemoveLocation(udg_TempPoint)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Implode
        • Then - Actions
          • Custom script: set udg_TempUnit = GetTriggerUnit()
          • For each (Integer TempIndex) from 1 to AW_Index, do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TempUnit Equal to AW_Caster[TempIndex]
                • Then - Actions
                  • Set AW_PrematureEnd[TempIndex] = True
                • Else - Actions
          • Custom script: set udg_TempUnit = null
        • Else - Actions
  • Arcane Watch Loop
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • For each (Integer TempIndex) from 1 to AW_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AW_Duration[TempIndex] Greater than 0.00
            • Then - Actions
              • Set AW_Duration[TempIndex] = (AW_Duration[TempIndex] - 1.00)
              • Set TempPoint = (Position of AW_Target[TempIndex])
              • Unit - Move AW_Dummy[TempIndex] instantly to TempPoint
              • Custom script: call RemoveLocation(udg_TempPoint)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AW_Duration[TempIndex] Greater than 3.00
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (AW_Target[TempIndex] is visible to (Owner of AW_Caster[TempIndex])) Equal to True
                    • Then - Actions
                      • Set AW_StackCounter[TempIndex] = (AW_StackCounter[TempIndex] - 1)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • AW_StackCounter[TempIndex] Equal to 0
                          • AW_Stacks[TempIndex] Less than AW_StackMax
                        • Then - Actions
                          • Set AW_StackCounter[TempIndex] = (Level of Arcane Watch for AW_Caster[TempIndex])
                          • Set AW_Stacks[TempIndex] = (AW_Stacks[TempIndex] + 1)
                        • Else - Actions
                    • Else - Actions
                      • Set AW_Stacks[TempIndex] = (AW_Stacks[TempIndex] - 1)
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • AW_Duration[TempIndex] Less than or equal to 3.00
                      • AW_PrematureEnd[TempIndex] Equal to True
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AW_Duration[TempIndex] Greater than 3.00
                    • Then - Actions
                      • Set AW_Duration[TempIndex] = 3.00
                    • Else - Actions
                  • Set TempReal = (AW_ChargesMultiplier[(Level of Arcane Watch for AW_Caster[TempIndex])] x (Real(AW_Stacks[TempIndex])))
                  • Set TempReal = (TempReal x AW_BaseDamage[(Level of Arcane Watch for AW_Caster[TempIndex])])
                  • Set TempReal = (TempReal / 3.00)
                  • Unit - Cause AW_Caster[TempIndex] to damage AW_Target[TempIndex], dealing TempReal damage of attack type Spells and damage type Magic
                  • Unit - Add a 0.01 second Generic expiration timer to AW_Dummy[TempIndex]
                  • Special Effect - Create a special effect attached to the chest of AW_Target[TempIndex] using AW_ImplodeEffect
                  • Special Effect - Destroy (Last created special effect)
                • Else - Actions
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (AW_Target[TempIndex] is alive) Equal to False
                      • AW_Duration[TempIndex] Less than or equal to 0.00
                • Then - Actions
                  • Special Effect - Destroy AW_Effect[TempIndex]
                  • Set AW_Caster[TempIndex] = AW_Caster[AW_Index]
                  • Set AW_StackCounter[TempIndex] = AW_StackCounter[AW_Index]
                  • Set AW_Stacks[TempIndex] = AW_Stacks[AW_Index]
                  • Set AW_Target[TempIndex] = AW_Target[AW_Index]
                  • Set AW_Duration[TempIndex] = AW_Duration[AW_Index]
                  • Set AW_PrematureEnd[TempIndex] = False
                  • Set AW_Index = (AW_Index - 1)
                  • Set TempIndex = (TempIndex - 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AW_Index Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
                • Else - Actions

Yes, I know, the trigger might not respond very fast due to every 1.00 second. I did it because it seemed fine to me since the dummy has an eye model.

Almost forgot; charge cap for everyone is 10.

Credits to Vexorian for the dummy.

Give credits if you use it in your map.

Keywords:
Arcane, Watch, Watcher, Arcane Watch
Contents

Arcane Watch (Map)

Reviews
18:23, 25th Sep 2013 PurgeandFire: Approved. Post: http://www.hiveworkshop.com/forums/2422035-post22.html

Moderator

M

Moderator

18:23, 25th Sep 2013
PurgeandFire: Approved.

Post:
http://www.hiveworkshop.com/forums/2422035-post22.html
 
Level 13
Joined
Mar 29, 2012
Messages
530
Review

Minimize

Comment

Rating

  • You can do like this on picking units
    • Custom script: set bj_wantDestroyGroup = true
    • Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
      • Loop - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • <Put Condition Here>
          • Then - Actions
            • Unit - Add Implode to (Picked unit)
          • Else - Actions
  • You can store (Triggering unit) on Arcane Watch Learn trigger, then use it to check the level of Implode inside trigger action
  • You can merge the Arcane Watch and Arcane Watch Implode triggers
  • You can move unit with "call SetUnitX(unit, newX)" and "call SetUnitY(unit, newY)"
  • (Owner of (Unit)) == (Triggering player)
Approved
I didn't found any serious problem :)...but i don't know... Good job! +Rep
[TD]

Rating

[/TD]
 
Last edited:
Looks good. Approved. The code is very nice, I can't really see anything too wrong with it.

Just as a tip (to save you some time in the future), you can use "Event response - Triggering Player" in the "Unit starts the effect of an ability..." trigger just to save you some clicking (and it is ever-so-slightly faster, but that shouldn't really be a concern in this case).
 
Looks good. Approved. The code is very nice, I can't really see anything too wrong with it.

Just as a tip (to save you some time in the future), you can use "Event response - Triggering Player" in the "Unit starts the effect of an ability..." trigger just to save you some clicking (and it is ever-so-slightly faster, but that shouldn't really be a concern in this case).

Thank you for the approval!
 
Top