punk navsegda
Блог

Valve завела блог о багах Доты. Рассказали, как сломали Минера в 7.33

Давайте читать!

В ночь с 26 на 27 июля Valve опубликовала на своем сайте новость о создании блога, где разработчики будут рассказывать интересные истории о своей работе. Первый пост – о том, как сломался и исправился Минер в патче 7.33.

Между линий: как мы бомбу чинили

Представляем «Между линий» – новую серию записей в блоге от наших разработчиков. В ней они будут рассказывать о сложностях, ошибках и счастливых случайностях, с которыми мы сталкиваемся во время работы над такой уникальной игрой, как Dota 2.

Каждое обновление позволяет нам добавить в игру новых героев, предметы и способности – не говоря уж о том, чтобы подправить старых. Таким образом Дота не только эволюционирует, но и пополняется неисчисляемым множеством возможных взаимодействий. С одной стороны, благодаря этому игроки встречают что-то новое в каждой игре, но с другой – повышается вероятность того, что некоторые из наших изменений приведут к ошибке. Или двум. Или двадцати.

К счастью, наше сообщество постоянно изучает Доту и экспериментирует, быстро находя скрытые преимущества, новые стратегии и напрочь ломающие игру недочеты, которые застают врасплох даже нас.

Прекрасным примером последнего послужит ошибка с бомбами-липучками от способности Sticky Bomb у Techies. Предпосылки к ней появились еще в прошлогоднем обновлении, когда мы изменили способности героя и его стиль игры. Эти правки привели к тому, что при определенных условиях бомба-липучка существовала вечно, а создавший ее игрок мог ей управлять. Любопытно, что тогда в игре не существовало обстоятельств, при которых эта ошибка могла бы возникнуть – так что она оставалась незамеченной до весеннего обновления «Новые горизонты», в которых появились Парные порталы.

Внезапно у героя появилась возможность создавать управляемые бомбы-липучки, которые можно было перемещать по всей карте и обрушивать на врагов в неограниченном количестве. Это, мягко говоря, давало некоторое преимущество, и вскоре о проблеме вовсю трубили на нашем GitHub.

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

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

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

Тут мы и возвращаемся к бомбе-липучке: в мгновения, когда она находилась в воздухе после броска, игрок мог выбрать ее вместе с героем и нажать на Парный портал. Бомба тоже начинала телепортироваться и выходила из состояния броска раньше нужного, отчего прерывалась последовательность модификаторов и возникала ошибка.

Выяснив все это, мы пришли к довольно простому решению: игроку не нужно управлять бомбой-липучкой. Достаточно было снять с нее соответствующую пометку, чтобы последовательность не нарушалась и всегда заканчивалась взрывом.

Как и в случае со многими другими ошибками, 99% времени ушло на поиск причины, а после этого нужно было изменить лишь одну строчку кода – которая, вполне возможно, устраняла некую другую ошибку. Поэтому и говорят, что отлаживать код – это как пытаться раскрыть убийство, которое вы сами и совершили.

В общем, вот как ошибка с бомбами-липучками случайно появилась в игре, наделала шуму и исчезла благодаря тому, что сообщество рассказало нам о ней. «Что теперь?» – спросите вы. А теперь мы ждем, когда выяснится, что удаленная нами строчка кода отвечала за что-то еще. Если что-то заметите – ждем вас на GitHub.

* * *

Великая игра Снейкинга на Баратруме. В соло тащил против Гладиаторов

Кстати, можете подписаться на мой телеграм-канал! Особенно если вы любите мемы!

Свен
68%
Sven
Минер
32%
Techies
3 комментария
Возможно, ваш комментарий носит оскорбительный характер. Будьте вежливы к собеседнику и соблюдайте правила
Пишите корректно и дружелюбно. Принципы нашей модерации
Могу только порадоваться за сообщество Доты. Не то чтобы сам пост какой-то уникальный или крутой - но круто то, что такие материалы вообще появляются у Valve. Больше свободы, больше шуток, больше связи с разработчиками... Это хороший знак - если ты чувствуешь, что разработчики не просто мифические создания, которые что-то там крутят и игра работает, а узнаёшь как и по каким принципам они работают, видишь, что они рассказывают о себе и о том, когда и что они планируют ввести - это улучшает отношение к их игре и сообществу. Очень крутые шаги Valve делают в последнее время, что позволяет даже к ошибкам и багам относиться благосклоннее
+5
0
+5
Ну как. В простонародье это называется говнокодеры. "Взяли за основу что работает и чёт поменяли и это сломалось" - типичная ситуация человека без образования в айтисфере, который там что-то пытался наверстать при помощи скиллбоксов и т.п.(американских аналогов хз). Да, прикольно, нет таких заумных объяснений для синьоров иль медиумов, которые программы пишут действительно круто и очень редко когда всплывают критические ошибки. Как бы разрабы не так далеко от ЭндЮзеров отошли, а потому ещё могут что-то пояснить. Поэтому у этой медали две стороны
Ну хз, эти говнокодеры создали, поддерживают и сейчас вполне себе поднимают потихоньку заново игру, которой ( начиная с беты ) уже стукнуло 12 лет. Не WoW, конечно, но мало какие игры могут похвастаться стабильным онлайном, вниманием и доходом на такой дистанции. Один варкрафт и CS:GO по идее и могут. Может, там собрались не лучшие кодеры в мире ( лучшие, скорее всего, работают вообще в сфере бизнес-технологий либо же делают новые ААА игры ), но они добиваются сейчас хороших результатов, а это главное.
+1
0
+1
Укажите причину бана
  • Оскорбление
  • Мат
  • Спам
  • Расизм
  • Провокации
  • Угрозы
  • Систематический оффтоп
  • Мульти-аккаунтинг
  • Прочее
Пожаловаться
  • Спам
  • Оскорбления
  • Расизм
  • Мат
  • Угрозы
  • Прочее
  • Мультиаккаунтинг
  • Систематический оффтоп
  • Провокации
Комментарий отправлен, но без доната
При попытке оплаты произошла ошибка
  • Повторить попытку оплаты
  • Оставить комментарий без доната
  • Изменить комментарий
  • Удалить комментарий