Игры для 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
В общем, работоспособность такого хака будет зависеть, грубо говоря, от того, как игра работает со скроллом фона и обрабатывает ли она тайлы, находящиеся за пределами стандартного кадра.
От скучной теории (к тому же это, в основном, мои дилетантские гадания на кофейной гуще) перейдём к практике!
Пробуем игры
При появлении артефактов скроллинга я сперва уменьшал Extra columns до 2, потом постепенно увеличивал до 4 и так далее. Но из-за спешки я не везде успевал добраться до максимального значения.
Disney's Aladdin
При стандартных 10 колонках сразу же видны артефакты — в крайних колонках выводятся явно не те тайлы. На 4 всё становится хорошо:
Streets of Rage 2
Extra columns = 4 работает замечательно. Дальше иногда некорректно выводится фон справа. При увеличении до 10 появляются артефакты отображения спрайтов.
Mortal Kombat II
Работает на 10, больше не пробовал.
Shinobi III
Работает на 12, больше не пробовал. В некоторых местах есть неизбежные проблемы, связанные с обработкой спрайтов (см. ниже).
Первые 5 секунд игры — ещё не показатель. Разумеется, как и в большинстве игр, в начале и конце уровней будут «ямы» слева и справа, соответственно, в тех местах, где карта фоновых тайлов просто заканчивается.
На некоторых уровнях всплывают особенности обработки спрайтов. Например, на уровне с лошадью противники-ниндзя выбегают справа, но в широкоэкранной эмуляции (при дополнительных колонках > 8) заметно, что они появляются чуть левее, просто из ниоткуда.
В лифте не отрисовываются достаточно далеко стены шахты. В итоге ползущие солдаты появляются подвешенными среди какой-то черноты.
Далее буду вставлять только широкоэкранные скриншоты.
Robocop vs Terminator. Пришлось урезать до 4 колонок, чтобы избавиться от фоновых артефактов.
Shining Force. Неудача. Либо слева, либо справа всегда мусор, а в Shining Force II — со всех сторон. С другой стороны, широкий экран тут не особо нужен с учетом пошаговости, так как изучать поле нужно только в самом начале боя.
Golden Axe III. Хорошо работает при 10.
Jungle Strike (и другие «страйки»). Фон в дополнительных колонках неправильно скроллится при перемещении по диагонали.
Как же Sonic? Sonic 1 и 2 требуют патченых ромов. Сделать это можно тут. Попробовал Sonic 2 с 16 дополнительными колонками — работает, казалось бы, идеально. До первого бонусного уровня. Это было вполне ожидаемо, так как, очевидно, реализация псевдо-3D требует большой изобретательности при обращении с графикой.
Бонусный уровень заканчивается, и изображение просто пропадает — чёрный экран. Перезапускаем эмулятор с отключенной широкоэкранностью, загружаем состояние, и получаем вот такие артефакты:
Тут благодаря популярности есть много альтернативных решений. Проект 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