Нарочные и случайные глюки в играх — разработчики делятся инсайдами

Людям непосвящённым разработка компьютерных игр может представляться занятием весьма легкомысленным и ненапряжным. Однако умудрённые опытом товарищи, конечно, осознают, что большую часть времени сия деятельность — это каждодневные пот и кровь, вагонами уходящие на приведение всех механик и уголков электронного творения в божеский и играбельный вид. Отрадно, впрочем, что и забавных моментов при созидании очередного шедевра (ну или хотя бы шедеврика) случается достаточно. А уж когда к подобному веселью прибавляется толика «разработческого хулиганства» (часто вынужденного), то и вовсе становится особенно интересно!

Есть примеры достаточно известные — например, когда-то сам Дэвид Перри признался, что сознательно сделал игру Great Gurianos для ZX Spectrum непроходимой:

«Доставка аркадного автомата заняла так много времени, что когда он прибыл, я уже закончил свой порт. Игра была полностью готова, и у меня банально не осталось памяти для финальной заставки. Так что я взял да и сделал последнего босса непобедимым. С точки зрения программирования и игрового дизайна — самое натуральное кощунство, но я гнусно похихикал про себя и выдал на-гора непроходимую игру. Что называется, дошёл до ручки. Для меня Great Gurianos оказалась критической точкой, после которой я понял, что пора брать себя в руки. Вот тогда я и связался с Probe Software».

Нарочные и случайные глюки в играх

А вот ещё случай, объясняющий наличие всего одной жизни в замечательной во всех остальных аспектах игре Treasure Island Dizzy (цитата из статьи The Original Good Egg, опубликованной в журнале «Страна игр» и переведённой Михаилом Судаковым):

«Незадолго до релиза в игре обнаружился пренеприятнейший баг. Диззи, случайно снявший маску под водой, тонул, возрождался на берегу, но обратно в водоём спуститься уже не мог — не было нужной экипировки! Сначала Оливеры решили, что нужно выкидывать все предметы, которые случайно оказались под водой, на ближайший берег, но быстро выяснилось, что в некоторых ситуациях Диззи и его пожитки оказываются по разные стороны водоёма. Не успели решить эту задачку, как вспомнили, что есть ещё подводные пещеры, и иногда главный герой возрождается там. В итоге, конечно, этот глюк бы забороли, но Оливеров сильно поджимало время и они приняли очень радикальное решение: сделать вместо пяти жизней, как в первом Dizzy, ровно одну. Ошибся разок — и всё, игра окончена».

Нарочные и случайные глюки в играх

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

Пожалуйста, поделитесь вашими щекотливыми «преступлениями» при разработке игр. Моё: всё скриптование проекта Gone Home велось в 2 гигантских uScript-графах. Тогда я не знал, как работать со множеством маленьких графов, а 2 их только потому, что первый в какой-то момент стал слишком медленно отображаться в редакторе. Ваш черёд. Прошу прощения у всех, кому пришлось потом портировать эту игру.

На призыв Стива откликнулась, кажется, почти вся локальная геймдевская братия. За прошедшие дни набралось свыше 1200 ответов, 5 тысяч ретвитов и 18 тысяч лайков! Ну а мы решили порадовать вас переводом самых интересных инсайдов, ведь тема сиюминутных решений, возникающих при разработке и перед релизом игр, не только весьма доставляет эмоционально, но и периодически всплывает в том или ином виде.

Что ж, поехали!

• • •

tanh (mmalex) (Media Molecule):

В Black and White есть утечка памяти, которую мы так и не нашли, поэтому когда игра видит, что память заканчивается, она сохраняется, закрывается и перезапускается безо всяких объяснений. И при этом умудрились пройти ночное стресс-тестирование...

• • •

Raph Koster

Рождественские ёлки в Ultima Online. У нас не было арта для них, поэтому я добавил скрипт к обычной сосне, создающий маленькие драгоценные камни, которые у нас как раз были, и смещал их на разную высоту. У каждого камешка имелся скрипт, периодически показывающий и скрывающий его, чтобы придать эффект мерцания. Потом мы дарили всем заходящим игрокам по рождественской ели. Их были тысячи, каждая с двадцатью постоянными вызовами скриптов с интервалом примерно в секунду. Очередь обработки переполнилась на всех серверах, и игра упала. На Рождество. А я был в отпуске.

• • •

Emily Grace Buck:

В The Walking Dead: Michonne была сцена на двенадцать фраз, которую я собрала из вырезанных из других сцен кусочков, чтобы попытаться заткнуть дыру в сюжете.

• • •

Matthew Brooks:

Каждая игровая сущность в Wolverine’s Revenge содержала бит, определяющий, не является ли эта сущность взлетающим вертолётом. Включая главного персонажа.

Нарочные и случайные глюки в играх

• • •

James Sutherland:

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

• • •

John Ayliff:

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

• • •

Benny:

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

• • •

Duncan Robson:

Одна из катсцен с персонажем в Colony Wars III: Red Sun содержит лицевую анимацию, снятую с меня самого, потому что я удалил файл и слишком боялся кому-нибудь рассказать.

Нарочные и случайные глюки в играх

• • •

Arnie Niekamp:

В Trivia Murder Party у нас был лишний столбец в таблице достижений. Мы не смогли придумать, что ещё замерять в игре, поэтому я просто предложил в качестве прикола назвать его «Обаяние» и всегда заполнять нулём. Меня до сих пор регулярно спрашивают, как поднять обаяние в этой игре.

• • •

Mark Darrah:

Первый Baldur’s Gate поступил в продажу в отладочном режиме, потому что игра падала в любом другом (неинициализированная память).

• • •

Michael Kidder:

Делал RPG. Движок не поддерживал возможность контролировать зоны передвижения NPC: они могли заходить в дверные проёмы и мешать игроку пользоваться дверьми. Решением стало добавление невидимых персонажей, которые стояли в этих проёмах и не давали другим NPC попадать туда, но пропускали игрока.

• • •

Jake Rodkin:

В режиме свободной игры в Firewatch я хотел сделать непрерывную смену времени суток, но наша система такого не умела. Она могла реагировать и делать что-то, только когда Генри попадал в триггеры. Так что в свободном режиме мы сделали кольцо триггеров, прикреплённых к Генри и медленно вращающихся, по одному проходя сквозь него.

• • •

Brendan Walker:

Не моё, но очень понравилось. В Pirates of the Burning Sea (дословно «Пираты пылающего моря», у нас «Корсары Онлайн» — Прим. перев.) дизайнеру миссий понадобилось поджечь корабль. Корабли тогда не поддерживали работу с частицами, зато в распоряжении имелись размещаемые NPC, умевшие испускать частицы. Поэтому пришлось уменьшить NPC до крохотных размеров и поджечь их.

• • •

Toby Do:

Трава в моей последней игре — это уменьшенные деревья.

Нарочные и случайные глюки в играх

• • •

Smithy:

Я не знал, как реализовать вылет пуль точно из кончика дула оружия, так что просто создавал их в середине игрока и добавил кучу спецэффектов, чтобы этого не было видно.

• • •

Petr Pechar:

В основу модельки и карты нормалей для головы каждого солдата мужского пола в первой Arma легла моя макушка, ведь я был единственным, кто согласился побриться наголо для 3D-сканирования нашим (тогда ещё) передовым лазерным сканером Olympus.

• • •

Clément Vayer:

В Watch Dogs мне нужно было сделать управляемого игроком «паучка», однако система искусственного интеллекта могла наводиться только на персонажа игрока. Поэтому Айдена уложили внутрь «паучка» и сделали неуязвимым и невидимым, а враги даже не подозревали, против кого на самом деле сражаются.

• • •

Brian Osman:

Подгрузчик текстур в порте Doom 3 для Xbox потихоньку фрагментировал память по ходу прохождения. Всё было нормально, если вы играли пару часов, но если проходить более 60% игры зараз — всё падало. Чтоб скрыть это, мы решили показывать ошибку «Диск загрязнён или не читается».

• • •

ALEX.EXE:

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

• • •

Darryl Mott:

Сам не разраб, но постоянно вспоминаю такой баг в Ultima Online. «Баг пофикшен: лошади теперь ведут себя как нормальные штаны».

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

Нарочные и случайные глюки в играх

• • •

Jeff Dixon:

В Scooby Doo для GBA игра падала из-за бага, случавшегося при подборе пары конкретных «Скуби-снэков» в определённом порядке. До релиза оставалась пара часов, нужно было успеть к выходу фильма в прокат. Я заставил снэки меняться местами, если игрок попытается собирать их не в нужном мне порядке.

• • •

Luke Herbert:

Меняется ли управление машиной в дождь, спросите вы? Конечно, безусловно... Однажды на ревью с руководителем команды ребята решили, что мой участок нужно сделать проще, причём до конца рабочего дня. Я испробовал множество вариантов, давал другим потестировать, но, как ни старался, исходный вариант оставался лучшим. Когда руководитель проверил версию вновь, думая, что я внёс изменения, он сказал: «Вот так намного лучше».

• • •

David Shaver:

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

• • •

Cullen:

В Gato Roboto вода изначально должна была быть лавой, и поэтому класс назвали Lava. Такое название за ним и закрепилось, потому что уже было слишком много ссылок на него, а когда нам понадобилось добавить настоящую лаву, мы решили назвать новый класс Hot Lava.

• • •

Rami Ismail:

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

• • •

Simon Carter:

В первой Dungeon Keeper вражеский ИИ мог с 50% шансом сдаться в первые 30 секунд после начала уровня. За немного нервные выходные мы выпустили «патч», в котором полностью переписали всю систему.

Нарочные и случайные глюки в играх

• • •

Mike Zaimont:

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

• • •

Sam Suite:

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

• • •

Alex Blechman:

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

• • •

Lee Perry Yo!:

На одной из карт в Gears of War я сделал «летающий по округе мусор», присоединив графику помоев к крохотным невидимым союзникам, бегающим по триггерам.

• • •

Claire Morley:

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

• • •

Alex Márquez:

В нашей игре при запуске/перезапуске сцен протагонист иногда получал урон от падения, хотя его ставили точно на землю. Моё решение, как исключить эти повреждения, состояло в том, чтобы создавать игрока в «режиме бога» и выключать его через 0,2 секунды. Грязно, но работает.

• • •

Tom French:

Во время разработки Fallout 2 ко мне в голову пришла гениальная идея научить браминов какать. Я заставил их периодически выдавать небольшой случайный шлепок, изначально использовавшийся при создании взрыва в Модоке. Гордость переполняла меня! В ту же неделю мне прислали баг от команды тестирования, что при оставлении включённой на ночь игра падает из-за слишком большого количества дерьма!

Нарочные и случайные глюки в играх

• • •

Tom Forsyth:

Не моё, а от знакомого, с которым работал. Делали они лётный симулятор. Когда заканчивалось топливо, ребята роняли самолёт «вниз», только вот из-за недоработки это было «вниз» относительно самолёта, так что в перевёрнутом состоянии машина падала вверх. Об этом узнали только после релиза — слишком поздно что-то править, а «патчей» в те дни ещё не было. Ну и ладно. Однако... вторую версию симулятора делала другая команда, но на том же коде. Баг сохранился и ушёл в релиз и там тоже.

• • •

Scott Velasquez:

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

• • •

PopRelics:

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

• • •

Mandy Jacek:

А у нас в Dragon Age: Inquisition были проблемы с тем, что некоторые части моделей голов торчали сквозь закрытые шлемы. Пару недель я занимался тем, что оставлял только нужные части голов, которые действительно должны быть видимыми, и затем вклеивал их в модельки шлемов. После этого мы совсем отключили головы...

• • •

riley!!!:

Мне было сложно реализовать нормальную паузу в Game Maker, так что я просто делал скриншот текущего экрана, сохранял игру, выводил вместо неё этот скриншот и немного затемнял. По нажатию на «Продолжить» сохранение сперва загружалось, а затем удалялось. Если игрок выбирал «Выход», то происходил возврат на заставочный экран, а сейв также удалялся. Пока что это лучшая из моих быстрых заплаток.

• • •

Glen Watts:

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

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

Нарочные и случайные глюки в играх

• • •

Alexander Brazie:

В World of Warcraft: The Burning Crusade монстры не могли атаковать летающих игроков. Чтобы сымитировать попадания пушками Легиона, я призывал невидимых летающих инферналов.

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

• • •

Matthieu Richez:

В игре Dead In Bermuda у нас была переменная, отвечавшая за усложнение игры по мере прохождения... но мы не сохраняли её, так что каждый раз, когда вы закрывали игру, она обнулялась. Мы не стали это исправлять, так как это сделало бы нашу игру слишком уж сложной.

• • •

Jason Maltzen:

Ultima IX. Добавляли эффект оглушения в виде птичек, которые должны были летать вокруг головы игрока. Однако из-за использования модельки птицы ИИ считал должным перехватить управление над ней, и птахи улетали прочь. Прямо из точки генерации за ухом персонажа.

• • •

Brie Code:

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

Первоисточник: twitter.com
22 января 2019, 18:35

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

А нас ещё пугают SJW-шностью ААА-разрабтчиков! Женских персонажей и так было мало, так их ещё и убрать просят. Всё правильно делают!

23 января 2019, 18:51

Великолепная, интересная статья, спасибо!

23 января 2019, 20:58

Обожаю читать такие статьи. Попадаются очень оригинальные и нестандартные решения.

23 января 2019, 21:08

Всем спасибо, мы старались.

23 января 2019, 23:59

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

27 января 2019, 11:39

гыгы, добавлю и я немножко: в Quest случается сечение с лучом при анимации героя. поэтому добавлена искусственная задержка (:

31 января 2019, 01:21

Смеялся в голос с некоторых решений.

Оставлять комментарии могут только авторизованные пользователи.