data = entdata;
if (!data)
return;
- if (!COM_ParseToken(&data))
+ if (!COM_ParseToken(&data, false))
return; // error
if (com_token[0] != '{')
return; // error
while (1)
{
- if (!COM_ParseToken(&data))
+ if (!COM_ParseToken(&data, false))
return; // error
if (com_token[0] == '}')
break; // end of worldspawn
strcpy(key, com_token);
while (key[strlen(key)-1] == ' ') // remove trailing spaces
key[strlen(key)-1] = 0;
- if (!COM_ParseToken(&data))
+ if (!COM_ParseToken(&data, false))
return; // error
strcpy(value, com_token);
if (!strcmp("sky", key))
// parse protocol version number
i = MSG_ReadLong ();
- if (i != PROTOCOL_VERSION && i != DPPROTOCOL_VERSION1 && i != DPPROTOCOL_VERSION2 && i != DPPROTOCOL_VERSION3 && i != 250)
+ if (i != PROTOCOL_VERSION && i != DPPROTOCOL_VERSION1 && i != DPPROTOCOL_VERSION2 && i != DPPROTOCOL_VERSION3 && i != DPPROTOCOL_VERSION4 && i != 250)
{
- Host_Error ("Server is protocol %i, not %i, %i, %i or %i", i, DPPROTOCOL_VERSION1, DPPROTOCOL_VERSION2, DPPROTOCOL_VERSION3, PROTOCOL_VERSION);
+ Host_Error ("Server is protocol %i, not %i, %i, %i, %i or %i", i, DPPROTOCOL_VERSION1, DPPROTOCOL_VERSION2, DPPROTOCOL_VERSION3, DPPROTOCOL_VERSION4, PROTOCOL_VERSION);
return;
}
Nehahrademcompatibility = false;
if (cls.demoplayback && demo_nehahra.integer)
Nehahrademcompatibility = true;
dpprotocol = i;
- if (dpprotocol != DPPROTOCOL_VERSION1 && dpprotocol != DPPROTOCOL_VERSION2 && dpprotocol != DPPROTOCOL_VERSION3)
+ if (dpprotocol != DPPROTOCOL_VERSION1 && dpprotocol != DPPROTOCOL_VERSION2 && dpprotocol != DPPROTOCOL_VERSION3 && dpprotocol != DPPROTOCOL_VERSION4)
dpprotocol = 0;
// parse maxclients
// not a monster
ent->persistent.lerpstarttime = cl.mtime[1];
// no lerp if it's singleplayer
- if (sv.active && svs.maxclients == 1)
+ if (cl.islocalgame)
ent->persistent.lerpdeltatime = 0;
else
ent->persistent.lerpdeltatime = cl.mtime[0] - cl.mtime[1];
}
static entity_frame_t entityframe;
+extern mempool_t *cl_entities_mempool;
void CL_ReadEntityFrame(void)
{
- entity_t *ent;
- int i;
- EntityFrame_Read(&cl.entitydatabase);
- EntityFrame_FetchFrame(&cl.entitydatabase, EntityFrame_MostRecentlyRecievedFrameNum(&cl.entitydatabase), &entityframe);
- for (i = 0;i < entityframe.numentities;i++)
+ if (dpprotocol == DPPROTOCOL_VERSION1 || dpprotocol == DPPROTOCOL_VERSION2 || dpprotocol == DPPROTOCOL_VERSION3)
{
- // copy the states
- ent = &cl_entities[entityframe.entitydata[i].number];
- ent->state_previous = ent->state_current;
- ent->state_current = entityframe.entitydata[i];
- CL_MoveLerpEntityStates(ent);
- // the entity lives again...
- entlife[ent->state_current.number] = 2;
- cl_entities_active[ent->state_current.number] = true;
+ int i;
+ entity_t *ent;
+ EntityFrame_Read(&cl.entitydatabase);
+ EntityFrame_FetchFrame(&cl.entitydatabase, EntityFrame_MostRecentlyRecievedFrameNum(&cl.entitydatabase), &entityframe);
+ for (i = 0;i < entityframe.numentities;i++)
+ {
+ // copy the states
+ ent = &cl_entities[entityframe.entitydata[i].number];
+ ent->state_previous = ent->state_current;
+ ent->state_current = entityframe.entitydata[i];
+ CL_MoveLerpEntityStates(ent);
+ // the entity lives again...
+ entlife[ent->state_current.number] = 2;
+ cl_entities_active[ent->state_current.number] = true;
+ }
+ }
+ else
+ {
+ if (!cl.entitydatabase4)
+ cl.entitydatabase4 = EntityFrame4_AllocDatabase(cl_entities_mempool);
+ EntityFrame4_CL_ReadFrame(cl.entitydatabase4);
}
}
void CL_EntityUpdateEnd(void)
{
- int i;
- // disable entities that disappeared this frame
- for (i = 1;i < MAX_EDICTS;i++)
+ if (dpprotocol == PROTOCOL_VERSION || dpprotocol == DPPROTOCOL_VERSION1 || dpprotocol == DPPROTOCOL_VERSION2 || dpprotocol == DPPROTOCOL_VERSION3)
{
- // clear only the entities that were active last frame but not this
- // frame, don't waste time clearing all entities (which would cause
- // cache misses)
- if (entlife[i])
+ int i;
+ // disable entities that disappeared this frame
+ for (i = 1;i < MAX_EDICTS;i++)
{
- entlife[i]--;
- if (!entlife[i])
- cl_entities[i].state_previous.active = cl_entities[i].state_current.active = 0;
+ // clear only the entities that were active last frame but not this
+ // frame, don't waste time clearing all entities (which would cause
+ // cache misses)
+ if (entlife[i])
+ {
+ entlife[i]--;
+ if (!entlife[i])
+ cl_entities[i].state_previous.active = cl_entities[i].state_current.active = 0;
+ }
}
}
}
{
int i;
- memset(&ent->state_baseline, 0, sizeof(entity_state_t));
+ ClearStateToDefault(&ent->state_baseline);
ent->state_baseline.active = true;
if (large)
{
ent->state_baseline.origin[i] = MSG_ReadCoord ();
ent->state_baseline.angles[i] = MSG_ReadAngle ();
}
- ent->state_baseline.alpha = 255;
- ent->state_baseline.scale = 16;
- ent->state_baseline.glowsize = 0;
- ent->state_baseline.glowcolor = 254;
- ent->state_previous = ent->state_current = ent->state_baseline;
-
CL_ValidateState(&ent->state_baseline);
+ ent->state_previous = ent->state_current = ent->state_baseline;
}
case svc_version:
i = MSG_ReadLong ();
- if (i != PROTOCOL_VERSION && i != DPPROTOCOL_VERSION1 && i != DPPROTOCOL_VERSION2 && i != DPPROTOCOL_VERSION3 && i != 250)
- Host_Error ("CL_ParseServerMessage: Server is protocol %i, not %i, %i, %i or %i", i, DPPROTOCOL_VERSION1, DPPROTOCOL_VERSION2, DPPROTOCOL_VERSION3, PROTOCOL_VERSION);
+ if (i != PROTOCOL_VERSION && i != DPPROTOCOL_VERSION1 && i != DPPROTOCOL_VERSION2 && i != DPPROTOCOL_VERSION3 && i != DPPROTOCOL_VERSION4 && i != 250)
+ Host_Error ("CL_ParseServerMessage: Server is protocol %i, not %i, %i, %i, %i or %i", i, DPPROTOCOL_VERSION1, DPPROTOCOL_VERSION2, DPPROTOCOL_VERSION3, DPPROTOCOL_VERSION4, PROTOCOL_VERSION);
Nehahrademcompatibility = false;
if (i == 250)
Nehahrademcompatibility = true;
if (cls.demoplayback && demo_nehahra.integer)
Nehahrademcompatibility = true;
dpprotocol = i;
- if (dpprotocol != DPPROTOCOL_VERSION1 && dpprotocol != DPPROTOCOL_VERSION2 && dpprotocol != DPPROTOCOL_VERSION3)
+ if (dpprotocol != DPPROTOCOL_VERSION1 && dpprotocol != DPPROTOCOL_VERSION2 && dpprotocol != DPPROTOCOL_VERSION3 && dpprotocol != DPPROTOCOL_VERSION4)
dpprotocol = 0;
break;