Манипуляции с уроном

Помимо взаимодействия урона с хардкодными (встроенными в игру) механизмами вроде сопротивления к магии и брони, есть и манипуляции, осуществляемые с конкретными способностями и при помощи кода. В нашем случае будем вскрывать доту (ничего нового).


Регуляторы урона

Регуляторы урона бывают стандартные (хардкодные) и триггерные.
В случае хардкодных используются способности, имеющиеся в самом варкрафте. Как любой натуральный продукт, они не имеют побочных эффектов.
Триггерные — способности, эффект которых обеспечен триггерами. Они имеют самые разные побочные эффекты, о которых будет написано ниже.

Увеличители урона

Увеличивают урон на некоторую величину или процент

Источники:
Хардкодные:
 Slardar Sprint: +10% урона по герою;

 Mask of Madness: +30% урона по герою;

Триггерные
 Bloodseeker Bloodrage: +25/30/35/40% чистого урона по носителю бафа и от него по всем остальным;

 Chen Penitence: +14/18/22/26% физического урона по цели;

 Oracle Fate Edict: +50% чистого урона по цели;

 Shadow Demon Soul Catcher: +20/30/40/50% чистого урона по цели;

 Medusa Stone Gaze: +30/40/50% Divine урона по «каменным» целям, в моей карте изменено (см. ниже);

 Undying Flesh Golem: +1-20/25/30% Divine урона (до 25/30/35% с аганимом) по врагам, в зависимости от расстояния от героя;

 OrchidSoul Burn: +30% маг. урона от полученного за время действия урона в конце действия заклинания. Это не совсем увеличитель урона, но внешне немного похож.

Детальный обзор
Так уж повелось, что в варкрафте разработчики оставили лишь одну способность на увеличение любого входящего в юнита урона — это Berserk. К сожалению, он, как и многие другие заклинания, спроектирован без расчета на несколько эффектов. На юните одновременно может висеть только один берсерк. Подобное я уже разбирал в Acid Bomb'ах. По этой причине MoM на  слардаре — довольно сомнительная штука.

Хардкорные увеличители на основе Berserk увеличивают урон еще до того, как он попадет на триггерный этап. Т.е. из 100 урона мом делает 130 и наносит их юниту. На этапе «юнит получает урон» кодер работает с числом 130, а не 100.

Триггерные увеличители не могут влиять на значение урона, который был получен юнитом. Если юнит получает 100 урона, нет возможности настроить это число иначе — он получит строго 100, и ничто этого не изменит. Фактически, все возможные снижения и увеличения урона уже прошли. Поэтому триггерный урон — это всегда дополнительный инстанс (отдельное событие) урона.

Прибавьте сюда, что варкрафт не дает никакой возможности узнать, что за тип урона был нанесен юниту (доступны только пострадавший, автор урона и значение урона), и вы поймете, что доп. урон будет наноситься как угодно, но только не тем же типом урона. Нужно приложить некоторые усилия, чтобы научить карту узнавать тип урона. Что же мы имеем сейчас? (да-да, в моей карте эти процессы всё еще на тех же рельсах, не изменены).

Пусть юнит под  Bloodrage последнего уровня (+40%) получает 100 магического урона. Код высчитывает 40 бонусного урона и наносит его в виде чистого урона. Если юнит под  Bloodrage получает 100 физического урона, ему всё равно наносится 40 чистого — никто не знает, что это физический урон.

Легко заметить, что триггерные увеличители неприятно сказываются на способностях, чувствительных к количеству инстансов. Например, корни  дерева или  Refraction  Templar Assassin. Об этом чуть больше сказано в следующей части.

 Stone Gaze в моей дотке работает чутка правильнее. Оно увеличивает только физический урон по юнитам, либо НЕ магический урон. Если в доте от фрога чистый/divine урон может пробить 100% маг. резиста, выданного окаменевшим целям, и увеличиться из-за этого, то в моей такого не произойдет.

Стак увеличений
Берсерки не складываются, поэтому между ними стака нет.
Триггерные имеют лишь одно ограничение — они не могут сработать на инстанс урона от самого себя. Что это значит?

На юните висит старый  Penitence (+32% урона) и  Soul Catcher (+50% урона). Пусть у юнита 0 брони, чтобы  Penitence наносил полный урон. В юнита вливают 210 чистого урона:



Снизу вверх:
  1. приходит урон (еще не нанесён);
  2. реагирует  Catcher и наносит 50% от него;
  3.  Penitence реагирует на урон от  Catcher и наносит 32% от него;
  4. т.к.  Catcher только что сработал, урон от  Penitence он уже не обрабатывает, и ход снова переходит  Penitence;
  5.  Penitence наносит 32% от входящего урона, как и должен;
  6.  Catcher освободился, увидел урон от  Penitence и добавил 50% от него;
  7. Т.к.  Penitence только что сработал, он не может перехватить урон  Catcher, и спит дальше.
  8. Наносится, наконец-то, реальный урон.

В табличке указаны события в порядке «юнит получает урон». Это не завершенное событие, поэтому 210 стоят в самом низу (первыми) — хотя на самом деле этот урон будет получен в самом конце. В чем тонкость? Доп. урон может убить юнита еще до того, как юнит получит основной урон.

В данном случае юнит получил 214% урона. Это результат сложения:
100 + 100*0.5 + 100*0.32 + 100*0.32*0.5 + 100*0.5*0.32;

где 0.32 — множитель  Penitence, 0.5 — множитель  Catcher. Каждый модификатор цепляет остальные, поэтому эффект множится.
Если бы на юните еще лежал  Bloodrage +40%, то было бы так:
100 + 100*0.5 + 100*0.32 + 100*0.4 + (100*0.32*0.5 + 100*0.32*0.4 + 100*0.4*0.5)*2 (3?);

Я слаб в вышмате и могу назвать эту зависимость только словом clusterfuck.

В DotA2 с последних патчей урон наносится того же типа, что и урон, который получает юнит, плюс он входит в само значение урона и не создает отдельного инстанса. Все увеличители урона в D2 складываются просто умножением: под  Catcher и  Penitence юнит получает
100 + 100*0.5 + 100*0.32 = 182% урона.


Снижение урона

Снижение урона тоже бывает триггерное и хардкодное.

Хардкодное — это Mana Shield, Damage Block, Барьер.

  • Mana Shield — снижает любой входящий урон ценой маны.
  • Damage Block — снижает только физический урон от уязвимых юнитов. Физ урон от неуязвимых юнитов не снижается. На этой особенности основан Smashing-урон, который не блокируется.
  • Барьер — снижает магический тип урона на определенную сумму.

Во всех случаях урон режется напрямую, еще на этапе подсчета урона. За исключением мана щита, который по умолчанию блокирует 50% урона в доте, Damage Block и барьер могут свести урон к нулю, т.е. даже события «юнит получил урон» может не быть, если весь урон был поглощен.

Триггерные
Любые операции со снижением урона в триггерном виде представлены как лечение на некоторое значение. Разница только в том, как лечение реализовано.

Пре-хил
Здоровье пополняется до получения урона. Это значит, что пре-хил сработает плохо или не сработает вообще, если у юнит почти полные или полные ХП. Он просто попытается отхилить, а хилиться некуда — и урон пройдет как надо.

Умный хил
Лечит юнита в зависимости от ситуации. На фулхп выжидает, пока будет нанесен, собственно, урон, и уже потом хилит. На низких хп хилит сразу. Если урон превышает максимально возможный хил (у юнита нет 50 хп, в него входит 100 урона), сперва отхилит на фулхп, потом подождет урона и отхилит то, что осталось от урона.

Частичные хилы

 Abaddon Borrowed Time + Aghanim
Во время действия ульта снижает урон по союзникам в радиусе действия на 35%, перенаправляя его на Abaddon. Используется умный хил.

 Bristleback Bristleback
Отлечивает долю урона в зависимости от угла между источником урона и целью. Используется пре-хил.

 Centaur Warrunner Stampede + Aghanim
Отлечивает 60% урона, получаемого героями под эффектом Stampede. В доте от фрога еще не существует, в моей — используется умный хил.

 Io Overcharge
Отлечивает долю урона, получаемого героями под эффектом Overcharge (висп + связанный с ним). Используется умный хил.

 Kunkka Ghostship
Отлечивает долю урона, получаемого героями под эффектом Coco's Rum. Используется умный хил.

 Nerubian Assassin Burrow
Отлечивает долю урона, получаемого закопанным героем. В доте от фрога еще не существует, в моей — используется умный хил.

 Silver EdgeShadow Walk
Отлечивает часть урона, который наносит герой под дебафом Silver Edge. В доте от фрога еще не существует, в моей — используется умный хил.

 Spectre Dispersion
Отлечивает часть урона, получаемого Spectre. Используется умный хил.

 Treant Protector Living Armor
Отлечивает часть урона, получаемого целью. Используется умный хил. Урон ниже 5 за инстанс не блокируется. Использует инстансы урона.

 Ursa Enrage
Отлечивает часть урона, получаемого Ursa. В доте от фрога еще не существует, в моей — используется умный хил.

 Winter Wyvern Winter's Curse
Отлечивает часть урона, получаемого героями под эффектом проклятья. В доте от фрога еще не существует, в моей — используется умный хил.

Фул хилы

 Abaddon —  Aphotic Shield
Отлечивает урон, получаемый целью. Используется умный хил.

 Abaddon Borrowed Time
Отлечивает урон, получаемый целью, в двухкратном размере. Используется умный хил.

 Dazzle Shallow Grave
Если входящий урон превышает количество хп+1, то выдает урон+1 здоровья и запоминает бонус. После нанесения урона возвращает прежнее число хп. Бонус нужен, чтобы обрабатывать события вроде увеличения урона, когда инстансы идут друг за другом, и можно просто перехилить юнита.

 Faceless Void Backtrack
Отлечивает урон, получаемый Void. Используется пре-хил.

 Nerubian Assassin Spiked Carapace
Отлечивает урон, получаемый Нерубом. Используется умный хил.

 Oracle False Promise
Отлечивает урон, получаемый целью. Используется умный хил.

 Templar Assassin Refraction
Отлечивает урон, получаемый целью. Используется умный хил. Урон ниже 5 за инстанс не блокируется. Использует инстансы урона.

Снижение урона в D2 происходит на более высоком уровне, исправляя сам урон, а не выхиливая юнитов. При этом все снижения не могут превысить 100%.

В D2 урон, заблокированный  Spiked Carapace или  Refraction, не засчитывается как урон, не сбивая даггер или тараску. В моей карте такое реализовано для  Refraction. У фрога оно реализовано тоже только для  Refraction (слизал).

Очевидно, что триггерный хил обрабатывает урон инстансами. Когда приходит доп. урон от триггерного увеличения урона, он обрабатывается отдельно. Т.е. войд может отклонить увеличение урона от Soul Catcher, но получить ульт лины, который должен был быть увеличен.

Триггерный хил может складываться и превышать 100% в DotA1. Например,  Templar Assassin под  Refraction и  Aphotic Shield будет лечиться. Это некорректное поведение, но его тяжело исправить.

Дополнительный инстанс создает проблемы для героев вроде  Templar Assassin. Грубо говоря, её заряды щита расходуются лишний раз на блок доп. урона. В D2 подобной проблемы нет. В моей карте любой урон, который  Templar получит в ходе одного инстанса, будет засчитан как один удар и снимет один заряд щита. В качестве примера — если  Undying бросит  Soul Rip на вражескую  TA, то щит сломается практически мгновенно — до 84 каждый источник был отдельным событием урона или хила.

8 комментариев

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