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