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. The Results have come out of the old ARENA oven. Check out who won the 30th Texturing Contest!
    Dismiss Notice
  4. Hey guys, we've posted the Results for the 30th Modeling Contest. Check them out!
    Dismiss Notice
  5. The 15th Mini-Mapping Contest came to an end. The Secrets of Warcraft 3 are soon to be revealed! Come and vote in the public poll for your favorite maps.
    Dismiss Notice
  6. The 12th incarnation of the Music Contest is LIVE! The theme is Synthwave. Knight Rider needs a song to listen to on his journey. You should definitely have some fun with this theme!
    Dismiss Notice
  7. Join other hivers in a friendly concept-art contest. The contestants have to create a genie coming out of its container. We wish you the best of luck!
    Dismiss Notice
  8. 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 - v. Fungiferous Flora

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 TeNe_Periodic = 0.03
        • Trigger - Add to Tene Periodic <gen> the event (Time - Every TeNe_Periodic seconds of game time)
        • -------- --------
        • Set TeNe_Ability = Soul Arrow - TeNe
        • -------- --------
        • -------- ========================== --------
        • -------- Effect path --------
        • -------- --------
        • -------- Projectile model --------
        • Set TeNe_EffectPath[1] = Abilities\Weapons\SkeletalMageMissile\SkeletalMageMissile.mdl
        • -------- --------
        • -------- Critical hit (on viable target) --------
        • Set TeNe_EffectPath[2] = Abilities\Weapons\FrostWyrmMissile\FrostWyrmMissile.mdl
        • -------- --------
        • -------- Regular on hit (with viable target) --------
        • Set TeNe_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 TeNe_Shotgun_Boogey = False
        • -------- --------
        • -------- Percentage of Caster's basic attack (default is 50% + 100% per level = 150% at level 1, 250% at 2, and 350% at 3! --------
        • Set TeNe_Stats_DMG_Ratio[1] = 0.50
        • Set TeNe_Stats_DMG_Ratio_PerLVL[1] = 1.00
        • -------- --------
        • -------- Collision of missile --------
        • Set TeNe_Stats_Collision[1] = 40.00
        • -------- --------
        • -------- Number of teeth per cast --------
        • Set TeNe_Stats_Count = 5
        • Set TeNe_Stats_Count_PerLVL = 5
        • -------- --------
        • -------- Crit chance --------
        • -------- This is off by default --------
        • Set TeNe_Stats_Crit_Chance[1] = 0.00
        • -------- --------
        • -------- How much bonus damage does the tooth hit for? (Default 200%) --------
        • Set TeNe_Stats_Crit_Percentage[1] = 2.00
        • -------- --------
        • -------- How far does the projectile travel before dissipating? --------
        • Set TeNe_Stats_Distance[1] = 1500.00
        • -------- --------
        • -------- Height Adjustment to tooth --------
        • Set TeNe_Stats_Height[1] = 65.00
        • -------- --------
        • -------- Missile Offset from caster on creation --------
        • Set TeNe_Stats_Offset[1] = 40.00
        • -------- --------
        • -------- Speed of tooth --------
        • Set TeNe_Stats_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 TeNe_Stats_Width = 135.00
        • -------- --------
        • -------- ========================== --------
        • -------- Preload --------
        • -------- --------
        • -------- I'm not entirely sure but this makes things go smoothly on startup --------
        • -------- --------
        • Set TeNe_Point[0] = (Center of (Playable map area))
        • Unit - Create 1 Chicken for Neutral Passive at (Center of (Playable map area)) facing Default building facing degrees
        • Set TeNe_Unit[0] = (Last created unit)
        • Unit - Add TeNe_Ability to TeNe_Unit[0]
        • Unit - Add a 0.05 second Generic expiration timer to TeNe_Unit[0]
        • Unit - Make TeNe_Unit[0] Explode on death

    TeNe Cast
    • TeNe Cast
      • Events
        • Unit - A unit Starts the effect of an ability
      • Conditions
        • (Ability being cast) Equal to TeNe_Ability
      • Actions
        • Set TeNe_Unit[1] = (Triggering unit)
        • -------- ============================= --------
        • Custom script: set udg_TeNe_Temp_Group = CreateGroup()
        • -------- ============================= --------
        • Set TeNe_Total_Teeth = (TeNe_Stats_Count + (TeNe_Stats_Count_PerLVL x (Level of TeNe_Ability for TeNe_Unit[1])))
        • Set TeNe_FirstIndex = (TeNe_Index + 1)
        • Set TeNe_Count[TeNe_FirstIndex] = TeNe_Total_Teeth
        • Set TeNe_Point[1] = (Position of TeNe_Unit[1])
        • Set TeNe_Point[2] = (Target point of ability being cast)
        • -------- ============================= --------
        • For each (Integer TeNe_Cast_LOOP) from 1 to TeNe_Total_Teeth, do (Actions)
          • Loop - Actions
            • Set TeNe_Index = (TeNe_Index + 1)
            • Set TeNe_Caster[TeNe_Index] = TeNe_Unit[1]
            • Set TeNe_Point[3] = (TeNe_Point[2] offset by ((TeNe_Stats_Width x 0.50) - ((TeNe_Stats_Width / (Real((TeNe_Total_Teeth + 1)))) x (Real(TeNe_Cast_LOOP)))) towards ((Angle from TeNe_Point[2] to TeNe_Point[1]) - 90.00) degrees)
            • Set TeNe_Point[4] = (TeNe_Point[1] offset by TeNe_Stats_Offset[1] towards (Angle from TeNe_Point[1] to TeNe_Point[2]) degrees)
            • -------- ============================= --------
            • Special Effect - Create a special effect at TeNe_Point[4] using TeNe_EffectPath[1]
            • Custom script: call RemoveLocation(udg_TeNe_Point[4])
            • Special Effect - Set Yaw of (Last created special effect) to: (Radians((Angle from TeNe_Point[2] to TeNe_Point[3])))
            • Special Effect - Set Height of (Last created special effect) to: TeNe_Stats_Height[1]
            • -------- ============================= --------
            • Set TeNe_TeethGroup[TeNe_Index] = TeNe_Temp_Group
            • Set TeNe_TeethCountPointer[TeNe_Index] = TeNe_FirstIndex
            • Set TeNe_Effect[TeNe_Index] = (Last created special effect)
            • Set TeNe_Facing[TeNe_Index] = (Angle from TeNe_Point[1] to TeNe_Point[3])
            • Set TeNe_Distance[TeNe_Index] = TeNe_Stats_Distance[1]
            • -------- ============================= --------
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • TeNe_Index Equal to 1
              • Then - Actions
                • Trigger - Turn on Tene Periodic <gen>
              • Else - Actions
            • -------- ============================= --------
            • Custom script: call RemoveLocation(udg_TeNe_Point[3])
            • -------- ============================= --------
        • Custom script: call RemoveLocation(udg_TeNe_Point[2])
        • Custom script: call RemoveLocation(udg_TeNe_Point[1])

    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_Loop) from 1 to TeNe_Index, do (Actions)
          • Loop - Actions
            • -------- ============================= --------
            • -------- - --------
            • -------- Find Projectile & move it --------
            • -------- - --------
            • Set TeNe_Point[4] = (Point((Position - X of TeNe_Effect[TeNe_Loop]), (Position - Y of TeNe_Effect[TeNe_Loop])))
            • Set TeNe_Point[5] = (TeNe_Point[4] offset by TeNe_Stats_Speed[1] towards TeNe_Facing[TeNe_Loop] degrees)
            • Set TeNe_Facing[TeNe_Loop] = (Angle from TeNe_Point[4] to TeNe_Point[5])
            • -------- ============================= --------
            • -------- 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_C_Height = GetLocationZ(udg_TeNe_Point[5])
            • -------- ============================= --------
            • Special Effect - Set Position of TeNe_Effect[TeNe_Loop] to x: (X of TeNe_Point[5]), y: (Y of TeNe_Point[5]), z: (TeNe_C_Height + TeNe_Stats_Height[1])
            • Special Effect - Set Yaw of TeNe_Effect[TeNe_Loop] to: (Radians(TeNe_Facing[TeNe_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_Distance[TeNe_Loop] Less than or equal to 0.00
                    • (Terrain pathing at TeNe_Point[4] of type Walkability is off) Equal to True
              • Then - Actions
                • -------- ============================= --------
                • -------- - --------
                • -------- Clean up! --------
                • -------- - --------
                • Special Effect - Destroy TeNe_Effect[TeNe_Loop]
                • -------- ============================= --------
                • Set TeNe_Count[TeNe_TeethCountPointer[TeNe_Loop]] = (TeNe_Count[TeNe_TeethCountPointer[TeNe_Loop]] - 1)
                • -------- ============================= --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • TeNe_Count[TeNe_TeethCountPointer[TeNe_Loop]] Equal to 0
                  • Then - Actions
                    • Custom script: call DestroyGroup(udg_TeNe_TeethGroup[udg_TeNe_Loop])
                  • Else - Actions
                • -------- ============================= --------
                • Set TeNe_Caster[TeNe_Loop] = TeNe_Caster[TeNe_Index]
                • Set TeNe_Effect[TeNe_Loop] = TeNe_Effect[TeNe_Index]
                • Set TeNe_Facing[TeNe_Loop] = TeNe_Facing[TeNe_Index]
                • Set TeNe_Distance[TeNe_Loop] = TeNe_Distance[TeNe_Index]
                • Set TeNe_TeethGroup[TeNe_Loop] = TeNe_TeethGroup[TeNe_Index]
                • Set TeNe_TeethCountPointer[TeNe_Loop] = TeNe_Index
                • Set TeNe_Loop = (TeNe_Loop - 1)
                • Set TeNe_Index = (TeNe_Index - 1)
                • -------- ============================= --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • TeNe_Index Equal to 0
                  • Then - Actions
                    • Trigger - Turn off (This trigger)
                  • Else - Actions
                • -------- - --------
                • -------- Clean up! --------
                • -------- - --------
                • -------- ============================= --------
              • Else - Actions
                • -------- ============================= --------
                • -------- - --------
                • -------- Unit & Destructable Check --------
                • -------- - --------
                • Set TeNe_Distance[TeNe_Loop] = (TeNe_Distance[TeNe_Loop] - TeNe_Stats_Speed[1])
                • -------- ============================= --------
                • Custom script: set bj_wantDestroyGroup = true
                • Unit Group - Pick every unit in (Units within TeNe_Stats_Collision[1] of TeNe_Point[4]) and do (Actions)
                  • Loop - Actions
                    • Set TeNe_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_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 TeNe_Distance[TeNe_Loop] = 0.00
                        • -------- - --------
                        • -------- ============================= --------
                      • Else - Actions
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (TeNe_Unit[2] is Magic Immune) Equal to False
                            • (TeNe_Unit[2] is alive) Equal to True
                            • (TeNe_Unit[2] is in TeNe_TeethGroup[TeNe_Loop]) Equal to False
                            • (TeNe_Unit[2] belongs to an enemy of (Owner of TeNe_Caster[TeNe_Loop])) Equal to True
                            • TeNe_Distance[TeNe_Loop] Greater than 0.00
                          • Then - Actions
                            • -------- ============================= --------
                            • Set TeNe_Point[6] = (Position of (Picked unit))
                            • -------- ============================= --------
                            • -------- Calculate damage --------
                            • Set TeNe_Integer[1] = (Base Damage of TeNe_Caster[TeNe_Loop] for weapon index 0)
                            • Set TeNe_Integer[2] = (Dice Number of TeNe_Caster[TeNe_Loop] for weapon index 0)
                            • Set TeNe_Integer[3] = (Dice Sides of TeNe_Caster[TeNe_Loop] for weapon index 0)
                            • Set TeNe_Integer[4] = (Random integer number between (TeNe_Integer[1] + TeNe_Integer[2]) and (TeNe_Integer[1] + (TeNe_Integer[2] x TeNe_Integer[3])))
                            • Set TeNe_Real[1] = ((Real(TeNe_Integer[4])) x (TeNe_Stats_DMG_Ratio[1] + (TeNe_Stats_DMG_Ratio_PerLVL[1] x (Real((Level of TeNe_Ability for TeNe_Caster[TeNe_Loop]))))))
                            • -------- ============================= --------
                            • -------- Crit Trigger --------
                            • 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_Stats_Crit_Chance[1]
                              • Then - Actions
                                • Set TeNe_Real[1] = (TeNe_Real[1] x TeNe_Stats_Crit_Percentage[1])
                                • Special Effect - Create a special effect at TeNe_Point[5] using TeNe_EffectPath[2]
                              • Else - Actions
                                • Special Effect - Create a special effect at TeNe_Point[5] using TeNe_EffectPath[3]
                            • -------- ============================= --------
                            • -------- Normally special effetcts will sit on the ground --------
                            • -------- But with these few additions I can make it appear where it hits the unit --------
                            • Special Effect - Set Position of (Last created special effect) to x: (X of TeNe_Point[5]), y: (Y of TeNe_Point[5]), z: (TeNe_C_Height + TeNe_Stats_Height[1])
                            • Special Effect - Set Yaw of TeNe_Effect[TeNe_Loop] to: (Radians(TeNe_Facing[TeNe_Loop]))
                            • Special Effect - Destroy (Last created special effect)
                            • -------- ============================= --------
                            • -------- Tons of damage --------
                            • Unit - Cause TeNe_Caster[TeNe_Loop] to damage TeNe_Unit[2], dealing TeNe_Real[1] damage of attack type Hero and damage type Normal
                            • -------- ============================= --------
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • TeNe_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_Unit[2] to TeNe_TeethGroup[TeNe_Loop]
                              • Else - Actions
                            • -------- ============================= --------
                            • -------- Again, this tells the loop that the projectile should be dead and cleaned up --------
                            • Set TeNe_Distance[TeNe_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 --------
                            • -------- https://www.hiveworkshop.com/threads/things-that-leak.35124/ --------
                            • Custom script: call RemoveLocation(udg_TeNe_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_Stats_Collision[1] of TeNe_Point[4] and do (Actions)
                  • Loop - Actions
                    • Set TeNe_Distance[TeNe_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 --------
            • -------- https://www.hiveworkshop.com/threads/things-that-leak.35124/ --------
            • Custom script: call RemoveLocation(udg_TeNe_Point[4])
            • Custom script: call RemoveLocation(udg_TeNe_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!

    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.


  • 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)

    Previous changelog
    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

Teeth - ver Egregious Elehphant (Map)

  1. MyPad

    MyPad

    Spell Reviewer

    Joined:
    May 9, 2014
    Messages:
    1,259
    Resources:
    6
    Models:
    1
    Icons:
    1
    Spells:
    3
    JASS:
    1
    Resources:
    6
    A simple wave-like spell that has an added touch of destructible collision check for realism. Splendid usage of the default models that give life to this spell.

    More configurability options could theoretically be offered, and it is wanting in that respect, but by the way the spell is coded, it is designed to be tinkered with or modified to suit one's needs. As such, suggestions regarding configurability of the spell are kept to a minimum.

    Notes:


    • The Config Trigger should be initialized during Map Initialization, as per convention of Initialization Triggers. (This Config Trigger behaves as a Config Trigger)

    • GUI variable
      TeNe_Ability
      should not be an array variable, since the only commonly used index is 1. (It also appears to be a constant variable besides being assigned in the Config Trigger)

    Suggestions:


    • Why not make
      TeNe_Stats_Speed
      an array variable? (Allows customizability of speed)

    • Renaming
      TeNe_Shotgun_Boogey
      to a more proper name would be desirable. (I suggest
      TeNe_Shotgun_Spread
      )

    • Add comments on what each section does in the Periodic Trigger, in order to guide the user on what happens when each section does/is for.

    Status:


    • Approved

      [​IMG]
     
  2. The_Silent

    The_Silent

    Joined:
    Feb 4, 2008
    Messages:
    2,797
    Resources:
    155
    Models:
    45
    Icons:
    89
    Packs:
    8
    Skins:
    12
    Maps:
    1
    Resources:
    155
    I feel like the aiming part would be a lot more useful if enemies could be hit by multiple projectiles.
    Then maybe a max damage setting to prevent overkill of a single unit.

    Otherwise the best option seems to be universally to put the pointer as close to your hero as possible when firing. To maximize enemies hit and to minimize the need for aiming.
     
  3. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    758
    Resources:
    2
    Spells:
    2
    Resources:
    2
    @MyPad
    Wow I can't believe how quickly this got approved, I'm so pleased!
    I will be sure to complete all those suggestions save for one...


    I'm sorry this is not negotiable as I was listening to this non-stop while making it:
    [forgive my taste in music.]
    "SHOTGUN BOOGEY, BA DUM DUM DUM, ALL I NEED IS ONE SHOT!"

    This is excellence news my dude.
    [​IMG]

    @The_Silent

    Oh like the vanilla spells, great idea!
    I mainly tried to focus on replicating teeth, even down to the nitty gritty "Feature" of limiting one unit per projectile as noted in the wiki (and my recollection of the game):
    I really like your idea as an option though,
    Perhaps I could add up "Potential damage" target in the unit group on collision, then exclude them if they exceed that damage, but to be honest I've not worked with Index's so much and @Pyrogasm basically wrote the code for unit exclusion.

    I'll work it over tonight.
    Thanks for the suggestion!

    ETA: Also note that "Shotgun Boogey" option allows you to treat it like a shotgun but as you mention already, you just need to adjust the damage!
     
  4. Pyrogasm

    Pyrogasm

    Joined:
    Feb 27, 2007
    Messages:
    2,560
    Resources:
    0
    Resources:
    0
    Limiting damage on a per-unit basis will necessitate using a hashtable. The aiming matters more, @The_Silent, the smaller the collision radius for each tooth. If the radius is too large then it will probably hit everything anyway even if you're not trying. Adjust it yourself and see if it makes aiming 'relevant'.
     
  5. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    758
    Resources:
    2
    Spells:
    2
    Resources:
    2
    @Pyrogasm & @The_Silent
    I could cheat by using Unit Indexer...
    No wait!

    Perhaps I can simply add a damage reduction if the unit has already been hit, i.e. 35% damage from additional bolts!

    ETA:
    @MyPad, I've added changes & suggestions you mentioned.~
     
    Last edited: Jun 6, 2019
  6. Meatmuffin

    Meatmuffin

    Joined:
    Jul 25, 2014
    Messages:
    455
    Resources:
    9
    Maps:
    2
    Spells:
    7
    Resources:
    9
    As a Diablo II fanatic, this isn't quite how Teeth spell works :p
    Yes it depends on how far away from yourself you cast it but the multiple projectiles never converge into a single point, it just appears that way because of the Necromancer's animation.
    So if you want to replicate that, the point should be a constant offset from yourself at about ~100-150 range, but the range between projectiles should still depend on the distance between you and the cast point. :)
     
  7. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    758
    Resources:
    2
    Spells:
    2
    Resources:
    2
    the gif & vid is old, i had someone say the same thing in regards to converging, ill add the offset later tonight!

    ETA: The current and previous version do not have converging bolts btw
     
    Last edited: Jun 7, 2019
  8. Ether

    Ether

    Joined:
    Nov 13, 2017
    Messages:
    552
    Resources:
    3
    Skins:
    3
    Resources:
    3
    I like the spell but I liked the music more.
     
  9. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    758
    Resources:
    2
    Spells:
    2
    Resources:
    2
    @Meatmuffin
    Better?
    Worse?
    Goldilocks zone achieved!?
     
  10. Meatmuffin

    Meatmuffin

    Joined:
    Jul 25, 2014
    Messages:
    455
    Resources:
    9
    Maps:
    2
    Spells:
    7
    Resources:
    9
    Yes! Way better! Personally I'd like to have more spread (at minimum being 180 degrees just to have the D2 accuracy) but that's just a variable change, really great job! :)
     
  11. Clanzion

    Clanzion

    Joined:
    Jul 4, 2016
    Messages:
    384
    Resources:
    0
    Resources:
    0
    Any chance you might make a GUI spell system variant?
     
  12. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    758
    Resources:
    2
    Spells:
    2
    Resources:
    2
    Like a missile system?
    That seems like a very difficult task to be perfectly honest, I'd need more experience before I could do that!

    However if you wish to have a specific change to this one I'd be happy to help.
     
  13. Clanzion

    Clanzion

    Joined:
    Jul 4, 2016
    Messages:
    384
    Resources:
    0
    Resources:
    0
  14. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    758
    Resources:
    2
    Spells:
    2
    Resources:
    2
    I"ll take a whack at it

    ETA: Yikes this is difficult...
     
    Last edited: Jun 11, 2019
  15. Pyrogasm

    Pyrogasm

    Joined:
    Feb 27, 2007
    Messages:
    2,560
    Resources:
    0
    Resources:
    0
    There’s, like, no reason to do that. This spell in its current incarnation can coexist peacefully with any spell systems present in a map.
     
  16. Bribe

    Bribe

    Joined:
    Sep 26, 2009
    Messages:
    7,958
    Resources:
    25
    Maps:
    3
    Spells:
    10
    Tutorials:
    3
    JASS:
    9
    Resources:
    25
    As much as I love Spell System and know what kind of benefit it has to anyone using it, I can see why it's not a popular enough tool. The learning curve is pretty nuts.

    That being said, using Damage Engine to supplement spells is the new big deal. I have the majority of damage types mapped out, and will get it published soon.
     
  17. Pyrogasm

    Pyrogasm

    Joined:
    Feb 27, 2007
    Messages:
    2,560
    Resources:
    0
    Resources:
    0
    I think you understand me: I'm not saying there's no reason to use something like your spell system (no disrespect). I'm saying that if this resource works without it there is basically nothing to be gained by making it use the spell system like @Clanzion requested.
     
  18. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    758
    Resources:
    2
    Spells:
    2
    Resources:
    2
    its a fun challenge, and I can pester @Bribe about it if I get stuck.