Ваша игра сломана, пофиксите

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

С точки зрения игрока, баги — вещь понятная. Они вызывают смех, отвращение, а иногда и гнев, и все их точно нужно исправить.

​Мне кажется, есть такое распространённое заблуждение: игрок думает, что если в игре есть баг, то разработчику наплевать, ведь он уже получил его деньги. Учитывая рефанды в Steam, деньги игроков мы получаем на время — они легко могут их себе вернуть.

Любой баг в моей игре, помимо проблем со звуковой программой-посредником, — это моя ошибка, это я напортачил. Мне это известно, и я не могу сделать вид, будто не виноват. Уровень серотонина в голове падает, как только я вижу баг-репорт или слово crash. Это действительно огорчает.

Клифф Харрис (Cliff Harris) из Positech Games, бывший сотрудник Lionhead и Elixir Studios

Баги на Сommodore 64

Как говорит Эндрю Брейбрук (Andrew Braybrook), разработчик игры Paradroid для Commodore 64, старый ассемблер под названием «6502» (инструмент, который переводит исходный текст программы с низкоуровневого языка программирования на язык, понятный вычислительной машине) не прощает ошибок. Он не может просто взять и показать, в какой части кода проблема. А программ-дебаггеров, специально заточенных под поиск багов, во времена Commodore 64 не было. И вот, в сентябре 1983 года — за месяц до релиза — Paradroid внезапно стала отключаться через 20 минут нормальной работы.

Обычно, если в игре есть баг, то проблема где-то в коде, но случай Paradroid был иным: игра в нормальных, на первый взгляд, условиях сама приводила к возникновению критической ошибки. Не зная, что в коде приводит к появлению бага, Брейбрук три дня прочёсывал всю кодовую базу. В конце третьего дня он сузил область поиска до участка кода, отвечающего за систему распознавания столкновений. Утром на него снизошло озарение: Брейбрук использовал не то значение в таблице данных робота.

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

Эта ошибка происходила только во время столкновений: большой робот сталкивался с другим роботом и игра останавливалась. Как вспоминает Брейбрук, он выбежал в сад и хорошенько прокричался: вот она, та самая ошибка, которую он искал.

Клифф Харрис рассказывает, что после запуска игры ему о багах пишут везде: на его сайте, на форумах, через группу игры и личные сообщения в Facebook, в обсуждениях Steam. Каждый раз, когда он что-нибудь анонсирует, в комментариях обязательно пишут что-нибудь о багах.

Иногда игроки детально описывают свои проблемы, иногда прикладывают сохранённые игры, но зачастую просто пишут: «Ваша игра сломана, пофиксите», даже не сообщая о том, что за игру они имеют в виду.

Зачем воспроизводить баги

Роб Додд (Rob Dodd) из Fireproof Games (авторы головоломки The Room) вспоминает, как работал над шутером от первого лица: в нём враги после смерти оставляют своё оружие, которое становится физическим объектом и падает на пол. Разработчики получили сообщение о баге: оружие падало прямо сквозь пол. Дело было серьёзное, ведь местами игра полагалась на то, что игрок может подобрать конкретный предмет вооружения.

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

Разработчик оставил её на ночь. Придя утром, он увидел, что через пару часов после начала игра сломалась, но перед этим несколько предметов оружия провалились сквозь пол. Он стал генерировать оружие с параметрами тех, которые провалились, и получил красивый поток, идущий сквозь пол. Исправить баг было легко — хватило буквально одной строчки кода.

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

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

Бывают и другие баги, ещё более раздражающие — Харрис называет их «Гейзенбагами». Они исчезают или меняются во время изучения игры через программу-дебаггер, из-за чего идентифицировать их очень сложно. Чарльз Рэндалл (Charles Randall), работавший в Bioware Edmonton, Ubisoft Montreal и Capybara Games, упоминает «мета-баги», которые возникают не из-за ошибок в коде, а из-за компилятора, который превращает код в инструкции для компьютера. По его словам, винить компилятор (инструмент, который превращает программу, написанную на языке программирования высокого уровня, в эквивалентную программу на низкоуровневом языке) это всё равно, что говорить «это не волчанка» когда ставишь диагноз пациенту.

Но когда дело всё-таки в компиляторе, у вас большие проблемы. Во время разработки MDK 2 парень, который работал над звуком, столкнулся с проблемой: не проигрывался определённый трек. Во время дебаггинга он выяснил, что код не запускал функцию playSound(). После длительного расследования мы прикинули, что дело, скорее всего, в названии функции, и переименовали её в pleaseLordSatanPlaySound(), после чего проблема была решена. Насколько мне известно, с этой функцией игра и вышла.​

Чарльз Рэндалл, разработчик, работавший в Bioware Edmonton, Ubisoft Montreal и Capybara Games

Крик в пустоту

Разработчики часто забывают о том, что гневные сообщения о багах — знак эмоциональной привязанности к игре. Простой ответ может превратить агрессора в разумного собеседника. Харрис связывает это с тем, что взаимодействие с корпорациями вроде Google или Microsoft зачастую напоминает крик в пустоту.

Рики Хэггетт (Ricky Haggett), разработчик Hohokum, Frobisher Says и Loot Rascals, отвечает на такие сообщения сразу же, вне зависимости от того, когда они приходят. По его словам, люди в основном реагируют терпимо — после начальных извинений обычно начинается конструктивный диалог. Хэггету это даже нравится.

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

Неисправленный баг в Assassin's Creed 2

В Assassin’s Creed 2 пропадали боевые анимации, и Чарльз Рэндалл ничего не мог поделать. Он не понимал, какая комбинация условий приводит к появлению бага. Прошло более года прежде чем он смог вычленить его в коде и сделать так, чтобы всё работало — но не самым правильным образом.

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

Иногда пользователи сообщают о том, что багом и вовсе не является.

Я уверен, что геймеры такие объяснения всерьёз не воспринимают, но зачастую, если игра не запускается, нужно просто обновить драйвера видеокарты. Да, звучит как отговорка, но 80 процентов от всех ошибок при запуске вызваны необновлёнными драйверами. ​

Клифф Харрис, разработчик в Positech Games

Хэггет сталкивался и с тем, что беспричинные ошибки при запуске исправлялись простым перезапуском игры, хотя разработчики и не знали, чем они вызваны.

Выпускать патчи с исправлениями багов сейчас просто — на большинстве платформ игры обновляются автоматически. Многие думают, что создатели консолей ввели процесс сертификации всех релизов для того, чтобы отлавливать баги, но на самом деле это не так: всё дело в соответствии правилам платформы. Например, в случае игры Loot Rascals, она получила сертификат, когда в ней ещё было несколько критических багов.

​Когда игра Unexplored вышла из раннего доступа, мы допустили тупейшую ошибку в одном из ранних патчей перед релизом. Количество боссов упало до нуля. Только через неделю мы поняли, что выпустили игру с одним лишь финальным боссом и быстро исправили проблему патчем. Хорошо, что мы — инди-команда, которая выпускает игры на онлайн-платформе.

Джорис Дорманс (Joris Dormans), разработчик Unexplored

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

Баги и эксплоиты

Тедди Диф (Teddy Dief), разработчик Hyper Light Drifter, вспоминает, как показывал игру на одной из конференций в 2013 году. Перед этим он всю ночь не спал, чтобы подготовить билд. Людям с конференции всё нравилось, пока не появился один заносчивый ребёнок, который решил испытать систему распознавания столкновений на прочность и начал биться об стены в игре. Диф пытался убедить его, что ничего не получится, тот настаивал, что вот-вот сломает игру. Так они спорили десять минут, и в итоге ребёнок баг найти не смог.

Через два с половиной года Hyper Light Drifter вышел, и спидраннерам понадобилось всего два дня на то, чтобы понять, как проходить сквозь стены. Один из них воспользовался трюком, о котором разработчики и не подозревали: он специально попадал в кристалл-ловушку, которая выталкивала его внутрь стен, окружающих уровень, после чего он мог спокойно передвигаться в любом направлении.

Разработчики ограничились тем, что убрали кристаллы от важных стен — они решили не исправлять проблему полностью. Да и не знали, как это сделать эффективно, ведь нужно было менять значительную часть игры. Так что Диф позволил игрокам выходить за пределы уровня, однако после этого они умирали через несколько секунд. Так спидраннеры не могли совсем уж эксплуатировать баг, а у обычных игроков появилось время, чтобы понять, что они попали куда-то не туда.

Нравится10
Комментарии (6)
B
i
u
Спойлер