X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil.qc;h=f47bcf15ab0a8da92700c6b664c87e2a2e37c8ba;hb=f19182bb895ceff0b85a38d663576cc3cff873a5;hp=320d6a09665914ead0ac147da7a35383413b78f9;hpb=35e8f712933b0ebf9b163b7289cf975825b33803;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/util.qc b/qcsrc/common/util.qc index 320d6a096..f47bcf15a 100644 --- a/qcsrc/common/util.qc +++ b/qcsrc/common/util.qc @@ -1,9 +1,10 @@ +#include "util.qh" + #if defined(CSQC) #include "../dpdefs/csprogsdefs.qh" #include "../client/defs.qh" #include "constants.qh" #include "../warpzonelib/mathlib.qh" - #include "util.qh" #include "mapinfo.qh" #include "notifications.qh" #include "deathtypes.qh" @@ -11,10 +12,8 @@ #elif defined(SVQC) #include "../dpdefs/progsdefs.qh" #include "../dpdefs/dpextensions.qh" - #include "../server/sys-post.qh" #include "../warpzonelib/mathlib.qh" #include "constants.qh" - #include "util.qh" #include "../server/autocvars.qh" #include "../server/defs.qh" #include "notifications.qh" @@ -304,7 +303,7 @@ int db_create() return buf_create(); } -float db_load(string pFilename) +int db_load(string pFilename) { float db, fh, i, j, n; string l; @@ -396,7 +395,7 @@ void db_test() } // Multiline text file buffers -float buf_load(string pFilename) +int buf_load(string pFilename) { float buf, fh, i; string l; @@ -501,19 +500,6 @@ string ScoreString(int pFlags, float pValue) return valstr; } -float dotproduct(vector a, vector b) -{ - return a.x * b.x + a.y * b.y + a.z * b.z; -} - -vector cross(vector a, vector b) -{ - return - '1 0 0' * (a.y * b.z - a.z * b.y) - + '0 1 0' * (a.z * b.x - a.x * b.z) - + '0 0 1' * (a.x * b.y - a.y * b.x); -} - // compressed vector format: // like MD3, just even shorter // 4 bit pitch (16 angles), 0 is -90, 8 is 0, 16 would be 90 @@ -568,20 +554,20 @@ vector decompressShortVector(int data) if(p == 0) { - out_x = 0; - out_y = 0; + out.x = 0; + out.y = 0; if(y == 31) - out_z = -1; + out.z = -1; else - out_z = +1; + out.z = +1; } else { y = .19634954084936207740 * y; p = .19634954084936207740 * p - 1.57079632679489661922; - out_x = cos(y) * cos(p); - out_y = sin(y) * cos(p); - out_z = -sin(p); + out.x = cos(y) * cos(p); + out.y = sin(y) * cos(p); + out.z = -sin(p); } //print("decompressed: ", vtos(out), "\n"); @@ -597,7 +583,7 @@ float compressShortVector(vector vec) return 0; //print("compress: ", vtos(vec), "\n"); ang = vectoangles(vec); - ang_x = -ang.x; + ang.x = -ang.x; if(ang.x < -90) ang.x += 360; if(ang.x < -90 && ang.x > +90) @@ -804,7 +790,7 @@ void get_mi_min_max(float mode) MOVE_WORLDONLY, world); if(!trace_startsolid) - mi_min_x = trace_endpos.x; + mi_min.x = trace_endpos.x; tracebox('0 1 0' * mi.y, '1 0 0' * mi.x + '0 0 1' * mi.z, @@ -813,7 +799,7 @@ void get_mi_min_max(float mode) MOVE_WORLDONLY, world); if(!trace_startsolid) - mi_min_y = trace_endpos.y; + mi_min.y = trace_endpos.y; tracebox('0 0 1' * mi.z, '1 0 0' * mi.x + '0 1 0' * mi.y, @@ -822,7 +808,7 @@ void get_mi_min_max(float mode) MOVE_WORLDONLY, world); if(!trace_startsolid) - mi_min_z = trace_endpos.z; + mi_min.z = trace_endpos.z; tracebox('1 0 0' * ma.x, '0 1 0' * mi.y + '0 0 1' * mi.z, @@ -831,7 +817,7 @@ void get_mi_min_max(float mode) MOVE_WORLDONLY, world); if(!trace_startsolid) - mi_max_x = trace_endpos.x; + mi_max.x = trace_endpos.x; tracebox('0 1 0' * ma.y, '1 0 0' * mi.x + '0 0 1' * mi.z, @@ -840,7 +826,7 @@ void get_mi_min_max(float mode) MOVE_WORLDONLY, world); if(!trace_startsolid) - mi_max_y = trace_endpos.y; + mi_max.y = trace_endpos.y; tracebox('0 0 1' * ma.z, '1 0 0' * mi.x + '0 1 0' * mi.y, @@ -849,7 +835,7 @@ void get_mi_min_max(float mode) MOVE_WORLDONLY, world); if(!trace_startsolid) - mi_max_z = trace_endpos.z; + mi_max.z = trace_endpos.z; } } } @@ -1079,45 +1065,45 @@ vector hue_mi_ma_to_rgb(float hue, float mi, float ma) // hue = 60 * (rgb_y - rgb_z) / (ma - mi); if(hue <= 1) { - rgb_x = ma; - rgb_y = hue * (ma - mi) + mi; - rgb_z = mi; + rgb.x = ma; + rgb.y = hue * (ma - mi) + mi; + rgb.z = mi; } //else if(ma == rgb_y) // hue = 60 * (rgb_z - rgb_x) / (ma - mi) + 120; else if(hue <= 2) { - rgb_x = (2 - hue) * (ma - mi) + mi; - rgb_y = ma; - rgb_z = mi; + rgb.x = (2 - hue) * (ma - mi) + mi; + rgb.y = ma; + rgb.z = mi; } else if(hue <= 3) { - rgb_x = mi; - rgb_y = ma; - rgb_z = (hue - 2) * (ma - mi) + mi; + rgb.x = mi; + rgb.y = ma; + rgb.z = (hue - 2) * (ma - mi) + mi; } //else // if(ma == rgb_z) // hue = 60 * (rgb_x - rgb_y) / (ma - mi) + 240; else if(hue <= 4) { - rgb_x = mi; - rgb_y = (4 - hue) * (ma - mi) + mi; - rgb_z = ma; + rgb.x = mi; + rgb.y = (4 - hue) * (ma - mi) + mi; + rgb.z = ma; } else if(hue <= 5) { - rgb_x = (hue - 4) * (ma - mi) + mi; - rgb_y = mi; - rgb_z = ma; + rgb.x = (hue - 4) * (ma - mi) + mi; + rgb.y = mi; + rgb.z = ma; } //else if(ma == rgb_x) // hue = 60 * (rgb_y - rgb_z) / (ma - mi); else // if(hue <= 6) { - rgb_x = ma; - rgb_y = mi; - rgb_z = (6 - hue) * (ma - mi) + mi; + rgb.x = ma; + rgb.y = mi; + rgb.z = (6 - hue) * (ma - mi) + mi; } return rgb; @@ -1131,13 +1117,13 @@ vector rgb_to_hsv(vector rgb) mi = min(rgb.x, rgb.y, rgb.z); ma = max(rgb.x, rgb.y, rgb.z); - hsv_x = rgb_mi_ma_to_hue(rgb, mi, ma); - hsv_z = ma; + hsv.x = rgb_mi_ma_to_hue(rgb, mi, ma); + hsv.z = ma; if(ma == 0) - hsv_y = 0; + hsv.y = 0; else - hsv_y = 1 - mi/ma; + hsv.y = 1 - mi/ma; return hsv; } @@ -1155,15 +1141,15 @@ vector rgb_to_hsl(vector rgb) mi = min(rgb.x, rgb.y, rgb.z); ma = max(rgb.x, rgb.y, rgb.z); - hsl_x = rgb_mi_ma_to_hue(rgb, mi, ma); + hsl.x = rgb_mi_ma_to_hue(rgb, mi, ma); - hsl_z = 0.5 * (mi + ma); + hsl.z = 0.5 * (mi + ma); if(mi == ma) - hsl_y = 0; + hsl.y = 0; else if(hsl.z <= 0.5) - hsl_y = (ma - mi) / (2*hsl.z); + hsl.y = (ma - mi) / (2*hsl.z); else // if(hsl_z > 0.5) - hsl_y = (ma - mi) / (2 - 2*hsl.z); + hsl.y = (ma - mi) / (2 - 2*hsl.z); return hsl; } @@ -1593,15 +1579,15 @@ vector solve_quadratic(float a, float b, float c) // ax^2 + bx + c = 0 { if(b != 0) { - v_x = v_y = -c / b; - v_z = 1; + v.x = v.y = -c / b; + v.z = 1; } else { if(c == 0) { // actually, every number solves the equation! - v_z = 1; + v.z = 1; } } } @@ -1613,26 +1599,26 @@ vector solve_quadratic(float a, float b, float c) // ax^2 + bx + c = 0 D = sqrt(D); if(a > 0) // put the smaller solution first { - v_x = ((-b)-D) / (2*a); - v_y = ((-b)+D) / (2*a); + v.x = ((-b)-D) / (2*a); + v.y = ((-b)+D) / (2*a); } else { - v_x = (-b+D) / (2*a); - v_y = (-b-D) / (2*a); + v.x = (-b+D) / (2*a); + v.y = (-b-D) / (2*a); } - v_z = 1; + v.z = 1; } else { // complex solutions! D = sqrt(-D); - v_x = -b / (2*a); + v.x = -b / (2*a); if(a > 0) - v_y = D / (2*a); + v.y = D / (2*a); else - v_y = -D / (2*a); - v_z = 0; + v.y = -D / (2*a); + v.z = 0; } } return v; @@ -1767,9 +1753,9 @@ float compressShotOrigin(vector v) vector decompressShotOrigin(int f) { vector v; - v_x = ((f & 0xFF0000) / 0x10000) / 2; - v_y = ((f & 0xFF00) / 0x100 - 128) / 4; - v_z = ((f & 0xFF) - 128) / 4; + v.x = ((f & 0xFF0000) / 0x10000) / 2; + v.y = ((f & 0xFF00) / 0x100 - 128) / 4; + v.z = ((f & 0xFF) - 128) / 4; return v; } @@ -1857,7 +1843,7 @@ void RandomSelection_Add(entity e, float f, string s, float weight, float priori } #ifndef MENUQC -vector healtharmor_maxdamage(float h, float a, float armorblock, float deathtype) +vector healtharmor_maxdamage(float h, float a, float armorblock, int deathtype) { // NOTE: we'll always choose the SMALLER value... float healthdamage, armordamage, armorideal; @@ -1867,28 +1853,28 @@ vector healtharmor_maxdamage(float h, float a, float armorblock, float deathtype healthdamage = (h - 1) / (1 - armorblock); // damage we can take if we could use more health armordamage = a + (h - 1); // damage we can take if we could use more armor armorideal = healthdamage * armorblock; - v_y = armorideal; + v.y = armorideal; if(armordamage < healthdamage) { - v_x = armordamage; - v_z = 1; + v.x = armordamage; + v.z = 1; } else { - v_x = healthdamage; - v_z = 0; + v.x = healthdamage; + v.z = 0; } return v; } -vector healtharmor_applydamage(float a, float armorblock, float deathtype, float damage) +vector healtharmor_applydamage(float a, float armorblock, int deathtype, float damage) { vector v; if (deathtype == DEATH_DROWN) // Why should armor help here... armorblock = 0; - v_y = bound(0, damage * armorblock, a); // save - v_x = bound(0, damage - v.y, damage); // take - v_z = 0; + v.y = bound(0, damage * armorblock, a); // save + v.x = bound(0, damage - v.y, damage); // take + v.z = 0; return v; } #endif @@ -1909,25 +1895,24 @@ string getcurrentmod() #ifdef CSQC int ReadInt24_t() { - float v; - v = ReadShort() * 256; // note: this is signed + int v = ReadShort() * 256; // note: this is signed v += ReadByte(); // note: this is unsigned return v; } vector ReadInt48_t() { vector v; - v_x = ReadInt24_t(); - v_y = ReadInt24_t(); - v_z = 0; + v.x = ReadInt24_t(); + v.y = ReadInt24_t(); + v.z = 0; return v; } vector ReadInt72_t() { vector v; - v_x = ReadInt24_t(); - v_y = ReadInt24_t(); - v_z = ReadInt24_t(); + v.x = ReadInt24_t(); + v.y = ReadInt24_t(); + v.z = ReadInt24_t(); return v; } #else @@ -2057,9 +2042,6 @@ string get_model_datafilename(string m, float sk, string fil) float get_model_parameters(string m, float sk) { - string fn, s, c; - float fh, i; - get_model_parameters_modelname = string_null; get_model_parameters_modelskin = -1; get_model_parameters_name = string_null; @@ -2070,7 +2052,7 @@ float get_model_parameters(string m, float sk) 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) + for(int i = 0; i < MAX_AIM_BONES; ++i) { get_model_parameters_bone_aim[i] = string_null; get_model_parameters_bone_aimweight[i] = 0; @@ -2093,8 +2075,8 @@ float get_model_parameters(string m, float sk) m = substring(m, 0, -7); } - fn = get_model_datafilename(m, sk, "txt"); - fh = fopen(fn, FILE_READ); + string fn = get_model_datafilename(m, sk, "txt"); + int fh = fopen(fn, FILE_READ); if(fh < 0) { sk = 0; @@ -2106,6 +2088,7 @@ float get_model_parameters(string m, float sk) get_model_parameters_modelname = m; get_model_parameters_modelskin = sk; + string s, c; while((s = fgets(fh))) { if(s == "") @@ -2137,7 +2120,7 @@ float get_model_parameters(string m, float sk) get_model_parameters_bone_upperbody = s; if(c == "bone_weapon") get_model_parameters_bone_weapon = s; - for(i = 0; i < MAX_AIM_BONES; ++i) + for(int i = 0; i < MAX_AIM_BONES; ++i) if(c == strcat("bone_aim", ftos(i))) { get_model_parameters_bone_aimweight[i] = stof(car(s)); @@ -2162,7 +2145,7 @@ float get_model_parameters(string m, float sk) vector vec2(vector v) { - v_z = 0; + v.z = 0; return v; } @@ -2174,9 +2157,9 @@ vector NearestPointOnBox(entity box, vector org) m1 = box.mins + box.origin; m2 = box.maxs + box.origin; - nearest_x = bound(m1_x, org.x, m2_x); - nearest_y = bound(m1_y, org.y, m2_y); - nearest_z = bound(m1_z, org.z, m2_z); + nearest.x = bound(m1_x, org.x, m2_x); + nearest.y = bound(m1_y, org.y, m2_y); + nearest.z = bound(m1_z, org.z, m2_z); return nearest; } @@ -2364,8 +2347,7 @@ float InterpretBoolean(string input) #ifdef CSQC entity ReadCSQCEntity() { - float f; - f = ReadShort(); + int f = ReadShort(); if(f == 0) return world; return findfloat(world, entnum, f); @@ -2561,7 +2543,7 @@ void FindConnectedComponent(entity e, .entity fld, findNextEntityNearFunction_t queue_end.FindConnectedComponent_processing = 1; // for each queued item: - for(0; queue_start; queue_start = queue_start.fld) + for (; queue_start; queue_start = queue_start.fld) { // find all neighbors of queue_start entity t; @@ -2588,7 +2570,7 @@ void FindConnectedComponent(entity e, .entity fld, findNextEntityNearFunction_t #ifdef SVQC vector combine_to_vector(float x, float y, float z) { - vector result; result_x = x; result_y = y; result_z = z; + vector result; result.x = x; result.y = y; result.z = z; return result; } @@ -2657,9 +2639,9 @@ string CCR(string input) vector vec3(float x, float y, float z) { vector v; - v_x = x; - v_y = y; - v_z = z; + v.x = x; + v.y = y; + v.z = z; return v; } @@ -2667,7 +2649,7 @@ vector vec3(float x, float y, float z) vector animfixfps(entity e, vector a, vector b) { // multi-frame anim: keep as-is - if(a_y == 1) + if(a.y == 1) { float dur; dur = frameduration(e.modelindex, a.x); @@ -2677,7 +2659,7 @@ vector animfixfps(entity e, vector a, vector b) dur = frameduration(e.modelindex, a.x); } if(dur > 0) - a_z = 1.0 / dur; + a.z = 1.0 / dur; } return a; }