################################################################################# # This file is part of Mana Launcher. # Copyright (C) 2021 Jesusalva # # Distributed under the MIT license. ################################################################################# screen loading(): zorder 100 fixed: frame: xfill True yfill True background Frame("images/default.png", 0, 0) bar: value progress range 100 xalign 0.5 yalign 0.45 xmaximum 0.75 label "[statusmsg]": xalign 0.5 yalign 0.55 screen serverdata(server): zorder 100 fixed: frame: xfill True yfill True background Frame("images/default.png", 0, 0) label "{b}%s{/b}" % persistent.serverlist[server]["Name"]: xalign 0.5 yalign 0.2 # FIXME if config.developer: fixed: xalign 0.5 yalign 0.5 viewport: child_size (512, 288) # FIXME draggable True mousewheel True scrollbars "vertical" pagekeys True vbox: textbutton _("Open wiki") action Function(load_wiki, server) label "{color=#fff}[statusmsg]{/color}" else: label "{color=#fff}[statusmsg]{/color}": xalign 0.5 yalign 0.5 hbox: xalign 0.5 yalign 0.8 text _("{a=%s}Website{/a}" % persistent.serverlist[server]["Link"]) null width 20 text "|" null width 20 text _("{a=%s}Support{/a}" % persistent.serverlist[server]["Help"]) null width 20 text _("{a=%s}News{/a}" % persistent.serverlist[server]["News"]) null width 20 text _("{a=%s}Terms of Use{/a}" % persistent.serverlist[server]["Policy"]) # The game starts here. label start: ## Check for steam moduli python: if persistent.steam: stdout("Steam Module verification...") try: steam.init() except: import _renpysteam as steam ## Begin formally $ statusmsg=_("Validating SSL Certificates...") scene black show screen loading call before_main_menu $ stdout("Before menu OK") # Build the Vault PEM, blocking and fatal $ build_vault() $ stdout("Vault PEM OK") # Run updater $ renpy.invoke_in_thread(CONFIGURE_LAUNCHER) $ stdout("Thread start OK") # Estabilish the connection to server python: # Block the main thread until the socket connection is done while progress < 100: if responsive: sdelay() else: break # Maybe we are waiting some prompt if SCR_PROMPT is not None: SCR_RESULT = renpy.call_screen("confirm", SCR_PROMPT, Return(True), Return(False)) SCR_PROMPT = None $ stdout("Thread finish OK") # Kill the program if not responsive: jump die # We're running, keep online lists up-to-date in background $ running = True $ renpy.invoke_in_thread(ONLINE_LISTING) # Do we have a Vault ID? if not vaultId: call register # If we still don't have a Vault ID - something went wrong D: if not vaultId: $ status_update(_("{color=#F00}Failure! Vault ID could not be set.{/color}")) jump die $ stdout("Connection established! User ID %d" % vaultId) # Open game hide screen loading scene black if persistent.vaultId is None or persistent.vaultId != vaultId: $ persistent.vaultId = vaultId call intro(newuser=True) scene black with None show TMW2 at truecenter with Dissolve(0.5) pause 1.0 hide TMW2 with dissolve #centered "Error" #if config.developer: # "User ID: [vaultId]" ## Automatic world selection from commandline if (AUTOWORLD): $ _return = AUTOWORLD jump load_world label start_loop: $ renpy.block_rollback() call screen mirrorlake ## Quit request if _return is None or _return == "QUIT": $ stdout("Good bye!") $ renpy.quit() return ## Asked for The Void if _return < 0: $ stdout("V0id") call thevoid jump start_loop label load_world: ## Asked for any subworld scene black # FIXME: Improve this waiting screen # Possibly retrieve messages from the thread $ statusmsg=_("Now loading...") show screen serverdata(_return) with None pause 0.01 python: renpy.invoke_in_thread(launch_game, _return) progress = 0 # Block the main thread until the socket connection is done while progress < 100: # Do we get a cutscene? if SCR_CUTIN: try: renpy.call_in_new_context(SCR_CUTIN) except: traceback.print_exc() pass SCR_CUTIN="" if responsive: sdelay() else: break # Maybe we are waiting some prompt if SCR_PROMPT is not None: SCR_RESULT = renpy.call_screen("confirm", SCR_PROMPT, Return(True), Return(False)) SCR_PROMPT = None hide screen serverdata # Kill the program instead of looping back if not responsive: scene black centered "{color=#FFF}{b}An error happened.{/b}\n\nPlease login again. If this issue persists, relaunch the app or {a=https://discord.gg/BQNTe68}contact us{/a}{/color}" $ stdout("Program died - unsucessful game launch") return ## Requested a Mirror Lake if MLP_DEST is not None: $ stdout("MLP Destination is set") python: try: desti=dl_search_idx(persistent.serverlist, "UUID", MLP_DEST) desti=int(desti) except: traceback.print_exc() desti=-1 MLP_DEST=None ## We may need to do a cutscene, first if not persistent.firstlake: call ch1lake $ persistent.firstlake = True elif mySoul is not None: ## Level-based cutscenes, visit the Void first to see (missable) if mySoul["level"] >= 1 and not persistent.secondlake: call ch2lake $ persistent.secondlake = True ## Internal Sanitization $ stdout("WID Target: %d" % (desti)) if desti >= 0: $ _return = desti jump load_world # Automatically loop back jump start_loop