X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=cl_parse.c;h=2828515f9da56c7f5ab0b9dd547b035c72fabd48;hb=7e026612d4326f751e2a80a5c73ce882a6b93ecc;hp=3ae26aa9657e1f9f92824ea7513494d0b65cf1be;hpb=221a6cb74c3a3b30b9e60247d6e42d7a6fcdebf0;p=xonotic%2Fdarkplaces.git diff --git a/cl_parse.c b/cl_parse.c index 3ae26aa9..2828515f 100644 --- a/cl_parse.c +++ b/cl_parse.c @@ -227,7 +227,7 @@ static void CL_ParseStartSoundPacket(int largesoundindex) attenuation = MSG_ReadByte(&cl_message) / 64.0; else attenuation = DEFAULT_SOUND_PACKET_ATTENUATION; - + speed = 1.0f; ent = (channel>>3)&1023; @@ -276,7 +276,7 @@ static void CL_ParseStartSoundPacket(int largesoundindex) MSG_ReadVector(&cl_message, pos, cls.protocol); - if (sound_num >= MAX_SOUNDS) + if (sound_num < 0 || sound_num >= MAX_SOUNDS) { Con_Printf("CL_ParseStartSoundPacket: sound_num (%i) >= MAX_SOUNDS (%i)\n", sound_num, MAX_SOUNDS); return; @@ -380,6 +380,7 @@ void CL_KeepaliveMessage (qboolean readmessages) void CL_ParseEntityLump(char *entdata) { + qboolean loadedsky = false; const char *data; char key[128], value[MAX_INPUTLINE]; FOG_clear(); // LordHavoc: no fog until set @@ -408,11 +409,20 @@ void CL_ParseEntityLump(char *entdata) return; // error strlcpy (value, com_token, sizeof (value)); if (!strcmp("sky", key)) + { + loadedsky = true; R_SetSkyBox(value); + } else if (!strcmp("skyname", key)) // non-standard, introduced by QuakeForge... sigh. + { + loadedsky = true; R_SetSkyBox(value); + } else if (!strcmp("qlsky", key)) // non-standard, introduced by QuakeLives (EEK) + { + loadedsky = true; R_SetSkyBox(value); + } else if (!strcmp("fog", key)) { FOG_clear(); // so missing values get good defaults @@ -455,6 +465,9 @@ void CL_ParseEntityLump(char *entdata) r_refdef.fog_height_texturename[63] = 0; } } + + if (!loadedsky && cl.worldmodel->brush.isq2bsp) + R_SetSkyBox("unit1_"); } static const vec3_t defaultmins = {-4096, -4096, -4096}; @@ -1026,7 +1039,7 @@ static void QW_CL_ParseNails(void) { for (j = 0;j < 6;j++) bits[j] = MSG_ReadByte(&cl_message); - if (cl.qw_num_nails > 255) + if (cl.qw_num_nails >= 255) continue; v = cl.qw_nails[cl.qw_num_nails++]; v[0] = ( ( bits[0] + ((bits[1]&15)<<8) ) <<1) - 4096; @@ -1220,7 +1233,7 @@ static void CL_BeginDownloads(qboolean aborteddownload) // finished loading sounds } - if(gamemode == GAME_NEXUIZ || gamemode == GAME_XONOTIC) + if(IS_NEXUIZ_DERIVED(gamemode)) Cvar_SetValueQuick(&cl_serverextension_download, false); // in Nexuiz/Xonotic, the built in download protocol is kinda broken (misses lots // of dependencies) anyway, and can mess around with the game directory; @@ -1377,7 +1390,7 @@ static void CL_StopDownload(int size, int crc) { Con_Printf("Inflated download: new size: %u (%g%%)\n", (unsigned)inflated_size, 100.0 - 100.0*(cls.qw_downloadmemorycursize / (float)inflated_size)); cls.qw_downloadmemory = out; - cls.qw_downloadmemorycursize = inflated_size; + cls.qw_downloadmemorycursize = (int)inflated_size; } else { @@ -1399,7 +1412,7 @@ static void CL_StopDownload(int size, int crc) // save to disk only if we don't already have it // (this is mainly for playing back demos) existingcrc = FS_CRCFile(cls.qw_downloadname, &existingsize); - if (existingsize || gamemode == GAME_NEXUIZ || gamemode == GAME_XONOTIC || !strcmp(cls.qw_downloadname, csqc_progname.string)) + if (existingsize || IS_NEXUIZ_DERIVED(gamemode) || !strcmp(cls.qw_downloadname, csqc_progname.string)) // let csprogs ALWAYS go to dlcache, to prevent "viral csprogs"; also, never put files outside dlcache for Nexuiz/Xonotic { if ((int)existingsize != size || existingcrc != crc) @@ -2219,7 +2232,7 @@ static void CL_ParseClientdata (void) cl.stats[STAT_NAILS] = MSG_ReadByte(&cl_message); cl.stats[STAT_ROCKETS] = MSG_ReadByte(&cl_message); cl.stats[STAT_CELLS] = MSG_ReadByte(&cl_message); - if (gamemode == GAME_HIPNOTIC || gamemode == GAME_ROGUE || gamemode == GAME_QUOTH || gamemode == GAME_NEXUIZ) + if (gamemode == GAME_HIPNOTIC || gamemode == GAME_ROGUE || gamemode == GAME_QUOTH || IS_OLDNEXUIZ_DERIVED(gamemode)) cl.stats[STAT_ACTIVEWEAPON] = (1<= MAX_SOUNDS) + { + Con_Printf("CL_ParseStaticSound: sound_num(%i) >= MAX_SOUNDS (%i)\n", sound_num, MAX_SOUNDS); + return; + } + vol = MSG_ReadByte(&cl_message); atten = MSG_ReadByte(&cl_message);