v_*cshift/v_bonusflash vars default to 1, import fixes (hopefully) to pmove
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2297 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
31eaf52ce9
commit
0127ad7039
4 changed files with 97 additions and 56 deletions
|
@ -85,14 +85,14 @@ cvar_t crosshairalpha = SCVAR("crosshairalpha", "1");
|
||||||
|
|
||||||
cvar_t gl_cshiftpercent = SCVAR("gl_cshiftpercent", "100");
|
cvar_t gl_cshiftpercent = SCVAR("gl_cshiftpercent", "100");
|
||||||
|
|
||||||
cvar_t v_bonusflash = SCVAR("v_bonusflash", "0");
|
cvar_t v_bonusflash = SCVAR("v_bonusflash", "1");
|
||||||
|
|
||||||
cvar_t v_contentblend = SCVARF("v_contentblend", "0", CVAR_ARCHIVE);
|
cvar_t v_contentblend = SCVARF("v_contentblend", "1", CVAR_ARCHIVE);
|
||||||
cvar_t v_damagecshift = SCVAR("v_damagecshift", "0");
|
cvar_t v_damagecshift = SCVAR("v_damagecshift", "1");
|
||||||
cvar_t v_quadcshift = SCVAR("v_quadcshift", "0");
|
cvar_t v_quadcshift = SCVAR("v_quadcshift", "1");
|
||||||
cvar_t v_suitcshift = SCVAR("v_suitcshift", "0");
|
cvar_t v_suitcshift = SCVAR("v_suitcshift", "1");
|
||||||
cvar_t v_ringcshift = SCVAR("v_ringcshift", "0");
|
cvar_t v_ringcshift = SCVAR("v_ringcshift", "1");
|
||||||
cvar_t v_pentcshift = SCVAR("v_pentcshift", "0");
|
cvar_t v_pentcshift = SCVAR("v_pentcshift", "1");
|
||||||
cvar_t v_gunkick = SCVAR("v_gunkick", "0");
|
cvar_t v_gunkick = SCVAR("v_gunkick", "0");
|
||||||
|
|
||||||
cvar_t v_viewheight = SCVAR("v_viewheight", "0");
|
cvar_t v_viewheight = SCVAR("v_viewheight", "0");
|
||||||
|
|
|
@ -48,26 +48,38 @@ void PM_Init (void)
|
||||||
#define BLOCKED_OTHER 4
|
#define BLOCKED_OTHER 4
|
||||||
#define BLOCKED_ANY 7
|
#define BLOCKED_ANY 7
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Add an entity to touch list, discarding duplicates
|
||||||
|
*/
|
||||||
|
static void PM_AddTouchedEnt (int num)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (pmove.numtouch == sizeof(pmove.touchindex)/sizeof(pmove.touchindex[0]))
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < pmove.numtouch; i++)
|
||||||
|
if (pmove.touchindex[i] == num)
|
||||||
|
return; // already added
|
||||||
|
|
||||||
|
pmove.touchindex[pmove.numtouch] = num;
|
||||||
|
pmove.numtouch++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
PM_ClipVelocity
|
PM_ClipVelocity
|
||||||
|
|
||||||
Slide off of the impacting object
|
Slide off of the impacting object
|
||||||
returns the blocked flags (1 = floor, 2 = step / wall)
|
|
||||||
==================
|
==================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int PM_ClipVelocity (vec3_t in, vec3_t normal, vec3_t out, float overbounce)
|
void PM_ClipVelocity (vec3_t in, vec3_t normal, vec3_t out, float overbounce)
|
||||||
{
|
{
|
||||||
float backoff;
|
float backoff;
|
||||||
float change;
|
float change;
|
||||||
int i, blocked;
|
int i;
|
||||||
|
|
||||||
blocked = 0;
|
|
||||||
if (normal[2] > 0)
|
|
||||||
blocked |= BLOCKED_FLOOR; // floor
|
|
||||||
if (!normal[2])
|
|
||||||
blocked |= BLOCKED_STEP; // step
|
|
||||||
|
|
||||||
backoff = DotProduct (in, normal) * overbounce;
|
backoff = DotProduct (in, normal) * overbounce;
|
||||||
|
|
||||||
|
@ -78,8 +90,6 @@ int PM_ClipVelocity (vec3_t in, vec3_t normal, vec3_t out, float overbounce)
|
||||||
if (out[i] > -STOP_EPSILON && out[i] < STOP_EPSILON)
|
if (out[i] > -STOP_EPSILON && out[i] < STOP_EPSILON)
|
||||||
out[i] = 0;
|
out[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return blocked;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -138,11 +148,7 @@ int PM_SlideMove (void)
|
||||||
break; // moved the entire distance
|
break; // moved the entire distance
|
||||||
|
|
||||||
// save entity for contact
|
// save entity for contact
|
||||||
if (pmove.numtouch < MAX_PHYSENTS)
|
PM_AddTouchedEnt (trace.entnum);
|
||||||
{
|
|
||||||
pmove.touchindex[pmove.numtouch] = trace.entnum;
|
|
||||||
pmove.numtouch++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trace.plane.normal[2] >= MIN_STEP_NORMAL)
|
if (trace.plane.normal[2] >= MIN_STEP_NORMAL)
|
||||||
blocked |= BLOCKED_FLOOR;
|
blocked |= BLOCKED_FLOOR;
|
||||||
|
@ -237,13 +243,14 @@ Each intersection will try to step over the obstruction instead of
|
||||||
sliding along it.
|
sliding along it.
|
||||||
=============
|
=============
|
||||||
*/
|
*/
|
||||||
void PM_StepSlideMove (void)
|
int PM_StepSlideMove (qboolean in_air)
|
||||||
{
|
{
|
||||||
vec3_t dest;
|
vec3_t dest;
|
||||||
trace_t trace;
|
trace_t trace;
|
||||||
vec3_t original, originalvel, down, up, downvel;
|
vec3_t original, originalvel, down, up, downvel;
|
||||||
float downdist, updist;
|
float downdist, updist;
|
||||||
int blocked;
|
int blocked;
|
||||||
|
float stepsize;
|
||||||
|
|
||||||
// try sliding forward both on ground and up 16 pixels
|
// try sliding forward both on ground and up 16 pixels
|
||||||
// take the move that goes farthest
|
// take the move that goes farthest
|
||||||
|
@ -253,7 +260,33 @@ void PM_StepSlideMove (void)
|
||||||
blocked = PM_SlideMove ();
|
blocked = PM_SlideMove ();
|
||||||
|
|
||||||
if (!blocked)
|
if (!blocked)
|
||||||
return; // moved the entire distance
|
return blocked; // moved the entire distance
|
||||||
|
|
||||||
|
if (in_air)
|
||||||
|
{
|
||||||
|
// don't let us step up unless it's indeed a step we bumped in
|
||||||
|
// (that is, there's solid ground below)
|
||||||
|
float *org;
|
||||||
|
|
||||||
|
if (!(blocked & BLOCKED_STEP))
|
||||||
|
return blocked;
|
||||||
|
|
||||||
|
//FIXME: "pmove.velocity < 0" ???? :)
|
||||||
|
// Of course I meant pmove.velocity[2], but I'm afraid I don't understand
|
||||||
|
// the code's purpose any more, so let it stay just this way for now :) -- Tonik
|
||||||
|
org = (pmove.velocity < 0) ? pmove.origin : original; // cryptic, eh?
|
||||||
|
VectorCopy (org, dest);
|
||||||
|
dest[2] -= pm_stepheight;
|
||||||
|
trace = PM_PlayerTrace (org, dest);
|
||||||
|
if (trace.fraction == 1 || trace.plane.normal[2] < MIN_STEP_NORMAL)
|
||||||
|
return blocked;
|
||||||
|
|
||||||
|
// adjust stepsize, otherwise it would be possible to walk up a
|
||||||
|
// a step higher than STEPSIZE
|
||||||
|
stepsize = pm_stepheight - (org[2] - trace.endpos[2]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
stepsize = pm_stepheight;
|
||||||
|
|
||||||
VectorCopy (pmove.origin, down);
|
VectorCopy (pmove.origin, down);
|
||||||
VectorCopy (pmove.velocity, downvel);
|
VectorCopy (pmove.velocity, downvel);
|
||||||
|
@ -263,7 +296,7 @@ void PM_StepSlideMove (void)
|
||||||
|
|
||||||
// move up a stair height
|
// move up a stair height
|
||||||
VectorCopy (pmove.origin, dest);
|
VectorCopy (pmove.origin, dest);
|
||||||
dest[2] += pm_stepheight;
|
dest[2] += stepsize;
|
||||||
trace = PM_PlayerTrace (pmove.origin, dest);
|
trace = PM_PlayerTrace (pmove.origin, dest);
|
||||||
if (!trace.startsolid && !trace.allsolid)
|
if (!trace.startsolid && !trace.allsolid)
|
||||||
{
|
{
|
||||||
|
@ -274,7 +307,7 @@ void PM_StepSlideMove (void)
|
||||||
|
|
||||||
// press down the stepheight
|
// press down the stepheight
|
||||||
VectorCopy (pmove.origin, dest);
|
VectorCopy (pmove.origin, dest);
|
||||||
dest[2] -= pm_stepheight;
|
dest[2] -= stepsize;
|
||||||
trace = PM_PlayerTrace (pmove.origin, dest);
|
trace = PM_PlayerTrace (pmove.origin, dest);
|
||||||
if (trace.fraction != 1 && trace.plane.normal[2] < MIN_STEP_NORMAL)
|
if (trace.fraction != 1 && trace.plane.normal[2] < MIN_STEP_NORMAL)
|
||||||
goto usedown;
|
goto usedown;
|
||||||
|
@ -299,7 +332,7 @@ void PM_StepSlideMove (void)
|
||||||
usedown:
|
usedown:
|
||||||
VectorCopy (down, pmove.origin);
|
VectorCopy (down, pmove.origin);
|
||||||
VectorCopy (downvel, pmove.velocity);
|
VectorCopy (downvel, pmove.velocity);
|
||||||
return;
|
return blocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy z value from slide move
|
// copy z value from slide move
|
||||||
|
@ -313,6 +346,8 @@ usedown:
|
||||||
pmove.velocity[0] *= scale;
|
pmove.velocity[0] *= scale;
|
||||||
pmove.velocity[1] *= scale;
|
pmove.velocity[1] *= scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return blocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -501,7 +536,7 @@ void PM_WaterMove (void)
|
||||||
//
|
//
|
||||||
PM_Accelerate (wishdir, wishspeed, movevars.wateraccelerate);
|
PM_Accelerate (wishdir, wishspeed, movevars.wateraccelerate);
|
||||||
|
|
||||||
PM_StepSlideMove ();
|
PM_StepSlideMove (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -529,7 +564,7 @@ void PM_FlyMove ()
|
||||||
|
|
||||||
PM_Accelerate (wishdir, wishspeed, movevars.accelerate);
|
PM_Accelerate (wishdir, wishspeed, movevars.accelerate);
|
||||||
|
|
||||||
PM_StepSlideMove ();
|
PM_StepSlideMove (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PM_LadderMove (void)
|
void PM_LadderMove (void)
|
||||||
|
@ -619,10 +654,18 @@ void PM_AirMove (void)
|
||||||
|
|
||||||
if (pmove.onground)
|
if (pmove.onground)
|
||||||
{
|
{
|
||||||
if (pmove.velocity[2] > 0 || !movevars.slidefix)
|
if (movevars.slidefix)
|
||||||
|
{
|
||||||
|
pmove.velocity[2] = min(pmove.velocity[2], 0); // bound above by 0
|
||||||
|
PM_Accelerate (wishdir, wishspeed, movevars.accelerate);
|
||||||
|
// add gravity
|
||||||
|
pmove.velocity[2] -= movevars.entgravity * movevars.gravity * frametime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
pmove.velocity[2] = 0;
|
pmove.velocity[2] = 0;
|
||||||
PM_Accelerate (wishdir, wishspeed, movevars.accelerate);
|
PM_Accelerate (wishdir, wishspeed, movevars.accelerate);
|
||||||
pmove.velocity[2] -= movevars.entgravity * movevars.gravity * frametime;
|
}
|
||||||
|
|
||||||
if (!pmove.velocity[0] && !pmove.velocity[1] && !movevars.slidyslopes)
|
if (!pmove.velocity[0] && !pmove.velocity[1] && !movevars.slidyslopes)
|
||||||
{
|
{
|
||||||
|
@ -632,20 +675,22 @@ void PM_AirMove (void)
|
||||||
else if (!movevars.slidefix && !movevars.slidyslopes)
|
else if (!movevars.slidefix && !movevars.slidyslopes)
|
||||||
pmove.velocity[2] = 0;
|
pmove.velocity[2] = 0;
|
||||||
|
|
||||||
PM_StepSlideMove ();
|
PM_StepSlideMove(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // not on ground, so little effect on velocity
|
{
|
||||||
|
int blocked;
|
||||||
|
|
||||||
|
// not on ground, so little effect on velocity
|
||||||
PM_AirAccelerate (wishdir, wishspeed, movevars.accelerate);
|
PM_AirAccelerate (wishdir, wishspeed, movevars.accelerate);
|
||||||
// PM_Accelerate (wishdir, wishspeed, movevars.airaccelerate);
|
|
||||||
|
|
||||||
// add gravity
|
// add gravity
|
||||||
pmove.velocity[2] -= movevars.entgravity * movevars.gravity * frametime;
|
pmove.velocity[2] -= movevars.entgravity * movevars.gravity * frametime;
|
||||||
|
|
||||||
if (movevars.airstep)
|
if (movevars.airstep)
|
||||||
PM_StepSlideMove ();
|
blocked = PM_StepSlideMove (true);
|
||||||
else
|
else
|
||||||
PM_SlideMove ();
|
blocked = PM_SlideMove ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -691,12 +736,7 @@ void PM_CategorizePosition (void)
|
||||||
|
|
||||||
// standing on an entity other than the world
|
// standing on an entity other than the world
|
||||||
if (trace.entnum > 0)
|
if (trace.entnum > 0)
|
||||||
{
|
PM_AddTouchedEnt (trace.entnum);
|
||||||
if (pmove.numtouch < MAX_PHYSENTS) {
|
|
||||||
pmove.touchindex[pmove.numtouch] = trace.entnum;
|
|
||||||
pmove.numtouch++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -770,7 +810,7 @@ void PM_CategorizePosition (void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (pmove.onground && pmove.pm_type != PM_FLY && pmove.waterlevel < 3)
|
if (pmove.onground && pmove.pm_type != PM_FLY && pmove.waterlevel < 2)
|
||||||
{
|
{
|
||||||
// snap to ground so that we can't jump higher than we're supposed to
|
// snap to ground so that we can't jump higher than we're supposed to
|
||||||
if (!trace.startsolid && !trace.allsolid)
|
if (!trace.startsolid && !trace.allsolid)
|
||||||
|
@ -825,8 +865,7 @@ void PM_CheckJump (void)
|
||||||
|
|
||||||
// check for jump bug
|
// check for jump bug
|
||||||
// groundplane normal was set in the call to PM_CategorizePosition
|
// groundplane normal was set in the call to PM_CategorizePosition
|
||||||
if (pmove.velocity[2] < 0 &&
|
if (pmove.velocity[2] < 0 && DotProduct(pmove.velocity, groundplane.normal) < -0.1)
|
||||||
DotProduct(pmove.velocity, groundplane.normal) < -0.1)
|
|
||||||
{
|
{
|
||||||
// pmove.velocity is pointing into the ground, clip it
|
// pmove.velocity is pointing into the ground, clip it
|
||||||
PM_ClipVelocity (pmove.velocity, groundplane.normal, pmove.velocity, 1);
|
PM_ClipVelocity (pmove.velocity, groundplane.normal, pmove.velocity, 1);
|
||||||
|
@ -860,7 +899,7 @@ void PM_CheckWaterJump (void)
|
||||||
int cont;
|
int cont;
|
||||||
vec3_t flatforward;
|
vec3_t flatforward;
|
||||||
|
|
||||||
if (pmove.waterjumptime>0)
|
if (pmove.waterjumptime)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// don't hop out if we just jumped in
|
// don't hop out if we just jumped in
|
||||||
|
|
|
@ -78,6 +78,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#define Z_EXT_PITCHLIMITS (1<<4) // serverinfo maxpitch & minpitch
|
#define Z_EXT_PITCHLIMITS (1<<4) // serverinfo maxpitch & minpitch
|
||||||
#define Z_EXT_JOIN_OBSERVE (1<<5) // server: "join" and "observe" commands are supported
|
#define Z_EXT_JOIN_OBSERVE (1<<5) // server: "join" and "observe" commands are supported
|
||||||
// client: on-the-fly spectator <-> player switching supported
|
// client: on-the-fly spectator <-> player switching supported
|
||||||
|
|
||||||
#define SUPPORTED_Z_EXTENSIONS (Z_EXT_PM_TYPE|Z_EXT_PM_TYPE_NEW|Z_EXT_VIEWHEIGHT|Z_EXT_SERVERTIME|Z_EXT_PITCHLIMITS|Z_EXT_JOIN_OBSERVE)
|
#define SUPPORTED_Z_EXTENSIONS (Z_EXT_PM_TYPE|Z_EXT_PM_TYPE_NEW|Z_EXT_VIEWHEIGHT|Z_EXT_SERVERTIME|Z_EXT_PITCHLIMITS|Z_EXT_JOIN_OBSERVE)
|
||||||
|
|
||||||
|
|
||||||
|
@ -340,6 +341,7 @@ enum clcq2_ops_e
|
||||||
(1<<12) +\
|
(1<<12) +\
|
||||||
(1<<13))
|
(1<<13))
|
||||||
|
|
||||||
|
|
||||||
#define PF_EXTRA_PFS (1<<15)
|
#define PF_EXTRA_PFS (1<<15)
|
||||||
|
|
||||||
//FIXME: Resolve this.
|
//FIXME: Resolve this.
|
||||||
|
|
|
@ -54,12 +54,12 @@ cvar_t sv_friction = SCVAR( "sv_friction", "4");
|
||||||
cvar_t sv_waterfriction = SCVAR( "sv_waterfriction", "4");
|
cvar_t sv_waterfriction = SCVAR( "sv_waterfriction", "4");
|
||||||
cvar_t sv_gameplayfix_noairborncorpse = SCVAR( "sv_gameplayfix_noairborncorpse", "0");
|
cvar_t sv_gameplayfix_noairborncorpse = SCVAR( "sv_gameplayfix_noairborncorpse", "0");
|
||||||
|
|
||||||
cvar_t pm_ktjump = SCVARF("pm_ktjump", "", CVAR_SERVERINFO);
|
cvar_t pm_ktjump = SCVARF("pm_ktjump", "0", CVAR_SERVERINFO);
|
||||||
cvar_t pm_bunnyspeedcap = SCVARF("pm_bunnyspeedcap", "", CVAR_SERVERINFO);
|
cvar_t pm_bunnyspeedcap = SCVARF("pm_bunnyspeedcap", "0", CVAR_SERVERINFO);
|
||||||
cvar_t pm_slidefix = SCVARF("pm_slidefix", "", CVAR_SERVERINFO);
|
cvar_t pm_slidefix = SCVARF("pm_slidefix", "0", CVAR_SERVERINFO);
|
||||||
cvar_t pm_slidyslopes = SCVARF("pm_slidyslopes", "", CVAR_SERVERINFO);
|
cvar_t pm_slidyslopes = SCVARF("pm_slidyslopes", "0", CVAR_SERVERINFO);
|
||||||
cvar_t pm_airstep = SCVARF("pm_airstep", "", CVAR_SERVERINFO);
|
cvar_t pm_airstep = SCVARF("pm_airstep", "0", CVAR_SERVERINFO);
|
||||||
cvar_t pm_walljump = SCVARF("pm_walljump", "", CVAR_SERVERINFO);
|
cvar_t pm_walljump = SCVARF("pm_walljump", "0", CVAR_SERVERINFO);
|
||||||
|
|
||||||
extern cvar_t sv_nomsec;
|
extern cvar_t sv_nomsec;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue