Всем привет! Ознакомившись с фанатским переводом первой MGS, у меня появилось очень много вопросов, один из них: как они перерисовали геймоверы? Я прочитал pdf, прилагающуюся к переводу, но ответов не нашёл, только скрины программ. К сожалению, фанаты, в большинстве своём, не рассказывают подробности процесса, не выкладывают софт, а только предоставляют готовый продукт. А ведь интересно же :((Я решил исправить это и сделал собственный редактор геймоверов для MGS1
Редактор:
Фичи:
1. Графический редактор
2. Сохранение/загрузка нарисованных геймоверов
3. Сохранение/загрузка бинарников геймовера
4. Экспорт геймоверов в json
5. Экспорт геймоверов в бинарники, понятные игре
Скриншоты:
Подробный процесс создания:
Если присмотреться к отрисовке геймовера, можно заметить, что буквы образовываются с помощью линий. Если есть линии, то есть и координаты. Теперь главный вопрос: как их найти? Можно отлаживать игру, но я нашёл способ попроще. Делаем скрин эмулятора в 100% масштабе, обрезаем рамки. В Paint.NET наводим на крайнюю точку любой линии и смотри её координаты. Выбираем любую и открываем Cheat Engine. Ищем в нём это значение (изначально я думал, что это float, но вспомнил, что на старых ЭВМ для этих целей выделялось не 4 байта, а 2, поэтому, ничего не найдя, я стал искать 2-байтовое значение). Начинаем менять значения по списку и смотреть на эмулятор. Методом исключения находим нужное значение и нажимем на нём Ctrl+B. В hex редакторе нажимаем ПКМ -> Display type -> 2 Byte decimal. Перед вами структура геймовера (координаты, к которым стремится анимация).
Скрин:
Методом замены ищем крайний левый байт геймовера. Им оказалось значение, отвечающее за количество линий. Сам формат выглядит так:
PHP код:
struct GameOverScreen { short lineCount; Line[] lines;}
struct Line { short x1; short y1; short x2; short y2;}
Ничего сложного, как оказалось. На этих знаниях и создавался редактор. Если вам лень всё это делать, то просто извлеките STAGE.DIR и в hex-редакторе найдите:
GAME OVER:
PHP код:
78002500580019006800190068001F0079001F007900280079002800790020008700200087002A0087
MISSION FAILED:
PHP код:
A10020005D001800840020005D0028005D0028005D0029006B0029006B0032005D0032005D0039005D
Замена - просто замените всё найденное своими байтами, также можно вставить прямо в RAM через CE
Вот, что получилось у меня (не смотрите на кривоту, я суть показал):
Спасибо за внимание
