diff --git a/changelog.log b/changelog.log index ef3acbd9..0b96bd71 100644 --- a/changelog.log +++ b/changelog.log @@ -31,6 +31,7 @@ launcher.dll 3. Оставить только одну консоль win32 OK 4. Сделать HOOK для определения типа вывода OK 5. подключить кастомный хандлер для ошибок +6. погасить рендер при фатальной ошибке platform.dll 1. разобраться наконец с записью файлов diff --git a/engine/client/cl_scrn.c b/engine/client/cl_scrn.c index 98d8acad..57ab208a 100644 --- a/engine/client/cl_scrn.c +++ b/engine/client/cl_scrn.c @@ -967,7 +967,7 @@ void SCR_ExecuteLayoutString (char *s) while (s) { token = COM_Parse (&s); - if(!token) break;//strange bug + if(!token) break; if (!strcmp(token, "xl")) { @@ -987,7 +987,6 @@ void SCR_ExecuteLayoutString (char *s) x = viddef.width/2 - 160 + atoi(token); continue; } - if (!strcmp(token, "yt")) { token = COM_Parse (&s); @@ -1006,13 +1005,12 @@ void SCR_ExecuteLayoutString (char *s) y = viddef.height/2 - 120 + atoi(token); continue; } - if (!strcmp(token, "pic")) - { // draw a pic from a stat number + { + // draw a pic from a stat number token = COM_Parse (&s); value = cl.frame.playerstate.stats[atoi(token)]; - if (value >= MAX_IMAGES) - Com_Error (ERR_DROP, "Pic >= MAX_IMAGES"); + if (value >= MAX_IMAGES) Com_Error (ERR_DROP, "Pic >= MAX_IMAGES"); if (cl.configstrings[CS_IMAGES+value]) { SCR_AddDirtyPoint (x, y); @@ -1021,9 +1019,9 @@ void SCR_ExecuteLayoutString (char *s) } continue; } - if (!strcmp(token, "client")) - { // draw a deathmatch client block + { + // draw a deathmatch client block int score, ping, time; token = COM_Parse (&s); @@ -1059,10 +1057,10 @@ void SCR_ExecuteLayoutString (char *s) re.DrawPic (x, y, ci->iconname); continue; } - if (!strcmp(token, "ctf")) - { // draw a ctf client block - int score, ping; + { + // draw a ctf client block + int score, ping; char block[80]; token = COM_Parse (&s); @@ -1083,29 +1081,27 @@ void SCR_ExecuteLayoutString (char *s) token = COM_Parse (&s); ping = atoi(token); - if (ping > 999) - ping = 999; + if (ping > 999) ping = 999; sprintf(block, "%3d %3d %-12.12s", score, ping, ci->name); if (value == cl.playernum) DrawAltString (x, y, block); - else - DrawString (x, y, block); + else DrawString (x, y, block); continue; } - if (!strcmp(token, "picn")) - { // draw a pic from a name + { + // draw a pic from a name token = COM_Parse (&s); SCR_AddDirtyPoint (x, y); SCR_AddDirtyPoint (x+23, y+23); re.DrawPic (x, y, token); continue; } - if (!strcmp(token, "num")) - { // draw a number + { + // draw a number token = COM_Parse (&s); width = atoi(token); token = COM_Parse (&s); @@ -1113,19 +1109,16 @@ void SCR_ExecuteLayoutString (char *s) SCR_DrawField (x, y, 0, width, value); continue; } - if (!strcmp(token, "hnum")) - { // health number + { + // health number int color; width = 3; value = cl.frame.playerstate.stats[STAT_HEALTH]; - if (value > 25) - color = 0; // green - else if (value > 0) - color = (cl.frame.serverframe>>2) & 1; // flash - else - color = 1; + if (value > 25) color = 0; // green + else if (value > 0) color = (cl.frame.serverframe>>2) & 1; // flash + else color = 1; if (cl.frame.playerstate.stats[STAT_FLASHES] & 1) re.DrawPic (x, y, "field_3"); @@ -1133,19 +1126,16 @@ void SCR_ExecuteLayoutString (char *s) SCR_DrawField (x, y, color, width, value); continue; } - if (!strcmp(token, "anum")) - { // ammo number + { + // ammo number int color; width = 3; value = cl.frame.playerstate.stats[STAT_AMMO]; - if (value > 5) - color = 0; // green - else if (value >= 0) - color = (cl.frame.serverframe>>2) & 1; // flash - else - continue; // negative number = don't show + if (value > 5) color = 0; // green + else if (value >= 0) color = (cl.frame.serverframe>>2) & 1; // flash + else continue; // negative number = don't show if (cl.frame.playerstate.stats[STAT_FLASHES] & 4) re.DrawPic (x, y, "field_3"); @@ -1153,17 +1143,16 @@ void SCR_ExecuteLayoutString (char *s) SCR_DrawField (x, y, color, width, value); continue; } - if (!strcmp(token, "rnum")) - { // armor number - int color; + { + // armor number + int color; width = 3; value = cl.frame.playerstate.stats[STAT_ARMOR]; - if (value < 1) - continue; + if (value < 1) continue; - color = 0; // green + color = 0; // green if (cl.frame.playerstate.stats[STAT_FLASHES] & 2) re.DrawPic (x, y, "field_3"); @@ -1171,8 +1160,6 @@ void SCR_ExecuteLayoutString (char *s) SCR_DrawField (x, y, color, width, value); continue; } - - if (!strcmp(token, "stat_string")) { token = COM_Parse (&s); @@ -1185,51 +1172,51 @@ void SCR_ExecuteLayoutString (char *s) DrawString (x, y, cl.configstrings[index]); continue; } - if (!strcmp(token, "cstring")) { token = COM_Parse (&s); DrawHUDString (token, x, y, 320, 0); continue; } - if (!strcmp(token, "string")) { token = COM_Parse (&s); DrawString (x, y, token); continue; } - if (!strcmp(token, "cstring2")) { token = COM_Parse (&s); DrawHUDString (token, x, y, 320,0x80); continue; } - if (!strcmp(token, "string2")) { token = COM_Parse (&s); DrawAltString (x, y, token); continue; } - if (!strcmp(token, "if")) { // draw a number token = COM_Parse (&s); value = cl.frame.playerstate.stats[atoi(token)]; - if (!value) - { // skip to endif - while (s && strcmp(token, "endif") ) + + if (!value) //find "}" + { + while (s && strcmp(token, "}") ) + { + token = COM_Parse (&s); + } + } + else // find "{" + { + while (s && strcmp(token, "{") ) { token = COM_Parse (&s); } } - continue; } - - } } diff --git a/engine/engine.plg b/engine/engine.plg new file mode 100644 index 00000000..1ded7e4a --- /dev/null +++ b/engine/engine.plg @@ -0,0 +1,86 @@ + + +
+

Build Log

+

+--------------------Configuration: engine - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\Temp\RSP1491.tmp" with contents +[ +/nologo /MTd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "prvm" /I "common" /I "server" /I "client" /I "../public" /I "../platform/formats" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\engine\!debug/" /Fo"..\temp\engine\!debug/" /Fd"..\temp\engine\!debug/" /FD /c +"D:\XASH3D\src_main\!source\engine\server\sv_save.c" +] +Creating command line "cl.exe @C:\Temp\RSP1491.tmp" +Creating temporary file "C:\Temp\RSP1492.tmp" with contents +[ +winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\engine\!debug/engine.pdb" /debug /machine:I386 /out:"..\temp\engine\!debug/engine.dll" /implib:"..\temp\engine\!debug/engine.lib" /pdbtype:sept +"\XASH3D\src_main\!source\temp\engine\!debug\cd_win.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_cin.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_ents.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_fx.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_input.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_inv.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_main.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_newfx.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_parse.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_pred.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_scrn.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_tent.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cl_view.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cmd.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cmodel.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\common.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\console.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\crc.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\cvar.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\host.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\in_win.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\keys.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\m_flash.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\md4.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\menu.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\net_chan.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\net_wins.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\pmove.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\q_shared.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\qmenu.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\snd_dma.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\snd_mem.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\snd_mix.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\snd_win.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_ccmds.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_ents.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_game.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_init.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_main.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_save.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_send.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_studio.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_user.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\sv_world.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\system.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\vid_dll.obj" +"\XASH3D\src_main\!source\temp\engine\!debug\vid_menu.obj" +] +Creating command line "link.exe @C:\Temp\RSP1492.tmp" +Creating temporary file "C:\Temp\RSP1493.bat" with contents +[ +@echo off +copy \XASH3D\src_main\!source\temp\engine\!debug\engine.dll "D:\Xash3D\bin\engine.dll" +] +Creating command line "C:\Temp\RSP1493.bat" +Compiling... +sv_save.c +Linking... +

Output Window

+Performing Custom Build Step on \XASH3D\src_main\!source\temp\engine\!debug\engine.dll +‘Є®ЇЁа®ў ­® д ©«®ў: 1. + + + +

Results

+engine.dll - 0 error(s), 0 warning(s) +
+ + diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index 4ad29850..1e4efa4a 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -213,15 +213,14 @@ void PF_Configstring (int index, char *val) if (index < 0 || index >= MAX_CONFIGSTRINGS) Com_Error (ERR_DROP, "configstring: bad index %i value %s\n", index, val); - if (!val) - val = ""; + if (!val) val = ""; // change the string in sv strcpy (sv.configstrings[index], val); - if (sv.state != ss_loading) - { // send the update to everyone + { + // send the update to everyone SZ_Clear (&sv.multicast); MSG_WriteChar (&sv.multicast, svc_configstring); MSG_WriteShort (&sv.multicast, index); diff --git a/engine/server/sv_save.c b/engine/server/sv_save.c index 22446d45..83917030 100644 --- a/engine/server/sv_save.c +++ b/engine/server/sv_save.c @@ -81,6 +81,25 @@ void SV_AddCvarLump( dsavehdr_t *hdr, file_t *f ) Z_Free( dout ); } +void SV_AddCStrLump( dsavehdr_t *hdr, file_t *f ) +{ + int i, strsize, bufsize = 0; + char *csbuffer = Z_Malloc( MAX_CONFIGSTRINGS * MAX_QPATH ); + + //pack the cfg string data + for(i = 0; i < MAX_CONFIGSTRINGS; i++) + { + strsize = strlen(sv.configstrings[i]); + if(strsize > MAX_QPATH) strsize = MAX_QPATH; //critical stuff + strsize++; + + strlcpy(csbuffer + bufsize, sv.configstrings[i], strsize ); + bufsize += strsize; + } + SV_AddSaveLump( hdr, f, LUMP_CFGSTRING, csbuffer, bufsize ); + Z_Free( csbuffer ); // free memory +} + byte *sav_base; /* @@ -115,7 +134,7 @@ void SV_WriteSaveFile( char *name ) //write lumps SV_AddSaveLump( header, savfile, LUMP_COMMENTS, comment, sizeof(comment)); - SV_AddSaveLump( header, savfile, LUMP_CFGSTRING, sv.configstrings, sizeof(sv.configstrings)); + SV_AddCStrLump( header, savfile ); SV_AddSaveLump( header, savfile, LUMP_AREASTATE, portalopen, sizeof(portalopen)); ge->WriteLump ( header, savfile, LUMP_GAMELEVEL); SV_AddSaveLump( header, savfile, LUMP_MAPCMDS, svs.mapcmd, sizeof(svs.mapcmd)); @@ -174,13 +193,19 @@ void Sav_LoadMapCmds( lump_t *l ) void Sav_LoadCfgString( lump_t *l ) { char *in; - int size; + int i, len = 0; in = (void *)(sav_base + l->fileofs); if (l->filelen % sizeof(*in)) Com_Error (ERR_DROP, "Sav_LoadCfgString: funny lump size\n" ); - size = l->filelen / sizeof(*in); - strlcpy((char *)sv.configstrings, in, size ); + //unpack the cfg string data + for(i = 0; i < MAX_CONFIGSTRINGS; i++) + { + len = 0; + while(*in != '\0') { in++, len++; }; + if(!in) break; //corrupted lump ? + strlcpy(sv.configstrings[i], in, len ); + } } void Sav_LoadAreaPortals( lump_t *l ) diff --git a/server/global/g_spawn.c b/server/global/g_spawn.c index e4b4c80a..9dfd1529 100644 --- a/server/global/g_spawn.c +++ b/server/global/g_spawn.c @@ -964,226 +964,165 @@ void SpawnEntities (char *mapname, char *entities, char *spawnpoint) #endif -#ifdef WESQ2 - char *single_statusbar = -"yb -24 " - -// pressure -"if 18 " -" xv 0 " -" num 5 19 " -" xv 90 " -" pic 18 " -"endif " - -// temperature -"if 20 " -" xv 200 " -" num 5 21 " -" xv 290 " -" pic 20 " -"endif " - -// vehicle speed -"if 22 " -" yb -90 " -" xv 128 " -" pic 22 " -"endif " - -; - -char *dm_statusbar = -"yb -24 " - -// pressure -"if 18 " -" xv 80 " -" pic 18 " -" xv 106 " -" num 5 19 " -"endif " - -// temperature -"if 20 " -" xv 220 " -" pic 20 " -" xv 246 " -" num 5 21 " -"endif " - -// vehicle speed -"if 22 " -" yb -90 " -" xv 128 " -" pic 22 " -"endif " -; - -#else - -char *single_statusbar = -"yb -24 " +"yb -24 " // health -"xv 0 " +"xv 0 " "hnum " -"xv 50 " +"xv 50 " "pic 0 " // ammo "if 2 " -" xv 100 " -" anum " -" xv 150 " -" pic 2 " -"endif " +"{ xv 100 " +"anum " +"xv 150 " +"pic 2 " +"} " // armor "if 4 " -" xv 200 " -" rnum " -" xv 250 " -" pic 4 " -"endif " +"{ xv 200 " +"rnum " +"xv 250 " +"pic 4 " +"} " // selected item "if 6 " -" xv 296 " -" pic 6 " -"endif " +"{ xv 296 " +"pic 6 " +"} " -"yb -50 " +"yb -50 " // picked up item "if 7 " -" xv 0 " -" pic 7 " -" xv 26 " -" yb -42 " -" stat_string 8 " -" yb -50 " -"endif " +"{ xv 0 " +"pic 7 " +"xv 26 " +"yb -42 " +"stat_string 8 " +"yb -50 " +"} " // timer (was xv 262) "if 9 " -" xv 230 " -" num 4 10 " -" xv 296 " -" pic 9 " -"endif " +"{ xv 230 " +"num 4 10 " +"xv 296 " +"pic 9 " +"} " // help / weapon icon "if 11 " -" xv 148 " -" pic 11 " -"endif " +"{ xv 148 " +"pic 11 " +"} " // vehicle speed "if 22 " -" yb -90 " -" xv 128 " -" pic 22 " -"endif " +"{ yb -90 " +"xv 128 " +"pic 22 " +"} " // zoom "if 23 " -" yv 0 " -" xv 0 " -" pic 23 " -"endif " +"{ yv 0 " +"xv 0 " +"pic 23 " +"} " ; char *dm_statusbar = -"yb -24 " +"yb -24 " // health -"xv 0 " +"xv 0 " "hnum " -"xv 50 " +"xv 50 " "pic 0 " // ammo "if 2 " -" xv 100 " -" anum " -" xv 150 " -" pic 2 " -"endif " +"{ xv 100 " +"anum " +"xv 150 " +"pic 2 " +"} " // armor "if 4 " -" xv 200 " -" rnum " -" xv 250 " -" pic 4 " -"endif " +"{ xv 200 " +"rnum " +"xv 250 " +"pic 4 " +"} " // selected item "if 6 " -" xv 296 " -" pic 6 " -"endif " +"{ xv 296 " +"pic 6 " +"} " -"yb -50 " +"yb -50 " // picked up item "if 7 " -" xv 0 " -" pic 7 " -" xv 26 " -" yb -42 " -" stat_string 8 " -" yb -50 " -"endif " +"{ xv 0 " +"pic 7 " +"xv 26 " +"yb -42 " +"stat_string 8 " +"yb -50 " +"} " // timer "if 9 " -" xv 230 " -" num 4 10 " -" xv 296 " -" pic 9 " -"endif " +"{ xv 230 " +"num 4 10 " +"xv 296 " +"pic 9 " +"} " // help / weapon icon "if 11 " -" xv 148 " -" pic 11 " -"endif " +"{ xv 148 " +"pic 11 " +"} " // frags -"xr -50 " +"xr -50 " "yt 2 " "num 3 14 " // spectator "if 17 " - "xv 0 " - "yb -58 " - "string2 \"SPECTATOR MODE\" " -"endif " +"{ xv 0 " +"yb -58 " +"string2 \"SPECTATOR MODE\" " +"} " // chase camera "if 16 " - "xv 0 " - "yb -68 " - "string \"Chasing\" " - "xv 64 " - "stat_string 16 " -"endif " +"{ xv 0 " +"yb -68 " +"string \"Chasing\" " +"xv 64 " +"stat_string 16 " +"} " // vehicle speed "if 22 " -" yb -90 " -" xv 128 " -" pic 22 " -"endif " +"{ yb -90 " +"xv 128 " +"pic 22 " +"} " ; -#endif // ifdef WESQ2 - /*QUAKED worldspawn (0 0 0) ? Only used for the world. diff --git a/server/server.plg b/server/server.plg new file mode 100644 index 00000000..35b71426 --- /dev/null +++ b/server/server.plg @@ -0,0 +1,16 @@ + + +
+

Build Log

+

+--------------------Configuration: server - Win32 Debug-------------------- +

+

Command Lines

+ + + +

Results

+server.dll - 0 error(s), 0 warning(s) +
+ +