X-Git-Url: https://deadsoftware.ru/gitweb?p=netwar.git;a=blobdiff_plain;f=protocol.h;h=a96d6932a6728f0eb5d6cb7b6cc95e45abafa63e;hp=26815532050839457926e8bb89b51c21bd170a71;hb=HEAD;hpb=c4b04d12861ae0eac6315b1c2170013422136f80 diff --git a/protocol.h b/protocol.h index 2681553..a96d693 100644 --- a/protocol.h +++ b/protocol.h @@ -5,8 +5,8 @@ #include #include -#define DEFAULT_PORT 29386 -#define PROTOCOL_VERSION 0 +#define PROTOCOL_PORT 29386 +#define PROTOCOL_VERSION 3 #define PROTOCOL_F8FRAC (1 << 7) #define PACKED __attribute__((__packed__)) @@ -21,15 +21,19 @@ typedef enum { SV_INFO = 128, SV_KILL = 139, SV_SPLR = 130, + SV_SBUL = 131, } MessageType; -typedef enum { - DOES_UP = 0, - DOES_DOWN = 1, - DOES_LEFT = 2, - DOES_RIGHT = 3, - DOES_FIRE = 4, -} DoesCode; +typedef union DoesBits { + uint8_t bits; + struct PACKED { + uint8_t up : 1; + uint8_t down : 1; + uint8_t left : 1; + uint8_t right : 1; + uint8_t fire : 1; + }; +} DoesBits; typedef struct PACKED ClInfo { uint8_t type; @@ -42,8 +46,8 @@ typedef struct PACKED ClKill { } ClKill; typedef struct PACKED ClDoes { - uint8_t type; - uint8_t code; + uint8_t type; + DoesBits code; } ClDoes; typedef struct PACKED SvInfo { @@ -65,8 +69,19 @@ typedef struct PACKED SvSplr { uint8_t live; uint8_t x, y, r; uint8_t vx, vy, vr; + uint8_t shoot; } SvSplr; +typedef struct PACKED SvSbul { + uint8_t type; + uint8_t id; + uint8_t owner; + uint8_t live; + uint8_t x, y; + uint8_t vx, vy; + uint8_t tick; +} SvSbul; + typedef union ClMessage { uint8_t type; ClInfo info; @@ -79,6 +94,7 @@ typedef union SvMessage { SvInfo info; SvKill kill; SvSplr splr; + SvSbul sbul; } SvMessage; typedef union ProtocolMessage { @@ -99,6 +115,7 @@ static inline int MessageTypeSize(MessageType type) { case SV_INFO: return sizeof(SvInfo); case SV_KILL: return sizeof(SvKill); case SV_SPLR: return sizeof(SvSplr); + case SV_SBUL: return sizeof(SvSbul); default: return sizeof(ProtocolMessage); } } @@ -122,7 +139,7 @@ static inline ProtocolMessage cl_kill() { }; } -static inline ProtocolMessage cl_does(DoesCode code) { +static inline ProtocolMessage cl_does(DoesBits code) { return (ProtocolMessage) (ClMessage) (ClDoes) { .type = CL_DOES, .code = code, @@ -148,17 +165,32 @@ static inline ProtocolMessage sv_kill(const char * msg) { return (ProtocolMessage) (SvMessage) m; } -static inline ProtocolMessage sv_splr(int clid, bool live, float x, float y, float r, float vx, float vy, float vr) { +static inline ProtocolMessage sv_splr(int clid, bool live, float x, float y, float r, float vx, float vy, float vr, int shoot) { return (ProtocolMessage) (SvMessage) (SvSplr) { - .type = SV_SPLR, - .clid = clid, - .live = live, - .x = f2b(x), - .y = f2b(y), - .r = f2b(r), + .type = SV_SPLR, + .clid = clid, + .live = live, + .x = f2b(x), + .y = f2b(y), + .r = f2b(r), .vx = f2b(vx), .vy = f2b(vy), .vr = f2b(vr), + .shoot = shoot, + }; +} + +static inline ProtocolMessage sv_sbul(int id, int owner, bool live, float x, float y, float vx, float vy, int tick) { + return (ProtocolMessage) (SvMessage) (SvSbul) { + .type = SV_SBUL, + .id = id, + .owner = owner, + .live = live, + .x = f2b(x), + .y = f2b(y), + .vx = f2b(vx), + .vy = f2b(vy), + .tick = tick, }; }