Как стать автором
Обновить

Серьёзный баг со снайперской стрельбой в Team Fortress 2 исправили спустя десять лет

Время на прочтение 3 мин
Количество просмотров 31K
При переключении между разными классами персонажей параметры представления персонажа некорректно обновляются. Более того, после переключения в режим зрителя и обратно начинается рассинхрон между параметрами представления и анимации.

В наши дни популярные игры обновляются постоянно. Всего пару месяцев не запускал лицензионную игрушку — и ты её уже не запустишь, потому что она сразу начинает обновляться.

Обновления игры обычно исправляют найденные баги. В играх класса ААА исправление глюков не занимает много времени. Хотя бывают исключения. На поиск и исправление бага в популярной игре Team Fortress 2 понадобилось почти десять лет! В течение этих лет игроки жаловались на глюки снайперской стрельбы — никто не знал, почему они происходят.

Суть бага изложена в сообщении пользователя Reddit под ником sigsegv__. По его словам, этот «гигантский» баг обнаружен одним из программистов Nicknine из группы разработки TF2 Classic. Затем сам sigsegv__ сообщил о находке в компанию Valve, который включила исправление в апдейт от 14 февраля 2017 года.

Баг проявляется при смене класса персонажа. После этого его параметры представления могут серьёзно искажаться, не совпадая с анимационным представлением персонажа на сервере. Конкретно, в некоторых случаях меняются местами параметры представления move_x и move_y.

Такое несовпадение хорошо показано на демонстрационных видео, которые подготовил Nicknine в январе 2017 года для демонстрации бага.

Демонстрация на локальном (listen) сервере

Демонстрация на выделенном сервере

При смене класса персонажа, например, при переходе с солдата на разведчика, пулемётчика или снайпера, его параметры представления некорректно обновляются на сервере. То есть сервер воспринимает параметры представления старого скелетона, хотя анимация отображается уже для нового персонажа.

Хотя анимация не соответствует параметрам представления, поначалу она нормально синхронизирована с ним. Но после перехода в режим зрителя и обратно происходит рассинхрон. В этом случае анимация двигается отдельно от скелетона.

Фактически, ваш или любой другой персонаж фактически может иметь другую форму и находиться в другом месте — не там, где он отображается на экране.

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

Этот баг присутствовал в игре с момента её выхода в октябре 2007 года, то есть больше девяти лет! Если считать время разработки и тестирования игры перед официальным релизом, то багу наверняка больше десяти лет.

В комментариях к видео с демонстрацией бага на YouTube опубликовано более детальное объяснение, когда он проявляется. Если верить этому объяснению, для повторения бага нужно присоединиться к серверу и в качестве первого персонажа выбрать разведчика, пулемётчика или снайпера. Затем в любой момент на этом сервере нужно изменить этого персонажа на солдата, поджигателя, подрывника, инженера, медика или шпиона. В этом случае параметры представления на сервере будут искажены, не совпадая с анимацией.

Баг проявляется также при обратной смене персонажа. Если вы сначала создаёте на сервере класс солдата, поджигателя, подрывника, инженера, медика или шпиона. А затем меняете его на разведчика, пулемётчика или снайпера.

Изменение класса обратно, выбор другого персонажа или его смерть не исправляют баг. Переход в режим зрителя тоже не помогает. Более того, в этом случае при обратном переходе может начаться даже сильная рассинхронизация с анимацией.

Причина бага


Замена параметров представления move_x и move_y объясняется тем, что для разведчика, пулемётчика или снайпера список параметров представления указан в одном порядке, а для персонажей солдата, поджигателя, подрывника, инженера, медика и шпиона — в другом порядке.

Кстати, у роботов в кооперативном режиме игры «Манн против машин» мутации быть намного серьёзнее, потому что там у роботов больше параметров для замены, кроме move_x и move_y.


Параметры представления роботов в режиме MvM

Для примера, ниже демонстрация бага в режиме MvM.

Робот-разведчик

Робот-инженер

Боты респаунятся через игровые слоты по тому же механизму, как игроки-люди меняют персонажа, поэтому баг проявляется у них автоматически.

Кстати, на форумах Valve уже много лет игроки жаловались на баги снайперской стрельбы — вроде точно целишься в голову, но выстрел мимо. Попадания в голову словно совершенно случайны. Эти жалобы на хедшоты (от 2012 года, от 2014 года, ещё от 2012 года) принято было считать параноидальным бредом недовольных лузеров, которые пытаются оправдать свои поражения.

Спустя 10 лет после выхода игры баг исправили. Это заняло у разработчиков, наверное, пару минут (или секунд).
Теги:
Хабы:
+28
Комментарии 48
Комментарии Комментарии 48

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн