Всем доброго времени суток!
Позавчера перебирал свою библиотеку игр для 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 лет датамайнинга и чтения документации разных систем необходимыми знаниями обладаю.
С детства любил заглядывать внутрь файлов программ и игр.