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

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

Обновления игры обычно исправляют найденные баги. В играх класса ААА исправление глюков не занимает много времени. Хотя бывают исключения. На поиск и исправление бага в популярной игре 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)


  1. Hellsy22
    18.02.2017 07:30
    +1

    Исправлять геймплейные баги даже в ААА-играх никто не спешит. А геймдизайнерские не исправляются практически никогда. Ситуацию спасают лишь моды (где они поддерживаются). К слову, оригинальный QTF был лишь модом для Q1 и в нем все работало отлично.


    1. EugeneButrik
      18.02.2017 08:37

      Исправлять геймплейные баги даже в ААА-играх никто не спешит. А геймдизайнерские не исправляются практически никогда.
      А скорее всего так всегда и будет. Возможно это происходит из-за того, что игра как товар — это не коммерческий продукт, несмотря на то, что это такая же программа, как какая-нибудь СУБД, это произведение искусства. У неё не может быть аналога более высокого качества, выпущенного конкурентом, то есть тут банально нет конкуренции. Это монополия в чистом виде, монополия на идею, если угодно. А, как давно уже известно, монополизм к улучшению качества явно не приводит. И чтобы кто там ни говорил, но схема «голосования долларом» здесь так же не работает. Разработчики игр не конкурируют друг с другом за один и тот же доллар покупателя — это фикция.
      Впрочем, эта фигня происходит не только с компьютерными играми, но ещё и с музыкой, и с фильмами и пр.


      1. perfect_genius
        18.02.2017 09:08

        Для борьбы с такой монополией надо обязать разработчиков делать ту же игру двумя разными командами по одному диздоку и желательно на других технологиях/языке, чтобы игры постоянно сверялись на наличие разницы =)
        Допустим, если бы в другой версии игры игрок таки убивал бы снайперкой, то разница стала бы заметна сразу и начался бы поиск бага. Команда первой версии «штрафуется», может просто репутация портится.
        Но это фантазия, ведь как можно не платить второй команде за разработку? Государство оплатит? =)


        1. EugeneButrik
          18.02.2017 09:18

          Но это фантазия, ведь как можно не платить второй команде за разработку?
          Угу… особенно когда уже всё оплачено — игра куплена потребителем :)


        1. CheeseMaster
          18.02.2017 10:16
          -2

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


        1. me21
          18.02.2017 15:34

          Это не совсем фантазия. Насколько я знаю, иногда так пишут софт в авиации и космонавтике для дублирующих друг друга систем. Надежность в таких случаях важнее себестоимости.


          1. perfect_genius
            18.02.2017 18:42

            Как понять какая версия неправа? Или их три версии?


            1. Grox
              18.02.2017 23:28

              Главное, что есть расхождения. Значит у кого-то ошибка. Когда одна версия, неизвестно, есть ли ошибка. Софт исправят. А от аппаратных ошибок как раз делают арбитров и 3-4(резерв) одинаковые системы.


            1. me21
              18.02.2017 23:30
              +1

              Да, три. Решение принимается большинством голосов.
              Подробнее не могу написать, в этой отрасли не работаю, так что боюсь наврать.


              1. perfect_genius
                19.02.2017 11:26
                -1

                Получается, софт с тем же функционалом имеет три версии и пишется тремя командами =)


                1. Alexeyslav
                  20.02.2017 16:47
                  +1

                  И все три работают по разному и имеют собственный уникальный набор багов…


                  1. perfect_genius
                    20.02.2017 17:55

                    Разве важно как они работают, если при одинаковых входных данных выходящие тоже идентичны?
                    А различие в одном выявят две одинаковые в других.


                    1. Alexeyslav
                      20.02.2017 18:02

                      А зачем нам идентичные данные? Нам надо чтобы программа соотвествовала ТЗ, а с этим справляются автоматизированные тесты. А вот уже что включать в тесты, какие наборы ситуаций и данных — это уже надо думать исходя из документа с ТЗ, наличие в этом процессе заказчика ускоряет процесс. При этом это дешевле чем вести параллельные разработки.


      1. saboteur_kiev
        18.02.2017 12:13

        Для игр, которые активно проводят крупные турниры и серьезно поддерживают киберспорт — такие баги вылавливаются очень быстро, и разработчики хорошо понимают их важность.
        Я вот сомневаюсь, что такой баг мог бы существовать столько времени в CS:GO или League Of Legends.

        А вот для игр без активной поддержки киберспорта, вероятность появления профессиональных игроков среди разработчиков/тестировщиков очень невысока. Существует множество игр, разработчики которых сами не подозревают на что могут быть способны игроки. Например то же развитие ритм-игр.


        1. EugeneButrik
          18.02.2017 21:38

          Существует множество игр, разработчики которых сами не подозревают на что могут быть способны игроки.
          А у меня, как у игрока (кстати, далеко не профессионального) последнее время (да, да, похоже на брюзжание) складывается впечатление, что разработчики игр вообще не подозревают, каким должно быть и может быть на самом деле поведение игрока в их игре. Такое впечатление, что они сами даже в свои игры и то не играют :)


          1. saboteur_kiev
            19.02.2017 01:39

            Ну мне сложно представить себе профессиональных игроков в дьяблу или в «счастливый фермер».

            Просто потому что нет официальных крупных чемпионатов. Зато могу представить профессиональных игроков в тетрис, и вот там подобные проблемы были бы сразу описаны и вычислены и игроками и разработчиками.


      1. igorp1024
        19.02.2017 12:05

        Ну, бывают исключения. У TF2 уже появился конкурент.


    1. perfect_genius
      18.02.2017 08:51
      +1

      Если баг трудновоспроизводимый и почти незаметный.
      А что такое «геймдизайнерские баги»?

      был лишь модом для Q1 и в нем все работало отлично.
      Кто-то сделал полную ревизию кода, и не один? Или имели в виду, что никто не жаловался на снайперку?


      1. sumanai
        18.02.2017 15:02
        +1

        А что такое «геймдизайнерские баги»?

        Дизбаланс в уровнях, силах различных классов игроков или мобов, слишком сложные или лёгкие карты.


  1. gunlinux
    18.02.2017 08:53
    +2

    Во-первых, противник может убить вас случайным выстрелом, когда вы спрятались за стену"

    Ну это же интерполяция основа сетевого стека source. А ни как не баг с некорректным скелетоном.

    Как и большинство багов игр от vаlve, они чинятся, но если их можно воспроизвести, а не фразой ничего не работает – почините.
    Саnnot reproduce.


  1. ozmg
    18.02.2017 08:53
    +4

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

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


  1. v_vabzd
    18.02.2017 08:53
    +4

    Удивительно, что при в модель повреждения попадает рюкзак; видимо у персонажей в рюкзаке жизненно важные органы.


    1. DrZlodberg
      18.02.2017 10:21
      +1

      Помнится был очень занятный мод для Q1 — Quake Project1. К сожалению он так и не был завершен (как минимум изрядно глючил). Но там в рюкзаке действительно были жизненно важные органы: патроны. Одно попадание в рюкзак (с 50 ракетами в инвентаре) из бумстика и 200 брони+200 здоровья равномерным слоем размазывались по уровню. Кто не играл — рекомендую ознакомиться. Мод добавлял кучу весьма занятных вещей, вроде метательных топоров (которые втыкались в пол и стены и наносили урон, если по ним пробежать), крюк, рикошет гвоздей, выбрасывание рюкзака с половиной содержимого (можно подобрать или подорвать) и ещё всякого.


      1. maaGames
        18.02.2017 14:55

        Для Unreal Tournament (99) аналогичный мод был, название не помню. Помимо взрывов, при попадании по амуниции, ещё и с трупа можно было взять всё, что у него было, а не только активное оружие.


        1. DrZlodberg
          18.02.2017 16:28

          Жаль. До сих пор иногда рубимся в UT99. Сейчас пытался в modDB найти что-нибудь похожее по описанию, но не сумел :(


          1. maaGames
            18.02.2017 16:43
            +1

            Для выпадания всего оружия мутатор Pinata. А вот для взрывов при попадании по боезапасу — не могу вспомнить.


            1. DrZlodberg
              18.02.2017 16:53

              Да вот оно то как раз самое весёлое. :(
              Хотя в UT, наверно, не так эффектно будет. Там всегда есть хедшоты, в отличие от Q, где отожравшегося противника грохнуть было проблемой.


              1. 1on
                19.02.2017 11:32

                Volatile Ammo и Volatile Weapon


                1. DrZlodberg
                  19.02.2017 11:48
                  +1

                  Благодарствую. Мод называется Apocalypse Weapons.


      1. v_vabzd
        18.02.2017 22:53

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


    1. Darth_Biomech
      18.02.2017 23:43
      +3

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


  1. kengururu
    18.02.2017 08:53

    Мне кажется просто никто не мог себе даже представить что в столь серьезном продукте окажется столь серьезный баг. Надеюсь в CS:GO такого нету :)


    1. AFakeman
      18.02.2017 10:04
      +1

      У них вообще сейчас команда разработчиков маленькая, по словам Uncle Dane что-то типа троих программистов, потому прогресс идет туго.


      1. ragequit
        18.02.2017 11:19

        Гейб говорил о 30.


        1. AFakeman
          18.02.2017 11:21
          +1

          Я про команду TF2, и конкретно про прогеров. Так в тиме порядка 15-16, но это еще включая художников, дизайнеров, звуковиков, и так далее.


          1. kengururu
            18.02.2017 13:11
            +1

            Это свидетельствует о том что визуальная составляющая в игре главенствует. И так последнее время происходит во многих отраслях производства. Начиная от фильмов (с обалденной графикой и примитивным сюжетом) и кончая автомобилестроением (красивый снаружи и ненадежный внутри). Маркетологи оттесняют инженеров от производства. Все должно быть «красивенько», может и кривовато но зато «красивенько». Это конечно мое скромное мнение но это становится все заметнее и заметнее.


            1. Alexsey
              18.02.2017 18:15

              Это свидетельствует о том что визуальная составляющая в игре главенствует.


              В случае с TF2 это вообще не при чем. Большую часть контента уже давно делают делает комьюнити. Реальная причина маленькой команды разработки TF2 в том что большинство людей в Valve занимаются Dota 2. Такие вот особенности плоской структруры, когда любой человек может заниматься тем чем он хочет.


            1. Camill
              18.02.2017 18:25
              +4

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


            1. Shished
              18.02.2017 22:40

              Это свидетельствует о том, что TF2 никто не хочет заниматься.


  1. perfect_genius
    18.02.2017 09:00

    «Серьёзный баг...» и «Пересадка головы» в Похожих публикациях =)


  1. CheeseMaster
    18.02.2017 10:11

    Стоишь — совпадает, бежишь — нет. Отличный способ сделать игру более динамичной. Фича же!


  1. simple-simple
    18.02.2017 15:37

    Нде… Уж разработчики то. Да при наличии исходного кода. Да после многочисленных жалоб пользователей.
    И 10 лет! Действительно очень долго.


    1. Finesse
      19.02.2017 04:31
      +1

      Очень сложно найти причину бага по описанию «иногда попадаю в голову, а он не умирает» в играх с таким сложным движком как Source, потому что не просто определить, при каких именно условиях возникает баг, и как его воспроизвести.


      1. saboteur_kiev
        20.02.2017 14:31

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


  1. perfect_genius
    18.02.2017 20:10

    image


    1. dadyjo
      20.02.2017 13:54
      +2

      Агенту Смиту по коленкам надо было стрелять! :)


  1. axiieflex
    19.02.2017 20:13

    Ну наконец-то, лучше поздно чем никогда :)


  1. asmrnv777
    19.02.2017 23:41

    Пфф, вольво лысеющих персонажей, прилипание предметов к мышке и ERROR вместо курьеров в доте не может починить с чуть ли не первых бета-версий.
    Или взять тот баг с хуканием пуджом + ченом на фонтан, это вообще официально фичей считалось, пока баг не продемонстрировали в профессиональной игре. Вот тут пофиксили за несколько часов. А до этого на форумах заявляли, что «все норм, WONTFIX» :)