Технические аспекты русификации игр на движках: SLG System
Сия часть данной серии статей, что столь задержалась, коснётся очень значимого движка, на котором написано немало важных игр, в том числе составляющих две легендарные серии визуальных новелл и по совместительству jRPG — Принцессы Сэнгоку (Sengoku Hime) и Принцессы Троецарствия (Sangoku Hime).
Когда-то сей движок, основанный на древнем и почти всеми забытым Тэнки То:дзицу ADVANCE, процветал, теперь же (примерно с седьмой части Принцесс Сэнгоку, которая использует Unity), новые игры на нём не выпускаются. Наследие сего движка живо и поныне, ожидая своего часа для выхода где-нибудь кроме Японии.
На момент написания статьи ни одна из игр на сим движке не была ни русифицирована, ни даже переведена на английский язык (кроме разве что интерфейса четвёртой части Принцесс Сэнгоку на PlayStation, которая, вероятно, использует другой движок). Почему? Одна из причин — существенное количество текста (касается только игры серии Принцессы Сэнгоку свыше 3 части), другая — избыточное количество требуемой для перевода графики, последняя и, вероятно, одна из главных — техническая сложность движка и очень малое количество наработок к нему, многие из которых из-за недостатка понимания взломщиком движка приводят к малозаметным багам, которые предстоит обнаружить бедным пользователям.

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

Также известен как: SLGSystem, Tenki To:jitsu ADVANCE Modified, модифицированный Тэнки То:дзицу ADVANCE.

Игры, кои точно на сим движке:
(На подчёркнутых велись тесты для написания данной статьи).
- Псалтырь 69: Мессия пустоты;
- Принцессы Троецарствия: Неспокойные времена, план Трёх царств (Обновлённая версия);
- Принцессы Сэнгоку: Огни мира войны;
- Принцессы Сэнгоку 2: В мире войны буря бушует меж феодалами;
- Принцессы Сэнгоку 3: Свет и тьма рассекают мир;
- Принцессы Сэнгоку 4: Все средства для победы, клятва защитить цветы;
- Принцессы Сэнгоку 5: Родословная правителя, потушившего пламя войны;
- Принцессы Сэнгоку 6: Пробуждение державы, блеск новой Луны.

Игры, которые теоретически также должны быть на сим движке:
- Все игры от Gesen 18, заканчивая (примерно) Принцессами Сэнгоку 6. Последние игры студии написаны на много более известном широкой публике Unity.
- Все игры от Unicorn-A, заканчивая (примерно) Принцессами Сэнгоку 6. Последние игры студии написаны на много более известном широкой публике Unity.

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

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

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

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

Версии идут следующим образом...
#0 — Псалтырь 69 (Shihen 69).
#1 — Принцессы Сэнгоку 1 (Sengoku Hime 1).
#2 — Принцессы Сэнгоку 2, 3 (Sengoku Hime 2, 3).
#3:
##3.0 — Принцессы Сэнгоку 4 (Sengoku Hime 4).
##3.1 — Принцессы Троецарствия 1: Обновлённая версия (Sangoku Hime 1 Renewal).
#4:
##4.0 — Принцессы Сэнгоку 5 (Sengoku Hime 5).
##4.1 — Принцессы Сэнгоку 6 (Sengoku Hime 6).

Почему же отсчёт начат не с первой версии, а с нулевой? Нулевая версия движка — своего рода прототипная версия. Она существенно отличается от поздних, хотя ряд сходств всё же прослеживается (в частичности, в т. н. "сложных структурах" в скриптах и отчасти в структуре папок).
Используется множество скриптов по обычной в движках формуле: 1 скрипт = 1 файл.
Известно, что на данной версии имеется лишь одна игра, хотя предположительно их число таковых от 2-х до 13-и.
Наиболее диковинная версия движка.

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

Вторая версия имеет похожую на первую структуру папок. Использует те же форматы данных. Скрипты претерпевают некоторые изменения (около десятка изменений в системе команд, в том числе перенос важной команды "CHOICE" с 0x13 на 0x14), "послекомандные аргументы" вместо "BH" становятся "HH" (после чего не изменяются до последних версий). Иногда встречаются архивы "szs", в которые запакована часть данных (в поздних играх на этой версии).
Возможно, если бы не встречаемость szs и не кардинальное изменение "послекомандных аргументов", мог бы быть отнесён к версии 1 (в качестве некоторой подверсии).

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

Четвёртая версия — венец эволюции движка. Структура файлов движка похожа, но теперь ещё больше файлов запаковано в архивы .szs. Здесь многокомпонентные специальные архивы SFP, состоящие из двух компонентов: .SPL и SPD, которые позиционируются как аудио-архивы (хотя могут хранить не только аудио), используются повсеместно, а не частично, как в прошлых версиях (начиная с 2). Игры на данной версии, как и на прошлой, оборудованы техническими средствами защиты авторских прав (DRM).
Скрипты и прочие данные также зашифрованы, но теперь иной разновидностью того алгоритма шифрования. Согласно тестам, вероятно, все игры на сей версии движка имеют лишь один ключ — 0xbf8766f5.
Проблему с шифрованием разработчики, судя по всему, предпочли не замечать.
В скриптах появляется всё больше новых категорий смещений, что ещё больше усложняет процесс декомпиляции и компиляции.

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

(В указанных обозначениях * — набор символов неопределённой длины, а # — ровно один символ).

Эталонная игра на SLG System версии 0 содержит:

- Папку BGM. Содержит файлы фоновой музыки в формате .VOI (bgm*.VOI и theme.VOI).
- Папку Data, которая в свою очередь содержит...

- - Папку Char. Содержит вспомогательный формат данных .DAT.
- - Папку Stript. Содержит папки main и Map###. В них хранятся скрипты .sd. В main — главный скрипт, в Map### — скрипты событий и карт.
- - Папку SLG. Содержит папки MapData и SLG_Sys. Первая содержит папки Map###, где находятся вспомогательные форматы данных .DAT и .cmf для карт и событий. Вторая, SLG_Sys, содержит вспомогательный формат данных .DAT, относящийся к самому движку.
- - Папку sys. Содержит вспомогательный формат данных .DAT, относящиеся к системе.

- Папку Image. Содержит различные папки по назначению, в которых содержатся картинки .alb: BG (фоны), Button (кнопки), Char (персонажи), cutin (вставки), DlgBG (специальные вставки с текстом), Effect (эффекты), Etc (прочее; например, курсор), Event (события), face (лица персонажей), Map (карты), MapName (названия карт), Object (объекты в геймплейных вставках), Parts (различные элементы, относящиеся к геймплейным вставкам), RFBG (своего рода мини-фоны), thumb (мини-события), translib2 (переходы), Unit (содержит новые папки, где находятся картинки персонажей, из которых в том числе составляются геймплейные анимации), WinBG (фоны окон интерфейса), WinFrame (связано, видимо, с рамкой окна).
- Папку se. Содержит звуковые эффекты sse###.VOI.
- Папку slg_voice. Содержит папки по именам персонажей, имеющих озвучку, в которых лежат файлы озвучки в формате .VOI.
- Папку Sound. Содержит прочие звуки e###.VOI.
- Папку Voice. Содержит папки по именам персонажей, имеющих озвучку, но файлов которых нет в slg_voice. В тех папках же лежат файлы озвучки в формате .VOI.

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

Эталонная игра на SLG System версии 1 содержит:

- Папку bg. Содержит картинки в формате .tig.
- Папку BGM. Содержит файлы фоновой музыки в формате .VOI (m###.VOI и theme.VOI), а также файл вспомогательных структур данных bgm.dat.
- Папку Bmp. Содержит различные картинки, связанные с геймплеем, в форматах .tig и .TIM. Подозревается возможность использования и .tic.
- Папку char. Содержит спрайты персонажей в формате .tig и файлы вспомогательных структур данных .ch.
- Папку data. Содержит папки b## и D##, где содержатся файлы вспомогательных структур данных .bin и .dat. В них записан ряд игровых данных для геймплея.
- Папку dic. Содержит папки book и thumbs. Первая содержит страницы персонажей в формате .tic, вторая — их иконки в том же формате.
- Папку ending. Содержит картинки, что выводятся после концовки: титры, логотип.
- Папку event. Картинки события в формате .tig.
- Папку face64. Иконки персонажей размером 64 на 64.
- Папку main. Содержит главный скрипт main, разбитый на 9 файлов: main.cg, main.ev, main.lb, main.lbn, main.sd, main.sfn, main.sw, main.swn, main.tko.
- Папку Map. Содержит картинки карт в формате .tig.
- Папку meet. Содержит оставшиеся спрайты персонажей в формате .tig.
- Папку new.dat. Содержит новые данные об игры в файлах вспомогательных структур данных .bin и .dat.
- Папку se. Содержит звуковые эффекты sse###.VOI.
- Папку thumbs. Содержит мини-картинки событий в формате .tig.
- Папку title. Содержит скрипт title, разбитый на 9 файлов: title.cg, title.ev, title.lb, title.lbn, title.sd, title.sfn, title.sw, title.swn, title.tko.
- Папку voice. Содержит папки по именам персонажей, имеющих озвучку, в которых лежат файлы озвучки в формате .VOI.
- Папку Zmap. Содержит отдельные регионы игровой карты в формате .tig.

- Открывающее видео в формате .mpg прямо в корневой папке игры.

Игра на SLG System версии 2 может содержать:

- Папку bg или архив bg.szs. Содержит фоновые картинки в формате .tig.
- Папку BGM. Содержит файлы фоновой музыки в формате .VOI (m###.VOI и theme.VOI), а также файл вспомогательных структур данных bgm.dat.
- Папку char (и char_#) или архив char.szs (и char_#.szs). Содержит спрайты персонажей в формате .tig и файлы вспомогательных структур данных .ch.
- Папку data. Содержит папки b## и D##, где содержатся файлы вспомогательных структур данных .bin и .dat. В них записан ряд игровых данных для геймплея.
- Папку Database. Либо ничего не содержит, либо содержит данные о персонажах в страницах .tig.
- Папку ending (и ending_#) или архив ending.szs (и ending_#.szs). Содержит картинки, что выводятся после концовки: титры, логотип.
- Папку event. Картинки события в формате .tig.
- Папку face64. Иконки персонажей размером 64 на 64.
- Папку main (и main_ap# для дополнений). Содержит главный скрипт main, разбитый на 9 файлов: main.cg, main.ev, main.lb, main.lbn, main.sd, main.sfn, main.sw, main.swn, main.tko.
- Папку Map (и Map#) или архив Map.szs (и Map#.szs). Содержит картинки карт в формате .tig
- Папку menu_script. Содержит скрипты меню в текстовом формате.
- Папку meet. Содержит оставшиеся спрайты персонажей в формате .tig.
- Папку new.dat (или scenario вместо неё). Содержит новые данные об игры в файлах вспомогательных структур данных .bin и .dat.
- Папку se (или se.SPD+se.SPL). Содержит звуковые эффекты sse###.VOI.
- Папку slg_se. Содержит звуковые эффекты самого движка SLG System в формате .VOI.
- Папку slg_v. Содержит прочие звуки SLG System в формате .VOI в тематических папках.
- Папки sys* или архивы sys*.szs. Содержит технические картинки в формате .tig, а также файлы вспомогательных структур данных .dat и .btn.
- Папки thumbs* или архивы thumbs*.szs. Содержит мини-картинки событий в формате .tig.
- Папку title. Содержит скрипт title, разбитый на 9 файлов: title.cg, title.ev, title.lb, title.lbn, title.sd, title.sfn, title.sw, title.swn, title.tko.
- Папку voice. Содержит папки по именам персонажей, имеющих озвучку, в которых лежат файлы озвучки в формате .VOI.
- Папку Zmap*. Содержит отдельные регионы игровой карты в формате .tig.

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

Эталонная игра на SLG System версии 3 может содержать:

- Папку SaveData, где лежат сохранения, или папку data, где лежат папки с сохранениями в виде файлов вспомогательных структур .dat.
- exe-файл игры с уникальным названием.

- Папку Data, содержащую... (Иногда указанное содержимое может оказаться в корне игры).
- - Папки bg_v_*. Содержат множество архивов SFP (.SDP+.SPL), которые содержат разные звуки.
- - Папку media. Содержит видео .mdm, которые на самом деле являются видео MPEG.
- - Папку slg_v. Содержит прочие звуки SLG System в формате .VOI в тематических папках.
- - Папку bgm. Содержит фоновую музыку в M##.VOI.
- - Папку se. Содержит звуковые эффекты se###.VOI.
- - Папку slg_se. Содержит звуковые эффекты самого движка SLG System в формате .VOI.
- - Папку slg_v. Содержит прочие звуки SLG System в формате .VOI в тематических архивах SFP (.SPD+.SPL).
- - Папки voice*. Содержит архивы SFP (.SPD+.SPL) по именам персонажей, имеющих озвучку, в которых лежат файлы озвучки в формате .VOI.
- - Архив bg.szs Содержит фоновые картинки в формате .tig.
- - Архив char.szs (и char_#.szs). Содержит спрайты персонажей в формате .tig и файлы вспомогательных структур данных .dat.
- - Архив effect.szs. Содержит файлы вспомогательных структур данных .cfx.
- - Архив event.szs (и event_#.szs). Содержит картинки событий в формате .tig.
- - Архив Image.szs (и Image_#.szs). Содержит различные картинки в формате .tig.
- - Архив menu.szs (и menu_#.szs). Содержит скрипты меню в текстовом формате, но шифрованные.
- - Архив Model.szs. Содержит файл вспомогательных структур .bin и текстовый скрипт .x.
- - Архив scenario.szs (и scenario_#.szs). Содержит файлы вспомогательных структур .bin, где записаны игровые данные, относящиеся к геймплею.
- - Архив script.szs (и script_#.szs). Содержит различные скрипты (обычно main и tutorial), разбитые на 9 файлов с расширениями: .bl, .ev, .lb, .lbn, .sd, .sfn, .sw, .swn, .tko.
- - Архив sys.szs (и sys_#.szs). Содержит технические файлы вспомогательных структур данных .dat, связанные с игровой системой.
- - Архив thumbs.szs (и thumbs_#.szs). Содержит мини-картинки событий в формате .tig.

Эталонная игра на SLG System версии 4 может содержать:

- Папку SaveData, где лежат сохранения.
- exe-файл игры с уникальным названием.

- Папку Data, содержащую...
- - Папку media. Содержит видео .mdm и .mda, которые на самом деле являются видео MPEG.
- - Папку slg_v. Содержит прочие звуки SLG System в формате .VOI в тематических архивах SFP (.SPD+.SPL).
- - Папку voice. Содержит архивы SFP (.SPD+.SPL) по именам персонажей, имеющих озвучку, в которых лежат файлы озвучки в формате .VOI.
- - Архив bg.szs Содержит фоновые картинки в форматах .tig и .tds.
- - Архив bgm.SPD+bgm.SPL. Содержит фоновую музыку в формате .WMA.
- - Архив char.szs (и char_#.szs). Содержит спрайты персонажей в формате .tig и файлы вспомогательных структур данных .dat.
- - Архив effect.szs. Содержит файлы вспомогательных структур данных .cfx.
- - Архив ending.szs. Содержит картинки, что выводятся после концовки: титры, логотип.
- - Архив event.szs (и event_#.szs). Содержит картинки событий в формате .tig.
- - Архив Image.szs (и Image_#.szs). Содержит различные картинки в формате .tig.
- - Архив menu.szs (и menu_#.szs). Содержит вспомогательные файловые структуры, относящиеся к меню, в текстовом формате.
- - Архив Model.szs. Содержит файлы вспомогательных структур .bin и .x.
- - Архив scenario.szs (и scenario_#.szs). Содержит файлы вспомогательных структур .bin, где записаны игровые данные, относящиеся к геймплею.
- - Архив script.szs (и script_#.szs). Содержит различные скрипты (обычно main и tutorial), разбитые на 11 файлов с расширениями: .bl, .ev, .lb, .lbn, .sb, .sbn, .sd, .sfn, .snm, .sw, .tko.
- - Архив se.SPD+se.SPL. Содержит звуковые эффекты SE###.VOI.
- Папку slg_se.SPD+slg_se.SPL. Содержит звуковые эффекты самого движка SLG System в формате .VOI.
- - Архив sys.szs (и sys_#.szs). Содержит технические файлы вспомогательных структур данных .dat, связанные с игровой системой.
- - Архив thumbs.szs (и thumbs_#.szs). Содержит мини-картинки событий в формате .tig.

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

Движок использует два типа архивов: szs и SFP.

Первый, szs, — стандартный архив ресурсов движка SLG System. Часто содержит скрипты, картинки и прочее подобное. Содержит несжатые, но немного обфусицированные (xor 0x90) данные.

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

Для распаковки и извлечения используется SLGSystemDataTool.

Инструкция по распаковке/запаковке.
1. Скачать и запустить средство.
2. Перейти на вкладку "Архивы szs".
3. Выбрать версию (как правило "0").
4. Выбрать архив szs.
5. Выбрать директорию данных.
6. Выполнить распаковку (из файла архива в директорию) или запаковку (из директории в файл архива).
7. Ожидать. Можете пока поесть же мягких французских булок да выпить чаю.


Второй, SFP, — специальный двухкомпонентный архив движка SLG System. Содержит только (или почти только) аудиоданные, однако в теории может содержать и другие типы данных. Компонент SDP содержит сами данные, в то время как SPL — их список. Данные не обфусифицированы.

Используется начиная с последних игр на второй версии движка (крайне редко), но массовое использование получается только на играх на четвёртой версии движка.

Для распаковки и извлечения используется SLGSystemDataTool.

Инструкция по распаковке/запаковке.
1. Скачать и запустить средство.
2. Перейти на вкладку "Архивы SFP (.SPD + .SPL)".
3. Выбрать версию (как правило "5").
4. Выбрать компонент "SPD".
5. Выбрать компонент "SPL". Как правило компоненты архива имеют одинаковое название, если отбросить расширение.
6. Выбрать директорию данных.
7. Выполнить распаковку (из файлов архива и директорию) или запаковку (из директории в файлы архива).
8. Ожидать. Можете пока поесть же мягких французских булок да выпить чаю.


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

Движок использует следующие форматы картинок: alb, tig, tic, TIM и примкнувший к ним tds.

Первый, alb, — вельми экзотичный формат, ужасно сжатая картинка png, что повсеместно используется в играх на старейших разновидностях SLG System. Настолько могуче сжатая, что размер alb вдвое больше, чем у исходной png! Никогда не повторяйте ошибок горе-разработчиков формата! Даже не буду объяснять про сей ужасный алгоритм сжатия. Посмотрите на сей бардак сами, коль желаете.

Используется исключительно в играх на SLG System версии "0".

Для конвертации и реконвертации используется SLGSystemDataTool.

Инструкция по конвертации и реконвертации.
1. Скачать и запустить средство.
2. Перейти на вкладку "Картинки alb".
3. Выбрать версию (как правило "1.21").
4. Выбрать режим обработки ((ре)конвертировать один файл в файл или все файлы в одной директорию в другую директорию).
5. Выбрать файл картинки alb или папку с ними.
6. Выбрать картинку png или папку с ними.
7. Конвертировать alb в png или реконвертировать (получить) alb из png.
8. Ожидать. Можете пока поесть же мягких французских булок да выпить чаю.


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

Второй, tig, — обфусифицированная png. Наиболее частый формат картинок игр на движке SLG System (кроме старейших версий). Новый байт = старый байт + ключ, где каждый следующий ключ = (прошлый ключ * a + b) >> 16.

Встречается во всех версиях движка, кроме нулевой.

Для конвертации и реконвертации используется SLGSystemDataTool.

Инструкция по конвертации и реконвертации.
1. Скачать и запустить средство.
2. Перейти на вкладку "Картинки tig".
3. Выбрать режим обработки ((ре)конвертировать один файл в файл или все файлы в одной директорию в другую директорию).
4. Выбрать файл картинки tig или папку с ними.
5. Выбрать картинку png или папку с ними.
6. Конвертировать tig в png или реконвертировать (получить) tig из png.
7. Ожидать. Можете пока поесть же мягких французских булок да выпить чаю.


Третий, tic, — обфусифицированная (так же, как и tig) jpg. Крайне редко встречается.

Точные данные о встречаемости утрачены. Предположительно, может иногда попасться во всех версиях движка, кроме нулевой.

Для конвертации и реконвертации используется SLGSystemDataTool.

Инструкция по конвертации и реконвертации.
1. Скачать и запустить средство.
2. Перейти на вкладку "Картинки tic".
3. Выбрать режим обработки ((ре)конвертировать один файл в файл или все файлы в одной директорию в другую директорию).
4. Выбрать файл картинки tic или папку с ними.
5. Выбрать картинку png или папку с ними.
6. Конвертировать tic в png или реконвертировать (получить) tic из png.
7. Ожидать. Можете пока поесть же мягких французских булок да выпить чаю.


Четвёртый, TIM, — особая картинка движка SLG System. Вмещает некоторые технические данные, каждая картинка может быть зашифрована своим ключём. Шифрование похоже на таковое у tig и tic, но у самих данных изображения ключи повторяются каждые 0x1000 байтов.

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

Для конвертации и реконвертации используется SLGSystemDataTool.

Инструкция по конвертации и реконвертации.
1. Скачать и запустить средство.
2. Перейти на вкладку "Картинки TIM".
3. Выбрать режим обработки ((ре)конвертировать один файл в файл или все файлы в одной директорию в другую директорию).
4. Выбрать файл картинки TIM или папку с ними.
5. Выбрать картинку bmp или папку с ними.
6. Конвертировать TIM в bmp или реконвертировать (получить) TIM из bmp.
7. Ожидать. Можете пока поесть же мягких французских булок да выпить чаю.


Конвертация из TIM в bmp идёт в несколько файлов с одинаковым названием, если отбросить расширение: .bmp (основная картинка), ._key — взломанные ключ TIM, ._tech — извлечённые из картинки технические данные.
Для корректной реконвертации все эти файлы должны присутствовать в той же папке, где и .bmp.

Пятый, tds, — внезапно примкнувший к играм на последней, четвёртой, версии SLG System формат. Обычно используется совместно с фонами.

Встречается только в играх на четвёртой версии SLG System.

Для конвертации и реконвертации используется SLGSystemDataTool. Выделенного модуля для работы с tds в данном средстве не предусмотрено, но справиться можно и без него.

Инструкция по конвертации и реконвертации.
1. Скачать и запустить средство.
2. Перейти на вкладку "Картинки tig".
3. Выбрать режим обработки ((ре)конвертировать один файл в файл или все файлы в одной директорию в другую директорию).
4. Выбрать файл картинки tds или папку с ними. Не меняйте расширение на tig! Укажите расширение "tds", если конвертируется по файлам.
5. Выбрать картинку dds в поле для выбора картинки png или папку с ними. Укажите расширение "dds", если конвертируется по файлам.
6. Конвертировать tds в png или реконвертировать (получить) tds из png.
7. Ожидать. Можете пока поесть же мягких французских булок да выпить чаю.
8. Смените расширение, коли конвертировали по директориям.
8.1. Если вы конвертировали картинку из tds в dds (номинально png), то итоговый файл всё равно будет иметь расширение tds. Смените его на dds.
8.2. Если вы реконвертировали картинку tds из dds (номинально png), то итоговый файл всё равно будет иметь расширение dds. Смените его на tds.


Стоит отметить, что dds не требует дальнейшей конвертации, понеже является стандартным форматом. Его можно редактировать с помощью DirectX SDK.
Однако ежели вы всё же желаете превратить его в более удобный формат, можете, например, конвертировать в png. Конвертировать dds в png можно на сей странице, а провести обратное преобразование — уже на той странице (через онлайн-конвертатор convertio).

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

В играх на движке SLG System используется два вида формата аудио: VOI и WMA.

Второй, VOI, есть повсеместно используемый аудиоформат движка SLG System. По сути своей некоторые технические данные в сочетании с простым ogg.

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

Для конвертации и реконвертации используется SLGSystemDataTool.

Инструкция по конвертации и реконвертации.
1. Скачать и запустить средство.
2. Перейти на вкладку "Аудио VOI".
3. Выбрать режим обработки ((ре)конвертировать один файл в файл или все файлы в одной директорию в другую директорию).
4. Выбрать аудиофайл VOI или папку с ними.
5. Выбрать аудиофайл ogg или папку с ними.
6. Конвертировать VOI в ogg или реконвертировать (получить) VOI из ogg.
7. Ожидать. Можете пока поесть же мягких французских булок да выпить чаю.


Конвертация из VOI в og идёт в несколько файлов с одинаковым названием, если отбросить расширение: .ogg (основное аудио), ._tech — извлечённые из аудио технические данные.
Для корректной реконвертации файл с техническими данными должен присутствовать в той же папке, где и .ogg.

Второй, WMA, является стандартным форматом и не требует конвертации в какие-либо иные форматы. Для привычности можете на время редактирования поменять ему расширение с ".WMA" на ".wma".

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

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

В играх на движке SLG System используются следующие видеоформаты: mpg, mda, mdm.

Первый, mpg, является стандартным форматом и не требует конвертации в какие-либо иные форматы.

Он используется в первых трёх (0, 1, 2) версиях SLG System.

Второй, mda, маскируется под страшный проприетарный формат. Закодирован, как указано в файлах, с помощью TMPGEnc.
На самом деле является MPEG. Для удобства редактирования рекомендуется перед началом редактирования сменить его расширение на .mpg, а затем вернуть как было.

Используется исключительно в третьей версии движка совместно с mdm

Третий, mdm, маскируется под страшный проприетарный формат. Закодирован, как указано в файлах, с помощью TMPGEnc.
На самом деле является MPEG. Для удобства редактирования рекомендуется перед началом редактирования сменить его расширение на .mpg, а затем вернуть как было.

В основном используется в третьей (совместно с mda) и четвёртой версиях движка. Изредко встречается в поздних играх на второй версии движка.

Доказательство того, что mdm (и mda) являются обычными MPEG, представлено ниже.


Как взломать ключ игры на SLG System?

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

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

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

Однозначное получение оригинального ключа (не состоящих в приложенном ниже перечне приложенных) возможно путём использования дизассемблера и программного отладчика. Оно рассмотрено не будет за ненадобностью.
Получение всех возможных ключей (или одного из них) возможно с помощью модуля криптоатаки в SLGSystemScriptTool. Стоит отметить, что он расчитан на работу исключительно с файлом "main.sd", содержащимся, впрочем, по всех играх на SLG System.

Инструкция по проведению криптоатак с помощью SLGSystemScriptTool.

1. Запустите средство.
2. Перейдите во вкладку "Криптомодуль" и сосредоточьте взгляд на правой части экрана.
3. Выберите скрипт main.sd (обязательно скрипт именно с таким названием!)
4. Выберите выходной текстовый файл (для вывода результатов криптоатаки).
5. Выберите тип атаки. Обычно все игры уязвимы пред "2 0 0 2 0", но ранние могут быть уязвимы лишь пред "2 0 2 0 0". Для каждого main.sd есть лишь один корректный тип криптоатаки!
6. Выберите режим обработки атаки — находить один возможный ключ (что может и не работать в зависимости от настроек) иль все.
7. Выберите режим собственно атаки. В ранних играх (версии 3 и поздние 2-й версии) используйте второй (i-(key>>16)&0xff), но для тех, что на 4, первый — (i^(key&0xff)).
8. Запускайте! Коль вы выбрали правильные режим и тип атаки, то скорее всего получите первый корректный ключ аж за минуту! Коль не можете получить никакого ключа за 5 минут, просто попробуйте иные настройки.


Расшифровка и шифровка ресурсов.

В играх на движке SLG System версий 3 и 4 скрипты и часть вспомогательных форматов данных зашифрована. Но не беда! Их всегда можно расшифровать и зашифровать обратно!
Впрочем, перед тем, как это делать, вам должен быть известен ключ. Что делать, ежели ключ не известен, смотрите в разделе "Как взломать ключ игры на SLG System?".

Данные по всем известным ключам игр на SLG System.
"(!)" отмечены не оригинальные ключи, но возможные, взломанные с помощью алгоритма криптоатаки.

0x00501e37 - Sangoku Hime 1 Renewal. (!)
0x5e950de7 - Sangoku Hime 2 Trial.
0x3e9f9d19 - Sangoku Hime 2.
0x08461c4d - Sengoku Hime 4 Trial.
0xca92f12b - Sengoku Hime 4.
0xbf8766f5 - Sengoku Hime 5, 6.

Расшифровка и шифровка файлов осуществляются с помощью криптографического модуля в SLGSystemScriptTool.

Инструкция по (рас)шифровке файлов с помощью SLGSystemScriptTool.

1. Запустите средство.
2. Перейдите на вкладку "Криптомодуль" и сосредоточьте взгляд на левой части экрана.
3. Выберите режим обработки (по файлу или по папке).
4. Выберите входные и выходные файлы или папки.
5. Выберите ключ. Можно как выбрать уже известный ключ с помощью виджета ComboBox, так и написать свой (в шестнадцатеричной форме!)
6. Выберите режим шифрования. В ранних играх (версии 3 и поздние 2-й версии) используйте второй (i-(key>>16)&0xff), но для тех, что на 4, первый -- (i^(key&0xff)). Почти все файлы вспомогательных структур данных используют первый режим.
7. Запускайте! Вскоре нужное будет (рас)шифровано...


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

В скриптах игры находятся основные строки, прописаны основные механики игры. Не работая со скриптами хоть в какой-то мере, нельзя перевести игру.
Есть несколько разновидностей скриптов на SLG System. Содержимое каждого скрипта на версии указано ниже. Отметим, что вместо имени скрипта используется "<name>".
(Примечание: назначения файлов и их структура порою меняются в зависимости от версий).
Версия 0: <name>.sd. Обычный однокомпонентный скрипт с несколькими разделами.
Версия 1: <name>.cg, <name>.ev, <name>.lb, <name>.lbn, <name>.sd, <name>.sfn, <name>.sw, <name>.swn, <name>.tko. Основной код расположен в .sd, но при этом файл sd переплетён смещениями с другими, ввиду чего требуется синхронно редактировать все факты для последующей корректной работы игры, что автоматически делается в указанном далее средстве. Это относится и к скриптам последующих версий.
Версия 2: <name>.cg, <name>.ev, <name>.lb, <name>.lbn, <name>.sd, <name>.sfn, <name>.sw, <name>.swn, <name>.tko.
Версия 3: <name>.bl, <name>.ev, <name>.lb, <name>.lbn, <name>.sd, <name>.sfn, <name>.sw, <name>.swn, <name>.tko. Облегчённый bl.
Версия 4: <name>.bl, <name>.ev, <name>.lb, <name>.lbn, <name>.sb, <name>.sbn, <name>.sd, <name>.sfn, <name>.snm, <name>.sw, <name>.tko. Усложнённый bl.
Игры на SLG System имеют несколько скриптов.

Ежели игра принадлежит к версиям 0, 1, 2, то скрипты не требуют расшифровки и могут быть использованы сразу.
Ежели игра принадлежит к версиям 3 или 4, то скрипты зашифрованы и требуют предварительной расшифровки, а после перекомпилирования -- зашифровки. Подробнее об этом смотрите в разделе Как взломать ключ игры на SLG System?.

Для того, чтобы работать со скриптами, их надо декомпилировать (для получения текстовых файлов, с коими можно работать) и компилировать (после внесения изменений). Работа со скриптами версии 0 и остальных версий несколько отличается, так что для них даны разные инструкции.

(Де)компиляция скриптов SLG System осуществляется с помощью SLGSystemScriptTool.

Инструкция по (де)компиляции скриптов версии 0.
1. Запустите средство.
2. Перейдите на вкладку "Скрипт версии 0".
3. Выберите режим обработки (по файлу или по папке).
4. Выберите входные и выходные файлы или папки.
5. Выберите кодировку (что применяется как для компилированного скрипта, так и декомпилированного txt). Ежели вы хотите сменить кодировку скрипта, то сперва декомпилируйте скрипт со старой, затем измените кодировку полученного текстового файла и создайте скрипт с новой кодировкой.
6. Запускайте! Вскоре нужное будет (де)компилировано...


Пример содержимого скрипта версии 0 (из Псалтыря 69) представлен ниже.


Инструкция по (де)компиляции скриптов поздних версий.
1. Запустите средство.
2. Перейдите на вкладку "Скрипты версий 1+".
3. Выберите режим рекомпиляции (в файл или папку). Сей режим также относится и к компиляции: из файла иль из папки.
4. Выберите папку и основу имени скрипта (имя скрипта без расширения). Может быть удобно кликнуть на кнопку "..." с правой части подраздела "имени скрипта" и выбрать скрипт ".sd", после чего папка и основа имени скрипта будет заполнены автоматически.
5. Выберите файл или папку декомпилированного скрипта в текстовом формате. Заметьте, что, даже ежели вы декомпилируете скрипт в один файл, в той же директории появятся технические файлы, имена коих начинаются с "__".
6. Выберите кодировку (что применяется как для компилированного скрипта, так и декомпилированного txt). Ежели вы хотите сменить кодировку скрипта, то сперва декомпилируйте скрипт со старой, затем измените кодировку полученного текстового файла и создайте скрипт с новой кодировкой.
7. Посредством виджета ComboBox выберите версию.
8. Запускайте! Вскоре нужное будет (де)компилировано... Хотя, справедливости ради, если обычно (де)компиляция выполняется примерно за минуту, то компиляция из множества файлов (из папки) может занять уже несколько минут.



Пример папки с файлами, на кои был разделён скрипт старших версий (из Принцесс Сэнгоку 4), представлен ниже.


Пример содержимого скриптов поздних версий (из Принцесс Сэнгоку 6) представлен ниже.


ВАЖНО: ДВОЙНЫЕ КАВЫЧКИ (") В СТРОКАХ ДОЛЖНЫ БЫТЬ ОБОСОБЛЕНЫ ОБРАТНЫМ СЛЭШЕМ (\), ТАК ЧТО В ИТОГЕ ДОЛЖНО ПОЛУЧАТЬСЯ (\"), ИНАЧЕ СТРОКИ БУДУТ ЛОМАТЬСЯ! ДВОЙНЫЕ КАВЫЧКИ БЕЗ СЛЭШЕЙ ДОЛЖНЫ БЫТЬ ЛИШЬ В НАЧАЛЕ СТРОКИ!

ВАЖНО: ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ ОРИГИНАЛЬНУЮ КОДИРОВКУ СКРИПТА, НЕ ЗАБЫВАЙТЕ ПРОСТАВЛЯТЬ ЕЁ В РЕЖИМЕ ОТОБРАЖЕНИЯ ТЕКСТОВОГО РЕДАКТОРА!

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

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

Как добавлять переносы по строкам и сообщениям?

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

SLG System не поддерживает перенос по строкам. В версиях 0, 1 и 2 новые строки могут переноситься после сообщения, если они выводятся, когда в диалоговом окне нет места. В версиях 3 и 4 и такого не предусмотрено.
Однако благодаря взлому скриптов есть методы, коими можно добавить переносы по строкам и сообщениям самим.

Перенос строк на примере Принцесс Сэнгоку 1.
1. При переводе вы наткнулись на строку, перевод которой ну слишком длинный.



2. Коли у вас версии игры 0, 1 или 2, продублируйте строку под "GROUP", добавив после непоследней строки ",". Коли версии 3 или 4, добавляйте в то место строки, после коего должен быть перенос, "\n".
(Как можете заметить, продолжение идёт на следующем сообщении. Да, метод для переносов по сообщениям в версиях 0, 1 и 2 такой же, как по строкам).




Перенос по сообщениям на примере Принцесс Сэнгоку 6.
1. При переводе вы наткнулись на сообщение, перевод которого ну слишком не влезает.
(Английский вариант реплики на первой картинке утроен, дабы показать, что метод переноса для версий 0, 1 и 2 не работает для 3 и 4).



2. Ежели у вас версии 0, 1 и 3, то выполняйте второе действие как и при переносе по строкам. Ежели 4 и 5, то дублируйте команды MESSAGE и WAIT_FOR_CLICK с аргументами и переносите в новое часть, что не влезает.




Дело сделано! Но, как вы могли заметить, на картинках кириллица полноширинна, ввиду чего расстояния меж символами вельми скверны. Как сие исправить? Читайте в следующем разделе -- "Как заставить игру нормально работать с кириллицей?".

Как заставить игру нормально работать с кириллицей?

Движок SLG System по умолчанию использует кодировку cp932 (расширенные Shift-JIS). Соответственно, кириллица полноценно не поддерживается. Однако есть способы сделать поддержку кириллицы, даже оставив поддержку и латиницы. Один из таких способов и будет разобран в статье.
Ниже представлено, как движок поддерживает кириллицу по умолчанию и какой её надо сделать.
(Картинка из Принцесс Сэнгоку 2).


Инструкция по поддержке кириллицы движком на примере Принцесс Сэнгоку 5.
1. Установите шрифт TBGoth. Отныне для работы игры либо каждый должен будет ставить его сам, либо за него должен то будет делать скрипт. Например, bat-ник.
2. Установите какой-нибудь шестнадцатеричный редактор (HEX-редактор). Допустим, MadEdit.
3. Откройте с помощью шестнадцатеричного редактора .exe-шник игры. Речь об основном, с помощью коего вы оную запускаете. Поставьте кодировку на "Shift-JIS".

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

5. Их необходимо заменить на строку (крайне желательно, чтобы она была меньше строк исходных шрифтов, иначе придётся переписывать смещения) названия костыльного шрифта, допустим "TBGoth", притом так, чтобы байты, оставшиеся от старой строки, были обнулены. Например, в случае "TBGoth" исходные HEX-строки должны превращаться в: "54 42 47 6F 74 68 00 00 00 00 00 00" и "54 42 47 6F 74 68 00 00 00" соответственно. Покажем на примере одной из строк, а именно "MS ゴシック" (82 6C 82 72 20 83 53 83 56 83 62 83 4E). Таких строк нет? Поздравляю, у вас .exe-шник со встроенной технической системой защиты цифровых прав (DRM)! Ищите кряк (NoCD), благо они, насколько мне известно, уже сделаны ко всем играм.
(Сравните с предыдущей картинкой).
(Красным показано, дальше какого байта нельзя было заходить при редактировании шрифта).

6. Провести т.н. "костыльное преобразование строк" скрипта. Благодаря сему преобразованию вы уже не сможете понимать, что там написано, зато движок сможет. Коли вы не выдаете, как то делать, читайте раздел "Как выполнить "костыльное преобразование строк"?".
7. Компилируйте скрипт и вставьте его в игру. Как видите, всё прекрасно заработало.


Как выполнить "костыльное преобразование строк"?

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

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

Инструкция по костыльному преобразованию на примере TBGoth.
1. Установите Python 3.
2. Запустите Python IDLE.
3. Скачайте TesterSLGSystemConv.py.
4. Откройте с помощью Python IDLE TesterSLGSystemConv.py.
=== Далее идут основные этапы.
5. Скопируйте строки, кои вы хотите преобразовать, в буфер обмена. Вы можете также выделить весь скрипт с помощью Ctrl+A. Скопировать можно выделением строки и Ctrl+C.
6. Запустите программу (например, с помощью F5).
7. Вставьте преобразованный текст (с помощью Ctrl+V). Данные в буфере обмена изменились (программа сама вытащила данные из буфера обмена, преобразовала их и вновь переместила в буфер обмена).

На картинках ниже показан текст до и после преобразования. Для преобразования копировались все строки, указанные на картинке.
До.


После.


Работа со вспомогательными форматами данных.

Помимо основных форматов SLG System использует и ряд вспомогательных форматов -- для сохранений, меню, кнопок. Их можно назвать "файлами вспомогательных структур". У них есть множество разновидностей с разными структурами, причём даже файлы с одним расширением могут иметь разные структуры.
К ним можно отнести: .DAT, .dat, .ch, .cmf, .bin, .cfx, .x.
При русификации игр в глубоком редактировании из нет нужды. Тем не менее, в них есть ряд строк, нуждающихся в переводе.

Работа с файлами вспомогательных структур полностью аналогична переводу строк, "зашитих" в .exe-шник игры.

Инструкция по работе с файлами вспомогательных структур на примере Принцесс Сэнгоку 3.
1. Извлеките все файлы вспомогательных структур и скрипты из игры.
2. Расшифруйте все зашифрованные файлы игры.
3. Выберите строку, кою вы русифицировать желаете. Допустим, ту, что выделена на картинке ниже красным.


4. Используйте средство для поиска строк в нужной кодировке. Например, в MadEdit нужно перейти "Search" -> "Find/Replace in Files" (или нажать Ctrl+Shift+F), затем выбрать директорию поиска и кодировку, после чего нажать "Find". Сие продемонстрировано на рисунке ниже.


5. Строка таки нашлась! Пишем новую строку (в примере ниже уже после преобразования), но так, дабы после строки перед следующими ненулевыми байтами оставался хотя бы один нулевой байт (на примере ниже отмечено красным).
До.


После.


6. Как можете зреть ниже, строка успешно русифицирована. Продолжайте в том же духе, используя, ежели не можете найти какую-то строку, поиск.


Сведения о запуске игр на движке.

Движок по умолчанию использует японскую локаль, игры на нём требуют для запуска также японскую локаль. Возможно использование Locale Emulator для эмуляции локали и написание скрипта для запуска с помощью его API и, скажем, bat-ника. Во втором случае пользователю не придётся ничего делать, кроме как нажать на скрипт, который и сделает всю работу.

Игры более поздних версий, 3 и 4, могут нормально запускаться и без японской локали, но при этом возможны непредвиденные проблемы в их работе.

Скрипт bat, использующий API эмулятора локали для запуска игры на японской локали, представлен ниже, как и доказательство его работы на Принцессах Сэнгоку 4.
(Тем не менее, не забывайте, что для работы скрипта папка эмулятора локали должна быть в указанном в скрипте пути).
(Также на первой картинке показан скрипт автоустановки шрифта, что должен запускаться с правами администратора, в отличии от скрипта по запуску игры).




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

Translate 20.08.2021 1021 Tester Sengoku Hime, техчасть, Sangoku Hime, Проект, разбор, техработы, Gesen 18, взлом, Sengokuhime, Проекты, SLG System, техсредства, Unicorn-A, 69, Shihen69, ТАРИД, Sangokuhime, техническая часть, движок, форматы, движки, средства, Shihen, Shihen 69, перевод 4.6/11

Комментарии (2):
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
2
1 animukonata2019  
227888
Невероятная проделана работа, огромный респект

2
2 Хемуль  
87473
Воистину же Тестер величественнен!