Решил приоткрыть завесу над чем-то, что никому неинтересно: Почему ROM игры Dune 2 состоит из двух ROM-ов
Для любителей залипать есть видео-версия: Для остальных текстовая:
Что может пойти не так, когда у тебя кончается доступная память и неоткудавзять еще?
Именно с таким вопросом столкнулись программисты, ответственные запортирование игры Dune с платформы DOS наSega Mega Drive.
Порт, как и оригинал, разрабатывался на языке С, что предоставляло огромные возможности. Но когда разработчики столкнулись с тем, что памяти приставки недостаточно, чтобы разместить и геймплей, и титульный экран, и туториал, они решились на весьма необычный шаг:
Они разбили игру на два разных исполняемых файла, а потом просто на стадии линковки объединяли их в один рабочий исполняемый файл, который использовал одну и ту жепамять по разному.
С точки зрения программирования — это вопиющее нарушение, однако со стороны инженерии — гениальный ход на скорость.При запуске первого исполняемого образа мы видели титульную заставку, туториали брифинг, а вот за геймплей уже отвечал второй образ, который затирал использованную первым образом память и использовал уже ее.
Титульная заставка, туториал и брифинг содержались в первом исполняемом файле, геймплей - во втором. Получилось впихнуть невпихуемое.
Так разработчикам не пришлось думать о том, чтобы делать динамическое выделение памяти, что сильно сэкономило им время на разработку.
Если заглянуть в американский ROM игры, то в начале будет стандартный заголовок, как и в любой игре, со списком всей необходимой информации для корректной работы, а также номера сертификата, фирма производитель, имя приставки и так далее.
Что примечательно, так это если перейти по адресу 29AB4 мы обнаружим еще один такой же заголовок, что как раз и служит неопровержимым доказательством. В европейском РОМ-е второй заголовок находится по адресу 29AB0. Но вот в Немецкой версии игры второго заголовка нигде нет.
Слева заголовок игры понятный для приставки, Справа копия этого заголовка спустя определенное колличество байт. Копия не несёт никакой пользы, она просто есть в памяти.
Я знаю что вам тут же пришло на ум, но нет, если удалить первую часть РОМ-аигры и запускать только вторую — ничего работать не будет. Все потому что вовремя линковки все адреса менялись на корректные, и если вырезать части рома, то адреса смещаются и становятся некорректными. Функционировать такое ПО уже неспособно, ведь обращаясь заданными, процессор находит мусор и своё зависание.
Весьма неоднозначная ситуация, потому что то пространство занятое заголовком и повторным кодом инициализации приставки можно было использовать с большей пользой.
Также хочу сказать что в играх компании Electronic Arts была динамическая память и контролер которую ее выдавал для обьектов. Отражалось это в том, что в каждом уровне скажем Jungle Strike, размещение переменных в памяти всегда было разным. Для 64 килобайта памяти это сомнительная фича, но когда объем памяти требуемый для работы игры превышает доступную —это обычная практика.
Даже в Соник 2 Special Stage использовал одну память с уровнями обычной игры, из-за чего по выходу из бонуса выобнаруживали респавн всех колец на всёмуровне.
Дайте знать, если материал интересен, поделюсь еще некоторыми фактами из геймпдева под сегу.
Студия Funcom опубликовала геймплейный трейлер игры Dune Spice Wars.
Игра представляет собой своеобразный гибрид 4X-стратегии с классической RTS. Игровой процесс здесь будет медленнее, при этом важную роль будет играть не только развитие экономики и грамотный «обмен» армиями с противником, но и исследование, контроль территории, политика, шпионаж и другие элементы глобальных стратегических игр.
Предположительно в ранний доступ игра попадет уже в этом году.
Отличный комментарий!