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

Druid Spellpack (GUI)

This bundle is marked as awaiting update. A staff member has requested changes to it before it can be approved.
This mainly a spellpack with 12 different druid themed spells, but it also contains a few other things such as custom made icons and icons from World of Warcraft.
These spells are designed to be working with eachother, but feel free to adapt and change them however you see fit!

These spells were initially designed to be part of the map Guilds of Hyppos, however, since the developer of the map is currently (and has been for a while) unable to work on the map, i've decided to make my work public instead and share it with the community. Before anyone starts thinking the wrong things, all of this was me doing this because I wanted to add something very specific to the game and decided to make it myself to make it easier for the developer to add it in. Designing 12 abilities and then also balancing them is quite a task after all. So to repeat once again, all of these spell ideas and work is my own and nothing here has been requested by anyone for any reason.

The post itself is still a work in progress and I will add more information and how to import/use the spells inside the map.
The map itself has all functioning spells, some updates to the triggers are on the way.

The spells are split up into 3 categories, containing 4 different spells in each category.

The 4 different shapeshift abilities all primarily change your shape into the animal in spell and grants various bonuses, such as increased armor, damage, and passive effects when attacking.

There are 3 main categories happening when attempting to shapeshift and thus are the core mechanics of these spells.
  • Shapeshifting
    • If the caster (the druid) is in night elf form, then he will transform into the animal of the activated ability and activating the active component and gaining the passive components. However, if the druid is already in an animal shape, he will not change shapes and instead only activate the active component of the spell while keeping the passive components of his current form.
    • If you're shapeshifted, you can activate the spell of the same shape once more to end that shape early, this puts the spell on cooldown equal to the remaining cooldown since when you first shapeshifted.
  • Active component
    • Active component always goes off when casting your shapeshift ability, doesn't matter if you're in night elf form, bear, moonkin, wolf or spider. However, as described above, if you're in night elf form then you will shapeshift. This does mean however that if you're in bear form and you activate "Shapeshift: Spider" then you'll remain a bear but gain the invisibility effect of the spider's active component. Similarily, if you're a spider already and you activate "Shapeshift: Bear", you will remain a spider but still stun all nearby enemies.
  • Passive component
    • While shapeshifted you gain numerous passive bonuses depending on the shape you've taken on. All shapes have increased armor gain.
      • Bear:
        • Bash target after X amount of hits
        • Cleaves nearby enemies
        • Bonus HP
      • Wolf:
        • Stacking attackspeed and movement speed buff when attacking
      • Moonkin:
        • Manasteal on attacks
        • Cooldown reduction on own spells cast
      • Spider:
        • Shoots webs on X nearby enemies dealing Y damage, immobalizing them
    • Do note that one can only (with my core design) only have the passive components of one shape at a time because they're tied to those forms.


Shapeshift: Bear
Transforms into a big burly bear for 10 seconds, stunning nearby enemies for 2sec and increasing HP and Armor depending on Strength.

Increases Splash Damage depending on Agility.

Every 8/7/6/5 hits depending on Intelligence will stun the target for a short duration.

The transformation can be canceled early by activating it again.
Shapeshift: Wolf
Transforms into a ferocious wolf for 10 seconds and leaps to target location, increasing Armor depending on Strength and boosts movement speed of nearby allies.

Each attack made while in Wolf form grants a stacking buff which increases attack speed and movement speed. Stacks up to 15 times.

The transformation can be canceled early by activating it again.
Shapeshift: Moonkin
Transforms into a vicious Owlbear for 10 seconds, dealing Agility and Int based damage to all enemies nearby.

While transformed, the Druid has increased armor and Manasteal depending on strength.
Each attack grants a stacking buff which reduces the cooldown of all spells by 10% per stack. Casting a spell consumes one stack.

The transformation can be canceled early by activating again.
Shapeshift: Spider
Transforms into a relentless Spider for 10 seconds, going invisible for an abilitylevel depending duration. Every 8/7/6/5 attacks shoot out a web to random Agility dependent amount targets within range, dealing intelligence dependent damage and disables them.
The transformation can be canceled early.
Wildfire
Creates an explosion in the targeted area, causing each enemy unit caught in the explosion to ignite, taking ticking fire damage every second. Targets already burning are dealt instant damage instead.

This fire spreads to enemies who come within melee range of a burning unit.
Lunar Fall
Activate to cause spellcasts to call down stars upon nearby enemies.

Drains mana every second.
Lightning Rod
Stuns a hostile target for a short duration and marks it with lightning. Every time that unit is struck, they'll electrify nearby units belonging to an enemy of the caster.
Cyclone
Creates a cyclone at the targeted area, continuosly draining mana and dealing damage to all hostile units within its vicinity.
Any hostile unit affected by the cyclone will slowly be pulled towards its center.
The cyclone grows in power with time, reaching maximum power after 3 seconds.

Walking too far away or going out of mana will cancel the cyclone.
Decompose
Decomposes a nearby corpse to restore health and mana to nearby allies.
Barkskin
Coats the Druids skin with bark, protecting him from damage. Grants a Strength based percentage damage reduction for an Agi based duration with it’s cooldown recuded by an Int based amount of seconds.
Nature's Incarnation
As long as this spell is off cooldown, whenever the Druid casts a spell, he gains 1 charge per level of the spell cast, up to a maximum of 100.

Shapeshifting into any animal form consumes all charges to grant a Strength dependent absorb shield to the Druid and all nearby allied units.
Woodland Spirits
Casting spells has a level dependent chance to summon a spirit.
The Type of spirit summoned is dependent on the spell cast.
If a Shapeshift spell is cast, then a spirit animal of the same type will be summoned, otherwise a woodland spirit will heed the call.

BearTaunt_Auto64.png
BearTaunt_DIS64.png
BearTaunt64.png
(Taken form World of Warcraft)
DeathAndDecay_AutoTest.png
(Added Autocast to Death and Decay)
Lunar_FallOFF_DIS.png
Lunar_FallOFF.png
(Altered Starfall)
Moonkin_Icon_DIS64.png
Moonkin_Icon64.png
(Taken from World of Warcraft)
Spider_Icon_DIS64.png
Spider_Icon64.png
(Custom Spider Icon)
Wolf_Icon_DIS64.png
Wolf_Icon64.png
(Custom Wolf Icon)
Here's a neat tutorial telling you about how to import.
-- LINK TO GUIDE --
If the hyperlink is broken: https://www.hiveworkshop.com/threads/spells-importing-tutorial.7335/

General guide
1. Make sure that these 2 are checked in you preferences (Top left -> "File" -> "Preferences")
270688-8067875ab2bdd541703c788c6f844d3b.png


2. Make sure you've got a DUMMY unit in your map, it will be used in almost every single spell.

3. Copy all the Object Editor data required for the spell OR make sure you've got something equivalent. All objects used for each spell will be listed below to make it easier to locate what you're specifically looking for.

4. Copy the entire spells folder.
Example: I want to import Wildire. I must then select the spells folder, copy the entire folder and then paste it into my own map.

270689-b1d2bfaa72e518c9faac897c017e741c.png


5. Once the folder has been pasted, open it and it then acces the "config" trigger. Now update all the variables inside the config trigger to your liking. Pay extra attention to which spell you want to base the trigger off. I will always recommend using the exact spells i've chosen in my test map.

6. Test the map to make sure that the spell is actually working after your import. If it's not, it's very likely some object information is either missing or wrong in the config trigger.




Which spell are you looking to import specifically?

Import all of the following:

Units:
  • Druid (can be replaced with any casting unit of your choice)
  • DruidBear (can be replaced with any animal shape of your choice)
  • DruidMoonkin (can be replaced with any animal shape of your choice)
  • DruidSpider (can be replaced with any animal shape of your choice)
  • DruidWolf (can be replaced with any animal shape of your choice)
Abilities:
  • Bear 1->2
  • Bear 2->1
  • Shapeshift: Bear
  • Bear: Bash
  • Bear: Cleave
Triggers:
  • The entire "Shapeshifting" category. (Yes, that includes all the other shapeshifts. Delete the shapeshifts you do not want to keep.)
Import all of the following:

Units:
  • Druid (can be replaced with any casting unit of your choice)
  • DruidBear (can be replaced with any animal shape of your choice)
  • DruidMoonkin (can be replaced with any animal shape of your choice)
  • DruidSpider (can be replaced with any animal shape of your choice)
  • DruidWolf (can be replaced with any animal shape of your choice)
Abilities:
  • Moonkin 1->2
  • Moonkin 2->1
  • Shapeshift: Moonkin
Triggers:
  • The entire "Shapeshifting" category. (Yes, that includes all the other shapeshifts. Delete the shapeshifts you do not want to keep.)
Import all of the following:

Units:
  • Druid (can be replaced with any casting unit of your choice)
  • DruidBear (can be replaced with any animal shape of your choice)
  • DruidMoonkin (can be replaced with any animal shape of your choice)
  • DruidSpider (can be replaced with any animal shape of your choice)
  • DruidWolf (can be replaced with any animal shape of your choice)
Buffs:
  • Spider Web(CustomAir)
  • Spider Web(CustomGround)
  • Spider: Invisibility
Abilities:
  • Spider 1->2
  • Spider 2->1
  • Spider: WebDamage
  • Spider: Web
  • Invisibility (Spider Spirit)
  • Shapeshift: Spider
Triggers:
  • The entire "Shapeshifting" category. (Yes, that includes all the other shapeshifts. Delete the shapeshifts you do not want to keep.)
Import all of the following:

Units:
  • Druid (can be replaced with any casting unit of your choice)
  • DruidBear (can be replaced with any animal shape of your choice)
  • DruidMoonkin (can be replaced with any animal shape of your choice)
  • DruidSpider (can be replaced with any animal shape of your choice)
  • DruidWolf (can be replaced with any animal shape of your choice)
Buffs:
  • Wolf: Ferocious
  • Wolf: Speed Bonus
Abilities:
  • Wolf 1->2
  • Wolf 2->1
  • Wolf: ST Speed
  • Shapeshift: Wolf
  • Wolf: Ferocious
Triggers:
  • The entire "Shapeshifting" category. (Yes, that includes all the other shapeshifts. Delete the shapeshifts you do not want to keep.)
Import all of the following:

Buffs:
  • Wildfire Debuff
Abilities
  • Wildfire (DUMMY)
  • Wildfire
Triggers:
  • The entire "Wildfire" Category
Import all of the following:

Buffs:
  • Lunar Fall
Abilities
  • Lunar Fall
Triggers:
  • The entire "Lunar Fall" Category
Import all of the following:

Buffs:
  • Lightningrod (AoE Damage Debuff)
Abilities
  • Lightningrod AoE Debuff
  • Lightning Rod
Triggers:
  • The entire "Lightning Rod" Category
Import all of the following:

Units:
  • DUMMY (Cyclone)
Buffs:
  • Lunar Fall
Abilities
  • Lunar Fall
Triggers:
  • The entire "Lunar Fall" Category
Import all of the following:

Buffs:
  • Decompose (Healing Buff)
Abilities
  • Decompose (Regen)
  • Decompose
Triggers:
  • The entire "Decompose" Category
Import all of the following:

Buffs:
  • Barkskin (Custom)
Abilities
  • Barkskin (Buff Only)
  • Barkskin
Triggers:
  • The entire "Barkskin" Category
Import all of the following:

Unit:
  • Druid (can be replaced with any casting unit of your choice)
  • DruidBear (can be replaced with any animal shape of your choice)
  • DruidMoonkin (can be replaced with any animal shape of your choice)
  • DruidSpider (can be replaced with any animal shape of your choice)
  • DruidWolf (can be replaced with any animal shape of your choice)
Buffs:
  • Nature's Incarnation (Shield Buff)
Abilities:
  • Nature's Incarnation (SHIELD BUFF)
  • Nature's Incarnation
  • Shapeshift: Bear
  • Shapeshift: Moonkin
  • Shapeshift: Spider
  • Shapeshift: Wolf
Triggers:
  • The entire "Nature's Incarnation" Category
Import all of the following:

Unit:
  • Druid (can be replaced with any casting unit of your choice)
  • DruidBear (can be replaced with any animal shape of your choice)
  • DruidMoonkin (can be replaced with any animal shape of your choice)
  • DruidSpider (can be replaced with any animal shape of your choice)
  • DruidWolf (can be replaced with any animal shape of your choice)
  • Woodland Spirit (can be replaced with any spirit unit of your choice)
  • Spirit Bear (can be replaced with any spirit unit of your choice)
  • Spirit Moonkin (can be replaced with any spirit unit of your choice)
  • Spirit Spider (can be replaced with any spirit unit of your choice)
  • Spirit Wolf (can be replaced with any spirit unit of your choice)
Abilities:
  • Woodland Spirits
  • Shapeshift: Bear
  • Shapeshift: Moonkin
  • Shapeshift: Spider
  • Shapeshift: Wolf
  • Phase Shift (optional)
  • Taunt (Spirit Bear) (optional)
  • Font of Mana (Spirit Moonkin) (optional)
  • Curse (Spider Spirit) (optional)
  • Critical Striek (Spirit Wolf) (optional)
Triggers:
  • The entire "Nature's Incarnation" Category


v1.0.0 Uploaded
Added the base amount of text in the description. Heavy work on the actual post here on Hiveworkshop still needs to be done.

v1.0.1 Updated this post a little.

v1.0.2 Updated a lot of text in the "Spells" category

v1.1.0 Overhauled all of the spells triggering.
They now have much better coding and are A LOT easier to edit the values off.
Fixed the shops to better indicate when you're learning a spell and when that spell is max level.
Added chat commands to spawn more testing units; -spawnX (X = 0-6)
Fixed keybinds for the spells so they no longer overlap.
Started working on text guides on how to import the spells located here in this post.
v1.1.1 Added a bunch of extra instructions / help in this post on how to import each spell.
Previews
Contents

Druid Spellpack (Map)

Reviews
Wrda
Actions -------- =================================== -------- Set VariableSet Decompose_Loc[0] = (Position of (Triggering unit)) Set VariableSet Decompose_Loc[1] = (Position of (Target unit of ability being cast)) Set VariableSet...

Wrda

Spell Reviewer
Level 26
Joined
Nov 18, 2012
Messages
1,889
You should separate the configurable parts of a spell from the spell's actions itself. For Example, Decomposing trigger having a new trigger like this:
  • Decompose Initialization
    • Events
    • Conditions
    • Actions
      • -------- =================================== --------
      • -------- =================================== --------
      • -------- =================================== --------
      • -------- ALL OF THESE VARIABLES CAN BE EDITED TO CHANGE THE STATS OF THE SPELL --------
      • Set Decompose_Ability = Decompose
      • Set Decompose_AbilityRegen = Decompose (Regen)
      • Set Decompose_AoE_Range = 500.00
      • -------- regeneration - abilitylevel*thisfactor --------
      • Set Decompose_HealFactor1 = 30.00
      • Set Decompose_ManaFactor1 = 30.00
      • -------- regeneration - strength*abilitylevel/thisfactor --------
      • Set Decompose_HealFactor2 = 15.00
      • Set Decompose_ManaFactor2 = 15.00
      • -------- fancy effect model --------
      • Set Decompose_SFX = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
Now you replace the values of the other trigger with these variables, wherever they're used. In most cases, the user shouldn't have to go to the core of the spell to modify the configurable parts. When importing spells, specially if someone already has a moderate amount, it will take the process longer.
This logic should be applied to all other spells.

Looking at the Decompose trigger, you only need 1 dummy unit for all instant spells. Add the ability to the dummy before issuing to cast and then remove it. Changing abilities fields sometimes won't work for all abilities you'll be using, it's safer to increase the level of the ability and then decrease it (increasing the level of the ability works even if the ability has only 1 level).


Barkskin: Deserves to have a configurable trigger on its own. The base cooldown can very from level 1 to level 2 and so on, better to store the amount in an array. I don't understand the need for Barkskin Trigger. If the unit doesn't have the buff, then Check Barkskin DmgRed trigger won't fire.

Nature's Incarnation: Also needs a configurable trigger, like the rest of the abilities. In NaturesInc Cast:
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • And - All (Conditions) are true
            • Conditions
              • (Ability being cast) Equal to Shapeshift: Bear
              • (Unit-type of (Triggering unit)) Equal to Druid
          • And - All (Conditions) are true
            • Conditions
              • (Ability being cast) Equal to Shapeshift: Wolf
              • (Unit-type of (Triggering unit)) Equal to Druid
          • And - All (Conditions) are true
            • Conditions
              • (Ability being cast) Equal to Shapeshift: Moonkin
              • (Unit-type of (Triggering unit)) Equal to Druid
          • And - All (Conditions) are true
            • Conditions
              • (Ability being cast) Equal to Shapeshift: Spider
              • (Unit-type of (Triggering unit)) Equal to Druid
    • Then - Actions
You only need 1 of "(Unit-type of (Triggering unit)) Equal to Druid" check, move it to the main condition. NaturesInc_CD should be array to reflect the different ability's levels cooldowns.
The line call UnitMakeAbilityPermanent(GetTriggerUnit(), true, 'A00J') requires that 'A00J' to be a variable, part of the configurable trigger. "NaturesInc_MaxDuration[NaturesInc_Index] = 16.00" the 16.00 should be on the configurable part and not "NaturesInc_MaxDuration[NaturesInc_Index]" itself.
In NaturesInc LoopDuration trigger, NaturesInc_CounterDuration[NaturesInc_LoopInteger] isn't being de-indexed, nor being set to 0.00 as default on cast, it bugs the spell after the first time use. The cooldown only ability seems to have different icon X Y positions than the actual passive ability.

Woodland Spirits: Spirit Summon: WSpirit_Duration should also be an array, to reflect separate ability levels. "call RemoveLocation(udg_WSpirit_Loc)" should be done at the end of all actions since if all conditions fail it will leak. There are a lot of things that should be configurable easier here, such as the base chance, the chance increment per level, the special effect's model. Even all the formulas could be configurable on a trigger apart, but perhaps it is quite straight forward to change and understand for the common user.
The special effect in Spirits DeathAnimation should also be configurable.

Wildfire: While setting damage in "Wildfire_Damage[(Custom value of (Triggering unit))]", what does division by 5 and ability level multiplied by 7 mean? They look arbitrary numbers. That's another example of a configurable part, along with the next lines. Only required 1 dummy unit as described earlier, with the safe method to ensure ability modified fields work. You don't actually need to destroy Wildfire_UnitGroup[3], since it never leaks. This spell is stuck in an endless loop since the counter keeps reseting each enemy's neighbour to 0.

Lunar Fall: A seperate configurable part. The damage is acting earlier than the effect shows colliding with the unit, which can be weird, different effects will have different times colliding (a lot are instant though).

Lightning Rod: A seperate configurable part. Needs the safe method of ability field modifications. Only needs 1 dummy unit (which can be initialized somewhere on initialization).

Cyclone Cast trigger: A seperate configurable part. Perhaps also is incomplete (?).
Cyclone Loop: No need "Do Nothing". Cyclone_Ramp[Cyclone_Index] is never set to 0 on cast, so after first cast it is always 30. There's lot of things that should be in the configurable part.

Moonkin Shapeshift: A seperate configurable part.
Moonkin Loop trigger:
  • Unit - For Unit MoonkinSS_Caster[MoonkinSS_LoopInteger], start cooldown of ability Shapeshift: Moonkin over (10.00 - MoonkinSS_Counter[MoonkinSS_LoopInteger]) seconds.
If 10 is the duration of the morph, then it must be configurable too.
Moonkin MSteal CDR trigger: A unit is attacked isn't a good event, better use "damaged".

Bear Shapeshift: BearSS Cast trigger: A seperate configurable part, specially with all the abilities being added and removed.
Bear Loop trigger:
  • Unit - For Unit BearSS_Caster[BearSS_LoopInteger], start cooldown of ability Shapeshift: Bear over (10.00 - BearSS_Counter[BearSS_LoopInteger]) seconds.
If 10 is the duration of the morph, then it must be configurable too. This also happens on Spider Loop and Wolf Loop triggers.
Bear Bash trigger: only 1 dummy unit required.

Spider Shapeshift: A seperate configurable part.
SpiderShapeshift Cast trigger:
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • And - All (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Shapeshift: Spider
          • Or - Any (Conditions) are true
            • Conditions
              • (Unit-type of (Triggering unit)) Equal to DruidMoonkin
              • (Unit-type of (Triggering unit)) Equal to DruidBear
              • (Unit-type of (Triggering unit)) Equal to DruidWolf
You don't need the "And - All (Conditions) are true" part, it is "and" by default.
Spider Web: A unit is attacked isn't a good event.
The following leaks a unit group:
  • Set Spider_Web_AoE_Targets[(Custom value of (Attacking unit))] = (Random Spider_Web_AoE_TargetCap[(Custom value of (Attacking unit))] units from (Units within Spider_Web_AoE_Range[(Custom value of (Attacking unit))] of SpiderSS_Caster_LocationOffset matching ((((Matching unit) belongs to an enemy of (Owner of (Attacking un
"(Units within Spider_Web_AoE_Range[(Custom value of (Attacking unit))]" part. Only 1 dummy unit required, safe method to change ability level fields. Web didn't look it worked properly.

Wolf Shapeshift: A seperate configurable part.
WolfSS Cast trigger:
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • And - All (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Shapeshift: Wolf
          • Or - Any (Conditions) are true
            • Conditions
              • (Unit-type of (Triggering unit)) Equal to DruidMoonkin
              • (Unit-type of (Triggering unit)) Equal to DruidSpider
              • (Unit-type of (Triggering unit)) Equal to DruidBear
Similar to before, And - All (Conditions) not needed.
Wolf Ferocity trigger: Safe method to change unit ability level fields, described earlier.

Morphing from spider to bear and cycling around them and orders seem to remove the spider morph ability somehow.
Jump System by Paladon shouldn't be mixed within the spell pack, but rather a requirement that is clear to the user.
This is an interesting thematic spell pack overall.
 
Level 5
Joined
Sep 5, 2022
Messages
18
You should separate the configurable parts of a spell from the spell's actions itself. For Example, Decomposing trigger having a new trigger like this:
  • Decompose Initialization
    • Events
    • Conditions
    • Actions
      • -------- =================================== --------
      • -------- =================================== --------
      • -------- =================================== --------
      • -------- ALL OF THESE VARIABLES CAN BE EDITED TO CHANGE THE STATS OF THE SPELL --------
      • Set Decompose_Ability = Decompose
      • Set Decompose_AbilityRegen = Decompose (Regen)
      • Set Decompose_AoE_Range = 500.00
      • -------- regeneration - abilitylevel*thisfactor --------
      • Set Decompose_HealFactor1 = 30.00
      • Set Decompose_ManaFactor1 = 30.00
      • -------- regeneration - strength*abilitylevel/thisfactor --------
      • Set Decompose_HealFactor2 = 15.00
      • Set Decompose_ManaFactor2 = 15.00
      • -------- fancy effect model --------
      • Set Decompose_SFX = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
Now you replace the values of the other trigger with these variables, wherever they're used. In most cases, the user shouldn't have to go to the core of the spell to modify the configurable parts. When importing spells, specially if someone already has a moderate amount, it will take the process longer.
This logic should be applied to all other spells.

Looking at the Decompose trigger, you only need 1 dummy unit for all instant spells. Add the ability to the dummy before issuing to cast and then remove it. Changing abilities fields sometimes won't work for all abilities you'll be using, it's safer to increase the level of the ability and then decrease it (increasing the level of the ability works even if the ability has only 1 level).


Barkskin: Deserves to have a configurable trigger on its own. The base cooldown can very from level 1 to level 2 and so on, better to store the amount in an array. I don't understand the need for Barkskin Trigger. If the unit doesn't have the buff, then Check Barkskin DmgRed trigger won't fire.

Nature's Incarnation: Also needs a configurable trigger, like the rest of the abilities. In NaturesInc Cast:
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • And - All (Conditions) are true
            • Conditions
              • (Ability being cast) Equal to Shapeshift: Bear
              • (Unit-type of (Triggering unit)) Equal to Druid
          • And - All (Conditions) are true
            • Conditions
              • (Ability being cast) Equal to Shapeshift: Wolf
              • (Unit-type of (Triggering unit)) Equal to Druid
          • And - All (Conditions) are true
            • Conditions
              • (Ability being cast) Equal to Shapeshift: Moonkin
              • (Unit-type of (Triggering unit)) Equal to Druid
          • And - All (Conditions) are true
            • Conditions
              • (Ability being cast) Equal to Shapeshift: Spider
              • (Unit-type of (Triggering unit)) Equal to Druid
    • Then - Actions
You only need 1 of "(Unit-type of (Triggering unit)) Equal to Druid" check, move it to the main condition. NaturesInc_CD should be array to reflect the different ability's levels cooldowns.
The line call UnitMakeAbilityPermanent(GetTriggerUnit(), true, 'A00J') requires that 'A00J' to be a variable, part of the configurable trigger. "NaturesInc_MaxDuration[NaturesInc_Index] = 16.00" the 16.00 should be on the configurable part and not "NaturesInc_MaxDuration[NaturesInc_Index]" itself.
In NaturesInc LoopDuration trigger, NaturesInc_CounterDuration[NaturesInc_LoopInteger] isn't being de-indexed, nor being set to 0.00 as default on cast, it bugs the spell after the first time use. The cooldown only ability seems to have different icon X Y positions than the actual passive ability.

Woodland Spirits: Spirit Summon: WSpirit_Duration should also be an array, to reflect separate ability levels. "call RemoveLocation(udg_WSpirit_Loc)" should be done at the end of all actions since if all conditions fail it will leak. There are a lot of things that should be configurable easier here, such as the base chance, the chance increment per level, the special effect's model. Even all the formulas could be configurable on a trigger apart, but perhaps it is quite straight forward to change and understand for the common user.
The special effect in Spirits DeathAnimation should also be configurable.

Wildfire: While setting damage in "Wildfire_Damage[(Custom value of (Triggering unit))]", what does division by 5 and ability level multiplied by 7 mean? They look arbitrary numbers. That's another example of a configurable part, along with the next lines. Only required 1 dummy unit as described earlier, with the safe method to ensure ability modified fields work. You don't actually need to destroy Wildfire_UnitGroup[3], since it never leaks. This spell is stuck in an endless loop since the counter keeps reseting each enemy's neighbour to 0.

Lunar Fall: A seperate configurable part. The damage is acting earlier than the effect shows colliding with the unit, which can be weird, different effects will have different times colliding (a lot are instant though).

Lightning Rod: A seperate configurable part. Needs the safe method of ability field modifications. Only needs 1 dummy unit (which can be initialized somewhere on initialization).

Cyclone Cast trigger: A seperate configurable part. Perhaps also is incomplete (?).
Cyclone Loop: No need "Do Nothing". Cyclone_Ramp[Cyclone_Index] is never set to 0 on cast, so after first cast it is always 30. There's lot of things that should be in the configurable part.

Moonkin Shapeshift: A seperate configurable part.
Moonkin Loop trigger:
  • Unit - For Unit MoonkinSS_Caster[MoonkinSS_LoopInteger], start cooldown of ability Shapeshift: Moonkin over (10.00 - MoonkinSS_Counter[MoonkinSS_LoopInteger]) seconds.
If 10 is the duration of the morph, then it must be configurable too.
Moonkin MSteal CDR trigger: A unit is attacked isn't a good event, better use "damaged".

Bear Shapeshift: BearSS Cast trigger: A seperate configurable part, specially with all the abilities being added and removed.
Bear Loop trigger:
  • Unit - For Unit BearSS_Caster[BearSS_LoopInteger], start cooldown of ability Shapeshift: Bear over (10.00 - BearSS_Counter[BearSS_LoopInteger]) seconds.
If 10 is the duration of the morph, then it must be configurable too. This also happens on Spider Loop and Wolf Loop triggers.
Bear Bash trigger: only 1 dummy unit required.

Spider Shapeshift: A seperate configurable part.
SpiderShapeshift Cast trigger:
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • And - All (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Shapeshift: Spider
          • Or - Any (Conditions) are true
            • Conditions
              • (Unit-type of (Triggering unit)) Equal to DruidMoonkin
              • (Unit-type of (Triggering unit)) Equal to DruidBear
              • (Unit-type of (Triggering unit)) Equal to DruidWolf
You don't need the "And - All (Conditions) are true" part, it is "and" by default.
Spider Web: A unit is attacked isn't a good event.
The following leaks a unit group:
  • Set Spider_Web_AoE_Targets[(Custom value of (Attacking unit))] = (Random Spider_Web_AoE_TargetCap[(Custom value of (Attacking unit))] units from (Units within Spider_Web_AoE_Range[(Custom value of (Attacking unit))] of SpiderSS_Caster_LocationOffset matching ((((Matching unit) belongs to an enemy of (Owner of (Attacking un
"(Units within Spider_Web_AoE_Range[(Custom value of (Attacking unit))]" part. Only 1 dummy unit required, safe method to change ability level fields. Web didn't look it worked properly.

Wolf Shapeshift: A seperate configurable part.
WolfSS Cast trigger:
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • And - All (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Shapeshift: Wolf
          • Or - Any (Conditions) are true
            • Conditions
              • (Unit-type of (Triggering unit)) Equal to DruidMoonkin
              • (Unit-type of (Triggering unit)) Equal to DruidSpider
              • (Unit-type of (Triggering unit)) Equal to DruidBear
Similar to before, And - All (Conditions) not needed.
Wolf Ferocity trigger: Safe method to change unit ability level fields, described earlier.

Morphing from spider to bear and cycling around them and orders seem to remove the spider morph ability somehow.
Jump System by Paladon shouldn't be mixed within the spell pack, but rather a requirement that is clear to the user.
This is an interesting thematic spell pack overall.


This was an incredibly long and detailed reply.
I am forever grateful for it!

An update is already in the works overhauling how the abilities are being fired and making them easier to import and use, but I will take as much as possible of this to heart and modify further per your instructions.

I thank you again for the detailed review <3
 
Level 5
Joined
Sep 5, 2022
Messages
18
The next update, which is the one incoperating all the changes and fixes outlined by Wrda is due in a matter of days.
There's a big triggering overhaul and a MASSIVELY upgraded useability with changing the values of the spells. It's simply not compareable to the old version.

At the same time with the proper version upload, i'll also include as many instructions and information as possible here in this post to guide users.


EDIT:
The updated version is now available! ENJOY!
 
Last edited:

Wrda

Spell Reviewer
Level 26
Joined
Nov 18, 2012
Messages
1,889
  • Actions
    • -------- =================================== --------
    • Set VariableSet Decompose_Loc[0] = (Position of (Triggering unit))
    • Set VariableSet Decompose_Loc[1] = (Position of (Target unit of ability being cast))
    • Set VariableSet Decompose_UnitGroup = (Units within Decompose_AoE_Range of Decompose_Loc[0] matching ((((Matching unit) has buff Decompose (Healing Buff)) Equal to False) and ((((Matching unit) belongs to an ally of (Triggering player).) Equal to True) and (((Matching unit) is alive) Equal to Tru
    • Trigger - Run Decompose Config <gen> (checking conditions)
    • Unit - Create 1 DUMMY for Neutral Passive at Decompose_Loc[0] facing Default building facing degrees
    • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
    • -------- Fetch every eligable target for the regeneration effect and then apply it to them all. --------
    • Unit Group - Pick every unit in Decompose_UnitGroup and do (Actions)
      • Loop - Actions
        • Unit - Add Decompose_DummySpell to (Last created unit)
        • Ability - Set Ability: (Unit: (Last created unit)'s Ability with Ability Code: Decompose_DummySpell)'s Real Level Field: Hit Points Gained ('Rej1') of Level: 0 to Decompose_Heal
        • Ability - Set Ability: (Unit: (Last created unit)'s Ability with Ability Code: Decompose_DummySpell)'s Real Level Field: Mana Points Gained ('Rej2') of Level: 0 to Decompose_Mana
        • Ability - Set Ability: (Unit: (Last created unit)'s Ability with Ability Code: Decompose_DummySpell)'s Real Level Field: Duration - Normal ('adur') of Level: 0 to Decompose_Duration
        • Ability - Set Ability: (Unit: (Last created unit)'s Ability with Ability Code: Decompose_DummySpell)'s Real Level Field: Duration - Hero ('ahdu') of Level: 0 to Decompose_Duration
        • Unit - Increase level of Decompose_DummySpell for (Last created unit)
        • Unit - Decrease level of Decompose_DummySpell for (Last created unit)
        • Unit - Order (Last created unit) to Night Elf Druid Of The Claw - Rejuvenation (Picked unit)
        • Unit - Remove Decompose_DummySpell from (Last created unit)
    • -------- Fancy effect and then clear leaks --------
    • Special Effect - Create a special effect at Decompose_Loc[1] using Decompose_SpecialEffect
    • Special Effect - Destroy (Last created special effect)
    • Custom script: call RemoveLocation (udg_Decompose_Loc[0])
    • Custom script: call RemoveLocation (udg_Decompose_Loc[1])
    • Custom script: call DestroyGroup(udg_Decompose_UnitGroup)
You don't need to add, set ability fields, increase and decrease level and remove the ability within the unit group action. you can do all that before it (the removing of ability should be done after the whole group action block, of course). This is true for most of teh other spells. This can also be further improved by making a dummy for all instant cast spells.
I don't see the necessity of NaturesInc_Group being an array. You're creating groups on NaturesInc_ShieldedUnitUni for all the indeces on the array, which is too much, you can insert this instead:
  • Actions
    • Custom script: if udg_NaturesInc_ShieldedUnitUni[GetUnitUserData(GetTriggerUnit())] == null then
    • Custom script: set udg_NaturesInc_ShieldedUnitUni[GetUnitUserData(GetTriggerUnit())] = CreateGroup()
    • Custom script: endif
Into here (NaturesInc Cast trigger):
  • For each (Integer A) from 0 to (Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Nature's Incarnation )'s Integer Field: Levels ('alev')), do (Actions)
    • Loop - Actions
      • Set VariableSet NaturesInc_CD[(Integer A)] = NaturesInc_CDValue
  • -------- Grab every unit in shield range and apply their shield buff. --------
  • Set VariableSet NaturesInc_Group[0] = (Units within NaturesInc_AoE_Range of NaturesInc_Loc matching (((((Matching unit) has buff Nature's Incarnation (Shield Buff) ) Equal to False) and (((Matching unit) is alive) Equal to True)) and (((Matching unit) belongs to an ally of (Owner of (Triggering u
  • Unit - Create 1 DUMMY for Neutral Passive at NaturesInc_Loc facing Default building facing degrees
  • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
  • --------------------------->HERE<------------------------------------------------------------------
    • Custom script: if udg_NaturesInc_ShieldedUnitUni[GetUnitUserData(GetTriggerUnit())] == null then
    • Custom script: set udg_NaturesInc_ShieldedUnitUni[GetUnitUserData(GetTriggerUnit())] = CreateGroup()
    • Custom script: endif
  • --------------------------->HERE<------------------------------------------------------------------
    • Unit Group - Pick every unit in NaturesInc_Group[0] and do (Actions)
      • Loop - Actions
        • Set VariableSet NaturesInc_Caster[(Custom value of (Picked unit))] = (Triggering unit)
        • Unit Group - Add (Picked unit) to NaturesInc_ShieldedUnitUni[(Custom value of (Triggering unit))]
        • Unit - Add NaturesInc_DummySpell to (Last created unit)
        • Ability - Set Ability: (Unit: (Last created unit)'s Ability with Ability Code: NaturesInc_DummySpell)'s Real Level Field: Duration - Normal ('adur') of Level: 0 to NaturesInc_MaxDuration
        • Ability - Set Ability: (Unit: (Last created unit)'s Ability with Ability Code: NaturesInc_DummySpell)'s Real Level Field: Duration - Hero ('ahdu') of Level: 0 to NaturesInc_MaxDuration
        • Unit - Increase level of NaturesInc_DummySpell for (Last created unit)
        • Unit - Decrease level of NaturesInc_DummySpell for (Last created unit)
        • Unit - Order (Last created unit) to Human Priest - Inner Fire (Picked unit)
        • Unit - Remove NaturesInc_DummySpell from (Last created unit)
    • Custom script: call RemoveLocation(udg_NaturesInc_Loc)
    • Custom script: call DestroyGroup(udg_NaturesInc_Group[0])
    • Unit - For Unit (Triggering unit), start cooldown of ability NaturesInc_ThisSpell " over "NaturesInc_CD[(NaturesInc_AbilityLv[(Custom value of (Triggering unit))] - 1)] seconds.
NaturesInc Cast doesn't seem to be working well, the trigger doesn't fire at all, unless I remove the order comparison related to "unimmolate", which doesn't exist, perhaps you meant "unimmolation".
NaturesInc LoopDuration: You're using custom value of Damage Target in a periodic event, it won't work.

Spirit Summon: special effects leaking. Can solve with the overshadowing global variable method.

Wildfire Loop:
You don't need this there:
  • Set VariableSet Wildfire_Caster[(Custom value of Wildfire_Victim[Wildfire_LoopInteger])] = Wildfire_Caster[(Custom value of Wildfire_Victim[Wildfire_Index])]
"Set VariableSet Wildfire_IndexCurrent = Wildfire_Index" is pointless, so just use Wildfire_Index on the loop:
  • Actions
    • For each (Integer Wildfire_LoopInteger) from 1 to Wildfire_Index, do (Actions)
Also, remove "Set VariableSet Wildfire_IndexCurrent = Wildfire_Index" on the deindexing part.
This solves the the endless recursion of firing spreading on targets.

Overall looks a lot better.
 
Top