• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

DotA Wars 1.20 in GUI - collection of difficult DotA spells

Status
Not open for further replies.
Level 12
Joined
May 16, 2020
Messages
660
Hi all,

This will be a very large request, but probably useful for many others.

I found this amazing map on TheHelper which contains 16 heroes of DotA with difficult triggers:
Hulk3 - DotA Wars (1.00)

Unfortunately it's written in JASS and contains libraries which conflict with many libraries I use in my personal map.

So my request would be: Can someone please transform some of these spells into GUI?

In order of importance:
1. Bristleback (Done)
2. Tuskarr
3. Storm Spirit (Done)

4. Spirit Breaker
5. Sacred Warrior
6. Spectre
7. Lord of Avernus
8. Witch Doctor
9. Admiral
10. Beastmaster
11. Rest

Would very much appreciate this conversion, as some heroes on this list don't have any spell packs and in some cases I don't even know where to start to create them in GUI (Bristle, Turkar, Storm Spirit)

Thank you in advance!


Edit: Not sure if relevant, but I use reforged.


****************************************************


Spell descriptions (for top 3 for now):
[but I really recommend looking at the link I provided above for more details]

Bristleback:
  1. Covers a target in snot, causing it to have reduced armor and movement speed. Casts on the same target are cumulative. |nLasts 5 seconds. |n|n|cffffcc00Level 1|r - -1 armor, 20% and 3% slow a cast.|n|cffffcc00Level 2|r - -1 armor, 20% and 6% slow a cast.|n|cffffcc00Level 3|r - -2 armor, 20% and 9% slow a cast.|n|cffffcc00Level 4|r - -2 armor, 20% and 12% slow a cast. |n|n|cff99ccffCooldown: |r 1.5 seconds.
  2. Rigwal covers his back in spines, causing him to take reduced damage. Automatically releases a quill spray whenever his rear receives 250 damage. |n|n|cffffcc00Level 1|r - 16% reduced from rear, 8% from sides.|n|cffffcc00Level 2|r - 24% reduced from rear, 12% from sides.|n|cffffcc00Level 3|r - 32% reduced from rear, 16% from sides. |n|cffffcc00Level 4|r - 40% reduced from rear, 20% from sides.
  3. Sprays enemy units with quills dealing damage in a 625 AoE. Deals 30 extra damage everytime a unit is struck by a quill in the last 10 seconds. Damage type is physical. |n|n|cffffcc00Level 1|r - 20 direct damage. 30 stacking damage. |n|cffffcc00Level 2|r - 40 direct damage. 30 stacking damage. |n|cffffcc00Level 3|r - 60 direct damage. 30 stacking damage. |n|cffffcc00Level 4|r - 80 direct damage. 30 stacking damage. |n|n|cff99ccffCooldown: |r 3 seconds.
  4. Everytime Rigwarl casts a spell, he works himself into a fury. Movement speed and damage increase on repeated spell casts. Lasts 10 seconds. Stacks up to 5 times. |n|n|cffffcc00Level 1|r - 10 damage/5% MS Base + 4 damage/1% MS Stack. |n|cffffcc00Level 2|r - 20 damage/7% MS Base + 8 damage/2% MS Stack. |n|cffffcc00Level 3|r - 30 damage/10% MS Base + 12 damage/3% MS Stack.

Tuskarr:
  1. Tuskarr summons a Frozen Sigil by calling upon the deepest cold of winter. The Sigil creates a snowstorm which slows all enemy units within 600 range. Lasts for 30 seconds. |n|n|cffffcc00Level 1|r - 10% Movement Speed, 30% Attack Speed. |n|cffffcc00Level 2|r - 15% Movement Speed, 40% Attack Speed. |n|cffffcc00Level 3|r - 20% Movement Speed, 50% Attack Speed. |n|cffffcc00Level 4|r - 25% Movement Speed, 60% Attack Speed. |n|n|cff99ccffCooldown: |r 50 seconds.
  2. Tuskarr and any nearby allied heroes roll in a quickly growing snowball towards the target enemy unit. Any victims caught in the snowball's path take damage and are briefly stunned; the final target takes 40 extra damage and 0.25 extra stun duration. The snowball moves at a move speed relative to the heroes within. |n|n|cffffcc00Level 1|r - 40 damage, 0.25 second stun. |n|cffffcc00Level 2|r - 80 damage, 0.50 second stun. |n|cffffcc00Level 3|r - 120 damage, 0.75 second stun. |n|cffffcc00Level 4|r - 160 damage, 1 second stun. |n|n|cff99ccffCooldown: |r 40 seconds.
  3. Tuskarr compresses 5 shards of ice into a ball of frozen energy that damages all enemies it comes in contact with. If the ball comes in contact with an enemy hero or reaches its maximum range the shards are released, creating a barrier that lasts for 5 seconds. |n|n|cffffcc00Level 1|r - 70 damage. |n|cffffcc00Level 2|r - 140 damage. |n|cffffcc00Level 3|r - 210 damage. |n|cffffcc00Level 4|r - 280 damage. |n|n|cff99ccffCooldown: |r 18/16/14/12 seconds.
  4. Tuskarr prepares his mighty Walrus Punch; his next attack will do a 2.25x critical strike and launch the victim into the air. The victim will be slowed by 40% upon landing. If the victim is below 50% health, the attack will deal a 4x critical strike instead. |n|n|cffffcc00Level 1|r - 2 second slow. |n|cffffcc00Level 2|r - 3 second slow. |n|cffffcc00Level 3|r - 4 second slow. |n|n|cff99ccffCooldown: |r 30/24/18 seconds.

Storm Spirit:
  1. Storm Spirit becomes enveloped with energy, losing his physical form, and travels until he depletes his mana or reaches his target. While in this form, he deals damage to nearby units based on how far his electrical form has traversed. Damage, speed and area of effect improve per level.
  2. Storm Spirit becomes overloaded with electrical energy whenever he casts a spell. The charge is released on his next attack as an electrical burst, dealing damage and slowing nearby units. |n|n|cffffcc00Level 1|r - 30 Damage. |n|cffffcc00Level 2|r - 45 Damage. |n|cffffcc00Level 3|r - 60 Damage. |n|cffffcc00Level 4|r - 75 Damage.
  3. Storm focuses his energy to rip open vortex drawing an enemy to it. This process slows the Storm Spirit down for a brief period. |n|n|cffffcc00Level 1|r - Pulls 100 units over 1 second. |n|cffffcc00Level 2|r - Pulls 150 units over 1.5 seconds. |n|cffffcc00Level 3|r - Pulls 200 units over 2 seconds. |n|cffffcc00Level 4|r - Pulls 250 units over 2.5 seconds. |n|n|cff99ccffCooldown: |r 20 seconds.
  4. Raijin creates a remnant of himself containing his essence. The Static Remnant will release its stored energy whenever an enemy unit comes near it. Lasts up to 12 seconds. |n|n|cffffcc00Level 1|r - 140 Damage. |n|cffffcc00Level 2|r - 180 Damage. |n|cffffcc00Level 3|r - 220 Damage. |n|cffffcc00Level 4|r - 260 Damage. |n|n|cff99ccffCooldown: |r 4 seconds.
 
Last edited:
Level 12
Joined
May 16, 2020
Messages
660
Thank you!

Edit: Is there a way to make the unit "not attack" while in ball lightning?

I tried "hold position", but it seems to get automatically be disabled again as soon as the hero gets moved by the trigger. I don't want to pause the hero either however, since the hero should still be able to cast static Remnant as active ability when flying. I will experiment a bit and see if I find a solution for this.
 
Last edited:
Level 24
Joined
Feb 9, 2009
Messages
1,787
Do note the wiki on the ability does not support this:
upload_2020-6-19_8-51-57.png


But sure, I've added a dummy that casts banish on the caster that still allows casting but disables attack, but future versions will not include this.
Look for the No Attack version in the paste.
 

Attachments

  • upload_2020-6-19_8-31-50.png
    upload_2020-6-19_8-31-50.png
    8.8 KB · Views: 80
Level 12
Joined
May 16, 2020
Messages
660
I'm really excited for that one! Is Quill Spray bad because it's in GUI instead of JASS? Maybe looking at how the JASS spell was done helps?:

JASS:
//TESH.scrollpos=29
//TESH.alwaysfold=0
scope QuillSpray initializer Init

globals
    private constant integer AbilId = 'A02G'
    private constant integer AbilId2 = 'A02I'
   
    private integer array Stack
    private real Dam
    private unit U
    private player P
endglobals

private function Filt takes nothing returns boolean
    local unit targ = GetFilterUnit()
    local integer id
   
    if IsUnitEnemy(targ,P) and GetWidgetLife(targ)>.405 then
        call UnitDamageTargetEx(U, targ, Dam, ATTACK_TYPE_HERO, DAMAGE_TYPE_SPELL, true)
        set id = h2i(targ)-0x100000       
        call UnitDamageTargetEx(U, targ, RMinBJ(Stack[id]*30.,180.), ATTACK_TYPE_HERO, DAMAGE_TYPE_SPELL, true)
        set Stack[id] = Stack[id] + 1
       
        set targ = null
        return true
    endif
   
    set targ = null
    return false
endfunction
private function Remove takes nothing returns nothing
    local integer id = h2i(GetEnumUnit())-0x100000       
    set Stack[id] = Stack[id] - 1
endfunction
private function Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local integer lvl = GetUnitAbilityLevel(u,GetSpellAbilityId())
    local group g = NewGroup()
   
    call GroupEnumUnitsInRange(g,GetUnitX(u),GetUnitY(u),650.,Condition(function Filt))
    set U = u
    set P = GetOwningPlayer(u)
    set Dam =lvl*20.
   
    call PolledWait2(10.)
    call ForGroup(g,function Remove)
   
    set u = null
    call ReleaseGroup(g)
endfunction

private function Conds takes nothing returns boolean
    if GetSpellAbilityId()==AbilId or GetSpellAbilityId()==AbilId2 then
        call Actions.execute()
    endif
    return false
endfunction
private function Init takes nothing returns nothing
    local trigger t=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(t,Condition(function Conds))
endfunction

endscope
 
Level 24
Joined
Feb 9, 2009
Messages
1,787
Nvm, I think I got it, just finishing up Nasal thing.

Bleh Crash...

The problem with it is the method I use is finicky, imagine my process is like a deck of cards, each card representing an instance where a unit has been hit with a quill and is LOGGED, when I want to hit that unit again I'd have to shuffle through the entire deck one by one to find said card, and modify the damage to be increased, now multiply that by each unit you hit with this ability and you have however many units there are you need to shuffle through which can lead to some noticeable performance issues.

However I just add it to a group and if the .05 second timer catches them it the group it gives them a spank on the bottom and kicks them out logging them for +1 stack, this is much more performance friendly but the trade off is that each stack is no longer individual as in described on the dota 2 wiki page but I'm beginning to suspect from the jass script that it wasn't intended anyway, so i've managed a maelstrom in a teacup all on overthinking.

Here's what I salvaged from the crash, I'll work on Nasal goo when I get the patience back.
Rigwarl Pack GUI [WIP] | HIVE
 
Last edited:
Level 12
Joined
May 16, 2020
Messages
660
Looks really amazing! I got to sit down 20 min before work and found the following is not working yet:

- Warpath: Seems to stack only 4 instead of 5 times
- Quillspray: Sorry I didn't write this, nor was in written in the spell description, but there is a max damage of 400 per cast (currently there is no cap)
- Quillspray: Damage seems to not reset after 10 seconds (enemies still take full damage after waiting for >10 seconds)
- Nasal Goo: The armor doesn't stack
- Nasal Goo: The armor debuff fades away from the enemy, even though one is casting the abilty over and over on the enemy
- Nasal Goo: Doesn't trigger Warpath

I will try to give an update tonight when I test properly (didn't test for example if the movement slow from Nasal Goo works as intended), I think some things I can fix on my own.
 
Level 24
Joined
Feb 9, 2009
Messages
1,787
Whoops, got too hasty.

Careless Capybara added to paste.

>Warpath
The first stack is just 10 and then consecutive casts after that are +4 resulting in +26 damage, increase it to 6 to make it +30.

>Quill Spray Max Damage
Added to Config

>Quill Spray stack infinite
Fixed!

>Armor debuff doesn't Stack
I can't replicate this, please detail when this happens to you.

> fades despite recasts
Elaborate further, do you mean the flashing buff?

>doesn't trigger warpath
Fixed
 
Last edited:
Level 12
Joined
May 16, 2020
Messages
660
Thank you :-D

So I did some further testing, specifically about this
>Armor debuff doesn't Stack
I can't replicate this, please detail when this happens to you.

> fades despite recasts
Elaborate further, do you mean the flashing buff?

Ragarding no stacking: I cast the spell several times on the same unit and (for level 4) the armor reducation stays at 2 (or rather, see next point, goes from -2 to 0). Usually it should stack and go down to -8 after 4x casts on the same unit

Ragarding fading away: So I cast the ability 1x on an enemy (level 4). The enemy has -2 armor and has a green debuff icon. When I cast it again on the same enemy, the enemy loses the armor debuff, but still has the green debuff icon. See the sequence below, took some pictures.

Tested it in reforged and classic graphics just to be sure, but this behaviour doesn't change.
 

Attachments

  • 1_My Target.png
    1_My Target.png
    5.9 MB · Views: 77
  • 2_Casting it once.png
    2_Casting it once.png
    5.9 MB · Views: 103
  • 3_Casting it again.png
    3_Casting it again.png
    5.9 MB · Views: 91
Level 12
Joined
May 16, 2020
Messages
660
Thank you! :) really grateful for that one, I wouldn't even know where to start with that one! (except maybe Bristleback, the ability)

***
Edit: Sorry Devalut, I did notice one bug after all: Sometimes when casting Viscous Nasal Goo on the same unit twice, the second cast doesn't apply the debuff. So when the bug happens, this is the sequence (at level 4):

1) Cast > Debuff applied, -2
2) Cast > Debuff applied, but still -2
3) Cast > Debuff applied, -4
4) then like normal it seems

(you have to try a bit, I recommend setting the mana cost to 0)

I couldn't figure out a pattern, so maybe it's related to the 1 sec timer? Can you confirm this on your end as well?


***
Edit2: Btw, I notice that you create a permanent dummy unit right from the start instead of when the spell is started (and then adding timed life). Is this more efficient or just preference?
 
Last edited:
Level 24
Joined
Feb 9, 2009
Messages
1,787
>Consistency bug with debuff stack
Issue was that the initial cast on any unit was that they did not have the debuff at the start of the cast, added a config option for a 2 second grace period before checking for the debuff, added to paste [Evasive Emu].

>perma dummy that is not perma
Only permanent dummy would be warpath and there is no expiration timer, is there another one?
 
Level 12
Joined
May 16, 2020
Messages
660
@Draco: You are right - this part will not be implementable.

@Devalut: Yeah I found this version. But due to the Mod comment "This needs a total overhaul" I'm not really sure if this version is good from a code perspective. Also, the spells do not exacty work like in Dota 2. For example, Charge of Darkness doesn't find a new target if the initial target dies or the special effect is not only visible to your team.
 
Level 12
Joined
May 16, 2020
Messages
660
Sorry for the late reply you two. I finally got the chance to test everything and check out the map you shared Deva.

@Athur12A2 : Thanks a lot for this collection! Invoker and Legion Commander are two I still missed and they are GUI indeed :)

@Devalut : This map from Marco_M is actually not bad from what I see. But it does have some bugs / features missing from here:

Spirit Breaker

If you could maybe help with Charge of Darkness and Greater Bash this would be great. The other 2 abilities I think I can do myself.

***
Here the details of my tests:

Charge of Darkness:
  • Greater Bash is used twice on targets that Spirit Breaker (SB) passes through (when he enters and exists their range)
  • Greater Bash is not used on the main target
  • This feature is missing: "If the targeted unit dies, Spirit Breaker will change his target to the nearest enemy unit to that location."
  • If I remember correctly, the transparency of the caster increases the longer SB charges
Bulldoze:
  • This is a new ability compared to Dota 1. I would just use the "movement speed bonus", not the "status resistance" bonus. The only challenge I see here is that casting "Bulldoze" shouldn't interrupt Charge of Darkness, but I think I can do this.
Greater Bash:
  • I don't think it's MUI
  • Does not have an internal Cooldown of 1.5 seconds

Nether Strike:
  • In my tests Nether Strike performed a Greater Bash even though Greater Bash wasn't leveled
  • The Greater Bash triggered from this ability doesn't have twice the usual range as it should have
  • Because Greater Bash's knockback happens instanly uppon reappearing next to the target, SB just walks away fromt he target after the cast, instead of keeping attacking his target - I guess this will just need an attack order at the very end.
 
Last edited:
Status
Not open for further replies.
Top