diff --git a/engine/client/cl_input.c b/engine/client/cl_input.c index 064c27163..27be6ff60 100644 --- a/engine/client/cl_input.c +++ b/engine/client/cl_input.c @@ -610,7 +610,6 @@ void CL_DrawPrydonCursor(void) void ML_UnProject(vec3_t in, vec3_t out, vec3_t viewangles, vec3_t vieworg, float wdivh, float fovy); void CL_UpdatePrydonCursor(usercmd_t *from, float cursor_screen[2], vec3_t cursor_start, vec3_t cursor_impact, int *entnum) { - float modelview[16]; vec3_t cursor_end; vec3_t temp; @@ -1053,7 +1052,6 @@ void CL_SendCmd (float frametime) extern cvar_t cl_maxfps; - vec3_t cursor_start, cursor_impact; int cursor_entitynumber=0;//I hate warnings as errors if (cls.demoplayback != DPB_NONE) diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index 3259cb097..4a825d336 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -117,6 +117,7 @@ cvar_t cl_item_bobbing = {"cl_model_bobbing", "0"}; cvar_t requiredownloads = {"requiredownloads","1", NULL, CVAR_ARCHIVE}; cvar_t cl_standardchat = {"cl_standardchat", "0"}; +cvar_t cl_standardmsg = {"cl_standardmsg", "0"}; cvar_t cl_parsewhitetext = {"cl_parsewhitetext", "0"}; cvar_t host_mapname = {"host_mapname", ""}; @@ -1794,7 +1795,7 @@ void CL_ConnectionlessPacket (void) Con_TPrintf (TLC_A2C_PRINT); s = MSG_ReadString (); - Con_Print (s); + Con_Printf ("%s", s); return; } else if (!strcmp(s, "client_connect")) @@ -1936,7 +1937,7 @@ client_connect: //fixme: make function if (!strncmp(net_message.data+4, "print\n", 6)) { Con_TPrintf (TLC_A2C_PRINT); - Con_Print (net_message.data+10); + Con_Printf ("%s", net_message.data+10); return; } } @@ -1945,7 +1946,7 @@ client_connect: //fixme: make function Con_TPrintf (TLC_A2C_PRINT); s = MSG_ReadString (); - Con_Print (s); + Con_Printf ("%s", s); return; } if (c == 'r')//dp's reject @@ -2416,6 +2417,7 @@ void CL_Init (void) Cvar_Register (&requiredownloads, cl_controlgroup); Cvar_Register (&cl_standardchat, cl_controlgroup); + Cvar_Register (&cl_standardmsg, cl_controlgroup); Cvar_Register (&cl_parsewhitetext, cl_controlgroup); Cvar_Register (&cl_nopext, cl_controlgroup); Cvar_Register (&cl_splitscreen, cl_controlgroup); diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index d5b3e158e..7b76b3c86 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -1051,7 +1051,7 @@ void CL_ParseDownload (void) if (!*cls.downloadname) //huh... that's not right... { - Con_Print("^1Warning: Server sending unknown file.\n"); + Con_Printf("^1Warning: Server sending unknown file.\n"); strcpy(cls.downloadname, "unknown.txt"); strcpy(cls.downloadtempname, "unknown.tmp"); } @@ -3004,7 +3004,6 @@ void CLQ2_ParseInventory (void) } #endif -int build_number( void ); //return if we want to print the message. char *CL_ParseChat(char *text, player_info_t **player) { @@ -3108,11 +3107,80 @@ void CL_ParsePrint(char *msg, int level) } } +// CL_PlayerColor: returns color and mask for player_info_t +int CL_PlayerColor(player_info_t *plr, int *name_ormask) +{ + char *t; + int c; + + *name_ormask = 0; + + if (cl.teamfortress) //override based on team + { + // TODO: needs some work + switch (plr->bottomcolor) + { //translate q1 skin colours to console colours + case 10: + case 1: + *name_ormask = CON_STANDARDMASK; + case 4: //red + c = 1; + break; + case 11: + *name_ormask = CON_STANDARDMASK; + case 3: // green + c = 2; + break; + case 5: + *name_ormask = CON_STANDARDMASK; + case 12: + c = 3; + break; + case 6: + case 7: + *name_ormask = CON_STANDARDMASK; + case 8: + case 9: + c = 5; + break; + case 2: // light blue + *name_ormask = CON_STANDARDMASK; + case 13: //blue + case 14: //blue + c = 6; + break; + default: + *name_ormask = CON_STANDARDMASK; + case 0: // white + c = 7; + break; + } + } + else + { + // override chat color with tc infokey + // 0-6 is standard colors (red to white) + // 7-13 is using secondard charactermask + // 14 and afterwards repeats + t = Info_ValueForKey(plr->userinfo, "tc"); + if (*t) + c = atoi(t); + else + c = plr->userid - 1; + + if ((c / 7) & 1) + *name_ormask = CON_STANDARDMASK; + + c = 1 + (c % 7); + } + + return c; +} + // CL_ParseChat: takes chat strings and performs name coloring and cl_parsewhitetext parsing // NOTE: text in rawmsg/msg is assumed destroyable and should not be used afterwards void CL_PrintChat(player_info_t *plr, char *rawmsg, char *msg, int plrflags) { - char *t; char *name = NULL; int c; int name_ormask = 0; @@ -3154,66 +3222,7 @@ void CL_PrintChat(player_info_t *plr, char *rawmsg, char *msg, int plrflags) } } else if (plr) - { - if (cl.teamfortress) //override based on team - { - // TODO: needs some work - switch (plr->bottomcolor) - { //translate q1 skin colours to console colours - case 10: - case 1: - name_ormask = CON_STANDARDMASK; - case 4: //red - c = 1; - break; - case 11: - name_ormask = CON_STANDARDMASK; - case 3: // green - c = 2; - break; - case 5: - name_ormask = CON_STANDARDMASK; - case 12: - c = 3; - break; - case 6: - case 7: - name_ormask = CON_STANDARDMASK; - case 8: - case 9: - c = 5; - break; - case 2: // light blue - name_ormask = CON_STANDARDMASK; - case 13: //blue - case 14: //blue - c = 6; - break; - default: - name_ormask = CON_STANDARDMASK; - case 0: // white - c = 7; - break; - } - } - else - { - // override chat color with tc infokey - // 0-6 is standard colors (red to white) - // 7-13 is using secondard charactermask - // 14 and afterwards repeats - t = Info_ValueForKey(plr->userinfo, "tc"); - if (*t) - c = atoi(t); - else - c = plr->userid - 1; - - if ((c / 7) & 1) - name_ormask = CON_STANDARDMASK; - - c = 1 + (c % 7); - } - } + c = CL_PlayerColor(plr, &name_ormask); else { // defaults for fake clients @@ -3268,7 +3277,7 @@ void CL_PrintChat(player_info_t *plr, char *rawmsg, char *msg, int plrflags) con_ormask = CON_STANDARDMASK; if (cl_parsewhitetext.value && (plrflags & TPM_TEAM)) { - char *u; + char *t, *u; while (t = strchr(msg, '{')) { @@ -3297,6 +3306,56 @@ void CL_PrintChat(player_info_t *plr, char *rawmsg, char *msg, int plrflags) } +// CL_PrintStandardMessage: takes non-chat net messages and performs name coloring +// NOTE: msg is considered destroyable +void CL_PrintStandardMessage(char *msg) +{ + int i; + player_info_t *p; + extern cvar_t cl_standardmsg; + + // search for player names in message + for (i = 0, p = cl.players; i < MAX_CLIENTS; p++, i++) + { + char *v; + char *name; + int len; + int ormask; + char c; + + if (!p->name[0]) + continue; + name = Info_ValueForKey (p->userinfo, "name"); + len = strlen(name); + v = strstr(msg, name); + if (v) // name found + { + *v = 0; // cut off message + con_ormask = 0; + // print msg chunk + Con_Printf("%s", msg); + msg = v + len; // update search point + + // get name color + if (p->spectator || cl_standardmsg.value) + { + ormask = 0; + c = '7'; + } + else + c = '0' + CL_PlayerColor(p, &ormask); + + // print name + con_ormask = ormask; + Con_Printf("^%c%s^7", c, name); + } + } + + // print final chunk + con_ormask = 0; + Con_Printf("%s", msg); +} + char stufftext[4096]; void CL_ParseStuffCmd(char *msg, int destsplit) //this protects stuffcmds from network segregation. { @@ -3474,7 +3533,7 @@ void CL_ParseServerMessage (void) else { CL_ParsePrint(s, i); - Con_TPrintf (TL_ST, Translate(s)); + CL_PrintStandardMessage(s); } break; @@ -3919,7 +3978,6 @@ void CLQ2_ParseServerMessage (void) char *msg; player_info_t *plr = NULL; - S_LocalSound ("misc/talk.wav"); if (msg = CL_ParseChat(s, &plr)) { CL_ParsePrint(s, i); @@ -3929,7 +3987,7 @@ void CLQ2_ParseServerMessage (void) else { CL_ParsePrint(s, i); - Con_TPrintf (TL_ST, Translate(s)); + CL_PrintStandardMessage(s); } con_ormask = 0; break; @@ -4048,7 +4106,6 @@ void CLNQ_ParseServerMessage (void) char *msg; player_info_t *plr = NULL; - if (msg = CL_ParseChat(s+1, &plr)) { CL_ParsePrint(s+1, PRINT_CHAT); @@ -4058,7 +4115,7 @@ void CLNQ_ParseServerMessage (void) else { CL_ParsePrint(s, PRINT_HIGH); - Con_TPrintf (TL_ST, Translate(s)); + CL_PrintStandardMessage(s); } con_ormask = 0; break; diff --git a/engine/client/cl_ui.c b/engine/client/cl_ui.c index a27870032..3c543ad59 100644 --- a/engine/client/cl_ui.c +++ b/engine/client/cl_ui.c @@ -462,7 +462,7 @@ int VMQ3_GetFileList(char *path, char *ext, char *output, int buffersize) vms.found=0; if (*(char *)path == '$') { - extern char com_basedir[]; + extern char *com_basedir; vms.skip=0; Sys_EnumerateFiles(com_basedir, "*", VMEnumMods, &vms); } diff --git a/engine/client/console.c b/engine/client/console.c index 9acbe939a..12369fb69 100644 --- a/engine/client/console.c +++ b/engine/client/console.c @@ -70,6 +70,16 @@ cvar_t con_centernotify = {"con_centernotify", "0"}; cvar_t con_displaypossabilities = {"con_displaypossabilities", "1"}; cvar_t cl_chatmode = {"cl_chatmode", "2"}; +#define CONLOGGROUP "Console logging" +cvar_t log_name = {"log_name", "", NULL, CVAR_NOTFROMSERVER}; +cvar_t log_dir = {"log_dir", "", NULL, CVAR_NOTFROMSERVER}; +cvar_t log_readable = {"log_readable", "0", NULL, CVAR_NOTFROMSERVER}; +cvar_t log_enable = {"log_enable", "0", NULL, CVAR_NOTFROMSERVER}; +cvar_t log_developer = {"log_developer", "0", NULL, CVAR_NOTFROMSERVER}; +cvar_t log_rotate_files = {"log_rotate_files", "0", NULL, CVAR_NOTFROMSERVER}; +cvar_t log_rotate_size = {"log_rotate_size", "131072", NULL, CVAR_NOTFROMSERVER}; +cvar_t log_dosformat = {"log_dosformat", "0", NULL, CVAR_NOTFROMSERVER}; + #define NUM_CON_TIMES 24 float con_times[NUM_CON_TIMES]; // realtime time the line was generated // for transparent notify lines @@ -77,8 +87,6 @@ float con_times[NUM_CON_TIMES]; // realtime time the line was generated //int con_vislines; int con_notifylines; // scan lines to clear for notify lines -qboolean con_debuglog; - #define MAXCMDLINE 256 extern unsigned char key_lines[32][MAXCMDLINE]; extern int edit_line; @@ -87,6 +95,44 @@ extern int key_linepos; qboolean con_initialized; +// table of readable characters, same as ezquake +char readable[256] = +{ + '.', '_', '_', '_', '_', '.', '_', '_', + '_', '_', '\n', '_', '\n', '>', '.', '.', + '[', ']', '0', '1', '2', '3', '4', '5', + '6', '7', '8', '9', '.', '_', '_', '_', + ' ', '!', '\"', '#', '$', '%', '&', '\'', + '(', ')', '*', '+', ',', '-', '.', '/', + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', ':', ';', '<', '=', '>', '?', + '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', + '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', '{', '|', '}', '~', '_', + '_', '_', '_', '_', '_', '.', '_', '_', + '_', '_', '_', '_', '_', '>', '.', '.', + '[', ']', '0', '1', '2', '3', '4', '5', + '6', '7', '8', '9', '.', '_', '_', '_', + ' ', '!', '\"', '#', '$', '%', '&', '\'', + '(', ')', '*', '+', ',', '-', '.', '/', + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', ':', ';', '<', '=', '>', '?', + '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', + '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', '{', '|', '}', '~', '_' +}; + + void Con_ResizeCon (console_t *con); qboolean Con_IsActive (console_t *con) @@ -494,13 +540,6 @@ Con_Init */ void Con_Init (void) { - con_debuglog = COM_CheckParm("-condebug"); - -#ifdef CRAZYDEBUGGING - con_debuglog = true; - TRACE(("dbg: Con_Init: con_debuglog forced\n")); -#endif - con_current = &con_main; con_main.linebuffered = Con_ExecuteLine; con_main.commandcompletion = true; @@ -518,6 +557,15 @@ void Con_Init (void) Cvar_Register (&con_displaypossabilities, "Console controls"); Cvar_Register (&cl_chatmode, "Console controls"); + Cvar_Register (&log_name, CONLOGGROUP); + Cvar_Register (&log_dir, CONLOGGROUP); + Cvar_Register (&log_readable, CONLOGGROUP); + Cvar_Register (&log_enable, CONLOGGROUP); + Cvar_Register (&log_developer, CONLOGGROUP); + Cvar_Register (&log_rotate_size, CONLOGGROUP); + Cvar_Register (&log_rotate_files, CONLOGGROUP); + Cvar_Register (&log_dosformat, CONLOGGROUP); + Cmd_AddCommand ("toggleconsole", Con_ToggleConsole_f); Cmd_AddCommand ("togglechat", Con_ToggleChat_f); Cmd_AddCommand ("messagemode", Con_MessageMode_f); @@ -527,6 +575,15 @@ void Con_Init (void) Cmd_AddCommand ("qterm", Con_QTerm_f); #endif con_initialized = true; + +#ifdef CRAZYDEBUGGING + Cvar_ForceSet(&log_enable, "1"); + TRACE(("dbg: Con_Init: log_enable forced\n")); +#endif + + + if (COM_CheckParm("-condebug")) + Cvar_ForceSet(&log_enable, "1"); } @@ -678,6 +735,7 @@ void Con_PrintCon (console_t *con, char *txt) } } + void Con_Print (char *txt) { Con_PrintCon(&con_main, txt); //client console @@ -690,6 +748,169 @@ void Con_CycleConsole(void) con_current = &con_main; } +// Con_Log: log string to console log +int COM_FileSize(char *path); +extern char gamedirfile[]; +extern char *com_basedir; +void Con_Log (char *s) +{ + char *d; // directory + char *f; // filename + char *t; + char logbuf[1024]; + int i; + + if (!log_enable.value) + return; + + // cvar sanity checks + if (log_dir.modified) + { + t = log_dir.string; + if (strstr(t, "..") || strstr(t, ":") || *t == '/' || *t == '\\') + { + Con_Print("log_dir forced to default due to invalid characters.\n"); + Cvar_ForceSet(&log_dir, log_dir.defaultstr); + } + + log_dir.modified = false; + } + + if (log_name.modified) + { + t = log_name.string; + if (strstr(t, "..") || strstr(t, ":") || strstr(t, "/") || strstr(t, "\\")) + { + Con_Print("log_name forced to default due to invalid characters.\n"); + Cvar_ForceSet(&log_name, log_name.defaultstr); + } + + log_name.modified = false; + } + + // get directory/filename + d = gamedirfile; + if (log_dir.string[0]) + d = log_dir.string; + + f = "qconsole"; + if (log_name.string[0]) + f = log_name.string; + + // readable translation and Q3 code removal, use t for final string to write + t = logbuf; + // max debuglog buf is 1024 + for (i = 0; i < 1023; i++, s++) + { + if (*s == 0) + break; + else if (log_readable.value >= 2 && *s == '^') + { + // log_readable 2 removes Q3 codes as well + char c; + c = *(s+1); + + if ((c >= '0' && c < '8') || c == 'a' || c == 'b' || c == 's' || c == 'r') + { + i--; + s++; + } + else + { + *t = '^'; + t++; + } + } + else if (log_dosformat.value && *s == '\n') + { + // convert \n to \r\n + *t = '\r'; + t++; + i++; + if (i < 1023) + { + *t = '\n'; + t++; + } + } + else + { + // use readable table to convert quake chars to reabable text + if (log_readable.value) + *t = readable[(unsigned char)(*s)]; // translate + else + *t = *s; // copy + t++; + } + } + + *t = 0; + + f = va("%s/%s/%s.log",com_basedir,d,f); // temp string in va() + + // file rotation + if (log_rotate_size.value >= 4096 && log_rotate_files.value >= 1) + { + int x; + FILE *fi; + + // check file size, use x as temp + if (fi = fopen(f, "rb")) + { + x = COM_filelength(fi); + fclose(fi); + } + else + x = 0; + + if (x > (int)log_rotate_size.value) + { + char newf[MAX_OSPATH]; + char oldf[MAX_OSPATH]; + + i = log_rotate_files.value; + + // unlink file at the top of the chain + _snprintf(oldf, sizeof(oldf)-1, "%s.%i", f, i); + unlink(oldf); + + // rename files through chain + for (x = i-1; x > 0; x--) + { + strcpy(newf, oldf); + _snprintf(oldf, sizeof(oldf)-1, "%s.%i", f, x); + + // check if file exists, otherwise skip + if (fi = fopen(oldf, "rb")) + fclose(fi); + else + continue; // skip nonexistant files + + if (rename(oldf, newf)) + { + // rename failed, disable log and bug out + Cvar_ForceSet(&log_enable, "0"); + Con_Print("Unable to rotate log files. Logging disabled.\n"); + return; + } + } + + // TODO: option to compress file somewhere in here? + // rename our base file, which better exist... + if (rename(f, oldf)) + { + // rename failed, disable log and bug out + Cvar_ForceSet(&log_enable, "0"); + Con_Print("Unable to rename base log file. Logging disabled.\n"); + return; + } + } + } + + // write to log file + Sys_DebugLog(f, "%s", logbuf); +} + /* ================ Con_Printf @@ -731,8 +952,7 @@ void VARGS Con_Printf (const char *fmt, ...) Sys_Printf ("%s", msg); // also echo to debugging console // log all messages to file - if (con_debuglog) - Sys_DebugLog(va("%s/qconsole.log",com_gamedir), "%s", msg); + Con_Log (msg); if (!con_initialized) return; @@ -814,14 +1034,17 @@ void VARGS Con_DPrintf (char *fmt, ...) va_list argptr; char msg[MAXPRINTMSG]; - if (!developer.value) - return; // don't confuse non-developers with techie stuff... + if (!developer.value && !log_developer.value) + return; // early exit va_start (argptr,fmt); _vsnprintf (msg,sizeof(msg)-1, fmt,argptr); va_end (argptr); - Con_Printf ("%s", msg); + if (!developer.value) + Con_Log(msg); + else + Con_Printf("%s", msg); } /* diff --git a/engine/client/image.c b/engine/client/image.c index a44ab378a..9b9b64ded 100644 --- a/engine/client/image.c +++ b/engine/client/image.c @@ -973,7 +973,7 @@ typedef struct { METHODDEF(void) jpeg_error_exit (j_common_ptr cinfo) { longjmp(((jpeg_error_mgr_wrapper *) cinfo->err)->setjmp_buffer, 1); } -extern char com_basedir[]; +extern char *com_basedir; void screenshotJPEG(char *filename, qbyte *screendata, int screenwidth, int screenheight) //input is rgb NOT rgba { char name[MAX_OSPATH]; diff --git a/engine/client/m_download.c b/engine/client/m_download.c index d1b02fdd2..66dabb599 100644 --- a/engine/client/m_download.c +++ b/engine/client/m_download.c @@ -9,7 +9,7 @@ #define DPF_DISPLAYVERSION 4 //some sort of conflict, the package is listed twice, so show versions so the user knows what's old. #define DPF_DELETEONUNINSTALL 8 //for previously installed packages, remove them from the list -extern char com_basedir[]; +extern char *com_basedir; char *downloadablelist[256] = { diff --git a/engine/client/m_options.c b/engine/client/m_options.c index f6008a42a..21c7d11e0 100644 --- a/engine/client/m_options.c +++ b/engine/client/m_options.c @@ -37,6 +37,7 @@ void M_Menu_Options_f (void) { int mgt; extern cvar_t cl_standardchat; + extern cvar_t cl_standardmsg; #ifdef _WIN32 extern qboolean vid_isfullscreen; #endif @@ -81,6 +82,7 @@ void M_Menu_Options_f (void) MC_AddCheckBox(menu, 16, y, " Use old status bar", &cl_sbar,0); y+=8; MC_AddCheckBox(menu, 16, y, " HUD on left side", &cl_hudswap,0); y+=8; MC_AddCheckBox(menu, 16, y, " Old-style chatting", &cl_standardchat,0);y+=8; + MC_AddCheckBox(menu, 16, y, " Old-style messages", &cl_standardmsg,0);y+=8; y+=4;MC_AddEditCvar(menu, 16, y, " Imitate FPS", "cl_netfps"); y+=8+4; MC_AddConsoleCommand(menu, 16, y, " Video Options", "menu_video\n"); y+=8; @@ -492,7 +494,7 @@ void M_Menu_FPS_f (void) MC_AddCheckBox(menu, 48, y, " Dynamic lights", &r_dynamic,0);y+=8; MC_AddCheckBox(menu, 48, y, " Stainmaps", &r_stains,0);y+=8; - y+=4;MC_AddEditCvar(menu, 48, y, " Skybox", &gl_skyboxname);y+=8;y+=4; + y+=4;MC_AddEditCvar(menu, 48, y, " Skybox", "gl_skyboxname");y+=8;y+=4; switch(qrenderer) { #ifdef RGLQUAKE diff --git a/engine/client/net_master.c b/engine/client/net_master.c index 34cba8740..212f0ce54 100644 --- a/engine/client/net_master.c +++ b/engine/client/net_master.c @@ -547,7 +547,7 @@ void Master_AddMasterHTTP (char *address, int servertype, char *description) //build a linked list of masters. Doesn't duplicate addresses. qboolean Master_LoadMasterList (char *filename, int defaulttype, int depth) { - extern char com_basedir[MAX_OSPATH]; + extern char *com_basedir; FILE *f; char line[1024]; char file[1024]; diff --git a/engine/client/r_part.c b/engine/client/r_part.c index 652faa8b0..9034d8f74 100644 --- a/engine/client/r_part.c +++ b/engine/client/r_part.c @@ -2558,7 +2558,6 @@ void P_RunParticleCube(vec3_t minb, vec3_t maxb, vec3_t dir, float count, int co { vec3_t org; int i, j; - vec3_t nvel; float num; float invcount; @@ -2593,7 +2592,6 @@ void P_RunParticleWeather(vec3_t minb, vec3_t maxb, vec3_t dir, float count, int { vec3_t org; int i, j; - vec3_t nvel; float num; float invcount; diff --git a/engine/client/snd_dma.c b/engine/client/snd_dma.c index 5a120f257..95105184d 100644 --- a/engine/client/snd_dma.c +++ b/engine/client/snd_dma.c @@ -123,7 +123,7 @@ void S_SoundInfo_f(void) if (!sndcardinfo) { - Con_Print("No sound cards\n"); + Con_Printf ("No sound cards\n"); return; } for (sc = sndcardinfo; sc; sc = sc->next) diff --git a/engine/client/snd_sdl.c b/engine/client/snd_sdl.c index 0ebab23c1..b034f296b 100644 --- a/engine/client/snd_sdl.c +++ b/engine/client/snd_sdl.c @@ -77,7 +77,7 @@ static int SDL_InitCard(soundcardinfo_t *sc, int cardnum) Con_Printf("SDL AUDIO INITING\n"); if(SDL_InitSubSystem(SDL_INIT_AUDIO | SDL_INIT_NOPARACHUTE)) { - Con_Print("Couldn't initialize SDL audio subsystem\n"); + Con_Printf("Couldn't initialize SDL audio subsystem\n"); return false; } diff --git a/engine/client/zqtp.c b/engine/client/zqtp.c index ec64b18e9..7fbb6afa4 100644 --- a/engine/client/zqtp.c +++ b/engine/client/zqtp.c @@ -3227,7 +3227,6 @@ void CL_Say (qboolean team, char *extra) strlcat (sendtext, text, sizeof(sendtext)); if (suppress) { - extern cvar_t cl_standardchat; //print it locally: char *d; for (s = sendtext, d = text; *s; s++, d++) diff --git a/engine/common/console.h b/engine/common/console.h index e202c6060..49fc7d950 100644 --- a/engine/common/console.h +++ b/engine/common/console.h @@ -86,8 +86,6 @@ extern qboolean con_initialized; extern qbyte *con_chars; extern int con_notifylines; // scan lines to clear for notify lines -extern qboolean con_debuglog; - void Con_DrawCharacter (int cx, int line, int num); void Con_CheckResize (void); diff --git a/engine/common/translate.c b/engine/common/translate.c index 85a357a3d..61471a09a 100644 --- a/engine/common/translate.c +++ b/engine/common/translate.c @@ -6,7 +6,6 @@ static char *defaultlanguagetext = "STL_LANGUAGENAME \"English\"\n" "TL_NL \"\\n\"\n" -"TL_ST \"%s\"\n" "TL_STNL \"%s\\n\"\n" "STL_CLIENTCONNECTED \"client %s connected\\n\"\n" "STL_SPECTATORCONNECTED \"spectator %s connected\\n\"\n" diff --git a/engine/common/translate.h b/engine/common/translate.h index 64b41891f..d90843811 100644 --- a/engine/common/translate.h +++ b/engine/common/translate.h @@ -2,7 +2,6 @@ NAME(STL_LANGUAGENAME) NAME(TL_NL) - NAME(TL_ST) NAME(TL_STNL) NAME(STL_CLIENTCONNECTED) diff --git a/engine/gl/gl_vidnt.c b/engine/gl/gl_vidnt.c index 71c3c90a9..ea1942375 100644 --- a/engine/gl/gl_vidnt.c +++ b/engine/gl/gl_vidnt.c @@ -1410,7 +1410,7 @@ qboolean GLVID_Init (rendererstate_t *info, unsigned char *palette) if (!RegisterClass (&wc) ) { - Con_Print("^1Couldn't register window class\n"); + Con_Printf("^1Couldn't register window class\n"); return false; } diff --git a/engine/server/server.h b/engine/server/server.h index 9c3ae3c53..462b98f81 100644 --- a/engine/server/server.h +++ b/engine/server/server.h @@ -863,7 +863,6 @@ extern char localmodels[MAX_MODELS][5]; // inline model names for precache extern char localinfo[MAX_LOCALINFO_STRING+1]; extern int host_hunklevel; -extern FILE *sv_logfile; extern FILE *sv_fraglogfile; //=========================================================== diff --git a/engine/server/sv_ccmds.c b/engine/server/sv_ccmds.c index 6f298b685..2c45a6f46 100644 --- a/engine/server/sv_ccmds.c +++ b/engine/server/sv_ccmds.c @@ -139,6 +139,9 @@ SV_SetMaster_f Make a master server current ==================== */ +void Master_ClearAll(void); +void Master_Add(char *stringadr); + void SV_SetMaster_f (void) { int i; @@ -182,21 +185,33 @@ SV_Logfile_f */ void SV_Logfile_f (void) { - char name[MAX_OSPATH]; + extern cvar_t log_enable, log_dir, log_name; + extern char gamedirfile[]; + extern char *com_basedir; - if (con_debuglog) + if (log_enable.value) { - Con_TPrintf (STL_LOGGINGOFF); - con_debuglog = false; - return; + Cvar_SetValue(&log_enable, 0); + Con_Print("Logging disabled.\n"); } + else + { + char *d, *f; - sprintf (name, "%s/qconsole.log", com_gamedir); - Con_TPrintf (STL_LOGGINGTO, name); - con_debuglog = true; + d = gamedirfile; + if (log_dir.string[0]) + d = log_dir.string; + + f = "qconsole"; + if (log_name.string[0]) + f = log_name.string; + + Cvar_SetValue(&log_enable, 1); + Con_Print(va("Logging to %s/%s/%s.log.\n", com_basedir, d, f)); + } + } - /* ============ SV_Fraglogfile_f @@ -1262,6 +1277,13 @@ void SV_SaveInfos(FILE *f) SV_SaveInfo(f, localinfo, "localinfo"); } +/* +void SV_ResetInfos(void) +{ + // TODO: add me +} +*/ + /* =========== SV_User_f diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 9372e4b0f..220d07567 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -171,7 +171,6 @@ char cvargroup_serverinfo[] = "serverinfo variables"; char cvargroup_serverphysics[] = "server physics variables"; char cvargroup_servercontrol[] = "server control variables"; -FILE *sv_logfile; FILE *sv_fraglogfile; void SV_FixupName(char *in, char *out); @@ -195,11 +194,6 @@ Quake calls this before calling Sys_Quit or Sys_Error void SV_Shutdown (void) { Master_Shutdown (); - if (sv_logfile) - { - fclose (sv_logfile); - sv_logfile = NULL; - } if (sv_fraglogfile) { fclose (sv_fraglogfile); diff --git a/engine/server/sv_send.c b/engine/server/sv_send.c index 0c968d41a..11013575a 100644 --- a/engine/server/sv_send.c +++ b/engine/server/sv_send.c @@ -134,7 +134,6 @@ Handles cursor positioning, line wrapping, etc #define MAXPRINTMSG 4096 // FIXME: make a buffer size safe vsprintf? #ifdef SERVERONLY -qboolean con_debuglog; void VARGS Con_Printf (const char *fmt, ...) { va_list argptr; @@ -155,9 +154,7 @@ void VARGS Con_Printf (const char *fmt, ...) } Sys_Printf ("%s", msg); // also echo to debugging console - - if (con_debuglog) - Sys_DebugLog(va("%s/qconsole.log",com_gamedir), "%s", msg); + Con_Log(msg); // log to console } void Con_TPrintf (translation_t stringnum, ...) { @@ -186,9 +183,7 @@ void Con_TPrintf (translation_t stringnum, ...) va_end (argptr); Sys_Printf ("%s", msg); // also echo to debugging console - - if (con_debuglog) - Sys_DebugLog(va("%s/qconsole.log",com_gamedir), "%s", msg); + Con_Log(msg); // log to console } /* ================ diff --git a/engine/server/sv_sys_win.c b/engine/server/sv_sys_win.c index 08eaaa055..583ee611a 100644 --- a/engine/server/sv_sys_win.c +++ b/engine/server/sv_sys_win.c @@ -260,12 +260,6 @@ int Sys_EnumerateFiles (char *gpath, char *match, int (*func)(char *, int, void return go; } - -void Sys_ErrorLog(char *text, FILE *f) -{ - fprintf(f, "---------------\nSYS_ERROR:\n%s\n", text); -} - /* ================ Sys_Error @@ -277,7 +271,6 @@ void Sys_Error (const char *error, ...) va_list argptr; char text[1024]; double end; - FILE *crashlog; va_start (argptr,error); _vsnprintf (text,sizeof(text)-1, error,argptr); @@ -287,24 +280,7 @@ void Sys_Error (const char *error, ...) // MessageBox(NULL, text, "Error", 0 /* MB_OK */ ); Sys_Printf ("ERROR: %s\n", text); - - if (sv_logfile) - { - Sys_ErrorLog(text, sv_logfile); - } - else - { - char name[1024]; - sprintf (name, "%s/qconsole.log", com_gamedir); - Con_TPrintf (STL_LOGGINGTO, name); - crashlog = fopen (name, "wb"); - if (!crashlog) - Con_TPrintf (STL_ERRORCOULDNTOPEN); - else - Sys_ErrorLog(text, crashlog); - } - - + Con_Log(text); NET_Shutdown(); //free sockets and stuff.