CampBuddy/Camp.Buddy v2.2.1/Camp_Buddy-2.2.1-pc/renpy/common/00library.rpy
2025-03-03 23:00:33 +01:00

420 lines
10 KiB
Text

# Copyright 2004-2019 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 is kind of a catch-all file for things that are defined in the library,
# but don't merit their own files.
init 9999:
# Re-run the errorhandling setup, so we can adjust the styles to the new size
# of the screen.
call _errorhandling
init -1700 python:
# Should we debug the equality operations?
config.debug_equality = False
class DictEquality(object):
"""
Declares two objects equal if their types are the same, and
their internal dictionaries are equal.
"""
def __eq__(self, o):
try:
if self is o:
return True
if _type(self) is _type(o):
return (self.__dict__ == o.__dict__)
return False
except:
if config.debug_equality:
raise
return False
def __ne__(self, o):
return not (self == o)
class FieldEquality(object):
"""
Declares two objects equal if their types are the same, and
the listed fields are equal.
"""
# The lists of fields to use.
equality_fields = [ ]
identity_fields = [ ]
def __eq__(self, o):
try:
if self is o:
return True
if _type(self) is not _type(o):
return False
for k in self.equality_fields:
if self.__dict__[k] != o.__dict__[k]:
return False
for k in self.identity_fields:
if self.__dict__[k] is not o.__dict__[k]:
return False
return True
except:
if config.debug_equality:
raise
return False
def __ne__(self, o):
return not (self == o)
init -1700 python:
# basics: True if the skip indicator should be shown.
config.skip_indicator = True
# This is updated to give the user an idea of where a save is
# taking place.
save_name = ''
##########################################################################
# Alias the preferences object.
# This is for compatibility with default preferences.foo = True.
preferences = _preferences
##########################################################################
# Empty window
def _default_empty_window():
try:
who = _last_say_who
who = renpy.eval_who(who)
except:
who = None
if who is None:
who = narrator
if isinstance(who, NVLCharacter):
nvl_show_core()
elif isinstance(store.narrator, ADVCharacter):
store.narrator.empty_window()
elif isinstance(store._narrator, ADVCharacter):
store._narrator.empty_window()
config.empty_window = _default_empty_window
##########################################################################
# Extend
config.extend_interjection = "{fast}"
def extend(what, interact=True, *args, **kwargs):
who = _last_say_who
who = renpy.eval_who(who)
if who is None:
who = narrator
elif isinstance(who, basestring):
who = Character(who, kind=name_only)
# This ensures extend works even with NVL mode.
who.do_extend()
what = _last_say_what + config.extend_interjection + _last_raw_what
args = args + _last_say_args
kw = dict(_last_say_kwargs)
kw.update(kwargs)
kw["interact"] = interact and kw.get("interact", True)
renpy.exports.say(who, what, *args, **kw)
store._last_say_what = what
extend.record_say = False
##########################################################################
# Skip indicator
style.skip_indicator = Style(style.default, heavy=True, help='The skip indicator.')
style.skip_indicator.xpos = 10
style.skip_indicator.ypos = 10
def _skip_indicator():
if renpy.has_screen("skip_indicator"):
if config.skipping and not renpy.get_screen("skip_indicator"):
renpy.show_screen("skip_indicator")
elif not config.skipping and renpy.get_screen("skip_indicator"):
renpy.hide_screen("skip_indicator")
return
### skip_indicator default
# (text) The style and placement of the skip indicator.
if config.skip_indicator is True:
if config.skipping:
ui.text(_(u"Skip Mode"), style='skip_indicator')
return
if not config.skip_indicator:
return
if not config.skipping:
return
ui.add(renpy.easy.displayable(config.skip_indicator))
config.overlay_functions.append(_skip_indicator)
##########################################################################
# Predictions
# A list of labels we predict at start time.
config.predict_start_labels = [ "start" ]
# Prediction of statements.
def _predict_statements(current):
if main_menu:
rv = list(config.predict_start_labels)
rv.append(current)
return rv
return [ current ]
config.predict_statements_callback = _predict_statements
# Prediction of screens.
def _predict_screens():
for i in config.overlay_screens:
renpy.predict_screen(i)
s = _game_menu_screen
if s is None:
return
if renpy.has_screen(s):
renpy.predict_screen(s)
return
if s.endswith("_screen"):
s = s[:-7]
if renpy.has_screen(s):
renpy.predict_screen(s)
return
config.predict_callbacks.append(_predict_screens)
##########################################################################
# Name-only say statements.
# This character is copied when a name-only say statement is called.
name_only = adv
def predict_say(who, what):
who = Character(who, kind=name_only)
try:
who.predict(what)
except:
pass
def say(who, what, interact=True, *args, **kwargs):
who = Character(who, kind=name_only)
who(what, interact=interact, *args, **kwargs)
##########################################################################
# Misc.
# Should we display tiles in places of transparency while in developer
# mode?
config.transparent_tile = True
# Use DejaVuSans-Bold when appropriate.
config.font_replacement_map["DejaVuSans.ttf", True, False] = ("DejaVuSans-Bold.ttf", False, False)
# License text.
renpy.license = _("This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}.")
init -1000 python:
# Set developer to the auto default.
config.original_developer = "auto"
if config.script_version:
config.developer = False
config.default_developer = False
else:
config.developer = True
config.default_developer = True
# Lock the library object.
config.locked = True
# Record the builtins.
renpy.lint.renpy_builtins = set(globals())
for i in """
adv
alt
anim
blinds
center
default
default_transition
dissolve
ease
easeinbottom
easeinleft
easeinright
easeintop
easeoutbottom
easeoutleft
easeoutright
easeouttop
fade
hpunch
irisin
irisout
left
menu
mouse_visible
move
moveinbottom
moveinleft
moveinright
moveintop
moveoutbottom
moveoutleft
moveoutright
moveouttop
name_only
nvl
nvl_variant
offscreenleft
offscreenright
pixellate
pushdown
pushleft
pushright
pushup
right
save_name
slideawaydown
slideawayleft
slideawayright
slideawayup
slidedown
slideleft
slideright
slideup
squares
suppress_overlay
sv
top
topleft
topright
truecenter
vpunch
wipedown
wipeleft
wiperight
wipeup
zoomin
zoominout
zoomout
""".split():
renpy.lint.renpy_builtins.remove(i)
# After init, make some changes based on if config.developer is True.
init 1700 python hide:
if config.developer:
if config.debug_sound is None:
config.debug_sound = True
renpy.load_module("_developer/developer")
renpy.load_module("_developer/inspector")
if config.window_title is None:
config.window_title = config.name or "A Ren'Py Game"
import os
if "RENPY_GL_MODERN" in os.environ:
config.gl_npot = True
config.cache_surfaces = False
print("Modern GL Enabled.")
# Used by renpy.return_statement() to return.
label _renpy_return:
return _return
# Entry point for the developer screen. The rest of it is loaded from
# _developer.rpym
label _developer:
if not config.developer:
return
$ _enter_menu()
jump expression "_developer_screen"
# This is used to ensure a fixed click-to-continue indicator is shown on
# its own layer.
screen _ctc:
add ctc
# Creates the data structure that history is stored in.
default _history = True
default _history_list = [ ]