Announcement

Collapse

Forum Rules

  • No flaming or derogatory remarks, directly or through insinuation.
  • No discussion, sharing or referencing illegal software such as hacks, keygen, cracks and pirated software.
  • No offensive contents, including but not limited to, racism, gore or pornography.
  • No excessive spam/meme, i.e. copious one liners in a short period of time, typing with all caps or posting meme responses (text/image).
  • No trolling, including but not limited to, flame incitation, user provocation or false information distribution.
  • No link spamming or signature advertisements for content not specific to Dota 2.
  • No Dota 2 key requests, sell, trade etc.
  • You may not create multiple accounts for any purpose, including ban evasion, unless expressly permitted by a moderator.

  • Please search before posting. One thread per issue. Do not create another thread if there is an existing one already.
  • Before posting anything, make sure you check out all sticky threads (e.g., this). Do not create new threads about closed ones.
  • It is extremely important that you post in correct forum section.

  • Balance discussion only in Misc.
  • All art related (such as hero model) feedbacks go to Art Feedback Forum.
  • All matchmaking feedback should go here: Matchmaking Feedback
  • All report/low priority issues should go here: Commend/Report/Ban Feedback
  • No specific workshop item feedback. These should go to workshop page of that item.
  • When posting in non-bugs section (such as this), use [Bugs], [Discussion] or [Suggestion] prefix in your thread name.



In case you object some action by a moderator, please contact him directly through PM and explain your concerns politely. If you are still unable to resolve the issue, contact an administrator. Do not drag these issues in public.



All rules are meant to augment common sense, please use them when not conflicted with aforementioned policies.
See more
See less

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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [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, 06:42 AM.
    „Die Kinder von heute kennen kein Vaterunser, dafür aber Deinemudder.“

  • #2
    how do you get warcraft 3 to show all that stuff?

    Comment


    • #3
      latest test map
      „Die Kinder von heute kennen kein Vaterunser, dafür aber Deinemudder.“

      Comment


      • #4
        Yeah, it's a charm.

        Comment


        • #5
          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

          Comment


          • #6
            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

            Known Tooltips and UI information Issues List
            Unreleased heroes data:

            Hero Balance Compilation 6.48 onwards
            Items and Other Balance compilation 6.48 onwards
            Dota 1 6.81c Test Map

            Comment

            Working...
            X