Results 1 to 6 of 6

Thread: [Confirmed] Gyrocopter's Homing Missile deals too less damage

  1. #1
    Basic Member li.lo's Avatar
    Join Date
    Jul 2012
    Location
    Bavaria
    Posts
    1,002

    Red face [Confirmed] Gyrocopter's Homing Missile deals too less damage

    In Dota 2 Homing Missile has to travel more than in DotA 1 to deal the same damage.

    Reproduction: Cast Homing Missile from maximum cast range (~945 units between the missile and the target) and stand still with the target to prevent accidental movement.

    As the level 4 Missile strikes it deals ~197 damage
    In DotA 1 the Missile deals ~237 damage within the same distance traveled.

    Level
    1
    2
    3
    4
    Travel Distance to deal full damage
    DotA 1
    59
    118
    177
    237
    1365
    Dota 2
    48
    96
    147
    197
    1565






    there might be a slight difference with the Homing Missile impact distance. D1 46 units apart from the target. D2 34 units. Could be caused by low refreshing rate for the values within the test map.
    Last edited by li.lo; 06-24-2013 at 06:42 AM.
    „Die Kinder von heute kennen kein Vaterunser, dafür aber Deinemudder.“

  2. #2
    Basic Member doomsheep's Avatar
    Join Date
    Oct 2011
    Posts
    327
    how do you get warcraft 3 to show all that stuff?

  3. #3
    Basic Member li.lo's Avatar
    Join Date
    Jul 2012
    Location
    Bavaria
    Posts
    1,002
    latest test map
    „Die Kinder von heute kennen kein Vaterunser, dafür aber Deinemudder.“

  4. #4
    Basic Member shalafi's Avatar
    Join Date
    Nov 2011
    Posts
    659
    Yeah, it's a charm.

  5. #5
    Basic Member
    Join Date
    Dec 2011
    Posts
    11,187
    added to sticky.
    Make sure to read the Forum Rules as well as the stickied Threads of the Forum Section you are posting in.

    Contributions i'd like to highlight:
    My Suggestion: Coaching System
    My Sticky: Intended Changes List
    My Challenge: Completely Fixed Hero Challenge: Skywrath Mage

  6. #6
    Basic Member igo95862's Avatar
    Join Date
    Aug 2012
    Posts
    3,142
    In dota 1 distance from which damage is calculated is from gyro center.

    Spoiler: 

    This function runs after the casted missile
    function Func3869 takes nothing returns nothing
    local trigger loc_trigger01=CreateTrigger()
    local integer loc_integer01=GetHandleId(loc_trigger01)
    local unit loc_unit01=GetTriggerUnit()
    local unit loc_unit02=GetSpellTargetUnit()
    local real loc_real01=Func0168(GetUnitX(loc_unit01),GetUnitY( loc_unit01),GetUnitX(loc_unit02),GetUnitY(loc_unit 02))*bj_DEGTORAD
    local real loc_real02=Func0125(GetUnitX(loc_unit01)+150*Cos(l oc_real01))
    local real loc_real03=Func0128(GetUnitY(loc_unit01)+150*Sin(l oc_real01))
    local integer loc_integer02=GetUnitAbilityLevel(loc_unit01,'A1SQ ')
    local unit loc_unit03
    local integer loc_integer03
    local string loc_string01="effects\\Snipe Target.mdx"
    if IsPlayerAlly(GetLocalPlayer(),GetOwningPlayer(loc_ unit01))==false and Func0106(GetLocalPlayer())==false then
    set loc_string01=""
    endif
    if loc_integer02==1 then
    set loc_integer03='h0CG'
    elseif loc_integer02==2 then
    set loc_integer03='h0C1'
    elseif loc_integer02==3 then
    set loc_integer03='h0CF'
    elseif loc_integer02==4 then
    set loc_integer03='h0CH'
    endif
    set loc_unit03=CreateUnit(GetOwningPlayer(loc_unit01), loc_integer03,loc_real02,loc_real03,loc_real01*bj_ RADTODEG)
    call TriggerRegisterTimerEvent(loc_trigger01,0.02,true)
    call TriggerRegisterUnitEvent(loc_trigger01,loc_unit02, EVENT_UNIT_DEATH)
    call TriggerRegisterUnitEvent(loc_trigger01,loc_unit03, EVENT_UNIT_DEATH)
    call TriggerRegisterUnitEvent(loc_trigger01,loc_unit03, EVENT_UNIT_DAMAGED)
    call TriggerAddCondition(loc_trigger01,Condition(functi on Func3868))
    call SaveUnitHandle(hashtable001,(loc_integer01),(2),(l oc_unit01))
    call SaveUnitHandle(hashtable001,(loc_integer01),(17),( loc_unit02))
    call SaveUnitHandle(hashtable001,(loc_integer01),(45),( loc_unit03))
    call SaveReal(hashtable001,(loc_integer01),(6),((GetUni tX(loc_unit01))*1.0)) Here we write gyros X (he is loc_unit0.1)
    call SaveReal(hashtable001,(loc_integer01),(7),((GetUni tY(loc_unit01))*1.0)) and Y
    call SaveReal(hashtable001,(loc_integer01),(23),((GetUn itX(loc_unit03))*1.0))
    call SaveReal(hashtable001,(loc_integer01),(24),((GetUn itY(loc_unit03))*1.0))
    call SaveEffectHandle(hashtable001,(loc_integer01),(32) ,(AddSpecialEffectTarget(loc_string01,loc_unit02," overhead")))
    set loc_trigger01=null
    set loc_unit01=null
    set loc_unit03=null
    endfunction

    function Func3868 takes nothing returns boolean
    local trigger loc_trigger01=GetTriggeringTrigger()
    local integer loc_integer01=GetHandleId(loc_trigger01)
    local integer loc_integer02=GetTriggerEvalCount(loc_trigger01)
    local unit loc_unit01=(LoadUnitHandle(hashtable001,(loc_integ er01),(2)))
    local unit loc_unit02=(LoadUnitHandle(hashtable001,(loc_integ er01),(17)))
    local unit loc_unit03=(LoadUnitHandle(hashtable001,(loc_integ er01),(45)))
    local real loc_real01
    local real loc_real02
    local real loc_real03
    local real loc_real04
    local real loc_real05=(LoadReal(hashtable001,(loc_integer01), (23)))
    local real loc_real06=(LoadReal(hashtable001,(loc_integer01), (24)))
    local real loc_real07=Func0168(loc_real05,loc_real06,GetUnitX (loc_unit02),GetUnitY(loc_unit02))*bj_DEGTORAD
    local integer loc_integer03=GetUnitAbilityLevel(loc_unit01,'A1SQ ')
    if GetTriggerEventId()==EVENT_UNIT_DEATH then
    call UnitShareVision(loc_unit03,GetOwningPlayer(loc_uni t02),false)
    call DestroyEffect((LoadEffectHandle(hashtable001,(loc_ integer01),(32))))
    call FlushChildHashtable(hashtable001,(loc_integer01))
    call Func0035(loc_trigger01)
    if GetTriggerUnit()!=loc_unit03 then
    call KillUnit(loc_unit03)
    endif
    elseif GetTriggerEventId()==EVENT_UNIT_DAMAGED then
    call UnitRemoveBuffs(loc_unit03,true,true)
    elseif loc_integer02<3/0.02 then
    call SetUnitFacing(loc_unit03,loc_real07*bj_RADTODEG)
    else
    if loc_integer02==4/0.02 then
    call UnitShareVision(loc_unit03,GetOwningPlayer(loc_uni t02),true)
    endif
    call SetUnitFacing(loc_unit03,loc_real07*bj_RADTODEG)
    set loc_real01=loc_real05+(280+real370*loc_integer02*0 .02)*0.02*Cos(loc_real07)
    set loc_real02=loc_real06+(280+real370*loc_integer02*0 .02)*0.02*Sin(loc_real07)
    call SetUnitPosition(loc_unit03,loc_real01,loc_real02)
    call SaveReal(hashtable001,(loc_integer01),(23),((loc_r eal01)*1.0))
    call SaveReal(hashtable001,(loc_integer01),(24),((loc_r eal02)*1.0))
    if Func0148(loc_real01,loc_real02,GetUnitX(loc_unit02 ),GetUnitY(loc_unit02))<20 then If our missile center is 20 unit away from enemies center
    set loc_real03=RMinBJ(Func0148(loc_real01,loc_real02,( LoadReal(hashtable001,(loc_integer01),(6))),(LoadR eal(hashtable001,(loc_integer01),(7)))),1500) Here we use gyros coordinates that we written down in last function to calculate distance between it and rocket.
    set loc_real04=loc_real03/1500*(110*GetUnitAbilityLevel(loc_unit01,'A1SQ'))
    set loc_real04=RMaxBJ(loc_real04,50)
    call KillUnit(loc_unit03)
    call DestroyEffect((LoadEffectHandle(hashtable001,(loc_ integer01),(32))))
    call FlushChildHashtable(hashtable001,(loc_integer01))
    call Func0035(loc_trigger01)
    if Func0281(loc_unit02)==false or IsUnitVisible(loc_unit02,GetOwningPlayer(loc_unit0 1))==true then
    call Func0114(loc_unit01,loc_unit02,1,loc_real04)
    call Func0358(loc_unit01,loc_unit02,2+0.2*loc_integer03 )
    endif
    endif
    endif
    set loc_trigger01=null
    set loc_unit01=null
    set loc_unit02=null
    set loc_unit03=null
    return false
    endfunction

    As you can see damage formula at level 4 will be 50<440*(distance traveled<1500)/1500

    Distance error can be up to 20

    Firing rocket from 1000 range

    The damage is 216.5. Lets check if it does not contradict our formula. 216.5:0.75=288.7 | 288.7/440*1500=984.2 Which fits our distance error.



    In dota 2 however damage distance is calculated from initial missile position:

    Spoiler: 


    Axe and Gyro is 1000 distance away

    As you can see the damage is 177. Lets calculate the distance such damage should be dealt from: 177:0.75=236|236/440*1500=804

    The distance that rocket traveled from its initial position is 950-150=800 thus Homing missile calculates distance from rockets initial position


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •