summaryrefslogtreecommitdiff
path: root/games-engines/renpy
diff options
context:
space:
mode:
Diffstat (limited to 'games-engines/renpy')
-rw-r--r--games-engines/renpy/Manifest14
-rw-r--r--games-engines/renpy/files/renpy-6.17.7-multiple-abi.patch245
-rw-r--r--games-engines/renpy/files/renpy-6.99.12.4-compat-infinite-loop.patch42
-rw-r--r--games-engines/renpy/files/renpy-6.99.12.4-compat-style.patch43
-rw-r--r--games-engines/renpy/files/renpy-6.99.12.4-compat-window.patch51
-rw-r--r--games-engines/renpy/files/renpy-6.99.12.4-multiple-abi.patch357
-rw-r--r--games-engines/renpy/files/renpy.1163
-rw-r--r--games-engines/renpy/metadata.xml30
-rw-r--r--games-engines/renpy/renpy-6.17.7.ebuild110
-rw-r--r--games-engines/renpy/renpy-6.99.12.4-r1.ebuild116
-rw-r--r--games-engines/renpy/renpy-6.99.12.4-r3.ebuild108
11 files changed, 1279 insertions, 0 deletions
diff --git a/games-engines/renpy/Manifest b/games-engines/renpy/Manifest
new file mode 100644
index 000000000000..ce7821f131a9
--- /dev/null
+++ b/games-engines/renpy/Manifest
@@ -0,0 +1,14 @@
+AUX renpy-6.17.7-multiple-abi.patch 8291 SHA256 ec919186d61a78aece7b01d15984edd502a9886fdfd7a163f9fa0e26f28f06bf SHA512 fd39773b85a54ca709f412430654cacdc91caaa561ad2e15bb02b08b971997062fa3c1adad5e2b582a2dc7acc9886b717517e0c10c0bab6a36fd05e52e98edf9 WHIRLPOOL ca460eb3129c0c4f429af4f88cdcf0d6e164f89f2019fba2f9e97a690d5b132565cbbbc03f6365a74e901842715b012cbff03e67c1c17ca01ccfecae9be501e3
+AUX renpy-6.99.12.4-compat-infinite-loop.patch 1612 SHA256 b10e112a342720c8e5d30d59379310c2f516bfd7e5cd280879de9551c3cf91d1 SHA512 86cdba778680b46434c49bba345c37d626888d85c24c4f801396fed160d05607ae6c761cd9930b054e09f8a2d107a4ca05f1e5eed0dc4f51ea4ac2625f8cc77a WHIRLPOOL 88ceb6f5f82f819ed3c34b36a928c8882918b1142c3406c26a066ca851f8f82f870b128a3e255e50943d522f69b4e256a1ea5fc33193a33af90fd21f7cfc785e
+AUX renpy-6.99.12.4-compat-style.patch 1964 SHA256 0204cffce4df3a34f6a90d0caffc04b72bb5b04ba974caba01fd3d30722d0968 SHA512 199297d0841dd0212708bfbf3aa1950a6c7ba623da156994f09b73f3e797662ad92f85d40c896169d3643be2f20e2deb91357ed8f8c668ad06140b0f582650a5 WHIRLPOOL 06e054ff230f12410c518e41f2e1d6eb269f1186a813e6abd8102b99d253eaf05012ab05a854ddd220c62a1f9e8190dd524af915ce050e8ce674f5f3e48ea3af
+AUX renpy-6.99.12.4-compat-window.patch 2488 SHA256 8139af8ef11ebb39b618277723a66447e93b4edd9706391594c59134ea53a9eb SHA512 238d727750b114bd9e68b8d144adab0c470defcd386bd934d2c830f15947718d7dfa5001ef92733a0c3a7ac4b40ca459243b0c68ff8239b960290840d3d7dbf2 WHIRLPOOL 4eeeba3648c7e082dd0c0eff745ee31875cc1231d6c999ee50219d278b2592f3ac08b695cbdb6c934e4648aa53bb8d83eef45e4a00eaebc4ddc945bfdcdaf721
+AUX renpy-6.99.12.4-multiple-abi.patch 11945 SHA256 fcb3a2a9b1ff8a70388df214bd5a027973b486ce30913f3cf590cda2804f9546 SHA512 4ff4926ba5e92b2e72e206093a770b5d334a0c25fd4ace48c54b0ec6d8dfcb64a137f97238793703af927906d2df0723d2e36920ed50c6686fe8ba3602880759 WHIRLPOOL ca7d1b8a9d9db1c400cfbc5b056a05876a95e0a9275db9af379ec33644972caa76653ccd074ddc836f1e852ff52cd8719feae3052b803e6bc6747f2e70b847d2
+AUX renpy.1 4642 SHA256 249fb33053da00de6a8156b33b8d29df2536238016e353f4e69d8eb5d8bf851b SHA512 2727a6ff9675a2b82a979faf5d75e7b3b96915f4c7382d22bba35d74674e613f45d4e8437e24edb410aac45cd8d219cc68e118387e538aafb32b0c312443b066 WHIRLPOOL 1319d4587c2cecb2563aeb198e9aa98bd31733899e275bce137e12e0e806c9bc396e9ac6f2180c993acb2174c4bfc221c79d568a4ba051f5e6558e3bfb042bb3
+DIST renpy-6.17.7-source.tar.bz2 17932988 SHA256 fef01de9e482b73d9d409de7a43bada6dd3e2a0549b99dd487306371190ed038 SHA512 22b0e08b18ee35317b11451205233cbd8a29617d9c3d298bbdcfc5757f67c2f0e4c8a748aa83d5c8b43786c062ffca109d07e981efa750fcee26f45f08a33ea2 WHIRLPOOL fef82eb6c958a2525797e5d8bfae3488fba606b70eeed5c94f7afcab4fa46e7a7eb43d91b4bd55f553b65a72b12236e02ecdee55e8852c1fafc055332f9d131d
+DIST renpy-6.99.12.4-source.tar.bz2 18192453 SHA256 65d8c97acfce7a8025ad0f6a1a3d5ef88d4319ece02370f33cf7a791b320a30c SHA512 375b67e15630fc21915136e70bc93db6da7c2da192d39b1256822513ae44974124522c85f1976f2af62df27b5fa11493af488b02abcf0081eeae03e1a69dfca5 WHIRLPOOL 3044bcd5e241e95c8313a16da4049f71621def4669b9d76aa6892191443456e2c388f7a7aaa16a01e073311a83d1bde5452fc3e57f956571bfca2edc1db93ca9
+EBUILD renpy-6.17.7.ebuild 2521 SHA256 126b76d2bbbc369f0de27d0269fb88e84e6850875341b02bdb89a6394593342d SHA512 8dcee437ea8a1b9853d90d1c559988e0ea4206f5dbf2fb70e77231c2ba18999ff64f51ce0bf16dd4404bb20465a9fa266bb2855bdfe3db6ccb628a422791993c WHIRLPOOL 8e8cd8705b5c75bd830ec2053eff67b3527a3abfaa24184dec8c67b40bf50f21d75fd682000522f7c47e25c9917e6701db19424d87f7c27ced08a5828aa0bea2
+EBUILD renpy-6.99.12.4-r1.ebuild 2685 SHA256 44c780b41a5488f1cc87a1f86336919f6aeec5a3591a306b432d802ff117cb56 SHA512 fc38cbdc2a119de3c393ae2c07ad31c4b922cc7e0c50e285b48cae428712d5ea484b1efe48128ed4c9a4eebca61ae75dc8b3eaf25ae997bbf7454be58d03a27c WHIRLPOOL 362574bb1a42915b512a2834d3be7716769b9393e46846159dcc189689ba0ce8e828886294b7c769a6b0d4e5f7eecb3093d1e496d50dce78e6034feefe96d578
+EBUILD renpy-6.99.12.4-r3.ebuild 2598 SHA256 420178f30c7b6995bbed9276da41a5f62155953fc181f0a30a323a4143a1ca45 SHA512 afe651513c3064949af87eec4135574a950eaf7928bd93b8edbccb88cd4a14e45205f061ebd30f8ca37c90625ad31ca3712b46c415d436e7df6a251c5554bb93 WHIRLPOOL a7097cd7567a4c74fb146216ce547380139e53e1486a5ec51f8f7207665ecabac3f4afab15ba5d6e3d8345fa3259e5d8d12017a69dba7231348f6df4d811dd3b
+MISC ChangeLog 5360 SHA256 ac5de69fb729579c9670739ebe10c565ea4b95c342ee085381c60d2ae0c8e6e9 SHA512 86a4348b428cd50e596bf1de9f355496762df2014e9ab8d998b98482b7c0a2c57cdca34e8d1fb9f29bf73157fe9f4d8fac71c517a159da16d324cc7014af0605 WHIRLPOOL 568d1328d738504f377a65827d187dbd10aad28d2bc4fe12460f6731373a6b6e6165f636279f63e57fa98f990b571a807969c6a45cfb3342bdfd07014adeb409
+MISC ChangeLog-2015 9189 SHA256 acbb24bf21ff9bb29bc0f384d15d186cd60bb5fd0978642da75ebe178dcbbb14 SHA512 3ce6a44b3e5076ac4f320fbfcbd80705bb2911894978798220c2c3e135d714b2a16e52d3fa238ff6ba85ce0a85c2e9d14ccd4e25bd738212f7d778f9cbc1db7d WHIRLPOOL 0bc9a9b06b1b09100d02eeac293a522deb4dec1486a00d2c992b1ecbea7ffebf519d9e9743fa5f7b3a7beb5ce110e3bb01b2060645b1ad462fbf5ace08ed2877
+MISC metadata.xml 1063 SHA256 9ea1615655712ef79aec4a064e15e0a4fefee45307a4a135ec02efeedea25ae2 SHA512 801640d22f7d54fa918564d14aa0bfbd63c6f106dd1ff690740b93bb7da51012c42b4b75431e3741c47049121bcfb908c3a1cde6b41091b51079c5f0cacc0753 WHIRLPOOL 2b795441fd98bd77a863be94d0e2f043f2f39c433b7f566f1204f83a7eb3f4f717d9aeb23d508fdf9d0d8bcfe29031e2d3971a8b378a44b9c656c15dd72ea86f
diff --git a/games-engines/renpy/files/renpy-6.17.7-multiple-abi.patch b/games-engines/renpy/files/renpy-6.17.7-multiple-abi.patch
new file mode 100644
index 000000000000..335af4e9b8d1
--- /dev/null
+++ b/games-engines/renpy/files/renpy-6.17.7-multiple-abi.patch
@@ -0,0 +1,245 @@
+commit 7451ba936ca2f3358ca51ab562371774199c7052
+Author: hasufell <hasufell@gentoo.org>
+Date: Tue Jan 21 01:02:00 2014 +0100
+
+ fix multiple abi support
+
+diff --git a/renpy.py b/renpy.py
+index 9f2977f..394e4e1 100644
+--- a/renpy.py
++++ b/renpy.py
+@@ -28,82 +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):
+- import renpy #@UnresolvedImport
+-
+- # 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):
+- break
+-
+- print "Using savedir", rv
+-
+- # We return the last path as the default.
+-
+- return rv
+-
+-
+- # No save directory given.
+- if not renpy.config.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/" + renpy.config.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/" + renpy.config.save_directory
+- return os.path.expanduser(rv)
+-
+- elif renpy.windows:
+- if 'APPDATA' in os.environ:
+- return os.environ['APPDATA'] + "/RenPy/" + renpy.config.save_directory
+- else:
+- rv = "~/RenPy/" + renpy.config.save_directory
+- return os.path.expanduser(rv)
+-
+- else:
+- rv = "~/.renpy/" + renpy.config.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.environ.get('RENPY_BASE', renpy_base)
+- 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)
+@@ -131,7 +58,7 @@ if android:
+
+ 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..1f15b3c
+--- /dev/null
++++ b/renpy/common.py
+@@ -0,0 +1,103 @@
++# 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-2014 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
++
++# 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):
++ import renpy #@UnresolvedImport
++
++ # 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):
++ break
++
++ print "Using savedir", rv
++
++ # We return the last path as the default.
++
++ return rv
++
++
++ # No save directory given.
++ if not renpy.config.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/" + renpy.config.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/" + renpy.config.save_directory
++ return os.path.expanduser(rv)
++
++ elif renpy.windows:
++ if 'APPDATA' in os.environ:
++ return os.environ['APPDATA'] + "/RenPy/" + renpy.config.save_directory
++ else:
++ rv = "~/RenPy/" + renpy.config.save_directory
++ return os.path.expanduser(rv)
++
++ else:
++ rv = "~/.renpy/" + renpy.config.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.environ.get('RENPY_BASE', renpy_base)
++ renpy_base = os.path.abspath(renpy_base)
++
++ return renpy_base
+diff --git a/renpy/main.py b/renpy/main.py
+index 143007d..6c55bbc 100644
+--- a/renpy/main.py
++++ b/renpy/main.py
+@@ -25,7 +25,7 @@ import os
+ import sys
+ import time
+ import zipfile
+-import __main__
++import renpy.common as common
+
+
+ def run(restart):
+@@ -167,7 +167,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)
+@@ -230,7 +230,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/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
new file mode 100644
index 000000000000..3a2942cb04fd
--- /dev/null
+++ b/games-engines/renpy/files/renpy-6.99.12.4-compat-infinite-loop.patch
@@ -0,0 +1,42 @@
+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
new file mode 100644
index 000000000000..122ebf1e43e6
--- /dev/null
+++ b/games-engines/renpy/files/renpy-6.99.12.4-compat-style.patch
@@ -0,0 +1,43 @@
+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
new file mode 100644
index 000000000000..8c8bd21b4f65
--- /dev/null
+++ b/games-engines/renpy/files/renpy-6.99.12.4-compat-window.patch
@@ -0,0 +1,51 @@
+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
new file mode 100644
index 000000000000..3a7355e60bed
--- /dev/null
+++ b/games-engines/renpy/files/renpy-6.99.12.4-multiple-abi.patch
@@ -0,0 +1,357 @@
+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
new file mode 100644
index 000000000000..e8b7a2b61958
--- /dev/null
+++ b/games-engines/renpy/files/renpy.1
@@ -0,0 +1,163 @@
+.\" 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).
diff --git a/games-engines/renpy/metadata.xml b/games-engines/renpy/metadata.xml
new file mode 100644
index 000000000000..98b754cf6590
--- /dev/null
+++ b/games-engines/renpy/metadata.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>bircoph@gentoo.org</email>
+ <name>Andrew Savchenko</name>
+ </maintainer>
+ <longdescription>
+ Ren'Py is a free and cross-platform visual novel engine that
+ helps you use words,
+ pictures, and sounds to tell stories with the computer.
+ It`s easy and efficient script language makes it possible for
+ non-programmers to make visual novels,
+ while its Python support allows for complex simulation games.
+ </longdescription>
+ <use>
+ <flag name="development">Install IDE for game developers and
+ an empty game template</flag>
+ </use>
+ <upstream>
+ <maintainer status="active">
+ <email>pytom@bishoujo.us</email>
+ <name>Tom Rothamel</name>
+ </maintainer>
+ <changelog>http://www.renpy.org/latest.html</changelog>
+ <bugs-to>https://github.com/renpy/renpy/issues</bugs-to>
+ <doc>http://renpy.org/wiki/renpy/doc</doc>
+ <remote-id type="github">renpy/renpy</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/games-engines/renpy/renpy-6.17.7.ebuild b/games-engines/renpy/renpy-6.17.7.ebuild
new file mode 100644
index 000000000000..adc56df50743
--- /dev/null
+++ b/games-engines/renpy/renpy-6.17.7.ebuild
@@ -0,0 +1,110 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=5
+PYTHON_COMPAT=( python2_7 )
+DISTUTILS_IN_SOURCE_BUILD=1
+inherit eutils toolchain-funcs python-r1 versionator gnome2-utils games distutils-r1
+
+DESCRIPTION="Visual novel engine written in python"
+HOMEPAGE="http://www.renpy.org"
+SRC_URI="http://www.renpy.org/dl/${PV}/${P}-source.tar.bz2"
+
+LICENSE="MIT"
+SLOT="$(get_version_component_range 1-2)"
+MYSLOT=$(delete_all_version_separators ${SLOT})
+KEYWORDS="amd64 x86"
+IUSE="development doc examples"
+REQUIRED_USE="examples? ( development )"
+
+RDEPEND="
+ >=app-eselect/eselect-renpy-0.4
+ dev-libs/fribidi
+ dev-python/pygame[X,${PYTHON_USEDEP}]
+ >=dev-lang/python-exec-0.3[${PYTHON_USEDEP}]
+ media-libs/glew:0
+ media-libs/libpng:0
+ media-libs/libsdl[X,video]
+ media-libs/freetype:2
+ sys-libs/zlib
+ virtual/ffmpeg"
+DEPEND="${RDEPEND}
+ dev-python/cython[${PYTHON_USEDEP}]
+ virtual/pkgconfig"
+
+S=${WORKDIR}/${P}-source
+
+pkg_setup() {
+ games_pkg_setup
+ export CFLAGS="${CFLAGS} $($(tc-getPKG_CONFIG) --cflags fribidi)"
+}
+
+python_prepare_all() {
+ # wooosh! this should fix multiple abi
+ epatch "${FILESDIR}"/${P}-multiple-abi.patch
+
+ einfo "Deleting precompiled python files"
+ find . -name '*.py[co]' -print -delete || die
+
+ sed -i \
+ -e "s/@SLOT@/${MYSLOT}/" \
+ renpy.py renpy/common.py || die "setting slot failed!"
+
+ distutils-r1_python_prepare_all
+}
+
+python_compile() {
+ cd "${S}"/module || die
+ distutils-r1_python_compile
+}
+
+python_install() {
+ cd "${S}"/module || die
+ distutils-r1_python_install --install-lib="$(python_get_sitedir)/renpy${MYSLOT}"
+
+ cd "${S}" || die
+ python_scriptinto "${GAMES_BINDIR}"
+ python_newscript renpy.py ${PN}-${SLOT}
+
+ python_moduleinto renpy${MYSLOT}
+ python_domodule renpy
+ if use development ; then
+ python_domodule launcher templates
+ fi
+ if use examples ; then
+ python_domodule the_question tutorial
+ fi
+}
+
+python_install_all() {
+ if use development; then
+ newicon -s 32 launcher/game/images/logo32.png ${P}.png
+ make_desktop_entry ${PN}-${SLOT} "Ren'Py ${PV}" ${P}
+ fi
+
+ if use doc; then
+ dohtml -r doc
+ fi
+
+ prepgamesdirs
+}
+
+pkg_preinst() {
+ games_pkg_preinst
+ use development && gnome2_icon_savelist
+}
+
+pkg_postinst() {
+ games_pkg_postinst
+ use development && gnome2_icon_cache_update
+
+ einfo "running: eselect renpy update --if-unset"
+ eselect renpy update --if-unset
+}
+
+pkg_postrm() {
+ use development && gnome2_icon_cache_update
+
+ einfo "running: eselect renpy update --if-unset"
+ eselect renpy update --if-unset
+}
diff --git a/games-engines/renpy/renpy-6.99.12.4-r1.ebuild b/games-engines/renpy/renpy-6.99.12.4-r1.ebuild
new file mode 100644
index 000000000000..8c969e13c6bf
--- /dev/null
+++ b/games-engines/renpy/renpy-6.99.12.4-r1.ebuild
@@ -0,0 +1,116 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=5
+PYTHON_COMPAT=( python2_7 )
+DISTUTILS_IN_SOURCE_BUILD=1
+inherit eutils games gnome2-utils toolchain-funcs versionator distutils-r1
+
+DESCRIPTION="Visual novel engine written in python"
+HOMEPAGE="http://www.renpy.org"
+SRC_URI="http://www.renpy.org/dl/${PV}/${P}-source.tar.bz2"
+
+LICENSE="MIT"
+SLOT="$(get_version_component_range 1-2)"
+MYSLOT=$(delete_all_version_separators ${SLOT})
+KEYWORDS="~amd64 ~x86"
+IUSE="development doc examples"
+REQUIRED_USE="examples? ( development )"
+
+RDEPEND="
+ >=app-eselect/eselect-renpy-0.6
+ dev-libs/fribidi
+ ~dev-python/pygame_sdl2-${PV}[${PYTHON_USEDEP}]
+ >=dev-lang/python-exec-0.3[${PYTHON_USEDEP}]
+ media-libs/glew:0
+ media-libs/libpng:0
+ media-libs/libsdl2[video]
+ media-libs/freetype:2
+ sys-libs/zlib
+ virtual/ffmpeg"
+DEPEND="${RDEPEND}
+ dev-python/cython[${PYTHON_USEDEP}]
+ virtual/pkgconfig"
+
+S=${WORKDIR}/${P}-source
+
+PATCHES=(
+ "${FILESDIR}"/${P}-multiple-abi.patch
+ "${FILESDIR}"/${P}-compat-window.patch #601200
+ "${FILESDIR}"/${P}-compat-style.patch
+)
+
+pkg_setup() {
+ games_pkg_setup
+ export CFLAGS="${CFLAGS} $($(tc-getPKG_CONFIG) --cflags fribidi)"
+}
+
+python_prepare_all() {
+ distutils-r1_python_prepare_all
+
+ einfo "Deleting precompiled python files"
+ find . -name '*.py[co]' -print -delete || die
+
+ sed -i \
+ -e "s/@SLOT@/${MYSLOT}/" \
+ renpy.py renpy/common.py || die "setting slot failed!"
+}
+
+python_compile() {
+ cd "${S}"/module || die
+ distutils-r1_python_compile
+}
+
+python_install() {
+ cd "${S}"/module || die
+ distutils-r1_python_install --install-lib="$(python_get_sitedir)/renpy${MYSLOT}"
+
+ cd "${S}" || die
+ python_scriptinto "${GAMES_BINDIR}"
+ python_newscript renpy.py ${PN}-${SLOT}
+
+ python_moduleinto renpy${MYSLOT}
+ python_domodule renpy
+ if use development ; then
+ python_domodule launcher templates
+ fi
+ if use examples ; then
+ python_domodule the_question tutorial
+ fi
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+ if use development; then
+ newicon -s 32 launcher/game/images/logo32.png ${P}.png
+ make_desktop_entry ${PN}-${SLOT} "Ren'Py ${PV}" ${P}
+ fi
+
+ if use doc; then
+ insinto "/usr/share/doc/${PF}/html"
+ doins -r doc/*
+ fi
+ newman "${FILESDIR}/${PN}.1" "${P}.1"
+
+ prepgamesdirs
+}
+
+pkg_preinst() {
+ games_pkg_preinst
+ use development && gnome2_icon_savelist
+}
+
+pkg_postinst() {
+ games_pkg_postinst
+ use development && gnome2_icon_cache_update
+
+ einfo "running: eselect renpy update --if-unset"
+ eselect renpy update --if-unset
+}
+
+pkg_postrm() {
+ use development && gnome2_icon_cache_update
+
+ einfo "running: eselect renpy update --if-unset"
+ eselect renpy update --if-unset
+}
diff --git a/games-engines/renpy/renpy-6.99.12.4-r3.ebuild b/games-engines/renpy/renpy-6.99.12.4-r3.ebuild
new file mode 100644
index 000000000000..27a1a8b3f14e
--- /dev/null
+++ b/games-engines/renpy/renpy-6.99.12.4-r3.ebuild
@@ -0,0 +1,108 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+PYTHON_COMPAT=( python2_7 )
+DISTUTILS_IN_SOURCE_BUILD=1
+inherit eutils gnome2-utils toolchain-funcs versionator distutils-r1
+
+DESCRIPTION="Visual novel engine written in python"
+HOMEPAGE="http://www.renpy.org"
+SRC_URI="http://www.renpy.org/dl/${PV}/${P}-source.tar.bz2"
+
+LICENSE="MIT"
+SLOT="$(get_version_component_range 1-2)"
+MYSLOT=$(delete_all_version_separators ${SLOT})
+KEYWORDS="amd64 x86"
+IUSE="development doc examples"
+REQUIRED_USE="examples? ( development )"
+
+RDEPEND="
+ >=app-eselect/eselect-renpy-0.7
+ dev-libs/fribidi
+ ~dev-python/pygame_sdl2-${PV}[${PYTHON_USEDEP}]
+ >=dev-lang/python-exec-0.3[${PYTHON_USEDEP}]
+ media-libs/glew:0
+ media-libs/libpng:0
+ media-libs/libsdl2[video]
+ media-libs/freetype:2
+ sys-libs/zlib
+ virtual/ffmpeg"
+DEPEND="${RDEPEND}
+ dev-python/cython[${PYTHON_USEDEP}]
+ virtual/pkgconfig"
+
+S=${WORKDIR}/${P}-source
+
+PATCHES=(
+ "${FILESDIR}"/${P}-multiple-abi.patch
+ "${FILESDIR}"/${P}-compat-window.patch #601200
+ "${FILESDIR}"/${P}-compat-style.patch
+ "${FILESDIR}"/${P}-compat-infinite-loop.patch
+)
+
+python_prepare_all() {
+ export CFLAGS="${CFLAGS} $($(tc-getPKG_CONFIG) --cflags fribidi)"
+ distutils-r1_python_prepare_all
+
+ einfo "Deleting precompiled python files"
+ find . -name '*.py[co]' -print -delete || die
+
+ sed -i \
+ -e "s/@SLOT@/${MYSLOT}/" \
+ renpy.py renpy/common.py || die "setting slot failed!"
+}
+
+python_compile() {
+ cd "${S}"/module || die
+ distutils-r1_python_compile
+}
+
+python_install() {
+ cd "${S}"/module || die
+ distutils-r1_python_install --install-lib="$(python_get_sitedir)/renpy${MYSLOT}"
+
+ cd "${S}" || die
+ python_newscript renpy.py ${PN}-${SLOT}
+
+ python_moduleinto renpy${MYSLOT}
+ python_domodule renpy
+ if use development ; then
+ python_domodule launcher templates
+ fi
+ if use examples ; then
+ python_domodule the_question tutorial
+ fi
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+ if use development; then
+ newicon -s 32 launcher/game/images/logo32.png ${P}.png
+ make_desktop_entry ${PN}-${SLOT} "Ren'Py ${PV}" ${P}
+ fi
+
+ if use doc; then
+ insinto "/usr/share/doc/${PF}/html"
+ doins -r doc/*
+ fi
+ newman "${FILESDIR}/${PN}.1" "${P}.1"
+}
+
+pkg_preinst() {
+ use development && gnome2_icon_savelist
+}
+
+pkg_postinst() {
+ use development && gnome2_icon_cache_update
+
+ einfo "running: eselect renpy update --if-unset"
+ eselect renpy update --if-unset
+}
+
+pkg_postrm() {
+ use development && gnome2_icon_cache_update
+
+ einfo "running: eselect renpy update --if-unset"
+ eselect renpy update --if-unset
+}