diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2018-07-14 20:58:29 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2018-07-14 20:58:29 +0100 |
commit | 0cf2f20608308acdf3cb922c3736446bbd8f3388 (patch) | |
tree | 07815070629c7c11000a7f51ceb8ccbccb49a809 /games-engines/renpy/files | |
parent | 1798c4aeca70ac8d0a243684d6a798fbc65735f8 (diff) |
gentoo resync : 14.07.2018
Diffstat (limited to 'games-engines/renpy/files')
5 files changed, 0 insertions, 656 deletions
diff --git a/games-engines/renpy/files/renpy-6.99.12.4-compat-infinite-loop.patch b/games-engines/renpy/files/renpy-6.99.12.4-compat-infinite-loop.patch deleted file mode 100644 index 3a2942cb04fd..000000000000 --- a/games-engines/renpy/files/renpy-6.99.12.4-compat-infinite-loop.patch +++ /dev/null @@ -1,42 +0,0 @@ -Adapted from git HEAD: -commit ff308191a190bf7c5c2118a31f3d8569a0904c04 -Author: Andrew Savchenko <bircoph@gmail.com> -Date: Mon Jul 17 08:00:07 2017 +0300 - - Increase infinite loop hardcoded values - - On many old hardware, e.g on my Atom netbook games hit this limit, - but otherwise work fine. Increasing the limit helps. People are - also reporting this issue in many cases (old laptops, stow tablets, - etc where games fail due to this issue and work otherwise): - - https://translationprojectvisualnovels.blogspot.ru/2016/09/monster-girl-quest-android-15092016.html - https://lemmasoft.renai.us/forums/viewtopic.php?f=8&t=30521&start=90 - https://steamcommunity.com/app/356530/discussions/0/365163686036650662/ - (and many more, just google) - -index 00c7562..a7e361c 100644 ---- a/renpy/display/core.py -+++ b/renpy/display/core.py -@@ -2845,7 +2845,7 @@ class Interface(object): - - while rv is None: - -- renpy.execution.not_infinite_loop(10) -+ renpy.execution.not_infinite_loop(50) - - # Check for a change in fullscreen preference. - if ((self.fullscreen != renpy.game.preferences.fullscreen) or -diff --git a/renpy/main.py b/renpy/main.py -index 6f14d77..960d2fd 100644 ---- a/renpy/main.py -+++ b/renpy/main.py -@@ -318,7 +318,7 @@ def main(): - game.contexts = [ renpy.execution.Context(False) ] - game.contexts[0].init_phase = True - -- renpy.execution.not_infinite_loop(60) -+ renpy.execution.not_infinite_loop(300) - - # Load the script. - renpy.game.exception_info = 'While loading the script.' diff --git a/games-engines/renpy/files/renpy-6.99.12.4-compat-style.patch b/games-engines/renpy/files/renpy-6.99.12.4-compat-style.patch deleted file mode 100644 index 122ebf1e43e6..000000000000 --- a/games-engines/renpy/files/renpy-6.99.12.4-compat-style.patch +++ /dev/null @@ -1,43 +0,0 @@ -commit 1d350d993d2b51df7880e92b48ed103e059ec385 -Author: Andrew Savchenko <bircoph@gmail.com> -Date: Sun Jul 16 17:07:27 2017 +0300 - - Fix compatibility problem With ElvenRelations-1.2: - - When starting game: - - Full traceback: - File "/home/andrew/src/_compat/styles.rpymc", line 22, in script - File "/usr/lib64/python2.7/site-packages/renpy699/renpy/ast.py", line 814, in execute - renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store) - File "/usr/lib64/python2.7/site-packages/renpy699/renpy/python.py", line 1719, in py_exec_bytecode - exec bytecode in globals, locals - File "renpy/common/_compat/styles.rpym", line 374, in <module> - style.selected_button = _SelectedCompat('button') - File "renpy/common/_compat/styles.rpym", line 347, in __init__ - self.target = target - File "renpy/style.pyx", line 378, in renpy.style.StyleCore.__setattr__ (gen/renpy.style.c:6236) - raise Exception("Style property {} is not known.".format(name)) - Exception: Style property target is not known. - - "button*" properties are no longer present in RenPy, so relevant - code is removed. - -diff --git a/renpy/common/_compat/styles.rpym b/renpy/common/_compat/styles.rpym -index d83eeb0..174f0b6 100644 ---- a/renpy/common/_compat/styles.rpym -+++ b/renpy/common/_compat/styles.rpym -@@ -371,13 +371,6 @@ init python: - self.property_updates = [ ] - - -- style.selected_button = _SelectedCompat('button') -- style.selected_button_text = _SelectedCompat('button_text') -- style.gm_nav_selected_button = _SelectedCompat('gm_nav_button') -- style.gm_nav_selected_button_text = _SelectedCompat('gm_nav_button_text') -- style.prefs_selected_button = _SelectedCompat('prefs_button') -- style.prefs_selected_button_text = _SelectedCompat('prefs_button_text') -- - def _apply_selected_compat(): - for scs in _selected_compat: - scs.apply() diff --git a/games-engines/renpy/files/renpy-6.99.12.4-compat-window.patch b/games-engines/renpy/files/renpy-6.99.12.4-compat-window.patch deleted file mode 100644 index 8c8bd21b4f65..000000000000 --- a/games-engines/renpy/files/renpy-6.99.12.4-compat-window.patch +++ /dev/null @@ -1,51 +0,0 @@ -commit cf3f7fd4cb69c154f43a5e00c7501463a6d63ff5 -Author: Andrew Savchenko <bircoph@gmail.com> -Date: Sun Jul 16 16:59:14 2017 +0300 - - Fix compatibility problem with Katawa Shoujo 1.3.1 - - The game fails to start with renpy-6.99.12.4: - - I'm sorry, but an uncaught exception occurred. - - While running game code: - File "game/ui_settings.rpy", line 21, in <module> - File "renpy/common/00compat.rpy", line 134, in _set_script_version - config.window_auto_hide.remove("call screen") - ValueError: list.remove(x): x not in list - - -- Full Traceback ------------------------------------------------------------ - - Full traceback: - File "/home/rondo/ui_settings.rpyc", line 2, in script - File "/usr/lib64/python2.7/site-packages/renpy699/renpy/ast.py", line 814, in execute - renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store) - File "/usr/lib64/python2.7/site-packages/renpy699/renpy/python.py", line 1695, in py_exec_bytecode - exec bytecode in globals, locals - File "game/ui_settings.rpy", line 21, in <module> - File "/usr/lib64/python2.7/site-packages/renpy699/renpy/defaultstore.py", line 92, in __setattr__ - renpy.store._set_script_version(value) # E1101 @UndefinedVariable - File "renpy/common/00compat.rpy", line 134, in _set_script_version - config.window_auto_hide.remove("call screen") - File "/usr/lib64/python2.7/site-packages/renpy699/renpy/python.py", line 610, in do_mutation - return method(self, *args, **kwargs) - ValueError: list.remove(x): x not in list - - This happens because "call screen" element is being unconditionally - removed from config.window_auto_hide list, though it is not always - present there. A simple if check fixes this. - -diff --git a/renpy/common/00compat.rpy b/renpy/common/00compat.rpy -index c16ad1d..eefb8e0 100644 ---- a/renpy/common/00compat.rpy -+++ b/renpy/common/00compat.rpy -@@ -131,7 +131,8 @@ init -1900 python: - if version <= (6, 99, 10): - config.new_translate_order = False - config.old_say_args = True -- config.window_auto_hide.remove("call screen") -+ if "call screen" in config.window_auto_hide: -+ config.window_auto_hide.remove("call screen") - config.quit_action = ui.gamemenus("_quit_prompt") - config.enforce_window_max_size = False - config.splashscreen_suppress_overlay = False diff --git a/games-engines/renpy/files/renpy-6.99.12.4-multiple-abi.patch b/games-engines/renpy/files/renpy-6.99.12.4-multiple-abi.patch deleted file mode 100644 index 3a7355e60bed..000000000000 --- a/games-engines/renpy/files/renpy-6.99.12.4-multiple-abi.patch +++ /dev/null @@ -1,357 +0,0 @@ -From 7aa51dae5eb2f2123fee9bca23a2ce2f1b1c3f10 Mon Sep 17 00:00:00 2001 -From: hasufell <hasufell@gentoo.org> -Date: Thu, 20 Aug 2015 01:10:58 +0200 -Subject: [PATCH] Fix multiple abi support - ---- - renpy.py | 128 ++-------------------------------------------------- - renpy/common.py | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - renpy/main.py | 6 +-- - 3 files changed, 144 insertions(+), 127 deletions(-) - create mode 100644 renpy/common.py - -diff --git a/renpy.py b/renpy.py -index 7548cf6..8ec7353 100644 ---- a/renpy.py -+++ b/renpy.py -@@ -28,122 +28,9 @@ - import os - import sys - import warnings -- --# Functions to be customized by distributors. ################################ -- --# Given the Ren'Py base directory (usually the directory containing --# this file), this is expected to return the path to the common directory. -- -- --def path_to_common(renpy_base): -- return renpy_base + "/renpy/common" -- --# Given a directory holding a Ren'Py game, this is expected to return --# the path to a directory that will hold save files. -- -- --def path_to_saves(gamedir, save_directory=None): -- import renpy # @UnresolvedImport -- -- if save_directory is None: -- save_directory = renpy.config.save_directory -- save_directory = renpy.exports.fsencode(save_directory) -- -- # Makes sure the permissions are right on the save directory. -- def test_writable(d): -- try: -- fn = os.path.join(d, "test.txt") -- open(fn, "w").close() -- open(fn, "r").close() -- os.unlink(fn) -- return True -- except: -- return False -- -- # Android. -- if renpy.android: -- paths = [ -- os.path.join(os.environ["ANDROID_OLD_PUBLIC"], "game/saves"), -- os.path.join(os.environ["ANDROID_PRIVATE"], "saves"), -- os.path.join(os.environ["ANDROID_PUBLIC"], "saves"), -- ] -- -- for rv in paths: -- if os.path.isdir(rv) and test_writable(rv): -- break -- -- print("Saving to", rv) -- -- # We return the last path as the default. -- -- return rv -- -- if renpy.ios: -- from pyobjus import autoclass -- from pyobjus.objc_py_types import enum -- -- NSSearchPathDirectory = enum("NSSearchPathDirectory", NSDocumentDirectory=9) -- NSSearchPathDomainMask = enum("NSSearchPathDomainMask", NSUserDomainMask=1) -- -- NSFileManager = autoclass('NSFileManager') -- manager = NSFileManager.defaultManager() -- url = manager.URLsForDirectory_inDomains_( -- NSSearchPathDirectory.NSDocumentDirectory, -- NSSearchPathDomainMask.NSUserDomainMask, -- ).lastObject() -- -- # url.path seems to change type based on iOS version, for some reason. -- try: -- rv = url.path().UTF8String().decode("utf-8") -- except: -- rv = url.path.UTF8String().decode("utf-8") -- -- print("Saving to", rv) -- return rv -- -- # No save directory given. -- if not save_directory: -- return gamedir + "/saves" -- -- # Search the path above Ren'Py for a directory named "Ren'Py Data". -- # If it exists, then use that for our save directory. -- path = renpy.config.renpy_base -- -- while True: -- if os.path.isdir(path + "/Ren'Py Data"): -- return path + "/Ren'Py Data/" + save_directory -- -- newpath = os.path.dirname(path) -- if path == newpath: -- break -- path = newpath -- -- # Otherwise, put the saves in a platform-specific location. -- if renpy.macintosh: -- rv = "~/Library/RenPy/" + save_directory -- return os.path.expanduser(rv) -- -- elif renpy.windows: -- if 'APPDATA' in os.environ: -- return os.environ['APPDATA'] + "/RenPy/" + save_directory -- else: -- rv = "~/RenPy/" + renpy.config.save_directory -- return os.path.expanduser(rv) -- -- else: -- rv = "~/.renpy/" + save_directory -- return os.path.expanduser(rv) -- -- --# Returns the path to the Ren'Py base directory (containing common and --# the launcher, usually.) --def path_to_renpy_base(): -- renpy_base = os.path.dirname(os.path.realpath(sys.argv[0])) -- renpy_base = os.path.abspath(renpy_base) -- -- return renpy_base -- --############################################################################## -+from distutils.sysconfig import get_python_lib -+sys.path.append(get_python_lib() + "/renpy@SLOT@") -+import renpy.common as common - - # The version of the Mac Launcher and py4renpy that we require. - macos_version = (6, 14, 0) -@@ -154,21 +45,9 @@ except: - print("Ren'Py requires at least python 2.6.") - sys.exit(0) - --android = ("ANDROID_PRIVATE" in os.environ) -- --# Android requires us to add code to the main module, and to command some --# renderers. --if android: -- __main__ = sys.modules["__main__"] -- __main__.path_to_renpy_base = path_to_renpy_base -- __main__.path_to_common = path_to_common -- __main__.path_to_saves = path_to_saves -- os.environ["RENPY_RENDERER"] = "gl" -- -- - def main(): - -- renpy_base = path_to_renpy_base() -+ renpy_base = common.path_to_renpy_base() - - # Add paths. - if os.path.exists(renpy_base + "/module"): -diff --git a/renpy/common.py b/renpy/common.py -new file mode 100644 -index 0000000..0d60e36 ---- /dev/null -+++ b/renpy/common.py -@@ -0,0 +1,137 @@ -+# This file is part of Ren'Py. The license below applies to Ren'Py only. -+# Games and other projects that use Ren'Py may use a different license. -+ -+# Copyright 2004-2015 Tom Rothamel <pytom@bishoujo.us> -+# -+# Permission is hereby granted, free of charge, to any person -+# obtaining a copy of this software and associated documentation files -+# (the "Software"), to deal in the Software without restriction, -+# including without limitation the rights to use, copy, modify, merge, -+# publish, distribute, sublicense, and/or sell copies of the Software, -+# and to permit persons to whom the Software is furnished to do so, -+# subject to the following conditions: -+# -+# The above copyright notice and this permission notice shall be -+# included in all copies or substantial portions of the Software. -+# -+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+import os -+import sys -+import warnings -+from distutils.sysconfig import get_python_lib -+ -+# Given the Ren'Py base directory (usually the directory containing -+# this file), this is expected to return the path to the common directory. -+def path_to_common(renpy_base): -+ return renpy_base + "/renpy/common" -+ -+# Given a directory holding a Ren'Py game, this is expected to return -+# the path to a directory that will hold save files. -+def path_to_saves(gamedir, save_directory=None): -+ import renpy #@UnresolvedImport -+ -+ if save_directory is None: -+ save_directory = renpy.config.save_directory -+ -+ # Makes sure the permissions are right on the save directory. -+ def test_writable(d): -+ try: -+ fn = os.path.join(d, "test.txt") -+ open(fn, "w").close() -+ open(fn, "r").close() -+ os.unlink(fn) -+ return True -+ except: -+ return False -+ -+ -+ # Android. -+ if renpy.android: -+ paths = [ -+ os.path.join(os.environ["ANDROID_OLD_PUBLIC"], "game/saves"), -+ os.path.join(os.environ["ANDROID_PRIVATE"], "saves"), -+ os.path.join(os.environ["ANDROID_PUBLIC"], "saves"), -+ ] -+ -+ for rv in paths: -+ if os.path.isdir(rv) and test_writable(rv): -+ break -+ -+ print "Saving to", rv -+ -+ # We return the last path as the default. -+ -+ return rv -+ -+ if renpy.ios: -+ from pyobjus import autoclass -+ from pyobjus.objc_py_types import enum -+ -+ NSSearchPathDirectory = enum("NSSearchPathDirectory", NSDocumentDirectory=9) -+ NSSearchPathDomainMask = enum("NSSearchPathDomainMask", NSUserDomainMask=1) -+ -+ NSFileManager = autoclass('NSFileManager') -+ manager = NSFileManager.defaultManager() -+ url = manager.URLsForDirectory_inDomains_( -+ NSSearchPathDirectory.NSDocumentDirectory, -+ NSSearchPathDomainMask.NSUserDomainMask, -+ ).lastObject() -+ -+ # url.path seems to change type based on iOS version, for some reason. -+ try: -+ rv = url.path().UTF8String().decode("utf-8") -+ except: -+ rv = url.path.UTF8String().decode("utf-8") -+ -+ print "Saving to", rv -+ return rv -+ -+ # No save directory given. -+ if not save_directory: -+ return gamedir + "/saves" -+ -+ # Search the path above Ren'Py for a directory named "Ren'Py Data". -+ # If it exists, then use that for our save directory. -+ path = renpy.config.renpy_base -+ -+ while True: -+ if os.path.isdir(path + "/Ren'Py Data"): -+ return path + "/Ren'Py Data/" + save_directory -+ -+ newpath = os.path.dirname(path) -+ if path == newpath: -+ break -+ path = newpath -+ -+ # Otherwise, put the saves in a platform-specific location. -+ if renpy.macintosh: -+ rv = "~/Library/RenPy/" + save_directory -+ return os.path.expanduser(rv) -+ -+ elif renpy.windows: -+ if 'APPDATA' in os.environ: -+ return os.environ['APPDATA'] + "/RenPy/" + save_directory -+ else: -+ rv = "~/RenPy/" + renpy.config.save_directory -+ return os.path.expanduser(rv) -+ -+ else: -+ rv = "~/.renpy/" + save_directory -+ return os.path.expanduser(rv) -+ -+ -+# Returns the path to the Ren'Py base directory (containing common and -+# the launcher, usually.) -+def path_to_renpy_base(): -+ renpy_base = os.path.dirname(os.path.realpath(sys.argv[0])) -+ renpy_base = get_python_lib() + "/renpy@SLOT@" -+ renpy_base = os.path.abspath(renpy_base) -+ -+ return renpy_base -diff --git a/renpy/main.py b/renpy/main.py -index 73e7239..6807ba1 100644 ---- a/renpy/main.py -+++ b/renpy/main.py -@@ -27,7 +27,7 @@ import os - import sys - import time - import zipfile --import __main__ -+import renpy.common as common - - - last_clock = time.time() -@@ -273,7 +273,7 @@ def main(): - renpy.config.searchpath = [ renpy.config.gamedir ] - - # Find the common directory. -- commondir = __main__.path_to_common(renpy.config.renpy_base) # E1101 @UndefinedVariable -+ commondir = common.path_to_common(renpy.config.renpy_base) # E1101 @UndefinedVariable - - if os.path.isdir(commondir): - renpy.config.searchpath.append(commondir) -@@ -371,7 +371,7 @@ def main(): - - # Find the save directory. - if renpy.config.savedir is None: -- renpy.config.savedir = __main__.path_to_saves(renpy.config.gamedir) # E1101 @UndefinedVariable -+ renpy.config.savedir = common.path_to_saves(renpy.config.gamedir) # E1101 @UndefinedVariable - - if renpy.game.args.savedir: # @UndefinedVariable - renpy.config.savedir = renpy.game.args.savedir # @UndefinedVariable -diff --git a/renpy/script.py b/renpy/script.py -index 73e7239..6807ba1 100644 ---- a/renpy/script.py -+++ b/renpy/script.py -@@ -150,8 +150,8 @@ import os - if renpy.loader.loadable(i): - return None - -- import __main__ -- backups = __main__.path_to_saves(renpy.config.gamedir, "backups") # @UndefinedVariable -+ import renpy.common as common -+ backups = common.path_to_saves(renpy.config.gamedir, "backups") # @UndefinedVariable - - if backups is None: - return --- -2.5.0 - diff --git a/games-engines/renpy/files/renpy.1 b/games-engines/renpy/files/renpy.1 deleted file mode 100644 index e8b7a2b61958..000000000000 --- a/games-engines/renpy/files/renpy.1 +++ /dev/null @@ -1,163 +0,0 @@ -.\" Copyright © 2015 Andrew Savchenko -.\" Distributed under the terms of GNU FDL-1.3+ license, -.\" based on original Ren'Py documentation licensed under MIT. -.TH renpy 1 "31 May 2015" "Ren'Py" "Ren'Py Gentoo's manual" -.SH NAME -renpy \- a visual novel engine - -.SH SYNOPSIS -.BI renpy " game_directory" -.\" **************************************************************** -.SH DESCRIPTION - -.B renpy -(Ren'Py) is a visual novel engine \- used by hundreds of creators -from around the world \- that helps you use words, images, and -sounds to tell interactive stories that run on computers and mobile -devices. These can be both visual novels and life simulation games. -The easy to learn script language allows anyone to efficiently -write large visual novels, while its -.BR python (1) -scripting is enough for complex simulation games. -.\" **************************************************************** -.SH RUNNING A GAME - -In order to run a game, provide -.I game_directory -as an argument to -.BR renpy . -Exact directory name may vary depending or a game, but usually -this path corresponds to -.I */game -wildcard and contains -.I script_version.rpy* -file within. Game directory usually contains other -.IR *.rpy* " and " *.rpa " files." - -One may use -.BR find (1) -tool to locate required directory within unpacked game top -directory: -.RS - -find -O3 -.I top_directory --type f -iname "script_version.rpy*" - -.RE -A directory one level above may be provided as an argument as well. -.\" **************************************************************** -.SH PORTABILITY - -All -.B renpy -games are written in -.BR python (1), -so one can run then on any platform and architecture. - -As you may have noticed, Ren'Py games are often distributed in -different archives for different architectures. This happens due to -bundling of -.BR python (1) -interpreter and required libraries in a game's tarball. Since you -are using OS native -.B renpy -setup, you should be able to run any of these games. -.\" **************************************************************** -.SH GAMES CATALOGUE - -A large catalogue of Ren'Py powered games is available at -.IR http://games.renpy.org/ . -.\" **************************************************************** -.SH TROUBLESHOOTING - -In some cases game may fail to run with current -.B renpy -version due to various errors. - -In such case please try to use the closest -.B renpy -version to one used by game developer. Most games contain -.IR script_version.rpy " file in the " game " directory." -This file actually contains -.B renpy -version used during a game build. -You may install multiple slots of -.B renpy -in Gentoo and use -.BI eselect " renpy" -module to switch between various versions. - -If -.I game -directory contains both -.IR *.rpyc " (or " *.rpyo ") and " *.rpy " files, delete" -.IR *.rpyc " (or " *.rpyo ") files, they will be regenerated by" -the interpreter. -Another solution will be to switch between version of -.BR python (1) -using -.IR eselect (1) -tool in order to find one suitable to interpret game's -.IR *.rpyc " files." - -Some games may lack general media files, e.g. -.I click.ogg -sound, so you should create or download one and place in the -.I game -directory. - -Also please pay attention to -.I problems.html -page from -.B renpy -html documentation, see -.B FURTHER READING -section. -.\" **************************************************************** -.SH ENVIRONMENT VARIABLES - -.B renpy -supports a number of environment variables to control its -behaviour. Please refer to html docs for further details -(see -.B FURTHER READING -section). -.\" **************************************************************** -.SH FURTHER READING - -.B renpy -comes with extensive html documentation. To use it install -.B renpy -with -.I USE="doc" -and go to -.I /usr/share/doc/renpy-*/html/doc/index.html - -Alternatively one may refer to online documentation: -.IR http://www.renpy.org/doc/html/ . -Be warned that online docs maybe different from your current active -version, so it recommended to use shipped documentation instead. -.\" **************************************************************** -.SH BUGS - -Any bugs related to Gentoo packaging (e.g. omitted dependencies) -please report on bugzilla: -.IR https://bugs.gentoo.org . - -For bugs in the Ren'Py engine itself, please contact upstream: -.I https://github.com/renpy/renpy/issues -and add a Gentoo bug if you feel it necessary. - -For issues with games themselves please contact corresponding -authors. -.\" **************************************************************** -.SH SEE ALSO - -.BR python (1) -\- an interpreter used by Ren'Py engine. - -.BR unrpa (1) -\- a tool to unpack -.I *.rpa -data files (Ren'Py Archives). |