Example #1
0
/*
===================
SV_ReadClientMove
===================
*/
static void
SV_ReadClientMove(client_t *client, usercmd_t *move)
{
    edict_t *player = client->edict;
    int i, ping, buttonbits, impulse;

    /* read ping time */
    ping = client->num_pings % NUM_PING_TIMES;
    client->ping_times[ping] = sv.time - MSG_ReadFloat();
    client->num_pings++;

    /* read current angles */
    for (i = 0; i < 3; i++) {
	if (sv.protocol == PROTOCOL_VERSION_FITZ)
	    player->v.v_angle[i] = MSG_ReadAngle16();
	else
	    player->v.v_angle[i] = MSG_ReadAngle();
    }

    /* read movement */
    move->forwardmove = MSG_ReadShort();
    move->sidemove = MSG_ReadShort();
    move->upmove = MSG_ReadShort();

    /* read buttons */
    buttonbits = MSG_ReadByte();
    player->v.button0 = buttonbits & 1;
    player->v.button2 = (buttonbits & 2) >> 1;

    impulse = MSG_ReadByte();
    if (impulse)
	player->v.impulse = impulse;
}
Example #2
0
/*
===================
SV_ReadClientMove
===================
*/
void SV_ReadClientMove (usercmd_t *move)
{
	int		i;
	vec3_t	angle;
	int		bits;
	
// read ping time
	host_client->ping_times[host_client->num_pings%NUM_PING_TIMES]
		= sv.time - MSG_ReadFloat (net_message);
	host_client->num_pings++;

// read current angles	
	if ((host_client->netconnection->mod == MOD_PROQUAKE) && (sv.protocol == PROTOCOL_NETQUAKE)) // precise aim for ProQuake
	{
		for (i=0 ; i<3 ; i++)
			angle[i] = MSG_ReadPreciseAngle (net_message);
	}
	else if (sv.protocol == PROTOCOL_FITZQUAKE || sv.protocol == PROTOCOL_FITZQUAKE_PLUS) //johnfitz -- 16-bit angles for PROTOCOL_FITZQUAKE
	{
		for (i=0 ; i<3 ; i++)
			angle[i] = MSG_ReadAngle16 (net_message);
	}
	else
	{
		for (i=0 ; i<3 ; i++)
			angle[i] = MSG_ReadAngle (net_message);
	}

	VectorCopy (angle, host_client->edict->v.v_angle);
		
// read movement
	move->forwardmove = MSG_ReadShort (net_message);
	move->sidemove = MSG_ReadShort (net_message);
	move->upmove = MSG_ReadShort (net_message);
	
// read buttons
	bits = MSG_ReadByte (net_message);
	host_client->edict->v.button0 = bits & 1;
	host_client->edict->v.button2 = (bits & 2)>>1;

	i = MSG_ReadByte (net_message);
	if (i)
		host_client->edict->v.impulse = i;
}
Example #3
0
/*
===================
SV_ReadClientMove
===================
*/
void SV_ReadClientMove (usercmd_t *move)
{
	int		i;
	vec3_t	angle;
	int		bits;

// read ping time
	host_client->ping_times[host_client->num_pings%NUM_PING_TIMES]
		= sv.time - MSG_ReadFloat ();
	host_client->num_pings++;

// read current angles
	for (i=0 ; i<3 ; i++)
		//johnfitz -- 16-bit angles for PROTOCOL_FITZQUAKE
		if (sv.protocol == PROTOCOL_NETQUAKE)
			angle[i] = MSG_ReadAngle (sv.protocolflags);
		else
			angle[i] = MSG_ReadAngle16 (sv.protocolflags);
		//johnfitz

	VectorCopy (angle, host_client->edict->v.v_angle);

// read movement
	move->forwardmove = MSG_ReadShort ();
	move->sidemove = MSG_ReadShort ();
	move->upmove = MSG_ReadShort ();

// read buttons
	bits = MSG_ReadByte ();
	host_client->edict->v.button0 = bits & 1;
	host_client->edict->v.button2 = (bits & 2)>>1;

	i = MSG_ReadByte ();
	if (i)
		host_client->edict->v.impulse = i;
}
Example #4
0
/*
===================
CL_ParsePlayerstate
===================
*/
void CL_ParsePlayerstate (frame_t *oldframe, frame_t *newframe)
{
	int			flags;
	player_state_t	*state;
	int			i;
	int			statbits;

	state = &newframe->playerstate;

	// clear to old value before delta parsing
	if (oldframe)
		*state = oldframe->playerstate;
	else
		memset (state, 0, sizeof(*state));

	flags = MSG_ReadShort (&net_message);

	//
	// parse the pmove_state_t
	//
	if (flags & PS_M_TYPE)
		state->pmove.pm_type = MSG_ReadByte(&net_message);

	if (flags & PS_M_ORIGIN)
	{
		state->pmove.origin[0] = MSG_ReadShort (&net_message);
		state->pmove.origin[1] = MSG_ReadShort (&net_message);
		state->pmove.origin[2] = MSG_ReadShort (&net_message);
	}

	if (flags & PS_M_VELOCITY)
	{
		state->pmove.velocity[0] = MSG_ReadShort (&net_message);
		state->pmove.velocity[1] = MSG_ReadShort (&net_message);
		state->pmove.velocity[2] = MSG_ReadShort (&net_message);
	}

	if (flags & PS_M_TIME)
		state->pmove.pm_time = MSG_ReadByte(&net_message);

	if (flags & PS_M_FLAGS)
		state->pmove.pm_flags = MSG_ReadByte(&net_message);

	if (flags & PS_M_GRAVITY)
		state->pmove.gravity = MSG_ReadShort (&net_message);

	if (flags & PS_M_DELTA_ANGLES)
	{
		state->pmove.delta_angles[0] = MSG_ReadShort (&net_message);
		state->pmove.delta_angles[1] = MSG_ReadShort (&net_message);
		state->pmove.delta_angles[2] = MSG_ReadShort (&net_message);
	}

	if (cl.attractloop)
		state->pmove.pm_type = PM_FREEZE;		// demo playback

	//
	// parse the rest of the player_state_t
	//
	if (flags & PS_VIEWOFFSET)
	{
		state->viewoffset[0] = MSG_ReadChar(&net_message) * 0.25;
		state->viewoffset[1] = MSG_ReadChar(&net_message) * 0.25;
		state->viewoffset[2] = MSG_ReadChar(&net_message) * 0.25;
	}

	if (flags & PS_VIEWANGLES)
	{
		state->viewangles[0] = MSG_ReadAngle16(&net_message);
		state->viewangles[1] = MSG_ReadAngle16(&net_message);
		state->viewangles[2] = MSG_ReadAngle16(&net_message);
	}

	if (flags & PS_KICKANGLES)
	{
		state->kick_angles[0] = MSG_ReadChar(&net_message) * 0.25;
		state->kick_angles[1] = MSG_ReadChar(&net_message) * 0.25;
		state->kick_angles[2] = MSG_ReadChar(&net_message) * 0.25;
	}

	if (flags & PS_WEAPONINDEX)
	{
		state->gunindex = MSG_ReadByte(&net_message);
	}

	if (flags & PS_WEAPONFRAME)
	{
		state->gunframe = MSG_ReadByte(&net_message);
		state->gunoffset[0] = MSG_ReadChar(&net_message)*0.25;
		state->gunoffset[1] = MSG_ReadChar(&net_message)*0.25;
		state->gunoffset[2] = MSG_ReadChar(&net_message)*0.25;
		state->gunangles[0] = MSG_ReadChar(&net_message)*0.25;
		state->gunangles[1] = MSG_ReadChar(&net_message)*0.25;
		state->gunangles[2] = MSG_ReadChar(&net_message)*0.25;
	}

	if (flags & PS_BLEND)
	{
		state->blend[0] = MSG_ReadByte(&net_message)*0.003921568627450980392156862745098;
		state->blend[1] = MSG_ReadByte(&net_message)*0.003921568627450980392156862745098;
		state->blend[2] = MSG_ReadByte(&net_message)*0.003921568627450980392156862745098;
		state->blend[3] = MSG_ReadByte(&net_message)*0.003921568627450980392156862745098;
	}

	if (flags & PS_FOV)
		state->fov = MSG_ReadByte(&net_message);

	if (flags & PS_RDFLAGS)
		state->rdflags = MSG_ReadByte(&net_message);

	// parse stats
	statbits = MSG_ReadLong (&net_message);
	for (i=0 ; i<MAX_STATS ; i++)
		if (statbits & (1<<i) )
			state->stats[i] = MSG_ReadShort(&net_message);
}