home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / quakeworld_src / client / protocol.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-06-17  |  8.6 KB  |  286 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. #ifdef __PPC__
  278.   byte  _align_[3];  /* 32-bit aligment */
  279. #endif
  280.   vec3_t  angles;
  281.   short forwardmove, sidemove, upmove;
  282.   byte  buttons;
  283.   byte  impulse;
  284. } usercmd_t;
  285.  
  286.