]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sv_phys.c
Only one player list is displayed now. Moved it a little bit down so if you set con_n...
[xonotic/darkplaces.git] / sv_phys.c
index fb567c8e5124da05b28cf0f57728b030e518ec4e..7189b842eaa286801c367cf951d94d983bcf68a1 100644 (file)
--- a/sv_phys.c
+++ b/sv_phys.c
@@ -247,18 +247,6 @@ int SV_FlyMove (edict_t *ent, float time, float *stepnormal)
                        VectorMA(ent->v->origin, time, ent->v->velocity, end);
                        trace = SV_Move (ent->v->origin, ent->v->mins, ent->v->maxs, end, MOVE_NORMAL, ent);
                        //Con_Printf("trace %f %f %f : %f : %f %f %f\n", trace.endpos[0], trace.endpos[1], trace.endpos[2], trace.fraction, trace.plane.normal[0], trace.plane.normal[1], trace.plane.normal[2]);
-#ifdef COLLISIONPARANOID
-                       {
-                               int endstuck;
-                               vec3_t temp;
-                               VectorCopy(trace.endpos, temp);
-                               endstuck = SV_Move(temp, ent->v->mins, ent->v->maxs, temp, MOVE_WORLDONLY, ent).startsolid;
-                               Con_Printf("%s{%i:%f %f %f:%f %f %f:%f:%f %f %f%s%s}\n", (trace.startsolid || endstuck) ? "\002" : "", bumpcount, ent->v->origin[0], ent->v->origin[1], ent->v->origin[2], end[0] - ent->v->origin[0], end[1] - ent->v->origin[1], end[2] - ent->v->origin[2], trace.fraction, trace.endpos[0] - ent->v->origin[0], trace.endpos[1] - ent->v->origin[1], trace.endpos[2] - ent->v->origin[2], trace.startsolid ? " startstuck" : "", endstuck ? " endstuck" : "");
-                               //Con_Printf("trace %f %f %f : %f : %f %f %f\n", trace.endpos[0], trace.endpos[1], trace.endpos[2], trace.fraction, trace.plane.normal[0], trace.plane.normal[1], trace.plane.normal[2]);
-                               if (endstuck)
-                                       Cbuf_AddText("disconnect\n");
-                       }
-#endif
 
                        /*
                        if (trace.startsolid)
@@ -537,7 +525,7 @@ trace_t SV_PushEntity (edict_t *ent, vec3_t push, vec3_t pushangles)
        ent->v->angles[1] += trace.fraction * pushangles[1];
        SV_LinkEdict (ent, true);
 
-       if (trace.fraction < 1 && trace.ent && (!((int)ent->v->flags & FL_ONGROUND) || ent->v->groundentity != EDICT_TO_PROG(trace.ent)))
+       if (trace.ent && (!((int)ent->v->flags & FL_ONGROUND) || ent->v->groundentity != EDICT_TO_PROG(trace.ent)))
                SV_Impact (ent, trace.ent);
        return trace;
 }
@@ -559,6 +547,12 @@ void SV_PushMove (edict_t *pusher, float movetime)
        int num_moved;
        model_t *pushermodel;
 
+       if (!pusher->v->velocity[0] && !pusher->v->velocity[1] && !pusher->v->velocity[2] && !pusher->v->avelocity[0] && !pusher->v->avelocity[1] && !pusher->v->avelocity[2])
+       {
+               pusher->v->ltime += movetime;
+               return;
+       }
+
        switch ((int) pusher->v->solid)
        {
        // LordHavoc: valid pusher types
@@ -572,17 +566,15 @@ void SV_PushMove (edict_t *pusher, float movetime)
        case SOLID_TRIGGER:
                VectorMA (pusher->v->origin, movetime, pusher->v->velocity, pusher->v->origin);
                VectorMA (pusher->v->angles, movetime, pusher->v->avelocity, pusher->v->angles);
+               pusher->v->angles[0] -= 360.0 * floor(pusher->v->angles[0] * (1.0 / 360.0));
+               pusher->v->angles[1] -= 360.0 * floor(pusher->v->angles[1] * (1.0 / 360.0));
+               pusher->v->angles[2] -= 360.0 * floor(pusher->v->angles[2] * (1.0 / 360.0));
                pusher->v->ltime += movetime;
                SV_LinkEdict (pusher, false);
                return;
        default:
                Host_Error("SV_PushMove: unrecognized solid type %f\n", pusher->v->solid);
        }
-       if (!pusher->v->velocity[0] && !pusher->v->velocity[1] && !pusher->v->velocity[2] && !pusher->v->avelocity[0] && !pusher->v->avelocity[1] && !pusher->v->avelocity[2])
-       {
-               pusher->v->ltime += movetime;
-               return;
-       }
        index = (int) pusher->v->modelindex;
        if (index < 1 || index >= MAX_MODELS)
                Host_Error("SV_PushMove: invalid modelindex %f\n", pusher->v->modelindex);
@@ -753,10 +745,13 @@ void SV_PushMove (edict_t *pusher, float movetime)
                                        pr_global_struct->other = EDICT_TO_PROG(check);
                                        PR_ExecuteProgram (pusher->v->blocked, "");
                                }
-                               return;
+                               break;
                        }
                }
        }
+       pusher->v->angles[0] -= 360.0 * floor(pusher->v->angles[0] * (1.0 / 360.0));
+       pusher->v->angles[1] -= 360.0 * floor(pusher->v->angles[1] * (1.0 / 360.0));
+       pusher->v->angles[2] -= 360.0 * floor(pusher->v->angles[2] * (1.0 / 360.0));
 }
 
 /*
@@ -956,7 +951,10 @@ int SV_TryUnstick (edict_t *ent, vec3_t oldvel)
 
                if (fabs(oldorg[1] - ent->v->origin[1]) > 4
                 || fabs(oldorg[0] - ent->v->origin[0]) > 4)
+               {
+                       Con_DPrintf("TryUnstick - success.\n");
                        return clip;
+               }
 
                // go back to the original pos and try again
                VectorCopy (oldorg, ent->v->origin);
@@ -964,6 +962,7 @@ int SV_TryUnstick (edict_t *ent, vec3_t oldvel)
 
        // still not moving
        VectorClear (ent->v->velocity);
+       Con_DPrintf("TryUnstick - failure.\n");
        return 7;
 }
 
@@ -1285,7 +1284,7 @@ void SV_Physics_Step (edict_t *ent)
                SV_AddGravity(ent);
                SV_CheckVelocity(ent);
                SV_FlyMove(ent, sv.frametime, NULL);
-               SV_LinkEdict(ent, false);
+               SV_LinkEdict(ent, true);
 
                // just hit ground
                if (hitsound && (int)ent->v->flags & FL_ONGROUND)
@@ -1377,7 +1376,9 @@ void SV_Physics (void)
                                        SV_AddGravity (ent);
                                SV_CheckStuck (ent);
                                SV_WalkMove (ent);
-                               SV_LinkEdict (ent, true);
+                               // relink normal entities here, players always get relinked so don't relink twice
+                               if (!(i > 0 && i <= svs.maxclients))
+                                       SV_LinkEdict (ent, true);
                        }
                        break;
                case MOVETYPE_TOSS: