summaryrefslogtreecommitdiff
path: root/src/game/bg_pmove.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/bg_pmove.c')
-rw-r--r--src/game/bg_pmove.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/game/bg_pmove.c b/src/game/bg_pmove.c
index 005cf46a..684e020a 100644
--- a/src/game/bg_pmove.c
+++ b/src/game/bg_pmove.c
@@ -383,16 +383,34 @@ static float PM_CmdScale( usercmd_t *cmd )
if( pm->ps->stats[ STAT_TEAM ] == TEAM_HUMANS && pm->ps->pm_type == PM_NORMAL )
{
- if( pm->ps->stats[ STAT_STAMINA ] > 0 && cmd->buttons & BUTTON_SPRINT )
+ qboolean wasSprinting;
+ qboolean sprint;
+ wasSprinting = sprint = pm->ps->stats[ STAT_STATE ] & SS_SPEEDBOOST;
+
+ if( pm->ps->persistant[ PERS_STATE ] & PS_SPRINTTOGGLE )
{
- modifier *= HUMAN_SPRINT_MODIFIER;
- pm->ps->stats[ STAT_STATE ] |= SS_SPEEDBOOST;
+ if( cmd->buttons & BUTTON_SPRINT &&
+ !( pm->ps->pm_flags & PMF_SPRINTHELD ) )
+ {
+ sprint = !sprint;
+ pm->ps->pm_flags |= PMF_SPRINTHELD;
+ }
+ else if( pm->ps->pm_flags & PMF_SPRINTHELD &&
+ !( cmd->buttons & BUTTON_SPRINT ) )
+ pm->ps->pm_flags &= ~PMF_SPRINTHELD;
}
else
- {
- modifier *= HUMAN_JOG_MODIFIER;
+ sprint = cmd->buttons & BUTTON_SPRINT;
+
+ if( sprint )
+ pm->ps->stats[ STAT_STATE ] |= SS_SPEEDBOOST;
+ else if( wasSprinting && !sprint )
pm->ps->stats[ STAT_STATE ] &= ~SS_SPEEDBOOST;
- }
+
+ if( sprint )
+ modifier *= HUMAN_SPRINT_MODIFIER;
+ else
+ modifier *= HUMAN_JOG_MODIFIER;
if( cmd->forwardmove < 0 )
{