“ХОСТ ЛАГИ”, или почему герои плохо слушаются

Задержка в варкрафте – постоянная проблема для всех. Кто-то не может добить крипа, а кто-то не удержал сфа от поворота и промазал койлом. И вроде латенси стоит 25, и вроде канал в гигабит, и сервер в соседней квартире, а все равно – герой слушается позже, чем нужно. А в коннекте ли дело?

lagi_suka_2000

Есть в WC3 такая настройка – задержка реакции (Reaction Delay). Она присутствует с самой первой бета-версии и хранится в константах каждой карты. По умолчанию её значение – 0.25 с. Что это значит для игрока? Что ЛЮБОЙ приказ, отданный юниту, выполнится через 0-0.25 секунд. Т.е., грубо говоря, мгновенной реакции на приказ не будет практически никогда (шанс выпадения нуля при рандоме от 0 до 0.25 находится около него же). Накой же это надо?

net_speed_2000

Вспомним на секунду, что варкрафт – это не RPG, а RTS. Это стратегия, а не диабла. В ней участвует куча юнитов, подконтрольных игроку, и куча разных триггеров. Естественно, благодаря возможности выделять кучу юнитов и организовывать группы можно было собирать армии на два экрана. А когда сходились две такие армии, то.. Обрабатывать всё это счастье в 2000 году, когда разрабатывалась игра, было просто нечем. Интернет был 56 кбит, а лучшим домашним процессором только только стал Pentium 3 766 МГц. И Blizzard подумали – как же доделать игру, чтобы она не плавила процессор, при этом не урезая размеры армий?

В результате мозгового штурма появилась идея разбить события на некоторый промежуток времени, выполняя каждое из них с некоторой задержкой. Т.е. вместо того синхронного удара по зданию от 100 пехотинцев каждый удар запаздывает на долю секунды (0.001, 0.002, 0.0034, 0.0051 и т.п.). В результате процессор обрабатывает события последовательно и не перегружается расчетами, а игрок особой разницы не замечает. К тому же звуковое сопровождение становится просто великолепным!

Игра не тормозит, армии сражаются красиво и смачно, новый кулер покупать не нужно, все счастливы. А теперь вернемся к DotA.

Здесь задержка – абсолютное зло. Гигантских армий нет, проблем со звуком тоже. Однако константу не изменяли, и по-прежнему КАЖДЫЙ приказ, отданный игроком, запаздывает на x секунд. А прибавив скорость интернета, удаленность сервера и встроенную задержку (Battle.net – 250ms, LAN – 100 ms, iCCup – по -latency) мы вполне можем ожидать исполнения отданного приказа 0.5 секунды. За это время СФ может развернуться назад и потерять нужный угол. А крип – умереть от руки более удачливого противника, которому рандом выдал меньшую задержку.

В общем и целом – не всегда вина хоста, что ты не успел развернуться и ударить, хотя явно должен был успеть. Это вина варкрафта и фрога в частности, ленящегося установить эту бесполезную для карты константу на 0.

Кстати, случаи, когда Juggernaut не может ударить врага ни разу за свой ульт, или когда Xin не бьет некоторых юнитов, стоящих в AoE Sleight of Fist, тоже происходят из-за этой константы. Задержка реакции просто не позволяет успеть сделать атаку за отведенное время.

Leave a comment