]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
deglob tracing again
authorMartin Taibr <taibr.martin@gmail.com>
Thu, 29 Nov 2018 08:38:54 +0000 (09:38 +0100)
committerMartin Taibr <taibr.martin@gmail.com>
Thu, 29 Nov 2018 08:38:54 +0000 (09:38 +0100)
Merge branch 'master' into martin-t/globals

.gitlab-ci.yml
qcsrc/server/client.qc
qcsrc/server/weapons/tracing.qc

index dae7bdce691869d0aad0fefacf31091f06bc1837..e773eb6f58e48d9f4adf909e065b4fe8d8ba2878 100644 (file)
@@ -29,7 +29,7 @@ test_sv_game:
     - wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
     - wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
     - make
-    - EXPECT=fed9f3b94a544058593aaa8addaa9402
+    - EXPECT=b27bbbd74c91ea66195d61982fd471ce
     - HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
       | tee /dev/stderr
       | grep '^:'
index 01c8222e62de1597fb561a31590f8bcb164e9b04..ef569519959788bd35dca4fcb00c5ea43eae0621 100644 (file)
@@ -1054,6 +1054,8 @@ string getwelcomemessage(entity this)
        return s;
 }
 
+bool autocvar_sv_qcphysics = false; // TODO this is for testing - remove when qcphysics work
+
 /**
 =============
 ClientConnect
@@ -1146,7 +1148,7 @@ void ClientConnect(entity this)
        if (IS_REAL_CLIENT(this))
                sv_notice_join(this);
 
-       this.move_qcphysics = true;
+       this.move_qcphysics = autocvar_sv_qcphysics;
 
        // update physics stats (players can spawn before physics runs)
        Physics_UpdateStats(this);
index 1b816f304541b5253c2eee66610d28eb7de22df9..56aa5abe4ed44e78d850e4d8d48069d9c2ff58a4 100644 (file)
@@ -26,6 +26,7 @@
 void W_SetupShot_Dir_ProjectileSize_Range(entity ent, .entity weaponentity, vector s_forward, vector mi, vector ma, float antilag, float recoil, Sound snd, float chan, float maxdamage, float range, int deathtype)
 {
        TC(Sound, snd);
+       float nudge = 1; // added to traceline target and subtracted from result  TOOD(divVerent): do we still need this? Doesn't the engine do this now for us?
        float oldsolid = ent.dphitcontentsmask;
        Weapon wep = DEATH_WEAPONOF(deathtype);
        if(!IS_CLIENT(ent))
@@ -73,20 +74,22 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, .entity weaponentity, vect
        vector md = ent.(weaponentity).movedir;
        vector vecs = ((md.x > 0) ? md : '0 0 0');
 
-       vector dv = forward * vecs.x + right * -vecs.y + up * vecs.z;
-       w_shotorg = ent.origin + ent.view_ofs;
+       // TODO this is broken - see 637056bea7bf7f5c9c0fc6113e94731a2767476 for an attempted fix
+       // which fixes issue #1957 but causes #2129
+       vector dv = right * -vecs.y + up * vecs.z;
+       w_shotorg = ent.origin + ent.view_ofs + dv;
 
        // now move the shotorg forward as much as requested if possible
        if(antilag)
        {
                if(CS(ent).antilag_debug)
-                       tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + dv, MOVE_NORMAL, ent, CS(ent).antilag_debug);
+                       tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent, CS(ent).antilag_debug);
                else
-                       tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + dv, MOVE_NORMAL, ent, ANTILAG_LATENCY(ent));
+                       tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent, ANTILAG_LATENCY(ent));
        }
        else
-               tracebox(w_shotorg, mi, ma, w_shotorg + dv, MOVE_NORMAL, ent);
-       w_shotorg = trace_endpos;
+               tracebox(w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent);
+       w_shotorg = trace_endpos - forward * nudge;
        // calculate the shotdir from the chosen shotorg
        if(W_DualWielding(ent))
                w_shotdir = s_forward;
@@ -151,7 +154,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, .entity weaponentity, vect
        }
 
        // nudge w_shotend so a trace to w_shotend hits
-       w_shotend = w_shotend + normalize(w_shotend - w_shotorg);
+       w_shotend = w_shotend + normalize(w_shotend - w_shotorg) * nudge;
        //if(w_shotend != prevend) { printf("SERVER: shotEND differs: %s - %s\n", vtos(w_shotend), vtos(prevend)); }
        //if(w_shotorg != prevorg) { printf("SERVER: shotORG differs: %s - %s\n", vtos(w_shotorg), vtos(prevorg)); }
        //if(w_shotdir != prevdir) { printf("SERVER: shotDIR differs: %s - %s\n", vtos(w_shotdir), vtos(prevdir)); }