X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=sv_move.c;h=ffaa44a716ffae147d941deaeae1decbf0797f7d;hb=ea7c24e1fb41f3b1df984ac0eed6881c9fde16f5;hp=87f3ed434a38ab1cd53b99de326a0701472b501c;hpb=8dcce44300385b12c46d494c06aadcfa35a8bc14;p=xonotic%2Fdarkplaces.git diff --git a/sv_move.c b/sv_move.c index 87f3ed43..ffaa44a7 100644 --- a/sv_move.c +++ b/sv_move.c @@ -71,7 +71,7 @@ realcheck: start[0] = stop[0] = (mins[0] + maxs[0])*0.5; start[1] = stop[1] = (mins[1] + maxs[1])*0.5; stop[2] = start[2] - 2*STEPSIZE; - trace = SV_Move (start, vec3_origin, vec3_origin, stop, true, ent); + trace = SV_Move (start, vec3_origin, vec3_origin, stop, MOVE_NOMONSTERS, ent); if (trace.fraction == 1.0) return false; @@ -84,7 +84,7 @@ realcheck: start[0] = stop[0] = x ? maxs[0] : mins[0]; start[1] = stop[1] = y ? maxs[1] : mins[1]; - trace = SV_Move (start, vec3_origin, vec3_origin, stop, true, ent); + trace = SV_Move (start, vec3_origin, vec3_origin, stop, MOVE_NOMONSTERS, ent); if (trace.fraction != 1.0 && trace.endpos[2] > bottom) bottom = trace.endpos[2]; @@ -110,12 +110,12 @@ pr_global_struct->trace_normal is set to the normal of the blocking wall qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink) { float dz; - vec3_t oldorg, neworg, end; + vec3_t oldorg, neworg, end, traceendpos; trace_t trace; int i; edict_t *enemy; -// try the move +// try the move VectorCopy (ent->v.origin, oldorg); VectorAdd (ent->v.origin, move, neworg); @@ -135,23 +135,24 @@ qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink) if (dz < 30) neworg[2] += 8; } - trace = SV_Move (ent->v.origin, ent->v.mins, ent->v.maxs, neworg, false, ent); - + trace = SV_Move (ent->v.origin, ent->v.mins, ent->v.maxs, neworg, MOVE_NORMAL, ent); + if (trace.fraction == 1) { - if ( ((int)ent->v.flags & FL_SWIM) && SV_PointContents(trace.endpos) == CONTENTS_EMPTY ) + VectorCopy(trace.endpos, traceendpos); + if ( ((int)ent->v.flags & FL_SWIM) && SV_PointContents(traceendpos) == CONTENTS_EMPTY ) return false; // swim monster left water - - VectorCopy (trace.endpos, ent->v.origin); + + VectorCopy (traceendpos, ent->v.origin); if (relink) SV_LinkEdict (ent, true); return true; } - + if (enemy == sv.edicts) break; } - + return false; } @@ -160,7 +161,7 @@ qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink) VectorCopy (neworg, end); end[2] -= STEPSIZE*2; - trace = SV_Move (neworg, ent->v.mins, ent->v.maxs, end, false, ent); + trace = SV_Move (neworg, ent->v.mins, ent->v.maxs, end, MOVE_NORMAL, ent); if (trace.allsolid) return false; @@ -168,7 +169,7 @@ qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink) if (trace.startsolid) { neworg[2] -= STEPSIZE; - trace = SV_Move (neworg, ent->v.mins, ent->v.maxs, end, false, ent); + trace = SV_Move (neworg, ent->v.mins, ent->v.maxs, end, MOVE_NORMAL, ent); if (trace.allsolid || trace.startsolid) return false; } @@ -181,7 +182,6 @@ qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink) if (relink) SV_LinkEdict (ent, true); ent->v.flags = (int)ent->v.flags & ~FL_ONGROUND; -// Con_Printf ("fall down\n"); return true; } @@ -205,10 +205,8 @@ qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink) } if ( (int)ent->v.flags & FL_PARTIALGROUND ) - { -// Con_Printf ("back on ground\n"); ent->v.flags = (int)ent->v.flags & ~FL_PARTIALGROUND; - } + ent->v.groundentity = EDICT_TO_PROG(trace.ent); // the move is ok @@ -267,8 +265,6 @@ SV_FixCheckBottom */ void SV_FixCheckBottom (edict_t *ent) { -// Con_Printf ("SV_FixCheckBottom\n"); - ent->v.flags = (int)ent->v.flags | FL_PARTIALGROUND; } @@ -287,8 +283,8 @@ void SV_NewChaseDir (edict_t *actor, edict_t *enemy, float dist) float d[3]; float tdir, olddir, turnaround; - olddir = anglemod( (int)(actor->v.ideal_yaw/45)*45 ); - turnaround = anglemod(olddir - 180); + olddir = ANGLEMOD((int)(actor->v.ideal_yaw/45)*45); + turnaround = ANGLEMOD(olddir - 180); deltax = enemy->v.origin[0] - actor->v.origin[0]; deltay = enemy->v.origin[1] - actor->v.origin[1];