1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. Seek unity between the elements in the 22nd Terraining Contest Poll.
    Dismiss Notice
  3. Seize the moment! The 18th Mini Mapping Contest has commenced.
    Dismiss Notice
  4. The heavens smile on the old faithful. The 16th Techtree Contest has begun.
    Dismiss Notice
  5. 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.

Teeth - Ver. Hagridden Hermit Crab

Submitted by Devalut
This bundle is marked as approved. It works and satisfies the submission rules.


  • [NEW] - Video of current version (Egregious Elephant)


    Old footage featuring teeth in early stages


    Old Prototype that lead to this version
    (Using dragon hawk missile with glow instead of star scaled down to reduce eradicate squigglyness)
    [​IMG]

  • [​IMG]
    [​IMG]

  • PATCH 1.3.1
    At least that's what I used to make it.




  • TeNe Config
    • TeNe Config
      • Events
        • Map initialization
      • Conditions
      • Actions
        • -------- ========================== --------
        • -------- --------
        • Set VariableSet TeNe_C_Periodic = 0.03
        • Trigger - Add to Tene Periodic <gen> the event (Time - Every TeNe_C_Periodic seconds of game time)
        • -------- --------
        • Set VariableSet TeNe_C_Ability = Teeth - TeNe
        • -------- --------
        • -------- ========================== --------
        • -------- Effect path --------
        • -------- --------
        • -------- Projectile model --------
        • Set VariableSet TeNe_C_EffectPath[1] = Abilities\Weapons\SkeletalMageMissile\SkeletalMageMissile.mdl
        • -------- --------
        • -------- Critical hit (on viable target) --------
        • Set VariableSet TeNe_C_EffectPath[2] = Abilities\Weapons\DemonHunterMissile\DemonHunterMissile.mdl
        • -------- --------
        • -------- Regular on hit (with viable target) --------
        • Set VariableSet TeNe_C_EffectPath[3] = Abilities\Weapons\BloodElfMissile\BloodElfMissile.mdl
        • -------- --------
        • -------- ========================== --------
        • -------- Stats --------
        • -------- --------
        • -------- Allows Multiple Teeth to hit the same target (Default: FALSE) --------
        • -------- "Big fat rabbits are jumpin' in the grass, wait'll they hear my ol' shotgun blast~." --------
        • Set VariableSet TeNe_C_Shotgun_Boogey = False
        • -------- --------
        • -------- Base Damage + PerLVL[X] = Toof damage --------
        • -------- --------
        • Set VariableSet TeNe_C_DMG_Base[1] = 25.00
        • -------- --------
        • Set VariableSet TeNe_C_DMG_PerLVL[1] = 25.00
        • Set VariableSet TeNe_C_DMG_PerLVL[2] = 75.00
        • Set VariableSet TeNe_C_DMG_PerLVL[3] = 125.00
        • -------- --------
        • -------- Collision of missile --------
        • Set VariableSet TeNe_B_Collision[1] = 40.00
        • -------- --------
        • -------- Number of teeth per cast --------
        • Set VariableSet TeNe_C_Count = 5
        • Set VariableSet TeNe_C_Count_PerLVL = 5
        • -------- --------
        • -------- Crit chance --------
        • -------- This is off by default --------
        • Set VariableSet TeNe_B_Crit_Chance[1] = 0.01
        • Set VariableSet TeNe_B_Crit_Chance[2] = 0.02
        • Set VariableSet TeNe_B_Crit_Chance[3] = 0.03
        • -------- --------
        • -------- How much bonus damage does the tooth hit for? (Default 200%) --------
        • Set VariableSet TeNe_C_Crit_Percentage[1] = 2.00
        • Set VariableSet TeNe_C_Crit_Percentage[2] = 2.00
        • Set VariableSet TeNe_C_Crit_Percentage[3] = 2.00
        • -------- --------
        • -------- How far does the projectile travel before dissipating? --------
        • Set VariableSet TeNe_C_Distance[1] = 1500.00
        • -------- --------
        • -------- Height Adjustment to tooth --------
        • Set VariableSet TeNe_C_Height[1] = 65.00
        • -------- --------
        • -------- Missile Offset from caster on creation --------
        • Set VariableSet TeNe_C_Offset[1] = 40.00
        • -------- --------
        • -------- Speed of tooth --------
        • Set VariableSet TeNe_C_Speed[1] = 12.00
        • -------- --------
        • -------- How close the teeth sit together at initial cast --------
        • -------- a small value will make the teeth bunch together like a single projectile, while a larger value will spread them out in front of the caster. --------
        • Set VariableSet TeNe_C_Width = 135.00
        • -------- --------
        • -------- Size of each missile upon cast --------
        • Set VariableSet TeNe_C_Size_Value[1] = 1.50
        • -------- --------
        • -------- Minimum Size of missile (no change to colision) --------
        • Set VariableSet TeNe_C_Size_Value[2] = 0.20
        • -------- --------
        • -------- Rate of size loss during travel --------
        • -------- This will have it's decimal place modifed to be lower. --------
        • Set VariableSet TeNe_C_Size_Value[3] = 0.08
        • -------- --------
        • -------- ========================== --------
        • -------- Preload --------
        • -------- --------
        • -------- I'm not entirely sure but this makes things go smoothly on startup --------
        • -------- --------
        • Set VariableSet TeNe_A_Point[0] = (Center of (Playable map area))
        • Unit - Create 1 Chicken for Neutral Passive at TeNe_A_Point[0] facing Default building facing degrees
        • Set VariableSet TeNe_A_Unit[0] = (Last created unit)
        • Unit - Add TeNe_C_Ability to TeNe_A_Unit[0]
        • Unit - Add a 0.05 second Generic expiration timer to TeNe_A_Unit[0]
        • Unit - Make TeNe_A_Unit[0] Explode on death
        • Custom script: call RemoveLocation(udg_TeNe_A_Point[0])

    TeNe Cast
    • TeNe Cast
      • Events
        • Unit - A unit Starts the effect of an ability
      • Conditions
        • (Ability being cast) Equal to TeNe_C_Ability
      • Actions
        • Set VariableSet TeNe_A_Unit[1] = (Triggering unit)
        • -------- ============================= --------
        • Custom script: set udg_TeNe_A_Temp_Group = CreateGroup()
        • -------- ============================= --------
        • Set VariableSet TeNe_B_Total_Teeth = (TeNe_C_Count + (TeNe_C_Count_PerLVL x (Level of TeNe_C_Ability for TeNe_A_Unit[1])))
        • Set VariableSet TeNe_A_FirstIndex = (TeNe_A_Index + 1)
        • Set VariableSet TeNe_A_Count[TeNe_A_FirstIndex] = TeNe_B_Total_Teeth
        • Set VariableSet TeNe_A_Point[1] = (Position of TeNe_A_Unit[1])
        • Set VariableSet TeNe_A_Point[2] = (Target point of ability being cast)
        • -------- ============================= --------
        • For each (Integer TeNe_A_Cast_LOOP) from 1 to TeNe_B_Total_Teeth, do (Actions)
          • Loop - Actions
            • Set VariableSet TeNe_A_Index = (TeNe_A_Index + 1)
            • Set VariableSet TeNe_B_Caster[TeNe_A_Index] = TeNe_A_Unit[1]
            • Set VariableSet TeNe_A_Point[3] = (TeNe_A_Point[2] offset by ((TeNe_C_Width x 0.50) - ((TeNe_C_Width / (Real((TeNe_B_Total_Teeth + 1)))) x (Real(TeNe_A_Cast_LOOP)))) towards ((Angle from TeNe_A_Point[2] to TeNe_A_Point[1]) - 90.00) degrees.)
            • Set VariableSet TeNe_A_Point[4] = (TeNe_A_Point[1] offset by TeNe_C_Offset[1] towards (Angle from TeNe_A_Point[1] to TeNe_A_Point[2]) degrees.)
            • -------- ============================= --------
            • Special Effect - Create a special effect at TeNe_A_Point[4] using TeNe_C_EffectPath[1]
            • Custom script: call RemoveLocation(udg_TeNe_A_Point[4])
            • Special Effect - Set Yaw of (Last created special effect) to: (Radians((Angle from TeNe_A_Point[2] to TeNe_A_Point[3])))
            • Special Effect - Set Height of (Last created special effect) to: TeNe_C_Height[1]
            • -------- ============================= --------
            • Set VariableSet TeNe_B_TeethGroup[TeNe_A_Index] = TeNe_A_Temp_Group
            • Set VariableSet TeNe_B_TeethCountPointer[TeNe_A_Index] = TeNe_A_FirstIndex
            • Set VariableSet TeNe_B_Effect[TeNe_A_Index] = (Last created special effect)
            • Set VariableSet TeNe_B_Facing[TeNe_A_Index] = (Angle from TeNe_A_Point[1] to TeNe_A_Point[3])
            • Set VariableSet TeNe_B_Distance[TeNe_A_Index] = TeNe_C_Distance[1]
            • Set VariableSet TeNe_B_Size_Effect[TeNe_A_Index] = TeNe_C_Size_Value[(Level of TeNe_C_Ability for TeNe_B_Caster[TeNe_A_Index])]
            • Special Effect - Set Scale of TeNe_B_Effect[TeNe_A_Index] to TeNe_B_Size_Effect[TeNe_A_Index]
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • (Random real number between 0.00 and 1.00) Less than or equal to TeNe_B_Crit_Chance[(Level of TeNe_C_Ability for TeNe_B_Caster[TeNe_A_Index])]
              • Then - Actions
                • Set VariableSet TeNe_B_Damage[TeNe_A_Index] = ((TeNe_C_DMG_Base[1] + TeNe_C_DMG_PerLVL[(Level of TeNe_C_Ability for TeNe_B_Caster[TeNe_A_Index])]) x TeNe_C_Crit_Percentage[(Level of TeNe_C_Ability for TeNe_B_Caster[TeNe_A_Index])])
                • Set VariableSet TeNe_B_Crit[TeNe_A_Index] = True
              • Else - Actions
                • Set VariableSet TeNe_B_Damage[TeNe_A_Index] = (TeNe_C_DMG_Base[1] + TeNe_C_DMG_PerLVL[(Level of TeNe_C_Ability for TeNe_B_Caster[TeNe_A_Index])])
                • Set VariableSet TeNe_B_Crit[TeNe_A_Index] = False
            • -------- ============================= --------
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • TeNe_A_Index Equal to 1
              • Then - Actions
                • Trigger - Turn on Tene Periodic <gen>
              • Else - Actions
            • -------- ============================= --------
            • Custom script: call RemoveLocation(udg_TeNe_A_Point[3])
            • -------- ============================= --------
        • Custom script: call RemoveLocation(udg_TeNe_A_Point[1])
        • Custom script: call RemoveLocation(udg_TeNe_A_Point[2])

    Tene Periodic
    • Tene Periodic
      • Events
      • Conditions
      • Actions
        • -------- If you're looking for the periodic it's in the config, this work around allows users to configure how fast they want the periodic to go for what ever reason. --------
        • For each (Integer TeNe_A_Loop) from 1 to TeNe_A_Index, do (Actions)
          • Loop - Actions
            • -------- ============================= --------
            • -------- - --------
            • -------- Find Projectile & move it --------
            • -------- - --------
            • Set VariableSet TeNe_A_Point[4] = (Point((Position - X of TeNe_B_Effect[TeNe_A_Loop].), (Position - Y of TeNe_B_Effect[TeNe_A_Loop].)))
            • Set VariableSet TeNe_A_Point[5] = (TeNe_A_Point[4] offset by TeNe_C_Speed[1] towards TeNe_B_Facing[TeNe_A_Loop] degrees.)
            • Set VariableSet TeNe_B_Facing[TeNe_A_Loop] = (Angle from TeNe_A_Point[4] to TeNe_A_Point[5])
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • TeNe_B_Size_Effect[TeNe_A_Loop] Greater than TeNe_C_Size_Value[2]
              • Then - Actions
                • Set VariableSet TeNe_B_Size_Effect[TeNe_A_Loop] = (TeNe_B_Size_Effect[TeNe_A_Loop] - (TeNe_C_Size_Value[3] / 10.00))
                • Special Effect - Set Scale of TeNe_B_Effect[TeNe_A_Loop] to TeNe_B_Size_Effect[TeNe_A_Loop]
              • Else - Actions
            • -------- ============================= --------
            • -------- Blizzard doesn't have an option to check the terrain height of a point so we must resort to the dark magic that is "custom script", note that the variables written in the custom script must reflect EXACTLY how the variable is, else it will crash --------
            • Custom script: set udg_TeNe_A_Height = GetLocationZ(udg_TeNe_A_Point[5])
            • -------- ============================= --------
            • Special Effect - Set Position of TeNe_B_Effect[TeNe_A_Loop] to x: (X of TeNe_A_Point[5]), y: (Y of TeNe_A_Point[5]), z: (TeNe_A_Height + TeNe_C_Height[1])
            • Special Effect - Set Yaw of TeNe_B_Effect[TeNe_A_Loop] to: (Radians(TeNe_B_Facing[TeNe_A_Loop]))
            • -------- - --------
            • -------- Find Projectile & move it --------
            • -------- - --------
            • -------- ============================= --------
            • -------- - --------
            • -------- Collision check --------
            • -------- - --------
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • Or - Any (Conditions) are true
                  • Conditions
                    • TeNe_B_Distance[TeNe_A_Loop] Less than or equal to 0.00
                    • (Terrain pathing at TeNe_A_Point[4] of type Walkability is off) Equal to True
              • Then - Actions
                • -------- ============================= --------
                • -------- - --------
                • -------- Clean up! --------
                • -------- - --------
                • Special Effect - Destroy TeNe_B_Effect[TeNe_A_Loop]
                • -------- ============================= --------
                • Set VariableSet TeNe_A_Count[TeNe_B_TeethCountPointer[TeNe_A_Loop]] = (TeNe_A_Count[TeNe_B_TeethCountPointer[TeNe_A_Loop]] - 1)
                • -------- ============================= --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • TeNe_A_Count[TeNe_B_TeethCountPointer[TeNe_A_Loop]] Equal to 0
                  • Then - Actions
                    • Custom script: call DestroyGroup(udg_TeNe_B_TeethGroup[udg_TeNe_A_Loop])
                  • Else - Actions
                • -------- ============================= --------
                • Set VariableSet TeNe_B_Caster[TeNe_A_Loop] = TeNe_B_Caster[TeNe_A_Index]
                • Set VariableSet TeNe_B_Crit[TeNe_A_Loop] = TeNe_B_Crit[TeNe_A_Index]
                • Set VariableSet TeNe_B_Damage[TeNe_A_Loop] = TeNe_B_Damage[TeNe_A_Index]
                • Set VariableSet TeNe_B_Distance[TeNe_A_Loop] = TeNe_B_Distance[TeNe_A_Index]
                • Set VariableSet TeNe_B_Effect[TeNe_A_Loop] = TeNe_B_Effect[TeNe_A_Index]
                • Set VariableSet TeNe_B_Facing[TeNe_A_Loop] = TeNe_B_Facing[TeNe_A_Index]
                • Set VariableSet TeNe_B_Size_Effect[TeNe_A_Loop] = TeNe_B_Size_Effect[TeNe_A_Index]
                • Set VariableSet TeNe_B_TeethGroup[TeNe_A_Loop] = TeNe_B_TeethGroup[TeNe_A_Index]
                • Set VariableSet TeNe_B_TeethCountPointer[TeNe_A_Loop] = TeNe_B_TeethCountPointer[TeNe_A_Index]
                • Set VariableSet TeNe_A_Loop = (TeNe_A_Loop - 1)
                • Set VariableSet TeNe_A_Index = (TeNe_A_Index - 1)
                • -------- ============================= --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • TeNe_A_Index Equal to 0
                  • Then - Actions
                    • Trigger - Turn off (This trigger)
                  • Else - Actions
                • -------- - --------
                • -------- Clean up! --------
                • -------- - --------
                • -------- ============================= --------
              • Else - Actions
                • -------- ============================= --------
                • -------- - --------
                • -------- Unit & Destructable Check --------
                • -------- - --------
                • Set VariableSet TeNe_B_Distance[TeNe_A_Loop] = (TeNe_B_Distance[TeNe_A_Loop] - TeNe_C_Speed[1])
                • -------- ============================= --------
                • Custom script: set bj_wantDestroyGroup = true
                • Unit Group - Pick every unit in (Units within TeNe_B_Collision[1] of TeNe_A_Point[4].) and do (Actions)
                  • Loop - Actions
                    • Set VariableSet TeNe_A_Unit[2] = (Picked unit)
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • Or - Any (Conditions) are true
                          • Conditions
                            • (TeNe_A_Unit[2] is A structure) Equal to True
                      • Then - Actions
                        • -------- ============================= --------
                        • -------- We don't hurt structures, denied --------
                        • -------- - --------
                        • -------- This denotes our previous condition check that the projectile is dead and to clean up --------
                        • Set VariableSet TeNe_B_Distance[TeNe_A_Loop] = 0.00
                        • -------- - --------
                        • -------- ============================= --------
                      • Else - Actions
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (TeNe_A_Unit[2] is Magic Immune) Equal to False
                            • (TeNe_A_Unit[2] is alive) Equal to True
                            • (TeNe_A_Unit[2] is in TeNe_B_TeethGroup[TeNe_A_Loop].) Equal to False
                            • (TeNe_A_Unit[2] belongs to an enemy of (Owner of TeNe_B_Caster[TeNe_A_Loop]).) Equal to True
                            • TeNe_B_Distance[TeNe_A_Loop] Greater than 0.00
                          • Then - Actions
                            • -------- ============================= --------
                            • Set VariableSet TeNe_A_Point[6] = (Position of (Picked unit))
                            • -------- ============================= --------
                            • -------- Crit Trigger --------
                            • -------- ============================= --------
                            • -------- Normally special effetcts will sit on the ground --------
                            • -------- But with these few additions I can make it appear where it hits the unit --------
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • TeNe_B_Crit[TeNe_A_Loop] Equal to True
                              • Then - Actions
                                • Special Effect - Create a special effect at TeNe_A_Point[5] using TeNe_C_EffectPath[2]
                              • Else - Actions
                                • Special Effect - Create a special effect at TeNe_A_Point[5] using TeNe_C_EffectPath[3]
                            • Set VariableSet TeNe_B_Crit[TeNe_A_Loop] = False
                            • Special Effect - Set Position of (Last created special effect) to x: (X of TeNe_A_Point[5]), y: (Y of TeNe_A_Point[5]), z: (TeNe_A_Height + TeNe_C_Height[1])
                            • Special Effect - Set Yaw of TeNe_B_Effect[TeNe_A_Loop] to: (Radians(TeNe_B_Facing[TeNe_A_Loop]))
                            • Special Effect - Destroy (Last created special effect)
                            • -------- ============================= --------
                            • -------- Tons of damage --------
                            • Unit - Cause TeNe_B_Caster[TeNe_A_Loop] to damage TeNe_A_Unit[2], dealing TeNe_B_Damage[TeNe_A_Loop] damage of attack type Spells and damage type Normal
                            • -------- ============================= --------
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • TeNe_C_Shotgun_Boogey Equal to False
                              • Then - Actions
                                • -------- This option halts units from being put in the naughty corner and exlcuded from more than one bolt --------
                                • -------- Thisi s in line with diablo 2 orginal teeth spell --------
                                • Unit Group - Add TeNe_A_Unit[2] to TeNe_B_TeethGroup[TeNe_A_Loop]
                              • Else - Actions
                            • -------- ============================= --------
                            • -------- Again, this tells the loop that the projectile should be dead and cleaned up --------
                            • Set VariableSet TeNe_B_Distance[TeNe_A_Loop] = 0.00
                            • -------- ============================= --------
                            • -------- Remove leaks --------
                            • -------- if you don't know about leaks you can find a nice tutorial on what they are and how to remove them 90% of all custom triggers in this map are to remove leaks --------
                            • -------- [URL='https://www.hiveworkshop.com/threads/things-that-leak.35124/']Things That Leak[/URL] --------
                            • Custom script: call RemoveLocation(udg_TeNe_A_Point[6])
                            • -------- ============================= --------
                          • Else - Actions
                • -------- ============================= --------
                • -------- Watch out for that tree! --------
                • -------- Note this does not apply to props or doodads, the previous conditional check "Check Walkability" works around this by seeing if you can walk on it --------
                • Destructible - Pick every destructible within TeNe_B_Collision[1] of TeNe_A_Point[4] and do (Actions)
                  • Loop - Actions
                    • Set VariableSet TeNe_B_Distance[TeNe_A_Loop] = 0.00
                • -------- ============================= --------
            • -------- ============================= --------
            • -------- Remove leaks --------
            • -------- if you don't know about leaks you can find a nice tutorial on what they are and how to remove them 90% of all custom triggers in this map are to remove leaks --------
            • -------- [URL='https://www.hiveworkshop.com/threads/things-that-leak.35124/']Things That Leak[/URL] --------
            • Custom script: call RemoveLocation(udg_TeNe_A_Point[4])
            • Custom script: call RemoveLocation(udg_TeNe_A_Point[5])
            • -------- ============================= --------


  • Import Teeth in your map!

    Step 0 REQUIRED - Under Preferences, make sure you have "Automatically create unknown variables while pasting trigger data" checked

    Step 1 - Copy over the ability "Teeth"

    Step 2 - Copy & paste the Teeth folder into your map


  • Without these folks this wouldn't be possible.

    Bribe - Leak detector!

    Pyrogasm - Help me fine tune everything and help me learn how to exclude units hit by the spell per cast [link to his post on exclusion] !

    Welt (Not on the hive) - Helped me see basic geometry that was staring me in the face and that I had my points arse backwards!

    Rheiko - his Magic Bolt map helped me understand dynamic indexing a little better, it's basically a single homing missile (there's a location bug in the cast trigger!) but it helped me with the basics.
    It also makes me sad I can't thank him myself.

    Blizzard & Diablo 2 - My inspiration for the *cough*ANOTHER BLATANT COPY *cough* Necromancer's Abilities, and their wonderful editor that still manages to entertain me +17 years later.


  • - Fixed a variable where the pointer wasn't being reshuffled and instead turned to Index
    - Touched up the variables names
    - Fixed location leak at config

    Teeth - [Hagridden Hermit Crab] : 2020-07-24 - 3:33PM PST
    - Added Size loss to missile while traveling
    - Config to adjust Size Initial, Minimum, and Loss rate per tick.
    Thanks to Otherknownoise for the suggestion!

    ================================================

    Previous changelog
    Teeth - [Gangrenous Gillyweed] : 2020-01-13 - 10:32PM PST
    - Reworked damage to go based on generic values instead of caster's attack
    - Added leveled config options for Damage/Crit/CritChance
    - Moved Damage calculation to beginning of cast instead of doing it upon collison

    ================================================

    Teeth - [Fungiferous Flora] : 2019-06-12 - 8:33PM PST

    - Leak removed at TeNe Cast when creating the effect on an offset (Keen eyed Mr. Bribe to thank)

    ================================================

    Teeth - [Egregious Elephant] : 2019-06-07 - 8:04PM PST

    -added configurable offset to teeth on cast [Thanks @Meatmuffin]
    -added distance filter to unit group for collision check, this is to avoid AOE hits when using high collision values.
    -added 10th target frame on map, try hitting all 10 without having any teeth hitting the trees behind!

    ================================================

    Teeth - [Distinct Durian] : 2019-06-05 - 10:34PM PST

    -replaced time elapsed to map init
    -Removed array from TeNe_Ability and added one too Stats_Speed
    -added comments for whats happening where
    -drankdishwater/danced/fought rabid raccoon, I forget which order

    ================================================

    Teeth - [Competitive Cucumber] : 2019-06-04 - 9:40pm PST

    - Added way more config options
    - Added shotgun boogey boolean
    - Fixed my arse-backwards angles to make it more in line with how diablo 2 teeth looks, thanks to Welt

    ================================================

    Teeth - [Boastful Boa Constrictor] : 2019-06-04-5pmish PST

    - Sqwarshed location leak with Pyrogasm
    - Added feature to exclude units hit by the spell, allowing the rest of the teeth to pass through.
    Thanks Pyrogasm!


Please let me know your thoughts, I will take any feedback on to improve Teeth.
Contents

Magic Bolt (Map)

  1. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    1,463
    Resources:
    3
    Spells:
    2
    Tutorials:
    1
    Resources:
    3
    @emil23
    That's an excellent suggestion, and thank you for downloading my spell!
    Until tomorrow go to the highlighted value: upload_2020-1-12_11-28-22.png
    Change it to
    • Set TeNe_Real[1] = (Set TeNe_Stats_DMG_Ratio[1]) + (TeNe_Stats_DMG_Ratio_PerLVL[(Real((Level of TeNe_Ability for TeNe_Caster[TeNe_Loop]]


    And change the config values to:
    • Set TeNe_Stats_DMG_Ratio[1] = 25
    • Set TeNe_Stats_DMG_Ratio_PerLVL[1] = 25
    • Set TeNe_Stats_DMG_Ratio_PerLVL[2] = 75
    • Set TeNe_Stats_DMG_Ratio_PerLVL[3] = 125


    Edit:
    @emil23 Made the changes!
     
    Last edited: Jan 14, 2020
  2. Deathkok

    Deathkok

    Joined:
    Sep 27, 2010
    Messages:
    41
    Resources:
    3
    Maps:
    3
    Resources:
    3
    Good spell i would like put it on my map but it don't let me open archive. some question or version ?
     
  3. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    1,463
    Resources:
    3
    Spells:
    2
    Tutorials:
    1
    Resources:
    3
    @Deathkok
    Time to update winrar, I can open it just fine:
    upload_2020-4-7_2-0-29.png

    Edit: heres an attachment that will last a week:
    Teeth Map | HIVE
     
  4. Chaosy

    Chaosy

    Tutorial Reviewer

    Joined:
    Jun 9, 2011
    Messages:
    11,064
    Resources:
    18
    Icons:
    1
    Maps:
    1
    Spells:
    10
    Tutorials:
    6
    Resources:
    18
    Not trying to flame but cant this be done by importing a projectile system with support for collision and then 5 minutes of personal code?

    Then again most spells can be summed up that way I suppose.

    Looks smooth at least.
     
  5. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    1,463
    Resources:
    3
    Spells:
    2
    Tutorials:
    1
    Resources:
    3
    @Chaosy
    >Looks smooth at least.

    Could you backhand the other side of my face, I still have feeling there.
     
  6. Chaosy

    Chaosy

    Tutorial Reviewer

    Joined:
    Jun 9, 2011
    Messages:
    11,064
    Resources:
    18
    Icons:
    1
    Maps:
    1
    Spells:
    10
    Tutorials:
    6
    Resources:
    18
    It's not really an insult, I am just saying you reinvented the wheel by not using a system to handle the projectiles.
     
  7. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    1,463
    Resources:
    3
    Spells:
    2
    Tutorials:
    1
    Resources:
    3
    @Chaosy
    You didn't give a backhanded insult, however reinventing the wheel?
     
  8. emil23

    emil23

    Joined:
    Jul 17, 2013
    Messages:
    408
    Resources:
    1
    Maps:
    1
    Resources:
    1

    good spell but i have one question

    upload_2020-4-19_21-28-49.png orange circle is casting point i realised that the futher i put casting point then the lower split range the arrows have so they will hit less unit on their path. (top unit i am talking about right now)


    whenever i aim close to the unit then arrows have a lot of split angle (down unit) is it possible to make it so arrows split in big angle no matter how far you put casting point? i would like it to always look like in down image i hope u understant me
     
  9. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    1,463
    Resources:
    3
    Spells:
    2
    Tutorials:
    1
    Resources:
    3
    @emil23
    This is a feature that the original spell has.
    Lemme crack open the ol'editor and see what I can cook up.

    Edit: Done!, test the map and type the command to try out a few angles, afterwards find it in the config and change the value to save it.
    Cheers!
     
    Last edited: Apr 20, 2020
  10. emil23

    emil23

    Joined:
    Jul 17, 2013
    Messages:
    408
    Resources:
    1
    Maps:
    1
    Resources:
    1
    I would need 2 features

    for example if unit of classification giant is hit by tooth then no matter what dmg values are teeth dmg on matching unit cant be higher than 100

    second is it possible to ignore the colission? and make teeth even be able to go throught fence
     
    Last edited: May 9, 2020
  11. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    1,463
    Resources:
    3
    Spells:
    2
    Tutorials:
    1
    Resources:
    3
    @emil23
    I'd be happy to help, but lets move modifications to outside the discussion of this spell, I'd be pleased as punch to receive your messages on my main page or in private messages.
     
  12. emil23

    emil23

    Joined:
    Jul 17, 2013
    Messages:
    408
    Resources:
    1
    Maps:
    1
    Resources:
    1

    I need every unit hited by arrow to be movement slowed, how can i do that?
     
  13. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    1,463
    Resources:
    3
    Spells:
    2
    Tutorials:
    1
    Resources:
    3
    @emil23 You can either message me directly or ask this on the request forums, this is only for the discussion of this spell not modifications of it.
     
  14. Otherknownoise

    Otherknownoise

    Joined:
    Feb 23, 2015
    Messages:
    126
    Resources:
    0
    Resources:
    0
    Diablo 2 teeth will fade and become smaller in the distence, but I don't know if the collision still the same.
     
  15. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    1,463
    Resources:
    3
    Spells:
    2
    Tutorials:
    1
    Resources:
    3
    @Otherknownoise
    Wiki doesn't speak on the matter of their hitbox shrinking, however that sounds like an excellent suggestion.

    Changes have been made!
     
    Last edited: Jul 24, 2020