Valve выпустили блог о том, как они чинили Sticky Bomb у Techies

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

Напомним, что с помощью бага с Порталами игрок на Techies мог создавать вечные бомбы, которыми можно было управлять. Само собой, это создавало дизбаланс на карте, а в некоторых случаях приводило к просадке FPS.

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

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

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