+#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"
#include "../dpdefs/dpextensions.qh"
#include "../warpzonelib/mathlib.qh"
#include "constants.qh"
- #include "util.qh"
#include "../server/autocvars.qh"
#include "../server/defs.qh"
#include "notifications.qh"
entity e;
e = start;
funcPre(pass, e);
- while(e.downleft)
+ while (e.(downleft))
{
- e = e.downleft;
+ e = e.(downleft);
funcPre(pass, e);
}
funcPost(pass, e);
while(e != start)
{
- if(e.right)
+ if (e.(right))
{
- e = e.right;
+ e = e.(right);
funcPre(pass, e);
- while(e.downleft)
+ while (e.(downleft))
{
- e = e.downleft;
+ e = e.(downleft);
funcPre(pass, e);
}
}
else
- e = e.up;
+ e = e.(up);
funcPost(pass, e);
}
}
return buf_create();
}
-float db_load(string pFilename)
+int db_load(string pFilename)
{
float db, fh, i, j, n;
string l;
}
// Multiline text file buffers
-float buf_load(string pFilename)
+int buf_load(string pFilename)
{
float buf, fh, i;
string l;
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
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");
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)
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,
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,
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,
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,
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,
MOVE_WORLDONLY,
world);
if(!trace_startsolid)
- mi_max_z = trace_endpos.z;
+ mi_max.z = trace_endpos.z;
}
}
}
// 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;
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;
}
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;
}
{
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;
}
}
}
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;
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;
}
}
#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;
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
#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
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;
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;
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;
get_model_parameters_modelname = m;
get_model_parameters_modelskin = sk;
+ string s, c;
while((s = fgets(fh)))
{
if(s == "")
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));
vector vec2(vector v)
{
- v_z = 0;
+ v.z = 0;
return v;
}
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;
}
return ((a * 22 + b) * 22 + c) * 22 + d;
}
-float lowestbit(int f)
+int lowestbit(int f)
{
f &= ~(f * 2);
f &= ~(f * 4);
#ifdef CSQC
entity ReadCSQCEntity()
{
- float f;
- f = ReadShort();
+ int f = ReadShort();
if(f == 0)
return world;
return findfloat(world, entnum, f);
// start with a 1-element queue
queue_start = queue_end = e;
- queue_end.fld = world;
+ queue_end.(fld) = world;
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;
if(iscon(t, queue_start, pass))
{
// it is connected? ADD IT. It will look for neighbors soon too.
- queue_end.fld = t;
+ queue_end.(fld) = t;
queue_end = t;
- queue_end.fld = world;
+ queue_end.(fld) = world;
queue_end.FindConnectedComponent_processing = 1;
}
}
}
// unmark
- for(queue_start = e; queue_start; queue_start = queue_start.fld)
+ for (queue_start = e; queue_start; queue_start = queue_start.(fld))
queue_start.FindConnectedComponent_processing = 0;
}
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;
}
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);
dur = frameduration(e.modelindex, a.x);
}
if(dur > 0)
- a_z = 1.0 / dur;
+ a.z = 1.0 / dur;
}
return a;
}