466 lines
16 KiB
Plaintext
466 lines
16 KiB
Plaintext
# Copyright 2004-2022 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.
|
|
|
|
# This file contains some of the options that can be changed to customize
|
|
# your Ren'Py game. It only contains the most common options... there
|
|
# is quite a bit more customization you can do.
|
|
#
|
|
# Lines beginning with two '#' marks are comments, and you shouldn't
|
|
# uncomment them. Lines beginning with a single '#' mark are
|
|
# commented-out code, and you may want to uncomment them when
|
|
# appropriate.
|
|
|
|
init -1 python hide:
|
|
|
|
# Update the searchpath to find additional fonts.
|
|
config.searchpath.append(config.renpy_base + "/sdk-fonts")
|
|
|
|
# Should we enable the use of developer tools? This should be
|
|
# set to False before the game is released, so the user can't
|
|
# cheat using developer tools.
|
|
|
|
config.developer = True
|
|
|
|
# These control the width and height of the screen.
|
|
|
|
config.screen_width = 800
|
|
config.screen_height = 600
|
|
|
|
# This controls the title of the window, when Ren'Py is
|
|
# running in a window.
|
|
|
|
config.window_title = u"Ren'Py Launcher"
|
|
|
|
# These control the name and version of the game, that are reported
|
|
# with tracebacks and other debugging logs.
|
|
config.name = "Ren'Py Launcher"
|
|
config.version = renpy.version().split()[1]
|
|
|
|
#####################
|
|
# Themes
|
|
|
|
# We then want to call a theme function. themes.roundrect is
|
|
# a theme that features the use of rounded rectangles. It's
|
|
# the only theme we currently support.
|
|
#
|
|
# The theme function takes a number of parameters that can
|
|
# customize the color scheme.
|
|
|
|
theme.roundrect(
|
|
# Theme: Roundrect
|
|
# Color scheme: Basic Blue
|
|
|
|
# The color of an idle widget face.
|
|
widget = "#003c78",
|
|
|
|
# The color of a focused widget face.
|
|
widget_hover = "#0050a0",
|
|
|
|
# The color of the text in a widget.
|
|
widget_text = "#c8ffff",
|
|
|
|
# The color of the text in a selected widget. (For
|
|
# example, the current value of a preference.)
|
|
widget_selected = "#ffffc8",
|
|
|
|
# The color of a disabled widget face.
|
|
disabled = "#404040",
|
|
|
|
# The color of disabled widget text.
|
|
disabled_text = "#c8c8c8",
|
|
|
|
# The color of informational labels.
|
|
label = "#ffffff",
|
|
|
|
# The color of a frame containing widgets.
|
|
frame = "#6496c8",
|
|
|
|
# The background of the main menu. This can be a color
|
|
# beginning with '#', or an image filename. The latter
|
|
# should take up the full height and width of the screen.
|
|
mm_root = "#dcebff",
|
|
|
|
# The background of the game menu. This can be a color
|
|
# beginning with '#', or an image filename. The latter
|
|
# should take up the full height and width of the screen.
|
|
gm_root = "#dcebff",
|
|
|
|
# If this is True, the in-game window is rounded. If False,
|
|
# the in-game window is square.
|
|
rounded_window = False,
|
|
|
|
# And we're done with the theme. The theme will customize
|
|
# various styles, so if we want to change them, we should
|
|
# do so below.
|
|
)
|
|
|
|
#####################
|
|
# Help.
|
|
|
|
# This lets you configure the help option on the Ren'Py menus.
|
|
# It may be:
|
|
# - A label in the script, in which case that label is called to
|
|
# show help to the user.
|
|
# - A file name relative to the base directory, which is opened in a
|
|
# web browser.
|
|
# - None, to disable help.
|
|
config.help = "README.html"
|
|
|
|
#####################
|
|
# Transitions.
|
|
|
|
# Used when entering the game menu from the game.
|
|
config.enter_transition = None
|
|
|
|
# Used when exiting the game menu to the game.
|
|
config.exit_transition = None
|
|
|
|
# Used between screens of the game menu.
|
|
config.intra_transition = None
|
|
|
|
# Used when entering the game menu from the main menu.
|
|
config.main_game_transition = None
|
|
|
|
# Used when returning to the main menu from the game.
|
|
config.game_main_transition = None
|
|
|
|
# Used when entering the main menu from the splashscreen.
|
|
config.end_splash_transition = None
|
|
|
|
# Used when entering the main menu after the game has ended.
|
|
config.end_game_transition = None
|
|
|
|
# Used when a game is loaded.
|
|
config.after_load_transition = None
|
|
|
|
# Used when the window is shown.
|
|
config.window_show_transition = None
|
|
|
|
# Used when the window is hidden.
|
|
config.window_hide_transition = None
|
|
|
|
|
|
#####################
|
|
# This is the name of the directory where the game's data is
|
|
# stored. (It needs to be set early, before any other init code
|
|
# is run, so the persistent information can be found by the init code.)
|
|
python early:
|
|
config.save_directory = "launcher-4"
|
|
|
|
init -1 python hide:
|
|
#####################
|
|
# Default values of Preferences.
|
|
|
|
# Note: These options are only evaluated the first time a
|
|
# game is run. To have them run a second time, delete
|
|
# game/saves/persistent
|
|
|
|
# Should we start in fullscreen mode?
|
|
|
|
config.default_fullscreen = False
|
|
|
|
# The default text speed in characters per second. 0 is infinite.
|
|
|
|
config.default_text_cps = 0
|
|
|
|
#####################
|
|
# More customizations can go here.
|
|
|
|
config.sound = False
|
|
config.quit_action = Quit(confirm=False)
|
|
config.window_icon = "images/logo.png"
|
|
config.has_autosave = False
|
|
config.log_enable = False
|
|
config.mouse_hide_time = None
|
|
|
|
_game_menu_screen = None
|
|
|
|
config.underlay = [
|
|
renpy.Keymap(
|
|
screenshot = _screenshot,
|
|
reload_game = _reload_game,
|
|
developer = _developer,
|
|
quit = renpy.quit_event,
|
|
iconify = renpy.iconify,
|
|
help = _help,
|
|
choose_renderer = renpy.curried_call_in_new_context("_choose_renderer"),
|
|
console = _console.enter,
|
|
profile_once = _profile_once,
|
|
memory_profile = _memory_profile,
|
|
self_voicing = Preference("self voicing", "toggle"),
|
|
clipboard_voicing = Preference("clipboard voicing", "toggle"),
|
|
debug_voicing = Preference("debug voicing", "toggle"),
|
|
progress_screen = _progress_screen,
|
|
),
|
|
]
|
|
|
|
config.rollback_enabled = False
|
|
|
|
# This section controls how to build Ren'Py. (Building the launcher is how
|
|
# we build Ren'Py distributions.)
|
|
init python:
|
|
|
|
# We're building Ren'Py tonight.
|
|
build.renpy = True
|
|
|
|
# The version number that's supplied to the updater.
|
|
build.version = "Ren'Py {}".format(config.version)
|
|
|
|
# The name that's used for directories and archive files. For example, if
|
|
# this is 'mygame-1.0', the windows distribution will be in the
|
|
# directory 'mygame-1.0-win', in the 'mygame-1.0-win.zip' file.
|
|
|
|
if 'RENPY_BUILD_VERSION' in os.environ:
|
|
build.directory_name = "renpy-" + os.environ['RENPY_BUILD_VERSION']
|
|
else:
|
|
build.directory_name = "renpy-" + config.version.rsplit('.', 1)[0]
|
|
|
|
# The name that's uses for executables - the program that users will run
|
|
# to start the game. For example, if this is 'mygame', then on Windows,
|
|
# users can click 'mygame.exe' to start the game.
|
|
build.executable_name = "renpy"
|
|
|
|
# If True, Ren'Py will include update information into packages. This
|
|
# allows the updater to run.
|
|
build.include_update = True
|
|
|
|
# Allow empty directories, so we can distribute the images directory.
|
|
build.exclude_empty_directories = False
|
|
|
|
|
|
# Mac signing options.
|
|
import os
|
|
build.mac_identity = os.environ.get("RENPY_MAC_IDENTITY", None)
|
|
build.mac_codesign_command = [ config.renpy_base + "/scripts/mac/mac_sign_client.sh", "{identity}", "{app}" ]
|
|
build.mac_create_dmg_command = [ config.renpy_base + "/scripts/mac/mac_dmg_client.sh", "{identity}", "{volname}", "{sourcedir}", "{dmg}" ]
|
|
build.mac_codesign_dmg_command = [ "/bin/true" ]
|
|
|
|
|
|
# Clear out various file patterns.
|
|
build.renpy_patterns = [ ]
|
|
build.early_base_patterns = [ ]
|
|
build.base_patterns = [ ]
|
|
build.late_base_patterns = [ ]
|
|
|
|
# We don't need to clear out the executable patterns, since they're
|
|
# correct for Ren'Py.
|
|
|
|
# Now, add the Ren'Py distribution in using classify_renpy.
|
|
|
|
build.classify_renpy("**~", None)
|
|
build.classify_renpy("**/#*", None)
|
|
build.classify_renpy("**/thumbs.db", None)
|
|
build.classify_renpy("**/.*", None)
|
|
|
|
# Atom rules. These have to be very early, since Atom uses names like
|
|
# tmp for packages.
|
|
build.classify_renpy("atom/", "atom-all")
|
|
build.classify_renpy("atom/default-dot-atom/**", "atom-all")
|
|
build.classify_renpy("atom/atom-windows/**", "atom-windows")
|
|
build.classify_renpy("atom/Atom.app/**", "atom-mac")
|
|
build.classify_renpy("atom/atom-linux**", "atom-linux")
|
|
|
|
try:
|
|
with open(os.path.join(config.renpy_base, "atom", "executable.txt")) as f:
|
|
for l in f:
|
|
build.executable(l.strip())
|
|
except Exception:
|
|
pass
|
|
|
|
build.classify_renpy("rapt/**/libLive2DCubismCore.so", None)
|
|
build.classify_renpy("rapt/**", "rapt")
|
|
build.executable("rapt/prototype/gradlew")
|
|
|
|
build.classify_renpy("renios/prototype/base/", None)
|
|
build.classify_renpy("renios/prototype/prototype.xcodeproj/*.xcworkspace/", None)
|
|
build.classify_renpy("renios/prototype/prototype.xcodeproj/xcuserdata/", None)
|
|
build.classify_renpy("renios/prototype/**", "renios")
|
|
build.classify_renpy("renios/buildlib/**", "renios")
|
|
build.classify_renpy("renios/ios.py", "renios")
|
|
build.classify_renpy("renios/version.txt", "renios")
|
|
build.classify_renpy("renios/", "renios")
|
|
|
|
build.classify_renpy("web/game.zip", None)
|
|
build.classify_renpy("web/**", "web")
|
|
|
|
build.classify_renpy("**.old", None)
|
|
build.classify_renpy("**.new", None)
|
|
build.classify_renpy("**.bak", None)
|
|
|
|
build.classify_renpy("**/log.txt", None)
|
|
build.classify_renpy("**/traceback.txt", None)
|
|
build.classify_renpy("**/errors.txt", None)
|
|
build.classify_renpy("**/steam_appid.txt", None)
|
|
build.classify_renpy("**/saves/", None)
|
|
build.classify_renpy("**/tmp/", None)
|
|
build.classify_renpy("**/.Editra", None)
|
|
|
|
|
|
# main source.
|
|
|
|
def source_and_binary(pattern, source="source", binary="binary", py=True):
|
|
"""
|
|
Classifies source and binary files beginning with `pattern`.
|
|
.pyo, .rpyc, .rpycm, and .rpyb go into binary, everything
|
|
else but .pyi files go into source.
|
|
"""
|
|
|
|
if py is True:
|
|
py = 'pyo' if PY2 else 'pycache'
|
|
|
|
if py == 'pycache':
|
|
build.classify_renpy(pattern + "/**__pycache__/", binary)
|
|
build.classify_renpy(pattern + "/**__pycache__/*.{}.pyc".format(sys.implementation.cache_tag), binary)
|
|
build.classify_renpy(pattern + "/**.pyc", None)
|
|
build.classify_renpy(pattern + "/**.pyo", None)
|
|
|
|
elif py == 'pyc':
|
|
build.classify_renpy(pattern + "/**__pycache__/", None)
|
|
build.classify_renpy(pattern + "/**.pyc", binary)
|
|
build.classify_renpy(pattern + "/**.pyo", None)
|
|
|
|
elif py == 'pyo':
|
|
build.classify_renpy(pattern + "/**__pycache__/", None)
|
|
build.classify_renpy(pattern + "/**.pyc", None)
|
|
build.classify_renpy(pattern + "/**.pyo", binary)
|
|
|
|
else:
|
|
build.classify_renpy(pattern + "/**__pycache__/", None)
|
|
build.classify_renpy(pattern + "/**.pyc", None)
|
|
build.classify_renpy(pattern + "/**.pyo", None)
|
|
|
|
build.classify_renpy(pattern + "/**.pyi", None)
|
|
|
|
build.classify_renpy(pattern + "/**.rpyc", binary)
|
|
build.classify_renpy(pattern + "/**.rpymc", binary)
|
|
build.classify_renpy(pattern + "/**/cache/*", binary)
|
|
|
|
build.classify_renpy(pattern + "/**", source)
|
|
|
|
build.classify_renpy("renpy.py", "binary")
|
|
source_and_binary("renpy")
|
|
|
|
# games.
|
|
build.classify_renpy("launcher/game/theme/", None)
|
|
build.classify_renpy("gui/game/gui/", None)
|
|
|
|
source_and_binary("launcher", py=False)
|
|
source_and_binary("gui", binary=None, py=False)
|
|
|
|
source_and_binary("the_question")
|
|
source_and_binary("tutorial")
|
|
|
|
# extra fonts.
|
|
build.classify_renpy("sdk-fonts/**", "source")
|
|
|
|
# docs.
|
|
build.classify_renpy("doc/", "source")
|
|
build.classify_renpy("doc/.doctrees/", None)
|
|
build.classify_renpy("doc/_sources/", None)
|
|
build.classify_renpy("doc/**", "source")
|
|
build.classify_renpy("LICENSE.txt", "source")
|
|
|
|
build.classify_renpy("sphinx/", "source_only")
|
|
build.classify_renpy("sphinx/build.sh", "source_only")
|
|
build.classify_renpy("sphinx/checks.py", "source_only")
|
|
build.classify_renpy("sphinx/game/**", "source_only")
|
|
build.classify_renpy("sphinx/source/inc/", None)
|
|
build.classify_renpy("sphinx/source/**", "source_only")
|
|
|
|
|
|
# module.
|
|
build.classify_renpy("module/", "source")
|
|
build.classify_renpy("module/*.c", "source")
|
|
build.classify_renpy("module/gen/", None)
|
|
build.classify_renpy("module/*.h", "source")
|
|
build.classify_renpy("module/*.py*", "source")
|
|
build.classify_renpy("module/include/", "source")
|
|
build.classify_renpy("module/include/*.pxd", "source")
|
|
build.classify_renpy("module/include/*.pxi", "source")
|
|
build.classify_renpy("module/pysdlsound/", "source")
|
|
build.classify_renpy("module/pysdlsound/*.py", "source")
|
|
build.classify_renpy("module/pysdlsound/*.pyx", "source")
|
|
build.classify_renpy("module/fribidi-src/**", "source")
|
|
build.classify_renpy("module/tinyfiledialogs/**", "source")
|
|
|
|
# all-platforms binary.
|
|
build.classify_renpy("lib/**/*steam_api*", "steam")
|
|
build.classify_renpy("lib/**/*Live2D*", None)
|
|
|
|
if PY2:
|
|
build.classify_renpy("lib/py2-linux-armv7l/**", "linux_arm")
|
|
build.classify_renpy("lib/py2-linux-aarch64/**", "linux_arm")
|
|
source_and_binary("lib/py2-**", "binary", "binary")
|
|
source_and_binary("lib/python2**", "binary", "binary")
|
|
build.classify_renpy("renpy2.sh", "binary")
|
|
else:
|
|
build.classify_renpy("lib/py3-linux-armv7l/**", "linux_arm")
|
|
build.classify_renpy("lib/py3-linux-aarch64/**", "linux_arm")
|
|
source_and_binary("lib/py3-**", "binary", "binary")
|
|
source_and_binary("lib/python3**", "binary", "binary", py='pyc')
|
|
build.classify_renpy("renpy3.sh", "binary")
|
|
|
|
build.classify_renpy("lib/", "binary")
|
|
|
|
# renpy.app is now built from scratch from distribute.rpy.
|
|
|
|
# jedit rules.
|
|
build.classify_renpy("jedit/**", "jedit")
|
|
|
|
# Packages.
|
|
build.packages = [ ]
|
|
|
|
build.package("sdk", "zip tar.bz2 dmg", "source binary")
|
|
build.package("sdkarm", "tar.bz2", "source binary linux_arm")
|
|
build.package("source", "tar.bz2", "source source_only", update=False)
|
|
build.package("steam", "zip", "steam", dlc=True)
|
|
|
|
build.package("jedit", "zip", "jedit", dlc=True)
|
|
|
|
build.package("atom-linux", "tar.bz2", "atom-all atom-linux", dlc=True)
|
|
build.package("atom-mac", "zip", "atom-all atom-mac", dlc=True)
|
|
build.package("atom-windows", "zip", "atom-all atom-windows", dlc=True)
|
|
|
|
build.package("rapt", "zip", "rapt", dlc=True)
|
|
build.package("renios", "zip", "renios", dlc=True)
|
|
build.package("web", "zip", "web", dlc=True)
|
|
|
|
|
|
# Enable the special launcher translation mode.
|
|
define config.translate_launcher = True
|
|
|
|
# Allow clicks that focus the window to be processed.
|
|
define config.mouse_focus_clickthrough = True
|
|
|
|
# Reduce the rate of screen updates.
|
|
default preferences.gl_powersave = True
|
|
|
|
# Enable rtl.
|
|
define config.rtl = True
|
|
|
|
# Disable steam.
|
|
python early:
|
|
config.enable_steam = False
|
|
|
|
# Since the launcher can be run directly or can be run from the SDK directory,
|
|
# uneliding files needs to be handled slightly differently.
|
|
define config.alternate_unelide_path = os.path.join(config.basedir, "launcher")
|