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 |