X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=protocol.c;h=8413c65823a95c7bfc88601e667b334e7ef32030;hb=7d115bb0e31921e2e0519a39637985efef1391f4;hp=bc21122d04ced179addb819b7cd0c73fb0d21832;hpb=545926ff9670b675714b3b2d8acbfe19e08483f3;p=xonotic%2Fdarkplaces.git diff --git a/protocol.c b/protocol.c index bc21122d..8413c658 100644 --- a/protocol.c +++ b/protocol.c @@ -9,11 +9,17 @@ entity_state_t defaultstate = {0,0,0},//float netcenter[3]; // ! for network prioritization, this is the center of the bounding box (which may differ from the origin) {0,0,0},//float origin[3]; {0,0,0},//float angles[3]; - 0,//int number; // entity number this state is for 0,//int effects; + 0,//unsigned int customizeentityforclient; // ! + 0,//unsigned short number; // entity number this state is for 0,//unsigned short modelindex; 0,//unsigned short frame; 0,//unsigned short tagentity; + 0,//unsigned short specialvisibilityradius; // ! larger if it has effects/light + 0,//unsigned short viewmodelforclient; // ! + 0,//unsigned short exteriormodelforclient; // ! not shown if first person viewing from this entity, shown in all other cases + 0,//unsigned short nodrawtoclient; // ! + 0,//unsigned short drawonlytoclient; // ! {0,0,0,0},//unsigned short light[4]; // color*256 (0.00 to 255.996), and radius*1 0,//unsigned char active; // true if a valid state 0,//unsigned char lightstyle; @@ -29,7 +35,7 @@ entity_state_t defaultstate = 0,//unsigned char tagindex; {32, 32, 32},//unsigned char colormod[3]; // padding to a multiple of 8 bytes (to align the double time) - 0//unsigned char unused; // ! + {0,0,0,0,0}//unsigned char unused[5]; // ! }; // LordHavoc: I own protocol ranges 96, 97, 3500-3599 @@ -294,10 +300,10 @@ void EntityFrameCSQC_WriteState (sizebuf_t *msg, int number, qboolean doupdate, if(!*sectionstarted) MSG_WriteByte(msg, svc_csqcentities); MSG_WriteShort(msg, number); - ((int *)prog->globals.generic)[OFS_PARM0] = sv.writeentitiestoclient_cliententitynumber; + PRVM_G_INT(OFS_PARM0) = sv.writeentitiestoclient_cliententitynumber; prog->globals.server->self = number; PRVM_ExecuteProgram(val->function, "Null SendEntity\n"); - if(prog->globals.generic[OFS_RETURN]) + if(PRVM_G_FLOAT(OFS_RETURN)) { if (msg->cursize + 2 > msg->maxsize) { @@ -1799,8 +1805,17 @@ void EntityState5_WriteUpdate(int number, const entity_state_t *s, int changedbi else { bits = changedbits; - if ((bits & E5_ORIGIN) && ((s->flags & RENDER_EXTERIORMODEL) || s->origin[0] < -4096 || s->origin[0] >= 4096 || s->origin[1] < -4096 || s->origin[1] >= 4096 || s->origin[2] < -4096 || s->origin[2] >= 4096)) + if ((bits & E5_ORIGIN) && ((s->flags & RENDER_EXTERIORMODEL) || s->origin[0] <= -4096.0625 || s->origin[0] >= 4095.9375 || s->origin[1] <= -4096.0625 || s->origin[1] >= 4095.9375 || s->origin[2] <= -4096.0625 || s->origin[2] >= 4095.9375)) bits |= E5_ORIGIN32; + // possible values: + // negative origin: + // (int)(f * 8 - 0.5) >= -32768 + // (f * 8 - 0.5) > -32769 + // f > -4096.0625 + // positive origin: + // (int)(f * 8 + 0.5) <= 32767 + // (f * 8 + 0.5) < 32768 + // f * 8 + 0.5) < 4095.9375 if ((bits & E5_ANGLES) && !(s->flags & RENDER_LOWPRECISION)) bits |= E5_ANGLES16; if ((bits & E5_MODEL) && s->modelindex >= 256)