В наши дни популярные игры обновляются постоянно. Всего пару месяцев не запускал лицензионную игрушку — и ты её уже не запустишь, потому что она сразу начинает обновляться.
Обновления игры обычно исправляют найденные баги. В играх класса ААА исправление глюков не занимает много времени. Хотя бывают исключения. На поиск и исправление бага в популярной игре 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 лет после выхода игры баг исправили. Это заняло у разработчиков, наверное, пару минут (или секунд).
Комментарии (48)
gunlinux
18.02.2017 08:53+2Во-первых, противник может убить вас случайным выстрелом, когда вы спрятались за стену"
Ну это же интерполяция основа сетевого стека source. А ни как не баг с некорректным скелетоном.
Как и большинство багов игр от vаlve, они чинятся, но если их можно воспроизвести, а не фразой ничего не работает – почините.
Саnnot reproduce.
ozmg
18.02.2017 08:53+4Этот баг присутствовал в игре с момента её выхода в октябре 2007 года, то есть больше девяти лет!
Стоит отметить, что это не самый старый баг — некоторые проблемы тянутся еще из GoldSrc и исправления даже близко не видно. В данном случае, скорее всего, повезло исключительно по той причине, что человек докопался до сути, что вызывает конкретный баг и наглядно его продемонстрировал. На пользовательском уровне очень многие знали, что что-то с хитбоксами не так, но что конкретно — сетевой код, компенсации лагов или еще что, никто толком не знал.
v_vabzd
18.02.2017 08:53+4Удивительно, что при в модель повреждения попадает рюкзак; видимо у персонажей в рюкзаке жизненно важные органы.
DrZlodberg
18.02.2017 10:21+1Помнится был очень занятный мод для Q1 — Quake Project1. К сожалению он так и не был завершен (как минимум изрядно глючил). Но там в рюкзаке действительно были жизненно важные органы: патроны. Одно попадание в рюкзак (с 50 ракетами в инвентаре) из бумстика и 200 брони+200 здоровья равномерным слоем размазывались по уровню. Кто не играл — рекомендую ознакомиться. Мод добавлял кучу весьма занятных вещей, вроде метательных топоров (которые втыкались в пол и стены и наносили урон, если по ним пробежать), крюк, рикошет гвоздей, выбрасывание рюкзака с половиной содержимого (можно подобрать или подорвать) и ещё всякого.
maaGames
18.02.2017 14:55Для Unreal Tournament (99) аналогичный мод был, название не помню. Помимо взрывов, при попадании по амуниции, ещё и с трупа можно было взять всё, что у него было, а не только активное оружие.
DrZlodberg
18.02.2017 16:28Жаль. До сих пор иногда рубимся в UT99. Сейчас пытался в modDB найти что-нибудь похожее по описанию, но не сумел :(
maaGames
18.02.2017 16:43+1Для выпадания всего оружия мутатор Pinata. А вот для взрывов при попадании по боезапасу — не могу вспомнить.
DrZlodberg
18.02.2017 16:53Да вот оно то как раз самое весёлое. :(
Хотя в UT, наверно, не так эффектно будет. Там всегда есть хедшоты, в отличие от Q, где отожравшегося противника грохнуть было проблемой.
v_vabzd
18.02.2017 22:53Ну так во-первых попадание в рюкзак должно вызывать соответсвующую анимащию (детонация, взрыв). Во вторых-не факт, что при попадании в рюкзак эта самая детонация произойдет. Так что нужно как минимум вероятность взрыва ввести.
Как альтернативу при попадании в рюкзак можно отнять у игрока патроны. А при текущей модели получается, что попадание в рюкзак равносильно попаданию в туловище.
Ну а если разработчики предпочли не заморачиваться с детонацией и взрывом рюкзака, то зачем тогда дорисовывать рюкзак к кукле персонажа?
Darth_Biomech
18.02.2017 23:43+3Условности игровой реальности — любой элемент дизайна персонажа должен быть потенциальной мишенью. Так-то по хорошему попадание в туловище и попадание в, скажем, ногу должно приводить к совершенно разным последствиям, но тут аркадный онлайн шутер, а не VBS3.
kengururu
18.02.2017 08:53Мне кажется просто никто не мог себе даже представить что в столь серьезном продукте окажется столь серьезный баг. Надеюсь в CS:GO такого нету :)
AFakeman
18.02.2017 10:04+1У них вообще сейчас команда разработчиков маленькая, по словам Uncle Dane что-то типа троих программистов, потому прогресс идет туго.
ragequit
18.02.2017 11:19Гейб говорил о 30.
AFakeman
18.02.2017 11:21+1Я про команду TF2, и конкретно про прогеров. Так в тиме порядка 15-16, но это еще включая художников, дизайнеров, звуковиков, и так далее.
kengururu
18.02.2017 13:11+1Это свидетельствует о том что визуальная составляющая в игре главенствует. И так последнее время происходит во многих отраслях производства. Начиная от фильмов (с обалденной графикой и примитивным сюжетом) и кончая автомобилестроением (красивый снаружи и ненадежный внутри). Маркетологи оттесняют инженеров от производства. Все должно быть «красивенько», может и кривовато но зато «красивенько». Это конечно мое скромное мнение но это становится все заметнее и заметнее.
Alexsey
18.02.2017 18:15Это свидетельствует о том что визуальная составляющая в игре главенствует.
В случае с TF2 это вообще не при чем. Большую часть контента уже давно делают делает комьюнити. Реальная причина маленькой команды разработки TF2 в том что большинство людей в Valve занимаются Dota 2. Такие вот особенности плоской структруры, когда любой человек может заниматься тем чем он хочет.
Camill
18.02.2017 18:25+4Это свидетельствует о том, что задачи по программированию хуже масштабируются, чем художественные, аниматорские или тестерские. Если художник рисует за месяц десять скинов, то десять художников нарисуют сотню. Если же в команду к двум программерам добавить ещё восемь, то это может вообще убить проект.
CheeseMaster
18.02.2017 10:11Стоишь — совпадает, бежишь — нет. Отличный способ сделать игру более динамичной. Фича же!
simple-simple
18.02.2017 15:37Нде… Уж разработчики то. Да при наличии исходного кода. Да после многочисленных жалоб пользователей.
И 10 лет! Действительно очень долго.Finesse
19.02.2017 04:31+1Очень сложно найти причину бага по описанию «иногда попадаю в голову, а он не умирает» в играх с таким сложным движком как Source, потому что не просто определить, при каких именно условиях возникает баг, и как его воспроизвести.
saboteur_kiev
20.02.2017 14:31Учитывая количество жалоб, разработчики могли бы провести свой инвестигейшн.
Как это видно из видео — при наличии дебаг версии, на самостоятельный поиск могло бы уйти от силы пара дней. Просто видимо не искали, ждали пока игроки сами откроют JIRA с подробным описанием где чинить.
В общем — спасибо sigsegv.
asmrnv777
19.02.2017 23:41Пфф, вольво лысеющих персонажей, прилипание предметов к мышке и ERROR вместо курьеров в доте не может починить с чуть ли не первых бета-версий.
Или взять тот баг с хуканием пуджом + ченом на фонтан, это вообще официально фичей считалось, пока баг не продемонстрировали в профессиональной игре. Вот тут пофиксили за несколько часов. А до этого на форумах заявляли, что «все норм, WONTFIX» :)
Hellsy22
Исправлять геймплейные баги даже в ААА-играх никто не спешит. А геймдизайнерские не исправляются практически никогда. Ситуацию спасают лишь моды (где они поддерживаются). К слову, оригинальный QTF был лишь модом для Q1 и в нем все работало отлично.
EugeneButrik
Впрочем, эта фигня происходит не только с компьютерными играми, но ещё и с музыкой, и с фильмами и пр.
perfect_genius
Для борьбы с такой монополией надо обязать разработчиков делать ту же игру двумя разными командами по одному диздоку и желательно на других технологиях/языке, чтобы игры постоянно сверялись на наличие разницы =)
Допустим, если бы в другой версии игры игрок таки убивал бы снайперкой, то разница стала бы заметна сразу и начался бы поиск бага. Команда первой версии «штрафуется», может просто репутация портится.
Но это фантазия, ведь как можно не платить второй команде за разработку? Государство оплатит? =)
EugeneButrik
CheeseMaster
Нечто подобное для производства софта практикуется, когда, например, четную версию программы пишет одна команда, а нечетную — другая. Но тут другая причина — пока пишется следующая версия другой командой, та, что сейчас релизнулась — поддерживает.
me21
Это не совсем фантазия. Насколько я знаю, иногда так пишут софт в авиации и космонавтике для дублирующих друг друга систем. Надежность в таких случаях важнее себестоимости.
perfect_genius
Как понять какая версия неправа? Или их три версии?
Grox
Главное, что есть расхождения. Значит у кого-то ошибка. Когда одна версия, неизвестно, есть ли ошибка. Софт исправят. А от аппаратных ошибок как раз делают арбитров и 3-4(резерв) одинаковые системы.
me21
Да, три. Решение принимается большинством голосов.
Подробнее не могу написать, в этой отрасли не работаю, так что боюсь наврать.
perfect_genius
Получается, софт с тем же функционалом имеет три версии и пишется тремя командами =)
Alexeyslav
И все три работают по разному и имеют собственный уникальный набор багов…
perfect_genius
Разве важно как они работают, если при одинаковых входных данных выходящие тоже идентичны?
А различие в одном выявят две одинаковые в других.
Alexeyslav
А зачем нам идентичные данные? Нам надо чтобы программа соотвествовала ТЗ, а с этим справляются автоматизированные тесты. А вот уже что включать в тесты, какие наборы ситуаций и данных — это уже надо думать исходя из документа с ТЗ, наличие в этом процессе заказчика ускоряет процесс. При этом это дешевле чем вести параллельные разработки.
saboteur_kiev
Для игр, которые активно проводят крупные турниры и серьезно поддерживают киберспорт — такие баги вылавливаются очень быстро, и разработчики хорошо понимают их важность.
Я вот сомневаюсь, что такой баг мог бы существовать столько времени в CS:GO или League Of Legends.
А вот для игр без активной поддержки киберспорта, вероятность появления профессиональных игроков среди разработчиков/тестировщиков очень невысока. Существует множество игр, разработчики которых сами не подозревают на что могут быть способны игроки. Например то же развитие ритм-игр.
EugeneButrik
saboteur_kiev
Ну мне сложно представить себе профессиональных игроков в дьяблу или в «счастливый фермер».
Просто потому что нет официальных крупных чемпионатов. Зато могу представить профессиональных игроков в тетрис, и вот там подобные проблемы были бы сразу описаны и вычислены и игроками и разработчиками.
igorp1024
Ну, бывают исключения. У TF2 уже появился конкурент.
perfect_genius
Если баг трудновоспроизводимый и почти незаметный.
Кто-то сделал полную ревизию кода, и не один? Или имели в виду, что никто не жаловался на снайперку?А что такое «геймдизайнерские баги»?
sumanai
Дизбаланс в уровнях, силах различных классов игроков или мобов, слишком сложные или лёгкие карты.