]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/util.qc
Update announcer countdown system with different types, update debugprint
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / util.qc
index 8e3f81f5a72fdec754d332b1c4a84f9c1424f5db..667e150cd1e71cf0051ebe707b93f55ad5ad65f3 100644 (file)
@@ -2001,7 +2001,7 @@ string get_model_datafilename(string m, float sk, string fil)
 float get_model_parameters(string m, float sk)
 {
        string fn, s, c;
-       float fh;
+       float fh, i;
 
        get_model_parameters_modelname = string_null;
        get_model_parameters_modelskin = -1;
@@ -2011,9 +2011,21 @@ 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;
+       for(i = 0; i < MAX_AIM_BONES; ++i)
+       {
+               get_model_parameters_bone_aim[i] = string_null;
+               get_model_parameters_bone_aimweight[i] = 0;
+       }
+       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")
@@ -2062,6 +2074,18 @@ 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;
+               for(i = 0; i < MAX_AIM_BONES; ++i)
+                       if(c == strcat("bone_aim", ftos(i)))
+                       {
+                               get_model_parameters_bone_aimweight[i] = stof(car(s));
+                               get_model_parameters_bone_aim[i] = cdr(s);
+                       }
+               if(c == "fixbone")
+                       get_model_parameters_fixbone = stof(s);
        }
 
        while((s = fgets(fh)))
@@ -2480,28 +2504,197 @@ void FindConnectedComponent(entity e, .entity fld, findNextEntityNearFunction_t
                queue_start.FindConnectedComponent_processing = 0;
 }
 
-float Count_Proper_Strings(string improper, string...count)
+// todo: this sucks, lets find a better way to do backtraces?
+#ifndef MENUQC
+void backtrace(string msg)
+{
+       float dev, war;
+       #ifdef SVQC
+       dev = autocvar_developer;
+       war = autocvar_prvm_backtraceforwarnings;
+       #else
+       dev = cvar("developer");
+       war = cvar("prvm_backtraceforwarnings");
+       #endif
+       cvar_set("developer", "1");
+       cvar_set("prvm_backtraceforwarnings", "1");
+       print("\n");
+       print("--- CUT HERE ---\nWARNING: ");
+       print(msg);
+       print("\n");
+       remove(world); // isn't there any better way to cause a backtrace?
+       print("\n--- CUT UNTIL HERE ---\n");
+       cvar_set("developer", ftos(dev));
+       cvar_set("prvm_backtraceforwarnings", ftos(war));
+}
+#endif
+
+// color code replace, place inside of sprintf and parse the string
+string CCR(string input)
 {
-       float i, total = 0;
-       string tmp;
+       // See the autocvar declarations in util.qh for default values
        
-       for(i = 0; i < count; ++i)
+       // foreground/normal colors
+       input = strreplace("^F1", strcat("^", autocvar_hud_colorset_foreground_1), input); 
+       input = strreplace("^F2", strcat("^", autocvar_hud_colorset_foreground_2), input); 
+       input = strreplace("^F3", strcat("^", autocvar_hud_colorset_foreground_3), input); 
+       input = strreplace("^F4", strcat("^", autocvar_hud_colorset_foreground_4), input); 
+
+       // "kill" colors
+       input = strreplace("^K1", strcat("^", autocvar_hud_colorset_kill_1), input);
+       input = strreplace("^K2", strcat("^", autocvar_hud_colorset_kill_2), input);
+       input = strreplace("^K3", strcat("^", autocvar_hud_colorset_kill_3), input);
+
+       // background colors
+       input = strreplace("^BG", strcat("^", autocvar_hud_colorset_background), input);
+       input = strreplace("^N", "^7", input); // "none"-- reset to white...
+       return input;
+}
+
+vector vec3(float x, float y, float z)
+{
+       vector v;
+       v_x = x;
+       v_y = y;
+       v_z = z;
+       return v;
+}
+
+#ifndef MENUQC
+vector animfixfps(entity e, vector a, vector b)
+{
+       // multi-frame anim: keep as-is
+       if(a_y == 1)
        {
-               tmp = ...(i, string);
-               if((tmp) && (tmp != improper)) { ++total; }
+               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 total;
+       return a;
 }
+#endif
 
-float Count_Proper_Floats(float improper, float...count)
+#ifdef SVQC
+void dedicated_print(string input) // print(), but only print if the server is not local
 {
-       float i, total = 0;
-       
-       for(i = 0; i < count; ++i)
+       if(server_is_dedicated) { print(input); }
+}
+#endif
+
+#ifndef MENUQC
+float Announcer_PickNumber(float type, float num)
+{
+       switch(type)
        {
-               if(...(i, float) != improper) { ++total; }
+               case CNT_GAMESTART:
+               {
+                       switch(num)
+                       {
+                               case 10: return ANNCE_NUM_GAMESTART_10;
+                               case 9:  return ANNCE_NUM_GAMESTART_9; 
+                               case 8:  return ANNCE_NUM_GAMESTART_8; 
+                               case 7:  return ANNCE_NUM_GAMESTART_7; 
+                               case 6:  return ANNCE_NUM_GAMESTART_6; 
+                               case 5:  return ANNCE_NUM_GAMESTART_5; 
+                               case 4:  return ANNCE_NUM_GAMESTART_4; 
+                               case 3:  return ANNCE_NUM_GAMESTART_3; 
+                               case 2:  return ANNCE_NUM_GAMESTART_2; 
+                               case 1:  return ANNCE_NUM_GAMESTART_1; 
+                       }
+                       break;
+               }
+               case CNT_IDLE:
+               {
+                       switch(num)
+                       {
+                               case 10: return ANNCE_NUM_IDLE_10;
+                               case 9:  return ANNCE_NUM_IDLE_9; 
+                               case 8:  return ANNCE_NUM_IDLE_8; 
+                               case 7:  return ANNCE_NUM_IDLE_7; 
+                               case 6:  return ANNCE_NUM_IDLE_6; 
+                               case 5:  return ANNCE_NUM_IDLE_5; 
+                               case 4:  return ANNCE_NUM_IDLE_4; 
+                               case 3:  return ANNCE_NUM_IDLE_3; 
+                               case 2:  return ANNCE_NUM_IDLE_2; 
+                               case 1:  return ANNCE_NUM_IDLE_1; 
+                       }
+                       break;
+               }
+               case CNT_KILL:
+               {
+                       switch(num)
+                       {
+                               case 10: return ANNCE_NUM_KILL_10;
+                               case 9:  return ANNCE_NUM_KILL_9; 
+                               case 8:  return ANNCE_NUM_KILL_8; 
+                               case 7:  return ANNCE_NUM_KILL_7; 
+                               case 6:  return ANNCE_NUM_KILL_6; 
+                               case 5:  return ANNCE_NUM_KILL_5; 
+                               case 4:  return ANNCE_NUM_KILL_4; 
+                               case 3:  return ANNCE_NUM_KILL_3; 
+                               case 2:  return ANNCE_NUM_KILL_2; 
+                               case 1:  return ANNCE_NUM_KILL_1; 
+                       }
+                       break;
+               }
+               case CNT_RESPAWN:
+               {
+                       switch(num)
+                       {
+                               case 10: return ANNCE_NUM_RESPAWN_10;
+                               case 9:  return ANNCE_NUM_RESPAWN_9; 
+                               case 8:  return ANNCE_NUM_RESPAWN_8; 
+                               case 7:  return ANNCE_NUM_RESPAWN_7; 
+                               case 6:  return ANNCE_NUM_RESPAWN_6; 
+                               case 5:  return ANNCE_NUM_RESPAWN_5; 
+                               case 4:  return ANNCE_NUM_RESPAWN_4; 
+                               case 3:  return ANNCE_NUM_RESPAWN_3; 
+                               case 2:  return ANNCE_NUM_RESPAWN_2; 
+                               case 1:  return ANNCE_NUM_RESPAWN_1; 
+                       }
+                       break;
+               }
+               case CNT_ROUNDSTART:
+               {
+                       switch(num)
+                       {
+                               case 10: return ANNCE_NUM_ROUNDSTART_10;
+                               case 9:  return ANNCE_NUM_ROUNDSTART_9; 
+                               case 8:  return ANNCE_NUM_ROUNDSTART_8; 
+                               case 7:  return ANNCE_NUM_ROUNDSTART_7; 
+                               case 6:  return ANNCE_NUM_ROUNDSTART_6; 
+                               case 5:  return ANNCE_NUM_ROUNDSTART_5; 
+                               case 4:  return ANNCE_NUM_ROUNDSTART_4; 
+                               case 3:  return ANNCE_NUM_ROUNDSTART_3; 
+                               case 2:  return ANNCE_NUM_ROUNDSTART_2; 
+                               case 1:  return ANNCE_NUM_ROUNDSTART_1; 
+                       }
+                       break;
+               }
+               default:
+               {
+                       switch(num)
+                       {
+                               case 10: return ANNCE_NUM_10;
+                               case 9:  return ANNCE_NUM_9; 
+                               case 8:  return ANNCE_NUM_8; 
+                               case 7:  return ANNCE_NUM_7; 
+                               case 6:  return ANNCE_NUM_6; 
+                               case 5:  return ANNCE_NUM_5; 
+                               case 4:  return ANNCE_NUM_4; 
+                               case 3:  return ANNCE_NUM_3; 
+                               case 2:  return ANNCE_NUM_2; 
+                               case 1:  return ANNCE_NUM_1; 
+                       }
+                       break;
+               }
        }
-       
-       return total;
+       return NOTIF_ABORT; // abort sending if none of these numbers were right
 }
+#endif