/*
 * 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.
 * 
 */
// protocol.h -- communications protocols

#define	PROTOCOL_VERSION	15

// if the high bit of the servercmd is set, the low bits are fast update flags:
#define	U_MOREBITS	(1<<0)
#define	U_ORIGIN1	(1<<1)
#define	U_ORIGIN2	(1<<2)
#define	U_ORIGIN3	(1<<3)
#define	U_ANGLE2	(1<<4)
#define	U_NOLERP	(1<<5)         // don't interpolate movement
#define	U_FRAME		(1<<6)
#define U_SIGNAL	(1<<7)         // just differentiates from other updates

// svc_update can pass all of the fast update bits, plus more
#define	U_ANGLE1	(1<<8)
#define	U_ANGLE3	(1<<9)
#define	U_MODEL		(1<<10)
#define	U_COLORMAP	(1<<11)
#define	U_SKIN		(1<<12)
#define	U_EFFECTS	(1<<13)
#define	U_LONGENTITY	(1<<14)
// nehahra support
#ifdef GLQUAKE
#  define	U_TRANS		(1<<15)
#endif

#define	SU_VIEWHEIGHT	(1<<0)
#define	SU_IDEALPITCH	(1<<1)
#define	SU_PUNCH1	(1<<2)
#define	SU_PUNCH2	(1<<3)
#define	SU_PUNCH3	(1<<4)
#define	SU_VELOCITY1	(1<<5)
#define	SU_VELOCITY2	(1<<6)
#define	SU_VELOCITY3	(1<<7)
//define        SU_AIMENT               (1<<8)  AVAILABLE BIT
#define	SU_ITEMS	(1<<9)
#define	SU_ONGROUND	(1<<10)        // no data follows, the bit is it
#define	SU_INWATER	(1<<11)        // no data follows, the bit is it
#define	SU_WEAPONFRAME	(1<<12)
#define	SU_ARMOR	(1<<13)
#define	SU_WEAPON	(1<<14)

// a sound with no channel is a local only sound
#define	SND_VOLUME	(1<<0)         // a byte
#define	SND_ATTENUATION	(1<<1)         // a byte
#define	SND_LOOPING	(1<<2)         // a long

// defaults for clientinfo messages
#define	DEFAULT_VIEWHEIGHT	22

// game types sent by serverinfo
// these determine which intermission screen plays
#define	GAME_COOP		0
#define	GAME_DEATHMATCH		1

// note that there are some defs.qc that mirror to these numbers
// also related to svc_strings[] in cl_parse

//
// server to client
//
#define	svc_bad			0
#define	svc_nop			1
#define	svc_disconnect		2
#define	svc_updatestat		3      // [byte] [long]
#define	svc_version		4      // [long] server version
#define	svc_setview		5      // [short] entity number
#define	svc_sound		6      // <see code>
#define	svc_time		7      // [float] server time
#define	svc_print		8      // [string] null terminated string
#define	svc_stufftext		9      // [string] stuffed into client's console buffer
                                        // the string should be \n terminated
#define	svc_setangle		10     // [angle3] set the view angle to this absolute value

#define	svc_serverinfo		11     // [long] version
                                        // [string] signon string
                                        // [string]..[0]model cache
                                        // [string]...[0]sounds cache
#define	svc_lightstyle		12     // [byte] [string]
#define	svc_updatename		13     // [byte] [string]
#define	svc_updatefrags		14     // [byte] [short]
#define	svc_clientdata		15     // <shortbits + data>
#define	svc_stopsound		16     // <see code>
#define	svc_updatecolors	17     // [byte] [byte]
#define	svc_particle		18     // [vec3] <variable>
#define	svc_damage		19

#define	svc_spawnstatic		20
//      svc_spawnbinary         21
#define	svc_spawnbaseline	22

#define	svc_temp_entity		23

#define	svc_setpause		24     // [byte] on / off
#define	svc_signonnum		25     // [byte]  used for the signon sequence

#define	svc_centerprint		26     // [string] to put in center of the screen

#define	svc_killedmonster	27
#define	svc_foundsecret		28

#define	svc_spawnstaticsound	29     // [coord3] [byte] samp [byte] vol [byte] aten

#define	svc_intermission	30     // [string] music
#define	svc_finale		31     // [string] music [string] text

#define	svc_cdtrack		32     // [byte] track [byte] looptrack
#define svc_sellscreen		33

#define svc_cutscene		34

// nehahra support
#define	svc_showlmp		35     // [string] slotname [string] lmpfilename [coord] x [coord] y
#define	svc_hidelmp		36     // [string] slotname
#define	svc_skybox		37     // [string] skyname

// client to server
#define	clc_bad			0
#define	clc_nop 		1
#define	clc_disconnect		2
#define	clc_move		3      // [usercmd_t]
#define	clc_stringcmd		4      // [string] message

// temp entity events
#define	TE_SPIKE		0
#define	TE_SUPERSPIKE		1
#define	TE_GUNSHOT		2
#define	TE_EXPLOSION		3
#define	TE_TAREXPLOSION		4
#define	TE_LIGHTNING1		5
#define	TE_LIGHTNING2		6
#define	TE_WIZSPIKE		7
#define	TE_KNIGHTSPIKE		8
#define	TE_LIGHTNING3		9
#define	TE_LAVASPLASH		10
#define	TE_TELEPORT		11
#define TE_EXPLOSION2		12

// PGM 01/21/97
#define TE_BEAM			13
// PGM 01/21/97

// nehahra support
#define	TE_EXPLOSION3		16
#define	TE_LIGHTNING4		17
