X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fwarpzonelib%2Fcommon.qc;h=3481ed175cccde39c00b561793e6a045be69e9f9;hb=e6b7077f440bdf0d2a1047f3b716a7009090fca6;hp=bc23cd11ba117713b6ccc9c99ba36e0d6d68626a;hpb=4ffbca256f8bc337262838c28168b3253853d114;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/warpzonelib/common.qc b/qcsrc/warpzonelib/common.qc index bc23cd11b..3481ed175 100644 --- a/qcsrc/warpzonelib/common.qc +++ b/qcsrc/warpzonelib/common.qc @@ -1,5 +1,5 @@ float trace_dphitcontents; -.float dphitcontents; +.float dphitcontentsmask; void WarpZone_Accumulator_Clear(entity acc) { @@ -191,6 +191,8 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, entity wz; vector vf, vr, vu; + WarpZone_trace_firstzone = world; + WarpZone_trace_lastzone = world; WarpZone_Trace_InitTransform(); if(!warpzone_warpzones_exist) { @@ -228,12 +230,14 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, break; } if((contentshack = (forent.dphitcontentsmask && !(forent.dphitcontentsmask & DPCONTENTS_SOLID)))) - forent.dphitcontentsmask |= DPCONTENTS_SOLID; + BITSET_ASSIGN(forent.dphitcontentsmask, DPCONTENTS_SOLID); // if starting in warpzone, first transform wz = WarpZone_Find(org + mi, org + ma); if(wz) { + WarpZone_trace_firstzone = wz; + WarpZone_trace_lastzone = wz; if(zone && wz != zone) { // we are in ANOTHER warpzone. This is bad. Make a zero length trace and return. @@ -281,11 +285,15 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, } if(trace_ent == wz) { + // FIXME can this check be removed? Do we really need it? dprint("I transformed into the same zone again, wtf, aborting the trace\n"); trace_ent = world; break; } wz = trace_ent; + if(!WarpZone_trace_firstzone) + WarpZone_trace_firstzone = wz; + WarpZone_trace_lastzone = wz; if(zone && wz != zone) break; WarpZone_Trace_AddTransform(wz); @@ -296,7 +304,7 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, WarpZone_MakeAllOther(); :fail if(contentshack) - forent.dphitcontentsmask &~= DPCONTENTS_SOLID; + BITCLR_ASSIGN(forent.dphitcontentsmask, DPCONTENTS_SOLID); trace_startsolid = sol; v_forward = vf; v_right = vr; @@ -322,6 +330,8 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo o0 = e.origin; v0 = e.velocity; + WarpZone_trace_firstzone = world; + WarpZone_trace_lastzone = world; WarpZone_Trace_InitTransform(); WarpZone_tracetoss_time = 0; if(!warpzone_warpzones_exist) @@ -345,6 +355,8 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo wz = WarpZone_Find(e.origin + e.mins, e.origin + e.maxs); if(wz) { + WarpZone_trace_firstzone = wz; + WarpZone_trace_lastzone = wz; if(zone && wz != zone) { // we are in ANOTHER warpzone. This is bad. Make a zero length trace and return. @@ -381,11 +393,15 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo break; if(trace_ent == wz) { + // FIXME can this check be removed? Do we really need it? dprint("I transformed into the same zone again, wtf, aborting the trace\n"); trace_ent = world; break; } wz = trace_ent; + if(!WarpZone_trace_firstzone) + WarpZone_trace_firstzone = wz; + WarpZone_trace_lastzone = wz; if(zone && wz != zone) break; WarpZone_Trace_AddTransform(wz); @@ -411,8 +427,6 @@ void WarpZone_TraceToss(entity e, entity forent) entity WarpZone_TrailParticles_trace_callback_own; float WarpZone_TrailParticles_trace_callback_eff; -float WarpZone_TrailParticles_trace_callback_f; -float WarpZone_TrailParticles_trace_callback_flags; void WarpZone_TrailParticles_trace_callback(vector from, vector endpos, vector to) { trailparticles(WarpZone_TrailParticles_trace_callback_own, WarpZone_TrailParticles_trace_callback_eff, from, endpos); @@ -426,6 +440,8 @@ void WarpZone_TrailParticles(entity own, float eff, vector org, vector end) } #ifdef CSQC +float WarpZone_TrailParticles_trace_callback_f; +float WarpZone_TrailParticles_trace_callback_flags; void WarpZone_TrailParticles_WithMultiplier_trace_callback(vector from, vector endpos, vector to) { 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);