# The script of the game goes in this file. # Declare images #image bg room = Frame("gfx/bg/port.png", 0, 0) image banner_ = "gfx/actionarea.png" # Inform you are now ingame label start: # Begin the initial displays # TODO: a fairy :( scene black show spinner at truecenter # Initial configuration call prestart # Run updater $ renpy.invoke_in_thread(GAME_UPDATER) # Estabilish the connection to server python: try: renpy.invoke_in_thread(supervisor, persistent.ssl_enabled) except: # Enter in infinite loop, this will never resolve stdout("Unrecoverable error, the program is dead.") tr_load=False # Block the main thread until the socket connection is done while not tr_load: sdelay() $ stdout("Connection established!") # Open game scene bg town with Dissolve(0.3) pause 0.1 $ password=persistent.password $ email="" # Check if we need to register if persistent.password is None: call screen welcome return # Otherwise just login jump login ############################################################################ # Login procedures label login: $message=login() # TODO=load message $ stdout(message) python: try: message=int(message) dlcode=copy.copy(message) except: print("AN ERROR HAPPENED AT LOGIN TIME") stdout("Invalid: "+str(message)) message=-1 if (message < 5000): if (message == ERR_LOGIN_DEFAULT): e "Error Code: [message]{fast}\n\nCould not estabilish connection to server." jump login else: e "Error Code: [message]{fast}\n\nCannot login to server. Terminating." jump quit # Successful login? Update client data and begin routines $ stdout("Login successful.") # Load game to memory python: tr_load=False renpy.invoke_in_thread(GAME_LOADER) #while not tr_load: # sdelay() $ persistent.password=password $ dlcode-=5000 #$ ping_routine() python: try: renpy.invoke_in_thread(irc_loop) except: stdout("IRC disabled") pass # We're now logged in, load misc data (TODO: What if ERR_ is returned?) $ who = -1 $ inv=get_inventory() python: for a in inv: Player["inv"].append(a) # TODO: Run AP Timer if needed # Remove some temporary variables $ del password $ stdout("Waiting for game data to be loaded to memory...") # Wait until everything is loaded python: while not tr_memcheck: sdelay() if (email): $ del email jump prologue # Begin loop play music MUSIC_TOWN fadein 0.5 $ stdout("Game started successfully!") # Show news (if they exist and you haven't logged in past day) if dlcode: if (len(allnews) >= 1): call screen show_news else: $stdout("This server doesn't have a MOTD") # TODO: Daily login rewards screen jump loop label loop: # Delete predictions, if possible $ renpy.free_memory() # Maybe we're in combat? If we are, you cannot go to town if (Player["status"] >= ST_QUEST): window hide None $ renpy.call_screen("msgbox", "{b}Battle{/b}\n\nYou are in battle. You'll be brought back to combat.") #window show None $ Battle=reload_battle() python: try: TMP_BACKG=dl_search(allquests[Battle["world"]], "quest_id", Battle["quest_id"])["bg"] except: traceback.print_exec() stdout("Invalid background for reloaded battle") pass # TODO: Handle errors if (Battle in [ERR_JSONDECODER]): e "Unknown Error: [ERR_JSONDECODER]" jump loop play music MUSIC_BATTLE.id() fadein 0.5 jump combat $ hud_show() menu: "World Map": jump quest_select "Manage Party": jump party_lobby_enter "Show inventory": jump inventory "Visit tavern": jump tavern "PUB" if persistent.irc_enable: # TODO FIXME PUB if persistent.nickname is not None: python: while True: _return=renpy.call_screen("pub") if _return != "": res=irc_send(persistent.nickname, _return) else: break else: "ERROR" "You are not authorized to complete this operation.\n\nERR_NICK" # ??? I thought you choose one at prologue??? "Logout" if renpy.variant("pc") or renpy.variant("web"): #$message=send_packet("logout") jump quit #"Server replies:" "[message]" #return if (message == OFFLINEMSG): "Server replies:" "[message]\n\nYou are offline?" return if (message not in [ERR_OK, OKMSG, True]): "Server replies:" "[message]" jump loop # This ends the game. return label restore: # Restore town view scene bg town $ renpy.hide_screen("battle") play music MUSIC_TOWN fadein 0.5 $ hud_show() jump loop label prologue: $ hud_story() call SQ00001_prologue # Automatically begin quest $ Battle=loadquest(1) $ update_ap() play music MUSIC_BATTLE.id() fadein 0.5 $ renpy.free_memory() window hide jump combat label quit: $ stdout("Received quit signal!") $ CLOSING = True python: # If needed, logout try: token=Player["token"] renpy.invoke_in_thread(send_packet_now, "logout") sdelay(0.5) del Player except: pass # FIXME # If needed, close the socket try: ws.close(reason="Quit") except: pass # Delete variables try: del allunitsbase del allunits del header del allnews del allstory del allworld del alltaverns except: pass # Terminate IRC connection try: irc_kill() except NameError: pass # Data cleaned up $ print("Sockets closed and data flushed!") return