Dune 2 на Sega состоит из двух игр? / gamedev :: sega mega drive :: Dune (Игра) :: консоли :: Игры

Dune (Игра) Игры sega mega drive консоли gamedev 

Dune 2 на Sega состоит из двух игр?

Решил приоткрыть завесу над чем-то, что никому неинтересно:
Почему ROM игры Dune 2 состоит из двух ROM-ов

Для любителей залипать есть видео-версия:


Для остальных текстовая:


Что может пойти не так, когда у тебя кончается доступная память и неоткудавзять еще?

Именно с таким вопросом столкнулись программисты, ответственные запортирование игры Dune с платформы DOS наSega Mega Drive.

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

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

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

1 J-JMj [ЕРШ! lili Л ■Щдд идиi ■Ч ill ТцпЩЩГ 1 г ■ [■J ■ ] иД ■ aiilii lild;JTvvW Щ§ ■,Dune (Игра),Игры,sega mega drive,консоли,gamedev
Dune (Игра),Игры,sega mega drive,консоли,gamedev

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

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

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

Что примечательно, так это если перейти по адресу 29AB4 мы обнаружим еще один такой же заголовок, что как раз и служит неопровержимым доказательством. В европейском РОМ-е второй заголовок находится по адресу 29AB0. Но вот в Немецкой версии игры второго заголовка нигде нет.

Offset(h ) 00 01 02 03 04 05 06 07 08 09 00000000 FF FF FF FA 00 00 02 00 00 00 00000010 00 00 02 00 00 00 02 00 00 00 00000020 00 00 02 00 00 00 02 00 00 00 00000030 00 00 02 00 00 00 02 00 00 00 00000040 00 00 02 00 00 00 02 00 00 00 00000050 00 00 02 00 00 00 02 00 00 00 00000060 00 00
Offset(h) 00 01 02 03 04 05 06 07 08 09 00029A90 74 05 72 7A 70 61 60 10 B6 00 00029AA0 05 83 14 83 52 8A 16 12 4A 03 00029AB0 04 08 4E 75 FF FF FF FA 00 00 00029AC0 00 00 02 00 00 00 02 00 00 00 00029AD0 00 00 02 00 00 00 02 00 00 00 00029AE0 00 00 02 00 00 00 02 00 00 00 00029AF0 00 00 02

Слева заголовок игры понятный для приставки, Справа копия этого заголовка спустя определенное колличество байт. Копия не несёт никакой пользы, она просто есть в памяти.

Я знаю что вам тут же пришло на ум, но нет, если удалить первую часть РОМ-аигры и запускать только вторую — ничего работать не будет. Все потому что вовремя линковки все адреса менялись на корректные, и если вырезать части рома, то адреса смещаются и становятся некорректными. Функционировать такое ПО уже неспособно, ведь обращаясь заданными, процессор находит мусор и своё зависание.

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

Также хочу сказать что в играх компании Electronic Arts была динамическая память и контролер которую ее выдавал для обьектов. Отражалось это в том, что в каждом уровне скажем Jungle Strike, размещение переменных в памяти всегда было разным. Для 64 килобайта памяти это сомнительная фича, но когда объем памяти требуемый для работы игры превышает доступную —это обычная практика.

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

Дайте знать, если материал интересен, поделюсь еще некоторыми фактами из геймпдева под сегу.

С уважением, Ваш пидор Segaman

P.s. пост сильно попердолило, исправил как смог


Подробнее
Dune 2 is two games combined into one? | Dune 2 на Sega состоит из двух игр? | #segamegadrive #dune2,Gaming,dune,dune 2,westwood,sega,sega mega drive,sega genesis,retro,virgin games,gamedev,m68k,console,Explanation of the phenomenon of two ROM's combined into one in the game Dune for Sega Mega Drive / Genesis. Обьяснение феномена двух РОМ-ов объединенных в один в игре Dune для Sega Mega Drive / Genesis. https://segaman.top/ #segagenesis #gamedev #m68k
1 J-JMj [ЕРШ! lili Л ■Щдд идиi ■Ч ill ТцпЩЩГ 1 г ■ [■J ■ ] иД ■ aiilii lild;JTvvW Щ§ ■

Offset(h ) 00 01 02 03 04 05 06 07 08 09 00000000 FF FF FF FA 00 00 02 00 00 00 00000010 00 00 02 00 00 00 02 00 00 00 00000020 00 00 02 00 00 00 02 00 00 00 00000030 00 00 02 00 00 00 02 00 00 00 00000040 00 00 02 00 00 00 02 00 00 00 00000050 00 00 02 00 00 00 02 00 00 00 00000060 00 00 02 00 00 00 02 00 00 00 00000070 00 00 02 00 00 00 02 00 00 00 00000080 00 00 02 00 00 00 02 00 00 00 00000090 00 00 02 00 00 00 02 00 00 00 000000A0 00 00 02 00 00 00 02 00 00 00 000000B0 00 00 02 00 00 00 02 00 00 00 000000C0 00 00 02 00 00 00 02 00 00 00 000000D0 00 00 02 00 00 00 02 00 00 00 000000E0 00 00 02 00 00 00 02 00 00 00 000000F0 00 00 02 00 00 00 02 00 00 00 00000100 53 45 47 41 20 47 45 4E 45 53 00000110 28 43 29 54 2D 37 30 20 31 39 00000120 44 55 4E 45 20 2D 20 54 48 45 00000130 45 20 46 4F 52 20 41 52 52 41 00000140 20 20 20 20 20 20 20 20 20 20 00000150 44 55 4E 45 20 2D 20 54 48 45 00000160 45 20 46 4F 52 20 41 52 52 41 00000170 20 20 20 20 20 20 20 20 20 20 00000180 47 4D 20 54 2D 37 30 32 34 36 00000190 4A 20 20 20 20 20 20 20 20 20 000001A0 00 00 00 00 00 0F FF FF 00 FF 000001B0 20 20 20 20 20 20 20 20 20 20 000001C0 20 20 20 20 20 20 20 20 20 20 000001D0 20 20 20 20 20 20 20 20 20 20 000001E0 20 20 20 20 20 20 20 20 20 20 000001F0 55 20 20 20 20 20 20 20 20 20 ОА 0В 0С 00 0Е 0Р Декодированный текст 02 00 00 00 02 00 Ияяъ. 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 17 Р4 00 00 02 00 ф — 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 49 53 20 20 20 20 БЕСА СЕМЕБ18 39 34 2Е 41 50 52 (С)Т- 70 1994.АРЕ 20 42 41 54 54 4С 01ШЕ - ТНЕ ВАТТ1_ 4В 49 53 20 20 20 Е РОВ АРРАК13 20 20 20 20 20 20 20 42 41 54 54 4С 01ШЕ - ТНЕ ВАТЛ 4В 49 53 20 20 20 Е РОВ АРРАК13 20 20 20 20 20 20 20 20 30 30 31 83 СМ Т- 70246 -001г 20 20 20 20 20 20 а 00 00 00 РР РР РР .яя.я...яяя 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 и
Offset(h) 00 01 02 03 04 05 06 07 08 09 00029A90 74 05 72 7A 70 61 60 10 B6 00 00029AA0 05 83 14 83 52 8A 16 12 4A 03 00029AB0 04 08 4E 75 FF FF FF FA 00 00 00029AC0 00 00 02 00 00 00 02 00 00 00 00029AD0 00 00 02 00 00 00 02 00 00 00 00029AE0 00 00 02 00 00 00 02 00 00 00 00029AF0 00 00 02 00 00 00 02 00 00 00 00029B00 00 00 02 00 00 00 02 00 00 00 00029B10 00 00 02 00 00 00 02 00 00 00 00029B20 00 00 02 00 00 00 02 00 00 00 00029B30 00 00 02 00 00 00 02 00 00 00 00029B40 00 00 02 00 00 00 02 00 00 00 00029B50 00 00 02 00 00 00 02 00 00 00 00029B60 00 00 02 00 00 00 02 00 00 00 00029B70 00 00 02 00 00 00 02 00 00 00 00029B80 00 00 02 00 00 00 02 00 00 00 00029B90 00 00 02 00 00 00 02 00 00 00 00029BA0 00 00 02 00 00 00 02 00 00 00 00029BB0 00 00 02 00 53 45 47 41 20 47 00029BC0 20 20 20 20 28 43 29 54 2D 37 00029BD0 2E 41 50 52 44 55 4E 45 20 2D 00029BE0 41 54 54 4C 45 20 46 4F 52 20 00029BF0 53 20 20 20 20 20 20 20 20 20 00029C00 20 20 20 20 44 55 4E 45 20 2D 00029C10 41 54 54 4C 45 20 46 4F 52 20 00029C20 53 20 20 20 20 20 20 20 20 20 00029C30 20 20 20 20 47 4D 20 54 2D 37 00029C40 30 30 AA 55 4A 20 20 20 20 20 00029C50 20 20 20 20 00 00 00 00 00 0F 00029C60 00 FF FF FF 20 20 20 20 20 20 00029C70 20 20 20 20 20 20 20 20 20 20 00029C80 20 20 20 20 20 20 20 20 20 20 ОА 0В ОС 0D 0Е 0F Декодированный текст 6D 08 В6 01 6Е 04 t. rzpa' Л.ш.Ц.п. 66 ЕС 20 49 4С DF . г . fRJb. . J . fM 11_Я 02 00 00 00 02 00 ..Мияяяъ 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 17 F4 Ф 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 02 00 00 00 02 00 45 4Е 45 53 49 53 SEGA GENESIS 30 20 31 39 39 34 (С)Т-70 1994 20 54 48 45 20 42 .APRDUNE - THE В 41 52 52 41 4В 49 ATTLE FOR ARRAKI 20 20 20 20 20 20 S 20 54 48 45 20 42 DUNE - THE В 41 52 52 41 4В 49 ATTLE FOR ARRAKI 20 20 20 20 20 20 S 30 32 34 36 20 2D GM T- 70246 - 20 20 20 20 20 20 00CUJ FF FF 00 FF 00 00 ЯЯ . я . . 20 20 20 20 20 20 . ЯЯЯ 20 20 20 20 20 20 20 20 20 20 20 20
Dune (Игра),Игры,sega mega drive,консоли,gamedev
Еще на тему
Развернуть
Куда ты пробелов половину проебал?
они сами. исправил
Другое дело.
Пиши больше. ДюМне такое нравится)
K1l0 K1l0 27.02.202202:22 ответить ссылка 0.1
Первый раз вижу, чтобы кто-то так захватывающе описывал механизм оверлеев.
kotan88 kotan88 27.02.202204:35 ответить ссылка 0.8
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
The Battle for Arrakis Contra: Hard Corps (SEGA MD) г' " '
UV-1: l_4_L
\ .1 du. i '. , i ч
Щтм Лил
THS MAVA" *'*.NTU„
/71EGI*. PmyE
подробнее»

песочница sega mega drive 2 консоли Игры

г' " ' UV-1: l_4_L \ .1 du. i '. , i ч Щтм Лил THS MAVA" *'*.NTU„ /71EGI*. PmyE