I think this has a lot to do with the nagling, Spodi's friend..
Lookup setsockopt on the internet.. (You won't find many VB references for it, but it is fairly easy to convert..)
The function will look something like this, when you're done..
Code:
Call setsockopt(frmMirage.Socket.SocketHandle, TCP_NODELAY, 1, 4)
I believe the declaration for setsockopt() is something like this:
Code:
Public Declare Function setsockopt Lib "ws2_32.dll" (ByVal sHandle As Long, ByVal sFlag As Long, OptVal As Any, OptValLen As Long) As Long
There are some other things that you'll need declared, but not sure what they are atm.. Lookup SOCKET_ERROR and TCP_NODELAY on google, and I'm sure you'll find what you're looking for.
Basically, that turns off the buffer that is used by default in the winsock control.. (Which has some good points, but also has bad points if your packets are very small.. Spodi did an article on this somewhere...) This can be done on the server, too.. and might help with this issue...
...Though I think you will also need to make sure that the server sends all movement messages to the client, and make sure that the client buffers those movements, so that it doesn't skip over any... Since the client pretty much handles the movement code as soon as it is received, it will pop the other players into their 'new' x/y positions while they're walking/running, and make it look like they're skipping tiles.. (OMG U R Uzng Sped! U HAKER!)
Warning.. Theory stuff mentioned above, as I am not at home where my beloved VB and Visia are, so I cannot perform a test and give you 100% accurate information. :) Also, if you are using SOX or the JetByte IOCP ComSocketServer library, then the top section of this post shouldn't apply. :P
[edit]
Originally forgot the lib in the declaration.. silly me. :P
After looking over my code that I converted from the Platform SDK documentation, I am back with the correct declaration. :P
Code:
Public Const TCP_NODELAY = &H1&
Public Const SOL_SOCKET = &HFFFF&
Public Declare Function setsockopt Lib "ws2_32.dll" (ByVal s As Long, ByVal level As SocketOptions, ByVal optname As SocketOptions, optval As Any, ByVal optlen As Long) As Long
So the call to setsockopt() would look more like:
Code:
Dim OptVal As Long
OptVal = 1
Call setsockopt(frmMirage.Socket.SocketHandle, SOL_SOCKET, TCP_NODELAY, OptVal, Len(OptVal))