MantisBT - Zandronum
|View Issue Details|
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0002295||Zandronum||[All Projects] Bug||public||2015-06-08 21:00||2018-05-09 09:51|
|Assigned To||Leonard|| |
|Product Version||2.0|| |
|Target Version||3.1||Fixed in Version||3.1|| |
|Summary||0002295: Wall-jitter misprediction issue with high ping|
Quote from Torr Samaho
Quote from unknownna
But I noticed a client-side misprediction that is not present in ZDaemon. You jitter when bumping into every wall in Zandronum.
It seems that the client is sometimes mispredicting how much the player is sliding against a wall, but only if the player changes his movement.
|Steps To Reproduce||1. zandronum -host|
2. Connect a client to the server with an emulated ping of 603.
3. Join the game.
4. Move into walls at a slight angle with +forward and then release +forward.
|Tags||No tags attached.|
|related to ||0000106||resolved ||Leonard ||Client mispredicts its z position in swimmable water online |
|has duplicate ||0002638||closed || ||Player prediction: desync when sliding on walls. |
|2015-06-08 21:00||unknownna||New Issue|
|2015-06-08 21:00||unknownna||Status||new => confirmed|
|2015-06-08 21:03||unknownna||Summary||Wall-jitter issue with high ping => Wall-jitter misprediction issue with high ping|
|2017-09-11 17:06||Dusk||Relationship added||has duplicate 0002638|
|2017-09-11 17:06||Dusk||Relationship added||related to 0000106|
|2017-09-11 17:07||Dusk||Status||confirmed => needs review|
|2017-09-11 17:32||Leonard||Note Added: 0018273|
|2017-09-11 18:48||Dusk||Target Version|| => 3.1|
|2017-09-17 16:10||Torr Samaho||Note Added: 0018302|
|2017-09-17 16:10||Torr Samaho||Status||needs review => feedback|
|2017-10-04 16:16||Leonard||Status||feedback => needs testing|
|2017-10-23 15:05||Leonard||Status||needs testing => assigned|
|2017-10-23 15:05||Leonard||Assigned To|| => Leonard|
|2017-10-23 15:06||Leonard||Status||assigned => needs testing|
|2018-05-08 20:24||StrikerMan780||Note Added: 0019228|
|2018-05-09 09:51||Leonard||Status||needs testing => resolved|
|2018-05-09 09:51||Leonard||Resolution||open => fixed|
|2018-05-09 09:51||Leonard||Fixed in Version|| => 3.1|
With the test wad: simply typing "+forward;wait;-forward" in console with 200 ping is enough to get the desync every time.
The problem comes from the fact that the player prediction doesn't actually set the player's ticcmd but only passes it as an argument.
This is problematic because the physics code later use that ticcmd to determine velocity:
In p_mobj.cpp, line 2559:
if (mo->velx > -STOPSPEED && mo->velx < STOPSPEED
&& mo->vely > -STOPSPEED && mo->vely < STOPSPEED
&& (!player || (player->mo != mo)
|| !(player->cmd.ucmd.forwardmove | player->cmd.ucmd.sidemove)))
Good finding! I just have a technical question, please see my comment on bitbucket.
I used gamer proxy with a ping of 603, and tried bumping and sliding against the walls. I didn't seem to get any jitter/misprediction from doing so.