[Перевод] Как единственная строка древнего кода целых полгода сводила с ума разработчиков MMORPG

[Перевод] Как единственная строка древнего кода целых полгода сводила с ума разработчиков MMORPG

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

Aliens: Colonial Marines была проблемной по многим причинам, но быстро стала всеобщим посмешищем, когда появились подобные виральные клипы, в которых ксеноморфы бессмысленно бродят по уровням. В этом месяце разработчик модов обнаружил, что причиной глупейшего поведения ИИ «чужих» стала одна ошибка в коде игры. (Об этом была статья на Хабре.) Упс. Но это не единственный случай за этот год, когда игра оказывалась унижена из-за упущенной клавиатурной опечатки. В начале 2018 года фанаты обнаружили, что ИИ Civilization VI подозрительно ударяется в религию: дело оказалось в том, что слово «yield» в коде было написано как «yeild».

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

Леа Миллер несколько лет работала дизайнером в бывшем разработчике MMO-игр Mythic Entertainment. Она занималась сценариями, дизайном контента и систем для Dark Age of Camelot и Warhammer Online: Age of Reckoning. В момент выпуска студия стала получать от фанатов жалобы: игра казалась медленной и малоотзывчивой. Игроки не могли определить, в чём конкретно была причина.

Это было просто… ощущение?

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

image

Warhammer Online не собрал большую аудиторию и в результате был закрыт в 2013 году.

Копаясь в коде полгода, команда разработчиков так и не могла найти решение.

Один из относительно новых программистов изучал код Age of Reckoning и обнаружил нечто странное. В нём по-прежнему оставалась строка, относившаяся к предыдущей MMO студии, Dark Age of Camelot. Она выполняла обработку игроков на дайлапе. Да, на дайлапе. Dark Age of Camelot была выпущена в 2001 году, в эпоху, когда широкополосное подключение ещё не стало стандартом. В то время игрокам приходилось следить, чтобы никто не поднимал телефонную трубку, иначе соединение разрывалось. (День, когда моя семья купила модем на 56K, был волшебным.)

«Он довольно недавно работал в компании и не был знаком с кодом», — рассказывает Миллер. «И возможно поэтому он изучал этот фрагмент более внимательно, чем остальные до него».

После удаления строки проблема исчезла. Игра снова стала плавной.

Так что же произошло? В наши дни компьютеры мощны, а Интернет быстр. Но в начале эпохи MMO всё было иначе, то есть играм приходилось идти на компромиссы.

«В сетевом коде Dark Age of Camelot была единственная строка, искусственно замедлявшая частоту передачи определённого типа данных клиентом и сервером», — объясняет Миллер. «Полагаю, основная цель этого заключалась в оптимизации загрузки сети, однако возможно это была часть системы, предназначенной для того, чтобы подключающиеся по дайлапу игроки были конкурентоспособны в PvP. Эта задержка была почти незаметна для игроков в Dark Age of Camelot, потому что боёвка игры была подстроена под стандартную ширину полосы и вычислительные мощности той эры. Только у очень малой доли игроков были системы, способные обрабатывать данные быстрее, чем они отправлялись и принимались».

В отличие от Warhammer Online, Dark Age of Camelot по-прежнему на плаву.

В процессе развития Dark Age of Camelot его сетевой код тоже эволюционировал и занимался такими функциями, как управление пиковыми значениями задержек, вход на серверы и другими задачами. Спустя десятилетие работы Dark Age of Camelot студия Mythic решила перенести тот же код в Age of Reckoning.

Как оказалось, он сломал функционал в совершенно неожиданном месте.

К тому времени, когда Mythic устранила проблему, большинство игроков вернулось обратно к World of Warcraft. Этот баг не был единственной причиной проблем Age of Reckoning, но он внёс в них свой вклад.

Миллер написала мне, когда я публично попросил в Twitter рассказать о других ужасных историях, даже если примеры касались не только таких нелепостей, как опечатки. Дискуссия совпала с обсуждениями в других кругах после инцидента с Colonial Marines, и мне хотелось бы поделиться самыми выдающимися историями.

Брайан Шарп: Буквально каждый раз, когда пишу слово «acquired», я испытываю посттравматический флешбэк с Deus Ex 2, в котором мы ошибочно назвали папку с ресурсами AquiredDataText, и не могли её переименовать. Мне пришлось три года подряд писать «aquired».

Трик Демпси: Прямо перед выпуском Red Dead Redemption: Undead Nightmare в итераторе скрипта динамитной приманки для зомби была раскомментирована строка, направлявшая акторов прямо на приманку. Поэтому она внезапно стала срабатывать и на самого Марстона (главного героя).
Неожиданный поворот сюжета!

Мэтт Лейси: Я выпустил игру на PSP (то есть без возможности её пропатчить), которая стопроцентно, если год был високосным…

Эйли: навеки оставшиеся в коде опечатки встречаются НЕВЕРОЯТНО часто. Кроме того, очень часто их сложно устранить, ведь чтобы не добавлять новых багов, нужно постоянно всё переименовывать. Именно поэтому в медицинском ПО, над которым я работаю, повсюду встречается слово Surigcal (вместо Surgical).

Эндрю Эйке: однажды я был на серьёзном демо-показе, нажал на кнопку со словами «сейчас вы увидите синий шар», и появился огромный зелёный шар. Я забыл применить функцию. Попробовал заболтать этот фейл, но никто не купился.

Дольф Зиглер: Несколько дней назад @cukiakimani сообщил мне, что игра Semblance внезапно начала работать при 19 кадрах в секунду.

Оказалось, что одна строка моего кода пожирает 41 FPS. Мне кажется, это совершенно восхитительно.

Trying his Best: У меня был проект, который требовалось закончить к полуночи, но он не работал правильно. Оставался всего час, я ждал ассистента преподавателя уже три часа и был готов расплакаться. Наконец ассистент пришёл, полминуты посмотрел на мой код и сказал изменить одну переменную в одной строке. Всё заработало идеально.

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

В детстве я был одержим Super Mario 64. Это была первая игра, в которую я играл на японском, спасибо магазину импорта, находившемуся рядом с кинотеатром, в который мы часто ходили. (Они брали с людей деньги за час игры в импортную копию первого 3D-платформера про Марио! И оно того стоило.) Когда мне наконец удалось приобрести домой собственную копию Super Mario 64, я был одним из того множества людей, которые в процессе сбора 120 звёзд и поиска Йоши недоумевали, почему так невероятно сложно проплыть через подводные кольца. И причина нашлась!

Винсент Киниан: Этот баг можно увидеть в нескольких играх про Марио. В Super Mario Bros. Лакиту должен был бросать шипастых черепах Spiny прямо в игрока, но из-за опечатки в коде этого не происходило. А вот этот баг в Super Mario 64: https://t.co/GddMkpMZh4.

Потрясающе. Непонятно, как видеоигры вообще существуют.

 
Источник

баги, создание игр

Читайте также