← Назад

Как в Need for Speed: High Stakes был расширен лимит машин

2026-10-01 · 7 просмотров · ★ 5

Как в Need for Speed: High Stakes был расширен лимит машин

Обобщил информацию о расширении лимита машин для NFS4: High Stakes

Как в Need for Speed: High Stakes был расширен лимит машин

Одним из самых неприятных ограничений Need for Speed: High Stakes долгое время оставался лимит автомобилей. Игра позволяла иметь примерно пять десятков управляемых машин. Причём одно место фактически было зарезервировано за Knockout Truck, который нельзя было просто заменить обычным пользовательским автомобилем.

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

Исследование показало, что ситуация гораздо интереснее.

Лимит оказался не таким фундаментальным

Сама игра умеет находить и загружать список файлов автомобилей без жёсткого ограничения в 50 записей. Проблема начинается позже.

Внутри NFS4 существует несколько таблиц, в которых хранятся сведения о загруженных автомобилях, их названиях, цветах, доступности и других параметрах. Именно многие из этих таблиц были рассчитаны на 50 машин.

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

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

При этом трафик, полицейские автомобили и вертолёт устроены отдельно. Их не пришлось переносить в новое пространство для обычных машин. Так что расширение списка пользовательских автомобилей не отнимает места у трафика или полиции (ну я на это надеюсь).

Первые шаги за пределы 50 машин

Первой практической целью было не сразу получить сотни автомобилей, а заставить игру уверенно пересечь старую границу.

Появилась промежуточная версия с поддержкой 64 машин. Основные таблицы были расширены, а места игры, которые считали 49 или 50 максимальным индексом, адаптированы к новому диапазону.

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

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

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

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

Такие ошибки постепенно находились во время реальных запусков и исправлялись.

Гараж оказался отдельным ограничением

Следующим серьёзным препятствием стал гараж.

Даже если игра могла загрузить больше автомобилей, внутренние структуры меню гаража всё ещё были рассчитаны примерно на 50 машин (точнее 51). Поэтому расширить только каталог моделей было недостаточно.

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

Хотя позже я подумал что иметь больше 50 машин в гараже в общем то и не обязательно :)

Интересно, что сам формат данных сохранения потенциально позволяет хранить больше записей. На данный момент практическим ограничением является именно новый лимит интерфейса гаража в 512 машин.

Проблема названий

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

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

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

Серийные номера оказались сложнее индексов

Это стало одной из наиболее важных проблем всего расширения.

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

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

Поэтому обработка серийных номеров была существенно переработана. Текущая версия хранит данные для 512 моделей и умеет обнаруживать нулевые или повторяющиеся значения, назначая вместо них свободные номера. Главное изменение состоит в том, что серийный номер больше не должен неявно восприниматься как номер модели.

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

Искусственный интеллект тоже имел собственный предел

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

Эти структуры тоже были рассчитаны на небольшое количество машин.

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

Однако именно эта часть всё ещё требует серьёзного теста. Нужно проверить не только несколько десятков автомобилей, но и намеренно поместить в один класс очень большое их количество (пилотный тест с 200+ F50 вроде дает надежду на то что это работает).

Отдельная проблема карьеры

Карьера оказалась ещё одним местом, где старые предположения о количестве машин проявились не сразу.

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

Формат внутреннего списка соперников был расширен так, чтобы он мог корректно представлять индексы от 0 до 511. При этом необходимо было сохранить дополнительную информацию о варианте автомобиля и его характеристиках.

На уровне кода эта проблема уже решена. Теперь требуется проверить крайние случаи непосредственно в игре, особенно автомобили с индексами около 255, 256 и 511, а также большие полностью заполненные наборы соперников.

Цвета и ресурсы автомобилей

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

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

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

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

Звук двигателя

Расширение затронуло и звук.

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

Отдельно существуют таблицы громкости. Они тоже были рассчитаны на исходный набор автомобилей и теперь расширены до 512 записей. Для оригинальных машин сохранены значения из оригинальной таблицы игры, а для дополнительных используется единая выбранная громкость: 100 для автомобиля игрока и 50 для машин соперников (тут есть еще на подумать включать ли эти значения в car.viv или фиксированого значение достаточно?).

Есть один известный граничный случай. Серийные номера 512 и выше уже находятся за пределами этой таблицы и используют резервное значение. Поэтому работа с такими номерами пока не считается полностью возможной.

Повлияют ли 512 машин на производительность?

У меня сначала возникло ощущение что производительность упала, в какой то момент были артефакты в 3D картинке. Возможно это было связано с отдельной машиной "Mercedes SL30" после ее удаления артефактов больше не наблюдал, но это пока нуждается в независимой проверке.

Так же было опасение, не начнёт ли игра каждый кадр перебирать весь каталог машин?

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

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

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

От 49 к 512

На текущем этапе результат уже значительно превосходит первоначальную цель.

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

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

Но здесь важно разделять два понятия.

Игра уже подготовлена для работы с каталогом до 512 моделей. Это ещё не означает, что была проведена полноценная игровая сессия именно с 512 установленными автомобилями (реально проверил только около 70 реальных разных модов авто + ~250 копий Ferrari F50).

Что ещё предстоит проверить

Главная оставшаяся задача состоит в стресс-тестировании.

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

Нужны полноценные тесты звука дополнительных автомобилей и крайних серийных номеров. Также необходимо ещё раз проверить обычный трафик, все полицейские автомобили, режимы Pursuit и High Stakes и сцены с вертолётом. Хотя эти модели используют отдельные пространства и не занимают новые 512 мест, часть общего кода теперь изменилась.

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

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

© 2026 nfs4.com. Копирование материалов без письменного разрешения запрещено.

Правила цитирования и использования

Комментарии

★ 5 · 0 комментариев

Пока нет комментариев.

Войдите, чтобы оставить комментарий и оценить. Войти