Example #1
0
void c_Network::ServerReceiveUserCmd( int ClientNum, void *UserCmdPacket, DWORD dwPacketSize )
{
	usercmd_t UserCmd[3];
	int i, SnapshotNum;
	BYTE *in,*bfChanged;
	U8 U8ServerTimeDiff;
	int ServerTimeDiff;

	in = (BYTE*)UserCmdPacket;

	if(dwPacketSize<sizeof(int)+sizeof(usercmd_t)) {
		Error( ERR_NETWORK, va("Corrupt usercmd packet from client %d",ClientNum) );
		return;
	}

	//Read in client's last received snapshot (used for delta-compression)
	SnapshotNum = *(int*)in;
	in += sizeof(int);

	memcpy( &UserCmd[0], in, sizeof(usercmd_t) );
	in += sizeof(usercmd_t);

	DQGame.ClientThink( ClientNum, &UserCmd[0], SnapshotNum );

	for(i=1; i<3; ++i) {
		
		//If there are no more bytes, return
		if((DWORD)in - (DWORD)UserCmdPacket>=dwPacketSize) {
			return;
		}

		//servertime
		U8ServerTimeDiff = *(U8*)in;
		++in;
		if(U8ServerTimeDiff == 0xFF) {
			ServerTimeDiff = *(int*)in;
			in += sizeof(int);
		}
		else {
			ServerTimeDiff = (int)U8ServerTimeDiff;
		}

		UserCmd[i].serverTime = UserCmd[0].serverTime + ServerTimeDiff;

		//everything else
		bfChanged = in;
		++in;
		ReadInt( 0x01, angles[0] );
		ReadInt( 0x02, angles[1] );
		ReadInt( 0x04, angles[2] );
		ReadInt( 0x08, buttons );
		ReadByte( 0x10, weapon );
		ReadSignedChar( 0x20, forwardmove );
		ReadSignedChar( 0x40, rightmove );
		ReadSignedChar( 0x80, upmove );

		DQGame.ClientThink( ClientNum, &UserCmd[i], SnapshotNum );
	}	
}
Example #2
0
/*
=================
idRestoreGame::ReadUsercmd
=================
*/
void idRestoreGame::ReadUsercmd( usercmd_t& usercmd )
{
	ReadByte( usercmd.buttons );
	ReadSignedChar( usercmd.forwardmove );
	ReadSignedChar( usercmd.rightmove );
	ReadShort( usercmd.angles[0] );
	ReadShort( usercmd.angles[1] );
	ReadShort( usercmd.angles[2] );
	ReadShort( usercmd.mx );
	ReadShort( usercmd.my );
	ReadByte( usercmd.impulse );
	ReadByte( usercmd.impulseSequence );
}
Example #3
0
/*
=================
idRestoreGame::ReadUsercmd
=================
*/
void idRestoreGame::ReadUsercmd( usercmd_t &usercmd ) {
	ReadInt( usercmd.gameFrame );
	ReadInt( usercmd.gameTime );
	ReadInt( usercmd.duplicateCount );
	ReadByte( usercmd.buttons );
	ReadSignedChar( usercmd.forwardmove );
	ReadSignedChar( usercmd.rightmove );
	ReadSignedChar( usercmd.upmove );
	ReadShort( usercmd.angles[0] );
	ReadShort( usercmd.angles[1] );
	ReadShort( usercmd.angles[2] );
	ReadShort( usercmd.mx );
	ReadShort( usercmd.my );
	ReadSignedChar( usercmd.impulse );
	ReadByte( usercmd.flags );
	ReadInt( usercmd.sequence );
}