Page 1 of 4 123 ... LastLast
Results 1 to 10 of 40

Thread: [Fixed?]Siege creeps not gaining additional attack damage when megacreeps spawn

  1. #1
    Basic Member
    Join Date
    Apr 2012

    [Fixed?]Siege creeps not gaining additional attack damage when megacreeps spawn

    Siege creeps in Dota 2 don't upgrade when the respective ranged barracks is destroyed.

    Repro in Dota 2:
    1. Kill off the ranged barracks of a lane.
    3. Wait until a siege creep spawns on that lane (at minute 3:00, 6:30, 10:00; 13:30 etc)
    4. Look at the siege creep attack damage.

    The siege creep has 40 attack damage.

    The siege creep should have around ~56 (51-62) attack damage.

    DotA Siege Creep with ranged barracks down.jpg
    Dota 2 Siege Creep with ranged barracks down.jpg

    Megacreeps are just not the same in Dota 2 as they were in DotA. Also, is there any information on this?
    Last edited by Mercer; 04-30-2013 at 03:57 PM.

  2. #2
    Volunteer Moderator DLRevan's Avatar
    Join Date
    Nov 2011
    If im not wrong the stronger (mega) siege creep is supposed to spawn once the respective lane rax is down. You do not need to destroy all barracks.

    Either way, a bug. Added to sticky.

    Concerning the other thread, its almost certainly an intended change.
    Always read and follow the forum rules. If you need help from a moderator, use the report button ()
    Before posting new bugs:
    -Check the Known Bugs List and search the forum for an existing report.
    -Make sure its a bug (test in WC3 Dota, visit playdota guides and adv. mech, etc). If you're still not sure, post in Mechanics and Gameplay Bug Brainstorming instead.
    -Read the Bug Posting Guidelines on how to report a bug properly.

  3. #3
    Volunteer Moderator
    Join Date
    Mar 2012
    ^yeah it's when the ranged rax is down. Apparently the -ss command in the test map doesn't reflect this though - so probably should be careful if testing this.

  4. #4
    Basic Member
    Join Date
    Apr 2012
    Well, in DotA, they only spawn when all the rax are down, no idea why.

  5. #5
    Volunteer Moderator
    Join Date
    Mar 2012
    ^I tested and found different... I found that it was the same as the ranged rax, as I just said before :/ I don't have access to my PC to make a video...

  6. #6
    Basic Member ThoAppelsin's Avatar
    Join Date
    Jan 2012
    There aren't even any units specified as Good/Bad Siege UPGRADED (npc_dota_goodguys_siege_upgraded or npc_dota_badguys_siege_upgraded) in the npc_units.txt file...

  7. #7
    Basic Member
    Join Date
    Apr 2012
    Ok, I may have to rewrite the behavior in DotA, as I have actually no idea how it really works.
    I ran some tests again, but they confused me even more.

    Can anyone tell me why the the mid siege creep is upgraded while the top one isn't? (First part of the Video where top and mid ranged rax are down)

  8. #8
    Basic Member
    Join Date
    Apr 2012
    I think I just found a bug in DotA.

    Apparently, when you kill off the scourge bottom ranged barracks, it upgrades both the bot and top siege creeps:
    Top barracks down, top siege creep.jpg
    Mid ranged barracks down, mid siege creep.jpg
    Bot ranged barracks down, bot siege creep.jpg
    Bot ranged barracks down, top siege creep.jpg

    This means that siege creeps should upgrade once the respective ranged barracks is down, and not as I stated first, when mega creeps (all barracks down) spawn.

    Editing the first post.
    Last edited by Mercer; 03-29-2013 at 08:33 AM.

  9. #9
    Basic Member ThoAppelsin's Avatar
    Join Date
    Jan 2012
    Congratz Mercer you have found a DotA bug :D
    Here is the function that is responsible for siege unit creation:

    001  function Func0891 takes nothing returns nothing
    002    local boolean loc_boolean01=ModuloInteger(GetTriggerExecCount(trigger007),7)==0
    003    if boolean093 then
    004      return
    005    endif
    006    call Func0887(false)
    007    if loc_boolean01 then
    008      call Func0886()
    009    endif
    010    if GetTriggerExecCount(trigger007)==1 and boolean119==false then
    011      call UnitResetCooldown(units006[1])
    012      call UnitResetCooldown(units006[2])
    013      call UnitResetCooldown(units006[3])
    014      call UnitResetCooldown(units006[4])
    015      call UnitResetCooldown(units006[5])
    016      call UnitResetCooldown(units006[7])
    017      call UnitResetCooldown(units006[8])
    018      call UnitResetCooldown(units006[9])
    019      call UnitResetCooldown(units006[10])
    020      call UnitResetCooldown(units006[11])
    021      call Func0256(unit142,false)
    022      call Func0256(unit143,false)
    023      call Func0256(unit144,false)
    024      call Func0256(unit186,false)
    025      call Func0256(unit187,false)
    026      call Func0256(unit188,false)
    027    elseif GetTriggerExecCount(trigger007)==1 and boolean119==true then
    028      call Func0256(unit143,false)
    029      call Func0256(unit187,false)
    030    endif
    031    if GetTriggerExecCount(trigger007)==1 then
    032      call EnableTrigger(trigger053)
    033    endif
    034    if boolean119==false and boolean124==false then
    035      if(boolean014)then
    036        call CreateNUnitsAtLoc(integer004,'ugho',players004[0],location007,bj_UNIT_FACING)
    037      else
    038        call CreateNUnitsAtLoc(integer004,'u001',players004[0],location007,bj_UNIT_FACING)
    039      endif
    040      call Func0890(bj_lastCreatedGroup,2)
    041    endif
    042    if boolean123==false then
    043      if(boolean015)then
    044        call CreateNUnitsAtLoc(integer004,'ugho',players004[0],location006,bj_UNIT_FACING)
    045      else
    046        call CreateNUnitsAtLoc(integer004,'u001',players004[0],location006,bj_UNIT_FACING)
    047      endif
    048      call Func0890(bj_lastCreatedGroup,3)
    049    endif
    050    if boolean119==false and boolean121==false then
    051      if(boolean016)then
    052        call CreateNUnitsAtLoc(integer004,'ugho',players004[0],location008,bj_UNIT_FACING)
    053      else
    054        call CreateNUnitsAtLoc(integer004,'u001',players004[0],location008,bj_UNIT_FACING)
    055      endif
    056      call Func0890(bj_lastCreatedGroup,4)
    057    endif
    058    if boolean119==false and boolean124==false then
    059      if(boolean011)then
    060        call CreateNUnitsAtLoc(integer005,'unec',players004[0],location011,bj_UNIT_FACING)
    061      else
    062        call CreateNUnitsAtLoc(integer005,'u002',players004[0],location011,bj_UNIT_FACING)
    063      endif
    064      call Func0890(bj_lastCreatedGroup,2)
    065    endif
    066    if boolean123==false then
    067      if(boolean012)then
    068        call CreateNUnitsAtLoc(integer005,'unec',players004[0],location009,bj_UNIT_FACING)
    069      else
    070        call CreateNUnitsAtLoc(integer005,'u002',players004[0],location009,bj_UNIT_FACING)
    071      endif
    072      call Func0890(bj_lastCreatedGroup,3)
    073    endif
    074    if boolean119==false and boolean121==false then
    075      if(boolean013)then
    076        call CreateNUnitsAtLoc(integer005,'unec',players004[0],location010,bj_UNIT_FACING)
    077      else
    078        call CreateNUnitsAtLoc(integer005,'u002',players004[0],location010,bj_UNIT_FACING)
    079      endif
    080      call Func0890(bj_lastCreatedGroup,4)
    081    endif
    082    if loc_boolean01==true then
    083      if boolean119==false and boolean124==false then
    084        if(boolean011)then
    085          call CreateNUnitsAtLoc(integer005,'umtw',players004[0],location011,bj_UNIT_FACING)
    086        else
    087          call CreateNUnitsAtLoc(integer005,'u00R',players004[0],location011,bj_UNIT_FACING)
    088        endif
    089        call Func0890(bj_lastCreatedGroup,2)
    090      endif
    091      if boolean123==false then
    092        if(boolean012)then
    093          call CreateNUnitsAtLoc(integer005,'umtw',players004[0],location009,bj_UNIT_FACING)
    094        else
    095          call CreateNUnitsAtLoc(integer005,'u00R',players004[0],location009,bj_UNIT_FACING)
    096        endif
    097        call Func0890(bj_lastCreatedGroup,3)
    098      endif
    099      if boolean119==false and boolean121==false then
    100        if(boolean013)then
    101          call CreateNUnitsAtLoc(integer005,'umtw',players004[0],location010,bj_UNIT_FACING)
    102        else
    103          call CreateNUnitsAtLoc(integer005,'u00R',players004[0],location010,bj_UNIT_FACING)
    104        endif
    105        call Func0890(bj_lastCreatedGroup,4)
    106      endif
    107    endif
    108    if boolean119==false and boolean124==false then
    109      if(boolean020)then
    110        call CreateNUnitsAtLoc(integer004,'esen',players003[0],location014,bj_UNIT_FACING)
    111      else
    112        call CreateNUnitsAtLoc(integer004,'e00V',players003[0],location014,bj_UNIT_FACING)
    113      endif
    114      call Func0890(bj_lastCreatedGroup,2)
    115    endif
    116    if boolean123==false then
    117      if(boolean021)then
    118        call CreateNUnitsAtLoc(integer004,'esen',players003[0],location012,bj_UNIT_FACING)
    119      else
    120        call CreateNUnitsAtLoc(integer004,'e00V',players003[0],location012,bj_UNIT_FACING)
    121      endif
    122      call Func0890(bj_lastCreatedGroup,3)
    123    endif
    124    if boolean119==false and boolean121==false then
    125      if(boolean022)then
    126        call CreateNUnitsAtLoc(integer004,'esen',players003[0],location013,bj_UNIT_FACING)
    127      else
    128        call CreateNUnitsAtLoc(integer004,'e00V',players003[0],location013,bj_UNIT_FACING)
    129      endif
    130      call Func0890(bj_lastCreatedGroup,4)
    131    endif
    132    if boolean119==false and boolean124==false then
    133      if(boolean017)then
    134        call CreateNUnitsAtLoc(integer005,'edry',players003[0],location017,bj_UNIT_FACING)
    135      else
    136        call CreateNUnitsAtLoc(integer005,'e00W',players003[0],location017,bj_UNIT_FACING)
    137      endif
    138      call Func0890(bj_lastCreatedGroup,2)
    139    endif
    140    if boolean123==false then
    141      if(boolean018)then
    142        call CreateNUnitsAtLoc(integer005,'edry',players003[0],location015,bj_UNIT_FACING)
    143      else
    144        call CreateNUnitsAtLoc(integer005,'e00W',players003[0],location015,bj_UNIT_FACING)
    145      endif
    146      call Func0890(bj_lastCreatedGroup,3)
    147    endif
    148    if boolean119==false and boolean121==false then
    149      if(boolean019)then
    150        call CreateNUnitsAtLoc(integer005,'edry',players003[0],location016,bj_UNIT_FACING)
    151      else
    152        call CreateNUnitsAtLoc(integer005,'e00W',players003[0],location016,bj_UNIT_FACING)
    153      endif
    154      call Func0890(bj_lastCreatedGroup,4)
    155    endif
    156    if loc_boolean01==true then
    157      if boolean119==false and boolean124==false then
    158        if(boolean019)then
    159          call CreateNUnitsAtLoc(integer005,'ebal',players003[0],location017,bj_UNIT_FACING)
    160        else
    161          call CreateNUnitsAtLoc(integer005,'e026',players003[0],location017,bj_UNIT_FACING)
    162        endif
    163        call Func0890(bj_lastCreatedGroup,2)
    165      if boolean123==false then
    166        if(boolean018)then
    167          call CreateNUnitsAtLoc(integer005,'ebal',players003[0],location015,bj_UNIT_FACING)
    168        else
    169          call CreateNUnitsAtLoc(integer005,'e026',players003[0],location015,bj_UNIT_FACING)
    170        endif
    171        call Func0890(bj_lastCreatedGroup,3)
    172      endif
    173      if boolean119==false and boolean121==false then
    174        if(boolean019)then
    175          call CreateNUnitsAtLoc(integer005,'ebal',players003[0],location016,bj_UNIT_FACING)
    176        else
    177          call CreateNUnitsAtLoc(integer005,'e026',players003[0],location016,bj_UNIT_FACING)
    178        endif
    179        call Func0890(bj_lastCreatedGroup,4)
    180      endif
    181    endif
    182  endfunction

    Focus on the lines beginning with #156, close to its end:
    loc_boolean01 is defined at the top of this function, which basically becomes true every 7th call -- making siege units get created on every 7th spawn
    ~ boolean119 is set true when -om (only middle) is enabled
    ~ boolean124 is set true when -nt (no top) is enabled
    ~ boolean123 is set true when -nm (no mid) is enabled

    now, the important part comes:
    - boolean019 is set false when the Temple of the Damned on the bottom lane is killed
    - boolean018 is set false when the Temple of the Damned on the middle lane is killed
    - boolean017 (which unfortunately is not available in this function) is set to false when the Temple of the Damned on the top lane is killed

    ~ Lines between 157 and 163 are responsible for the top lane Sentinel Glaive Thrower creation
    ~ Lines between 165 and 172 are responsible for the middle lane
    ~ Lines between 173 and 180 are for the bottom lane

    ebal is the regular Glaive Thrower
    e026 is the upgraded Glaive Thrower

    As you may see, for the top lane siege unit creation, incorrectly boolean019 is checked instead of the boolean017
    So, if you, for example, just take down the bottom lane ranged rax, the top lane siege units should be upgraded even if not even a single tower has been taken from that lane

    Of course, this is a DotA bug.
    Nice find :D
    I recommend you to e-mail about this to IceFrog. Or maybe pm when he is online here...
    Or you also may post it as a bug report in playdota there:

    Meh, took me so long to write all this... it was around x:20 as I began

  10. #10
    Basic Member
    Join Date
    Apr 2012
    Very nice, reported this to playdota and directed to this thread.

    Hopefully also raising awareness for this topic to get this fixed.

    Can a mod also change the thread title from
    [Confirmed]Siege creeps not gaining additional attack damage when megacreeps spawn
    [Confirmed]Siege creep not upgrading to mega form when barracks are down
    Last edited by Mercer; 03-29-2013 at 09:13 AM.

Posting Permissions

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