Возможно, особенно внимательные люди замечали, что в некоторые играх для Сатурна присутствуют небольшие чёрные полосы сверху и снизу экрана (иногда и по бокам экрана). Не то, чтобы это вызывало дискомфорт, но закрадывались некоторые вопросы о том, что скрывается за этими полосами и для чего они нужны. Отвечая на эти вопросы, можно было предположить два варианта:
1. За чёрными полосами ничего нет, картинка там не рендирится (либо просто мусор, который разработчики не пожелали убирать и просто скрыли за чёрными полосами).
2. Изображение всё-таки рендерится за чёрными полосами, но по какой-то причине его решили скрыть (для повышения производительности игры или полосы остались в результате прямого портирования игры с другой системы).
Забегая вперёд, скажу, что все эти варианты в то или иной степени справедливы для различных игр. Но что, если попробовать убрать эти полосы и посмотреть, что за ними? Если нам повезёт и картинка всё-таки рендерится под полосами, то мы увеличим видимый обзор в игре, что положительно скажется на игровом процессе. В противном случае мы получим пустоту или мусор.
Итак, способ убрать полосы существует и он проверен на нескольких играх. Причём для каждой игры нужен свой подход, но принцип всегда один и тот же. Полосы могут устанавливаться как по средствам VDP1, так по средствам VDP2. Это два разных видеопроцессора консоли (video display processor), которые отвечают за вывод спрайтов, примитивов и задних планов. Например, одним из признаков, указывающих на то, что изображение обрезается, является запись типа "
Horizontal/Vertical start/end" в меню дебаггера VDP2 в эмуляторе
Yabause. Такая запись может присутствовать в любом из слоёв, отображаемых на экране. Значения, которые стоят напротив такой записи, являются координатами начала и конца отрисовки изображения. Если их изменить, то мы получим определённый результат.
Так же бывает, что чёрные полосы рисует VDP1 с помощью примитивов. Такой способ мне пока встретился лишь один раз. Но случается и такое, что обнаружить, как формируются чёрные полосы довольно сложно, так как на них практически ничего не указывает. Тут уж приходится вычислять размер полос вручную и искать в дампе памяти соответствующие значения.
Обычно поиск таких значений в оперативной памяти не представляет особой сложности. Гораздо сложнее узнать откуда эти значения пишутся и в какой момент. Для этого необходимо ставить так называемые точки останова (брейкпоинты) на запись в память по определённому адресу. Когда эмулятор отрапортовал о точке останова, нужно идти по коду в обратную сторону. Для этого надо знать SS ассемблер.
В виду того, что я немного продвинулся в этом плане, мне удалось достигнуть определённых результатов в устранении этих самых чёрных полос. Я приведу два примера, где чёрные полосы присутствуют со всех сторон.
Игра
Shining Force 3. Тут у нас чёрные полосы присутствуют всегда и на любом экране. Полосы на титульном экране, который представляет собой обычную фоновою картинку (причём рисуется она в VDP1, что не совсем стандартно), являются результатом того, что сама фоновая картинка меньше разрешения экрана. По сему, её просто отцентрировали. Но, есть определённая хитрость. Так как фоновая картинка представляет собой
distorted sprites (спрайт с 4-мя координатами, который можно искажать), то мы можем его растянуть на весь доступный экран. При этом он не особо потеряет в качестве. Ниже пример до и после масштабирования.
Что касается ингейма, то там основные операции по выводу изображения берёт на себя VDP2. Там встретилось несколько записей "
Horizontal/Vertical start/end" - для переднего и заднего планов. Как оказалось, и значения для них берутся из разных мест. Убрать чёрные полосы для переднего плана оказалось просто, так как координаты шли друг за дружкой (скрин №2). А вот с задний планом оказалось по-другому. Координаты его полос оказались разбросаны. Путём долгих поисков удалось найти нужные значения. В результате мы получили желаемый результат (скрин №3).
Самая большая проблема, что все найденные значения в оперативной памяти нужно ещё отыскать в ресурсах игры, если мы хотим сделать патч (ну а если просто через читы, то и этого достаточно). В случае с этой игрой удалось их найти только методом тыка, так как поиск по средствам дебаггера ничего путного не давал.
Игра
Shining Holy Ark. Здесь ситуация аналогичная SFIII, так как движок у игр один с некоторыми отличиями. В данной игре больше разрешение экрана и немного отличался поиск значений. Но суть осталась такой же. Так что приведу только результаты работы.