Зачем Morrowind незаметно перезагружала Xbox при переходе из одной локации в другую

Иногда перезагрузка — самое простое решение.

В интервью по случаю объединения Xbox и Bethesda Тодд Говард рассказал, что The Elder Scrolls III: Morrowind во время перехода из локации в локацию незаметно перезагружала Xbox. Разработчик из Nightdive Studios и автор YouTube-канала Димитрис Яннакис опубликовал видео, в котором выяснил, зачем нужна была вся эта процедура. Он использовал девкит Xbox, чтобы посмотреть, как система работает на самом деле.

Также автор блога «Некстджен и Усиление+» Юрий Крупенин в своём твиттере развёрнуто объяснил, зачем разработчикам Morrowind пришлось пойти на этот шаг. Пересказываем содержание видео и треда.

У оригинальной консоли Xbox было не очень много оперативной памяти (RAM) — всего 64 Мбайт. На самом деле, этого было достаточно для корректной работы игр. Но из-за небольшого объёма и фрагментации памяти возникали некоторые проблемы.

Когда RAM свободна, данные записываются последовательно друг за другом, образуя цепочку. При удалении какого-либо фрагмента освобождается место — соответственно, между ближайшими участками данных появляется пробел. Вся проблема в том, что освободившегося места может быть недостаточно, чтобы записать новые данные. Чтобы убрать этот пробел, нужно запустить процедуру реаллокации, но на это нужны дополнительные ресурсы.

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

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

Яннакис выяснил, что вся эта схема запускалась при помощи процедуры под названием XLaunchNewImage — части API Xbox, которую можно использовать для тихой перезагрузки консоли и запуска исполняемого файла.

Как отметил Яннакис, консоль перезагружалась ещё и в моменты старта новой игры
Как отметил Яннакис, консоль перезагружалась ещё и в моменты старта новой игры

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

369369
99 комментариев

Комментарий недоступен

239
Ответить

Так здесь костыль бокса

25
Ответить

А можно ссылочку на шлем вагон? Как то не нагуглилось, а интересно

Ответить

Шлём вагон - это же ещё в халф-лаф было

1
Ответить

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

Ответить

Я.... я же читал это уже, прямо здесь, на этом сайте

41
Ответить