Introduction:<br /><br />Compared to Zdaemon, Odamex feels delayed. It feels like what I see on my screen isn&#039;t happening in real time and the game often struggles to keep up with the actions I give it. Sometimes this is hard to pickup on, if all you are used to is Odamex. But if you play on odamex, and then try a game on zdaemon you immediately get a feeling of &quot;things are now happening at the same time as I see them and they were not before.&quot; Of course on both ports things are happening before you see them due to ping and other factors, but why does zdaemon feel so much more real time than odamex?<br /><br /><br />Tic Buffer: Odamex has a &quot;tic buffer&quot; which other online ports do not. This is a server controlled variable that is enabled by default. When enabled, Odamex only allows your client to execute 1 command per tic. Due to packet loss or jitter sometimes multiple commands come in at the same time. In this case Odamex will execute the first command and store the second command in a buffer and execute it on the next tic. On your next tic when the server gets another new command it will execute the stored buffer command and wait until the next tic to execute the new one. So in this example you are effectively on a 1 tic delay. This buffer can increase or decrease in size. After reaching a certain size it will let you execute 2 commands per tic to help reduce it. On other ports like zdaemon that do not have this buffer, all commands are executed when they arrive. So, players never get delayed, but they can zip across the screen when multiple movement commands arrive at the same time (unwanted behavior). So tic buffer provides a trade off: it removes the unwanted behavior of players possibly moving in a jittery fashion by adding the unwanted behavior of lagging players to do so. (This should not be confused with the cl_interp variable which is a client controlled variable that also provides a smooth movement for lag tradeoff in a different manner. )<br /><br /><br />So seeing that I get a delayed feeling on odamex compared to zdaemon (even when my cl_interp variable is set to 0) and knowing what tic buffer does, it seemed to me to be the prime suspect. I turned tic buffer off in a server and played some games. The delayed feeling was gone. Everything felt real time and much better; however the players moved really jittery. Alarmingly so. Obviously players should skip more with the tic buffer off; however, they shouldn&#039;t be skipping as much as I see, because zdaemon doesn&#039;t use the buffer and players skip much less on there. As far as we know, Odamex without the buffer should more or less behave like zdaemon.<br /><br /><br />So I set up a test. I got a zdaemon server and an odamex server hosted on the same machine and Watermelon and I joined both servers and recorded demos simply running around the outside area of d6m1. We did this back to back and because the same machine was hosting both servers with the same players, connection quality was identical in both games. The odamex server had the tic buffer turned off. Here are the demos (both are using map06 of zddl4.wad):<br /><br /><br />http://www.speedyshare.com/mn4rk/movementdemos.zip<br /><br /><br />As you can see, on zdaemon, players move much smoother than on odamex, even during particularly bad lag spikes. On Zdaemon watermelon only really had one lag skip (1:18) and it was not nearly that bad compared to what I saw all the time on odamex. Why such a difference when both ports are executing commands as soon as they come in? Well I analyzed both demos. I moved through them tic by tic using demo viewers and here&#039;s what I saw:<br /><br />-on zdaemon players always move every tic. When a lag spike occurs, they just seem to move at a faster rate.<br /><br />-on odamex players stop in place and then lurch forward. And can repeat this over and over. (Good example at 0:27)<br /><br /><br />So what&#039;s happening? To an experienced player with no doom coding experience, my best guess is that when zdaemon fails to receive a command on time it either applies the same movement commands to a player as on the previous tic or simply applies no movement commands but continues to move the player in the direction they were going based on momentum (if you run in a certain direction and let go of the movement key you will keep going for a little bit from momentum). Odamex on the other hand seems to freeze a player in position when it doesn&#039;t get a command in time. Then, when the commands get in, it repositions them based on where they should be. This makes for much more jittery movement, as the sudden change in position will be much greater on odamex than on zdaemon.<br /><br />Obviously I can&#039;t know this for certain it&#039;s just my best guess while not looking at the code. Perhaps others can shed some light on this?<br /><br />While not up to date here is the source for zdaemon 1.06. Maybe it could confirm my suspicions about zdaemon:<br /><br />http://www.speedyshare.com/A7HDW/zdaemon10611-win32-src.zip