Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
common.qc File Reference
#include "common.qh"
#include <common/checkextension.qh>
#include <client/items/items.qh>
Include dependency graph for common.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void WarpZone_Accumulator_Add (entity acc, entity wz)
void WarpZone_Accumulator_AddInverse (entity acc, entity wz)
void WarpZone_Accumulator_AddInverseTransform (entity acc, vector t, vector s)
void WarpZone_Accumulator_AddTransform (entity acc, vector t, vector s)
void WarpZone_Accumulator_Clear (entity acc)
vector WarpZone_Camera_camera_transform (entity this, vector org, vector ang)
void WarpZone_Camera_SetUp (entity e, vector my_org, vector my_ang)
vector WarpZone_camera_transform (entity this, vector org, vector ang)
entity WarpZone_Find (vector mi, vector ma)
entity WarpZone_FindRadius (vector org, float rad, bool needlineofsight)
void WarpZone_FindRadius_Recurse (vector org, float rad, vector org0, vector transform, vector shift, bool needlineofsight)
void WarpZone_MakeAllOther ()
void WarpZone_MakeAllSolid ()
float WarpZone_PlaneDist (entity wz, vector v)
void WarpZone_RefSys_Add (entity me, entity wz)
void WarpZone_RefSys_AddIncrementally (entity me, entity ref)
void WarpZone_RefSys_AddInverse (entity me, entity wz)
void WarpZone_RefSys_AddInverseTransform (entity me, vector t, vector s)
void WarpZone_RefSys_AddTransform (entity me, vector t, vector s)
void WarpZone_RefSys_BeginAddingIncrementally (entity me, entity ref)
void WarpZone_RefSys_CheckCreate (entity me)
void WarpZone_RefSys_Clear (entity me)
void WarpZone_RefSys_Copy (entity me, entity from)
void WarpZone_RefSys_GC (entity this)
entity WarpZone_RefSys_SpawnSameRefSys (entity me)
vector WarpZone_RefSys_TransformAngles (entity from, entity to, vector ang)
vector WarpZone_RefSys_TransformOrigin (entity from, entity to, vector org)
vector WarpZone_RefSys_TransformVAngles (entity from, entity to, vector ang)
vector WarpZone_RefSys_TransformVelocity (entity from, entity to, vector vel)
void WarpZone_SetUp (entity e, vector my_org, vector my_ang, vector other_org, vector other_ang)
float WarpZone_TargetPlaneDist (entity wz, vector v)
void WarpZone_Trace_AddTransform (entity wz)
void WarpZone_Trace_InitTransform ()
void WarpZone_TraceBox (vector org, vector mi, vector ma, vector end, float nomonsters, entity forent)
void WarpZone_TraceBox_ThroughZone (vector org, vector mi, vector ma, vector end, float nomonsters, entity forent, entity zone, WarpZone_trace_callback_t cb)
void WarpZone_TraceLine (vector org, vector end, float nomonsters, entity forent)
void WarpZone_TraceToss (entity e, entity forent)
void WarpZone_TraceToss_ThroughZone (entity e, entity forent, entity zone, WarpZone_trace_callback_t cb)
void WarpZone_TrailParticles (entity own, float eff, vector org, vector end)
void WarpZone_TrailParticles_trace_callback (vector from, vector endpos, vector to)
void WarpZone_TrailParticles_WithMultiplier (entity own, float eff, vector org, vector end, float f, int boxflags)
void WarpZone_TrailParticles_WithMultiplier_trace_callback (vector from, vector endpos, vector to)
vector WarpZone_TransformAngles (entity wz, vector v)
vector WarpZone_TransformOrigin (entity wz, vector v)
vector WarpZone_TransformVAngles (entity wz, vector ang)
vector WarpZone_TransformVelocity (entity wz, vector v)
vector WarpZone_UnTransformAngles (entity wz, vector v)
vector WarpZone_UnTransformOrigin (entity wz, vector v)
vector WarpZone_UnTransformVAngles (entity wz, vector ang)
vector WarpZone_UnTransformVelocity (entity wz, vector v)
bool WarpZoneLib_BadEntity (entity e)
float WarpZoneLib_BoxTouchesBrush (vector mi, vector ma, entity e, entity ig)
float WarpZoneLib_BoxTouchesBrush_Recurse (vector mi, vector ma, entity e, entity ig)
bool WarpZoneLib_ExactTrigger_Touch (entity this, entity toucher, bool touchfunc)
int WarpZoneLib_MoveOutOfSolid (entity e)
void WarpZoneLib_MoveOutOfSolid_Expand (entity e, vector by)
vector WarpZoneLib_NearestPointOnBox (vector mi, vector ma, vector org)

Variables

entity enemy
float WarpZone_findradius_hit
entity WarpZone_findradius_next
entity WarpZone_refsys
vector WarpZone_refsys_incremental_shift
vector WarpZone_refsys_incremental_transform
float WarpZone_TrailParticles_trace_callback_eff
float WarpZone_TrailParticles_trace_callback_f
float WarpZone_TrailParticles_trace_callback_flags
entity WarpZone_TrailParticles_trace_callback_own

Function Documentation

◆ WarpZone_Accumulator_Add()

void WarpZone_Accumulator_Add ( entity acc,
entity wz )

Definition at line 25 of file common.qc.

26{
27 WarpZone_Accumulator_AddTransform(acc, wz.warpzone_transform, wz.warpzone_shift);
28}
void WarpZone_Accumulator_AddTransform(entity acc, vector t, vector s)
Definition common.qc:17

References entity(), and WarpZone_Accumulator_AddTransform().

Referenced by WarpZone_RefSys_AddIncrementally(), and WarpZone_Trace_AddTransform().

◆ WarpZone_Accumulator_AddInverse()

void WarpZone_Accumulator_AddInverse ( entity acc,
entity wz )

Definition at line 37 of file common.qc.

38{
39 WarpZone_Accumulator_AddInverseTransform(acc, wz.warpzone_transform, wz.warpzone_shift);
40}
void WarpZone_Accumulator_AddInverseTransform(entity acc, vector t, vector s)
Definition common.qc:29

References entity(), and WarpZone_Accumulator_AddInverseTransform().

◆ WarpZone_Accumulator_AddInverseTransform()

void WarpZone_Accumulator_AddInverseTransform ( entity acc,
vector t,
vector s )

Definition at line 29 of file common.qc.

30{
31 vector tt, ss;
35 // yes, this probably can be done simpler... but this way is "obvious" :)
36}
vector AnglesTransform_Invert(vector transform)
vector AnglesTransform_PrePostShift_GetPostShift(vector sf, vector t, vector st)
vector
Definition self.qh:92

References AnglesTransform_Invert(), AnglesTransform_PrePostShift_GetPostShift(), entity(), vector, and WarpZone_Accumulator_AddTransform().

Referenced by WarpZone_Accumulator_AddInverse(), WarpZone_RefSys_AddIncrementally(), and WarpZone_RefSys_AddInverseTransform().

◆ WarpZone_Accumulator_AddTransform()

void WarpZone_Accumulator_AddTransform ( entity acc,
vector t,
vector s )

Definition at line 17 of file common.qc.

18{
19 vector tr, st;
20 tr = AnglesTransform_Multiply(t, acc.warpzone_transform);
21 st = AnglesTransform_Multiply_GetPostShift(t, s, acc.warpzone_transform, acc.warpzone_shift);
22 acc.warpzone_transform = tr;
23 acc.warpzone_shift = st;
24}
vector AnglesTransform_Multiply_GetPostShift(vector t0, vector st0, vector t1, vector st1)
vector AnglesTransform_Multiply(vector t1, vector t2)

References AnglesTransform_Multiply(), AnglesTransform_Multiply_GetPostShift(), entity(), and vector.

Referenced by WarpZone_Accumulator_Add(), WarpZone_Accumulator_AddInverseTransform(), and WarpZone_RefSys_AddTransform().

◆ WarpZone_Accumulator_Clear()

void WarpZone_Accumulator_Clear ( entity acc)

Definition at line 12 of file common.qc.

13{
14 acc.warpzone_transform = '0 0 0';
15 acc.warpzone_shift = '0 0 0';
16}

References entity().

Referenced by WarpZone_RefSys_CheckCreate(), and WarpZone_Trace_InitTransform().

◆ WarpZone_Camera_camera_transform()

vector WarpZone_Camera_camera_transform ( entity this,
vector org,
vector ang )

Definition at line 80 of file common.qc.

81{
82 // a fixed camera view
83 if(this.warpzone_fadestart)
84 if(vdist(org - this.origin - 0.5 * (this.mins + this.maxs), >, this.warpzone_fadeend + 400))
85 return org;
86 // don't transform if zone faded out (plus 400qu safety margin for typical speeds and latencies)
87 // unneeded on client, on server this helps a lot
90 return this.warpzone_origin;
91}
vector mins
vector trace_endpos
vector maxs
vector origin
float warpzone_fadestart
Definition common.qh:21
float warpzone_fadeend
Definition common.qh:22
vector warpzone_origin
Definition common.qh:14
vector warpzone_angles
Definition common.qh:15
#define makevectors
Definition post.qh:21
vector org
Definition self.qh:92
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
Definition vector.qh:8

References ang, entity(), makevectors, maxs, mins, org, origin, trace_endpos, vdist, vector, warpzone_angles, warpzone_fadeend, warpzone_fadestart, and warpzone_origin.

Referenced by WarpZone_Camera_SetUp().

◆ WarpZone_Camera_SetUp()

void WarpZone_Camera_SetUp ( entity e,
vector my_org,
vector my_ang )

Definition at line 93 of file common.qc.

94{
95 e.warpzone_origin = my_org;
96 e.warpzone_angles = my_ang;
98}
vector WarpZone_Camera_camera_transform(entity this, vector org, vector ang)
Definition common.qc:80
#define setcamera_transform(e, f)
Definition self.qh:93

References entity(), setcamera_transform, vector, and WarpZone_Camera_camera_transform().

Referenced by NET_HANDLE(), WarpZoneCamera_InitStep_FindTarget(), and WarpZoneCamera_Think().

◆ WarpZone_camera_transform()

vector WarpZone_camera_transform ( entity this,
vector org,
vector ang )

Definition at line 42 of file common.qc.

43{
44 vector vf, vr, vu;
45 if(this.warpzone_fadestart)
46 if(vdist(org - this.origin - 0.5 * (this.mins + this.maxs), >, this.warpzone_fadeend + 400))
47 return org;
48 // don't transform if zone faded out (plus 400qu safety margin for typical speeds and latencies)
49 // unneeded on client, on server this helps a lot
50 vf = v_forward;
51 vr = v_right;
52 vu = v_up;
54 vf = WarpZone_TransformVelocity(this, vf);
55 vr = WarpZone_TransformVelocity(this, vr);
56 vu = WarpZone_TransformVelocity(this, vu);
58 v_forward = vf;
59 v_right = vr;
60 v_up = vu;
61 return org;
62}
vector v_up
const float MOVE_NOMONSTERS
vector v_right
vector v_forward
vector WarpZone_TransformVelocity(entity wz, vector v)
Definition common.qc:514
vector WarpZone_TransformOrigin(entity wz, vector v)
Definition common.qc:509
vector warpzone_targetorigin
Definition common.qh:17
#define NULL
Definition post.qh:14

References ang, entity(), maxs, mins, MOVE_NOMONSTERS, NULL, org, origin, v_forward, v_right, v_up, vdist, vector, warpzone_fadeend, warpzone_fadestart, warpzone_targetorigin, WarpZone_TransformOrigin(), and WarpZone_TransformVelocity().

Referenced by WarpZone_SetUp().

◆ WarpZone_Find()

entity WarpZone_Find ( vector mi,
vector ma )

Definition at line 167 of file common.qc.

168{
169 // if we are near any warpzone planes - MOVE AWAY (work around nearclip)
171 return NULL;
173 {
174 return it;
175 });
176 return NULL;
177}
#define IL_EACH(this, cond, body)
float WarpZoneLib_BoxTouchesBrush(vector mi, vector ma, entity e, entity ig)
Definition common.qc:133
IntrusiveList g_warpzones
Definition common.qh:6
float warpzone_warpzones_exist
Definition common.qh:9

References entity(), g_warpzones, IL_EACH, NULL, vector, warpzone_warpzones_exist, and WarpZoneLib_BoxTouchesBrush().

Referenced by WarpZone_FixNearClip(), WarpZone_FixPMove(), WarpZone_FixView(), WarpZone_StartFrame(), WarpZone_TraceBox_ThroughZone(), and WarpZone_TraceToss_ThroughZone().

◆ WarpZone_FindRadius()

entity WarpZone_FindRadius ( vector org,
float rad,
bool needlineofsight )

Definition at line 686 of file common.qc.

687{
688 // FIXME: why can't we do this? (sometimes finds nothing, breaking explosions)
689 // if (!warpzone_warpzones_exist && !needlineofsight) return findradius(org, rad);
690 WarpZone_FindRadius_Recurse(org, rad, org, '0 0 0', '0 0 0', needlineofsight);
692 FOREACH_LIST(list, chain, true, it.WarpZone_findradius_hit = 0);
693 return list_first;
694}
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
entity chain
#define FOREACH_LIST(list, next, cond, body)
Definition iter.qh:21
void WarpZone_FindRadius_Recurse(vector org, float rad, vector org0, vector transform, vector shift, bool needlineofsight)
Definition common.qc:620
float WarpZone_findradius_hit
Definition common.qc:618
entity findchainfloat(.float field, float match)

References chain, entity(), findchainfloat(), FOREACH_LIST, org, vector, WarpZone_findradius_hit, and WarpZone_FindRadius_Recurse().

Referenced by MUTATOR_HOOKFUNCTION(), MUTATOR_HOOKFUNCTION(), napalm_damage(), PlayerUseKey(), RadiusDamageForSource(), W_Crylink_Touch_WouldHitFriendly(), W_Devastator_DoRemoteExplode(), W_Electro_Bolt_Think(), W_Electro_TriggerCombo(), W_Fireball_LaserPlay(), W_MineLayer_ProximityExplode(), W_MineLayer_RemoteExplode(), and W_MineLayer_Think().

◆ WarpZone_FindRadius_Recurse()

void WarpZone_FindRadius_Recurse ( vector org,
float rad,
vector org0,
vector transform,
vector shift,
bool needlineofsight )
Parameters
orgblast origin of current search
org0original blast origin
transformhow to untransform (victim to blast system)

Definition at line 620 of file common.qc.

630{
631 if (rad <= 0) return;
632 entity wz = NULL;
634 vector p = WarpZoneLib_NearestPointOnBox(it.origin + it.mins, it.origin + it.maxs, org0);
635 if (needlineofsight)
636 {
637 traceline(org, p, MOVE_NOMONSTERS, it);
638 if (trace_fraction < 1) continue;
639 }
640 if (!it.WarpZone_findradius_hit || vlen2(it.WarpZone_findradius_dist) > vlen2(org0 - p))
641 {
642 it.WarpZone_findradius_nearest = p;
643 it.WarpZone_findradius_dist = org0 - p;
644 it.WarpZone_findradius_findorigin = org;
645 it.WarpZone_findradius_findradius = rad;
646 if (it.classname == "warpzone_refsys")
647 {
648 // ignore, especially: do not overwrite the refsys parameters
649 }
650 else if (it.classname == "trigger_warpzone")
651 {
652 it.WarpZone_findradius_next = wz;
653 wz = it;
654 it.WarpZone_findradius_hit = 1;
655 it.enemy.WarpZone_findradius_dist = '0 0 0'; // we don't want to go through this zone ever again
656 it.enemy.WarpZone_findradius_hit = 1;
657 }
658 else
659 {
660 it.warpzone_transform = transform;
661 it.warpzone_shift = shift;
662 it.WarpZone_findradius_hit = 1;
663 }
664 }
665 });
666 for(entity e = wz; e; e = e.WarpZone_findradius_next)
667 {
668 if (WarpZoneLib_BadEntity(e)) continue;
669
670 vector org0_new = WarpZone_TransformOrigin(e, org);
671 traceline(e.warpzone_targetorigin, org0_new, MOVE_NOMONSTERS, e);
672 vector org_new = trace_endpos;
673
674 vector transform_new = AnglesTransform_Multiply(e.warpzone_transform, transform);
675 vector shift_new = AnglesTransform_Multiply_GetPostShift(e.warpzone_transform, e.warpzone_shift, transform, shift);
677 org_new,
678 bound(0, rad - vlen(org_new - org0_new), rad - 8),
679 org0_new,
680 transform_new, shift_new,
681 needlineofsight);
682 e.WarpZone_findradius_hit = 0;
683 e.enemy.WarpZone_findradius_hit = 0;
684 }
685}
float trace_fraction
#define FOREACH_ENTITY_RADIUS(org, dist, cond, body)
Definition iter.qh:160
bool WarpZoneLib_BadEntity(entity e)
Definition common.qc:591
vector WarpZoneLib_NearestPointOnBox(vector mi, vector ma, vector org)
Definition common.qc:581
float bound(float min, float value, float max)
float vlen(vector v)
#define vlen2(v)
Definition vector.qh:4

References AnglesTransform_Multiply(), AnglesTransform_Multiply_GetPostShift(), bound(), entity(), FOREACH_ENTITY_RADIUS, MOVE_NOMONSTERS, NULL, org, trace_endpos, trace_fraction, vector, vlen(), vlen2, WarpZone_FindRadius_Recurse(), WarpZone_TransformOrigin(), WarpZoneLib_BadEntity(), and WarpZoneLib_NearestPointOnBox().

Referenced by WarpZone_FindRadius(), and WarpZone_FindRadius_Recurse().

◆ WarpZone_MakeAllOther()

void WarpZone_MakeAllOther ( )

Definition at line 189 of file common.qc.

190{
192 return;
193 IL_EACH(g_warpzones, true,
194 {
195 it.solid = SOLID_TRIGGER;
196 });
197}
const float SOLID_TRIGGER

References g_warpzones, IL_EACH, SOLID_TRIGGER, and warpzone_warpzones_exist.

Referenced by WarpZone_TraceBox_ThroughZone(), and WarpZone_TraceToss_ThroughZone().

◆ WarpZone_MakeAllSolid()

void WarpZone_MakeAllSolid ( )

Definition at line 179 of file common.qc.

180{
182 return;
183 IL_EACH(g_warpzones, true,
184 {
185 it.solid = SOLID_BSP;
186 });
187}
const float SOLID_BSP

References g_warpzones, IL_EACH, SOLID_BSP, and warpzone_warpzones_exist.

Referenced by WarpZone_TraceBox_ThroughZone(), and WarpZone_TraceToss_ThroughZone().

◆ WarpZone_PlaneDist()

float WarpZone_PlaneDist ( entity wz,
vector v )

Definition at line 499 of file common.qc.

500{
501 return (v - wz.warpzone_origin) * wz.warpzone_forward;
502}

References entity(), and vector.

Referenced by WarpZone_FixNearClip(), WarpZone_StartFrame(), and WarpZone_Touch().

◆ WarpZone_RefSys_Add()

void WarpZone_RefSys_Add ( entity me,
entity wz )

Definition at line 731 of file common.qc.

732{
733 WarpZone_RefSys_AddTransform(me, wz.warpzone_transform, wz.warpzone_shift);
734}
void WarpZone_RefSys_AddTransform(entity me, vector t, vector s)
Definition common.qc:723

References entity(), and WarpZone_RefSys_AddTransform().

Referenced by WarpZone_Teleport().

◆ WarpZone_RefSys_AddIncrementally()

void WarpZone_RefSys_AddIncrementally ( entity me,
entity ref )

Definition at line 749 of file common.qc.

750{
751 //vector t, s;
752 if(me.WarpZone_refsys_incremental_transform == ref.WarpZone_refsys.warpzone_transform)
753 if(me.WarpZone_refsys_incremental_shift == ref.WarpZone_refsys.warpzone_shift)
754 return;
755 WarpZone_Accumulator_AddInverseTransform(me.WarpZone_refsys, me.WarpZone_refsys_incremental_transform, me.WarpZone_refsys_incremental_shift);
756 WarpZone_Accumulator_Add(me.WarpZone_refsys, ref.WarpZone_refsys);
757 me.WarpZone_refsys_incremental_shift = ref.WarpZone_refsys.warpzone_shift;
758 me.WarpZone_refsys_incremental_transform = ref.WarpZone_refsys.warpzone_transform;
759}
void WarpZone_Accumulator_Add(entity acc, entity wz)
Definition common.qc:25

References entity(), WarpZone_Accumulator_Add(), and WarpZone_Accumulator_AddInverseTransform().

Referenced by GrapplingHookThink().

◆ WarpZone_RefSys_AddInverse()

void WarpZone_RefSys_AddInverse ( entity me,
entity wz )

Definition at line 743 of file common.qc.

744{
745 WarpZone_RefSys_AddInverseTransform(me, wz.warpzone_transform, wz.warpzone_shift);
746}
void WarpZone_RefSys_AddInverseTransform(entity me, vector t, vector s)
Definition common.qc:735

References entity(), and WarpZone_RefSys_AddInverseTransform().

Referenced by ctf_Handle_Throw(), and Monster_Enemy_Check().

◆ WarpZone_RefSys_AddInverseTransform()

void WarpZone_RefSys_AddInverseTransform ( entity me,
vector t,
vector s )

Definition at line 735 of file common.qc.

736{
737 if(t != '0 0 0' || s != '0 0 0')
738 {
740 WarpZone_Accumulator_AddInverseTransform(me.WarpZone_refsys, t, s);
741 }
742}
void WarpZone_RefSys_CheckCreate(entity me)
Definition common.qc:704

References entity(), vector, WarpZone_Accumulator_AddInverseTransform(), and WarpZone_RefSys_CheckCreate().

Referenced by WarpZone_RefSys_AddInverse().

◆ WarpZone_RefSys_AddTransform()

void WarpZone_RefSys_AddTransform ( entity me,
vector t,
vector s )

Definition at line 723 of file common.qc.

724{
725 if(t != '0 0 0' || s != '0 0 0')
726 {
728 WarpZone_Accumulator_AddTransform(me.WarpZone_refsys, t, s);
729 }
730}

References entity(), vector, WarpZone_Accumulator_AddTransform(), and WarpZone_RefSys_CheckCreate().

Referenced by WarpZone_RefSys_Add().

◆ WarpZone_RefSys_BeginAddingIncrementally()

void WarpZone_RefSys_BeginAddingIncrementally ( entity me,
entity ref )

Definition at line 760 of file common.qc.

761{
762 me.WarpZone_refsys_incremental_shift = ref.WarpZone_refsys.warpzone_shift;
763 me.WarpZone_refsys_incremental_transform = ref.WarpZone_refsys.warpzone_transform;
764}

References entity().

Referenced by GrapplingHookTouch().

◆ WarpZone_RefSys_CheckCreate()

void WarpZone_RefSys_CheckCreate ( entity me)

Definition at line 704 of file common.qc.

705{
706 if(me.WarpZone_refsys.owner != me)
707 {
708 me.WarpZone_refsys = new(warpzone_refsys);
709 me.WarpZone_refsys.owner = me;
710 setthink(me.WarpZone_refsys, WarpZone_RefSys_GC);
711 me.WarpZone_refsys.nextthink = time + 1;
712 WarpZone_Accumulator_Clear(me.WarpZone_refsys);
713 }
714}
float time
void WarpZone_Accumulator_Clear(entity acc)
Definition common.qc:12
void WarpZone_RefSys_GC(entity this)
Definition common.qc:697
#define setthink(e, f)

References entity(), setthink, time, WarpZone_Accumulator_Clear(), and WarpZone_RefSys_GC().

Referenced by WarpZone_RefSys_AddInverseTransform(), WarpZone_RefSys_AddTransform(), and WarpZone_RefSys_Copy().

◆ WarpZone_RefSys_Clear()

void WarpZone_RefSys_Clear ( entity me)

Definition at line 715 of file common.qc.

716{
717 if(me.WarpZone_refsys)
718 {
719 delete(me.WarpZone_refsys);
720 me.WarpZone_refsys = NULL;
721 }
722}

References entity(), and NULL.

Referenced by WarpZone_RefSys_Copy().

◆ WarpZone_RefSys_Copy()

void WarpZone_RefSys_Copy ( entity me,
entity from )

Definition at line 797 of file common.qc.

798{
799 if(from.WarpZone_refsys)
800 {
802 me.WarpZone_refsys.warpzone_shift = from.WarpZone_refsys.warpzone_shift;
803 me.WarpZone_refsys.warpzone_transform = from.WarpZone_refsys.warpzone_transform;
804 }
805 else
807}
void WarpZone_RefSys_Clear(entity me)
Definition common.qc:715

References entity(), WarpZone_RefSys_CheckCreate(), and WarpZone_RefSys_Clear().

Referenced by ctf_Handle_Throw(), Monster_Enemy_Check(), and WarpZone_RefSys_SpawnSameRefSys().

◆ WarpZone_RefSys_GC()

void WarpZone_RefSys_GC ( entity this)

Definition at line 697 of file common.qc.

698{
699 // garbage collect unused reference systems
700 this.nextthink = time + 1;
701 if(this.owner.WarpZone_refsys != this)
702 delete(this);
703}
entity owner
Definition main.qh:87
float nextthink

References entity(), nextthink, owner, and time.

Referenced by WarpZone_RefSys_CheckCreate().

◆ WarpZone_RefSys_SpawnSameRefSys()

entity WarpZone_RefSys_SpawnSameRefSys ( entity me)

Definition at line 808 of file common.qc.

809{
810 entity e = spawn();
812 return e;
813}
#define spawn
void WarpZone_RefSys_Copy(entity me, entity from)
Definition common.qc:797

References entity(), spawn, and WarpZone_RefSys_Copy().

Referenced by FireGrapplingHook(), W_Devastator_Attack(), and W_MineLayer_Attack().

◆ WarpZone_RefSys_TransformAngles()

vector WarpZone_RefSys_TransformAngles ( entity from,
entity to,
vector ang )

Definition at line 781 of file common.qc.

782{
783 if(from.WarpZone_refsys)
784 ang = WarpZone_UnTransformAngles(from.WarpZone_refsys, ang);
785 if(to.WarpZone_refsys)
786 ang = WarpZone_TransformAngles(to.WarpZone_refsys, ang);
787 return ang;
788}
vector WarpZone_TransformAngles(entity wz, vector v)
Definition common.qc:519
vector WarpZone_UnTransformAngles(entity wz, vector v)
Definition common.qc:555
vector vector ang
Definition self.qh:92

References ang, entity(), vector, WarpZone_TransformAngles(), and WarpZone_UnTransformAngles().

◆ WarpZone_RefSys_TransformOrigin()

vector WarpZone_RefSys_TransformOrigin ( entity from,
entity to,
vector org )

Definition at line 765 of file common.qc.

766{
767 if(from.WarpZone_refsys)
768 org = WarpZone_UnTransformOrigin(from.WarpZone_refsys, org);
769 if(to.WarpZone_refsys)
770 org = WarpZone_TransformOrigin(to.WarpZone_refsys, org);
771 return org;
772}
vector WarpZone_UnTransformOrigin(entity wz, vector v)
Definition common.qc:545

References entity(), org, vector, WarpZone_TransformOrigin(), and WarpZone_UnTransformOrigin().

Referenced by ctf_FlagThink(), ctf_Handle_Throw(), GrapplingHookThink(), Monster_Enemy_Check(), Monster_Move_Target(), W_Crylink_LinkJoin(), and W_Devastator_Think().

◆ WarpZone_RefSys_TransformVAngles()

vector WarpZone_RefSys_TransformVAngles ( entity from,
entity to,
vector ang )

Definition at line 789 of file common.qc.

790{
791 if(from.WarpZone_refsys)
792 ang = WarpZone_UnTransformVAngles(from.WarpZone_refsys, ang);
793 if(to.WarpZone_refsys)
794 ang = WarpZone_TransformVAngles(to.WarpZone_refsys, ang);
795 return ang;
796}
vector WarpZone_UnTransformVAngles(entity wz, vector ang)
Definition common.qc:560
vector WarpZone_TransformVAngles(entity wz, vector ang)
Definition common.qc:524

References ang, entity(), vector, WarpZone_TransformVAngles(), and WarpZone_UnTransformVAngles().

◆ WarpZone_RefSys_TransformVelocity()

vector WarpZone_RefSys_TransformVelocity ( entity from,
entity to,
vector vel )

Definition at line 773 of file common.qc.

774{
775 if(from.WarpZone_refsys)
776 vel = WarpZone_UnTransformVelocity(from.WarpZone_refsys, vel);
777 if(to.WarpZone_refsys)
778 vel = WarpZone_TransformVelocity(to.WarpZone_refsys, vel);
779 return vel;
780}
vector WarpZone_UnTransformVelocity(entity wz, vector v)
Definition common.qc:550

References entity(), vector, WarpZone_TransformVelocity(), and WarpZone_UnTransformVelocity().

Referenced by GrapplingHookThink(), W_Crylink_LinkJoin(), and W_Devastator_Think().

◆ WarpZone_SetUp()

void WarpZone_SetUp ( entity e,
vector my_org,
vector my_ang,
vector other_org,
vector other_ang )

Definition at line 64 of file common.qc.

65{
66 e.warpzone_transform = AnglesTransform_RightDivide(other_ang, AnglesTransform_TurnDirectionFR(my_ang));
67 e.warpzone_shift = AnglesTransform_PrePostShift_GetPostShift(my_org, e.warpzone_transform, other_org);
68 e.warpzone_origin = my_org;
69 e.warpzone_targetorigin = other_org;
70 e.warpzone_angles = my_ang;
71 e.warpzone_targetangles = other_ang;
72 vector forward, right, up;
73 FIXED_MAKE_VECTORS(my_ang, forward, right, up);
74 e.warpzone_forward = forward;
75 FIXED_MAKE_VECTORS(other_ang, forward, right, up);
76 e.warpzone_targetforward = forward;
78}
vector AnglesTransform_TurnDirectionFR(vector transform)
vector AnglesTransform_RightDivide(vector to_transform, vector from_transform)
#define FIXED_MAKE_VECTORS(angles, forward, right, up)
vector WarpZone_camera_transform(entity this, vector org, vector ang)
Definition common.qc:42

References AnglesTransform_PrePostShift_GetPostShift(), AnglesTransform_RightDivide(), AnglesTransform_TurnDirectionFR(), entity(), FIXED_MAKE_VECTORS, setcamera_transform, vector, and WarpZone_camera_transform().

Referenced by NET_HANDLE(), and WarpZone_InitStep_FinalizeTransform().

◆ WarpZone_TargetPlaneDist()

float WarpZone_TargetPlaneDist ( entity wz,
vector v )

Definition at line 504 of file common.qc.

505{
506 return (v - wz.warpzone_targetorigin) * wz.warpzone_targetforward;
507}

References entity(), and vector.

Referenced by WarpZone_Teleport().

◆ WarpZone_Trace_AddTransform()

void WarpZone_Trace_AddTransform ( entity wz)

◆ WarpZone_Trace_InitTransform()

void WarpZone_Trace_InitTransform ( )

Definition at line 199 of file common.qc.

200{
202 {
203 WarpZone_trace_transform = new_pure(warpzone_trace_transform);
204 }
206}
#define new_pure(class)
purely logical entities (not linked to the area grid)
Definition oo.qh:67

References new_pure, WarpZone_Accumulator_Clear(), and WarpZone_trace_transform.

Referenced by WarpZone_TraceBox_ThroughZone(), and WarpZone_TraceToss_ThroughZone().

◆ WarpZone_TraceBox()

void WarpZone_TraceBox ( vector org,
vector mi,
vector ma,
vector end,
float nomonsters,
entity forent )

Definition at line 343 of file common.qc.

344{
345 WarpZone_TraceBox_ThroughZone(org, mi, ma, end, nomonsters, forent, NULL, WarpZone_trace_callback_t_null);
346}
void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent, entity zone, WarpZone_trace_callback_t cb)
Definition common.qc:212
var WarpZone_trace_callback_t WarpZone_trace_callback_t_null
Definition common.qh:36

References entity(), NULL, org, vector, WarpZone_trace_callback_t_null, and WarpZone_TraceBox_ThroughZone().

Referenced by CommonCommand_editmob(), tracebox_antilag_force_wz(), View_EventChase(), and WarpZone_TraceLine().

◆ WarpZone_TraceBox_ThroughZone()

void WarpZone_TraceBox_ThroughZone ( vector org,
vector mi,
vector ma,
vector end,
float nomonsters,
entity forent,
entity zone,
WarpZone_trace_callback_t cb )

Definition at line 212 of file common.qc.

213{
214 float nomonsters_adjusted;
215 float frac, sol, i;
216 float contentshack;
217 entity wz;
218 vector vf, vr, vu;
219
220 WarpZone_trace_forent = forent;
225 {
226 if(nomonsters == MOVE_NOTHING)
227 {
228 trace_endpos = end;
229 trace_fraction = 1;
230 if(cb)
231 cb(org, trace_endpos, end);
232 return;
233 }
234 else
235 {
236 tracebox(org, mi, ma, end, nomonsters, WarpZone_trace_forent);
237 if(cb)
238 cb(org, trace_endpos, end);
239 return;
240 }
241 }
242
243 vf = v_forward;
244 vr = v_right;
245 vu = v_up;
246
247 switch(nomonsters)
248 {
249 case MOVE_WORLDONLY:
250 case MOVE_NOTHING:
251 nomonsters_adjusted = MOVE_NOMONSTERS;
252 break;
253 default:
254 nomonsters_adjusted = nomonsters;
255 break;
256 }
257 if((contentshack = (WarpZone_trace_forent.dphitcontentsmask && !(WarpZone_trace_forent.dphitcontentsmask & DPCONTENTS_SOLID))))
259
260 // if starting in warpzone, first transform
261 wz = WarpZone_Find(org + mi, org + ma);
262 if(wz)
263 {
266 if(zone && wz != zone)
267 {
268 // we are in ANOTHER warpzone. This is bad. Make a zero length trace and return.
269 sol = 1;
270 trace_fraction = 0;
272 goto fail;
273 }
276 end = WarpZone_TransformOrigin(wz, end);
277 }
279 sol = -1;
280 frac = 0;
281 i = 16;
282 for (;;)
283 {
284 if(--i < 1)
285 {
286 LOG_TRACE("Too many warpzones in sequence, aborting trace.");
287 trace_ent = NULL;
288 break;
289 }
290 tracebox(org, mi, ma, end, nomonsters_adjusted, WarpZone_trace_forent);
291 if(cb)
292 cb(org, trace_endpos, end);
293 if(sol < 0)
294 sol = trace_startsolid;
295
296 frac = trace_fraction = frac + (1 - frac) * trace_fraction;
297 if(trace_fraction >= 1)
298 break;
299 if(trace_ent.classname != "trigger_warpzone")
300 {
301 if((nomonsters == MOVE_NOTHING) || ((nomonsters == MOVE_WORLDONLY) && trace_ent) || (contentshack && (trace_dphitcontents & WarpZone_trace_forent.dphitcontentsmask) == DPCONTENTS_SOLID))
302 {
303 // continue the trace, ignoring this hit (we only care for warpzones)
304 org = trace_endpos + normalize(end - org);
305 continue;
306 // we cannot do an inverted trace here, as we do care for further warpzones inside that "solid" to be found
307 // otherwise, players could block entrances that way
308 }
309 break;
310 }
311 /*if(trace_ent == wz)
312 {
313 // FIXME can this check be removed? Do we really need it?
314 LOG_TRACE("I transformed into the same zone again, wtf, aborting the trace");
315 trace_ent = NULL;
316 break;
317 }*/
318 wz = trace_ent;
322 if(zone && wz != zone)
323 break;
325 // we hit a warpzone... so, let's perform the trace after the warp again
327 end = WarpZone_TransformOrigin(wz, end);
328
329 // we got warped, so let's step back a bit
330 tracebox(org, mi, ma, org + normalize(org - end) * 32, nomonsters_adjusted, WarpZone_trace_forent);
332 }
334LABEL(fail)
335 if(contentshack)
337 trace_startsolid = sol;
338 v_forward = vf;
339 v_right = vr;
340 v_up = vu;
341}
#define LABEL(id)
Definition compiler.qh:34
float trace_dphitcontents
entity trace_ent
float DPCONTENTS_SOLID
float trace_startsolid
float MOVE_WORLDONLY
entity WarpZone_Find(vector mi, vector ma)
Definition common.qc:167
void WarpZone_Trace_InitTransform()
Definition common.qc:199
void WarpZone_MakeAllOther()
Definition common.qc:189
void WarpZone_MakeAllSolid()
Definition common.qc:179
void WarpZone_Trace_AddTransform(entity wz)
Definition common.qc:207
entity WarpZone_trace_firstzone
Definition common.qh:38
#define BITSET_ASSIGN(a, b)
Definition common.qh:104
#define BITCLR_ASSIGN(a, b)
Definition common.qh:101
entity WarpZone_trace_lastzone
Definition common.qh:39
#define MOVE_NOTHING
Definition common.qh:33
entity WarpZone_trace_forent
Definition common.qh:34
#define LOG_TRACE(...)
Definition log.qh:76
vector normalize(vector v)

References BITCLR_ASSIGN, BITSET_ASSIGN, DPCONTENTS_SOLID, entity(), LABEL, LOG_TRACE, MOVE_NOMONSTERS, MOVE_NOTHING, MOVE_WORLDONLY, normalize(), NULL, org, trace_dphitcontents, trace_endpos, trace_ent, trace_fraction, trace_startsolid, v_forward, v_right, v_up, vector, WarpZone_Find(), WarpZone_MakeAllOther(), WarpZone_MakeAllSolid(), WarpZone_Trace_AddTransform(), WarpZone_trace_firstzone, WarpZone_trace_forent, WarpZone_Trace_InitTransform(), WarpZone_trace_lastzone, WarpZone_TransformOrigin(), and warpzone_warpzones_exist.

Referenced by Draw_ArcBeam(), Draw_GrapplingHook(), fireBullet_falloff(), WarpZone_TraceBox(), WarpZone_TrailParticles(), and WarpZone_TrailParticles_WithMultiplier().

◆ WarpZone_TraceLine()

void WarpZone_TraceLine ( vector org,
vector end,
float nomonsters,
entity forent )

Definition at line 348 of file common.qc.

349{
350 WarpZone_TraceBox(org, '0 0 0', '0 0 0', end, nomonsters, forent);
351}
void WarpZone_TraceBox(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent)
Definition common.qc:343

References entity(), org, vector, and WarpZone_TraceBox().

Referenced by CommonCommand_editmob(), ctf_CalculatePassVelocity(), ctf_FlagThink(), Draw_ArcBeam(), HUD_Crosshair(), Monster_Enemy_Check(), RadiusDamageForSource(), sandbox_ObjectSpawn(), View_EventChase(), W_Electro_TriggerCombo(), and W_SetupShot_Dir_ProjectileSize_Range().

◆ WarpZone_TraceToss()

void WarpZone_TraceToss ( entity e,
entity forent )

Definition at line 462 of file common.qc.

463{
465}
void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZone_trace_callback_t cb)
Definition common.qc:353

References entity(), NULL, WarpZone_trace_callback_t_null, and WarpZone_TraceToss_ThroughZone().

◆ WarpZone_TraceToss_ThroughZone()

void WarpZone_TraceToss_ThroughZone ( entity e,
entity forent,
entity zone,
WarpZone_trace_callback_t cb )

Definition at line 353 of file common.qc.

354{
355 float g, dt, i;
356 vector vf, vr, vu, v0, o0;
357 entity wz;
358
359 o0 = e.origin;
360 v0 = e.velocity;
361 g = cvar("sv_gravity") * e.gravity;
362
363 WarpZone_trace_forent = forent;
369 {
370 tracetoss(e, WarpZone_trace_forent);
371 if(cb)
372 cb(e.origin, trace_endpos, trace_endpos);
373 dt = vlen(e.origin - o0) / vlen(e.velocity);
375 e.velocity_z -= dt * g;
376 WarpZone_tracetoss_velocity = e.velocity;
377 e.velocity = v0;
378 return;
379 }
380
381 vf = v_forward;
382 vr = v_right;
383 vu = v_up;
384
385 // if starting in warpzone, first transform
386 wz = WarpZone_Find(e.origin + e.mins, e.origin + e.maxs);
387 if(wz)
388 {
391 if(zone && wz != zone)
392 {
393 // we are in ANOTHER warpzone. This is bad. Make a zero length trace and return.
394
396 trace_endpos = o0;
397 goto fail;
398 }
400 vector org = WarpZone_TransformOrigin(wz, e.origin);
401 setorigin(e, org);
402 e.velocity = WarpZone_TransformVelocity(wz, e.velocity);
403 }
405 i = 16;
406 for (;;)
407 {
408 if(--i < 1)
409 {
410 LOG_TRACE("Too many warpzones in sequence, aborting trace.");
411 trace_ent = NULL;
412 break;
413 }
414 tracetoss(e, WarpZone_trace_forent);
415 if(cb)
416 cb(e.origin, trace_endpos, trace_endpos);
417 dt = vlen(trace_endpos - e.origin) / vlen(e.velocity);
419 e.origin = trace_endpos;
420 e.velocity_z -= dt * g;
421 if(trace_fraction >= 1)
422 break;
423 if(trace_ent.classname != "trigger_warpzone")
424 break;
425 if(trace_ent == wz)
426 {
427 // FIXME can this check be removed? Do we really need it?
428 LOG_TRACE("I transformed into the same zone again, wtf, aborting the trace");
429 trace_ent = NULL;
430 break;
431 }
432 wz = trace_ent;
436 if(zone && wz != zone)
437 break;
439 // we hit a warpzone... so, let's perform the trace after the warp again
440 e.origin = WarpZone_TransformOrigin(wz, e.origin);
441 e.velocity = WarpZone_TransformVelocity(wz, e.velocity);
442
443 // we got warped, so let's step back a bit
444 e.velocity = -e.velocity;
445 tracetoss(e, WarpZone_trace_forent);
446 dt = vlen(trace_endpos - e.origin) / vlen(e.velocity);
448 e.origin = trace_endpos;
449 e.velocity = -e.velocity;
450 }
452LABEL(fail)
453 WarpZone_tracetoss_velocity = e.velocity;
454 v_forward = vf;
455 v_right = vr;
456 v_up = vu;
457 // restore old entity data (caller just uses trace_endpos, WarpZone_tracetoss_velocity and the transform)
458 e.velocity = v0;
459 e.origin = o0;
460}
vector WarpZone_tracetoss_velocity
Definition common.qh:40
float WarpZone_tracetoss_time
Definition common.qh:41
float cvar(string name)

References cvar(), entity(), LABEL, LOG_TRACE, NULL, org, trace_endpos, trace_ent, trace_fraction, v_forward, v_right, v_up, vector, vlen(), WarpZone_Find(), WarpZone_MakeAllOther(), WarpZone_MakeAllSolid(), WarpZone_Trace_AddTransform(), WarpZone_trace_firstzone, WarpZone_trace_forent, WarpZone_Trace_InitTransform(), WarpZone_trace_lastzone, WarpZone_tracetoss_time, WarpZone_tracetoss_velocity, WarpZone_TransformOrigin(), WarpZone_TransformVelocity(), and warpzone_warpzones_exist.

Referenced by WarpZone_TraceToss().

◆ WarpZone_TrailParticles()

void WarpZone_TrailParticles ( entity own,
float eff,
vector org,
vector end )

◆ WarpZone_TrailParticles_trace_callback()

void WarpZone_TrailParticles_trace_callback ( vector from,
vector endpos,
vector to )

◆ WarpZone_TrailParticles_WithMultiplier()

◆ WarpZone_TrailParticles_WithMultiplier_trace_callback()

◆ WarpZone_TransformAngles()

vector WarpZone_TransformAngles ( entity wz,
vector v )

Definition at line 519 of file common.qc.

520{
521 return AnglesTransform_ApplyToAngles(wz.warpzone_transform, v);
522}
vector AnglesTransform_ApplyToAngles(vector transform, vector v)

References AnglesTransform_ApplyToAngles(), entity(), and vector.

Referenced by WarpZone_RefSys_TransformAngles(), and WarpZone_Teleport().

◆ WarpZone_TransformOrigin()

◆ WarpZone_TransformVAngles()

vector WarpZone_TransformVAngles ( entity wz,
vector ang )

Definition at line 524 of file common.qc.

525{
526#ifdef KEEP_ROLL
527 float roll;
528 roll = ang.z;
529 ang.z = 0;
530#endif
531
532 ang = AnglesTransform_ApplyToVAngles(wz.warpzone_transform, ang);
533
534#ifdef KEEP_ROLL
537 ang.z = roll;
538#else
540#endif
541
542 return ang;
543}
vector AnglesTransform_ApplyToVAngles(vector transform, vector v)
vector AnglesTransform_CancelRoll(vector t)
vector AnglesTransform_Normalize(vector t, float minimize_roll)

References ang, AnglesTransform_ApplyToVAngles(), AnglesTransform_CancelRoll(), AnglesTransform_Normalize(), entity(), and vector.

Referenced by NET_HANDLE(), View_EventChase(), WarpZone_FixPMove(), WarpZone_FixView(), WarpZone_PlayerPhysics_FixVAngle(), WarpZone_RefSys_TransformVAngles(), and WarpZone_Teleport().

◆ WarpZone_TransformVelocity()

◆ WarpZone_UnTransformAngles()

vector WarpZone_UnTransformAngles ( entity wz,
vector v )

Definition at line 555 of file common.qc.

556{
557 return AnglesTransform_ApplyToAngles(AnglesTransform_Invert(wz.warpzone_transform), v);
558}

References AnglesTransform_ApplyToAngles(), AnglesTransform_Invert(), entity(), and vector.

Referenced by WarpZone_RefSys_TransformAngles().

◆ WarpZone_UnTransformOrigin()

◆ WarpZone_UnTransformVAngles()

vector WarpZone_UnTransformVAngles ( entity wz,
vector ang )

Definition at line 560 of file common.qc.

561{
562#ifdef KEEP_ROLL
563 float roll;
564 roll = ang.z;
565 ang.z = 0;
566#endif
567
569
570#ifdef KEEP_ROLL
573 ang.z = roll;
574#else
576#endif
577
578 return ang;
579}

References ang, AnglesTransform_ApplyToVAngles(), AnglesTransform_CancelRoll(), AnglesTransform_Invert(), AnglesTransform_Normalize(), entity(), and vector.

Referenced by WarpZone_RefSys_TransformVAngles().

◆ WarpZone_UnTransformVelocity()

vector WarpZone_UnTransformVelocity ( entity wz,
vector v )

Definition at line 550 of file common.qc.

551{
552 return AnglesTransform_Apply(AnglesTransform_Invert(wz.warpzone_transform), v);
553}

References AnglesTransform_Apply(), AnglesTransform_Invert(), entity(), and vector.

Referenced by WarpZone_RefSys_TransformVelocity().

◆ WarpZoneLib_BadEntity()

bool WarpZoneLib_BadEntity ( entity e)

Definition at line 591 of file common.qc.

592{
593 if (is_pure(e)) return true;
594 string s = e.classname;
595
596 switch(s)
597 {
598 case "weaponentity":
599 case "exteriorweaponentity":
600 case "sprite_waypoint":
601 case "waypoint":
602 case "spawnfunc":
603 case "weaponchild":
604 case "chatbubbleentity":
605 case "buff_model":
606 //case "net_linked": // actually some real entities are linked without classname, fail
607 case "":
608 return true;
609 }
610
611 if (startsWith(s, "target_")) return true;
612
613 if (startsWith(s, "info_")) return true;
614
615 return false;
616}
#define is_pure(e)
Definition oo.qh:16
#define startsWith(haystack, needle)
Definition string.qh:236

References entity(), is_pure, and startsWith.

Referenced by WarpZone_FindRadius_Recurse().

◆ WarpZoneLib_BoxTouchesBrush()

float WarpZoneLib_BoxTouchesBrush ( vector mi,
vector ma,
entity e,
entity ig )

Definition at line 133 of file common.qc.

134{
135 // bones_was_here: TODO: when findbox_OrFallback() is available, use it to
136 // optimise this into a single non-recursive function that only calls tracebox once
137
138 float f, s;
139
140 if(!e.modelindex || e.warpzone_isboxy)
141 return 1;
142
143 // work around trigger_hurt on geit3ctf1 not being detected by tracebox
144 // bones_was_here: FIXME: WHY do these triggers only have supercontents == 128 ?!
145 if (Q3COMPAT_COMMON && ig != world)
146 ig.dphitcontentsmask |= 128;
147
148 s = e.solid;
149 if (e.solid != SOLID_BSP)
150 {
151 e.solid = SOLID_BSP;
152 setorigin(e, e.origin); // update linking
153 }
154 f = WarpZoneLib_BoxTouchesBrush_Recurse(mi, ma, e, ig);
155 if (e.solid != s) // if we needed to change .solid temporarily
156 {
157 e.solid = s; // restore it
158 setorigin(e, e.origin); // update linking
159 }
160
161 if (Q3COMPAT_COMMON && ig != world)
162 ig.dphitcontentsmask &= ~128;
163
164 return f;
165}
#define Q3COMPAT_COMMON
Definition stats.qh:368
float WarpZoneLib_BoxTouchesBrush_Recurse(vector mi, vector ma, entity e, entity ig)
Definition common.qc:102
#define world
Definition post.qh:15

References entity(), Q3COMPAT_COMMON, SOLID_BSP, vector, WarpZoneLib_BoxTouchesBrush_Recurse(), and world.

Referenced by havocbot_moveto(), Teleport_Find(), WarpZone_Find(), and WarpZoneLib_ExactTrigger_Touch().

◆ WarpZoneLib_BoxTouchesBrush_Recurse()

float WarpZoneLib_BoxTouchesBrush_Recurse ( vector mi,
vector ma,
entity e,
entity ig )

Definition at line 102 of file common.qc.

103{
104 float f, s;
105 entity se;
106
107 tracebox('0 0 0', mi, ma, '0 0 0', MOVE_NOMONSTERS, ig);
108#ifdef CSQC
110 {
111 LOG_TRACE("hit a network ent, cannot continue WarpZoneLib_BoxTouchesBrush");
112 // we cannot continue, as a player blocks us...
113 // so, abort
114 return 0;
115 }
116#endif
117 if (!trace_ent)
118 return 0;
119 if (trace_ent == e)
120 return 1;
121
122 se = trace_ent;
123 s = se.solid;
124 se.solid = SOLID_NOT;
125 setorigin(se, se.origin); // unlink
126 f = WarpZoneLib_BoxTouchesBrush_Recurse(mi, ma, e, ig);
127 se.solid = s;
128 setorigin(se, se.origin); // relink
129
130 return f;
131}
const float SOLID_NOT
float trace_networkentity

References entity(), LOG_TRACE, MOVE_NOMONSTERS, SOLID_NOT, trace_ent, trace_networkentity, vector, and WarpZoneLib_BoxTouchesBrush_Recurse().

Referenced by WarpZoneLib_BoxTouchesBrush(), and WarpZoneLib_BoxTouchesBrush_Recurse().

◆ WarpZoneLib_ExactTrigger_Touch()

bool WarpZoneLib_ExactTrigger_Touch ( entity this,
entity toucher,
bool touchfunc )

Definition at line 815 of file common.qc.

816{
817 vector emin = toucher.absmin, emax = toucher.absmax;
818 if (!Q3COMPAT_COMMON)
819 {
820 // Xonotic and Nexuiz maps assume triggers will be activated by adjacent players
821 // prior to sv_legacy_bbox_expand 0 DP always did this for SVQC and never for CSQC
822 emin -= '1 1 1';
823 emax += '1 1 1';
824 }
825
826 // if called from a touch func, we can assume the boxes do overlap
827 if (!touchfunc && !boxesoverlap(emin, emax, this.absmin, this.absmax)) // quick
828 return false;
829
830 return WarpZoneLib_BoxTouchesBrush(emin, emax, this, toucher); // accurate
831}
vector absmax
vector absmin
entity entity toucher
Definition self.qh:72
ERASEABLE float boxesoverlap(vector m1, vector m2, vector m3, vector m4)
requires that m2>m1 in all coordinates, and that m4>m3
Definition vector.qh:73

References absmax, absmin, boxesoverlap(), entity(), Q3COMPAT_COMMON, toucher, vector, and WarpZoneLib_BoxTouchesBrush().

Referenced by conveyor_think(), func_ladder_think(), SV_PlayerPhysics(), swamp_think(), viewloc_think(), and WarpZone_StartFrame().

◆ WarpZoneLib_MoveOutOfSolid()

int WarpZoneLib_MoveOutOfSolid ( entity e)

Definition at line 848 of file common.qc.

849{
850 vector o = e.origin;
851 traceline(o, o, MOVE_WORLDONLY, e);
853 return 0; // too stuck, giving up
854
855 tracebox(o, e.mins, e.maxs, o, MOVE_WORLDONLY, e);
856 if (!trace_startsolid)
857 return -1; // wasn't stuck
858
859 vector m0 = e.mins;
860 vector m1 = e.maxs;
861 e.mins = '0 0 0';
862 e.maxs = '0 0 0';
863 WarpZoneLib_MoveOutOfSolid_Expand(e, eX * m0.x); e.mins_x = m0.x;
864 WarpZoneLib_MoveOutOfSolid_Expand(e, eX * m1.x); e.maxs_x = m1.x;
865 WarpZoneLib_MoveOutOfSolid_Expand(e, eY * m0.y); e.mins_y = m0.y;
866 WarpZoneLib_MoveOutOfSolid_Expand(e, eY * m1.y); e.maxs_y = m1.y;
867 WarpZoneLib_MoveOutOfSolid_Expand(e, eZ * m0.z); e.mins_z = m0.z;
868 WarpZoneLib_MoveOutOfSolid_Expand(e, eZ * m1.z); e.maxs_z = m1.z;
869 setorigin(e, e.origin);
870
871 tracebox(e.origin, e.mins, e.maxs, e.origin, MOVE_WORLDONLY, e);
873 {
874 setorigin(e, o);
875 return 0; // can't fix
876 }
877
878 return 1; // was stuck but is fixed now
879}
void WarpZoneLib_MoveOutOfSolid_Expand(entity e, vector by)
Definition common.qc:834
const vector eY
Definition vector.qh:45
const vector eZ
Definition vector.qh:46
const vector eX
Definition vector.qh:44

References entity(), eX, eY, eZ, MOVE_WORLDONLY, trace_startsolid, vector, and WarpZoneLib_MoveOutOfSolid_Expand().

Referenced by CheckEngineExtensions(), and WarpZone_Teleport().

◆ WarpZoneLib_MoveOutOfSolid_Expand()

void WarpZoneLib_MoveOutOfSolid_Expand ( entity e,
vector by )

Definition at line 834 of file common.qc.

835{
836 const float eps = 0.0625;
837 tracebox(e.origin, e.mins - '1 1 1' * eps, e.maxs + '1 1 1' * eps, e.origin + by, MOVE_WORLDONLY, e);
839 return;
840 if (trace_fraction < 1)
841 {
842 // hit something
843 // adjust origin in the other direction...
844 setorigin(e, e.origin - by * (1 - trace_fraction));
845 }
846}

References entity(), MOVE_WORLDONLY, trace_fraction, trace_startsolid, and vector.

Referenced by WarpZoneLib_MoveOutOfSolid().

◆ WarpZoneLib_NearestPointOnBox()

vector WarpZoneLib_NearestPointOnBox ( vector mi,
vector ma,
vector org )

Definition at line 581 of file common.qc.

582{
583 vector nearest;
584 nearest.x = bound(mi.x, org.x, ma.x);
585 nearest.y = bound(mi.y, org.y, ma.y);
586 nearest.z = bound(mi.z, org.z, ma.z);
587 return nearest;
588}

References bound(), org, and vector.

Referenced by WarpZone_FindRadius_Recurse().

Variable Documentation

◆ enemy

entity enemy

Definition at line 100 of file common.qc.

◆ WarpZone_findradius_hit

float WarpZone_findradius_hit

Definition at line 618 of file common.qc.

Referenced by WarpZone_FindRadius().

◆ WarpZone_findradius_next

entity WarpZone_findradius_next

Definition at line 619 of file common.qc.

◆ WarpZone_refsys

entity WarpZone_refsys

Definition at line 696 of file common.qc.

◆ WarpZone_refsys_incremental_shift

vector WarpZone_refsys_incremental_shift

Definition at line 747 of file common.qc.

◆ WarpZone_refsys_incremental_transform

vector WarpZone_refsys_incremental_transform

Definition at line 748 of file common.qc.

◆ WarpZone_TrailParticles_trace_callback_eff

◆ WarpZone_TrailParticles_trace_callback_f

float WarpZone_TrailParticles_trace_callback_f

◆ WarpZone_TrailParticles_trace_callback_flags

float WarpZone_TrailParticles_trace_callback_flags

◆ WarpZone_TrailParticles_trace_callback_own