Разработка и ромхакинг > Ромхакинг
Модифицируем игры для Sega Saturn
(1/17) > >>
paul_met:
Информация о модификации игр для Sega Saturn
--------------------------------------------------------------------------------------------
Список всех доступных патчей можно найти -  Здесь
paul_met:
Возможно, особенно внимательные люди замечали, что в некоторые играх для Сатурна присутствуют небольшие чёрные полосы сверху и снизу экрана (иногда и по бокам экрана). Не то, чтобы это вызывало дискомфорт, но закрадывались некоторые вопросы о том, что скрывается за этими полосами и для чего они нужны. Отвечая на эти вопросы, можно было предположить два варианта:
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, так как движок у игр один с некоторыми отличиями. В данной игре больше разрешение экрана и немного отличался поиск значений. Но суть осталась такой же. Так что приведу только результаты работы.

paul_met:
Я пошёл дальше и на сей раз решил увеличить внутреннее разрешение отдельно взятой игры. Но начнём из далека:
Как известно, в играх для PS1 с некоторых пор стал возможен трюк, который позволяет включать широкоформатный режим (widescreen mode) за счёт изменения соотношения сторон картинки. Такой трюк годится не для всех игр и, к тому же, он ориентирован на 3D игры. В результате таких манипуляций увеличивается видимый обзор в игре, но HUD и прочие 2D элементы будут растягиваться. Полагаю, что и их пропорции можно откорректировать, но для этого требуется найти соответствующие значения. Возникает вопрос - а как на счёт игр для Saturn? Можно ли там сделать что-то вроде widescreen? Но на сей платформе преимущественно 2D игры. Что делать с ними? Что ж, есть один трюк. Можно увеличить внутреннее разрешение в самой игре. Естественно до строго обозначенных пределов - то есть можно выставить максимально возможное разрешение экрана, которых поддерживает сама консоль по спецификации (смотри скрин ниже).

Итак, следуя возможным значениям из приведённой выше спецификации, можно попробовать выставить максимальное разрешение, например, по горизонтали - 352 пикселя (для обычного режима). Покурив официальную доку для Сатурна, я узнал как это сделать. В приведённом ниже примере, увеличено горизонтальное разрешение картинки до 352 пикселя. Соответственно увеличен видимый обзор в игре. Никаких нарушений пропорций HUD и прочих гейплейных элементов нет потому, что отсчёт ведётся от левого верхнего угла экрана. Картинка будет расширятся вправо и вниз. Помимо увеличенного разрешения экрана, необходимо было увеличить размер рендеринга и откорректировать прокрутку экрана в соответствии с новым разрешением. Чтобы до этого дойти, потребовалось уйму времени.

Итак мы получили увеличенный обзор по горизонтали. В данном случае у игры было уже максимальное разрешение по вертикали (256 пикселей в нормальном режиме). Если бы оно было 240 или 224 пикселя, то у нас бы получилось близкое соотношение сторон хотя бы к 16:10 (352/224=22/14 ~ 1.6). Можно ещё отцентрировать панели здоровья, облака диалогов и т.д. Но для этого надо ещё больше времени и экспериментов.
TiberiyLTim:
А почему бы тебе не подготовить патч к какой-нибудь игре, например, улучшающий такие моменты в какой-то наиболее подходящей игрушке?
paul_met:

--- Цитата: TiberiyLTim ---в какой-то наиболее подходящей игрушке?
--- Конец цитаты ---

Что имеется в виду под "подходящей игрушкой"?
Yoti:
Снимаю шляпу, крутая работа.
paul_met:

--- Цитата: Yoti от 21 Сентябрь 2015, 13:58:19 ---Снимаю шляпу, крутая работа.

--- Конец цитаты ---
Благодарю.
Тем не менее, такие хаки неплохо бы проверять и на железке, а то раз столкнулся с тем, что на Yabause работает увеличение на разрешения в меню одной игрушки, а в SSF  - нет. Вот и закрались сомнения.
gepar:

--- Цитата: paul_met ---Картинка будет расширятся вправо и вниз.
--- Конец цитаты ---

Тоесть теперь визуально игрок будет бегать не по центру экрана, а всегда левее от центра?
paul_met:

--- Цитата: gepar ---Тоесть теперь визуально игрок будет бегать не по центру экрана, а всегда левее от центра?
--- Конец цитаты ---

По идее, если исправить координаты скроллинга экрана, то всё будет по прежнему.
TiberiyLTim:

--- Цитата: paul_met от 21 Сентябрь 2015, 00:07:31 ---Что имеется в виду под "подходящей игрушкой"?

--- Конец цитаты ---

Игра, в которой данное улучшение наиболее подходит, где можно сделать комплексный подход с изменением всего, в том числе перенастроить скроллинг и пр. просто некоторые игры закладываются так, что там уже невозможно что-то сделать без глубокого дизасма и перекодинга - архитектура движка плохая и т.д.
paul_met:

--- Цитата: TiberiyLTim ---Игра, в которой данное улучшение наиболее подходит, где можно сделать комплексный подход с изменением всего, в том числе перенастроить скроллинг и пр. просто некоторые игры закладываются так, что там уже невозможно что-то сделать без глубокого дизасма и перекодинга - архитектура движка плохая и т.д.
--- Конец цитаты ---

Ну вот к той же Истории Тора 2 весьма подходит хак с увеличением разрешения (не считая всяких менюшек и заставок - они просто изначально 320 пикселей в ширину).
paul_met:
Story of Thor 2 - хак по увеличению разрешения экрана до 352х256 (v1.0)

--- Цитата ---Что реализовано:
================
- Глобальная смена разрешения экрана на 352х256 (исходное 320х256)
- Коррекция видимой области для спрайтов (чтобы они не пропадали после 320 пикселей)
- Глобальная коррекция горизонтальной прокрутки экрана (чтобы локация не повторялась при достижении самого правого её края)
- Глобальное горизонтальное центрирование экрана (чтобы герой не был смещён влево)
- Горизонтальное центрирование экрана в комнатах размером с экран (во всех 4-х комнатах в разных углах экрана)

Что хотелось бы реализовать:
============================
- Центрирование всех меню, панели состояния героя, рамки диалога с текстом, титульных экранов (пока не найдено оптимальное решение, которое будет работать без багов)
- Закрашивание полупрозрачным фоном меню паузы и меню сохранения игры (пока неизвестно как это сделать)


Установка патча:
++++++++++++++++
- Внимание! Данный хак предназначен исключительно для европейской версии игры (PAL).
- Открыть оригинальный образ игры европейского региона (MK-81302) в программе "CDMage" (прилагается).
- Вставить файл "0TH2.BIN" в образ с помощью "CDMage" (выделить файл в списке и выбрать по правому клику мыши пункт "Import file").

--- Конец цитаты ---



Архив с патчем прикреплён ниже (вторым прикреплён отдельный файл для русской версии игры)
paul_met:
Убраны горизонтальные чёрные полосы  + увеличено разрешение до 352x240 (площадь обзора увеличилась на 512 пикселей).
На SSF пока не работает из-за, как оказалось, некорректной его работы с TVMD:
Shining Force III (Сценарий 1)

paul_met:
Экспериментальный Hi-res режим (работает только при аппаратной эмуляции).
s1nka:

--- Цитата: paul_met ---Hi-res режим
--- Конец цитаты ---

Что именно подразумевается? Подмена текстур? Фильтры? Сглаживание? А оригинальный скрин можно увидеть?
paul_met:

--- Цитата: s1nka ---Что именно подразумевается? Подмена текстур? Фильтры? Сглаживание? А оригинальный скрин можно увидеть?
--- Конец цитаты ---

внутреннее разрешение увеличено до 704x480. Тогда, как оригинал был 320х240. Сравни со скринами выше просто.
Теперь при отведении камеры видна практически вся локация. Правда не всё рендериться.
gepar:
paul_met, так алгоритм для включения отрисовки за границами стандартного экрана для игр на одном и том же движке такой же или ты каждый раз что-то меняешь? Может сконтактировать с разработчиком эмулятора SSF поделившись наработками и предложить добавить hi-res хаки для известных движков прямо в эмулятор.
paul_met:

--- Цитата: gepar ---paul_met, так алгоритм для включения отрисовки за границами стандартного экрана для игр на одном и том же движке такой же или ты каждый раз что-то меняешь? Может сконтактировать с разработчиком эмулятора SSF поделившись наработками и предложить добавить hi-res хаки для известных движков прямо в эмулятор.
--- Конец цитаты ---
Смена разрешения, границы рендеринга, координаты отсчёта VDP1 и т.д., думаю, всегда идут по одному принципу, так как эмуляторы определяют эти параметры (например, Yabause в дебаг меню). Думаю, разработчикам это всё очень хорошо известно. Просто они не ставили перед собой цели делать такие хаки в эмуляторах. Если бы кто-то из них заморочился, то можно было бы вычислять все значения на этапе загрузки игры (например, пытаться запускать игру всегда в максимально возможном разрешении). Только вот как быть с фонами, рассчитанными на определённое разрешение? Можно их тупо отцентрировать, но если размера слоя не достаточно, появятся чёрные полосы, дыры и подобные баги. Некоторые фоны VDP2 можно растянуть до нужных размеров, но только те, что используют NBG0-1 или RBG0-1 слои (остальные не масштабируются). Если в VDP1 нет проблем с масштабированием, то есть косяк с цветопередачей (в Hi-res режиме можно юзать только 8-ми битный цвет по ходу). Можно ли конвертировать из 16 в 8 бит на лету или нет - я ещё не разобрался. Например, hi-res картинка, которую я приводил выше, в софте будет выглядеть с испорченной палитрой (кроме RGB слоя воды, так как он относится к VDP2).
В общем баги неизбежны. А в игра без скроллинга экрана (например, Resident Evil) вообще бесполезно что-либо делать. Там статичные фоны.
paul_met:
Story of Thor 2 - хак по увеличению разрешения экрана до 352х256 (v1.1)

--- Цитата ---Что реализовано:
================
- Глобальная смена разрешения экрана на 352х256 (исходное 320х256)
- Коррекция видимой области для спрайтов (чтобы они не пропадали после 320 пикселей)
- Глобальная коррекция горизонтальной прокрутки экрана (чтобы локация не повторялась при достижении самого правого её края)
- Глобальное горизонтальное центрирование экрана (чтобы герой не был смещён влево)
- Горизонтальное центрирование экрана в комнатах размером с экран (во всех 4-х комнатах в разных углах экрана)
- Центрирование всех меню, панели состояния героя, рамки диалога с текстом, титульных экранов, видеороликов

Что хотелось бы реализовать:
============================
- Закрашивание полупрозрачным фоном меню паузы и меню сохранения игры (пока неизвестно как это сделать)


Установка патча:
++++++++++++++++
- Внимание! Данный хак предназначен исключительно для европейской версии игры (PAL).
- Открыть оригинальный образ игры европейского региона (MK-81302) в программе "CDMage" (прилагается).
- Вставить файлы "0TH2.BIN" и "TH2.LOW" в образ с помощью "CDMage" (выделить файл в списке и выбрать по правому клику мыши пункт "Import file").

--- Конец цитаты ---

Архив с патчем прикреплён ниже (вторым прикреплён отдельный файл для русской версии игры)
paul_met:
Norse by Norsewest (Lost Vikings 2) - разрешение 352х240.
Панель персонажей пришлось переместить вниз из-за того, что под ней находился постоянно мерцающий мусор. На SSF хак не работает, увы.


 
Навигация
Главная страница сообщений
Следующая страница

Перейти к полной версии