Работа с RPYC- и RPA-файлами
"Обфускация" (шифровка) исходного кода
Обфускация или запутывание кода — приведение исходного кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.
Рассмотрим один из самых простых методов шифрования кода. Для удаления исходного кода, но сохранения функциональности достаточно удалить .rpy-файлы, оставив лишь их .rpyc-версии. В .rpyc-файле содержится скомпилированный вариант кода вашего мода с нечитаемым для человека синтаксисом. Удаление .rpy на работоспособность мода не влияет.
Создание RPA-архива
Для создания rpa-архива можно воспользоваться:
Инструмент ES Doc
- Откройте упаковщик RPA и добавьте файлы или папку с ресурсами.
- Укажите имя архива, например
my_mod.rpa. - Проверьте «Пути внутри архива». Они должны совпадать с путями в коде относительно папки
game:game/my_mod/images/bg.pngдолжен статьmy_mod/images/bg.png. При выборе папкиgameеё имя удаляется автоматически. Для других папок настройте «Удалить из начала путей» и «Добавить папку в начале». - Нажмите «Создать и скачать RPA».
RPATool
Необходимо установить Python версии не ниже 3.1, при установке выберите опцию Добавить Python в PATH.
- Скачайте файл
rpatoolи положите в удобное для вас место. - Нажмите ПКМ с зажатым Shift, выберите
Открыть окно PowerShell здесь. - Введите в консоль (путь без кавычек):
python rpatool -c название_архива.rpa путь_до_папки_с_файлами_без_кавычек
Если папок несколько, то разделяйте их пробелами, если нужно заархивировать лишь один файл, то не забудьте указать его расширение.
По окончании архивации появится соответствующий RPA-архив рядом с файлом rpatool.
Ren'Py
- Установите Ren'Py удобным для вас способом, запустите
renpy.exe. - Создайте новый проект в Ren'Py, дайте любое имя, любые настройки.
- Перейдите в папку проекта, создайте новый
rpy-файл и откройте его. - Пропишите:
init python:
build.archive("archive", "all") # Создаём новый архив с названием 'archive'
build.classify('game/**', 'archive') # Помещаем все файлы из папки 'game' в 'archive'
При необходимости вместо всех файлов можно указать конкретные расширения:
init python:
# Изображения
build.classify('game/**.jpg', 'archive')
build.classify('game/**.png', 'archive')
# Музыка
build.classify('game/**.ogg', 'archive')
build.classify('game/**.mp3', 'archive')
# Не добавляем в архив все файлы с расширением .txt в папке и подпапках 'game'.
build.classify("**.txt", None)
Также можем положить файлы в разные архивы:
init python:
# Создаём архивы
build.archive("images", "all")
build.archive("music", "all")
# Изображения в 'images'
build.classify('game/**.jpg', 'images')
build.classify('game/**.png', 'images')
# Музыка в 'music'
build.classify('game/**.ogg', 'music')
build.classify('game/**.mp3', 'music')
Подробнее о параметрах при создании архива здесь.
- Переходим обратно в
renpy.exe, выбираем проект, нажимаемBuild Distributions. - Выбираем
PC: Windows and Linux, нажимаемBuild. - После окончания разархивируем архив с билдом проекта и находим
rpa-архивы.
Интеграция RPA в БЛ
Допустим, мод лежит в game/my_mod. До упаковки фон находился в game/my_mod/images/bg.png, а музыка — в game/my_mod/audio/theme.ogg. Внутри RPA сохраните пути без game/:
my_mod/images/bg.png
my_mod/audio/theme.ogg
Скачанный my_mod.rpa положите в game/my_mod. Рядом создайте archive_loader.rpy:
init -9999 python:
mod_archive = "my_mod/my_mod"
if mod_archive not in config.archives:
config.archives.append(mod_archive)
В config.archives указывается путь от game до архива без расширения .rpa. Добавляйте свой архив в существующий список: присваивание config.archives = [...] уберёт из него архивы игры и других модов. Загрузчик оставьте вне RPA, чтобы игра могла выполнить его до обращения к ресурсам.
Пути к ресурсам в сценарии остаются прежними:
image my_mod_bg = "my_mod/images/bg.png"
label my_mod_start:
scene my_mod_bg
play music "my_mod/audio/theme.ogg"
"Ресурсы загружены из RPA."
return
Папка, в которой лежит RPA, не добавляется к путям внутри него автоматически. Если положить в архив просто images/bg.png, обращение к my_mod/images/bg.png не сработает.
У разных модов должны быть разные пути ресурсов. append сохраняет остальные архивы, но не устраняет совпадения имён файлов: при поиске используется первый подходящий архив в списке, а отдельные файлы на диске имеют приоритет над архивами. Для проверки перенесите исходные ресурсы из game в резервную папку вне игры, перезапустите БЛ и проверьте загрузку изображений и музыки.
В современном Ren'Py архивы в game подключаются автоматически. Для БЛ с её старым загрузчиком и архивом в папке мода используйте явное добавление выше. Подробнее: config.archives и загрузчик Ren'Py 6.
Декодирование RPYC
Для декодирования rpyc-файлов вы можете воспользоваться:
UnRen
- Скачайте архив и распакуйте bat-ник в директорию
game. - Запустите bat-файл и выберите
Decompile rpyc files. - По окончании нажмите любую клавишу для выхода или введите
1в командную строку, чтобы вернуться.
Будут декодированы все rpyc в директории game, включая подпапки.
UnRpyc
Перейдите в releases и скачайте файл в зависимости от варианта декодирования:
bytecode.rpybun.rpy/un.rpyc
Скачайте rpyb-файл, положите в game\cache (с заменой, если необходимо) и запустите игру.
Или
Скачайте un.rpy или un.rpyc, положите в game и запустите игру.
После загрузки игры и запуска главного меню все rpyc-файлы, включая rpyc из модов Мастерской, будут декодированы.
Декодирование RPA
Для декодирования rpa-файлов вы можете воспользоваться:
UnRen
- Скачайте архив и распакуйте bat-ник в директорию
game. - Запустите bat-файл и выберите
Extract RPA packages. - По окончании нажмите любую клавишу для выхода или введите
1в командную строку, чтобы вернуться.
Будут декодированы все rpa-архивы в директории game, включая подпапки.
UnRpa
- Необходимо установить
Pythonверсии не ниже3.1, при установке выберите опциюДобавить Python в PATH. - Поддерживается версия Windows не ниже Windows 8.
- Установите и разархивируйте в удобное для вас место.
- Запустите
UnRPA Commander.exe. - Нажмите
Install UnRPA. - В первом поле укажите полный путь до
rpa-архива. - Во втором поле укажите путь распаковки
rpa-архива. - Нажмите
Extract All.
RPATool
Необходимо установить Python версии не ниже 3.1, при установке выберите опцию Добавить Python в PATH.
- Скачайте файл
rpatoolи положите в удобное для вас место. - Нажмите ПКМ с зажатым Shift, выберите
Открыть окно PowerShell здесь. - Введите в консоль (пути без кавычек):
python rpatool -x путь_до_архива.расширение -o путь_до_папки_с_разархивированными_ресурсами
Обновлено