Дальность атаки и кастов

Лич любит исправлять баги там где их нет. Cегодня мы разберёмся в одном из таких случаев и рассмотрим механику дальности применения заклинаний и атак.

В карте 6.88v8 появился баг с дальностью атаки вышек — они будто потеряли часть ренджа, при этом визуальный индикатор остался старым, кроме того милишники чтобы атаковать тавер стали подходить к нему вплотную. И причина этого в уменьшении коллижен сайза (collision size) вышек. Что это такое? Зачем это было изменено? Почему из-за изменения коллижена изменился рендж вышек? Давайте не будем останавливаться на частных вопросах, а углубимся в механику чтобы сразу ответить на все возможные вопросы.

Итак в доте (а следовательно в и варкрафте и доте2) у каждого юнита (постройки тоже юниты, хотя с особенностями) есть параметр отвечающий за то сколько места этот юнит занимает. Он называется коллижен сайз и благодаря ему возможен стопинг крипов и героев, это его, кстати, отключают Фэйз ботинки. Также коллижен сайз участвует в расчётах атак и кастов. Дело в том что любая атака в доте может начаться только когда между атакующим и целью расстояние не превышает атакрендж атакующего. Но расчёт производится не между центрами юнитов, а от края коллижена одного до края коллижена другого. Стоит сказать что большинство героев имеют коллижен сайз равный 24 (насколько мне известно в д2 этот параметр перекочевал из д1 без изменений, поэтому можете чекать), а у башен всегда был коллижен 144. Чтобы быть точным, речь идёт о радиусе а не о диаметре, т.е. значение коллижен сайза откладывается в одну сторону от цента юнита и уже от нового значения откладывается рендж атаки. Таким образом какой-нибудь герой-милишник (дальность атаки стандартная 150) с коллиженом 24 сможет начать атаку по другому герою с коллиженом 24 если между положениями (центрами) этих героев дистанция не превышающая 24+150+24=198 единиц. Аналогично рассчитываются сингл-юнит-таргет спелы, но не спелы целью для которых служит земля или аое-спелы, для них важен центр целевого юнита, т.е. для них формула будет следующей: коллижен_сайз_кастера + каст_рендж.

И хотя всё вышесказанное всегда работало одинаково в обоих дотах, но оказалось что в д2 когда-то произошли изменения и теперь бласт пугны и метеор хаммер бьют по вышкам даже если аое не задевает центр тавера, но задевает его коллижен. Когда это отличие было зарепорчено, Лич взялся восстановить баланс уменьшив коллижен вышек до 48, что в свою очередь привело к уменьшению их суммарного (коллижен + атак рендж) ренджа на 96. Баг ясен, и в v9 произошёл откат. Бласту пугны оказана особая честь быть пофикшеным специально чтобы бить вышку задевая только её коллижен. Стан свена и подобные скилы с аое прицеливанием, но бьющие по юнитам, также используют расчёт по краям коллиженов.

С багом мы разобрались, но не обсудили ещё один аспект атак и кастов. Что если цель движется по направлению от атакующего увеличивая расстояние между ними? Когда атаки не могут совершиться или когда милишники промахиваются? Как вы наверное знаете существуют анимации героев предваряющие непосредственно сами атаки, когда моделька героя машет руками, и в какой-то момент вылетают снаряд\происходит удар, этот момент назовём атакпоинт. Атакующий может начать махать руками когда расстояние между коллиженами его и цели не превосходит атакрендж. Если в это время цель продолжает удаляться и здесь появляется дополнительный параметр, который можно назвать моушен баффа рендж, то бишь по нашему буфферная дальность. Она равнятеся 250 и позволяет удачно доделать начатую атаку. Обратимся сразу к формуле чтобы было наглядно. Для примера берём двух милишников с коллиженами 24. Мы начали анимацию атаки когда цель в рендже 24+150+24=198 и сможем удачно ударить если в момент атакпоинта цель будет не дальше чем 24+150+250+24=448, иначе вылетит промах (как говорится «быстрые ноги п*зды не боятся»). В д2 насколько я понимаю вместо промаха просто прерывается атака. Всё тоже самое касается и сингл-юнит-таргет спелов, для граунд-таргет и аое спелов разумеется этого буффера нет.

Пара картинок чтобы разбавить текст.


Пояснение к картинкам.
На скринах мидовая т1 скоржей и Рики у границы атакренджа. Команда для отображения земли в таком виде -tr 1231. Это реальные границы атакренджа, т.е. для v8 я специально сделал исправление (уже после релиза, для себя).
Сторона самого маленького квадратика сетки равна 32. Если присмотреться видно что Рики занимает квадрат со стороной 64, собственно это показан не коллижен сайз а пафинг, и хотя это не совсем тоже самое, но для наглядности пойдёт. Все округления коллижена до пафинга идут до полной клетки. Пафинг тавера (тавер тут сделан прозрачным -tint 0 0 0 0) 6х6 клеток, но его коллижен на первом скрине всего 48+48, а если представлять клетками то получилось бы 4х4. На втором скрине уже исправленный\возвращенный коллижен и нормальный атакрендж.
Не знаю знали ли об этом вы, но я только теперь понял, что диаметр атакренджа вышек получается (144+700)*2 = 1688, а не 1400 как можно было подумать.

Материал для этого топика взят из этого поста. В д2 переняли эту механику без существенных изменений.

1 комментарий

avatar
Надеюсь что для таких скилов как бласт пугны будет сделано отдельное исправление

Я тоже надеюсь
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.