Разработка и ромхакинг > Ромхакинг

[PS2] Grandia 3 (слияние дисков) и King's Field 4 (аналоговое управление)

(1/1)

COHOL:
Всем доброго времени суток!

Позавчера перебирал свою библиотеку игр для PS2.
Глаза зацепились за игры Grandia 3 и King's Field 4.

Grandia 3
Сумел добиться слияния двух дисков в один, нашел способ обходить проверку текущего диска.
Вместо двух ISO на 8670МБ получаем один на 6950МБ
Патч с README приложил к посту.
Относиться как к альфа\бета тесту. Ожидайте, что всё может сломаться в самый неожиданный момент, неожиданным способом.
Делайте бекапы сохранений и образов.

King's Field 4
Сумел имплементировать аналоговое управление с настройками. Проверено на реальной консоли.
Осталось имплементировать сохранения настроек(ГОТОВО!) и сделать больше шорткатов для быстрого использования предметов.
мой пост на Reddit о разработке патча
v0.2.12-stable доступна

Подробности ниже
Двух дисковая Grandia 3 занимает дофига места, и я решил посмотреть, можно ли слить два DVD5 в один DVD9.
Оказалось, что можно, и почти без проблем.
То, что файлы не привязаны к LBA(физическим секторам диска) стало очень приятным сюрпризом!
Ещё одним сюрпризом стал тот факт, что на обоих DVD все файлы, кроме MPEG2 роликов идентичны.

Оставалось написать скрипт, который запишет ролики со второго диска на первый, не ломая файловую систему.

Естественно, это был не конец.
Нужно было отучить игру проверять текущий диск относительно сохранения. После некоторых изысканий оказалось, что этим занимается маленькая функция, которую можно просто обойти.
Сказано - сделано! Был написан python-скрипт, который извлекает исполняющий файл игры, патчит его, затем заливает обратно в образ и заливает видики со второго диска, сохраняя адекватную архитектуру файлов.
После проделанной работы скачал чужие сейвы для проверки. Запустил игру с нового образа и попробовал загружать сейвы разных стадий игры, и все они загружались нормально.

Естественно, это требует более глубоких тестов.
Я никогда раньше не играл в Grandia 3, и в ближайший месяц не собираюсь.
Предоставлю скрипт для сборки одного диска из двух и патчит исполняющий файл игры для ваших тестов.
Если возникнут баги с прохождением, которые явно вызваны такими изменениями - пишите на чём проходили, на реальной консоли или эмуляторе.
Если эмулятор - скидывайте версию эмуляторы и ближайший к багу SaveState.
И опишите суть бага.
Если это баг оставшийся от разработчиков игры - им я заниматься не стану.

ВНИМАНИЕ. Скрипт работает только с USA версией игры.
EU, JPN скорее всего сломаются, так как там инструкции проверки диска наверняка находятся на других адресах.

King's Field 4 имеет абсолютно наркоманское управление:
DPAD для ходьбы вперёд и назад и поворотов налево и направо,
смотреть вверх и вниз на триггерах,
а стрейфы на бамперах.

Игра про существование аналоговых стиков ничего не знает, и настроить на них управление из коробки не позволяет.
Не знаю о чём тогда думали FromSoftware. Были ли они ленивыми негодяями, или в чём тут могла быть ещё причина не делать аналоговое управление, я хз.

Но, я наткнулся на реддит на патч для эмулятора, для добавления в игру поддержки аналогов,
и это стало отправной точкой для исследования возможности пропатчить исполняющий файл и образ игры для запуска на реальной консоли.

На патч первой версии с простой поддержкой аналогов без настроек ушло менее получаса.

Далее были поставлены задачи на исследование систем игры для реализации меню настроек аналогового управления и добавление других функций из оригинального pnach патча.
После недолгих изысканий удалось добиться создания меню настроек поверх паузы игры.
Можно настраивать
Camera X Y Speed   [0...15]   [0...15]
Curve   [0.00...1.00]    [0.00...1.00]    [0.00...1.00]    [0.00...1.00]   
Camera X Y Accel   [0...15]   [0...15]
Camera X Y Decel   [0...15]   [0...15]
DeadZone         [2...20]

Invert Y           [ON/OFF]
Alt Ladder         [ON/OFF]
Clamping           [ON/OFF]
Widescreen Exp     [ON/OFF]
Interlacing Exp    [ON/OFF]
Reset Stamina      [ON/OFF]

Speed levels:
пересчитать на 15 пунктов - от 1.00x до 8.00x

Acceleration levels:
пересчитать на 15 пунктов - от 1.00x до 10.00x

Deceleration levels:
пересчитать на 15 пунктов - от 1.00x до 10.00x

Дефолты
  Camera Speed = 5
  Camera Accel = 5
  Camera Decel = 2
  Dead Zone    = 8
  Curve = 0.87, 0.23, 0.99, 0.86

Серьёзной преградой поначалу оказался корректный рендеринг текста самого меню.
Сначала были проблемы с нахождением корректного шрифта (выводились кандзи вместо английских букв)
Были проблемы с прозрачностью шрифтов, фликерами и прочее.

Решения, вроде бы были найдены, но ещё не протестированы, сейчас этим занимаюсь.

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

Каждая игра создаёт на карте памяти свою папку, в которой содержится иконка игры, метаданные сохранения, сами файлы сохранений.
Рядом же можно положить свой файл сохранения, не меняя родной файл.

Функции для записи и чтения уже найдены и придуман формат сохранения.
Осталось только реализовать.

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

Моя же идея заключается в том, чтобы создать кольцевой буфер на 8 предметов,
отлавливать момент назначения предмета на клавишу и записывать его данные в буфер,
в буфере будут храниться данные последних 8 предметов, которые были назначены,
убираем ходьбу со стрелочек геймпада и назначаем вверх\вниз на смену страниц, лево\право - использование предмета.
получаются 4 страницы по два предмета.
Нужно будет выяснить, как устроен HUD, и можно ли выводить свои спрайты, если да - то на экране будут два спрайта рядом с родным HUD или в левом нижнем углу, на манер более популярной серии Souls от фромов.

Уже найдены структуры данных и функции, которые можно отлавливать и с которыми можно работать.
Дело за реализацией.

UPD:
Масштаб проекта немного расширился. Хочу сделать более современное управление стиками, и понимаю, что это сделать возможно.
Так же посмотреть, можно ли разделить функции бега и взаимодействия на разные клавиши.
Если получится - смогу сделать Dash\отскок, почти как в Bloodborne, держишь клавишу - просто бежишь, быстро нажал и отпустил - быстрый отскок, Быстро нажал-отпустил-нажал-держишь - отскок потом бег.
Посмотрю как тратится стамина, посмотрю, можно ли сделать зависимость траты стамины на отскоки от веса надетого снаряжения.

Считаю важным отметить, что я не являюсь хакером, и даже программистом.
Написанием кода и львиной долей анализа данных занимался ChatGPT (модель GPT-5.6 Sol, платная версия).

Я же занимался формулированием идей, постановкой задач, проверкой кода и конечного результата.
Чтобы добиваться от нейронки внятных ответов, нужно грамотно формулировать идеи и задачи. Просто сказать: "Сделай чтоб работало" недостаточно.
Нужно понимать принципы работы компьютерного железа, процессора, памяти, графики, общее понимание ассемблера(неважно, 6502, x86, ARM, MIPS), принципы построения данных программ и игр, ограничения.

Я не программист, но после 28 лет датамайнинга и чтения документации разных систем необходимыми знаниями обладаю.
С детства любил заглядывать внутрь файлов программ и игр.

Online:
По Grandia 3 впечатляет, а как в игре происходит смена диска? Там вроде игра просит сохраниться и вставить диск 2. Как насчёт того,чтобы выполнить хотя бы машинный перевод на русский? Grandia Xtreme (PS2) тоже в нём нуждается.

COHOL:
Теперь должно быть так:
Проходишь до конца сюжет диска 1, просит сохраниться, выходишь в меню, грузишь сейв и продолжаешь диск 2. Ни ресетов консоли, ни переключения дисков, не важно, образ это в эмуляторе, реальный диск, или образ в OPL.

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

Сначала поиграюсь с тем, что мне интересно.
Вот сделать нормальное управление для King's Field 4 мне сейчас больше интересно.
Хотя сама игра очень на любителя.

Потом буду смотреть, как делаются переводы в играх.
Хотя за перевод я бесплатно браться не хочу. Довольно неблагодарное занятие и очень сложное и выматывающее.
И тут дело даже не в самом переводе, а в тестировании, чтобы он нормально работал, чтобы тексты в каждом диалоге не вылезали за пределы, чтобы текст влезал в конкретное окно.
Нередко бывает, что на английском говорят пару слов, и они на фоне контекста имеют свой абсолютный смысл,
а на русском приходится это превращать в целую языко-смысловую конструкцию, чтобы перевод был человеческим и понятным для русскоязычного человека.

anikeev.alexandr:
Насчёт King's Field IV прям удачно зашёл! 👍 Я, конечно, освоился с классическим управлением на протяжении нескольких часов игры, но честно, от нормально работающих стиков явно не отказался! 🙂

COHOL:
Приятно, что кому-то заходит)
Это ещё не самый лучший способ стики сделать. Можно не имитировать стиком стрелочки, а управлять камерой. Правда есть свои подводные камни. Внутреннее устройство системы камеры к такому не присаособлено было.

А потом, пока искал как сделать хорошо. случайно все сломал и потерял бекапы новых пробных версий...

Dyons:

--- Цитата: COHOL от 21 Августа 2026, 01:03:55 ---Написанием кода и львиной долей анализа данных занимался ChatGPT (модель GPT-5.6 Sol, платная версия).
--- Конец цитаты ---
Ну то есть, сумел не ты, а ChatGPT, при том какой говнокод под капотом, одному Богу известно  :lol:

COHOL:
Сумел добиться от него адекватного кода, поставить задачу, на основе данных из оригинального кода, тогда уж. А про "говнокод" не соглашусь. Код пишет неплохой, хорошо документированный, с объяснением, что делает, и почему. Главное, предоставить хороший референс, или хотя бы репорты с Ghidra дизассемблирования оригинального кода.
А код для KF4MOD ChatGPT писал нормальный, пока контекст чата не переполнился и у него крышка не поехала. Но я сам виноват, что допустил такое.

Вы, наверное, платными нейронками и не пользовались никогда? Там огромная разница между платным и бесплатным. И коде, и в простом тексте, и в генерации изображений.

Навигация

[0] Главная страница сообщений

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