X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Futil.qc;h=3bfdb855256f9274542f8a9cfc818c72556a1805;hp=6f5b037acff686485fba7aeef08c1b75ed2e118c;hb=a815eac87d47b74c06dea10cee1d9cfa315d87ab;hpb=accffec5db4d70296b5637bb517ae50acf3574a3 diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index 6f5b037ac..3bfdb8552 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -1,3 +1,13 @@ +float GL_CheckExtension(string ext) +{ + return (strstrofs(strcat(" ", cvar_string("gl_info_extensions"), " "), strcat(" ", ext, " "), 0) >= 0); +} + +float GL_Have_TextureCompression() +{ + return (GL_CheckExtension("GL_EXT_texture_compression_s3tc") && GL_CheckExtension("GL_ARB_texture_compression")); +} + float tooltipdb; void loadTooltips() { @@ -11,7 +21,7 @@ void unloadTooltips() string getZonedTooltipForIdentifier(string s) { string t; - if(s == "") + if(s == "" || tooltipdb < 0) return string_null; t = db_get(tooltipdb, s); if(t == "-") @@ -55,6 +65,12 @@ void loadAllCvars(entity root) .string cvarNames_Multi; .void(entity me) saveCvars_Multi; +string getCvarsMulti(entity me) +{ + if (me.cvarNames_Multi) + return me.cvarNames_Multi; + return string_null; +} void saveCvarsMulti(entity me) { float n, i; @@ -234,11 +250,6 @@ void setDependentWeird(entity e, float(entity) func) float _Nex_ExtResponseSystem_Queried; string _Nex_ExtResponseSystem_UpdateTo; -float URI_GET_DISCARD = 0; - -float URI_GET_UPDATENOTIFICATION = 1; -void UpdateNotification_URI_Get_Callback(float id, float status, string data); - void URI_Get_Callback(float id, float status, string data) { if (id == URI_GET_DISCARD) @@ -247,9 +258,12 @@ void URI_Get_Callback(float id, float status, string data) } else if(id == URI_GET_UPDATENOTIFICATION) { - // online ban list UpdateNotification_URI_Get_Callback(id, status, data); } + else if(id >= URI_GET_CURL && id <= URI_GET_CURL_END) + { + Curl_URI_Get_Callback(id, status, data); + } else { print("Received HTTP request data for an invalid id ", ftos(id), ".\n"); @@ -361,7 +375,43 @@ void preMenuDraw() if(!_Nex_ExtResponseSystem_Queried) { _Nex_ExtResponseSystem_Queried = 1; - uri_get(sprintf("http://www.xonotic.org/dl/checkupdate.txt?version=%s", uri_escape(cvar_string("g_xonoticversion"))), URI_GET_UPDATENOTIFICATION); + float startcnt; + string uri; + + cvar_set("cl_startcount", ftos(startcnt = cvar("cl_startcount") + 1)); + + // for privacy, munge the start count a little + startcnt = floor((floor(startcnt / 10) + random()) * 10); + uri = sprintf("http://www.xonotic.org/dl/checkupdate.txt?version=%s&cnt=%d", uri_escape(cvar_string("g_xonoticversion")), startcnt); + +#ifdef CVAR_POPCON + float cvar_handle, popcon_handle; + float n, i, j; + string k, s; + cvar_handle = buf_create(); + buf_cvarlist(cvar_handle, "", ""); + n = buf_getsize(cvar_handle); + popcon_handle = buf_create(); + for(i= 0, j = 0; i < n; ++i) + { + k = bufstr_get(cvar_handle, i); + if(!(cvar_type(k) & CVAR_TYPEFLAG_SAVED)) + continue; + s = sprintf("%s=%d", uri_escape(k), cvar_string(k) != cvar_defstring(k)); + bufstr_set(popcon_handle, j, s); + ++j; + } + buf_del(cvar_handle); + uri_postbuf( + uri, URI_GET_UPDATENOTIFICATION, + "application/x-www-form-urlencoded", + "&", + popcon_handle + ); + buf_del(popcon_handle); +#else + uri_get(uri, URI_GET_UPDATENOTIFICATION); +#endif } } @@ -420,3 +470,57 @@ string HUD_Panel_GetSettingName(float theSetting) default: return ""; } } + +float updateCompression() +{ + float fh; + float have_dds, have_jpg, have_tga; + float can_dds; + if((have_dds = ((fh = fopen("dds/particles/particlefont.dds", FILE_READ)) >= 0))) + fclose(fh); + if((have_jpg = ((fh = fopen("particles/particlefont.jpg", FILE_READ)) >= 0))) + fclose(fh); + if((have_tga = ((fh = fopen("particles/particlefont.tga", FILE_READ)) >= 0))) + fclose(fh); + can_dds = GL_Have_TextureCompression(); + if(have_dds && (have_jpg || have_tga)) + { + // both? Let's only use good quality precompressed files + // but ONLY if we actually support it! + if(can_dds) + { + cvar_set("gl_texturecompression", "0"); + return 1; + } + else + { + cvar_set("gl_texturecompression", "0"); + cvar_set("r_texture_dds_load", "0"); + return 0; + } + } + else if(have_dds) + { + // DDS only? We probably always want texture compression + cvar_set("gl_texturecompression", "1"); + cvar_set("r_texture_dds_load", "1"); + if(!can_dds) + print("^1ERROR: Texture compression is required but not supported.\n^1Expect visual problems.\n"); + return 0; + } + else + { + // TGA only? Allow runtime compression + if(can_dds) + { + cvar_set("gl_texturecompression", cvar_string("r_texture_dds_load")); + return 2; + } + else + { + cvar_set("gl_texturecompression", "0"); + cvar_set("r_texture_dds_load", "0"); + return 0; + } + } +}