X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=protocol.h;h=c90867b343dfc2877f7a15f09904d93c63ae9f02;hp=0df3b283cfdb15af169966774ad6ff4e1e2998b7;hb=8b0af87aafa136eb27112d82d99b820a5822a1b1;hpb=0e7aa755e6467531d8000efb969321ea752ba72f diff --git a/protocol.h b/protocol.h index 0df3b283..c90867b3 100644 --- a/protocol.h +++ b/protocol.h @@ -8,7 +8,7 @@ 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. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -19,8 +19,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // protocol.h -- communications protocols +#ifndef PROTOCOL_H +#define PROTOCOL_H + #define PROTOCOL_VERSION 15 -#define DPPROTOCOL_VERSION 96 +#define DPPROTOCOL_VERSION1 96 +#define DPPROTOCOL_VERSION2 97 +// LordHavoc: I think the 96-99 range was going to run out too soon... so here I jump to 3500 +#define DPPROTOCOL_VERSION3 3500 // model effects #define EF_ROCKET 1 // leave a trail @@ -40,11 +46,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define EF_ADDITIVE 32 #define EF_BLUE 64 #define EF_RED 128 -#define EF_DELTA 8388608 // LordHavoc: entity is delta compressed to save network bandwidth +#define EF_DELTA 8388608 // LordHavoc: (obsolete) entity is delta compressed to save network bandwidth (no longer used) +#define EF_LOWPRECISION 4194304 // LordHavoc: entity is low precision (integer coordinates) to save network bandwidth // effects/model (can be used as model flags or entity effects) -#define EF_REFLECTIVE 256 // LordHavoc: shiny metal objects :) +#define EF_REFLECTIVE 256 // LordHavoc: shiny metal objects :) (not currently supported) #define EF_FULLBRIGHT 512 // LordHavoc: fullbright #define EF_FLAME 1024 // LordHavoc: on fire +#define EF_STARDUST 2048 // LordHavoc: showering sparks #define EF_STEP 0x80000000 // internal client use only - present on MOVETYPE_STEP entities, not QC accessible (too many bits) @@ -110,7 +118,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define SU_PUNCHVEC1 (1<<16) #define SU_PUNCHVEC2 (1<<17) #define SU_PUNCHVEC3 (1<<18) -#define SU_UNUSED19 (1<<19) +#define SU_VIEWZOOM (1<<19) // byte factor (0 = 0.0 (not valid), 255 = 1.0) #define SU_UNUSED20 (1<<20) #define SU_UNUSED21 (1<<21) #define SU_UNUSED22 (1<<22) @@ -202,8 +210,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define svc_hidelmp 36 // [string] slotname #define svc_skybox 37 // [string] skyname +// LordHavoc: my svc_ range, 50-59 #define svc_cgame 50 // [short] length [bytes] data -#define svc_fog 51 // unfinished and obsolete +#define svc_unusedlh1 51 #define svc_effect 52 // [vector] org [byte] modelindex [byte] startframe [byte] framecount [byte] framerate #define svc_effect2 53 // [vector] org [short] modelindex [short] startframe [byte] framecount [byte] framerate #define svc_sound2 54 // short soundindex instead of byte @@ -222,6 +231,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define clc_move 3 // [usercmd_t] #define clc_stringcmd 4 // [string] message +// LordHavoc: my clc_ range, 50-59 +#define clc_ackentities 50 // [int] framenumber +#define clc_unusedlh1 51 +#define clc_unusedlh2 52 +#define clc_unusedlh3 53 +#define clc_unusedlh4 54 +#define clc_unusedlh5 55 +#define clc_unusedlh6 56 +#define clc_unusedlh7 57 +#define clc_unusedlh8 58 +#define clc_unusedlh9 59 // // temp entity events @@ -240,9 +260,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define TE_TELEPORT 11 // [vector] origin #define TE_EXPLOSION2 12 // [vector] origin [byte] startcolor [byte] colorcount -// PGM 01/21/97 +// PGM 01/21/97 #define TE_BEAM 13 // [entity] entity [vector] start [vector] end -// PGM 01/21/97 +// PGM 01/21/97 // Nehahra effects used in the movie (TE_EXPLOSION3 also got written up in a QSG tutorial, hence it's not marked NEH) #define TE_EXPLOSION3 16 // [vector] origin [coord] red [coord] green [coord] blue @@ -272,31 +292,31 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define RENDER_GLOWTRAIL 2 #define RENDER_VIEWMODEL 4 #define RENDER_EXTERIORMODEL 8 +#define RENDER_LOWPRECISION 16 // send as low precision coordinates to save bandwidth typedef struct { - double time; // time this state was built - vec3_t origin; - vec3_t angles; + double time; // time this state was built + vec3_t origin; + vec3_t angles; int number; // entity number this state is for unsigned short active; // true if a valid state unsigned short modelindex; unsigned short frame; unsigned short effects; - byte colormap; - byte skin; - byte alpha; - byte scale; - byte glowsize; - byte glowcolor; - byte flags; + qbyte colormap; + qbyte skin; + qbyte alpha; + qbyte scale; + qbyte glowsize; + qbyte glowcolor; + qbyte flags; } entity_state_t; typedef struct { double time; - vec3_t eye; int framenum; int firstentity; // index into entitydata, modulo MAX_ENTITY_DATABASE int endentity; // index into entitydata, firstentity + numentities @@ -318,6 +338,7 @@ typedef struct // the only reason this system is used is to avoid copying memory when frames are removed int numframes; int ackframe; // server only: last acknowledged frame + vec3_t eye; entity_frameinfo_t frames[MAX_ENTITY_HISTORY]; entity_state_t entitydata[MAX_ENTITY_DATABASE]; } @@ -389,14 +410,17 @@ void EntityFrame_AckFrame(entity_database_t *d, int frame); void EntityFrame_Clear(entity_frame_t *f, vec3_t eye); // (server) allocates an entity slot in frame, returns NULL if full entity_state_t *EntityFrame_NewEntity(entity_frame_t *f, int number); +// (server and client) reads a frame from the database +void EntityFrame_FetchFrame(entity_database_t *d, int framenum, entity_frame_t *f); // (server and client) adds a entity_frame to the database, for future // reference void EntityFrame_AddFrame(entity_database_t *d, entity_frame_t *f); // (server) writes a frame to network stream -void EntityFrame_Write(entity_database_t *d, entity_frame_t *f, int newframe, sizebuf_t *msg); +void EntityFrame_Write(entity_database_t *d, entity_frame_t *f, sizebuf_t *msg); // (client) reads a frame from network stream void EntityFrame_Read(entity_database_t *d); -// (client) fetchs an entity from the frame by index into the entity list -int EntityFrame_FetchEntityByIndex(entity_frame_t *f, entity_state_t *e, int index); -// (client) fetchs an entity from the frame by entity number -int EntityFrame_FetchEntityByNumber(entity_frame_t *f, entity_state_t *e, int number); +// (client) returns the frame number of the most recent frame recieved +int EntityFrame_MostRecentlyRecievedFrameNum(entity_database_t *d); + +#endif +