Оставьте в покое движок

Коротко попробую рассказать, почему говорить «старый движок Fallout 76» — некорректно.

О движке

Движок - это набор инструментов для разработки (редактор кода, инструменты импорта и экспорта, визуальные редакторы свойств, упрощённый рендерер игровой сцены и т.д.), плюс рантайм (runtime) - всё то, что будет работать, когда сама игра запущена. Примерное представление может дать архитектура движка Tombstone (бывшего C4):

Сам движок Creation Engine пережил уже три поколения (два первых Bethesda лицензировала, а третье - уже собственная разработка):

  • NetImmerse (первое поколение): Morrowind
  • GameBryo (второе поколение): Oblivion, Fallout 3, Fallout: New Vegas
  • Creation Engine (третье поколение): Skyrim, Fallout 4, Skyrim Special Edition

О старом коде

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

Например, математические функции (вектора, матрицы, цвета), менеджер памяти и менеджер ввода с клавиатуры, мыши, геймпада можно было и не переписывать: от того, что появился DirectX 12, функция быстрого расчёта косинуса не изменилась - как не менялась многие годы.

Есть впечатление, что не особенно были изменены подсистемы упаковки ресурсов (esp/esm), анимации, и, судя по проблемам с зависимостью скорости персонажей от FPS, работа в многопоточном режиме - но это на уровне догадок.

Об изменениях в движке

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

Очевидно, что изменения в движок вносились: как минимум, новый рендеринг был и в Oblivion, и в Skyrim, и в Fallout 4, появился Radiant AI (если это движковая фича), добавлен сетевой код Fallout 76.

О багах и "ленивых разработчиках"

Почему появляются баги? Не от лени, нет.

У разработчика всегда есть дедлайн (deadline) - дата, когда определённый набор функций должен быть готов для использования другими людьми. Некоторые задачи решаются быстрее плана, некоторые медленнее, но в целом, есть тенденция к затягиванию сроков разработки, даже если вся команда будет работать по 10 часов 7 дней в неделю.

Когда дейдлайн уже близко, а всю работу в срок не выполнить, начинается фичакат (feature cut) - часть задач просто волевым решением исключается из списка того, что нужно сделать ("это мы уже не успеем, это маловажно, а вот это точно нужно доделать"). Альтернатива - перенести дату релиза, но для этого нужны дополнительные финансы сверх бюджета (на з/п персонала студии, на маркетинг в течение этого периода и т.д.) - издатель может на это согласиться, а может и нет.

Отсюда и все недоработки - студии стараются выпускать интересные в определённых аспектах игры в сжатые сроки и с ограничением по бюджету, поэтому наибольший приоритет имеют именно ключевые механики и совсем уж грубые недоработки, всё остальное правится в патче первого дня, в DLC, или не правится вовсе. Можно проиллюстрировать цитатой из четвёртого издания Game Coding Complete:

There’s nothing like having the rug pulled out from underneath you because a bug that you intended to fix is marked “won’t fix” by the team leadership. You might even have the code fixed on your machine, ready to check in for the next build. Instead, you get to undo the change. The final straw is when some critic on the Internet bashes the programmers for writing buggy code and even points out the very bug that you intended to fix. Most programmers I know are perfectionists and take a lot of pride in their work, and because of that they lose sleep over bugs. As evil as this seems, making those decisions is as tough as knowing your code has a bug that you aren’t allowed to fix. Believe me, I’ve done that a few thousand times.

Mike McShaffry, Founder, Principal Engineer at ArtCraft Entertainment (ex. dev at Ultima Series)

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

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

Майк Макшаффри, Основатель и ведущий инженер ArtCraft Entertainment, один из разработчиков серии Ultima

Резюмируем

  • Любые вносимые изменения в движок стоят денег и должны быть оправданы. Пока движок морально не устарел и проще его модернизировать, чем переписывать (благо, что зачастую требуется именно обновление рендеринга) - он будет использоваться.
  • Не все проблемы решаются на техническом уровне.
130
281 комментарий