Valve объявила о запуске новой серии записей Between the Lanes («Между линий») в блоге Dota 2. В ней разработчики будут рассказывать «о сложностях, ошибках и счастливых случайностях», с которыми приходилось сталкиваться во время работы над игрой.
В качестве первого примера они привели баг со способностью Sticky Bomb у Techies, который обнаружили после выхода обновления «Новые горизонты». Из-за него бомба-липучка существовала вечно, а создавший её игрок мог ей управлять.
Сотрудники Valve рассказали, как исправили ошибку. Вся проблема заключалась всего лишь в одной строчке кода.
В программировании игр в целом, и особенно в «Доте», принято создавать что-то новое (не ломающее игру), взяв за основу что-то похожее (то, что работает и не ломает игру) и постепенно внося изменения. Прообразом бомб-липучек послужили классические мины от способности Remote Mines, которые использовали тот же базовый тип призываемого существа под названием npc_dota_techies_remote_mine.
Бомбы используют последовательность из броска, погони и отсчёта до взрыва, которая управляется набором серверных модификаторов (проще говоря, эффектов), регулирующих передвижение и поведение существа на каждом этапе. Запрет на управление игроками встроен в модификаторы погони и отсчёта, а эффект броска блокировал многие команды игрока, поскольку управлял движением. Всё это дополняли характеристики самого типа npc_dota_techies_remote_mine — в частности то, что код игры запрещает такому существу атаковать.
С другой стороны, герой мог взорвать мину вручную с помощью её собственной способности, поэтому у мины была возможность применять способности, а это означало, что в коде игры она считалась принадлежащей игроку (чтобы ему засчитывалось убийство) и управляемой им. Нажатие правой кнопкой мыши на Парные порталы (или на любой другой постепенно активируемый объект на карте) превращает команду атаки в применение способности на цель (используя Парный портал, вы как бы применяете на него способность). Другими объектами на карте могут пользоваться только герои, но Парные порталы доступны и другим существам, ведь через них ходит Рошан.
Тут мы и возвращаемся к бомбе-липучке: в мгновения, когда она находилась в воздухе после броска, игрок мог выбрать её вместе с героем и нажать на Парный портал. Бомба тоже начинала телепортироваться и выходила из состояния броска раньше нужного, отчего прерывалась последовательность модификаторов и возникала ошибка.
Выяснив всё это, мы пришли к довольно простому решению: игроку не нужно управлять бомбой-липучкой. Достаточно было снять с неё соответствующую пометку, чтобы последовательность не нарушалась и всегда заканчивалась взрывом.
Как и в случае со многими другими ошибками, 99% времени ушло на поиск причины, а после этого нужно было изменить лишь одну строчку кода — которая, вполне возможно, устраняла некую другую ошибку. Поэтому и говорят, что отлаживать код — это как пытаться раскрыть убийство, которое вы сами и совершили.Valve
Лишняя строчка кода. Источник: Valve
1 Comment
Ну весело хотя бы с багами👍