I know it is a bit old but maybe helpful to someone. I just used Direct Play in a small game I made and I to needed to flush the messages to smooth out the game play. I did this by putting my RecvNetMsg routine in a repeat loop. Ending the loop with Until RecvNetMsg()=False to flush the server messages after each access. It work very nice and solved a lag issue I had with one computer that was behind a firewall which would get farther behind in this action game as the game went on because of a backlog of messages.
Something like this,
Repeat
If RecvNetMsg() Then
msgType=NetMsgType()
If msgType>0 And msgType<100 Then
msgFrom=NetMsgFrom()
If player=1 Then
msgData$=NetMsgData$()
If msgdata$="player1hit" Then p2score=p2score+1 : Goto reset
player2x=stringtonumber(msgdata$,1)
player2y=stringtonumber(msgdata$,2)
player2frame=stringtonumber(msgdata$,3)
bullet2x=stringtonumber(msgdata$,4)
bullet2y=stringtonumber(msgdata$,5)
ElseIf player=2 Then
msgData$=NetMsgData$()
If msgdata$="player2hit" Then p1score=p1score+1 : Goto reset
player1x=stringtonumber(msgdata$,1)
player1Y=stringtonumber(msgdata$,2)
player1frame=stringtonumber(msgdata$,3)
bullet1x=stringtonumber(msgdata$,4)
bullet1y=stringtonumber(msgdata$,5)
EndIf
EndIf
EndIf
Until RecvNetMsg()=False
This way I read the messages until there is no message to read and keep the data in the last message.
CTP