-float trace_dphitcontents;
-.float dphitcontentsmask;
+#include "common.qh"
+
+#if defined(CSQC)
+ #include "../dpdefs/csprogsdefs.qh"
+ #include "../server/t_items.qh"
+#elif defined(MENUQC)
+#elif defined(SVQC)
+ #include "../common/weapons/all.qh"
+ #include "../dpdefs/dpextensions.qh"
+ #include "../dpdefs/progsdefs.qh"
+#endif
void WarpZone_Accumulator_Clear(entity acc)
{
}
.vector(vector, vector) camera_transform;
-var float autocvar_cl_warpzone_usetrace = 1;
+float autocvar_cl_warpzone_usetrace = 1;
vector WarpZone_camera_transform(vector org, vector ang)
{
vector vf, vr, vu;
sol = -1;
frac = 0;
i = 16;
- for(;;)
+ for (;;)
{
if(--i < 1)
{
}
WarpZone_MakeAllSolid();
i = 16;
- for(;;)
+ for (;;)
{
if(--i < 1)
{
boxparticles(WarpZone_TrailParticles_trace_callback_eff, WarpZone_TrailParticles_trace_callback_own, from, endpos, WarpZone_TrailParticles_trace_callback_own.velocity, WarpZone_TrailParticles_trace_callback_own.velocity, WarpZone_TrailParticles_trace_callback_f, WarpZone_TrailParticles_trace_callback_flags);
}
-void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, vector end, float f, float boxflags)
+void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, vector end, float f, int boxflags)
{
WarpZone_TrailParticles_trace_callback_own = own;
WarpZone_TrailParticles_trace_callback_eff = eff;
{
#ifdef KEEP_ROLL
float roll;
- roll = ang_z;
- ang_z = 0;
+ roll = ang.z;
+ ang.z = 0;
#endif
ang = AnglesTransform_ApplyToVAngles(wz.warpzone_transform, ang);
#ifdef KEEP_ROLL
- ang = AnglesTransform_Normalize(ang, TRUE);
+ ang = AnglesTransform_Normalize(ang, true);
ang = AnglesTransform_CancelRoll(ang);
- ang_z = roll;
+ ang.z = roll;
#else
- ang = AnglesTransform_Normalize(ang, FALSE);
+ ang = AnglesTransform_Normalize(ang, false);
#endif
return ang;
{
float roll;
- roll = ang_z;
- ang_z = 0;
+ roll = ang.z;
+ ang.z = 0;
ang = AnglesTransform_ApplyToVAngles(AnglesTransform_Invert(wz.warpzone_transform), ang);
- ang = AnglesTransform_Normalize(ang, TRUE);
+ ang = AnglesTransform_Normalize(ang, true);
ang = AnglesTransform_CancelRoll(ang);
- ang_z = roll;
+ ang.z = roll;
return ang;
}
vector WarpZoneLib_NearestPointOnBox(vector mi, vector ma, vector org)
{
vector nearest;
- nearest_x = bound(mi_x, org_x, ma_x);
- nearest_y = bound(mi_y, org_y, ma_y);
- nearest_z = bound(mi_z, org_z, ma_z);
+ nearest.x = bound(mi.x, org.x, ma.x);
+ nearest.y = bound(mi.y, org.y, ma.y);
+ nearest.z = bound(mi.z, org.z, ma.z);
return nearest;
}
+float WarpZoneLib_BadClassname(string myclassname)
+{
+ switch(myclassname)
+ {
+ case "weapon_info":
+ case "monster_info":
+ case "deathtype":
+ case "callback":
+ case "callbackchain":
+ case "weaponentity":
+ case "exteriorweaponentity":
+ case "csqc_score_team":
+ case "pingplreport":
+ case "ent_client_scoreinfo":
+ case "saved_cvar_value":
+ case "accuracy":
+ case "entcs_sender_v2":
+ case "entcs_receiver_v2":
+ case "clientinit":
+ case "sprite_waypoint":
+ case "waypoint":
+ case "gibsplash":
+ //case "net_linked": // actually some real entities are linked without classname, fail
+ case "":
+ return true;
+ }
+
+ if(startsWith(myclassname, "msg_"))
+ return true;
+
+ if(startsWith(myclassname, "target_"))
+ return true;
+
+ if(startsWith(myclassname, "info_"))
+ return true;
+
+ return false;
+}
+
.float WarpZone_findradius_hit;
.entity WarpZone_findradius_next;
void WarpZone_FindRadius_Recurse(vector org, float rad, vector org0, vector transform, vector shift, float needlineofsight)
for(e = e0; e; e = e.chain)
{
+ if(WarpZoneLib_BadClassname(e.classname))
+ continue;
p = WarpZoneLib_NearestPointOnBox(e.origin + e.mins, e.origin + e.maxs, org0);
if(needlineofsight)
{
}
for(e = wz; e; e = e.WarpZone_findradius_next)
{
+ if(WarpZoneLib_BadClassname(e.classname))
+ continue;
+
org0_new = WarpZone_TransformOrigin(e, org);
traceline(e.warpzone_targetorigin, org0_new, MOVE_NOMONSTERS, e);
org_new = trace_endpos;
o = e.origin;
traceline(o, o, MOVE_WORLDONLY, e);
if (trace_startsolid)
- return FALSE;
+ return false;
tracebox(o, e.mins, e.maxs, o, MOVE_WORLDONLY, e);
if (!trace_startsolid)
- return TRUE;
+ return true;
m0 = e.mins;
m1 = e.maxs;
if (trace_startsolid)
{
setorigin(e, o);
- return FALSE;
+ return false;
}
- return TRUE;
+ return true;
}