Luckingforlove
Luckingforlove
# Games and other projects that use Ren'Py may use a different license.
import os
import sys
import warnings
# Functions to be customized by distributors. ################################
"""
`basedir`
`name`
"""
candidates = [ name ]
# Add candidate names that are based on the name of the executable,
game_name = name
while game_name:
prefix = game_name[0]
game_name = game_name[1:]
candidates.append(game_name)
for i in candidates:
if i == "renpy":
continue
gamedir = os.path.join(basedir, i)
if os.path.isdir(gamedir):
break
else:
gamedir = basedir
return gamedir
def path_to_common(renpy_base):
"""
`renpy_base`
"""
if os.path.isdir(path):
return path
return None
def path_to_saves(gamedir, save_directory=None): # type: (str, str|None) -> str
"""
Given the path to a Ren'Py game directory, and the value of config.
will be placed.
`gamedir`
`save_directory`
"""
if save_directory is None:
save_directory = renpy.config.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 Exception:
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:
break
else:
rv = paths[-1]
return rv
if renpy.ios:
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()
except Exception:
rv = url.path.UTF8String()
if isinstance(rv, bytes):
rv = rv.decode("utf-8")
return rv
if not save_directory:
if "RENPY_PATH_TO_SAVES" in os.environ:
# Search the path above Ren'Py for a directory named "Ren'Py Data".
path = renpy.config.renpy_base
while True:
newpath = os.path.dirname(path)
if path == newpath:
break
path = newpath
if renpy.macintosh:
rv = "~/Library/RenPy/" + save_directory
return os.path.expanduser(rv)
elif renpy.windows:
if 'APPDATA' in os.environ:
else:
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
def path_to_renpy_base():
"""
"""
renpy_base = os.path.dirname(os.path.abspath(__file__))
renpy_base = os.path.abspath(renpy_base)
return renpy_base
def path_to_logdir(basedir):
"""
`basedir`
"""
if renpy.android:
return os.environ['ANDROID_PUBLIC']
return basedir
def predefined_searchpath(commondir):
searchpath = [ renpy.config.gamedir ]
if renpy.android:
if "ANDROID_PUBLIC" in os.environ:
if os.path.exists(android_game):
searchpath.insert(0, android_game)
# Asset packs.
packs = [
"ANDROID_PACK_FF1", "ANDROID_PACK_FF2",
"ANDROID_PACK_FF3", "ANDROID_PACK_FF4",
for i in packs:
if i not in os.environ:
continue
assets = os.environ[i]
dn = os.path.join(assets, i)
if os.path.isdir(dn):
searchpath.append(dn)
else:
if "RENPY_SEARCHPATH" in os.environ:
searchpath.extend(os.environ["RENPY_SEARCHPATH"].split("::"))
searchpath.append(commondir)
if renpy.android or renpy.ios:
return searchpath
#############################################################################
#
renpy_base = path_to_renpy_base()
sys.path.append(renpy_base)
# Ignore warnings.
warnings.simplefilter("ignore", DeprecationWarning)
try:
import renpy.bootstrap
except ImportError:
raise
renpy.bootstrap.bootstrap(renpy_base)
if __name__ == "__main__":
main()