]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cvar.c
improved plane distance epsilon checking and improved precision when converting brush...
[xonotic/darkplaces.git] / cvar.c
diff --git a/cvar.c b/cvar.c
index 68d98df421f1ebb41d20b2c84cce70f35e3d8207..fb08b237345fa9b05a5f6c3fe9381965e7d56723 100644 (file)
--- a/cvar.c
+++ b/cvar.c
@@ -416,15 +416,6 @@ cvar_t *Cvar_Get (const char *name, const char *value, int flags)
        {
                cvar->flags |= flags;
                Cvar_SetQuick_Internal (cvar, value);
-               // also set the default value (but only once)
-               if (~cvar->flags & CVAR_DEFAULTSET)
-               {
-                       cvar->flags |= CVAR_DEFAULTSET;
-
-                       Z_Free(cvar->defstring);
-                       cvar->defstring = (char *)Z_Malloc(strlen(value) + 1);
-                       strcpy(cvar->defstring, value);
-               }
                return cvar;
        }
 
@@ -438,7 +429,7 @@ cvar_t *Cvar_Get (const char *name, const char *value, int flags)
 // allocate a new cvar, cvar name, and cvar string
 // FIXME: these never get Z_Free'd
        cvar = (cvar_t *)Z_Malloc(sizeof(cvar_t));
-       cvar->flags = flags | CVAR_ALLOCATED | CVAR_DEFAULTSET;
+       cvar->flags = flags | CVAR_ALLOCATED;
        cvar->name = (char *)Z_Malloc(strlen(name)+1);
        strcpy(cvar->name, name);
        cvar->string = (char *)Z_Malloc(strlen(value)+1);
@@ -506,6 +497,53 @@ qboolean   Cvar_Command (void)
 }
 
 
+void Cvar_LockDefaults_f (void)
+{
+       cvar_t *var;
+       // lock in the default values of all cvars
+       for (var = cvar_vars ; var ; var = var->next)
+       {
+               if (!(var->flags & CVAR_DEFAULTSET))
+               {
+                       //Con_Printf("locking cvar %s (%s -> %s)\n", var->name, var->string, var->defstring);
+                       var->flags |= CVAR_DEFAULTSET;
+                       Z_Free(var->defstring);
+                       var->defstring = (char *)Z_Malloc(strlen(var->string) + 1);
+                       strcpy(var->defstring, var->string);
+               }
+       }
+}
+
+
+void Cvar_ResetToDefaults_All_f (void)
+{
+       cvar_t *var;
+       // restore the default values of all cvars
+       for (var = cvar_vars ; var ; var = var->next)
+               Cvar_SetQuick(var, var->defstring);
+}
+
+
+void Cvar_ResetToDefaults_NoSaveOnly_f (void)
+{
+       cvar_t *var;
+       // restore the default values of all cvars
+       for (var = cvar_vars ; var ; var = var->next)
+               if (!(var->flags & CVAR_SAVE))
+                       Cvar_SetQuick(var, var->defstring);
+}
+
+
+void Cvar_ResetToDefaults_SaveOnly_f (void)
+{
+       cvar_t *var;
+       // restore the default values of all cvars
+       for (var = cvar_vars ; var ; var = var->next)
+               if (var->flags & CVAR_SAVE)
+                       Cvar_SetQuick(var, var->defstring);
+}
+
+
 /*
 ============
 Cvar_WriteVariables
@@ -518,8 +556,9 @@ void Cvar_WriteVariables (qfile_t *f)
 {
        cvar_t  *var;
 
+       // don't save cvars that match their default value
        for (var = cvar_vars ; var ; var = var->next)
-               if (var->flags & CVAR_SAVE)
+               if (var->flags & CVAR_SAVE && strcmp(var->string, var->defstring))
                        FS_Printf(f, "%s%s \"%s\"\n", var->flags & CVAR_ALLOCATED ? "seta " : "", var->name, var->string);
 }