]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/util.qc
load animblending info from txt file
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / util.qc
index 79fd219a20dd88d7e525e055b25ceaf7d198fa11..bb2fcba0abacc5ecef45730709add23a735e5468 100644 (file)
@@ -865,44 +865,56 @@ float cvar_settemp(string tmp_cvar, string tmp_value)
        float created_saved_value;
        entity e;
 
-       created_saved_value = FALSE;
-       
+       created_saved_value = 0;
+
        if not(tmp_cvar || tmp_value)
        {
                dprint("Error: Invalid usage of cvar_settemp(string, string); !\n");
-               return FALSE;
+               return 0;
        }
-       
+
+       if(!cvar_type(tmp_cvar))
+       {
+               print(sprintf("Error: cvar %s doesn't exist!\n", tmp_cvar));
+               return 0;
+       }
+
        for(e = world; (e = find(e, classname, "saved_cvar_value")); )
                if(e.netname == tmp_cvar)
-                       goto saved; // skip creation
-                       
-       // creating a new entity to keep track of this cvar
-       e = spawn();
-       e.classname = "saved_cvar_value";
-       e.netname = strzone(tmp_cvar);
-       e.message = strzone(cvar_string(tmp_cvar));
-       created_saved_value = TRUE;
-       
-       // an entity for this cvar already exists
-       :saved
-       
+                       created_saved_value = -1; // skip creation
+
+       if(created_saved_value != -1)
+       {
+               // creating a new entity to keep track of this cvar
+               e = spawn();
+               e.classname = "saved_cvar_value";
+               e.netname = strzone(tmp_cvar);
+               e.message = strzone(cvar_string(tmp_cvar));
+               created_saved_value = 1;
+       }
+
        // update the cvar to the value given
        cvar_set(tmp_cvar, tmp_value);
-       
+
        return created_saved_value;
 }
 
 float cvar_settemp_restore()
 {
-       float i;
-       entity e;
-       while((e = find(world, classname, "saved_cvar_value")))
+       float i = 0;
+       entity e = world;
+       while((e = find(e, classname, "saved_cvar_value")))
        {
-               cvar_set(e.netname, e.message);
-               remove(e);
+               if(cvar_type(e.netname))
+               {
+                       cvar_set(e.netname, e.message);
+                       remove(e);
+                       ++i;
+               }
+               else
+                       print(sprintf("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", e.netname));
        }
-       
+
        return i;
 }
 
@@ -1464,8 +1476,12 @@ float isGametypeInFilter(float gt, float tp, float ts, string pattern)
                if(strstrofs(strcat(",", pattern, ","), subpattern, 0) < 0)
                if(strstrofs(strcat(",", pattern, ","), subpattern2, 0) < 0)
                if(strstrofs(strcat(",", pattern, ","), subpattern3, 0) < 0)
-               if((!subpattern4) || strstrofs(strcat(",", pattern, ","), subpattern4, 0) < 0)
-                       return 0;
+               {
+                       if not(subpattern4)
+                               return 0;
+                       if(strstrofs(strcat(",", pattern, ","), subpattern4, 0) < 0)
+                               return 0;
+               }
        }
        return 1;
 }
@@ -1995,9 +2011,16 @@ float get_model_parameters(string m, float sk)
        get_model_parameters_weight = -1;
        get_model_parameters_age = -1;
        get_model_parameters_desc = string_null;
+       get_model_parameters_bone_upperbody = string_null;
+       get_model_parameters_bone_weapon = string_null;
+       get_model_parameters_fixbone = 0;
 
        if not(m)
                return 1;
+
+       if(substring(m, -9, 5) == "_lod1" || substring(m, -9, 5) == "_lod2")
+               m = strcat(substring(m, 0, -10), substring(m, -4, -1));
+
        if(sk < 0)
        {
                if(substring(m, -4, -1) != ".txt")
@@ -2046,6 +2069,12 @@ float get_model_parameters(string m, float sk)
                        get_model_parameters_weight = stof(s);
                if(c == "age")
                        get_model_parameters_age = stof(s);
+               if(c == "bone_upperbody")
+                       get_model_parameters_bone_upperbody = s;
+               if(c == "bone_weapon")
+                       get_model_parameters_bone_weapon = s;
+               if(c == "fixbone")
+                       get_model_parameters_fixbone = stof(s);
        }
 
        while((s = fgets(fh)))
@@ -2473,15 +2502,22 @@ vector vec3(float x, float y, float z)
        return v;
 }
 
-vector animfixfps(entity e, vector a)
+#ifndef MENUQC
+vector animfixfps(entity e, vector a, vector b)
 {
        // multi-frame anim: keep as-is
        if(a_y == 1)
        {
                float dur;
                dur = frameduration(e.modelindex, a_x);
+               if(dur <= 0 && b_y)
+               {
+                       a = b;
+                       dur = frameduration(e.modelindex, a_x);
+               }
                if(dur > 0)
                        a_z = 1.0 / dur;
        }
        return a;
 }
+#endif