| Разработка и ромхакинг > Ромхакинг |
| Модифицируем игры для Sega Saturn |
| << < (14/17) > >> |
| paul_met:
Информация о модификации игр для Sega Saturn -------------------------------------------------------------------------------------------- Список всех доступных патчей можно найти - Здесь |
| nonamezerox:
--- Цитата: yousver2 от 03 Февраль 2023, 16:10:18 ---nonamezerox, просто для пс1 подобные патчи гораздо проще было найти, ищя известные разрешения картинки, гораздо быстрее было их найти вслепую, чем дебажить код. че то типа вот таких 1000 1999 199A 12AA 111A 1400 Я думал, мож для Сатурна тоже есть способ наподобие, как можно быстро вычислить нужное значение --- Конец цитаты --- Конечно проще, для пс1 был нормальный SDK и при разработке игры использовалось много стандартного кода из SDK. В том числе и вызывающаяся в коде функция-конструктор матрицы проекции с параметрами(fov,aspect,znear,zfar). Добавлено позже: --- Цитата: yousver2 от 03 Февраль 2023, 16:10:18 ---Я думал, мож для Сатурна тоже есть способ наподобие, как можно быстро вычислить нужное значение Добавлено позже: nonamezerox, ну вот с 2д как раз чуть проще, там можно увеличить разрешение и убрать клиппинг спрайтов за экраном, и надеяться, что в буфер копируется достаточно бэкграунда дополнительного ))) а в 3д пока что не очень получается --- Конец цитаты --- И вообще, на сатурне было все крайне не просто (небольшой спойлер для ромхакеров - в сатурне DSP на VLIW архитектуре, прямо как почивший Intel itanium и посконный процессор Эльбрус и дизассемблировать код можно только сломав мозг в 5 измерении): |
| yousver2:
nonamezerox, щас попробую все таки поковырять уже известные вайдскрины, типа Панзер Драгона, и может найти какой нибудь более универсальный и менее затратный по времени способ, который будет подходить для всех игр) Добавлено позже: nonamezerox, там в Yabause Очень много полезной инфы высвечивается, например, с какой координаты начинают отрисовыываться полигоны. Я думаю, что нужно скакать отсюда. Имея на руках некие координаты, их проще будет найти поиском в хексе, правда пока что не знаю, где конкретно искать, так как слишком много совпадений, сотни. На их проверку уйдет много часов времени |
| nonamezerox:
--- Цитата: yousver2 от 03 Февраль 2023, 16:23:36 ---nonamezerox, щас попробую все таки поковырять уже известные вайдскрины, типа Панзер Драгона, и может найти какой нибудь более универсальный и менее затратный по времени способ, который будет подходить для всех игр) Добавлено позже: nonamezerox, там в Yabause Очень много полезной инфы высвечивается, например, с какой координаты начинают отрисовыываться полигоны. Я думаю, что нужно скакать отсюда. Имея на руках некие координаты, их проще будет найти поиском в хексе, правда пока что не знаю, где конкретно искать, так как слишком много совпадений, сотни. На их проверку уйдет много часов времени --- Конец цитаты --- Умножение матрицы на вектор ищи, говорю же. Откуда читаются вершины в VDP1 туда должно перед этим наумножаться и наскладываться массивом. Там куча умножений и куча сложений должны друг за дружкой в асме идти. С операндами из массива на 16 или на 12 элементов. Это искомая итоговая матрица Потом лепи вотч на матрицу и ищи где world*view*projection происходит и находи projection. После чего подставляй коэфициент. |
| yousver2:
nonamezerox, че то начал находить, по крайней мере мир вокруг меня сжимается и расширяется, пока только 1 плоскость, в моем случае вода. Там видимо координаты для каждой плоскости в отдельности, а на сатурне по моему может быть 4 плоскости, если не ошибаюсь |
| nonamezerox:
--- Цитата: yousver2 от 03 Февраль 2023, 17:03:24 ---nonamezerox, че то начал находить, по крайней мере мир вокруг меня сжимается и расширяется, пока только 1 плоскость, в моем случае вода. Там видимо координаты для каждой плоскости в отдельности, а на сатурне по моему может быть 4 плоскости, если не ошибаюсь --- Конец цитаты --- В трехмерной графике используются матрицы. За масштабирование в целом отвечает диагональ матрицы (00 - по X, 11-по Y 22- по Z), умножение матрицы на вектор дает умножение диагонали на соответствующую координату. За перемещение - добавочное измерение (в случае 3д - четвертое) с балластной единицей на добавочном измерении у вершины, при перемножении преобразуется в сложение исходной координаты вершины и четвертого столбца матрицы. Вращение - тут синусы и косинусы углов в разных ячейках в зависимости от осей вращения. |
| yousver2:
В общем, с этой игрой у меня не получилось, возможно не все игры поддаются расширению экрана, и я просто неудачно выбрал первую. Но зато я получил бесценные знания по изменению разрешения в Сатурне и нахождению координат начала отрисовки полигонов. Возможно, со следующей игрой мне повезет больше |
| paul_met:
--- Цитата: yousver2 от 03 Февраль 2023, 16:10:18 ---nonamezerox, просто для пс1 подобные патчи гораздо проще было найти, ищя известные разрешения картинки, гораздо быстрее было их найти вслепую, чем дебажить код. че то типа вот таких 1000 1999 199A 12AA 111A 1400 Я думал, мож для Сатурна тоже есть способ наподобие, как можно быстро вычислить нужное значение --- Конец цитаты --- Это не разрешения картинки, а наиболее популярные коэффициенты масштабирования геометрии. На плойке тоже фиксированные разрешения экрана как и у Сатурна, только горизонтальных больше (256, 320, 384, 512, 640). Так как платформы одного поколения, то и архитектуры у них схожие. На Сатурне геометрия масштабируется по сути также и поиск этих коэффициентов аналогичен таковому как и на плойке (через cheat engine ищешь в диапазоне RAM консоли значения типа "1000", "00010000" и т.д.). Если не повезёт, то придётся возиться с координатами спрайтов, а там непаханое поле в виде тонны переумножающихся координат. --- Цитата: nonamezerox от 03 Февраль 2023, 15:54:18 ---Собственно, для незнакомой игры тебе придется искать или ассемблерный код для DSP или ассемблер для одного из центральных процов SH4, так как разные разработчики обработку геометрии делали на разных процах по характерному для умножения матрицы 4х4 на матрицу 4х4 и матрицы 4х4 на вектор шаблону. --- Конец цитаты --- У Сатурна процы SH2. Это у Дримки SH4. |
| nonamezerox:
--- Цитата: paul_met от 04 Февраль 2023, 02:18:55 --- У Сатурна процы SH2. Это у Дримки SH4. --- Конец цитаты --- да. |
| yousver2:
paul_met, Steamgear mash Увеличил разрешение с 320 224 до 352 224. Адрес в памяти ee5a8. Также подвинул клиппинг врагов чуть правее, чтобы они не обрезались при скролле. Адреса можешь легко поиском найти 013F00EF, там их будет 2 рядом, верхний - это клиппинг врагов. Я его сделал на 015F. Они перестали обрезаться, но при пересечении добавленной области оставляют за собой шлейф. Не пойму, что это и как его устранить. Высокое разрешение вообще не работает, тупо черную область показывает :) Пытался разные высокие поставить, не распознает их, либо нужно добавлять вывод дополнительной графики в видео память хз |
| paul_met:
--- Цитата: yousver2 от 04 Февраль 2023, 16:19:49 ---Они перестали обрезаться, но при пересечении добавленной области оставляют за собой шлейф. Не пойму, что это и как его устранить. --- Конец цитаты --- Не расширена область рисования/стирания объектов (05D0000A). В одних играх она автоматически устанавливается при смене разрешения экрана, но в других надо ставить ручками. |
| yousver2:
paul_met, не, глухо вообще :( Скурил доку по VDP1, вычитал, что в адрес записывается при старте исключительно. Ок, поставил бряк на старте, 7 записей происходит. Далее я вычитал, что запись происходит побитово и определяет сразу верхнюю левую и нижнюю правую координаты. Там даже табличка была с примерами записей. В общем, я все регистры просмотрел, вообще ничего не нашел при стопах похожего) Похоже, второй эпик фейл со второй игрой :lol: Ну теоретически можно играть с расширенным экраном, но появляющимися из воздуха врагами ) Печаль, что Yabause такие вещи не фиксирует нигде, было бы очень полезно. |
| paul_met:
--- Цитата: yousver2 от 04 Февраль 2023, 19:09:11 ---В общем, я все регистры просмотрел, вообще ничего не нашел при стопах похожего --- Конец цитаты --- Похожего на что? В системный адрес 05D0000A должно записываться 16 бит значение типа 50DF или 50EF (в зависимости от вертикального разрешения). |
| yousver2:
paul_met, да, получилось, спасибо) щас скрин сделаю)) Щас попробую другое разрешение сделать А это 352 на 240 Добавлено позже: paul_met, в хд разрешениях к сожалению все рушится и не работает, даже не знаю почему |
| paul_met:
--- Цитата: yousver2 от 04 Февраль 2023, 21:22:25 ---paul_met, в хд разрешениях к сожалению все рушится и не работает, даже не знаю почему --- Конец цитаты --- В высоком разрешении много ограничений, обычным переключением разрешения тут не ограничишься. Надо менять режим палитры, её расположение в видеопамяти, тип спрайтов и т.д. Максимум, что можно получить "малой кровью", двойное разрешение по вертикале (двойной интерлейс). |
| yousver2:
paul_met, двойной интерлейс наверное только вертикальным шмапам подойдет, всем остальным играм немного странно будет играть с вытянутой картинкой по вертикали)) Ну что ж, хотя бы widescreen для 2д получил, уже хорошо. 352 на 224 можно растянуть на 16:9 с минимальным искажением, что несомненно радует |
| nonamezerox:
Рекомендую почитать: https://learnopengl.com/Getting-started/Transformations https://learnopengl.com/Getting-started/Coordinate-Systems В особенности по второй ссылке. Тебе нужно менять именно projection matrix, что бы картинка рендерилась сжатой в штатный фреймбуфер 4:3. Сама матрица проекции выглядит так: Тебе нужен верхний левый элемент, который зависит от fov камеры и aspect ratio. Причем, обрати внимание, матрица актуальна для современных видеокарт и их GAPI, у которых ожидаемые координаты вершин после всех трансформаций лежат в диапазоне от -1 до 1 с нулем в середине экрана. А у сатурна передаются координаты в пикселях. Так что в матрице будет еще правая колонка в первой и второй строках, а этот самый коэффициент будет уже не с 1 в числителе. |
| yousver2:
nonamezerox, но фишка в том, что в твоих формулах слишком много неизвестных, которые просто так не найти :) Это хорошо, когда их все знаешь, а если не знаешь? paul_met, а какие еще есть популярные коээфициенты сжатия картинки кроме 0001 1000? Я так думаю, их должно быть не менее 3-4 активно используемых в большинстве игр. Я щас пытаюсь сделать widescreen для Hang On, продолжения мегадрайвовой гонки, очень классной |
| nonamezerox:
--- Цитата: yousver2 от 06 Февраль 2023, 10:32:32 ---nonamezerox, но фишка в том, что в твоих формулах слишком много неизвестных, которые просто так не найти Это хорошо, когда их все знаешь, а если не знаешь? --- Конец цитаты --- Эм, неизвестных тут нет. 1/tan(fov/2) находится в 2 строка второй столбец и используется игрой (на него умножается координата y). aspect = то что ты хочешь получить, 16 делить на 9. Ищешь этот самый вторая строка второй столбец, делишь на aspect и пишешь в 1 строка 1 столбец (на него умножается x). Добавлено позже: --- Цитата: yousver2 от 06 Февраль 2023, 10:32:32 ---Я так думаю, их должно быть не менее 3-4 активно используемых в большинстве игр. --- Конец цитаты --- Он зависит от fov камеры (для 3д). |
| yousver2:
nonamezerox, но ты можешь хотя бы примерно расписать, что мне нужно искать в дебаггере сатурна? Координату y камеры? Ну это найти несложно. А дальше мои действия какие должны быть? Поставить бряк на эту координату? Или не шевелиться в игре, и зная координаты, расчитать по формуле? |
| nonamezerox:
--- Цитата: yousver2 от 06 Февраль 2023, 10:50:13 ---nonamezerox, но ты можешь хотя бы примерно расписать, что мне нужно искать в дебаггере сатурна? Координату y камеры? Ну это найти несложно. А дальше мои действия какие должны быть? Поставить бряк на эту координату? --- Конец цитаты --- Нужно найти, на что умножается Y перед тем как формируется дисплей листы для vdp. После чего эту штуку поделить на aspect и подставить туда на что умножается X перед тем как формируется дисплей листы для vdp. То есть ставишь бряк на память дисплей листа и смотришь откуда туда пишется со стороны CPU1-2/DMA/DSP. и дальше находишь место где он генерируется и где перед генерацией у него умножются координаты x и y. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |