Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
183 changes: 47 additions & 136 deletions src/engine/qcommon/msg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ void MSG_WriteBits( msg_t *msg, int value, int bits )

*ip = LittleLong( value );
msg->cursize += 4;
msg->bit += 8;
msg->bit += 32;
}
else
{
Expand All @@ -190,9 +190,6 @@ void MSG_WriteBits( msg_t *msg, int value, int bits )
}
else
{
value &= ( 0xffffffff >> ( 32 - bits ) );

if ( bits & 7 )
{
int nbits;

Expand All @@ -207,13 +204,10 @@ void MSG_WriteBits( msg_t *msg, int value, int bits )
bits = bits - nbits;
}

if ( bits )
for ( i = 0; i < bits; i += 8 )
{
for ( i = 0; i < bits; i += 8 )
{
Huff_offsetTransmit( &msgHuff.compressor, ( value & 0xff ), msg->data, &msg->bit );
value = ( value >> 8 );
}
Huff_offsetTransmit( &msgHuff.compressor, ( value & 0xff ), msg->data, &msg->bit );
value = ( value >> 8 );
}

msg->cursize = ( msg->bit >> 3 ) + 1;
Expand Down Expand Up @@ -301,30 +295,14 @@ int MSG_ReadBits( msg_t *msg, int bits )
// writing functions
//

void MSG_WriteChar( msg_t *sb, int c )
{
#ifdef PARANOID

if ( c < -128 || c > 127 )
{
Sys::Error( "MSG_WriteChar: range error" );
}

#endif

MSG_WriteBits( sb, c, 8 );
}

// uint8_t
void MSG_WriteByte( msg_t *sb, int c )
{
#ifdef PARANOID

if ( c < 0 || c > 255 )
{
Sys::Error( "MSG_WriteByte: range error" );
Log::Warn( "MSG_WriteByte: value %d out of range", c );
}

#endif

MSG_WriteBits( sb, c, 8 );
}
Expand All @@ -339,37 +317,34 @@ void MSG_WriteData( msg_t *buf, const void *data, int length )
}
}

// int16_t
void MSG_WriteShort( msg_t *sb, int c )
{
#ifdef PARANOID

if ( c < ( ( short ) 0x8000 ) || c > ( short ) 0x7fff )
if ( c < -0x8000 || c >= 0x8000 )
{
Sys::Error( "MSG_WriteShort: range error" );
Log::Warn( "MSG_WriteShort: value %d out of range", c );
}

#endif
MSG_WriteBits( sb, c, -16 );
}

// uint16_t
void MSG_WriteUShort( msg_t *sb, int c )
{
if ( c & ~0xFFFF )
{
Log::Warn( "MSG_WriteUShort: value %d out of range", c );
}

MSG_WriteBits( sb, c, 16 );
}

// int32_t
void MSG_WriteLong( msg_t *sb, int c )
{
MSG_WriteBits( sb, c, 32 );
}

void MSG_WriteFloat( msg_t *sb, float f )
{
union
{
float f;
int l;
} dat;

dat.f = f;
MSG_WriteBits( sb, dat.l, 32 );
}

void MSG_WriteString( msg_t *sb, const char *s )
{
if ( !s )
Expand All @@ -378,21 +353,16 @@ void MSG_WriteString( msg_t *sb, const char *s )
}
else
{
int l;
char string[ MAX_STRING_CHARS ];

l = strlen( s );
size_t l = strlen( s );

if ( l >= MAX_STRING_CHARS )
{
Log::Notice( "MSG_WriteString: MAX_STRING_CHARS exceeded" );
Log::Warn( "MSG_WriteString: MAX_STRING_CHARS exceeded" );
MSG_WriteData( sb, "", 1 );
return;
}

Q_strncpyz( string, s, sizeof( string ) );

MSG_WriteData( sb, string, l + 1 );
MSG_WriteData( sb, s, l + 1 );
}
}

Expand All @@ -404,21 +374,16 @@ void MSG_WriteBigString( msg_t *sb, const char *s )
}
else
{
int l;
char string[ BIG_INFO_STRING ];

l = strlen( s );
size_t l = strlen( s );

if ( l >= BIG_INFO_STRING )
{
Log::Notice( "MSG_WriteBigString: BIG_INFO_STRING exceeded" );
Log::Warn( "MSG_WriteBigString: BIG_INFO_STRING exceeded" );
MSG_WriteData( sb, "", 1 );
return;
}

Q_strncpyz( string, s, sizeof( string ) );

MSG_WriteData( sb, string, l + 1 );
MSG_WriteData( sb, s, l + 1 );
}
}

Expand All @@ -428,11 +393,10 @@ void MSG_WriteBigString( msg_t *sb, const char *s )
// reading functions
//

// uint8_t
int MSG_ReadByte( msg_t *msg )
{
int c;

c = ( unsigned char ) MSG_ReadBits( msg, 8 );
int c = MSG_ReadBits( msg, 8 );

if ( msg->readcount > msg->cursize )
{
Expand All @@ -442,11 +406,12 @@ int MSG_ReadByte( msg_t *msg )
return c;
}

// int16_t
int MSG_ReadShort( msg_t *msg )
{
int c;

c = ( short ) MSG_ReadBits( msg, 16 );
c = MSG_ReadBits( msg, -16 );

if ( msg->readcount > msg->cursize )
{
Expand All @@ -456,11 +421,12 @@ int MSG_ReadShort( msg_t *msg )
return c;
}

int MSG_ReadLong( msg_t *msg )
// uint16_t
int MSG_ReadUShort( msg_t *msg )
{
int c;

c = MSG_ReadBits( msg, 32 );
c = MSG_ReadBits( msg, 16 );

if ( msg->readcount > msg->cursize )
{
Expand All @@ -470,23 +436,19 @@ int MSG_ReadLong( msg_t *msg )
return c;
}

float MSG_ReadFloat( msg_t *msg )
// int32_t
int MSG_ReadLong( msg_t *msg )
{
union
{
byte b[ 4 ];
float f;
int l;
} dat;
int c;

dat.l = MSG_ReadBits( msg, 32 );
c = MSG_ReadBits( msg, 32 );

if ( msg->readcount > msg->cursize )
{
dat.f = -1;
c = -1;
}

return dat.f;
return c;
}

char *MSG_ReadString( msg_t *msg )
Expand Down Expand Up @@ -614,31 +576,6 @@ int MSG_ReadDelta( msg_t *msg, int oldV, int bits )
return oldV;
}

void MSG_WriteDeltaFloat( msg_t *msg, float oldV, float newV )
{
if ( oldV == newV )
{
MSG_WriteBits( msg, 0, 1 );
return;
}

MSG_WriteBits( msg, 1, 1 );
MSG_WriteBits( msg, * ( int * ) &newV, 32 );
}

float MSG_ReadDeltaFloat( msg_t *msg, float oldV )
{
if ( MSG_ReadBits( msg, 1 ) )
{
float newV;

* ( int * ) &newV = MSG_ReadBits( msg, 32 );
return newV;
}

return oldV;
}

/*
============================================================================

Expand All @@ -659,7 +596,7 @@ void MSG_WriteDeltaUsercmd( msg_t *msg, usercmd_t *from, usercmd_t *to )
if ( to->serverTime - from->serverTime < 256 )
{
MSG_WriteBits( msg, 1, 1 );
MSG_WriteBits( msg, to->serverTime - from->serverTime, 8 );
MSG_WriteByte( msg, to->serverTime - from->serverTime );
}
else
{
Expand Down Expand Up @@ -709,7 +646,7 @@ void MSG_ReadDeltaUsercmd( msg_t *msg, usercmd_t *from, usercmd_t *to )

if ( MSG_ReadBits( msg, 1 ) )
{
to->serverTime = from->serverTime + MSG_ReadBits( msg, 8 );
to->serverTime = from->serverTime + MSG_ReadByte( msg );
}
else
{
Expand Down Expand Up @@ -888,7 +825,7 @@ If force is not set, then nothing at all will be generated if the entity is
identical, under the assumption that the in-order delta code will catch it.
==================
*/
void MSG_WriteDeltaEntity( msg_t *msg, entityState_t *from, entityState_t *to, bool force )
void MSG_WriteDeltaEntity( msg_t *msg, const entityState_t *from, const entityState_t *to, bool force )
{
int i, lc;
netField_t *field;
Expand Down Expand Up @@ -964,8 +901,6 @@ void MSG_WriteDeltaEntity( msg_t *msg, entityState_t *from, entityState_t *to, b

MSG_WriteByte( msg, lc ); // # of changes

// Log::Notice( "Delta for ent %i: ", to->number );

for ( i = 0, field = entityStateFields; i < lc; i++, field++ )
{
fromF = ( int * )( ( byte * ) from + field->offset );
Expand Down Expand Up @@ -998,18 +933,12 @@ void MSG_WriteDeltaEntity( msg_t *msg, entityState_t *from, entityState_t *to, b
// send as small integer
MSG_WriteBits( msg, 0, 1 );
MSG_WriteBits( msg, trunc + FLOAT_INT_BIAS, FLOAT_INT_BITS );
// if ( print ) {
// Log::Notice( "%s:%i ", field->name, trunc );
// }
}
else
{
// send as full floating point value
MSG_WriteBits( msg, 1, 1 );
MSG_WriteBits( msg, *toF, 32 );
// if ( print ) {
// Log::Notice( "%s:%f ", field->name, *(float *)toF );
// }
}
}
}
Expand All @@ -1024,27 +953,9 @@ void MSG_WriteDeltaEntity( msg_t *msg, entityState_t *from, entityState_t *to, b
MSG_WriteBits( msg, 1, 1 );
// integer
MSG_WriteBits( msg, *toF, field->bits );
// if ( print ) {
// Log::Notice( "%s:%i ", field->name, *toF );
// }
}
}
}

// Log::Notice( "" );

/*
c = msg->cursize - c;

if ( print ) {
if ( msg->bit == 0 ) {
endBit = msg->cursize * 8 - GENTITYNUM_BITS;
} else {
endBit = ( msg->cursize - 1 ) * 8 + msg->bit - GENTITYNUM_BITS;
}
Log::Notice( " (%i bits)", endBit - startBit );
}
*/
}

/*
Expand Down Expand Up @@ -1319,13 +1230,13 @@ static void WriteStatsGroup(msg_t* msg, const int* from, const int* to)
}

MSG_WriteBits( msg, 1, 1 ); // changed
MSG_WriteShort( msg, statsbits );
MSG_WriteUShort( msg, statsbits );

for ( int i = 0; i < MAX_STATS; i++ )
for ( int i = 0; i < STATS_GROUP_NUM_STATS; i++ )
{
if ( statsbits & ( 1 << i ) )
{
MSG_WriteShort( msg, to[i] ); //----(SA) back to short since weapon bits are handled elsewhere now
MSG_WriteBits( msg, to[i], -16 );
}
}
}
Expand Down Expand Up @@ -1471,13 +1382,13 @@ void MSG_WriteDeltaPlayerstate(
static void ReadStatsGroup(msg_t* msg, int* to, const netField_t& field)
{
LOG( field.name );
int bits = MSG_ReadShort( msg );
int bits = MSG_ReadUShort( msg );

for ( int i = 0; i < STATS_GROUP_NUM_STATS; i++ )
{
if ( bits & ( 1 << i ) )
{
to[i] = MSG_ReadShort( msg ); //----(SA) back to short since weapon bits are handled elsewhere now
to[i] = MSG_ReadBits( msg, -16 );
}
}
}
Expand Down
Loading
Loading