def main(): renpy.game.exception_info = 'Before loading the script.' # Get ready to accept new arguments. renpy.arguments.pre_init() # Init the screen language parser. renpy.sl2.slparser.init() # Init the config after load. renpy.config.init() # Set up variants. choose_variants() renpy.display.touch = "touch" in renpy.config.variants # Note the game directory. game.basepath = renpy.config.gamedir renpy.config.searchpath = [ renpy.config.gamedir ] # Find the common directory. commondir = __main__.path_to_common(renpy.config.renpy_base) # E1101 @UndefinedVariable if os.path.isdir(commondir): renpy.config.searchpath.append(commondir) renpy.config.commondir = commondir else: renpy.config.commondir = None if renpy.android: renpy.config.searchpath = [ ] renpy.config.commondir = None # Load Ren'Py extensions. for dir in renpy.config.searchpath: #@ReservedAssignment for fn in os.listdir(dir): if fn.lower().endswith(".rpe"): load_rpe(dir + "/" + fn) # The basename is the final component of the path to the gamedir. for i in sorted(os.listdir(renpy.config.gamedir)): if not i.endswith(".rpa"): continue i = i[:-4] renpy.config.archives.append(i) renpy.config.archives.reverse() # Initialize archives. renpy.loader.index_archives() # Start auto-loading. renpy.loader.auto_init() # Initialize the log. game.log = renpy.python.RollbackLog() # Initialize the store. renpy.store.store = sys.modules['store'] # Set up styles. game.style = renpy.style.StyleManager() # @UndefinedVariable renpy.store.style = game.style # Run init code in its own context. (Don't log.) game.contexts = [ renpy.execution.Context(False) ] game.contexts[0].init_phase = True # Load the script. renpy.game.exception_info = 'While loading the script.' renpy.game.script = renpy.script.Script() # Set up error handling. renpy.exports.load_module("_errorhandling") renpy.style.build_styles() # @UndefinedVariable # Load all .rpy files. renpy.game.script.load_script() # sets renpy.game.script. renpy.game.exception_info = 'After loading the script.' # Find the save directory. if renpy.config.savedir is None: renpy.config.savedir = __main__.path_to_saves(renpy.config.gamedir) # E1101 @UndefinedVariable if renpy.game.args.savedir: #@UndefinedVariable renpy.config.savedir = renpy.game.args.savedir #@UndefinedVariable # Init preferences. game.persistent = renpy.persistent.init() game.preferences = game.persistent._preferences # Init save locations. renpy.savelocation.init() # We need to be 100% sure we kill the savelocation thread. try: # Load persistent data from all save locations. renpy.persistent.update() # Clear the list of seen statements in this game. game.seen_session = { } # Initialize persistent variables. renpy.store.persistent = game.persistent renpy.store._preferences = game.preferences if renpy.parser.report_parse_errors(): raise renpy.game.ParseErrorException() renpy.game.exception_info = 'While executing init code:' for _prio, node in game.script.initcode: game.context().run(node) renpy.game.exception_info = 'After initialization, but before game start.' # Save the bytecode in a cache. renpy.game.script.save_bytecode() # Check if we should simulate android. renpy.android = renpy.android or renpy.config.simulate_android #@UndefinedVariable # Run the post init code, if any. for i in renpy.game.post_init: i() # Init translation. renpy.translation.init_translation() # Rebuild the various style caches. renpy.style.build_styles() # @UndefinedVariable # Index the archive files. We should not have loaded an image # before this point. (As pygame will not have been initialized.) # We need to do this again because the list of known archives # may have changed. renpy.loader.index_archives() # Check some environment variables. renpy.game.less_memory = "RENPY_LESS_MEMORY" in os.environ renpy.game.less_mouse = "RENPY_LESS_MOUSE" in os.environ renpy.game.less_updates = "RENPY_LESS_UPDATES" in os.environ renpy.dump.dump(False) # Handle arguments and commands. if not renpy.arguments.post_init(): return # Remove the list of all statements from the script. game.script.all_stmts = None # Make a clean copy of the store. renpy.python.make_clean_stores() # Initialize image cache. renpy.display.im.cache.init() # (Perhaps) Initialize graphics. if not game.interface: renpy.display.core.Interface() # Start things running. restart = None renpy.game.exception_info = 'While running game code:' renpy.first_utter_start = False while True: if restart: renpy.display.screen.before_restart() try: try: run(restart) finally: restart = (renpy.config.end_game_transition, "_invoke_main_menu", "_main_menu") renpy.persistent.update(True) except game.FullRestartException, e: restart = e.reason finally: # Flush any pending interface work. renpy.display.interface.finish_pending() # Give Ren'Py a couple of seconds to finish saving. renpy.loadsave.autosave_not_running.wait(3.0)
def main(): log_clock("Bootstrap to the start of init.init") renpy.game.exception_info = 'Before loading the script.' # Get ready to accept new arguments. renpy.arguments.pre_init() # Init the screen language parser. renpy.sl2.slparser.init() # Init the config after load. renpy.config.init() # Set up variants. choose_variants() renpy.display.touch = "touch" in renpy.config.variants log_clock("Early init") # Note the game directory. game.basepath = renpy.config.gamedir renpy.config.searchpath = [ renpy.config.gamedir ] # Find the common directory. commondir = __main__.path_to_common(renpy.config.renpy_base) # E1101 @UndefinedVariable if os.path.isdir(commondir): renpy.config.searchpath.append(commondir) renpy.config.commondir = commondir else: renpy.config.commondir = None if renpy.android: renpy.config.searchpath = [ ] renpy.config.commondir = None # Load Ren'Py extensions. for dir in renpy.config.searchpath: #@ReservedAssignment for fn in os.listdir(dir): if fn.lower().endswith(".rpe"): load_rpe(dir + "/" + fn) # The basename is the final component of the path to the gamedir. for i in sorted(os.listdir(renpy.config.gamedir)): if not i.endswith(".rpa"): continue i = i[:-4] renpy.config.archives.append(i) renpy.config.archives.reverse() # Initialize archives. renpy.loader.index_archives() # Start auto-loading. renpy.loader.auto_init() log_clock("Loader init") # Initialize the log. game.log = renpy.python.RollbackLog() # Initialize the store. renpy.store.store = sys.modules['store'] # Set up styles. game.style = renpy.style.StyleManager() # @UndefinedVariable renpy.store.style = game.style # Run init code in its own context. (Don't log.) game.contexts = [ renpy.execution.Context(False) ] game.contexts[0].init_phase = True renpy.execution.not_infinite_loop(60) # Load the script. renpy.game.exception_info = 'While loading the script.' renpy.game.script = renpy.script.Script() # Set up error handling. renpy.exports.load_module("_errorhandling") renpy.style.build_styles() # @UndefinedVariable log_clock("Loading error handling") # If recompiling everything, remove orphan .rpyc files. # Otherwise, will fail in case orphan .rpyc have same # labels as in other scripts (usually happens on script rename). if renpy.game.args.command == 'compile': for (fn, dir) in renpy.game.script.script_files: if not os.path.isfile(os.path.join(dir, fn+".rpy")): try: name = os.path.join(dir, fn+".rpyc") os.rename(name, name+".bak") except OSError: # This perhaps shouldn't happen since either .rpy or .rpyc should exist pass # Update script files list, so that it doesn't contain removed .rpyc's renpy.loader.cleardirfiles() renpy.game.script.scan_script_files() # Load all .rpy files. renpy.game.script.load_script() # sets renpy.game.script. log_clock("Loading script") if renpy.game.args.command == 'load-test': start = time.time() for i in range(5): print(i) renpy.game.script = renpy.script.Script() renpy.game.script.load_script() print time.time() - start sys.exit(0) renpy.game.exception_info = 'After loading the script.' # Find the save directory. if renpy.config.savedir is None: renpy.config.savedir = __main__.path_to_saves(renpy.config.gamedir) # E1101 @UndefinedVariable if renpy.game.args.savedir: #@UndefinedVariable renpy.config.savedir = renpy.game.args.savedir #@UndefinedVariable # Init preferences. game.persistent = renpy.persistent.init() game.preferences = game.persistent._preferences # Init save locations. renpy.savelocation.init() # We need to be 100% sure we kill the savelocation thread. try: # Load persistent data from all save locations. renpy.persistent.update() log_clock("Loading persistent") # Clear the list of seen statements in this game. game.seen_session = { } # Initialize persistent variables. renpy.store.persistent = game.persistent renpy.store._preferences = game.preferences if renpy.parser.report_parse_errors(): raise renpy.game.ParseErrorException() renpy.game.exception_info = 'While executing init code:' for _prio, node in game.script.initcode: game.context().run(node) renpy.game.exception_info = 'After initialization, but before game start.' # Check if we should simulate android. renpy.android = renpy.android or renpy.config.simulate_android #@UndefinedVariable # Run the post init code, if any. for i in renpy.game.post_init: i() if renpy.config.clear_lines: renpy.scriptedit.lines.clear() for i in renpy.game.persistent._seen_translates: if i in renpy.game.script.translator.default_translates: renpy.game.seen_translates_count += 1 log_clock("Running init code") renpy.pyanalysis.load_cache() log_clock("Loading analysis data") # Analyze the script and compile ATL. renpy.game.script.analyze() renpy.atl.compile_all() log_clock("Analyze and compile ATL") # Index the archive files. We should not have loaded an image # before this point. (As pygame will not have been initialized.) # We need to do this again because the list of known archives # may have changed. renpy.loader.index_archives() log_clock("Index archives") # Check some environment variables. renpy.game.less_memory = "RENPY_LESS_MEMORY" in os.environ renpy.game.less_mouse = "RENPY_LESS_MOUSE" in os.environ renpy.game.less_updates = "RENPY_LESS_UPDATES" in os.environ renpy.dump.dump(False) renpy.game.script.make_backups() log_clock("Dump and make backups.") # Initialize image cache. renpy.display.im.cache.init() log_clock("Cleaning cache") # Make a clean copy of the store. renpy.python.make_clean_stores() log_clock("Making clean stores") # (Perhaps) Initialize graphics. if not game.interface: renpy.display.core.Interface() log_clock("Creating interface object") # Start things running. restart = None while True: if restart: renpy.display.screen.before_restart() try: try: run(restart) finally: restart = (renpy.config.end_game_transition, "_invoke_main_menu", "_main_menu") renpy.persistent.update(True) except game.FullRestartException, e: restart = e.reason finally: # Flush any pending interface work. renpy.display.interface.finish_pending() # Give Ren'Py a couple of seconds to finish saving. renpy.loadsave.autosave_not_running.wait(3.0)
def main(): renpy.game.exception_info = 'Before loading the script.' # Init the config after load. renpy.config.init() # Note the game directory. game.basepath = renpy.config.gamedir renpy.config.searchpath = [ renpy.config.gamedir ] # Find the common directory. commondir = __main__.path_to_common(renpy.config.renpy_base) # E1101 if os.path.isdir(commondir): renpy.config.searchpath.append(commondir) renpy.config.commondir = commondir else: renpy.config.commondir = None # Load Ren'Py extensions. for dir in renpy.config.searchpath: for fn in os.listdir(dir): if fn.lower().endswith(".rpe"): load_rpe(dir + "/" + fn) # The basename is the final component of the path to the gamedir. for i in os.listdir(renpy.config.gamedir): if not i.endswith(".rpa"): continue i = i[:-4] renpy.config.archives.append(i) # Note the profile option. if renpy.game.options.profile: renpy.config.profile = True # Initialize archives. renpy.loader.index_archives() # Initialize the log. game.log = renpy.python.RollbackLog() # Initialize the store. renpy.store.store = renpy.store # Load the script. renpy.game.exception_info = 'While loading the script.' game.script = renpy.script.load_script() if renpy.parser.report_parse_errors(): raise renpy.game.ParseErrorException() renpy.game.exception_info = 'After loading the script.' # Find the save directory. if renpy.config.savedir is None: renpy.config.savedir = __main__.path_to_saves(renpy.config.gamedir) # E1101 if renpy.game.options.savedir: renpy.config.savedir = renpy.game.options.savedir # Make the save directory. try: os.makedirs(renpy.config.savedir) except: pass # Perhaps delete the persistent data and exit. if renpy.game.options.rmpersistent: try: os.unlink(renpy.config.savedir + "/persistent") except: pass return # Unserialize the persistent data. try: f = file(renpy.config.savedir + "/persistent", "rb") s = f.read().decode("zlib") f.close() game.persistent = loads(s) except: game.persistent = game.Persistent() # Initialize the set of statements seen ever. if not game.persistent._seen_ever: game.persistent._seen_ever = { } game.seen_ever = game.persistent._seen_ever # Initialize the set of images seen ever. if not game.persistent._seen_images: game.persistent._seen_images = { } # Initialize the set of chosen menu choices. if not game.persistent._chosen: game.persistent._chosen = { } if not game.persistent._seen_audio: game.persistent._seen_audio = { } # Clear the list of seen statements in this game. game.seen_session = { } # Initialize the preferences. if not game.persistent._preferences: game.persistent._preferences = game.Preferences() game.preferences = game.persistent._preferences # Initialize persistent variables. renpy.store.persistent = game.persistent renpy.store._preferences = game.preferences # Set up styles. renpy.style.reset() game.style = renpy.style.StyleManager() renpy.store.style = game.style renpy.game.exception_info = 'While executing init code:' # Run init code in its own context. (Don't log.) game.contexts = [ renpy.execution.Context(False) ] # Run the init code. game.init_phase = True for prio, node in game.script.initcode: game.context().run(node) game.init_phase = False renpy.game.exception_info = 'After initialization, but before game start.' # Save the bytecode in a cache. renpy.game.script.save_bytecode() # Run the post init code, if any. for i in renpy.game.post_init: i() # Rebuild the various style caches. renpy.style.build_styles() # Index the archive files. We should not have loaded an image # before this point. (As pygame will not have been initialized.) # We need to do this again because the list of known archives # may have changed. renpy.loader.index_archives() # Make a clean copy of the store. game.clean_store = renpy.store.__dict__.copy() # Check some environment variables. renpy.game.less_memory = "RENPY_LESS_MEMORY" in os.environ renpy.game.less_mouse = "RENPY_LESS_MOUSE" in os.environ renpy.game.less_updates = "RENPY_LESS_UPDATES" in os.environ if renpy.game.options.compile: return if renpy.game.options.lint: try: renpy.lint.lint() return except: raise # Remove the list of all statements from the script. game.script.all_stmts = None # (Perhaps) Initialize graphics. if not game.interface: game.interface = renpy.display.core.Interface() # Start things running. restart = None renpy.game.exception_info = 'While running game code:' while True: try: try: run(restart) finally: restart = (renpy.config.end_game_transition, "_invoke_main_menu", "_main_menu") save_persistent() except game.QuitException, e: break except game.FullRestartException, e: restart = e.reason
def main(): renpy.game.exception_info = 'Before loading the script.' # Get ready to accept new arguments. renpy.arguments.pre_init() # Init the config after load. renpy.config.init() # Set up variants. choose_variants() # Note the game directory. game.basepath = renpy.config.gamedir renpy.config.searchpath = [ renpy.config.gamedir ] # Find the common directory. commondir = __main__.path_to_common(renpy.config.renpy_base) # E1101 @UndefinedVariable if os.path.isdir(commondir): renpy.config.searchpath.append(commondir) renpy.config.commondir = commondir else: renpy.config.commondir = None # Load Ren'Py extensions. for dir in renpy.config.searchpath: #@ReservedAssignment for fn in os.listdir(dir): if fn.lower().endswith(".rpe"): load_rpe(dir + "/" + fn) # The basename is the final component of the path to the gamedir. for i in sorted(os.listdir(renpy.config.gamedir)): if not i.endswith(".rpa"): continue i = i[:-4] renpy.config.archives.append(i) renpy.config.archives.reverse() # Initialize archives. renpy.loader.index_archives() # Initialize the log. game.log = renpy.python.RollbackLog() # Initialize the store. renpy.store.store = sys.modules['store'] # Set up styles. renpy.style.reset() game.style = renpy.style.StyleManager() renpy.store.style = game.style # Run init code in its own context. (Don't log.) game.contexts = [ renpy.execution.Context(False) ] game.contexts[0].init_phase = True # Load the script. renpy.game.exception_info = 'While loading the script.' renpy.game.script = renpy.script.Script() renpy.exports.load_module("_errorhandling") renpy.game.script.load_script() # sets renpy.game.script. renpy.game.exception_info = 'After loading the script.' # Find the save directory. if renpy.config.savedir is None: renpy.config.savedir = __main__.path_to_saves(renpy.config.gamedir) # E1101 @UndefinedVariable if renpy.game.args.savedir: #@UndefinedVariable renpy.config.savedir = renpy.game.args.savedir #@UndefinedVariable # Make the save directory. try: os.makedirs(renpy.config.savedir) except: pass # Unserialize the persistent data. try: f = file(renpy.config.savedir + "/persistent", "rb") s = f.read().decode("zlib") f.close() game.persistent = loads(s) except: game.persistent = game.Persistent() # Initialize the set of statements seen ever. if not game.persistent._seen_ever: game.persistent._seen_ever = { } game.seen_ever = game.persistent._seen_ever # Initialize the set of images seen ever. if not game.persistent._seen_images: game.persistent._seen_images = { } # Initialize the set of chosen menu choices. if not game.persistent._chosen: game.persistent._chosen = { } if not game.persistent._seen_audio: game.persistent._seen_audio = { } # Clear the list of seen statements in this game. game.seen_session = { } # Initialize the preferences. if not game.persistent._preferences: game.persistent._preferences = game.Preferences() game.preferences = game.persistent._preferences # Initialize persistent variables. renpy.store.persistent = game.persistent renpy.store._preferences = game.preferences if renpy.parser.report_parse_errors(): raise renpy.game.ParseErrorException() renpy.game.exception_info = 'While executing init code:' for _prio, node in game.script.initcode: game.context().run(node) renpy.game.exception_info = 'After initialization, but before game start.' # Save the bytecode in a cache. renpy.game.script.save_bytecode() # Check if we should simulate android. renpy.android = renpy.android or renpy.config.simulate_android #@UndefinedVariable # Run the post init code, if any. for i in renpy.game.post_init: i() # Rebuild the various style caches. renpy.style.build_styles() # Index the archive files. We should not have loaded an image # before this point. (As pygame will not have been initialized.) # We need to do this again because the list of known archives # may have changed. renpy.loader.index_archives() # Check some environment variables. renpy.game.less_memory = "RENPY_LESS_MEMORY" in os.environ renpy.game.less_mouse = "RENPY_LESS_MOUSE" in os.environ renpy.game.less_updates = "RENPY_LESS_UPDATES" in os.environ renpy.dump.dump(False) # Handle arguments and commands. if not renpy.arguments.post_init(): return # Remove the list of all statements from the script. game.script.all_stmts = None # Make a clean copy of the store. renpy.python.make_clean_stores() # Initialize image cache. renpy.display.im.cache.init() # (Perhaps) Initialize graphics. if not game.interface: renpy.display.core.Interface() # Start things running. restart = None renpy.game.exception_info = 'While running game code:' renpy.first_utter_start = False while True: try: try: run(restart) finally: restart = (renpy.config.end_game_transition, "_invoke_main_menu", "_main_menu") save_persistent() except game.QuitException, e: if e.relaunch: if renpy.windows and sys.argv[0].endswith(".exe"): subprocess.Popen(sys.argv) else: subprocess.Popen([sys.executable, "-OO"] + sys.argv) break except game.FullRestartException, e: restart = e.reason
def main(): gc.set_threshold(*renpy.config.gc_thresholds) log_clock("Bootstrap to the start of init.init") renpy.game.exception_info = 'Before loading the script.' # Get ready to accept new arguments. renpy.arguments.pre_init() # Init the screen language parser. renpy.sl2.slparser.init() # Init the config after load. renpy.config.init() # Set up variants. choose_variants() renpy.display.touch = "touch" in renpy.config.variants log_clock("Early init") # Note the game directory. game.basepath = renpy.config.gamedir renpy.config.searchpath = [ renpy.config.gamedir ] # Find the common directory. commondir = __main__.path_to_common(renpy.config.renpy_base) # E1101 @UndefinedVariable if os.path.isdir(commondir): renpy.config.searchpath.append(commondir) renpy.config.commondir = commondir else: renpy.config.commondir = None # Add path from env variable, if any if "RENPY_SEARCHPATH" in os.environ: renpy.config.searchpath.extend(os.environ["RENPY_SEARCHPATH"].split("::")) if renpy.android: renpy.config.searchpath = [ ] renpy.config.commondir = None if "ANDROID_PUBLIC" in os.environ: android_game = os.path.join(os.environ["ANDROID_PUBLIC"], "game") print("Android searchpath: ", android_game) if os.path.exists(android_game): renpy.config.searchpath.insert(0, android_game) # Load Ren'Py extensions. for dir in renpy.config.searchpath: # @ReservedAssignment for fn in os.listdir(dir): if fn.lower().endswith(".rpe"): load_rpe(dir + "/" + fn) # Generate a list of extensions for each archive handler. archive_extensions = [ ] for handler in renpy.loader.archive_handlers: for ext in handler.get_supported_extensions(): if not (ext in archive_extensions): archive_extensions.append(ext) # The basename is the final component of the path to the gamedir. for i in sorted(os.listdir(renpy.config.gamedir)): base, ext = os.path.splitext(i) # Check if the archive does not have any of the extensions in archive_extensions if not (ext in archive_extensions): continue renpy.config.archives.append(base) renpy.config.archives.reverse() # Initialize archives. renpy.loader.index_archives() # Start auto-loading. renpy.loader.auto_init() log_clock("Loader init") # Initialize the log. game.log = renpy.python.RollbackLog() # Initialize the store. renpy.store.store = sys.modules['store'] # Set up styles. game.style = renpy.style.StyleManager() # @UndefinedVariable renpy.store.style = game.style # Run init code in its own context. (Don't log.) game.contexts = [ renpy.execution.Context(False) ] game.contexts[0].init_phase = True renpy.execution.not_infinite_loop(60) # Load the script. renpy.game.exception_info = 'While loading the script.' renpy.game.script = renpy.script.Script() if renpy.session.get("compile", False): renpy.game.args.compile = True # Set up error handling. renpy.exports.load_module("_errorhandling") if renpy.exports.loadable("tl/None/common.rpym") or renpy.exports.loadable("tl/None/common.rpymc"): renpy.exports.load_module("tl/None/common") renpy.config.init_system_styles() renpy.style.build_styles() # @UndefinedVariable log_clock("Loading error handling") # If recompiling everything, remove orphan .rpyc files. # Otherwise, will fail in case orphan .rpyc have same # labels as in other scripts (usually happens on script rename). if (renpy.game.args.command == 'compile') and not (renpy.game.args.keep_orphan_rpyc): # @UndefinedVariable for (fn, dn) in renpy.game.script.script_files: if dn is None: continue if not os.path.isfile(os.path.join(dn, fn + ".rpy")): try: name = os.path.join(dn, fn + ".rpyc") os.rename(name, name + ".bak") except OSError: # This perhaps shouldn't happen since either .rpy or .rpyc should exist pass # Update script files list, so that it doesn't contain removed .rpyc's renpy.loader.cleardirfiles() renpy.game.script.scan_script_files() # Load all .rpy files. renpy.game.script.load_script() # sets renpy.game.script. log_clock("Loading script") if renpy.game.args.command == 'load-test': # @UndefinedVariable start = time.time() for i in range(5): print(i) renpy.game.script = renpy.script.Script() renpy.game.script.load_script() print(time.time() - start) sys.exit(0) renpy.game.exception_info = 'After loading the script.' # Find the save directory. if renpy.config.savedir is None: renpy.config.savedir = __main__.path_to_saves(renpy.config.gamedir) # E1101 @UndefinedVariable if renpy.game.args.savedir: # @UndefinedVariable renpy.config.savedir = renpy.game.args.savedir # @UndefinedVariable # Init preferences. game.persistent = renpy.persistent.init() game.preferences = game.persistent._preferences for i in renpy.game.persistent._seen_translates: # @UndefinedVariable if i in renpy.game.script.translator.default_translates: renpy.game.seen_translates_count += 1 if game.persistent._virtual_size: renpy.config.screen_width, renpy.config.screen_height = game.persistent._virtual_size # Init save locations and loadsave. renpy.savelocation.init() # We need to be 100% sure we kill the savelocation thread. try: # Init save slots. renpy.loadsave.init() log_clock("Loading save slot metadata.") # Load persistent data from all save locations. renpy.persistent.update() game.preferences = game.persistent._preferences log_clock("Loading persistent") # Clear the list of seen statements in this game. game.seen_session = { } # Initialize persistent variables. renpy.store.persistent = game.persistent renpy.store._preferences = game.preferences renpy.store._test = renpy.test.testast._test if renpy.parser.report_parse_errors(): raise renpy.game.ParseErrorException() renpy.game.exception_info = 'While executing init code:' for _prio, node in game.script.initcode: if isinstance(node, renpy.ast.Node): node_start = time.time() renpy.game.context().run(node) node_duration = time.time() - node_start if node_duration > renpy.config.profile_init: renpy.display.log.write(" - Init at %s:%d took %.5f s.", node.filename, node.linenumber, node_duration) else: # An init function. node() renpy.game.exception_info = 'After initialization, but before game start.' # Check if we should simulate android. renpy.android = renpy.android or renpy.config.simulate_android # @UndefinedVariable # Re-set up the logging. renpy.log.post_init() # Run the post init code, if any. for i in renpy.game.post_init: i() renpy.game.script.report_duplicate_labels() # Sort the images. renpy.display.image.image_names.sort() game.persistent._virtual_size = renpy.config.screen_width, renpy.config.screen_height log_clock("Running init code") renpy.pyanalysis.load_cache() log_clock("Loading analysis data") # Analyze the script and compile ATL. renpy.game.script.analyze() renpy.atl.compile_all() log_clock("Analyze and compile ATL") # Index the archive files. We should not have loaded an image # before this point. (As pygame will not have been initialized.) # We need to do this again because the list of known archives # may have changed. renpy.loader.index_archives() log_clock("Index archives") # Check some environment variables. renpy.game.less_memory = "RENPY_LESS_MEMORY" in os.environ renpy.game.less_mouse = "RENPY_LESS_MOUSE" in os.environ renpy.game.less_updates = "RENPY_LESS_UPDATES" in os.environ renpy.dump.dump(False) renpy.game.script.make_backups() log_clock("Dump and make backups.") # Initialize image cache. renpy.display.im.cache.init() log_clock("Cleaning cache") # Make a clean copy of the store. renpy.python.make_clean_stores() log_clock("Making clean stores") gc.collect(2) if gc.garbage: del gc.garbage[:] if renpy.config.manage_gc: gc.set_threshold(*renpy.config.gc_thresholds) gc_debug = int(os.environ.get("RENPY_GC_DEBUG", 0)) if renpy.config.gc_print_unreachable: gc_debug |= gc.DEBUG_SAVEALL gc.set_debug(gc_debug) else: gc.set_threshold(700, 10, 10) log_clock("Initial gc.") # Start debugging file opens. renpy.debug.init_main_thread_open() # (Perhaps) Initialize graphics. if not game.interface: renpy.display.core.Interface() log_clock("Creating interface object") # Start things running. restart = None while True: if restart: renpy.display.screen.before_restart() try: try: run(restart) finally: restart = (renpy.config.end_game_transition, "_invoke_main_menu", "_main_menu") renpy.persistent.update(True) except game.FullRestartException as e: restart = e.reason finally: # Reset if it exists. try: renpy.gl2.live2d.reset() except: pass # Flush any pending interface work. renpy.display.interface.finish_pending() # Give Ren'Py a couple of seconds to finish saving. renpy.loadsave.autosave_not_running.wait(3.0) finally: gc.set_debug(0) renpy.loader.auto_quit() renpy.savelocation.quit() renpy.translation.write_updated_strings() # This is stuff we do on a normal, non-error return. if not renpy.display.error.error_handled: renpy.display.render.check_at_shutdown()
def main(): renpy.game.exception_info = 'Before loading the script.' # Init the config after load. renpy.config.init() # Note the game directory. game.basepath = renpy.config.gamedir renpy.config.searchpath = [renpy.config.gamedir] # Find the common directory. commondir = __main__.path_to_common(renpy.config.renpy_base) # E1101 if os.path.isdir(commondir): renpy.config.searchpath.append(commondir) renpy.config.commondir = commondir else: renpy.config.commondir = None # Load Ren'Py extensions. for dir in renpy.config.searchpath: for fn in os.listdir(dir): if fn.lower().endswith(".rpe"): load_rpe(dir + "/" + fn) # The basename is the final component of the path to the gamedir. for i in os.listdir(renpy.config.gamedir): if not i.endswith(".rpa"): continue i = i[:-4] renpy.config.archives.append(i) # Note the profile option. if renpy.game.options.profile: renpy.config.profile = True # Initialize archives. renpy.loader.index_archives() # Initialize the log. game.log = renpy.python.RollbackLog() # Initialize the store. renpy.store.store = renpy.store # Load the script. renpy.game.exception_info = 'While loading the script.' game.script = renpy.script.load_script() if renpy.parser.report_parse_errors(): raise renpy.game.ParseErrorException() renpy.game.exception_info = 'After loading the script.' # Find the save directory. if renpy.config.savedir is None: renpy.config.savedir = __main__.path_to_saves( renpy.config.gamedir) # E1101 if renpy.game.options.savedir: renpy.config.savedir = renpy.game.options.savedir # Make the save directory. try: os.makedirs(renpy.config.savedir) except: pass # Perhaps delete the persistent data and exit. if renpy.game.options.rmpersistent: try: os.unlink(renpy.config.savedir + "/persistent") except: pass return # Unserialize the persistent data. try: f = file(renpy.config.savedir + "/persistent", "rb") s = f.read().decode("zlib") f.close() game.persistent = loads(s) except: game.persistent = game.Persistent() # Initialize the set of statements seen ever. if not game.persistent._seen_ever: game.persistent._seen_ever = {} game.seen_ever = game.persistent._seen_ever # Initialize the set of images seen ever. if not game.persistent._seen_images: game.persistent._seen_images = {} # Initialize the set of chosen menu choices. if not game.persistent._chosen: game.persistent._chosen = {} if not game.persistent._seen_audio: game.persistent._seen_audio = {} # Clear the list of seen statements in this game. game.seen_session = {} # Initialize the preferences. if not game.persistent._preferences: game.persistent._preferences = game.Preferences() game.preferences = game.persistent._preferences # Initialize persistent variables. renpy.store.persistent = game.persistent renpy.store._preferences = game.preferences # Set up styles. renpy.style.reset() game.style = renpy.style.StyleManager() renpy.store.style = game.style renpy.game.exception_info = 'While executing init code:' # Run init code in its own context. (Don't log.) game.contexts = [renpy.execution.Context(False)] # Run the init code. game.init_phase = True for prio, node in game.script.initcode: game.context().run(node) game.init_phase = False renpy.game.exception_info = 'After initialization, but before game start.' # Save the bytecode in a cache. renpy.game.script.save_bytecode() # Run the post init code, if any. for i in renpy.game.post_init: i() # Rebuild the various style caches. renpy.style.build_styles() # Index the archive files. We should not have loaded an image # before this point. (As pygame will not have been initialized.) # We need to do this again because the list of known archives # may have changed. renpy.loader.index_archives() # Make a clean copy of the store. game.clean_store = renpy.store.__dict__.copy() # Check some environment variables. renpy.game.less_memory = "RENPY_LESS_MEMORY" in os.environ renpy.game.less_mouse = "RENPY_LESS_MOUSE" in os.environ renpy.game.less_updates = "RENPY_LESS_UPDATES" in os.environ if renpy.game.options.compile: return if renpy.game.options.lint: try: renpy.lint.lint() return except: raise # Remove the list of all statements from the script. game.script.all_stmts = None # (Perhaps) Initialize graphics. if not game.interface: game.interface = renpy.display.core.Interface() # Start things running. restart = None renpy.game.exception_info = 'While running game code:' while True: try: try: run(restart) finally: restart = (renpy.config.end_game_transition, "_invoke_main_menu", "_main_menu") save_persistent() except game.QuitException, e: break except game.FullRestartException, e: restart = e.reason
def main(): renpy.game.exception_info = 'Before loading the script.' # Get ready to accept new arguments. renpy.arguments.pre_init() # Init the screen language parser. renpy.sl2.slparser.init() # Init the config after load. renpy.config.init() # Set up variants. choose_variants() renpy.display.touch = "touch" in renpy.config.variants # Note the game directory. game.basepath = renpy.config.gamedir renpy.config.searchpath = [renpy.config.gamedir] # Find the common directory. commondir = __main__.path_to_common( renpy.config.renpy_base) # E1101 @UndefinedVariable if os.path.isdir(commondir): renpy.config.searchpath.append(commondir) renpy.config.commondir = commondir else: renpy.config.commondir = None if renpy.android: renpy.config.searchpath = [] renpy.config.commondir = None # Load Ren'Py extensions. for dir in renpy.config.searchpath: #@ReservedAssignment for fn in os.listdir(dir): if fn.lower().endswith(".rpe"): load_rpe(dir + "/" + fn) # The basename is the final component of the path to the gamedir. for i in sorted(os.listdir(renpy.config.gamedir)): if not i.endswith(".rpa"): continue i = i[:-4] renpy.config.archives.append(i) renpy.config.archives.reverse() # Initialize archives. renpy.loader.index_archives() # Start auto-loading. renpy.loader.auto_init() # Initialize the log. game.log = renpy.python.RollbackLog() # Initialize the store. renpy.store.store = sys.modules['store'] # Set up styles. game.style = renpy.style.StyleManager() # @UndefinedVariable renpy.store.style = game.style # Run init code in its own context. (Don't log.) game.contexts = [renpy.execution.Context(False)] game.contexts[0].init_phase = True # Load the script. renpy.game.exception_info = 'While loading the script.' renpy.game.script = renpy.script.Script() # Set up error handling. renpy.exports.load_module("_errorhandling") renpy.style.build_styles() # @UndefinedVariable renpy.display.screen.prepare_screens() # Load all .rpy files. renpy.game.script.load_script() # sets renpy.game.script. renpy.game.exception_info = 'After loading the script.' # Find the save directory. if renpy.config.savedir is None: renpy.config.savedir = __main__.path_to_saves( renpy.config.gamedir) # E1101 @UndefinedVariable if renpy.game.args.savedir: #@UndefinedVariable renpy.config.savedir = renpy.game.args.savedir #@UndefinedVariable # Init preferences. game.persistent = renpy.persistent.init() game.preferences = game.persistent._preferences # Init save locations. renpy.savelocation.init() # We need to be 100% sure we kill the savelocation thread. try: # Load persistent data from all save locations. renpy.persistent.update() # Clear the list of seen statements in this game. game.seen_session = {} # Initialize persistent variables. renpy.store.persistent = game.persistent renpy.store._preferences = game.preferences if renpy.parser.report_parse_errors(): raise renpy.game.ParseErrorException() renpy.game.exception_info = 'While executing init code:' for _prio, node in game.script.initcode: game.context().run(node) renpy.game.exception_info = 'After initialization, but before game start.' # Save the bytecode in a cache. renpy.game.script.save_bytecode() # Check if we should simulate android. renpy.android = renpy.android or renpy.config.simulate_android #@UndefinedVariable # Run the post init code, if any. for i in renpy.game.post_init: i() # Init translation. renpy.translation.init_translation() # Rebuild the various style caches. renpy.style.build_styles() # @UndefinedVariable # Prepare the screens. renpy.display.screen.prepare_screens() # Index the archive files. We should not have loaded an image # before this point. (As pygame will not have been initialized.) # We need to do this again because the list of known archives # may have changed. renpy.loader.index_archives() # Check some environment variables. renpy.game.less_memory = "RENPY_LESS_MEMORY" in os.environ renpy.game.less_mouse = "RENPY_LESS_MOUSE" in os.environ renpy.game.less_updates = "RENPY_LESS_UPDATES" in os.environ renpy.dump.dump(False) # Handle arguments and commands. if not renpy.arguments.post_init(): return # Remove the list of all statements from the script. game.script.all_stmts = None # Make a clean copy of the store. renpy.python.make_clean_stores() # Initialize image cache. renpy.display.im.cache.init() # (Perhaps) Initialize graphics. if not game.interface: renpy.display.core.Interface() # Start things running. restart = None renpy.game.exception_info = 'While running game code:' renpy.first_utter_start = False while True: if restart: renpy.display.screen.before_restart() try: try: run(restart) finally: restart = (renpy.config.end_game_transition, "_invoke_main_menu", "_main_menu") renpy.persistent.update(True) except game.FullRestartException, e: restart = e.reason finally: # Flush any pending interface work. renpy.display.interface.finish_pending() # Give Ren'Py a couple of seconds to finish saving. renpy.loadsave.autosave_not_running.wait(3.0)
def main(): log_clock("Bootstrap to the start of init.init") renpy.game.exception_info = 'Before loading the script.' # Get ready to accept new arguments. renpy.arguments.pre_init() # Init the screen language parser. renpy.sl2.slparser.init() # Init the config after load. renpy.config.init() # Set up variants. choose_variants() renpy.display.touch = "touch" in renpy.config.variants log_clock("Early init") # Note the game directory. game.basepath = renpy.config.gamedir renpy.config.searchpath = [renpy.config.gamedir] # Find the common directory. commondir = __main__.path_to_common( renpy.config.renpy_base) # E1101 @UndefinedVariable if os.path.isdir(commondir): renpy.config.searchpath.append(commondir) renpy.config.commondir = commondir else: renpy.config.commondir = None if renpy.android: renpy.config.searchpath = [] renpy.config.commondir = None # Load Ren'Py extensions. for dir in renpy.config.searchpath: # @ReservedAssignment for fn in os.listdir(dir): if fn.lower().endswith(".rpe"): load_rpe(dir + "/" + fn) # The basename is the final component of the path to the gamedir. for i in sorted(os.listdir(renpy.config.gamedir)): if not i.endswith(".rpa"): continue i = i[:-4] renpy.config.archives.append(i) renpy.config.archives.reverse() # Initialize archives. renpy.loader.index_archives() # Start auto-loading. renpy.loader.auto_init() log_clock("Loader init") # Initialize the log. game.log = renpy.python.RollbackLog() # Initialize the store. renpy.store.store = sys.modules['store'] # Set up styles. game.style = renpy.style.StyleManager() # @UndefinedVariable renpy.store.style = game.style # Run init code in its own context. (Don't log.) game.contexts = [renpy.execution.Context(False)] game.contexts[0].init_phase = True renpy.execution.not_infinite_loop(60) # Load the script. renpy.game.exception_info = 'While loading the script.' renpy.game.script = renpy.script.Script() if renpy.session.get("compile", False): renpy.game.args.compile = True # Set up error handling. renpy.exports.load_module("_errorhandling") if renpy.exports.loadable("tl/None/common.rpym") or renpy.exports.loadable( "tl/None/common.rpymc"): renpy.exports.load_module("tl/None/common") renpy.config.init_system_styles() renpy.style.build_styles() # @UndefinedVariable log_clock("Loading error handling") # If recompiling everything, remove orphan .rpyc files. # Otherwise, will fail in case orphan .rpyc have same # labels as in other scripts (usually happens on script rename). if (renpy.game.args.command == 'compile' ) and not (renpy.game.args.keep_orphan_rpyc): # @UndefinedVariable for (fn, _dir) in renpy.game.script.script_files: if dir is None: continue if not os.path.isfile(os.path.join(dir, fn + ".rpy")): try: name = os.path.join(dir, fn + ".rpyc") os.rename(name, name + ".bak") except OSError: # This perhaps shouldn't happen since either .rpy or .rpyc should exist pass # Update script files list, so that it doesn't contain removed .rpyc's renpy.loader.cleardirfiles() renpy.game.script.scan_script_files() # Load all .rpy files. renpy.game.script.load_script() # sets renpy.game.script. log_clock("Loading script") if renpy.game.args.command == 'load-test': # @UndefinedVariable start = time.time() for i in range(5): print(i) renpy.game.script = renpy.script.Script() renpy.game.script.load_script() print(time.time() - start) sys.exit(0) renpy.game.exception_info = 'After loading the script.' # Find the save directory. if renpy.config.savedir is None: renpy.config.savedir = __main__.path_to_saves( renpy.config.gamedir) # E1101 @UndefinedVariable if renpy.game.args.savedir: # @UndefinedVariable renpy.config.savedir = renpy.game.args.savedir # @UndefinedVariable # Init preferences. game.persistent = renpy.persistent.init() game.preferences = game.persistent._preferences if game.persistent._virtual_size: renpy.config.screen_width, renpy.config.screen_height = game.persistent._virtual_size # Init save locations. renpy.savelocation.init() # We need to be 100% sure we kill the savelocation thread. try: # Load persistent data from all save locations. renpy.persistent.update() game.preferences = game.persistent._preferences log_clock("Loading persistent") # Clear the list of seen statements in this game. game.seen_session = {} # Initialize persistent variables. renpy.store.persistent = game.persistent renpy.store._preferences = game.preferences renpy.store._test = renpy.test.testast._test if renpy.parser.report_parse_errors(): raise renpy.game.ParseErrorException() renpy.game.exception_info = 'While executing init code:' for _prio, node in game.script.initcode: game.context().run(node) renpy.game.exception_info = 'After initialization, but before game start.' # Check if we should simulate android. renpy.android = renpy.android or renpy.config.simulate_android # @UndefinedVariable # Run the post init code, if any. for i in renpy.game.post_init: i() renpy.game.script.report_duplicate_labels() game.persistent._virtual_size = renpy.config.screen_width, renpy.config.screen_height for i in renpy.game.persistent._seen_translates: # @UndefinedVariable if i in renpy.game.script.translator.default_translates: renpy.game.seen_translates_count += 1 log_clock("Running init code") renpy.pyanalysis.load_cache() log_clock("Loading analysis data") # Analyze the script and compile ATL. renpy.game.script.analyze() renpy.atl.compile_all() log_clock("Analyze and compile ATL") # Index the archive files. We should not have loaded an image # before this point. (As pygame will not have been initialized.) # We need to do this again because the list of known archives # may have changed. renpy.loader.index_archives() log_clock("Index archives") # Check some environment variables. renpy.game.less_memory = "RENPY_LESS_MEMORY" in os.environ renpy.game.less_mouse = "RENPY_LESS_MOUSE" in os.environ renpy.game.less_updates = "RENPY_LESS_UPDATES" in os.environ renpy.dump.dump(False) renpy.game.script.make_backups() log_clock("Dump and make backups.") # Initialize image cache. renpy.display.im.cache.init() log_clock("Cleaning cache") # Make a clean copy of the store. renpy.python.make_clean_stores() log_clock("Making clean stores") # (Perhaps) Initialize graphics. if not game.interface: renpy.display.core.Interface() log_clock("Creating interface object") # Start things running. restart = None while True: if restart: renpy.display.screen.before_restart() try: try: run(restart) finally: restart = (renpy.config.end_game_transition, "_invoke_main_menu", "_main_menu") renpy.persistent.update(True) except game.FullRestartException, e: restart = e.reason finally: # Flush any pending interface work. renpy.display.interface.finish_pending() # Give Ren'Py a couple of seconds to finish saving. renpy.loadsave.autosave_not_running.wait(3.0)
def main(): renpy.game.exception_info = 'Before loading the script.' # Get ready to accept new arguments. renpy.arguments.pre_init() # Init the config after load. renpy.config.init() # Set up variants. choose_variants() # Note the game directory. game.basepath = renpy.config.gamedir renpy.config.searchpath = [renpy.config.gamedir] # Find the common directory. commondir = __main__.path_to_common( renpy.config.renpy_base) # E1101 @UndefinedVariable if os.path.isdir(commondir): renpy.config.searchpath.append(commondir) renpy.config.commondir = commondir else: renpy.config.commondir = None # Load Ren'Py extensions. for dir in renpy.config.searchpath: #@ReservedAssignment for fn in os.listdir(dir): if fn.lower().endswith(".rpe"): load_rpe(dir + "/" + fn) # The basename is the final component of the path to the gamedir. for i in sorted(os.listdir(renpy.config.gamedir)): if not i.endswith(".rpa"): continue i = i[:-4] renpy.config.archives.append(i) renpy.config.archives.reverse() # Initialize archives. renpy.loader.index_archives() # Initialize the log. game.log = renpy.python.RollbackLog() # Initialize the store. renpy.store.store = sys.modules['store'] # Set up styles. renpy.style.reset() game.style = renpy.style.StyleManager() renpy.store.style = game.style # Run init code in its own context. (Don't log.) game.contexts = [renpy.execution.Context(False)] game.contexts[0].init_phase = True # Load the script. renpy.game.exception_info = 'While loading the script.' renpy.game.script = renpy.script.Script() renpy.exports.load_module("_errorhandling") renpy.game.script.load_script() # sets renpy.game.script. renpy.game.exception_info = 'After loading the script.' # Find the save directory. if renpy.config.savedir is None: renpy.config.savedir = __main__.path_to_saves( renpy.config.gamedir) # E1101 @UndefinedVariable if renpy.game.args.savedir: #@UndefinedVariable renpy.config.savedir = renpy.game.args.savedir #@UndefinedVariable # Make the save directory. try: os.makedirs(renpy.config.savedir) except: pass # Unserialize the persistent data. try: f = file(renpy.config.savedir + "/persistent", "rb") s = f.read().decode("zlib") f.close() game.persistent = loads(s) except: game.persistent = game.Persistent() # Initialize the set of statements seen ever. if not game.persistent._seen_ever: game.persistent._seen_ever = {} game.seen_ever = game.persistent._seen_ever # Initialize the set of images seen ever. if not game.persistent._seen_images: game.persistent._seen_images = {} # Initialize the set of chosen menu choices. if not game.persistent._chosen: game.persistent._chosen = {} if not game.persistent._seen_audio: game.persistent._seen_audio = {} # Clear the list of seen statements in this game. game.seen_session = {} # Initialize the preferences. if not game.persistent._preferences: game.persistent._preferences = game.Preferences() game.preferences = game.persistent._preferences # Initialize persistent variables. renpy.store.persistent = game.persistent renpy.store._preferences = game.preferences if renpy.parser.report_parse_errors(): raise renpy.game.ParseErrorException() renpy.game.exception_info = 'While executing init code:' for _prio, node in game.script.initcode: game.context().run(node) renpy.game.exception_info = 'After initialization, but before game start.' # Save the bytecode in a cache. renpy.game.script.save_bytecode() # Check if we should simulate android. renpy.android = renpy.android or renpy.config.simulate_android #@UndefinedVariable # Run the post init code, if any. for i in renpy.game.post_init: i() # Rebuild the various style caches. renpy.style.build_styles() # Index the archive files. We should not have loaded an image # before this point. (As pygame will not have been initialized.) # We need to do this again because the list of known archives # may have changed. renpy.loader.index_archives() # Check some environment variables. renpy.game.less_memory = "RENPY_LESS_MEMORY" in os.environ renpy.game.less_mouse = "RENPY_LESS_MOUSE" in os.environ renpy.game.less_updates = "RENPY_LESS_UPDATES" in os.environ renpy.dump.dump(False) # Handle arguments and commands. if not renpy.arguments.post_init(): return # Remove the list of all statements from the script. game.script.all_stmts = None # Make a clean copy of the store. renpy.python.make_clean_stores() # Initialize image cache. renpy.display.im.cache.init() # (Perhaps) Initialize graphics. if not game.interface: renpy.display.core.Interface() # Start things running. restart = None renpy.game.exception_info = 'While running game code:' renpy.first_utter_start = False while True: try: try: run(restart) finally: restart = (renpy.config.end_game_transition, "_invoke_main_menu", "_main_menu") save_persistent() except game.QuitException, e: if e.relaunch: if renpy.windows and sys.argv[0].endswith(".exe"): subprocess.Popen(sys.argv) else: subprocess.Popen([sys.executable, "-OO"] + sys.argv) break except game.FullRestartException, e: restart = e.reason