View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0004741 | The Dark Mod | Physics | public | 08.02.2018 11:27 | 01.02.2019 05:50 |
Reporter | grayman | Assigned To | grayman | ||
Priority | normal | Severity | normal | Reproducibility | random |
Status | resolved | Resolution | fixed | ||
Product Version | TDM 2.06 | ||||
Target Version | TDM 2.06 | Fixed in Version | TDM 2.06 | ||
Summary | 0004741: Possible stutter in player movement | ||||
Description | Player movement sometimes stutters, as if something is holding you back for a brief moment. | ||||
Tags | No tags attached. | ||||
Attached Files | framelock+curb_fix.txt (3,779 bytes)
Index: game/physics/Physics_Player.cpp =================================================================== --- game/physics/Physics_Player.cpp (Revision 7370) +++ game/physics/Physics_Player.cpp (Arbeitskopie) @@ -449,6 +449,9 @@ // greebo: HACK ALARM: We add a "counter-gravity" this frame to avoid us from being dragged down again in the next frame // TODO: Maybe we can do this somewhere else, where the player is sliding off slopes. current.velocity -= gravityVector * frametime * 3; + + // BluePill: HACK to prevent sliding down curbs on high framerates. + m_SlopeIgnoreTimer = (framemsec < USERCMD_MSEC) ? 250 : 0; } } @@ -901,14 +904,6 @@ */ void idPhysics_Player::WalkMove( void ) { - static float moveTimeAccum = 0; - moveTimeAccum += frametime; - while ( moveTimeAccum < MS2SEC( USERCMD_MSEC ) ) { - return; - } - frametime = moveTimeAccum; - moveTimeAccum = 0; - if ( waterLevel > WATERLEVEL_WAIST && (viewForward * groundTrace.c.normal) > 0.0f ) { // begin swimming @@ -1911,24 +1906,27 @@ current.velocity += 3*velocityChange; walkNormal = MIN_WALK_SLICK_NORMAL; } + + // don't check for slopes for a short time (only used for high framerates) + if (m_SlopeIgnoreTimer <= 0) { + // slopes that are too steep will not be considered onground + if ( ( groundTrace.c.normal * -gravityNormal ) < walkNormal ) // grayman #2409 + { + if ( debugLevel ) { + gameLocal.Printf( "%i:steep\n", c_pmove ); + } - // slopes that are too steep will not be considered onground - if ( ( groundTrace.c.normal * -gravityNormal ) < walkNormal ) // grayman #2409 - { - if ( debugLevel ) { - gameLocal.Printf( "%i:steep\n", c_pmove ); - } + // FIXME: if they can't slide down the slope, let them walk (sharp crevices) - // FIXME: if they can't slide down the slope, let them walk (sharp crevices) + // make sure we don't die from sliding down a steep slope + if ( current.velocity * gravityNormal > 150.0f ) { + current.velocity -= ( current.velocity * gravityNormal - 150.0f ) * gravityNormal; + } - // make sure we don't die from sliding down a steep slope - if ( current.velocity * gravityNormal > 150.0f ) { - current.velocity -= ( current.velocity * gravityNormal - 150.0f ) * gravityNormal; + groundPlane = true; + walking = false; + return; } - - groundPlane = true; - walking = false; - return; } groundPlane = true; @@ -2588,6 +2586,10 @@ current.movementFlags &= ~(PMF_JUMPED|PMF_STEPPED_UP|PMF_STEPPED_DOWN); current.stepUp = 0.0f; + // update the slope ignore timer + if (m_SlopeIgnoreTimer > 0) + m_SlopeIgnoreTimer -= framemsec; + if ( command.upmove < 10 ) { // not holding jump current.movementFlags &= ~PMF_JUMP_HELD; @@ -2913,6 +2915,8 @@ m_PushForce = CForcePushPtr(new CForcePush); + m_SlopeIgnoreTimer = 0; + // swimming waterLevel = WATERLEVEL_NONE; waterType = 0; @@ -3136,6 +3140,8 @@ savefile->ReadInt( m_NextAttachTime ); + m_SlopeIgnoreTimer = 0; + savefile->ReadInt( (int &)waterLevel ); savefile->ReadInt( waterType ); Index: game/physics/Physics_Player.h =================================================================== --- game/physics/Physics_Player.h (Revision 7370) +++ game/physics/Physics_Player.h (Arbeitskopie) @@ -364,6 +364,12 @@ int m_NextAttachTime; /** + * Timer value used as a workaround to step up curbs on high framerates. + * Only set at a frametime below USERCMD_MSEC and decreased by the frametime each movement frame. + **/ + int m_SlopeIgnoreTimer; + + /** * View yaw and pitch changes between this frame and last frame * In degrees. **/ | ||||
Comment from duzenko: "You might want to look at rev 7133 and 6968." |
|
Spent another hour on this today and I couldn't reproduce it. It might have to wait to get fixed in 2.07. |
|
Uploaded framelock+curb_fix.txt, which should address the movement stutter and an issue walking to the curb with high framerates in TD4 : The Alchemist (leaving framerates below 63fps completely untouched). | |
Unless someone beats me to it, I'll look at this tomorrow. Thanks. |
|
Speak o' the devil... SVN Rev 7371 Physics_Player.h Physics_Player.cpp |
|
Date Modified | Username | Field | Change |
---|---|---|---|
08.02.2018 11:27 | grayman | New Issue | |
08.02.2018 11:27 | grayman | Status | new => assigned |
08.02.2018 11:27 | grayman | Assigned To | => grayman |
08.02.2018 11:29 | grayman | Note Added: 0010044 | |
08.02.2018 20:13 | grayman | Note Added: 0010045 | |
12.03.2018 21:13 | BluePill | File Added: framelock+curb_fix.txt | |
12.03.2018 21:17 | BluePill | Note Added: 0010050 | |
13.03.2018 02:41 | grayman | Note Added: 0010051 | |
13.03.2018 02:52 | nbohr1more | Note Added: 0010052 | |
14.03.2018 16:32 | grayman | Status | assigned => resolved |
14.03.2018 16:32 | grayman | Resolution | open => fixed |
14.03.2018 16:32 | grayman | Fixed in Version | => TDM 2.06 |
01.02.2019 05:50 | nbohr1more | Relationship added | child of 0004493 |