diff options
Diffstat (limited to 'unrpyc/renpy/game.py')
-rw-r--r-- | unrpyc/renpy/game.py | 437 |
1 files changed, 0 insertions, 437 deletions
diff --git a/unrpyc/renpy/game.py b/unrpyc/renpy/game.py deleted file mode 100644 index 028da26..0000000 --- a/unrpyc/renpy/game.py +++ /dev/null @@ -1,437 +0,0 @@ -# Copyright 2004-2013 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 module is intended to be used as a singleton object. -# It's purpose is to store in one global all of the data that would -# be to annoying to lug around otherwise. - -import renpy.display - -# The basepath. -basepath = None - -# A list of paths that we search to load things. This is searched for -# everything that can be loaded, before archives are used. -searchpath = [ ] - -# The options that were read off the command line. -args = None - -# The game's script. -script = None - -# A stack of execution contexts. -contexts = [ ] - -# The interface that the game uses to interact with the user. -interface = None - -# Are we inside lint? -lint = False - -# The RollbackLog that keeps track of changes to the game state -# and to the store. -log = None - -# Some useful additional information about program execution that -# can be added to the exception. -exception_info = '' - -# Used to store style information. -style = None - -# The set of statements we've seen in this session. -seen_session = { } - -# The set of statements we've ever seen. -seen_ever = { } - -# True if we're in the first interaction after a rollback or rollforward. -after_rollback = False - -# Code that's run after the init code. -post_init = [ ] - -# Should we attempt to run in a mode that uses less memory? -less_memory = False - -# Should we attempt to run in a mode that minimizes the number -# of screen updates? -less_updates = False - -# Should we never show the mouse? -less_mouse = False - -# Should we not imagedissiolve? -less_imagedissolve = False - -# The class that's used to hold the persistent data. -class Persistent(object): - - def __setstate__(self, data): - vars(self).update(data) - - def __getstate__(self): - return vars(self) - - # Undefined attributes return None. - def __getattr__(self, attr): - return None - -# The persistent data that's kept from session to session -persistent = Persistent() - -class Preferences(renpy.object.Object): - """ - Stores preferences that will one day be persisted. - """ - __version__ = 5 - - def after_upgrade(self, version): - if version < 1: - self.mute_volumes = 0 - if version < 2: - self.using_afm_enable = False - if version < 3: - self.physical_size = None - if version < 4: - self.renderer = "auto" - self.performance_test = True - if version < 5: - self.language = None - - def __init__(self): - self.fullscreen = False - self.skip_unseen = False - self.text_cps = 0 - self.afm_time = 0 - self.afm_enable = True - - # These will be going away soon. - self.sound = True - self.music = True - - # 2 - All transitions. - # 1 - Only non-default transitions. - # 0 - No transitions. - self.transitions = 2 - - self.skip_after_choices = False - - # Mixer channel info. - - # A map from channel name to the current volume (between 0 and 1). - self.volumes = { } - - # True if the channel should not play music. False - # otherwise. (Not used anymore.) - self.mute = { } - - # Joystick mappings. - self.joymap = dict( - joy_left="Axis 0.0 Negative", - joy_right="Axis 0.0 Positive", - joy_up="Axis 0.1 Negative", - joy_down="Axis 0.1 Positive", - joy_dismiss="Button 0.0") - - # The size of the window, or None if we don't know it yet. - self.physical_size = None - - # The graphics renderer we use. - self.renderer = "auto" - - # Should we do a performance test on startup? - self.performance_test = True - - # The language we use for translations. - self.language = None - - def set_volume(self, mixer, volume): - self.volumes[mixer] = volume - - def get_volume(self, mixer): - return self.volumes.get(mixer, 0) - - def set_mute(self, mixer, mute): - self.mute[mixer] = mute - - def get_mute(self, mixer): - return self.mute[mixer] - -# The current preferences. -preferences = Preferences() - -class RestartContext(Exception): - """ - Restarts the current context. If `label` is given, calls that label - in the restarted context. - """ - - def __init__(self, label): - self.label = label - -class RestartTopContext(Exception): - """ - Restarts the top context. If `label` is given, calls that label - in the restarted context. - """ - - def __init__(self, label): - self.label = label - -class FullRestartException(Exception): - """ - An exception of this type forces a hard restart, completely - destroying the store and config and so on. - """ - - def __init__(self, reason="end_game"): # W0231 - self.reason = reason - -class UtterRestartException(Exception): - """ - An exception of this type forces an even harder restart, causing - Ren'Py and the script to be reloaded. - """ - -class QuitException(Exception): - """ - An exception of this class will let us force a safe quit, from - anywhere in the program. - - `relaunch` - If given, the program will run another copy of itself, with the - same arguments. - """ - - def __init__(self, relaunch=False): - Exception.__init__(self) - self.relaunch = relaunch - -class JumpException(Exception): - """ - This should be raised with a label as the only argument. This causes - the current statement to terminate, and execution to be transferred - to the named label. - """ - -class JumpOutException(Exception): - """ - This should be raised with a label as the only argument. This exits - the current context, and then raises a JumpException. - """ - -class CallException(Exception): - """ - Raise this exception to cause the current statement to terminate, - and control to be transferred to the named label. - """ - - def __init__(self, label, args, kwargs): - Exception.__init__(self) - - self.label = label - self.args = args - self.kwargs = kwargs - -class EndReplay(Exception): - """ - Raise this exception to end the current replay (the current call to - call_replay). - """ - -class ParseErrorException(Exception): - """ - This is raised when a parse error occurs, after it has been - reported to the user. - """ - -# A tuple of exceptions that should not be caught by the -# exception reporting mechanism. -CONTROL_EXCEPTIONS = ( - RestartContext, - RestartTopContext, - FullRestartException, - UtterRestartException, - QuitException, - JumpException, - JumpOutException, - CallException, - EndReplay, - ParseErrorException, - KeyboardInterrupt, - ) - - -def context(index=-1): - """ - Return the current execution context, or the context at the - given index if one is specified. - """ - - return contexts[index] - -def invoke_in_new_context(callable, *args, **kwargs): #@ReservedAssignment - """ - This pushes the current context, and invokes the given python - function in a new context. When that function returns or raises an - exception, it removes the new context, and restores the current - context. - - Additional arguments and keyword arguments are passed to the - callable. - - Please note that the context so created cannot execute renpy - code. So exceptions that change the flow of renpy code (like - the one created by renpy.jump) cause this context to terminate, - and are handled by the next higher context. - - If you want to execute renpy code from the function, you can call - it with renpy.call_in_new_context. - - Use this to begin a second interaction with the user while - inside an interaction. - """ - - context = renpy.execution.Context(False, contexts[-1], clear=True) - contexts.append(context) - - if renpy.display.interface is not None: - renpy.display.interface.enter_context() - - try: - - return callable(*args, **kwargs) - - except renpy.game.JumpOutException as e: - - raise renpy.game.JumpException(e.args[0]) - - finally: - - contexts.pop() - contexts[-1].do_deferred_rollback() - - if interface.restart_interaction and contexts: - contexts[-1].scene_lists.focused = None - - - -def call_in_new_context(label, *args, **kwargs): - """ - This code creates a new context, and starts executing code from - that label in the new context. Rollback is disabled in the - new context. (Actually, it will just bring you back to the - real context.) - - Use this to begin a second interaction with the user while - inside an interaction. - """ - - context = renpy.execution.Context(False, contexts[-1], clear=True) - contexts.append(context) - - if renpy.display.interface is not None: - renpy.display.interface.enter_context() - - if args: - renpy.store._args = args - else: - renpy.store._args = None - - if kwargs: - renpy.store._kwargs = renpy.python.RevertableDict(kwargs) - else: - renpy.store._kwargs = None - - try: - - context.goto_label(label) - renpy.execution.run_context(False) - - rv = renpy.store._return #@UndefinedVariable - - return rv - - except renpy.game.JumpOutException as e: - - raise renpy.game.JumpException(e.args[0]) - - finally: - - contexts.pop() - contexts[-1].do_deferred_rollback() - - if interface.restart_interaction and contexts: - contexts[-1].scene_lists.focused = None - -def call_replay(label, scope={}): - """ - :doc: replay - - Calls a label as a memory. - - Keyword arguments are used to set the initial values of variables in the - memory context. - """ - - renpy.game.log.complete() - - old_log = renpy.game.log - renpy.game.log = renpy.python.RollbackLog() - - sb = renpy.python.StoreBackup() - renpy.python.clean_stores() - - context = renpy.execution.Context(True) - contexts.append(context) - - if renpy.display.interface is not None: - renpy.display.interface.enter_context() - - for k, v in scope.items(): - setattr(renpy.store, k, v) - - renpy.store._in_replay = label - - try: - - context.goto_label("_start_replay") - renpy.execution.run_context(False) - - except EndReplay: - pass - - finally: - contexts.pop() - renpy.game.log = old_log - sb.restore() - - if interface.restart_interaction and contexts: - contexts[-1].scene_lists.focused = None - - -# Type information. -if False: - script = renpy.script.Script() - interface = renpy.display.core.Interface() - log = renpy.python.RollbackLog() |