build(python): simplify rpycdec vendor layout
This commit was merged in pull request #17.
This commit is contained in:
111
third_party/python/rpycdec/README.md
vendored
Normal file
111
third_party/python/rpycdec/README.md
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
# rpycdec
|
||||
|
||||
A tool for decompiling Ren'py compiled script files (.rpyc and .rpymc).
|
||||
|
||||
## Features
|
||||
|
||||
- Decompile `.rpyc` and `.rpymc` files to readable Ren'Py script code
|
||||
- Extract RPA archives
|
||||
- Create RPA archives from existing files or directories
|
||||
- Extract and edit Ren'Py save files (`.save` → JSON → `.save`)
|
||||
- Extract Ren'Py games from Android APK files
|
||||
- Extract translations from compiled scripts to `tl/{language}/` directories
|
||||
- Support for multiple Ren'Py versions (7.x, 8.x)
|
||||
|
||||
## Installation
|
||||
|
||||
Install with pip:
|
||||
|
||||
```sh
|
||||
pip install rpycdec
|
||||
```
|
||||
|
||||
Or install from source:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/cnfatal/rpycdec.git
|
||||
cd rpycdec
|
||||
pip install .
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Command Line Interface
|
||||
|
||||
Decompile a single file:
|
||||
|
||||
```sh
|
||||
rpycdec decompile script.rpyc
|
||||
```
|
||||
|
||||
Decompile all files in a directory:
|
||||
|
||||
```sh
|
||||
rpycdec decompile /path/to/game/
|
||||
```
|
||||
|
||||
Extract RPA archive:
|
||||
|
||||
```sh
|
||||
rpycdec unrpa archive.rpa
|
||||
```
|
||||
|
||||
Extract files whose archive paths match a regular expression:
|
||||
|
||||
```sh
|
||||
rpycdec unrpa archive.rpa -e '\.rpyc?$'
|
||||
```
|
||||
|
||||
Extract files with one of several suffixes (case-insensitive):
|
||||
|
||||
```sh
|
||||
rpycdec unrpa archive.rpa -s .rpy .rpyc
|
||||
```
|
||||
|
||||
`--expression`/`-e` may be repeated, as may `--suffix`/`-s`. When both are
|
||||
used, a file is extracted if it matches any expression or any suffix.
|
||||
|
||||
Create RPA archive:
|
||||
|
||||
```sh
|
||||
rpycdec rpa /path/to/game/files -o archive.rpa
|
||||
```
|
||||
|
||||
Extract Ren'Py game from Android APK:
|
||||
|
||||
```sh
|
||||
rpycdec extract-game game.apk
|
||||
```
|
||||
|
||||
Extract translations:
|
||||
|
||||
```sh
|
||||
rpycdec extract-translate /path/to/game/ -l Chinese
|
||||
```
|
||||
|
||||
## Security Warning
|
||||
|
||||
This tool processes `.rpyc`, `.rpymc`, `.rpa`, and `.save` files which use Python's `pickle` format internally. rpycdec uses restricted unpicklers with whitelist-based class loading to mitigate arbitrary code execution risks, but **no pickle safeguard is perfect**. Only process files from sources you trust.
|
||||
|
||||
Set `RPYCDEC_NO_WARNING=1` to suppress the CLI security warning.
|
||||
|
||||
See also: [Python pickle security warning](https://docs.python.org/3/library/pickle.html#module-pickle)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- **Q: Pickle error `ModuleNotFoundError: No module named '...'`**
|
||||
|
||||
A: This means our fake `renpy`/`store` packages don't cover the class your file needs. Please [open an issue](https://github.com/cnfatal/rpycdec/issues) with the Ren'Py version and the file that failed.
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Please [open an issue](https://github.com/cnfatal/rpycdec/issues) before submitting major changes so we can discuss the approach.
|
||||
|
||||
## Community & Support
|
||||
|
||||
- [GitHub Issues](https://github.com/cnfatal/rpycdec/issues) — Bug reports and feature requests
|
||||
- [Telegram Group](https://t.me/rpycdec) — Community discussion and support
|
||||
|
||||
## Alternative
|
||||
|
||||
- [unrpyc](https://github.com/CensoredUsername/unrpyc) - The well-established and widely-used Ren'Py script decompiler
|
||||
Reference in New Issue
Block a user