public static void Error(Int32 code, String fmt, params Object[] parameters) { if (recursive) { CoreSys.Error("recursive error after: " + msg); } recursive = true; msg = Sprintf(fmt, parameters); if (code == Defines.ERR_DISCONNECT) { CL.Drop(); recursive = false; throw new longjmpException(); } else if (code == Defines.ERR_DROP) { Com.Printf("********************\\nERROR: " + msg + "\\n********************\\n"); SV_MAIN.SV_Shutdown("Server crashed: " + msg + "\\n", false); CL.Drop(); recursive = false; throw new longjmpException(); } else { SV_MAIN.SV_Shutdown("Server fatal crashed: %s" + msg + "\\n", false); CL.Shutdown(); } CoreSys.Error(msg); }
public static void Quit( ) { SV_MAIN.SV_Shutdown("Server quit\\n", false); CL.Shutdown(); if (Globals.logfile != null) { try { Globals.logfile.Close(); } catch (IOException e) { } Globals.logfile = null; } CoreSys.Quit(); }
public static void Error(int code, string fmt, params object[] vargs) { // va_list argptr; // static char msg[MAXPRINTMSG]; if (Com.recursive) { Sys.Error("recursive error after: " + Com.msg); } Com.recursive = true; Com.msg = Com.sprintf(fmt, vargs); if (code == Defines.ERR_DISCONNECT) { Cl.Drop(); Com.recursive = false; return; } if (code == Defines.ERR_DROP) { Com.Printf("********************\nERROR: " + Com.msg + "\n********************\n"); SV_MAIN.SV_Shutdown("Server crashed: " + Com.msg + "\n", false); Cl.Drop(); Com.recursive = false; return; } SV_MAIN.SV_Shutdown("Server fatal crashed: %s" + Com.msg + "\n", false); Cl.Shutdown(); Sys.Error(Com.msg); }
public static void Init(String[] args) { try { Com.InitArgv(args); Cbuf.Init(); Cmd.Init(); Cvar.Init(); Key.Init(); Cbuf.AddEarlyCommands(false); Cbuf.Execute(); if (Globals.dedicated.value != 1F) { Program.Q2Dialog.SetStatus("initializing filesystem..."); } FS.InitFilesystem(); if (Globals.dedicated.value != 1F) { Program.Q2Dialog.SetStatus("loading config..."); } Reconfigure(false); FS.SetCDDir(); FS.MarkBaseSearchPaths(); if (Globals.dedicated.value != 1F) { Program.Q2Dialog.TestQ2Data(); } Reconfigure(true); Cmd.AddCommand("error", Com.Error_f); Globals.host_speeds = Cvar.Get("host_speeds", "0", 0); Globals.log_stats = Cvar.Get("log_stats", "0", 0); Globals.developer = Cvar.Get("developer", "0", CVAR_ARCHIVE); Globals.timescale = Cvar.Get("timescale", "0", 0); Globals.fixedtime = Cvar.Get("fixedtime", "0", 0); Globals.logfile_active = Cvar.Get("logfile", "0", 0); Globals.showtrace = Cvar.Get("showtrace", "0", 0); Globals.dedicated = Cvar.Get("dedicated", "0", CVAR_NOSET); var s = Com.Sprintf("%4.2f %s %s %s", Globals.VERSION, CPUSTRING, Globals.__DATE__, BUILDSTRING); Cvar.Get("version", s, CVAR_SERVERINFO | CVAR_NOSET); if (Globals.dedicated.value != 1F) { Program.Q2Dialog.SetStatus("initializing network subsystem..."); } NET.Init(); Netchan.Netchan_Init(); if (Globals.dedicated.value != 1F) { Program.Q2Dialog.SetStatus("initializing server subsystem..."); } SV_MAIN.SV_Init(); if (Globals.dedicated.value != 1F) { Program.Q2Dialog.SetStatus("initializing client subsystem..."); } CL.Init(); if (!Cbuf.AddLateCommands()) { if (Globals.dedicated.value == 0) { Cbuf.AddText("d1\\n"); } else { Cbuf.AddText("dedicated_start\\n"); } Cbuf.Execute(); } else { SCR.EndLoadingPlaque(); } Com.Printf("====== Quake2 Initialized ======\\n\\n"); CL.WriteConfiguration(); if (Globals.dedicated.value != 1F) { Program.Q2Dialog.Dispose(); } } catch (longjmpException e) { CoreSys.Error("Error during initialization"); } }
public static void Frame(Int32 msec) { try { if (Globals.log_stats.modified) { Globals.log_stats.modified = false; if (Globals.log_stats.value != 0F) { if (Globals.log_stats_file != null) { try { Globals.log_stats_file.Close(); } catch (IOException e) { } Globals.log_stats_file = null; } try { Globals.log_stats_file = new QuakeFile("stats.log", FileAccess.ReadWrite); } catch (IOException e) { Globals.log_stats_file = null; } if (Globals.log_stats_file != null) { try { var bytes = Encoding.ASCII.GetBytes("entities,dlights,parts,frame time\\n"); Globals.log_stats_file.Write(bytes); } catch (IOException e) { } } } else { if (Globals.log_stats_file != null) { try { Globals.log_stats_file.Close(); } catch (IOException e) { } Globals.log_stats_file = null; } } } if (Globals.fixedtime.value != 0F) { msec = ( Int32 )Globals.fixedtime.value; } else if (Globals.timescale.value != 0F) { msec = ( Int32 )(msec * Globals.timescale.value); if (msec < 1) { msec = 1; } } if (Globals.showtrace.value != 0F) { Com.Printf("%4i traces %4i points\\n", Globals.c_traces, Globals.c_pointcontents); Globals.c_traces = 0; Globals.c_brush_traces = 0; Globals.c_pointcontents = 0; } Cbuf.Execute(); var time_before = 0; var time_between = 0; var time_after = 0; if (Globals.host_speeds.value != 0F) { time_before = Timer.Milliseconds(); } Com.debugContext = "SV:"; SV_MAIN.SV_Frame(msec); if (Globals.host_speeds.value != 0F) { time_between = Timer.Milliseconds(); } Com.debugContext = "CL:"; CL.Frame(msec); if (Globals.host_speeds.value != 0F) { time_after = Timer.Milliseconds(); var all = time_after - time_before; var sv = time_between - time_before; var cl = time_after - time_between; var gm = Globals.time_after_game - Globals.time_before_game; var rf = Globals.time_after_ref - Globals.time_before_ref; sv -= gm; cl -= rf; Com.Printf("all:%3i sv:%3i gm:%3i cl:%3i rf:%3i\\n", all, sv, gm, cl, rf); } } catch (longjmpException e) { Com.DPrintf("longjmp exception:" + e); } }
/** * This function initializes the different subsystems of * the game engine. The setjmp/longjmp mechanism of the original * was replaced with exceptions. * @param args the original unmodified command line arguments */ public static void Init(string[] args) { try { // prepare enough of the subsystems to handle // cvar and command buffer management Com.InitArgv(args); Cbuf.Init(); Cmd.Init(); Cvar.Init(); Key.Init(); // we need to add the early commands twice, because // a basedir or cddir needs to be set before execing // config files, but we want other parms to override // the settings of the config files Cbuf.AddEarlyCommands(false); Cbuf.Execute(); if (Globals.dedicated.value != 1.0f) { Console.WriteLine("initializing filesystem..."); } FS.InitFilesystem(); if (Globals.dedicated.value != 1.0f) { Console.WriteLine("loading config..."); } Qcommon.reconfigure(false); FS.markBaseSearchPaths(); // mark the default search paths Qcommon.reconfigure(true); // reload default.cfg and config.cfg // // init commands and vars // Cmd.AddCommand("error", Com.Error_f); Globals.host_speeds = Cvar.Get("host_speeds", "0", 0); Globals.log_stats = Cvar.Get("log_stats", "0", 0); Globals.developer = Cvar.Get("developer", "0", Defines.CVAR_ARCHIVE); Globals.timescale = Cvar.Get("timescale", "0", 0); Globals.fixedtime = Cvar.Get("fixedtime", "0", 0); Globals.logfile_active = Cvar.Get("logfile", "0", 0); Globals.showtrace = Cvar.Get("showtrace", "0", 0); Globals.dedicated = Cvar.Get("dedicated", "0", Defines.CVAR_NOSET); var s = Com.sprintf("%4.2f %s %s %s", Globals.VERSION, Qcommon.CPUSTRING, Globals.__DATE__, Qcommon.BUILDSTRING); Cvar.Get("version", s, Defines.CVAR_SERVERINFO | Defines.CVAR_NOSET); if (Globals.dedicated.value != 1.0f) { Console.WriteLine("initializing network subsystem..."); } NET.Init(); //ok Netchan.Netchan_Init(); //ok if (Globals.dedicated.value != 1.0f) { Console.WriteLine("initializing server subsystem..."); } SV_MAIN.SV_Init(); //ok if (Globals.dedicated.value != 1.0f) { Console.WriteLine("initializing client subsystem..."); } Cl.Init(); // add + commands from command line if (!Cbuf.AddLateCommands()) { // if the user didn't give any commands, run default action if (Globals.dedicated.value == 0) { Cbuf.AddText("d1\n"); } else { Cbuf.AddText("dedicated_start\n"); } Cbuf.Execute(); } else { // the user asked for something explicit // so drop the loading plaque SCR.EndLoadingPlaque(); } Com.Printf("====== Quake2 Initialized ======\n\n"); // save config when configuration is completed Cl.WriteConfiguration(); } catch (Exception) { Sys.Error("Error during initialization"); } }
/** * Trigger generation of a frame for the given time. The setjmp/longjmp * mechanism of the original was replaced with exceptions. * @param msec the current game time */ public static void FrameUpdate(int msec) { try { if (Globals.log_stats.modified) { Globals.log_stats.modified = false; if (Globals.log_stats.value != 0.0f) { if (Globals.log_stats_file != null) { try { Globals.log_stats_file.Close(); } catch (Exception) { } Globals.log_stats_file = null; } try { Globals.log_stats_file = File.CreateText("stats.log"); } catch (Exception) { Globals.log_stats_file = null; } if (Globals.log_stats_file != null) { try { Globals.log_stats_file.Write("entities,dlights,parts,frame time\n"); } catch (Exception) { } } } else { if (Globals.log_stats_file != null) { try { Globals.log_stats_file.Close(); } catch (Exception) { } Globals.log_stats_file = null; } } } if (Globals.fixedtime.value != 0.0f) { msec = (int)Globals.fixedtime.value; } else if (Globals.timescale.value != 0.0f) { msec = (int)(msec * Globals.timescale.value); if (msec < 1) { msec = 1; } } if (Globals.showtrace.value != 0.0f) { Com.Printf("%4i traces %4i points\n", Globals.c_traces, Globals.c_pointcontents); Globals.c_traces = 0; Globals.c_brush_traces = 0; Globals.c_pointcontents = 0; } Cbuf.Execute(); var time_before = 0; var time_after = 0; if (Globals.host_speeds.value != 0.0f) { time_before = Timer.Milliseconds(); } Com.debugContext = "SV:"; SV_MAIN.SV_Frame(msec); if (Globals.host_speeds.value != 0.0f) { time_after = Timer.Milliseconds(); var sv = time_after - time_before; var gm = Globals.time_after_game - Globals.time_before_game; var rf = Globals.time_after_ref - Globals.time_before_ref; sv -= gm; Com.Printf("update:%3i gm:%3i rf:%3i\n", sv, gm, rf); } } catch (Exception e) { Com.DPrintf("exception:" + e); } }