]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
fix the campingrifle's trueaim with warpzones
authorRudolf Polzer <divverent@alientrap.org>
Thu, 22 Jul 2010 13:59:54 +0000 (15:59 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Thu, 22 Jul 2010 13:59:54 +0000 (15:59 +0200)
qcsrc/warpzonelib/common.qc

index af530814e0b23d84f559297f511b46136d652416..1c3835afa35235a51d9a88e47ef5d7b749038c0a 100644 (file)
@@ -1,3 +1,6 @@
+float trace_dphitcontents;
+.float dphitcontents;
+
 void WarpZone_Accumulator_Clear(entity acc)
 {
        acc.warpzone_transform = '0 0 0';
@@ -167,6 +170,7 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
 {
        float nomonsters_adjusted;
        float frac, sol, i;
+       float contentshack;
        vector o0, e0;
        entity wz;
        vector vf, vr, vu;
@@ -186,6 +190,8 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
                        nomonsters_adjusted = nomonsters;
                        break;
        }
+       if((contentshack = (forent.dphitcontentsmask && !(forent.dphitcontentsmask & DPCONTENTS_SOLID))))
+               forent.dphitcontentsmask |= DPCONTENTS_SOLID;
 
        WarpZone_Trace_InitTransform();
        // if starting in warpzone, first transform
@@ -227,7 +233,7 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
                        break;
                if(trace_ent.classname != "trigger_warpzone")
                {
-                       if((nomonsters == MOVE_NOTHING) || ((nomonsters == MOVE_WORLDONLY) && trace_ent))
+                       if((nomonsters == MOVE_NOTHING) || ((nomonsters == MOVE_WORLDONLY) && trace_ent) || (contentshack && (trace_dphitcontents & forent.dphitcontentsmask) == DPCONTENTS_SOLID))
                        {
                                // continue the trace, ignoring this hit (we only care for warpzones)
                                org = trace_endpos + normalize(end - org);
@@ -253,6 +259,8 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
        }
        WarpZone_MakeAllOther();
 :fail
+       if(contentshack)
+               forent.dphitcontentsmask &~= DPCONTENTS_SOLID;
        trace_startsolid = sol;
        v_forward = vf;
        v_right = vr;