Skip to content

Latest commit

 

History

History
363 lines (319 loc) · 21.8 KB

README.md

File metadata and controls

363 lines (319 loc) · 21.8 KB

SLGSystemScriptTool

English

Dual languaged GUI tool for (de)compiling and (de/en)crypting (with key finding) scripts of SLG System engine. Supports all known versions of SLG System: 0, 1, 2, 3 (3.0, 3.1), 4 (4.0, 4.1), but may lack of support of some it's variations. If this tool does not support a game, write an "Issue" here with attached unsupported scripts and highlighting the game name. With this tool you can: decompile and compile script of SLG System, (en/de)crypt script of any game on SLG System, find key of any game on SLG System via cryptoattack.

It has following features:

  • Help module.
  • Crypto module (for (en/de)cryptions and cryptoattacks).
  • Scripts version 0 module (separate module because version 0 scripts are too different from the rest).
  • Script older versions module.

For data editing see SLGSystemDataTool.

Tested with

Russian

Двуязычное средство с графическим интерфейсом пользователя для (де)компилирования и (рас)шифровки (с нахождением ключей) скриптов движка SLG System. Поддерживает все известные версии SLG System: 0, 1, 2, 3 (3.0, 3.1), 4 (4.0, 4.1), хотя может и не поддерживать некоторые их вариации. Коль средство не поддерживает какую-то игру, пишите в "Issues" к сему средству, приложив скрипты и указав игру. С сим средством вы можете: декомпилировать и компилировать скрипты SLG System, (рас)шифровывать скрипты любых игр, находить ключ любой игры на SLG System посредством криптоатаки.

У неё есть следующие функции:

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

С работы с форматами данных движка используйте SLGSystemDataTool.

Протестировано с

Usage / Использование

English

Cryptoattack

  1. Start the tool.
  2. Go to "Crypto Module" and focus on the right half of the screen.
  3. Choose the main.sd (and only the main.sd!) script.
  4. Choose the output text file (with the cryptoattack result).
  5. Choose the attack type. Almost all games are weak for "2 0 0 2 0", but an earlier games may be weak for "2 0 2 0 0". There is only one possible type for each main.sd!
  6. Choose the attack mode of operation -- find only one possible key (may not work depending on settings) or all.
  7. Choose the attack mode of attack. Earlier games (elder of version 2 and version 3) use second (i-(key>>16)&0xff), but version 4 games use first (i^(key&0xff)).
  8. Run it! If you picked attack mode and type correctly, you'll likely get first correct key in 1 minute! If you can't get any key in 5 minutes, just try other settings.

0eng

(En/de)cryption

  1. Start the tool.
  2. Go to "Crypto Module" and focus on the left half of the screen.
  3. Choose the processing mode (per file or per folder).
  4. Choose the input and output files or folders.
  5. Choose the key. You can choose known key in the ComboBox vidjet, but also can write your own key (in hex form!)
  6. Choose the encryption mode. Earlier games (elder of version 2 and version 3) scripts use second (i-(key>>16)&0xff), but version 4 games use first (i^(key&0xff)). Almost all supplement data files use the first mode.
  7. Run it! Soon it will be (de/en)crypted...

1eng

Version 0 Script (De)compilation

  1. Start the tool.
  2. Go to "0-Version Script".
  3. Choose the processing mode (per file or per folder).
  4. Choose the input and output files or folders.
  5. Choose the encoding (of both script and decompiled file). If you want to create script with different encoding, just decompile it with old encoding, change encoding of decompiled script (txt) and create a new script with new encoding.
  6. Run it! Soon it will be (de)compiled...

2eng

Other Versions Script (De)compilation

  1. Start the tool.
  2. Go to "1+ Versions Scripts".
  3. Choose the decompilation mode (to file or to folder). This mode is also complitation mode: from file or from folder.
  4. Choose the script folder and base (name of script files without extension). You may want to click at "..." button at the right of "script name" field and choose the ".sd" script, and boyh name without extension and folder will be filled authomatically.
  5. Choose the decompiled txt script file or folder. Do note, even if you decompile it to one file, there will be some technical files starting "__" in the same folder.
  6. Choose the encoding (of both script and decompiled file). If you want to create script with different encoding, just decompile it with old encoding, change encoding of decompiled script (txt) and create a new script with new encoding.
  7. Choose the version via ComboBox vidget.
  8. Run it! Soon it will be (de)compiled... But, to be fair, even if commonly (de)compilation takes about 1 minute, compilation from multiple files (from a folder) takes several minutes.

3eng

Russian

Криптоатаки

  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 минут, просто попробуйте иные настройки.

0rus

(Рас)шифрование

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

1rus

(Де)компиляция скриптов версии 0

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

2rus

(Де)компиляция скриптов остальных версий

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

3rus

Line and Message Breaks Help / Помощь по организации переносов по строкам и сообщениям

Sometimes there could be a very big problem: text may not fully get in textbox. But with this tool thou don't need to cut some part of text, no. Thou can use line and message breaks. Methods are below.

FOR GAME (SCRIPT) VERSIONS 0, 1 AND 2

For line break append new line in "GROUP" block in the current message.

Old code

#1: ["MESSAGE", 159, 43]
[
    "*",
    "**",
    "???",
    [
        "GROUP"
        "Help! Take this to the next line!"
    ]

New code

#1: ["MESSAGE", 159, 43]
[
    "*",
    "**",
    "???",
    [
        "GROUP"
        "Help!",
        "Take this to the next line!"
    ]

FOR GAME (SCRIPT) VERSIONS 3 AND 4

For line break insert in the current message this.

\n

FOR GAME (SCRIPT) VERSIONS 0, 1 AND 2

For message breaks just do the same as with line breaks.

FOR GAME (SCRIPT) VERSIONS 3 AND 4

For message breaks duplicate the message command and "WAIT_FOR_CLICK" (if existed). It's preferable to edit "postcommand args", but not mandatory. It has worked in my tests even without editing them.

Example below is from Sengoku Hime 4.

Old code.

#1: ["MESSAGE", 159, 43]
[
    "*",
    "**",
    "???",
    [
        "GROUP",
        [
            "「追加ができたぞー♪ 皆、どんどん食べてくれ」",
            0,
            0,
            -4276546,
            -1
        ]
    ]
]
#1: ["WAIT_FOR_CLICK", 159, 45]
[]

New code.

#1: ["MESSAGE", 159, 43]
[
    "*",
    "**",
    "???",
    [
        "GROUP",
        [
            "「追加ができたぞー♪ 皆、どんどん食べてくれ」",
            0,
            0,
            -4276546,
            -1
        ]
    ]
]
#1: ["WAIT_FOR_CLICK", 159, 44]
[]
#1: ["MESSAGE", 159, 45]
[
    "*",
    "**",
    "???",
    [
        "GROUP",
        [
            "「追加ができたぞー♪ 皆、どんどん食べてくれ」",
            0,
            0,
            -4276546,
            -1
        ]
    ]
]
#1: ["WAIT_FOR_CLICK", 159, 46]
[]

На русском

Иногда можно столкнуться с одной большой-пребольшой проблемой: текст может не полностью влезать в текстовое окно. Однако, с сим средством вам не нужно обрезать его, отнюдь. Вы можете организовывать переносы по строкам и сообщениям. Методы указаны ниже.

ДЛЯ ВЕРСИЙ СКРИПТА 0, 1 И 2.

Для переноса по строкам добавьте новую строку в блок "GROUP".

Old code

#1: ["MESSAGE", 159, 43]
[
    "*",
    "**",
    "???",
    [
        "GROUP"
        "Помогите! Перенесите сие на следующую строку!"
    ]

New code

#1: ["MESSAGE", 159, 43]
[
    "*",
    "**",
    "???",
    [
        "GROUP"
        "Помогите!",
        "Перенесите сие на следующую строку!"
    ]

ДЛЯ ВЕРСИЙ СКРИПТА 3, 4.

Для переносов по строкам добавьте в текущее сообщение следующее.

\n

ДЛЯ ВЕРСИЙ СКРИПТА 0, 1 И 2.

Перенос по сообщениям делается так же, как и по строкам.

ДЛЯ ВЕРСИЙ СКРИПТА 3 И 4.

Для переносов по сообщениям продублируйте текущую команду сообщения и "WAIT_FOR_CLICK" (при наличии). Рекомендуется также изменить т.н. "посткомандные аргументы", но это не обязательно, так как в моих тестах работало и без изменений их.

Пример ниже представлен для Принцесс Сэнгоку 4.

Старый код.

#1: ["MESSAGE", 159, 43]
[
    "*",
    "**",
    "???",
    [
        "GROUP",
        [
            "「追加ができたぞー♪ 皆、どんどん食べてくれ」",
            0,
            0,
            -4276546,
            -1
        ]
    ]
]
#1: ["WAIT_FOR_CLICK", 159, 45]
[]

Новый код.

#1: ["MESSAGE", 159, 43]
[
    "*",
    "**",
    "???",
    [
        "GROUP",
        [
            "「追加ができたぞー♪ 皆、どんどん食べてくれ」",
            0,
            0,
            -4276546,
            -1
        ]
    ]
]
#1: ["WAIT_FOR_CLICK", 159, 44]
[]
#1: ["MESSAGE", 159, 45]
[
    "*",
    "**",
    "???",
    [
        "GROUP",
        [
            "「追加ができたぞー♪ 皆、どんどん食べてくれ」",
            0,
            0,
            -4276546,
            -1
        ]
    ]
]
#1: ["WAIT_FOR_CLICK", 159, 46]
[]

Some information about SLG System engine / Некоторая информация про движок SLG System

English

SLG System Engine is not very popular, but also not very obsqure engine, used in Gesen 18 (may be not only whose) games. It's in fact some sort of modified Tenka Touitsu ADVANCE engine. There are a lot of good visual novels and jRPG's uses it, such as Sengoku Hime and Sankoku Hime series.

Oldest versions of it, such as Shihen 69's version or version "0", does use just a simple script .sd. Older versions does use multicomponent script from a group of files, that differ depending of the game version. The main file of it is .sd, but you cannot simply edit only one this file, because it will break offset-links between files and so the game won't run correctly. You need to edit all files synchronically and reflect changes in one file in others.

Since third version of the engine (or even the latest games of second version) commonly use DRM and the scripts and files of supplement structures encryption.

Русский

SLG System является не слишком популярным, но и не слишком неизвестным движком, используемым в играх Gesen 18 и, вероятно, Unicorn-A. На самом деле является своего рода модификацией движка Тэнка то:ицу ADVANCE. На нём написано немало сдобный визуальных новелл и японских ролевых игр (jRPG), например серии Принцессы Сэнгоку и Принцессы Троецарствия.

Версия "0" данного движка используют однофайловые скрипты .sd, более поздние -- многокомпонентные скрипты из ряда файлов, которые меняются зависимости от версий и число которых обычно составляет от 9 до 11, причём все файлы связаны. Главным файлом таких многокомпонентных скриптов является .sd, хотя работать только с одним сим файлом, не меняя другие в соответствии со сделанными изменениями, нельзя, так как связность между ними сломается и игра не будет работать корректно.

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