geektimes

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

  • суббота, 4 августа 2018 г. в 00:13:58
https://habr.com/post/418829/
  • Разработка игр
  • Отладка
  • Игры и игровые приставки



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

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, и мне хотелось бы поделиться самыми выдающимися историями.