]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cvar.c
properly detect vid.samples value if overridden by driver
[xonotic/darkplaces.git] / cvar.c
diff --git a/cvar.c b/cvar.c
index 707c54c5c0641b73528aa6c0b778b7845302d787..8cc14f0964396c91b48e1f5c8d707cc081d07108 100644 (file)
--- a/cvar.c
+++ b/cvar.c
@@ -105,32 +105,41 @@ cvar_t *Cvar_FindVarLink (const char *var_name, cvar_t **parent, cvar_t ***link,
 Cvar_VariableValue
 ============
 */
-float Cvar_VariableValue (const char *var_name)
+float Cvar_VariableValueOr (const char *var_name, float def)
 {
        cvar_t *var;
 
        var = Cvar_FindVar (var_name);
        if (!var)
-               return 0;
+               return def;
        return atof (var->string);
 }
 
+float Cvar_VariableValue (const char *var_name)
+{
+       return Cvar_VariableValueOr(var_name, 0);
+}
 
 /*
 ============
 Cvar_VariableString
 ============
 */
-const char *Cvar_VariableString (const char *var_name)
+const char *Cvar_VariableStringOr (const char *var_name, const char *def)
 {
        cvar_t *var;
 
        var = Cvar_FindVar (var_name);
        if (!var)
-               return cvar_null_string;
+               return def;
        return var->string;
 }
 
+const char *Cvar_VariableString (const char *var_name)
+{
+       return Cvar_VariableStringOr(var_name, cvar_null_string);
+}
+
 /*
 ============
 Cvar_VariableDefString
@@ -265,31 +274,32 @@ static void Cvar_UpdateAutoCvar(cvar_t *var)
                // MUST BE SYNCED WITH prvm_edict.c PRVM_LoadProgs
                int j;
                const char *s;
-               prvm_eval_t *val = (prvm_eval_t *)(prog->globals.generic + prog->globaldefs[var->globaldefindex[i]].ofs);
+               vec3_t v;
                switch(prog->globaldefs[var->globaldefindex[i]].type & ~DEF_SAVEGLOBAL)
                {
                        case ev_float:
-                               val->_float = var->value;
+                               PRVM_GLOBALFIELDFLOAT(prog->globaldefs[var->globaldefindex[i]].ofs) = var->value;
                                break;
                        case ev_vector:
                                s = var->string;
-                               VectorClear(val->vector);
+                               VectorClear(v);
                                for (j = 0;j < 3;j++)
                                {
                                        while (*s && ISWHITESPACE(*s))
                                                s++;
                                        if (!*s)
                                                break;
-                                       val->vector[j] = atof(s);
+                                       v[j] = atof(s);
                                        while (!ISWHITESPACE(*s))
                                                s++;
                                        if (!*s)
                                                break;
                                }
+                               VectorCopy(v, PRVM_GLOBALFIELDVECTOR(prog->globaldefs[var->globaldefindex[i]].ofs));
                                break;
                        case ev_string:
                                PRVM_ChangeEngineString(var->globaldefindex_stringno[i], var->string);
-                               val->string = var->globaldefindex_stringno[i];
+                               PRVM_GLOBALFIELDSTRING(prog->globaldefs[var->globaldefindex[i]].ofs) = var->globaldefindex_stringno[i];
                                break;
                }
        }
@@ -308,6 +318,7 @@ void Cvar_UpdateAllAutoCvars(void)
 Cvar_Set
 ============
 */
+extern cvar_t sv_disablenotify;
 void Cvar_SetQuick_Internal (cvar_t *var, const char *value)
 {
        qboolean changed;
@@ -331,7 +342,7 @@ void Cvar_SetQuick_Internal (cvar_t *var, const char *value)
        memcpy ((char *)var->string, value, valuelen + 1);
        var->value = atof (var->string);
        var->integer = (int) var->value;
-       if ((var->flags & CVAR_NOTIFY) && changed && sv.active)
+       if ((var->flags & CVAR_NOTIFY) && changed && sv.active && !sv_disablenotify.integer)
                SV_BroadcastPrintf("\"%s\" changed to \"%s\"\n", var->name, var->string);
 #if 0
        // TODO: add infostring support to the server?
@@ -820,7 +831,7 @@ void Cvar_WriteVariables (qfile_t *f)
 
        // don't save cvars that match their default value
        for (var = cvar_vars ; var ; var = var->next)
-               if ((var->flags & CVAR_SAVE) && (strcmp(var->string, var->defstring) || !(var->flags & CVAR_DEFAULTSET)))
+               if ((var->flags & CVAR_SAVE) && (strcmp(var->string, var->defstring) || ((var->flags & CVAR_ALLOCATED) && !(var->flags & CVAR_DEFAULTSET))))
                {
                        Cmd_QuoteString(buf1, sizeof(buf1), var->name, "\"\\$", false);
                        Cmd_QuoteString(buf2, sizeof(buf2), var->string, "\"\\$", false);