Технические аспекты русификации игр на движках: Stuff Script
Сия часть данной серии статей коснётся более или менее значимого движка, на котором написано немного игр, хоть сами сии игры варьируются от просто неплохих до весьма и весьма сдобных. Наверняка кто-то слышал как о играх на данном движке, так и о их студии. Да, на момент написания статьи ни одна не была русифицирована, но некоторые получили у себя на родине признание, часть из которых даже относительно успешно вышла на западе. Когда-то сей движок процветал, но ныне вроде как мёртв. Впрочем, его наследие живо и поныне. Быть может, кто-то из вас сразу представит его по корявой реализации системы пропуска.

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

Также известен как: Propeller; Propeller Engine.

Игры, кои точно на сим движке:
(На подчёркнутых велись тесты для написания данной статьи).
- Пули да дворецкие;
- Пояс времени: кроссовер Пуль да дворецких и Аякасибито;
- Уверен, колорит сей не только лишь ясного утра...;
- Предел эволюции;
- Просвет средь сакур и город обмана;
- Токийская Вавилонская башня;
- Осколки желаний и серебряный контрактор;
- Егерь лазурных атак.

Игры, которые теоретически также должны быть на сим движке:
- Все игры от ныне покойной студии Propeller, начиная с Харухаро. Самые первые игры студии написаны на много менее приятном Shiina Rio, с которым не стоит пытаться сталкиваться неподготовленным.

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

Важно: все методы для работы с движком написаны для оригинального движка, эталонными версиями которого являются оригинальные (японские) версии подчёркнутых четырёх игр.

Классификация.

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

Также можно выделить наиболее версии, требующие для игры диски и версии, не требующие для игры диски. Во избежания проблем с сим рекомендуется брать вторые, а именно загрузочные версии (Download Edition).

Что содержит?

Эталонная игра на Stuff Script Engine содержит или может содержать (примерно одинаково в обеих версиях движка):
- Папку save, где хранятся сохранения.

- Ряд архивов .mpk, среди которых можно выделить (ввиду наличия варьирования могут найтись и неуказанные архивы):
- - a.mpk, где хранятся базовые маски (картинками .mgr).
- - c?.mpk, где хранятся различные прочие маски (картинками .mgr).
- - BG?.mpk или bg.mpk, что содержит или содержат фоны (картинками .mgr).
- - ef.mpk, где содержатся эффекты (картинками .mgr).
- - f.mpk, что встречается, вероятно, лишь в ранних играх, где содержатся отдельные портреты персонажей (картинками .mgr).
- - g.mpk, где содержатся своего рода накладываемые фоны иль сцены, занимающие лишь часть экрана (картинками .mgr).
- - i.mpk, где содержатся в основном накладываемые рисунки в стиле тиби (картинками .mgr).
- - m.mpk, где содержится игровая музыка (в стандартном формате .ogv).
- - s#.mpk, где содержатся игровые спрайты (картинками .mgr).
- - sam.mpk, где содержатся миниатюрные варианты сцен, вероятно, для галереи (картинками .mgr).
- - Scenario.mpk, что содержит сценарные скрипты .msc (картинками .mgr).
- - se.mpk, где содержатся звуковые эффекты (в стандартном формате .ogv).
- - System#.mpk, где содержатся системные картинки, в основном разные кнопки и подобное.
- - v.mpk, где содержится озвучка (в стандартном формате .ogv).
- - wall.mpk, что имеется лишь в отдельных играх, и содержит набор обоев (например, для рабочего стола) в соответствии с тематикой игры. Каждое обычно идёт как минимум в трёх размерах. (В стандартном формате .bmp)!
- - EV*.mpk, где содержатся особые сцены, например "замыленные" или находящиеся на "неопределённом фоне". Может встречаться далеко не во всех играх на движке.
- - obj.mpk, где содержатся различные силуэта и, что важно, текст на разных картинках, где тот играет ключевую роль. Может встречаться далеко не во всех играх на движке.
> Важно! Не все файлы .mpk в папке игры являются архивами!

- Несколько видео в формате .mpk.
> Их названия могут различаться от игры к игре. Наиболее общим криетрием игрового видео можно считать то, что попытка извлечь сей файл как архив окончится неудачно.
> Например: в Пулях да дворецких видео являются файлы m?.mpk (исключая m.mpk); в Поясе времени — все файлы .mpk, названия коих (исключая расширения) написаны исключительно большими буквами; в Пределе эволюции названия таковых начинадются с eve иль EVE; в Егере лазурных атак названия таковых непременно начинаются с sj.

(Прим.: вместо ? либо нет символа, либо один любой символ).
(Прим.: вместо # либо нет символа, либо цифра).
(Прим.: вместо * любая последовательность символов, в том числе и пустая).

Как работать с архивами?

Существует несколько средств для работы с архивами .mpk сего движка.

Для извлечения и перепаковки архивов (и только для сего!) рекомендуется использовать средство PropellerManager, которое способно и извлекать, и паковать архивы .mpk. Заметьте, что содержимое может быть зашифровано, а данное средство расшифровку не предполагает. Для расшифровки можно использовать средство из раздела "Как работать со скриптами?".

Порядок действий:
- Запустить PropellerManager.
- Нажать ПКМ на открывшемся графическом интерфейсе.
- Выбрать подпункт "MPK".
- Выбрать "Extract" (для извлечения архива) или "Repack" для перепаковки архива.
- Выбрать архив.
- Ожидать результат.

Альтернативно для сих действий можно использовать propeller-tools (только для сего и картинок!), однако в сим случае понадобится Python и командная строка.

Также извлечение архивов .mpk возможно с помощью GARbro, где также проводится авторасшифровка содержимого (при наличии). Однако, перепаковка с помощью данного средства не возможна.

На самом деле, для внесения в игру изменений не обязательно перепаковывать данные в архивы. Достаточно лишь создать папку, называющуюся как сей архив (исключая расширение).
Однако, здесь есть один нюанс. Ежели данные в архивах шифрованы, они должны быть представлены в строго таком же шифрованном виде. Сделать это можно с помощью, например, моего средства для скриптов (см. раздел "Как работать со скриптами", средство оттуда может шифровать при наличии ключа не только скрипты).

Как работать с картинками?

Формат картинок .mgr представляет собой своего рода контейнер для групп картинок bmp с альфа-каналом, но для него имеется лишь одно полноценное средство, способное и конвертировать картинки в стандартный формат, и конвертировать обратно в формат .mgr.

Использование:
0. Приготовления: установить Python, добавить путь в PATH, скачать и распаковать код средства.
1. Открыть командную строку и переключиться на директорию, где содержится средство и картинка.
2. Ввести следующую команду:
Код
python mgr_converter (-p / -u) INPUT OUTPUT

Где выбирается или -p, или u в зависимости от желаемого действия, INPUT есть данные на вход, а OUTPUT — на выход.

Также конвертация (и распаковка) картинок в различные стандартные форматы возможна с помощью средства GARbro, но выполнение обратного преобразование с помощью оного невозможно.

Как работать со звуками?

Все звуки находятся в стандартном формате .ogv.
Просто отредактируйте его в любом звуковом редакторе, поддерживающим сей формат, и перепакуйте.
Специфических действий требоваться не должно.

Как работать со скриптами?

Все необходимые действия со скриптами .msc сего движка, а именно разборка, сборка, смена кодировок текста, дешифровка и расшифровка может осуществляться с помощью моего средства mscScriptTool. Оно является наиболее функциональным и, вероятно, удобным из существующих. Его можно использовать в том числе для глубокого редактирования кода.

Проблем с добавлением сообщений или переномов быть не должно. Подробнее о его использовании написано на соответствующей страничке (см. ссылку ранее).

Стоит также отметить, что у данного средства есть одна особенность работы, на которую стоит обратить внимание: полноширинные пробелы преобразуются в "\u3000", но обратно так и остаётся "\u3000". Ввиду сего полноширинные пробелы использовать в игре не рекомендуется. Вместо них просто используйте два последовательных пробела.

В качестве альтернативных средств (использовать не рекомендуется): propeller-tools с весьма ограниченным функционалом и работспособностью и PropellerManager, что позволяет ограниченно редактировать лишь строки.

Перенос по строкам есть только побуквенный, а перенос по сообщениям невозможно. Предположительно, текст, вылезающий за окно сообщения, просто обрезается.
Перенос строки в заданном месте возможен добавлением в то место тэга переноса: "_r". Однако, ежели в строке был сделан автоматически сделанный перенос, он работает совершенно иначе: он требует клика для продолжения вывода сообщения. Будьте с сим тэгом осторожны.

Как заставить корректно отображаться русский текст?

В играх на сим движке используется стандартная кодировка ОС Windows, на которой запущена данная игра. Таким образом, текст в скриптах можно кодировать по-разному, но восприниматься он будет в зависимости от конкретной системы. Тем не менее, данная "восприимчивость" успешно поддаётся эмуляции.

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

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

Картинка 1: Демонстрация попытки использования стандартного шрифта при русской локали.

Для решения всех проблем предлагается следующий метод...
1. Создать костыльный шрифт, притом такой, что позволяет направить отрисовку запятой на иной символ, не являющийся квадратными скобками, нижним подчёркиванием, угловатыми скобками. В данном конкретном случае будет рассматриваться вариант с использованием японской локали (или эмуляции её) в игре, так что возможно использование одного из моих костыльных шрифтов: TDGoth. К нему прилагается также средство для конвертации (на Python 3, все подробности в коде, использовать профиль StuffScriptConv): TesterFontConv. На текущей настройке оно преобразует текст из буфера обмена в новый текст и замещает содержимое буфера обмена преобразованным текстом.
2. Необходимо заместить шрифт, ставящийся по умолчанию (когда нет сохранений, где прописан определённый).
2.1. Необходимо открыть шестнадцатеричным редактором, поддерживающим кодировку Shift-JIS (подойдёт, например, MadEdit), исполняемый файл игры (.exe).

Картинка 2: Демонстрация открывающегося вида.

2.2. Найти там все строки стоящих на данный момент по умолчанию шрифтов. В случае Пуль да дворецких оно одно (как правило в .exe-шниках игр на движке можно встретить в основном его): "MS ゴシック" (82 6C 82 72 20 83 53 83 56 83 62 83 4E). Стоит также проверять на наличие "MS 明朝" (82 6C 82 72 20 96 BE 82 A9).

Картинка 3: Итог поиска в Пулях да дворецких.

2.3. То необходимо заменить на строку (крайне желательно, чтобы она была меньше строк исходных шрифтов, иначе придётся переписывать смещения) названия костыльного шрифта, допустим "TDGoth", притом так, чтобы байты, оставшиеся от старой строки, были обнулены. Например, в случае "TDGoth" исходные HEX-строки должны превращаться в: "54 44 47 6F 74 68 00 00 00 00 00 00" и "54 44 47 6F 74 68 00 00 00" соответственно.

Картинка 4: Итог замены шрифта по умолчанию в Пулях да дворецких.

ВАЖНО! При запуске игры шрифт уже должен быть установлен! В противном случае необходимо удалить папку сохранений или см. пункт 3.
3. Есть и иной способ замены шрифта. Однако, при его использовании и невыполнении пункта 2 игроку придётся проставлять его самому, что не есть удобно.
В каждой или почти каждой игре на сим движке в настройках есть пункт замены шрифта. Таким образом, там можно заменить шрифт на любой японский.

Картинка 5: Демонстрация рассматриваемой опции в Пулях да дворецких.


Картинка 6: Демонстрация рассматриваемой опции в Пределе эволюции.


Картинка 7: Демонстрация рассматриваемой опции в Егере лазурных атак.

4. Выполнить необходимые действия над скриптом (или скриптами) (распаковка и перепаковка здесь не указаны, подробнее насчёт них см. в разделе "Как работать с архивами?").
4.1. Взять сценарный скрипт и с помощью указанного ранее средства разобрать его (при необходимости заранее расшифровав).

Картинка 8: Сам процесс.

4.2. Преобразовать весь текст в костыльный текст, который с костыльным шрифтом будет отображаться корректно.

Картинка 9: Костыльный текст (не связан с картинкой 9, связан лишь с картинкой 10).

4.3. Конвертировать скрипт обратно и при необходимости зашифровать с полученным ранее ключом (или можно ввести ключ отдельно, например для Пуль да дворецких и Пояса времени он будет 0x88).
5. Запустить игру (в данном случае с японской локали или с её эмуляции) и протестировать результат. При возникновении ошибок повторить указанные действия внимательно.

Картинка 10: Отображение в игре текста с картинки 9.

Как работать с видео?

Пусть видео и содержится в файлах .mpk, на самом деле оно находится в стандартном формате, являющимся, судя по всему (информация требует дополнительного подтверждения), стандартным видео MPEG-1.

Таким образом, достаточно:
1. Сменить такому видео расширение на .mpeg.
2. Открыть его в видео-редакторе.
3. Отредактировать по своей воле.
4. Сохранить в формате MPEG-1.
5. Изменить расширение на .mpk.
6. Положить в папку игры.

Как отредактировать верхнее меню?

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

Картинка 11: Пример изначального верхнего меню из игры Пули да дворецкие.

Необходимо открыть шестнадцатеричный редактор, поддерживающий кодировку Shift-JIS (подойдёт, например, MadEdit), затем открыть там исполняемый файл (.exe) игры и найти нужные строки...

Картинка 12: Нахождение нужных строк.

Отредактировать их по мере возможного. В частности, необходимо, дабы меж строками был как минимум один байт "00". Сокращать потребуется в любом случае, хотя, ежели использовать техчасть на основе русской локали (и возможной её эмуляции), меньше.

Картинка 13: Пример редактированной одной строки. Пример в техчасти на основе японской локали.

И затем протестировать в игре отображение. Ежели изменений нет, необходимо восстановить изменённую строку и найти другую такую же строку.

Картинка 14: Демонстрация отображения изменённой строки в игре.

Некоторые прочие практические подробности о движке.

- Движок является не слишком распространённым (неизвестно, использовался ли он где-либо помимо игры студии Propeller). Однако, на нём написано немало довольно известных игр.
- Ввиду закрытия студии, выпускавшей игры на данном движке, его развитие можно считать оконченным.
- Система прокрутки довольно слабая, ввиду чего её использование может быть неудобным, медленным, корявым.
- Игры на нём могут содержать проверку на вставку диска. Эмуляция диска уже позволяет обойти проблему.
- Согласно моим данным, существует не больше двух игр от студии Propeller, выпущенных на другом движке. Движок самой первой игры студии и Аякасибито, второй её работы, — YU-RIS, что намного сложнее Stuff Script.
- Практически все игры на сим движке имеют систему смены шрифта.
- В то же время для полноценного перевода игр на нём приходится редактировать ряд жёстко закодированных строк в .exe-шник. Технология показана в разделе "Как отредактировать верхнее меню?".

Итого.

К удобным сторонам движка можно отсутствие закрепления к японской локали, а относительное крепление к локали системы; возможность лёгкой смены шрифта; наличие средств (в частности, полноценного средства для скриптов); отсутствия закрепления на внешние файлы, допустим, в AppData; возможность относительно просто делать патчи.
Есть и неудобные моменты, например некоторая наваленность архивов в папке игры; многочисленность жёстко закодированных строк; некорректная работа с полиширинниками; ограничение на шрифты; необходимость явной оглядки на локали или их прямой эмуляции; каждая .mgr, картиночная единица, может содержать несколько bmp, то есть сама является контейнером.

Таким образом, движок не является особенно сложным, как и техническая сторона русификации игр на нём, хотя по сложности он и превосходит ряд движков, таких как codeX RScript.
Существенных усилий для его разборки не требуется.


Автор материала: Tester
Материал от пользователя сайта.

Translate 04.01.2021 704 Tester техническая часть, Stuff Script Engine, Bullet Butlers, перевод, Sougeki no Jaeger, Stuff Script, двжики, Propeller, техсредства, Propeller Engine, движок, разбор, форматы, средства, техработы, Проект, ТАРИД, ChronoBelt, Проекты, Evolimit, техчасть, взлом, Engine, игры 4.3/6

Комментарии (2):
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
2
1 Tainaka  
96587
Там где русификация, там и разработка своих игр. Звучит вкусно на самом деле. Порядошным даунгрейдерам нравится))

3
2 Хемуль  
87473
Как всегда, очень круто. Сразу видно, сколько усилий было затрачено на все это.