home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 14 / MA_Cover_14.iso / source / c / q1source_amy / qw / client / protocol.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-12-21  |  8.2 KB  |  283 lines

  1. /*
  2. Copyright (C) 1996-1997 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20. // protocol.h -- communications protocols
  21.  
  22. #define    PROTOCOL_VERSION    28
  23.  
  24. #define QW_CHECK_HASH 0x5157
  25.  
  26. //=========================================
  27.  
  28. #define    PORT_CLIENT    27001
  29. #define    PORT_MASTER    27000
  30. #define    PORT_SERVER    27500
  31.  
  32. //=========================================
  33.  
  34. // out of band message id bytes
  35.  
  36. // M = master, S = server, C = client, A = any
  37. // the second character will allways be \n if the message isn't a single
  38. // byte long (?? not true anymore?)
  39.  
  40. #define    S2C_CHALLENGE        'c'
  41. #define    S2C_CONNECTION        'j'
  42. #define    A2A_PING            'k'    // respond with an A2A_ACK
  43. #define    A2A_ACK                'l'    // general acknowledgement without info
  44. #define    A2A_NACK            'm'    // [+ comment] general failure
  45. #define A2A_ECHO            'e' // for echoing
  46. #define    A2C_PRINT            'n'    // print a message on client
  47.  
  48. #define    S2M_HEARTBEAT        'a'    // + serverinfo + userlist + fraglist
  49. #define    A2C_CLIENT_COMMAND    'B'    // + command line
  50. #define    S2M_SHUTDOWN        'C'
  51.  
  52.  
  53. //==================
  54. // note that there are some defs.qc that mirror to these numbers
  55. // also related to svc_strings[] in cl_parse
  56. //==================
  57.  
  58. //
  59. // server to client
  60. //
  61. #define    svc_bad                0
  62. #define    svc_nop                1
  63. #define    svc_disconnect        2
  64. #define    svc_updatestat        3    // [byte] [byte]
  65. //define    svc_version            4    // [long] server version
  66. #define    svc_setview            5    // [short] entity number
  67. #define    svc_sound            6    // <see code>
  68. //define    svc_time            7    // [float] server time
  69. #define    svc_print            8    // [byte] id [string] null terminated string
  70. #define    svc_stufftext        9    // [string] stuffed into client's console buffer
  71.                                 // the string should be \n terminated
  72. #define    svc_setangle        10    // [angle3] set the view angle to this absolute value
  73.     
  74. #define    svc_serverdata        11    // [long] protocol ...
  75. #define    svc_lightstyle        12    // [byte] [string]
  76. //define    svc_updatename        13    // [byte] [string]
  77. #define    svc_updatefrags        14    // [byte] [short]
  78. //define    svc_clientdata        15    // <shortbits + data>
  79. #define    svc_stopsound        16    // <see code>
  80. //define    svc_updatecolors    17    // [byte] [byte] [byte]
  81. //define    svc_particle        18    // [vec3] <variable>
  82. #define    svc_damage            19
  83.     
  84. #define    svc_spawnstatic        20
  85. //    svc_spawnbinary        21
  86. #define    svc_spawnbaseline    22
  87.     
  88. #define    svc_temp_entity        23    // variable
  89. #define    svc_setpause        24    // [byte] on / off
  90. //    svc_signonnum        25    // [byte]  used for the signon sequence
  91.  
  92. #define    svc_centerprint        26    // [string] to put in center of the screen
  93.  
  94. #define    svc_killedmonster    27
  95. #define    svc_foundsecret        28
  96.  
  97. #define    svc_spawnstaticsound    29    // [coord3] [byte] samp [byte] vol [byte] aten
  98.  
  99. #define    svc_intermission    30        // [vec3_t] origin [vec3_t] angle
  100. #define    svc_finale            31        // [string] text
  101.  
  102. #define    svc_cdtrack            32        // [byte] track
  103. #define svc_sellscreen        33
  104.  
  105. #define    svc_smallkick        34        // set client punchangle to 2
  106. #define    svc_bigkick            35        // set client punchangle to 4
  107.  
  108. #define    svc_updateping        36        // [byte] [short]
  109. #define    svc_updateentertime    37        // [byte] [float]
  110.  
  111. #define    svc_updatestatlong    38        // [byte] [long]
  112.  
  113. #define    svc_muzzleflash        39        // [short] entity
  114.  
  115. #define    svc_updateuserinfo    40        // [byte] slot [long] uid
  116.                                     // [string] userinfo
  117.  
  118. #define    svc_download        41        // [short] size [size bytes]
  119. #define    svc_playerinfo        42        // variable
  120. #define    svc_nails            43        // [byte] num [48 bits] xyzpy 12 12 12 4 8 
  121. #define    svc_chokecount        44        // [byte] packets choked
  122. #define    svc_modellist        45        // [strings]
  123. #define    svc_soundlist        46        // [strings]
  124. #define    svc_packetentities    47        // [...]
  125. #define    svc_deltapacketentities    48        // [...]
  126. #define svc_maxspeed        49        // maxspeed change, for prediction
  127. #define svc_entgravity        50        // gravity change, for prediction
  128. #define svc_setinfo            51        // setinfo on a client
  129. #define svc_serverinfo        52        // serverinfo
  130. #define svc_updatepl        53        // [byte] [byte]
  131.  
  132.  
  133. //==============================================
  134.  
  135. //
  136. // client to server
  137. //
  138. #define    clc_bad            0
  139. #define    clc_nop         1
  140. //define    clc_doublemove    2
  141. #define    clc_move        3        // [[usercmd_t]
  142. #define    clc_stringcmd    4        // [string] message
  143. #define    clc_delta        5        // [byte] sequence number, requests delta compression of message
  144. #define clc_tmove        6        // teleport request, spectator only
  145. #define clc_upload        7        // teleport request, spectator only
  146.  
  147.  
  148. //==============================================
  149.  
  150. // playerinfo flags from server
  151. // playerinfo allways sends: playernum, flags, origin[] and framenumber
  152.  
  153. #define    PF_MSEC            (1<<0)
  154. #define    PF_COMMAND        (1<<1)
  155. #define    PF_VELOCITY1    (1<<2)
  156. #define    PF_VELOCITY2    (1<<3)
  157. #define    PF_VELOCITY3    (1<<4)
  158. #define    PF_MODEL        (1<<5)
  159. #define    PF_SKINNUM        (1<<6)
  160. #define    PF_EFFECTS        (1<<7)
  161. #define    PF_WEAPONFRAME    (1<<8)        // only sent for view player
  162. #define    PF_DEAD            (1<<9)        // don't block movement any more
  163. #define    PF_GIB            (1<<10)        // offset the view height differently
  164. #define    PF_NOGRAV        (1<<11)        // don't apply gravity for prediction
  165.  
  166. //==============================================
  167.  
  168. // if the high bit of the client to server byte is set, the low bits are
  169. // client move cmd bits
  170. // ms and angle2 are allways sent, the others are optional
  171. #define    CM_ANGLE1     (1<<0)
  172. #define    CM_ANGLE3     (1<<1)
  173. #define    CM_FORWARD    (1<<2)
  174. #define    CM_SIDE        (1<<3)
  175. #define    CM_UP        (1<<4)
  176. #define    CM_BUTTONS    (1<<5)
  177. #define    CM_IMPULSE    (1<<6)
  178. #define    CM_ANGLE2     (1<<7)
  179.  
  180. //==============================================
  181.  
  182. // the first 16 bits of a packetentities update holds 9 bits
  183. // of entity number and 7 bits of flags
  184. #define    U_ORIGIN1    (1<<9)
  185. #define    U_ORIGIN2    (1<<10)
  186. #define    U_ORIGIN3    (1<<11)
  187. #define    U_ANGLE2    (1<<12)
  188. #define    U_FRAME        (1<<13)
  189. #define    U_REMOVE    (1<<14)        // REMOVE this entity, don't add it
  190. #define    U_MOREBITS    (1<<15)
  191.  
  192. // if MOREBITS is set, these additional flags are read in next
  193. #define    U_ANGLE1    (1<<0)
  194. #define    U_ANGLE3    (1<<1)
  195. #define    U_MODEL        (1<<2)
  196. #define    U_COLORMAP    (1<<3)
  197. #define    U_SKIN        (1<<4)
  198. #define    U_EFFECTS    (1<<5)
  199. #define    U_SOLID        (1<<6)        // the entity should be solid for prediction
  200.  
  201. //==============================================
  202.  
  203. // a sound with no channel is a local only sound
  204. // the sound field has bits 0-2: channel, 3-12: entity
  205. #define    SND_VOLUME        (1<<15)        // a byte
  206. #define    SND_ATTENUATION    (1<<14)        // a byte
  207.  
  208. #define DEFAULT_SOUND_PACKET_VOLUME 255
  209. #define DEFAULT_SOUND_PACKET_ATTENUATION 1.0
  210.  
  211. // svc_print messages have an id, so messages can be filtered
  212. #define    PRINT_LOW            0
  213. #define    PRINT_MEDIUM        1
  214. #define    PRINT_HIGH            2
  215. #define    PRINT_CHAT            3    // also go to chat buffer
  216.  
  217. //
  218. // temp entity events
  219. //
  220. #define    TE_SPIKE            0
  221. #define    TE_SUPERSPIKE        1
  222. #define    TE_GUNSHOT            2
  223. #define    TE_EXPLOSION        3
  224. #define    TE_TAREXPLOSION        4
  225. #define    TE_LIGHTNING1        5
  226. #define    TE_LIGHTNING2        6
  227. #define    TE_WIZSPIKE            7
  228. #define    TE_KNIGHTSPIKE        8
  229. #define    TE_LIGHTNING3        9
  230. #define    TE_LAVASPLASH        10
  231. #define    TE_TELEPORT            11
  232. #define    TE_BLOOD            12
  233. #define    TE_LIGHTNINGBLOOD    13
  234.  
  235.  
  236. /*
  237. ==========================================================
  238.  
  239.   ELEMENTS COMMUNICATED ACROSS THE NET
  240.  
  241. ==========================================================
  242. */
  243.  
  244. #define    MAX_CLIENTS        32
  245.  
  246. #define    UPDATE_BACKUP    64    // copies of entity_state_t to keep buffered
  247.                             // must be power of two
  248. #define    UPDATE_MASK        (UPDATE_BACKUP-1)
  249.  
  250. // entity_state_t is the information conveyed from the server
  251. // in an update message
  252. typedef struct
  253. {
  254.     int        number;            // edict index
  255.  
  256.     int        flags;            // nolerp, etc
  257.     vec3_t    origin;
  258.     vec3_t    angles;
  259.     int        modelindex;
  260.     int        frame;
  261.     int        colormap;
  262.     int        skinnum;
  263.     int        effects;
  264. } entity_state_t;
  265.  
  266.  
  267. #define    MAX_PACKET_ENTITIES    64    // doesn't count nails
  268. typedef struct
  269. {
  270.     int        num_entities;
  271.     entity_state_t    entities[MAX_PACKET_ENTITIES];
  272. } packet_entities_t;
  273.  
  274. typedef struct usercmd_s
  275. {
  276.     byte    msec;
  277.     vec3_t    angles;
  278.     short    forwardmove, sidemove, upmove;
  279.     byte    buttons;
  280.     byte    impulse;
  281. } usercmd_t;
  282.  
  283.