чем открыть файл rpyc
Чем открыть файл rpyc
Декомпиляция rpyc- и rpa-файлов. Утилиты от Vendor’а, Lolbot’а и скрипт от Eliont’а.
В этой статье я расскажу о трёх способах декомпиляции rpyc- и rpa-файлов. Эти методы просты и не требуют каких-то дополнительных программных средств, но, к сожалению, они не универсальны и не всесильны. Соответственно, если они не смогли справиться с имеющимися в вашем распоряжении архивами, то не стоит унывать, есть и другие утилиты и скрипты (например, unrpec или rpatool), просто они могут быть более сложными в применении и требовать установки дополнительных программ.
Метод 1. Утилита от Vendor’а (тексты)
Эта утилита подойдёт тем, кто хочет перевести небольшую одноязычную новеллу и не хочет разбираться со скриптами.
1. Качаем vendor_utils.zip, распаковываем во временную папку (например, \Katawa Shoujo\_temp)
2. Туда же копируем интересующие файлы. Например, script-a1-monday-RU.rpyc
3. Запускаем GetText.bat, получаем два файла: script-a1-monday-RU.TXT и script-a1-monday-RU.BIN
4. Глумимся над полученным файлом с расширением TXT (в BIN не лезем. )
5. Запускаем InsertText.bat, получаем новый вариант файла script-a1-monday-RU.rpyc
6. Перемещаем (это важно, если временную папку вы создали вложенной в главную папку игры, иначе игра будет ругаться на дубликаты, т.к. она найдёт ваш забытый во временной папке rpyc-файл и попытается его подключить к проекту) новый script-a1-monday-RU.rpyc обратно.
7. Запускаем игру…
Ссылку на первоисточник, к сожалению, найти не смог 🙁
Метод 2. Утилита от lolbot’а (скрипты)
Эта утилита позволяет получить исходники всех скриптов, включая системные, и подойдёт для любого уровня проекта, лишь бы справилась…
1. Качаем lolbot_decompile.zip, распаковываем в папку с игрой (в результате файл decompile.rpy из архива должен оказаться в папке \game, например \Katawa Shoujo\game)
2. Запускаем игру и некоторое время ждём, пока игра не начнётся. Всё, из игры можно выходить. Наигрались 🙂
3. Если первые два пункта выполнены без ошибок, то в корневой папке игры (например, \Katawa Shoujo) увидите огромное количество файлов с длинными названиями, например _Users_delta_Documents_ks svn_Katawa Shoujo Act 1_game_RU_ui_strings-RU.rpy.txt. Это – исходный код во всей красе. Он менее читабелен, чем полученный в методе 1, зато делать с ним можно ну всё что угодно. В том числе править имена персонажей, меню и прочее. Файл decompile.rpy из папки \game можно удалять, иначе при каждом запуске игра будет генерить эти многочисленные файлы.
4. После внесения изменений вспоминаем, что движок RenPy сам генерит этот файл rpyc из rpy. Итак, в папку игры копируем уже исправленный файл (например, _Users_delta_Documents_ks svn_Katawa Shoujo Act 1_game_RU_ui_strings-RU.rpy.txt) и приводим его название в нормальный вид (например, ui_strings-RU.rpy)
5. Запускаем игру…
6. После запуска получаем свежесгенерённый rpyc-файл, а rpy-файл можно стирать
Очевидно, что описанные выше операции можно проделывать и над другими файлами, например над script-a1-monday-RU.rpyc.
Метод 3. Скрипт от Eliont’а (графика, звук, шрифты и т.п.)
Для небольшой новеллы:
1. В папке \game (например, \Sugars Delight\game) переименовываем файлы script.rpyc и (если есть) script.rpy в script.rpyc_ и script.rpy_, соответственно.
2. В папке \game (например, \Sugars Delight\game) создаём файл script.rpy со следующим содержимым:
200?’200px’:»+(this.scrollHeight+5)+’px’);»>
init python:
image_files = [
fn
for dir, fn in renpy.loader.listdirfiles()
if not fn.lower().endswith(«.rpy») and not fn.lower().endswith(«.rpyc») and not fn.lower().endswith(«.rpa») and not fn.lower().endswith(«.rpyb»)
if not fn[0] == «_»
]
def unarchive(original_filename, new_filename):
import os
import os.path
new_filename = config.basedir + «/» + new_filename
dirname = os.path.dirname(new_filename)
if not os.path.exists(dirname):
os.makedirs(dirname)
orig = renpy.file(original_filename)
new = file(new_filename, «wb»)
new.write(orig.read())
new.close()
orig.close()
label start:
python:
for img in image_files:
unarchive(img, «extracted/»+img)
return
3. Запускаем игру, жмём «Начать» и ждём, пока снова не появится меню (т.е. игра не запустится), после чего выходим из игры.
4. В новой папке \extracted (например, \Sugars Delight\extracted) получаем всё, кроме самих скриптов, т.е. видео, музыку, аудио, шрифты.
5. Удаляем наш script.rpy, переименовываем описанные в п.1 файлы script.rpyc_ и script.rpy_ обратно в script.rpyc и script.rpy.
Для новеллы побольше:
0. Перво-наперво нам понадобятся исходники скриптов, которые можно получить методом 2.
1. Находим файл, содержащий метку label start:. Меняем расширение оригинальному файлу (например, ui_labels.rpyc переименовываем в ui_labels.rpyc_)
2. Копируем полученный по 2-му методу в эту папку одноимённый файл (например, ui_labels.rpy), в котором удаляем блок, начинающийся с label start:.
3. В папке \game (например, \Katawa Shoujo\game) создаём файл script.rpy со следующим содержимым:
200?’200px’:»+(this.scrollHeight+5)+’px’);»>
init python:
image_files = [
fn
for dir, fn in renpy.loader.listdirfiles()
if not fn.lower().endswith(«.rpy») and not fn.lower().endswith(«.rpyc») and not fn.lower().endswith(«.rpa») and not fn.lower().endswith(«.rpyb»)
if not fn[0] == «_»
]
def unarchive(original_filename, new_filename):
import os
import os.path
new_filename = config.basedir + «/» + new_filename
dirname = os.path.dirname(new_filename)
if not os.path.exists(dirname):
os.makedirs(dirname)
orig = renpy.file(original_filename)
new = file(new_filename, «wb»)
new.write(orig.read())
new.close()
orig.close()
label start:
python:
for img in image_files:
unarchive(img, «extracted/»+img)
return
Расширение файла RPYC
Оглавление
Мы надеемся, что вы найдете на этой странице полезный и ценный ресурс!
1 расширений и 0 псевдонимы, найденных в базе данных
✅ RenPy Compiled Script
Другие типы файлов могут также использовать расширение файла .rpyc.
По данным Поиск на нашем сайте эти опечатки были наиболее распространенными в прошлом году:
Это возможно, что расширение имени файла указано неправильно?
Мы нашли следующие аналогичные расширений файлов в нашей базе данных:
Если дважды щелкнуть файл, чтобы открыть его, Windows проверяет расширение имени файла. Если Windows распознает расширение имени файла, файл открывается в программе, которая связана с этим расширением имени файла. Когда Windows не распознает расширение имени файла, появляется следующее сообщение:
Windows не удается открыть этот файл:
Чтобы открыть этот файл, Windows необходимо знать, какую программу вы хотите использовать для его открытия.
Если вы не знаете как настроить сопоставления файлов .rpyc, проверьте FAQ.
🔴 Можно ли изменить расширение файлов?
Изменение имени файла расширение файла не является хорошей идеей. Когда вы меняете расширение файла, вы изменить способ программы на вашем компьютере чтения файла. Проблема заключается в том, что изменение расширения файла не изменяет формат файла.
Если у вас есть полезная информация о расширение файла .rpyc, напишите нам!
Как декомпилировать игры
Маленькое пособие для тех, кто интересуется, как устроены их любимые интерактивные работы. Разберём все популярные и не очень популярные движки.
Фотоиллюстрация статьи: Alexander Andrews
Ren’Py
Сначала при помощи rpatool нужно разархивировать файлы RPA:
Так легко посмотреть аудио и изображения из игры. Но так как нас интересуют скрипты, придётся пойти дальше. Скачайте файл un.rpyc и положите его в папку с игрой, а затем запустите саму игру. После этого она сама декомпилирует все .rpyc файлы в обычные .rpy на Питоне.
Z-машина
С Inform всё хитро, потому что у него две виртуальных машины: Z-машина и Glulx. Начнём со старенького.
В общем случае для файлов Z1-Z8 есть дезассемблер TXD, который входит в пакет ztools. Его придётся собирать из исходников на Си, но после этого всё довольно просто: ему достаточно указать адрес файла, и он выдаст его код. Сам код даётся в опкодах для Z-машины, поэтому он ничего не скажет непосвящённым людям, а вот полный список используемых строк в игре будет очень полезен. Это очень полезно, например, при переводах парсерок.
К сожалению, на играх RInform txd падает (по segfault) как только доходит до русских строк.
Самые старые файлы Z1-Z3 также открываются онлайн при помощи интерпретатора Encrusted. Просто откройте файл, нажмите на «гамбургер-меню» справа и выберите галочку «Show object tree», которая покажет дерево всех объектов в игре. Это не декомпиляция, но тоже интересно.
Для glulx есть декомпилятор mrifk. Он даёт полный псевдокод игры, вместе с комнатами, объектами, параметрами и глаголами, но тоже очень не любит RInform.
> «Sfbf 5so-nibtew ntgno( — rpqa7icafs Xlli- — Sfbf pqacea tgf poqa rpasw»-
Кроме того, есть онлайн-декомпилятор glulx-strings, который даёт полный список строк из игр Glulx, Z-машины, TADS 2 и TADS 3. Он не ломается на русских играх, но текст игр на RInform-Z6 будет зашифрован подстановкой. Пытливый читатель легко поймёт, из какой игры была цитата выше.
Формат QSP открывается QGen’ом. Этого достаточно, чтобы сделать патч к какой-нибудь чужой заброшенной игре.
Если игра защищена паролем, то можно воспользоваться декодером от AleksVersus.
Ink использует машиночитаемый формат JSON, в котором всё довольно прозрачно для человека, хотя трудно разобрать логику. По крайней мере, видны все строки. Обратной трансформацией пока никто не занимался.
Unity
Конечно, уже существует платный обфускатор, который делает код менее читабельным.
Ресурсы распаковываются, например, через Unity Assets Explorer.
INSTEAD
Игры на INSTEAD шифруются как текст. Кодирование исходников идёт в обратную сторону при запуске игры, и в проекте с открытым исходным кодом легко посмотреть, как же оно устроено. И относительно легко повторить.
В отличие от других движков, INSTEAD ещё не настолько популярен, чтобы в интернете были легко упакованные программы для распаковки игр. Поэтому вам понадобится консоль, компилятор Си и кусок кода из instead.c. Кусок с побитовым сдвигом нужно поставить в простую программу чтения файла в консоли. (Оставлю это упражнение пытливому читателю.) В полученном коде сохраняются даже комментарии автора.
Справедливости ради, существует вариант с реальной компиляцией кода Lua, но им никто не пользуется, потому что байтовый код непереносим: пришлось бы выпускать несколько версий игры для каждой архитектуры (отдельно 32 бита, 64 бита, Android и так далее).
Незашифрованные игры на URQ достаточно открыть в текстовом редакторе. Опытные игроки называют это «прохождение в блокноте».
Алгоритмы декодирования QS1 и QS2 можно взять из исходников FireURQ.
Законченных декодеров, конечно, нет в публичном доступе, но наш пытливый читатель на уровне начинающего программиста, конечно, справится с этой задачей.
В ЯРИЛ тоже есть шифрование игр, и, что неожиданно, оно использует реальную криптографию — ключи DES. Написать собственный декодировщик DES уже гораздо сложнее чем пять раз перепройти «Комсомольца», так что ЯРИЛ останется единственной неприступной платформой в этом списке.
Twine
Пропустим другие HTML-платформы, потому что код игр на Javascript и HTML уже достаточно читабелен. Но вот Twine стоит подробного осмотра.
Во-первых, все игры Twine открываются в самом редакторе Twine. Игры Twine 1 открываются только в редакторе Twine 1 и то же самое для второй версии. Поэтому если вы хотите посмотреть исходники какой-нибудь игры, её достаточно импортировать в редактор.
Кроме того, при помощи программы tweego HTML-файл можно преобразовать в приличный человеческий черновик для редактирования.
TADS 2 (дополнение)
Кроме вышеупомянутой страницы, которая достаёт все строки из игры, есть ещё один скрипт на Perl, который полностью декомпилирует игру. Если запустить его в командной строке, то вы получите файл .t со всеми функциями игры.
Скрипт даёт читабельный вывод даже на русской RTADS, но в моём тестировании исходник скомпилировался без ошибок только для игры на английском.
Чем открыть файл rpyc
This is a simple tool allowing you to create, modify and extract Ren’Py Archive (.rpa/.rpi) files. Currently, only writing to RPAv2/RPAv3 archives is supported.
Will extract every file from foo.rpa into the current directory, making subdirectories when necessary.
Will add all files from the directory sprites_new to the directory sprites in the archive, giving more information about what it’s doing.
rpatool can also be included in any other project (following the license conditions, of course) to provide the RenPyArchive class. A small overview:
The constructor, which will optionally load an archive file.
file : the archive file to open. If None, no archive will be attempted to open.
version : the archive format version used to save the archive when RenPyArchive.save([file]) is called. Default: 3
padlength : the maximum number of bytes of padding to put between files when saving. Default: 0
key : the obfuscation key used when saving RPAv3 archives. Default: 0xDEADBEEF
verbose : print info on what we are doing to the command line. Default: False
Give a list of all filenames currently in the archive.
Returns True if filename is found in the archive, False otherwhise.
Change the contents of a current file in the archive. Will raise an IOError if the file isn’t known in the archive.
Remove filename from the archive. Will raise an IOError if the filename isn’t known in the archive.
Read and return the content of file filename in the archive. Will raise an IOError if the filename isn’t known in the archive.
rpatool is licensed under the WTFPL. See the LICENSE file for more details.
This tool is intended for use with files on which the authors allowed modification of and/or extraction from ONLY and the unpermitted use on files where such consent was not given is highly discouraged, and most likely a license violation as well. Support requests for help with dealing with such files will not be answered.
Credits for the creation of the Ren’Py archive format and the reference code in Ren’Py go to renpytom.
RPA Extract
A downloadable RPA Extractor for Windows
To do this on macOS (aka Mac OS X), watch this video.
To do this on Linux, the macOS video and or this comment might help.
Additional video guides:
Using RPAEX |
Mod ren’py games (art) |
Decompile rpyc files (for modding code) |
Useful for people who made a game and uploaded it and then their hard drive with the source files exploded.
Using this tool on other people’s games might be considered ‘reverse-engineering’. If you have doubts about the legality of doing so, consider reading the terms (EULA) of the game you are trying to reverse-engineer and consider reading this stackexchange thread.
Using this tool on other people’s games could also simply be considered cheating, which no one in the world will care about (I am not a lawyer).
If you want more than look at pictures/listen to audio to satisfy your personal curiosity, remember not to infringe on other people’s copyright. Protip: fair use.
Download
Click download now to get access to the following files:
Comments
По поводу детекта Virustotal, все крупные и доверенные ничего не нашли, остальные возбудились кривые и малознакомые. В Virscan только один детект https://r.virscan.org/language/en/report/545f6ce71b9d31f9262fc2022bbc1514
but i’m still downloading it
itch.io supports viruses?
2 years ago it was only 10. then 9. see this thread: https://itch.io/post/1059029
The method I used to create this exe is known for causing false positives: https://stackoverflow.com/questions/43777106/program-made-with-pyinstaller-now-s. I guess a lot of virus script kiddies also use it and antivirus isn’t smart enough to tell the difference between the actual code being run.
So BitDefender, McAffee, Ad-Aware flag rpaex.exe 😐 damn. I don’t know if I would run this if someone else was to give this exe to me now. At least Kaspersky, Microsoft, Malwarebytes, Avast and Symantec don’t worry.
Worked super well! also commenting to remind myself to send a few bucks when i get paid lol
Do you know how to change game screen resolution with existing scripts to improve performance?
I have tried several basic ways to improve performance, such as setting realtime CPU priority, changing graphics preference to high performance (NVIDIA). However, I think the results are not much different.
Yup. It’s Ren’Py games.
I mean like changing an existing Python script for game resolution.
You can download UnRen.bat. Its a free tool that will unarchive all renpy files, images, and everything in a renpy game so you can alter any settings. Youll just have to find which file they put those commands in.It can vary. Use Notepad++ to quickly edit the RPY files and resave them.
Using PyCharm. Just need to find the corresponding lines of code.
No Prob. If you tell me the game and what you want I might be able to do it for you and send it back to you.
you have- you have read my mind
i wanna get the ddlc sprites im- even the thumbnail is ddlc
I used the console because just dragging wouldn’t work and I got:
First up, try this from another reply of mine:
Put all into C:\test\
or D:\test\, as long as you ensure there are no non-ASCII characters in the path (and no whitespace) and that the path is very short.
It was already in C: \test\
I also tried running as admin, with no luck
1. Re-download the game, the rpa file might be corrupted
2. Triple-check you drag/give-as-parameter the archive.rpa file and not some other file
3. Ensure the game is off (the file is not blocked?) while you extract
4. Restart windows (yes I know it’s 2021 but still), allow all pending updates to finish. Perhaps even run updates to fix things broken by previous updates (Just a month ago I had to help fix a computer that just decided onboard audio doesn’t work and windows update «fixed» it)
5. Use the macOS/Linux method (see description)
6. Oh boy. I can only think of tiny RAM, defective RAM, defective HDD/SSD, defective other hardware or simply an environment that is somehow weirding the script out, which obviously is using zlib. Perhaps you are a dev/packager and somehow added a «bad» (read this scrip can’t handle it) version of zlib to path?