/*
  Copyright (C) 2010-2011  Charles Pence <charles@charlespence.net>
  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 3 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, see <http://www.gnu.org/licenses/>.
*/
// protocol.h -- communications protocols

#define PROTOCOL_VERSION 15
#define NEW_PROTOCOL_VERSION 16

// 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)


#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

#define DEFAULT_SOUND_PACKET_VOLUME 255
#define DEFAULT_SOUND_PACKET_ATTENUATION 1.0

//==================
// 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

//
// 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
#define TE_BEAM                13
