1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. Updated Resource Submission Rules: All model & skin resource submissions must now include an in-game screenshot. This is to help speed up the moderation process and to show how the model and/or texture looks like from the in-game camera.
    Dismiss Notice
  3. DID YOU KNOW - That you can unlock new rank icons by posting on the forums or winning contests? Click here to customize your rank or read our User Rank Policy to see a list of ranks that you can unlock. Have you won a contest and still havn't received your rank award? Then please contact the administration.
    Dismiss Notice
  4. The Lich King demands your service! We've reached the 19th edition of the Icon Contest. Come along and make some chilling servants for the one true king.
    Dismiss Notice
  5. The 4th SFX Contest has started. Be sure to participate and have a fun factor in it.
    Dismiss Notice
  6. The poll for the 21st Terraining Contest is LIVE. Be sure to check out the entries and vote for one.
    Dismiss Notice
  7. The results are out! Check them out.
    Dismiss Notice
  8. Don’t forget to sign up for the Hive Cup. There’s a 555 EUR prize pool. Sign up now!
    Dismiss Notice
  9. The Hive Workshop Cup contest results have been announced! See the maps that'll be featured in the Hive Workshop Cup tournament!
    Dismiss Notice
  10. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Amumu the Sad Mummy

Submitted by LimitingBounds
This bundle is marked as substandard. It may contain bugs, not perform optimally or otherwise be in violation of the submission rules.
Amumu the Sad Mummy Spellpack ver1.0

Introduction


First resource upload! Hope you'll like it.
This spellpack is a replication of the champion Amumu from League of Legends.

Spells




  • Spell Description

    Innate: Amumu's basic attacks reduce magic resistance from his targets for 3 seconds, refreshing with each subsequent basic attack.

    Level

    Manacost

    Cooldown

    AoE

    Effect

    1 -- -- -- Reduces 15 magic damage in attack. (Hero level 1-6)
    2 -- -- -- Reduces 25 magic damage in attack. (Hero level 7-12)
    3 -- -- -- Reduces 15 magic damage in attack. (Hero level 13-18)

    Triggers



      • Cursed Touch Levelup
        • Events
        • Time - Every 0.01 seconds of game time
        • Conditions
        • Actions
        • Set Group[5] = (Units in (Entire map) matching ((Level of AbilityIndex[4] for (Matching unit)) Greater than or equal to 1))
        • Unit Group - Pick every unit in Group[5] and do (Actions)
        • Loop - Actions
        • For each (Integer Index[4]) from 0 to (IndexCount[4] - 1), do (Actions)
        • Loop - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • And - All (Conditions) are true
        • Conditions
        • (Level of (Picked unit)) Greater than or equal to LevelUp[Index[4]]
        • Then - Actions
        • Unit - Set level of AbilityIndex[4] for (Picked unit) to (Index[4] + 1)
        • Else - Actions
        • Custom script: call DestroyGroup(udg_Group[5])


      • Cursed Touch Magic Damage Amp
        • Events
        • Game - PDD_damageEventTrigger becomes Equal to 1.00
        • Conditions
        • PDD_damageType Equal to PDD_SPELL
        • Actions
        • For each (Integer Index[4]) from 0 to (IndexCount[4] - 1), do (Actions)
        • Loop - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (PDD_target has buff CurseBuffIndex[0]) Equal to True
        • Then - Actions
        • Set PDD_amount = (PDD_amount x (DamageReduction[2] + (((Real(Index[4])) - 1.00) x DamageReduction[3])))
        • Else - Actions







  • Spell Description

    Amumu tosses a bandage in the target direction that stuns the first enemy it hits for 1 second, dealing magic damage, and pulling him to their location.

    Level

    Manacost

    Cooldown

    Range

    Effect

    1 80 16 1100 Deals 80 damage and stuns first enemy hit for 1 second.
    2 90 14 1100 Deals 130 damage and stuns first enemy hit for 1 second.
    3 100 12 1100 Deals 180 damage and stuns first enemy hit for 1 second.
    4 110 10 1100 Deals 230 damage and stuns first enemy hit for 1 second.
    5 120 8 1100 Deals 280 damage and stuns first enemy hit for 1 second.

    Triggers



      • Bandage Toss Cast
        • Events
        • Unit - A unit Starts the effect of an ability
        • Conditions
        • (Ability being cast) Equal to AbilityIndex[0]
        • Actions
        • -------- Indexing --------
        • Set IndexOccupied[IndexCount[0]] = True
        • Set Caster[IndexCount[0]] = (Triggering unit)
        • Set SourcePoint[IndexCount[0]] = (Position of Caster[IndexCount[0]])
        • Set TargetPoint[IndexCount[0]] = (Target point of ability being cast)
        • Set DummyPoint[IndexCount[0]] = (SourcePoint[IndexCount[0]] offset by Speed[0] towards (Angle from SourcePoint[IndexCount[0]] to TargetPoint[IndexCount[0]]) degrees)
        • Set Distance[IndexCount[0]] = Speed[0]
        • -------- Lasso Create --------
        • Lightning - Create a Drain Life lightning effect from source SourcePoint[IndexCount[0]] to target DummyPoint[IndexCount[0]]
        • Set Lightning[IndexCount[0]] = (Last created lightning effect)
        • Set IndexCount[0] = (IndexCount[0] + 1)
        • -------- Activates loop trigger if it's not on --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (BT Cast Loop <gen> is on) Not equal to True
        • Then - Actions
        • Trigger - Turn on BT Cast Loop <gen>
        • Else - Actions


      • BT Cast Loop
        • Events
        • Time - Every 0.01 seconds of game time
        • Conditions
        • Actions
        • -------- Deactivates the loop if all indices are vacant. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • IndexCount[0] Greater than 0
        • Then - Actions
        • For each (Integer Index[0]) from 0 to (IndexCount[0] - 1), do (Actions)
        • Loop - Actions
        • -------- Checks indices and recycles unused ones. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • IndexOccupied[Index[0]] Equal to True
        • Then - Actions
        • -------- Determines if this loop is a Cast or a Reel for the specific index --------
        • Unit - Pause Caster[Index[0]]
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Target[Index[0]] Equal to No unit
        • Then - Actions
        • -------- Casting: Checks for nearby unit to acquire target, else it moves forward to cast point. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Distance[Index[0]] Less than MaxDistance[0]
        • Then - Actions
        • -------- Note: There are four 'points' used in this casting sequence, just in case the spell used does not disable the caster. --------
        • Set CasterPoint[Index[0]] = (Position of Caster[Index[0]])
        • Set DummyPoint[Index[0]] = (DummyPoint[Index[0]] offset by Speed[0] towards (Angle from SourcePoint[Index[0]] to TargetPoint[Index[0]]) degrees)
        • Set Group[0] = (Units within 62.50 of DummyPoint[Index[0]] matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) belongs to an ally of (Owner of Caster[Index[0]])) Equal to False) and ((((Matching unit) is alive) Equal to True) and ((Matching
        • -------- Detects for a target unit, selects the first in the group if many are detected in area --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (Number of units in Group[Index[0]]) Greater than 0
        • Then - Actions
        • -------- Target Acquired --------
        • Custom script: set udg_Target[udg_Index[0]] = FirstOfGroup(udg_Group[0])
        • Set TargetPoint[Index[0]] = (Position of Target[Index[0]])
        • -------- Target Effect --------
        • Unit - Cause Caster[Index[0]] to damage Target[Index[0]], dealing (Damage[0] + (DamageLevelInc[0] x ((Real((Level of AbilityIndex[0] for Caster[Index[0]]))) - 1.00))) damage of attack type Spells and damage type Magic
        • Unit - Create 1 Dummy for (Owner of Caster[Index[0]]) at DummyPoint[Index[0]] facing TargetPoint[Index[0]]
        • Set Dummy[0] = (Last created unit)
        • Unit - Add DummyAbi[0] to Dummy[0]
        • Unit - Set level of DummyAbi[0] for Dummy[0] to (Level of AbilityIndex[0] for Caster[Index[0]])
        • Unit - Order Dummy[0] to Human Mountain King - Storm Bolt Target[Index[0]]
        • Unit - Remove Dummy[0] from the game
        • Unit - Turn collision for Caster[Index[0]] Off
        • Set Dummy[0] = No unit
        • Else - Actions
        • -------- Moving --------
        • Lightning - Move Lightning[Index[0]] to source CasterPoint[Index[0]] and target DummyPoint[Index[0]]
        • Set Distance[Index[0]] = (Distance[Index[0]] + Speed[0])
        • Custom script: call DestroyGroup(udg_Group[udg_Index[0]])
        • Custom script: call RemoveLocation(udg_CasterPoint[udg_Index[0]])
        • Else - Actions
        • -------- Clean --------
        • Lightning - Destroy Lightning[Index[0]]
        • Unit - Unpause Caster[Index[0]]
        • Custom script: call RemoveLocation(udg_DummyPoint[udg_Index[0]])
        • Custom script: call RemoveLocation(udg_SourcePoint[udg_Index[0]])
        • Custom script: call RemoveLocation(udg_TargetPoint[udg_Index[0]])
        • Set IndexOccupied[Index[0]] = False
        • Else - Actions
        • -------- Reeling: If Caster is not close to the Target, Caster gets reeled in closer. --------
        • Set SourcePoint[Index[0]] = (Position of Caster[Index[0]])
        • Set TargetPoint[Index[0]] = (Position of Target[Index[0]])
        • Set Distance[Index[0]] = (Distance between SourcePoint[Index[0]] and TargetPoint[Index[0]])
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Distance[Index[0]] Greater than or equal to 125.00
        • Then - Actions
        • -------- Reel --------
        • Set DummyPoint[Index[0]] = (SourcePoint[Index[0]] offset by Speed[0] towards (Angle from SourcePoint[Index[0]] to TargetPoint[Index[0]]) degrees)
        • Unit - Move Caster[Index[0]] instantly to DummyPoint[Index[0]], facing TargetPoint[Index[0]]
        • Lightning - Move Lightning[Index[0]] to source DummyPoint[Index[0]] and target TargetPoint[Index[0]]
        • Else - Actions
        • -------- Clean --------
        • Lightning - Destroy Lightning[Index[0]]
        • Unit - Unpause Caster[Index[0]]
        • Unit - Turn collision for Caster[Index[0]] On
        • Set IndexOccupied[Index[0]] = False
        • Custom script: call RemoveLocation(udg_SourcePoint[udg_Index[0]])
        • Custom script: call RemoveLocation(udg_TargetPoint[udg_Index[0]])
        • Custom script: call RemoveLocation(udg_DummyPoint[udg_Index[0]])
        • Else - Actions
        • -------- De-indexing --------
        • Set IndexOccupied[Index[0]] = IndexOccupied[IndexCount[0]]
        • Set Caster[Index[0]] = Caster[IndexCount[0]]
        • Set Target[Index[0]] = Target[IndexCount[0]]
        • Set SourcePoint[Index[0]] = SourcePoint[IndexCount[0]]
        • Set TargetPoint[Index[0]] = TargetPoint[IndexCount[0]]
        • Set DummyPoint[Index[0]] = DummyPoint[IndexCount[0]]
        • Set Distance[Index[0]] = Distance[IndexCount[0]]
        • Set Lightning[Index[0]] = Lightning[IndexCount[0]]
        • Set IndexCount[0] = (IndexCount[0] - 1)
        • Set Index[0] = (Index[0] - 1)
        • Else - Actions
        • Trigger - Turn off (This trigger)







  • Spell Description

    Toggle: Amumu cries a continuous pool of tears, dealing magic damage every second to nearby enemies.

    Level

    Manacost (per Second)

    Cooldown

    AoE

    Effect

    1 8 1 300 Deals 1% of nearby enemies' max life as damage every second.
    2 8 1 300 Deals 1.5% of nearby enemies' max life as damage every second.
    3 8 1 300 Deals 2% of nearby enemies' max life as damage every second.
    4 8 1 300 Deals 2.5% of nearby enemies' max life as damage every second.
    5 8 1 300 Deals 3% of nearby enemies' max life as damage every second.

    Triggers



      • Despair Toggle
        • Events
        • Unit - A unit Starts the effect of an ability
        • Conditions
        • (Ability being cast) Equal to Despair
        • Actions
        • -------- Turns on the periodic Despair Damage Tick trigger, if off, upon activation of the AbilityIndex[1]. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (Despair Damage Tick <gen> is on) Not equal to True
        • Then - Actions
        • Trigger - Turn on Despair Damage Tick <gen>
        • Else - Actions


      • Despair Damage Tick
        • Events
        • Time - Every 0.01 seconds of game time
        • Conditions
        • Actions
        • -------- Za universal buff group for this spell. Gathers all units with buff, for index check. --------
        • Set Group[1] = (Units in (Entire map) matching (((Matching unit) has buff BuffIndex[1]) Equal to True))
        • -------- Deactivates the trigger if there's no unit with the BuffIndex[1] detected. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (Number of units in Group[1]) Greater than 0
        • Then - Actions
        • -------- Calls all units in index for buff-checking. --------
        • For each (Integer Index[1]) from 0 to (IndexCount[1] - 1), do (Actions)
        • Loop - Actions
        • -------- Kicks indexed units out of index that don't have the buff. --------
        • Unit Group - Remove AuraUnit[Index[1]] from Group[1]
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (AuraUnit[Index[1]] has buff BuffIndex[1]) Not equal to True
        • Then - Actions
        • -------- Deindex --------
        • Set AuraUnit[Index[1]] = AuraUnit[IndexCount[1]]
        • Set Real[Index[1]] = Real[IndexCount[1]]
        • Set IndexCount[1] = (IndexCount[1] - 1)
        • Else - Actions
        • -------- Adds unindexed units with buff in index. --------
        • Custom script: loop
        • Custom script: exitwhen CountUnitsInGroup(udg_Group[1]) == 0
        • Custom script: set udg_AuraUnit[udg_IndexCount[1]] = FirstOfGroup(udg_Group[1])
        • Unit Group - Remove AuraUnit[IndexCount[1]] from Group[1]
        • Set IndexCount[1] = (IndexCount[1] + 1)
        • Custom script: endloop
        • -------- Calls all units in index for buff-checking. --------
        • For each (Integer Index[1]) from 0 to (IndexCount[1] - 1), do (Actions)
        • Loop - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Real[Index[1]] Equal to 0.00
        • Then - Actions
        • -------- Damage and Timer Reset --------
        • Set TempPoint[0] = (Position of AuraUnit[Index[1]])
        • Set Group[2] = (Units within MaxDistance[1] of TempPoint[0] matching (((((Matching unit) is A structure) Not equal to True) and (((Matching unit) is alive) Equal to True)) and (((Matching unit) belongs to an ally of (Owner of AuraUnit[Index[1]])) Not equal to True)))
        • Unit Group - Pick every unit in Group[2] and do (Actions)
        • Loop - Actions
        • Unit - Cause AuraUnit[Index[1]] to damage (Picked unit), dealing ((Max life of (Picked unit)) x (Damage[1] + (DamageLevelInc[1] x ((Real((Level of AbilityIndex[1] for AuraUnit[Index[1]]))) - 1.00)))) damage of attack type Spells and damage type Magic
        • Custom script: call DestroyGroup(udg_Group[2])
        • Custom script: call RemoveLocation(udg_TempPoint[0])
        • Set Real[Index[1]] = 1.00
        • Else - Actions
        • -------- Tick --------
        • Set Real[Index[1]] = (Real[Index[1]] - 0.01)
        • Else - Actions
        • -------- Turn off. --------
        • Trigger - Turn off (This trigger)
        • Custom script: call DestroyGroup(udg_Group[1])







  • Spell Description

    Passive: Amumu takes reduced physical damage.
    Active: Amumu releases his anger, dealing magic damage to nearby enemies. Tantrum's cooldown is reduced by 0.5 seconds every time Amumu is hit by a basic attack.

    Level

    Manacost

    Cooldown

    AoE (Active)

    Effect

    1 35 10 350 Takes 2 reduced Physical Damage. Active deals 75 damage to nearby enemies.
    2 35 9 350 Takes 4 reduced Physical Damage. Active deals 100 damage to nearby enemies.
    3 35 8 350 Takes 6 reduced Physical Damage. Active deals 125 damage to nearby enemies.
    4 35 7 350 Takes 8 reduced Physical Damage. Active deals 150 damage to nearby enemies.
    5 35 6 350 Takes 10 reduced Physical Damage. Active deals 175 damage to nearby enemies.

    Triggers



      • Tantrum Level
        • Events
        • Unit - A unit Learns a skill
        • Conditions
        • Actions
        • -------- Can't get the exact thing from the Hero Skill condition, so I used a custom scripted if. --------
        • -------- Trigger acts if the learned skill is AbilityIndex[2] --------
        • Custom script: if (GetLearnedSkill() == udg_AbilityIndex[2]) then
        • -------- Adds the 'dummy' ability if unit is a first time learner. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (Level of AbilityIndex[2] for (Learning Hero)) Less than or equal to 1
        • Then - Actions
        • Unit - Add DummyAbi[2] to (Learning Hero)
        • Else - Actions
        • Unit - Set level of DummyAbi[2] for (Learning Hero) to (Level of AbilityIndex[2] for (Learning Hero))
        • -------- Indexing --------
        • Set CD[IndexCount[2]] = (CD_Record[0] + (((Real((Level of AbilityIndex[2] for (Leveling Hero)))) - 1.00) x CD_Record[1]))
        • Set TantrumUnit[IndexCount[2]] = (Learning Hero)
        • Set IndexCount[2] = (IndexCount[2] + 1)
        • -------- Turns on the periodic CD Simulator/Index Checker. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (Tantrum CD Simulator and Indexer <gen> is on) Not equal to True
        • Then - Actions
        • Trigger - Turn on Tantrum CD Simulator and Indexer <gen>
        • Else - Actions
        • Custom script: endif


      • Tantrum Refresh
        • Events
        • Unit - A unit Is attacked
        • Conditions
        • (Level of AbilityIndex[2] for (Attacked unit)) Greater than 0
        • Actions
        • For each (Integer Index[2]) from 0 to (IndexCount[2] - 1), do (Actions)
        • Loop - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (Attacked unit) Equal to TantrumUnit[Index[2]]
        • Then - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • CD[Index[2]] Less than or equal to 0.00
        • Then - Actions
        • Unit - Remove DummyAbi[2] from TantrumUnit[Index[2]]
        • Unit - Add DummyAbi[2] to TantrumUnit[Index[2]]
        • Unit - Set level of DummyAbi[2] for TantrumUnit[Index[2]] to (Level of AbilityIndex[2] for TantrumUnit[Index[2]])
        • Set CD[Index[2]] = (CD_Record[0] + (((Real((Level of AbilityIndex[2] for TantrumUnit[Index[2]]))) - 1.00) x CD_Record[1]))
        • Else - Actions
        • Set CD[Index[2]] = (CD[Index[2]] - 0.50)
        • Skip remaining actions
        • Else - Actions


      • Tantrum Physical Reduction
        • Events
        • Game - PDD_damageEventTrigger becomes Equal to 1.00
        • Conditions
        • Actions
        • -------- Checks if the AbilityIndex[2] exists for the damaged unit, and if the damage dealt is physical. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • And - All (Conditions) are true
        • Conditions
        • (Level of AbilityIndex[2] for PDD_target) Greater than 0
        • PDD_damageType Equal to PDD_PHYSICAL
        • Then - Actions
        • -------- Physical damage dealt to these units can't be reduced below zero. lol --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • PDD_amount Greater than or equal to (DamageReduction[0] + (((Real((Level of AbilityIndex[2] for PDD_target))) - 1.00) x DamageReduction[1]))
        • Then - Actions
        • Set PDD_amount = (PDD_amount - (DamageReduction[0] + (((Real((Level of AbilityIndex[2] for PDD_target))) - 1.00) x DamageReduction[1])))
        • Else - Actions
        • Set PDD_amount = 0.00
        • Else - Actions


      • Tantrum CD Simulator and Indexer
        • Events
        • Time - Every 0.01 seconds of game time
        • Conditions
        • Actions
        • -------- Deactivates trigger if index is empty. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • IndexCount[2] Greater than 0
        • Then - Actions
        • -------- Calls all units in index --------
        • For each (Integer Index[2]) from 0 to (IndexCount[2] - 1), do (Actions)
        • Loop - Actions
        • -------- Deindexes and removes the abilities of units who have somehow unlearned the ability. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • (Level of AbilityIndex[2] for TantrumUnit[Index[2]]) Greater than 0
        • Then - Actions
        • -------- Simulates cooldown timer to a precision of a hundredths. --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • CD[Index[2]] Greater than 0.00
        • Then - Actions
        • Set CD[Index[2]] = (CD[Index[2]] - 0.01)
        • Else - Actions
        • Else - Actions
        • -------- Deindexing and dummy skills removal. --------
        • Unit - Remove DummyAbi[2] from TantrumUnit[Index[2]]
        • Set CD[Index[2]] = CD[IndexCount[2]]
        • Set TantrumUnit[Index[2]] = TantrumUnit[IndexCount[2]]
        • Set IndexCount[2] = (IndexCount[2] - 1)
        • Else - Actions
        • Trigger - Turn off (This trigger)


      • Tantrum Active
        • Events
        • Unit - A unit Starts the effect of an ability
        • Conditions
        • (Ability being cast) Equal to DummyAbi[2]
        • Actions
        • -------- Groups nearby enemy units plausible for targetting. --------
        • Set TempPoint[1] = (Position of (Triggering unit))
        • Set Group[3] = (Units within MaxDistance[2] of TempPoint[1] matching (((((Matching unit) is A structure) Not equal to True) and (((Matching unit) is alive) Equal to True)) and (((Matching unit) belongs to an ally of (Owner of (Triggering unit))) Not equal to True)))
        • -------- Damage step --------
        • Unit Group - Pick every unit in Group[3] and do (Actions)
        • Loop - Actions
        • Unit - Cause (Triggering unit) to damage (Picked unit), dealing (Damage[2] + (DamageLevelInc[2] x ((Real((Level of DummyAbi[2] for (Triggering unit)))) - 1.00))) damage of attack type Spells and damage type Magic
        • -------- Cleaning --------
        • Custom script: call DestroyGroup(udg_Group[3])
        • Custom script: call RemoveLocation(udg_TempPoint[1])







  • Spell Description

    Amumu deals magic damage to nearby enemies and entangles them for 2 seconds.

    Level

    Manacost

    Cooldown

    AoE

    Effect

    1 100 150 550 Deals 150 damage to enemies and entangles them for 2 seconds.
    2 150 130 550 Deals 250 damage to enemies and entangles them for 2 seconds.
    3 200 110 550 Deals 350 damage to enemies and entangles them for 2 seconds.

    Triggers



      • CotSM Spell
        • Events
        • Unit - A unit Starts the effect of an ability
        • Conditions
        • (Ability being cast) Equal to AbilityIndex[3]
        • Actions
        • Set TempPoint[2] = (Position of (Triggering unit))
        • -------- Groups nearby enemy units plausible for targetting. --------
        • Set Group[4] = (Units within MaxDistance[3] of TempPoint[2] matching (((((Matching unit) is A structure) Not equal to True) and (((Matching unit) is alive) Equal to True)) and (((Matching unit) belongs to an ally of (Owner of (Triggering unit))) Not equal to True)))
        • -------- Dummy create for secondary effect caster --------
        • Unit - Create 1 DummyType for (Owner of (Triggering unit)) at TempPoint[2] facing TempPoint[2]
        • Set Dummy[1] = (Last created unit)
        • Unit - Add DummyAbi[3] to Dummy[1]
        • Unit - Set level of DummyAbi[3] for Dummy[1] to (Level of AbilityIndex[3] for (Triggering unit))
        • -------- SFX --------
        • For each (Integer Index[3]) from 0 to 35, do (Actions)
        • Loop - Actions
        • For each (Integer A) from 1 to 5, do (Actions)
        • Loop - Actions
        • Set TempPoint[3] = (TempPoint[2] offset by (MaxDistance[3] x (0.20 x (Real((Integer A))))) towards ((10.00 x (Real(Index[3]))) + ((Random real number between 2.00 and -2.00) x (Real((Integer A))))) degrees)
        • Special Effect - Create a special effect at TempPoint[3] using Doodads\LordaeronSummer\Props\SmokeSmudge\SmokeSmudge0.mdl
        • Special Effect - Destroy (Last created special effect)
        • Special Effect - Create a special effect at TempPoint[3] using Abilities\Spells\Undead\CarrionSwarm\CarrionSwarmDamage.mdl
        • Special Effect - Destroy (Last created special effect)
        • Custom script: call RemoveLocation(udg_TempPoint[3])
        • -------- Damage and effect step --------
        • Unit Group - Pick every unit in Group[4] and do (Actions)
        • Loop - Actions
        • Unit - Grant shared vision of (Picked unit) to (Owner of (Triggering unit))
        • Unit - Cause (Triggering unit) to damage (Picked unit), dealing (Damage[3] + (DamageLevelInc[3] x ((Real((Level of AbilityIndex[3] for (Triggering unit)))) - 1.00))) damage of attack type Spells and damage type Magic
        • Unit - Order Dummy[1] to Night Elf Keeper Of The Grove - Entangling Roots (Picked unit)
        • Unit - Deny shared vision of (Picked unit) to (Owner of (Triggering unit))
        • -------- Cleaning --------
        • Unit - Remove Dummy[1] from the game
        • Set Dummy[1] = No unit
        • Custom script: call DestroyGroup(udg_Group[4])
        • Custom script: call RemoveLocation(udg_TempPoint[2])







Miscellaneous In-coded Spell Triggers




    • Amumu Init
      • Events
      • Map initialization
      • Conditions
      • Actions
      • -------- Ability Config --------
      • -------- General --------
      • Set DummyType = Dummy
      • -------- Ability: Bandage Toss --------
      • Set AbilityIndex[0] = Bandage Toss
      • Set Speed[0] = 25.00
      • Set MaxDistance[0] = 1100.00
      • -------- DummyAbi here is a spell you desire to be cast upon an acquired target. Note: set the spell's Use Order String to 'thunderbolt' --------
      • Set DummyAbi[0] = BT Stun
      • Set Damage[0] = 80.00
      • Set DamageLevelInc[0] = 50.00
      • -------- Ability: Despair --------
      • Set AbilityIndex[1] = Despair
      • Set BuffIndex[1] = Despair
      • Set MaxDistance[1] = 300.00
      • -------- Recommended variable values below should be between 0 to 1.00, as a percentage rate --------
      • Set Damage[1] = 0.01
      • Set DamageLevelInc[1] = (1.00 / 200.00)
      • -------- Ability: Tantrum --------
      • -------- AbilityIndex[2] should be a Hero ability invisible in the command buttons, but this controls the behavior of DummyAbi via triggers. --------
      • Set AbilityIndex[2] = Tantrum (placeholder)
      • -------- DummyAbi here is the proxy ability that's visible in your hero's command buttons. --------
      • -------- Should have the same number of levels as AbilityIndex[2] --------
      • Set DummyAbi[2] = Tantrum (actual)
      • Set MaxDistance[2] = 350.00
      • Set Damage[2] = 75.00
      • Set DamageLevelInc[2] = 25.00
      • -------- Put initial damage reduction at DamageReduction[0] and increment per level at DamageReduction[1]. --------
      • Set DamageReduction[0] = 2.00
      • Set DamageReduction[1] = 2.00
      • -------- Record initial CD of DummyAbi[2] at CD_Record[0] and increment per level at CD_Record[1] --------
      • Set CD_Record[0] = 10.00
      • Set CD_Record[1] = -1.00
      • -------- Ability: Curse of the Sad Mummy --------
      • Set AbilityIndex[3] = Curse of the Sad Mummy
      • Set MaxDistance[3] = 550.00
      • -------- DummyAbi here is a spell you desire to be cast upon an acquired target. Note: set the spell's Use Order String to 'entanglingroots' --------
      • Set DummyAbi[3] = CotSM Entangle
      • Set Damage[3] = 150.00
      • Set DamageLevelInc[3] = 100.00
      • -------- Ability: Cursed Touch --------
      • Set AbilityIndex[4] = Cursed Touch
      • -------- IndexCount[4] is how many levels does AbilityIndex[4] contain. --------
      • Set IndexCount[4] = 3
      • -------- Put initial damage factor at DamageReduction[0] and increment per level at DamageReduction[1]. --------
      • -------- Note that this is a percentage multiplier. --------
      • Set DamageReduction[2] = 1.15
      • Set DamageReduction[3] = 0.05
      • -------- Assign the applied buff here for the passive ability, descending for each level. --------
      • Set CurseBuffIndex[0] = Cursed Touch (Level 1)
      • Set CurseBuffIndex[1] = Cursed Touch (Level 2)
      • Set CurseBuffIndex[2] = Cursed Touch (Level 3)
      • -------- Assign increasing values of when the hero will auto-level up AbilityIndex[4]. --------
      • Set LevelUp[0] = 1
      • Set LevelUp[1] = 7
      • Set LevelUp[2] = 13




Credits



  • Credits to whoever made this hero testing template. I forgot but I got this when I was still doing my stuff in PlayDotA. :p
  • Hero (Champion) concept: Amumu, The Sad Mummy. src: "League of Legends" by Riot Games
  • Amumu Hero Model: Original model by Riot Games. Ripped by dds2136 from Goblin Academy.
  • Physical DDS by looking-for-help:
  • Aqua Aura by splashy5


Changelog



  • v1.0
    - Initial version released.

Contents

Amumu the Sad Mummy (Map)

  1. Tank-Commander

    Tank-Commander

    Spell Reviewer

    Joined:
    May 26, 2009
    Messages:
    1,539
    Resources:
    44
    Packs:
    1
    Spells:
    41
    Tutorials:
    2
    Resources:
    44
    Thanks for the submission to the spells section

    I made some quick notes:
    - Loops should run every 0.03 seconds - 0.01 is needlessly fast
    - you only need one index variable (that doesn't need to be an array)
    - The triggers in your description are a bit messed up
    - Your filtering in bandage toss is sub-optimal (there's a tutorial on how to do this better in the tutorial section)
    - Collision size for bandage toss should be configurable
    - DummyPoint leaks in bandage toss
    - Grouo[0] leaks in bandage toss
    - I suggest using SetUntX/Y over move unit instantly
    - if all units have the despair buff removed at the same time, then they aren't recycled
    - You index all units affected by despair repeatedly - even if they are already indexed
    - Real[1] in despair is not set to 0 when a unit is first indexed - this makes the damage dealt by the ability inconsistent
    - You can use Triggering Unit instead of learning hero, it's faster
    - There's a random pointless condition in "Tantrum refresh"
    - There's a lack of uses of temporary variables when appropriate (such as storing calculations of which the results will be used many times)
    - Special effects should be configurable
    - Dummy units should be owned by a neutral player as to not mess up the score screen
    - Running a filter on literally every unit is not terribly efficient - keep track of what units have which abilities instead of constantly filtering from all units
    - Each spell has a very different level of code quality, please bring them all up to the same level
    - Don't use imported and especially ripped models from games.
    - Change the folder name for the pack to an appropriate name
    - Standardize your trigger names (apply prefix, be consistent in naming)
    - Change your variable names to have a common prefix e.g. ASM_Group[] this prevents other spells from interfering with this pack
    - Temporary groups (ones that are cleared and not stored anywhere after the spell ends) do not need to be indexed - they can all be the same group
    - The amount of effects for CotSM should be configurable
    - Each spell should have a separate configuration trigger - people may not want to import all the spells from the pack

    That's all I got from my first read-through, there may be more but it's hard to notice due to these ones.
     
  2. LimitingBounds

    LimitingBounds

    Joined:
    May 12, 2016
    Messages:
    39
    Resources:
    0
    Resources:
    0
    Thanks for the review. I shall get to work on these... :D *gulp*
     
  3. Wietlol

    Wietlol

    Joined:
    Aug 1, 2013
    Messages:
    4,641
    Resources:
    3
    Spells:
    3
    Resources:
    3
    I have a few approach suggestions:

    First of all, sorry if TC already mentioned something I said... I am not a reader.

    Cursed Touch:
    Make a trigger that runs whenever a unit has gained a level.
    If the level is X, increase the ability level.
    The onDamage trigger is quite nice using a DDS, but "Index[4]" should be "Index[0]" at the very least and maybe renamed to something like "TempInteger". I use TempBlaBla for every global temporary variable that I use if I use GUI.
    If however, Index[4] is somehow related to the spell, the name should be changed.
    Also the damage calculation is a bit odd... shouldnt it be "Set PDD_Amount = Max(PDD_Amount - CursedTouch_DamageReduction[Index], 0)"?
    Where it will take the largest number out of those so there wont be negative damage.
    There is a nice GUI function that does this... probably under the math category.
    Also shouldnt it only apply when taking "PDD_SpellDamage" or something like that?

    Bandage Toss:
    Again name your global variables (pretty much constant variables) something relative to the spell.
    "AbilityIndex[0]" is not really informative.
    "BandageToss_AbilityId" tells you what it is (the ability id) and of what ability it is "Bandage Toss".
    Such prefixes like "BandageToss_" or "BT_" or whatever just prevent global variable naming collisions. (I hope TC mentioned that at the very least.)

    As the human eye wont notice the difference between 0.01 and 0.03 intervals and the cpu does, it is better to stick to 0.03.
    Some people prefer 0.03125 as it is a proper division of 1, but they probably dont actually know why they prefer it :D
    For accuracy reasons, go for 0.03, for performance reasons go for 0.03125 (as you save 1.3 frame per seconds out of 33.3).
    For just idgaf reasons, go for 0.03 as I do.

    If you deal with time related stuff such as speed when you have to move a unit or something like that, you should multiply the speed per second by the interval duration. So: "Set DistanceTraveled = DistanceTraveled + SpeedPerSecond * 0.03".
    If you deal with acceleration and stuff, you might go a level too high though.

    For complete collision ignore, you can also add an ability called Ghost (visible) to the unit.
    In this case, it doesnt matter, but other units will try to walk around your unit if only that unit's collision is turned off.
    If you also give them ghost, other units will walk right through it.
    In this case it doesnt matter as I said because this unit will be moving quite fast.

    Despair:
    Can you turn it off?

    When a unit turns it on, add that unit to a unit group "Despair_UnitGroup".
    Every 0.03 seconds, you pick all units in that unit group.
    No need to go through all units on the map right?
    When they turn it off, die or go out of mana, you remove them from the group.

    Tantrum:
    Very simple approach:
    Make a trigger that runs on a DDS.
    If the damage is physical and the level of Tantrum for the targeted unit is larger than 0 (aka he has learned it), then reduce damage by Tantrum_DamageReduction[Level of Tantrum for targeted unit], again using that amazing max function to not let it go below 0.

    As for the active:
    Make a trigger that runs on cast.
    Pick all nearby enemy living non-structure units and damage them.
    Cooldown reduction is pretty hard in WC3 unfortunately... would have been fun.

    Curse of the Sad Mum:
    The current trigger is pretty good but you should be able to do the SFX without loops... just get a proper SFX.
     
  4. LimitingBounds

    LimitingBounds

    Joined:
    May 12, 2016
    Messages:
    39
    Resources:
    0
    Resources:
    0

    Welp. I really do need to fix the triggers in the description, but that along with a hectic load this week is lmao. :D

     
  5. Wietlol

    Wietlol

    Joined:
    Aug 1, 2013
    Messages:
    4,641
    Resources:
    3
    Spells:
    3
    Resources:
    3
    Ghost doesnt replace the collision turn off.
    You need both to do it properly.
    However, SetUnitX() and SetUnitY() ignore collision anyway iirc.

    About Tantrum... I feel 5 triggers can be reduced to 2.
    1, damage reduction and cooldown reduction.
    2, active.