/*
Copyright (C) 1996-1997 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/
// nvs_server_data.c
// 2000-05-02 NVS SVC by Maddes

#include "quakedef.h"

/*
The conversion tables consist of boolean values, that define which data is send
to a client of the corresponding NVS version.

The version tables hold a entry for every change in the SVC message.
An entry contains the NVS version the change occured, plus its number of
data/writes, message size in bytes, pointer to the conversion table.

Determining the message size:
byte/char/angle		= 1 byte
short/coord/entity	= 2 bytes
long			= 4 bytes
float			= 4 bytes
string			= unknown (assume typical length, e.g. names are 16 bytes + 1 EOS)

Now add all send writes for a version together and use the result as the message size.
Remember that you only add the writes which are true in corresponding version table line.
*/

/*
*******************************************************************
* S V C   M E S S A G E S   W I T H O U T   S U B M E S S A G E S *
*******************************************************************
*/

/*
SVC_PARTICLE
[byte] svc_particle [coord] origin [coord] origin [coord] origin [char] velocity [char] velocity [char] velocity [byte] count [byte] color
1 +2+2+2 +1+1+1 +1 +1
*/

qboolean svc_particle_000_conversion[] = { true,  true,  true,  true, true,  true,  true,  true, true};

msg_version_t svc_particle_versions[] =
{
	{0.00, 9, 12, svc_particle_000_conversion}		// 0.0 is end mark of table
};

/*
SVC_SETANGLE
[byte] svc_setangle [byte] angle [byte] angle [byte] angle [float] newangle [float] newangle [float] newangle
1 +1+1+1 +4+4+4
*/
qboolean svc_setangle_050_conversion[] = { true, false, false, false,  true,  true,  true };
qboolean svc_setangle_000_conversion[] = { true,  true,  true,  true, false, false, false };

msg_version_t svc_setangle_versions[] =
{
	{0.50, 7, 1+4+4+4, svc_setangle_050_conversion},
	{0.00, 4, 1+1+1+1, svc_setangle_000_conversion}		// 0.0 is end mark of table
};

/*
SVC LookUp Table
*/
msg_lookup_t svc_lookup[] =
{
	{svc_particle, svc_particle_versions},
	{svc_setangle, svc_setangle_versions},
	{-1, NULL}						// -1 is end mark of table
};



/*
*************************************************************
* S V C   M E S S A G E S   W I T H   S U B M E S S A G E S *
*************************************************************

Note: each has it own lookup table

*/

/*
*************************************************
* S V C _ T E M P E N T I T Y   M E S S A G E S *
*************************************************
*/

/*
TE_EXPLOSION
[byte] svc_temp_entity [byte] te_explosion [coord] x [coord] y [coord] z [coord] red [coord] green [coord] blue [coord] alpha
1+1 +2+2+2 +2+2+2+2
*/
qboolean te_explosion_050_conversion[] = {true, true, true, true, true,  true,  true,  true,  true};
qboolean te_explosion_000_conversion[] = {true, true, true, true, true, false, false, false, false};

msg_version_t te_explosion_versions[] =
{
	{0.50, 9, 1+1+2+2+2+2+2+2+2, te_explosion_050_conversion},
	{0.00, 5, 1+1+2+2+2, te_explosion_000_conversion}		// 0.0 is end mark of table
};

/*
SVC_TEMP_ENTITY LookUp Table
*/
msg_lookup_t te_lookup[] =
{
	{TE_EXPLOSION, te_explosion_versions},
	{-1, NULL}						// -1 is end mark of table
};

// 2001-09-20 Configurable limits by Maddes  start
/*
***************************************
* S V C _ L I M I T   M E S S A G E S *
***************************************
*/

// 2001-09-20 Configurable entity limits by Maddes  start
/*
LIM_ENTITIES
[byte] svc_limit [byte] lim_entities [short] edicts [short] static edicts [short] temp edicts
1+1 +2+2+2
*/
qboolean lim_entities_000_conversion[] = {  true,  true,  true,  true,  true};

msg_version_t lim_entities_versions[] =
{
	{0.00, 5, 1+1+2+2+2, lim_entities_000_conversion}	// 0.0 is end mark of table
													// HACK!!! Using version 0.00 for lowest version the
													// client must now when sending this command on connect
};
// 2001-09-20 Configurable entity limits by Maddes  end

/*
SVC_LIMIT LookUp Table
*/
msg_lookup_t limit_lookup[] =
{
	{LIM_ENTITIES, lim_entities_versions},		// 2001-09-20 Configurable entity limits by Maddes
	{-1, NULL}						// -1 is end mark of table
};
// 2001-09-20 Configurable limits by Maddes  end

/*
*******************************************************
* S V C _ E X T R A _ V E R S I O N   M E S S A G E S *
*******************************************************
*/

/*
VERSION_TYPE
[byte] svc_extra_version [byte] version_type [float] version
1+1 +4
*/
/*
qboolean version_any_XYY_conversion[] = { true,  true,  true};
qboolean version_any_000_conversion[] = {false, false, false};

msg_version_t version_any_versions[] =
{
	{X.YY, 3, 1+1+4, version_any_XYY_conversion},
	{0.00, 0, 0, version_any_000_conversion},
};
*/

/*
SVC_EXTRA_VERSION LookUp Table
*/
msg_lookup_t version_lookup[] =
{
//	{VERSION_TYPE, version_any_versions},
	{-1, NULL}						// -1 is end mark of table
};
