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

Статус
В этой теме нельзя размещать новые ответы.

NewsBot

Свежие новости
Журналист

NewsBot

Свежие новости
Журналист
Статус
Offline
Регистрация
25 Окт 2021
Сообщения
30
Лайки
410
fe0bb9d256a1c7dbd1a6cfb46ecbf113e727ce4a.png
Представляем «Между линий» — новую серию записей в блоге от наших разработчиков. В ней они будут рассказывать о сложностях, ошибках и счастливых случайностях, с которыми мы сталкиваемся во время работы над такой уникальной игрой, как Dota 2.

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

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

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

a9856bd240416b0f2b76d6b1267007ce02b5da81.png


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

10b5e078953c549751005190ed0b684fd249d245.png


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

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

516403736122a6b2cf9ba970d8d378615282840b.png


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

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

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

4ef267ed3d08fa4792721623f7ab8303a0e4fecd.png

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

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

Drunkmare

Новорег

Drunkmare

Новорег
Статус
Offline
Регистрация
2 Авг 2021
Сообщения
65
Лайки
16
принято создавать что-то новое (не ломающее игру)
И далее описание как они добавляли что то новое ломающее игру, потом попытались это пофиксить и теперь ждут что же сломалось на сей раз :)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху