Найти в Дзене
Mega Drive

Genesis Plus GX Wide: адаптируем игры для Sega Mega Drive под широкий экран

Оглавление

Игры для 16-битных приставок Sega Mega Drive разрабатывались под стандартное для того времени соотношение сторон экрана 4:3. Первые широкоэкранные телевизоры начали появляться в середине 90-х, но были экзотикой.

Теперь, если вы не хардкорный ретрогеймер, предпочитающий ЭЛТ, все экраны стали широкими, и неплохо бы использовать дополнительное пространство. Особенно полезно это для серии Sonic, где главный герой перемещается с большой скоростью, и увеличение угла обзора даёт возможность вовремя заметить какую-нибудь бяку. Конечно, Sonic, особенно вторую часть, давно разобрали по кусочкам и модифицировали все, кому не лень. Но что насчёт остальных игр.

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

В RetroArch помимо ядра для эмуляции MD Genesis Plus GX есть его собрат с говорящим названием Genesis Plus GX Wide. Всё достаточно просто. Ставим это ядро, перед запуском образа выбираем Привязать ядро, получаем широкоэкранный хак. Конечно, в реальности не всё так просто и универсально — всё зависит от реализации скроллинга тайлов в конкретной игре, так что какие-то игры просто не запустятся или будут выдавать заметные артефакты, но попробовать точно стоит!

Как работает Genesis Plus GX Wide?

Эта магия стала возможной благодаря особенностям работы Mega Drive (другие 2D-консоли использовали похожие принципы) с графикой. Детальное описание можно найти в статье Sega Genesis/Mega Drive VDP graphics guide, вот главное:

Графический процессор работает с тайлами размером 8×8 пикселей для фона и 4×4 для спрайтов. Тайлы привязываются к карте тайлов. В наиболее часто используемом режиме под названием H40 экран состоит из 40 колонок тайлов (количество рядов разное в NTSC и PAL). Для фона используется два слоя с независимым друг от друга скроллингом — Plane A и Plane B (для создания эффекта собственно фона и переднего плана).

Genesis Plus GX Wide позволяет отображать дополнительные колонки тайлов, находящиеся обычно за пределами видимых 40 колонок режима H40. По умолчанию эмулятор дорисовывает 10 колонок, это значение можно настраивать в пределах от 0 до 22. Параметр настраивается в меню Опции ядра -> Video -> Extra columns in H40 for widescreen

-2

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

От скучной теории (к тому же это, в основном, мои дилетантские гадания на кофейной гуще) перейдём к практике!

Пробуем игры

При появлении артефактов скроллинга я сперва уменьшал Extra columns до 2, потом постепенно увеличивал до 4 и так далее. Но из-за спешки я не везде успевал добраться до максимального значения.

Disney's Aladdin

При стандартных 10 колонках сразу же видны артефакты — в крайних колонках выводятся явно не те тайлы. На 4 всё становится хорошо:

-3
-4

Streets of Rage 2

Extra columns = 4 работает замечательно. Дальше иногда некорректно выводится фон справа. При увеличении до 10 появляются артефакты отображения спрайтов.

-5
-6

Mortal Kombat II

Работает на 10, больше не пробовал.

-7
-8

Shinobi III

Работает на 12, больше не пробовал. В некоторых местах есть неизбежные проблемы, связанные с обработкой спрайтов (см. ниже).

-9
-10

Первые 5 секунд игры — ещё не показатель. Разумеется, как и в большинстве игр, в начале и конце уровней будут «ямы» слева и справа, соответственно, в тех местах, где карта фоновых тайлов просто заканчивается.

На некоторых уровнях всплывают особенности обработки спрайтов. Например, на уровне с лошадью противники-ниндзя выбегают справа, но в широкоэкранной эмуляции (при дополнительных колонках > 8) заметно, что они появляются чуть левее, просто из ниоткуда.

-11

В лифте не отрисовываются достаточно далеко стены шахты. В итоге ползущие солдаты появляются подвешенными среди какой-то черноты.

-12

Далее буду вставлять только широкоэкранные скриншоты.

Robocop vs Terminator. Пришлось урезать до 4 колонок, чтобы избавиться от фоновых артефактов.

-13

Shining Force. Неудача. Либо слева, либо справа всегда мусор, а в Shining Force II — со всех сторон. С другой стороны, широкий экран тут не особо нужен с учетом пошаговости, так как изучать поле нужно только в самом начале боя.

-14

Golden Axe III. Хорошо работает при 10.

-15

Jungle Strike (и другие «страйки»). Фон в дополнительных колонках неправильно скроллится при перемещении по диагонали.

-16

Как же Sonic? Sonic 1 и 2 требуют патченых ромов. Сделать это можно тут. Попробовал Sonic 2 с 16 дополнительными колонками — работает, казалось бы, идеально. До первого бонусного уровня. Это было вполне ожидаемо, так как, очевидно, реализация псевдо-3D требует большой изобретательности при обращении с графикой.

-17

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

-18

Тут благодаря популярности есть много альтернативных решений. Проект Sonic 2 Community's Cut состоит из модифицированного ядра Genesis Plus GX (не знаю, имеет ли он отношение к Genesis Plus GX Wide) и модифицированного рома от Sonic 2, где помимо широкоэкранности добавлено ещё много различных улучшений.

Есть и полный ремейк — Sonic 2 HD, который всё ещё не завершён. Наверняка и другие ремейки есть, но это уже требует других платформ.

Для Sonic 3 аналогичного решения я не нашёл, но вместо этого есть замечательный проект Sonic 3 A.I.R.

Вывод

Genesis Plus GX Wide — гениальное изобретение, позволяющее в буквальном смысле «расширить кругозор». Теперь буду использовать его вместо обычного Genesis Plus GX. Вылезли артефакты? Уменьшаем Extra columns или вовсе выставляем в 0, возвращаясь к каноничному рендерингу в 4:3. В крайнем случае есть обратная совместимость по сохранениям игр с обычным Genesis Plus GX. К сожалению, такой широкий скроллинг не работает, в числе прочих, с играми серии Strike, где он был бы крайне полезен.

#segamegadrive #retroarch #segagenesis