Как одновременно работать над основной игрой и ремастером
Gamedev
Владимир Семыкин

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

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

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

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

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

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

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

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

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

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

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

{ "author_name": "Владимир Семыкин", "author_type": "editor", "tags": ["\u0440\u0430\u0437\u0431\u043e\u0440","theelderscrolls"], "comments": 99, "likes": 355, "favorites": 190, "is_advertisement": false, "subsite_label": "gamedev", "id": 708810, "is_wide": true, "is_ugc": false, "date": "Tue, 20 Apr 2021 17:28:57 +0300", "is_special": false }
0
99 комментариев
Популярные
По порядку
Написать комментарий...

Правительственный хичхакер

232

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

Ответить
20

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

Ответить

Правительственный хичхакер

Bourbon
16

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

Ответить
62

Так Говард ничего не придумывал. Это базовая функция из API Бокса. Он просто озвучил, что они так делали. При этом если посмотришь видео, то узнаешь, что сам автор видео давно раскопал эту возможность и использовал её в своем опенсорсном порте Куэйк 2 на первый Бокс. И там же он говорит, что скорее всего этим пользовались десятки других игр помимо Морровинда, так как проблема фрагментации памяти и связанной с этим нехваткой памяти, в те годы была одной из главных проблем тогдашних консолей

Ответить
5

проблема фрагментации памяти и связанной с этим нехваткой памяти, в те годы была одной из главных проблем тогдашних консолей

А ведь у Xbox объем RAM аж вдвое больше, чем у PS2. Как там приходилось выкручиваться, не представляю.

Ответить
16

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

Ответить
–9

ибо xbox это винда, а винда это приговор 

Ответить
55

Модный приговор?

Ответить
5

Легендарный. Ибо легаси код

Ответить

Правительс

Andrey
0

Ты первый раз так пошутил? У меня просто сейчас либо произошло самое сильное и аутентичное дежавю в жизни, либо я видел абсолютно такой же комментарий от тебя.

Ответить
1

Конкретно с этой фразой впервые. Но в целом с Гордоном не первый раз)

Ответить

Правительс

Andrey
2

Тогда жуть. Страшна!

Ответить
9

Очень просто выкрутились - просто не стали делать порт

Ответить
8

На PS2 не приходилось выкручиваться, потому что там не было морровинда.

Ответить
3

не совсем так, у хбокс было 64 Мб общей памяти, а у пс2 было 32 Мб ОЗУ, 4 Мб видеопамяти, 2 Мб у IOP и 2 Мб у аудиочипа

Ответить
8

Буквально в твите об этом написано. У девкита первого бокса было 120 мегабайт памяти, а у ретейла - всего 64. Естественно, разработчикам нужно было выкручиваться на таком маленьком объёме памяти

Ответить

Правительственны

Bourbon
0

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

Ответить
19

Тут уже была статья об этом, беседке сами майки помоги разрулить проблему
 В качестве одного из ранних примеров сотрудничества Xbox и Bethesda Тодд Говард вспомнил о том, как авторы консоли «научили их отличным трюкам» — как выяснилось, TES III: Morrowind незаметно для игрока перезагружала первый Xbox прямо во время загрузок.

Ответить
2

Насчёт бокса не знаю, но на Wii такая же ситуация была - там даже при переключении приложений требовалась перезагрузка системы, из-за мизерного объёма памяти в 90 мегабайт. И это то же поколение, что и ПС 3, где было 256 мегабайт

Ответить
1

Не только. И автор об этом рассказывает в видео

Ответить
1

Я 100% помню что была как минимум ещё 1 игра, которая ребутала бокс

Ответить
0

Thief 3 скорее всего, там специально делали крошечные локации с загрузками

Ответить
0

Deus Ex Invisible War тоже использует перезагрузки, причем они остались в ПК версии - игра буквально перезапускается при каждом переходе из уровня

Ответить
2

Который беседка использовала, чтобы сделать свой костыль

Ответить
1

Ну он хотя бы грамотный ,

Ответить
0

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

Ответить
0

Странно - а у меня нагуглилось.
Интересно космические корабли в старфилде будут так же реализованы?!

Ответить
14

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

Ответить
0

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

Ответить
1

Нет. Это костыль именно из Fallout 3.

Ответить
0

Не только там применяли такой избитый подход.

Ответить
0

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

Ответить
41

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

Ответить
15

Привыкай. Скоро по второму кругу пойдут посты про киберпанк

Ответить
0

Я уже мемчики пускаю по второму кругу, заходят на ура! 

Ответить
11

Раз в год публикуют

Ответить
19

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

Ответить
5

На десятке Морровинд куда стабильнее, чем был на XP таки. xD

Ответить
0

yes

Ответить
0

А с MGE XE он еще перестаёт смахивать на Сайлент Хилл.

Ответить
–8

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

Ответить
13

Может ты все же попробуешь бить врагов оружием которым умеешь вооевать? 
ну там выбрать на старте короткие клинки и тыкать в Кваму разведичка - ножом?  Ну там знак созвездия - ВОин? Даст + 10 п к атаки. 

что игра все таки слишком устарела...

is too young to die
Вообще ни разу не мешает играть. Просто некоторые не поняли фишку механики . 

Ответить
0

Я в начале купил топор, иду и вижу какую-то личинку пытаюсь её убить и это еле получилось!! Второю убил с ОГРОМНЫМИ усилиями+пробовал разные заклинания такой же ужас, попробовал другим оружием убить какого-то бандита-попал один раз и он меня убил. Боевка невозможная. почти в любой даже старой игре все работало бы +-сносно, но здесь все слишком коряво
А я искренне хотел пройти

Ответить
3

Это ты ещё боевку первой Готики не видел)

Ответить
1

... Да ладно удобно же зажимаешь левую кнопку, стрелку вперед стрелочками в лево вправо управляешь атаками ^_^
На самом деле 1я готика мне дальже больше чем вторая понравилась))

Ответить
3

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

Ответить
–1

чувак жирно троллит а ты повелся

Ответить
0

На самом деле я и сам считал когда то так же - а потом кааак понял и вкатился в морровинд.
Когда я впервые открыл морровинд - меня убил квама 
Я игру закрыл - и не открывал 3 месяца )))

Ответить
4

Я говорил про конкретно запуск и работу без падений и багов, что Morrowind всё ещё прекрасно запускается и работает с ванили, с оригинального exe'шника.

В отличии от третьего Фолыча, который:
1. хрен запустишь без гайдов
2. изредка падает

Ответить
0

У меня с фолычем таких проблем не было)

Ответить
2

Каких там у тебя проблем не было?

Третий Фолыч, как минимум, точно не запустится без сервиса Games for Windows LIVE, который не устанавливается Steam'ом и который уже стёрт с сайта Microsoft, так что ищи гуглом зеркала.
И во вторых, в десятке — единственной *актуальной* Windows он точно так же  не запустится без установленного режима совместимости с Windows XP.

Это железно, 100%. Без этого он не работает. Это уже значит, что третий Фолыч не запускается без легкого пердолинга. В отличии от Morrowind.
 
Проблем у него не было, фантазёр.

Ответить
3

GoG версия без gfwl и работает абсолютно без проблем, если не считать глюки после очень долгой игровой сессии ( игрок начинает игнорировать коллизию объектов, лечится перезагрузкой)

Ответить
1

Да что ж вы такие ту... гие-то, а?

Я говорил про конкретно запуск и работу без падений и багов, что Morrowind всё ещё прекрасно запускается и работает с ванили, с оригинального exe'шника.

Позволь я отдельно повторю самое главное, возможно ты не заметил мою мысль, ведь я всего лишь трижды, блин, её повторил:
с ванили, с оригинального exe'шника, с ванили, с оригинального exe'шника,с ванили, с оригинального exe'шника,с ванили, с оригинального exe'шника,с ванили, с оригинального exe'шника,с ванили, с оригинального exe'шника,

с ванили, с оригинального exe'шника

с ванили, с оригинального exe'шника

с ванили, с оригинального exe'шника

с ванили, с оригинального exe'шника

с ванили, с оригинального exe'шника

В GOG лежит пропатченная версия, вылеченная от GFWL, да ещё с патчем от комьюнити на потребление оперативки. Это УЖЕ не оригинальная ванильная игра 2008 года.

Morrowind 2002 года всё ещё можно установить с дисков 1С и он прекрасно запустится, а Fallout 3 — нет.

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

Ответить
1

ну версия  движка фола ближе к обливиуну чем к море. хотя скелет один и тот же.

Ответить
0

Какая именно часть?

Ответить
0

третьим Фолычем пришлось в мануалы сообщества Steam ползать.

Ответить
0

Эм... Как минимум, в 10'ке — единственной сейчас актуальной Windows, ванильный третий Фолыч не работает без режима совместимости с Windows XP и без установленного Games for Windows LIVE. 

Это как минимум. Как я должен без гугла и без руководства сообщества понять, что мне делать? В каком месте я, кхм, "спиздел"?

Ответить
10

Отмечу, что морровинд на оригинальном иксбоксе шел в 60 фпс, а ты и дальше наслаждайся своим кинематографичным геймплеем.
https://www.youtube.com/watch?v=nhP49PlN6HY&t=1461s&ab_channel=JohnGodGames

Ответить
4

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

Ответить
16

Ещё немного и вы изобретёте garbage collector :)

Ответить
5

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

Ответить
1

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

Ответить
5

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

Ответить
0

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

Ответить
0

Тодд Говард не профессиональный погроммист, но других программистов у них не было. В студии на тот момент оставалось человек 6. Вот ему и пришлось делать все ручками самостоятельно.

Ответить
0

На недавних погромах, думаю, он всё-таки стал профессионалом.

Ответить

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

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

3

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

Ответить
0

что значит свою кучу и менеджер памяти? куча - это вообще структура данных как хранятся объекты. 
проблема была в том, что объекты через время начинали храниться разрозненно. когда они храняться однородно (т.е. один объект занимает строго последовательные ячейки), то доступ к ним значительно быстрее. реаллокация это довольно трудоемкое занятие. так что оказалось, что реально проще все выгрузить из памяти. 
сейчас уже вряд ли таким занимаются, когда в каждом компе стоит по 16+ гб. я не слышал про проблемы реаллокации давно.

Ответить

Книжный теркин30см

hdg
6

куча - это вообще структура данных как хранятся объекты.

Ну не надо так категорично, как будто термин "куча" в другом смысле не применяется уже 45 лет подряд :)

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

Ответить
1

Ну вот на картинке из примера не получилось выделить память, т. к. нету такого куска. Если городить свой менеджер памяти, то вы ему говорите, мол my_malloc(6), а он внутри сам уже аллоцирует по доступным блокам, а вы в коде работаете со всем этим, как будто это один кусок.
Но это, всё равно, только от ошибок аллокация спасёт. Даже убрав эти ошибки, появится проблема с тем, что данные не одним куском, что будет проблемой для кешей, например.

Ответить
2

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

Ответить

Научный танк88

hdg
0

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

Ответить
0

Та же JVM во время каждой сборки мусора перемещает объекты, как между фрагментами кучи, соответствующими разным поколениям, так и внутри фрагментов-поколений, чтобы кучу уплотнить.

Shenandoah это пытается исправить)

Ответить
2

Написали же в тексте "Чтобы убрать этот пробел, нужно запустить процедуру реаллокации, но на это нужны дополнительные ресурсы." Да, так и делают менеджерят память, выгружая ненужное и фрагментируя то что осталось, но это требует ресурсов.

Ответить

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

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

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

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

0

Мне вот интересно, в чем смысл поста, если Тодд примерно то же самое рассказал во время беседы, только без терминов, которые тут большинство и так не поймет?)

Ответить
21

Новость с Тоддом как раз для обычных юзеров, а в /gamedev, всё же, предположительно, сидят те, для кого эти термины не пустой звук)

Ответить

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

0

Здесь подробнее уже. 

Ответить
0

Он только сказал, почему так делали, а MVG выяснил, как это происходит.

Ответить

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

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

1

То есть формально можно было у оперативной памяти питание отключить-включить и получить тот же эффект?

(ну кроме того что по всей видимости у разработчиков видеоигр к этой операции доступа не было)

Ответить
1

Поддержки такой фичи может не быть на уровне железа, т.к. как ведёт к удорожанию. 

Ответить
0

Надо еще как то заставку держать

Ответить
1

Комментарий удален по просьбе пользователя

Ответить
1

Было уже, не?

Ответить
0

Интересно, как долго шли загрузки с такими трюками.

Ответить
1

Очень. Грузилсь ось хбокс а потом грузился уровень. От чего каждая 3-5 загоузка была на 10 минут 

Ответить
0

С ума сойти.

Ответить
0

В статье написано - незаметно подгружалась локация. Как можно не заметить, когда игра на 5-10 минут зависает? Или статья лжива?

Ответить
0

"Незаметно" это не в том плане что незаметно для игрока. А в том смысле что игрок в это время видел экран загрузки локации, а не загрузки ХБОКС. 

Ответить

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

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

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

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

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

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

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

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

0

Комментарий удален по просьбе пользователя

Ответить

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

0

Помню начинал играть в Морру на ведре с 128 оперативы и действительно приходилось перезапускать игру каждые полчаса :C

Ответить

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

0

Тодд гений! :)

Ответить
0

Xbox создали разве не для рекламы DirectX ? 

Ответить
0

Не читаю статью, скорее всего выгружала кэш?

Ответить
0

Костыльмейстер.

Ответить

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

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

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

Комментарии

null