if(developer_networkentities.integer >= 2) \
{ \
prvm_edict_t *ed = prog->edicts + num; \
- const char *cname = "(no classname)"; \
- if(prog->fieldoffsets.classname >= 0) \
- { \
- string_t handle = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.classname)->string; \
- if (handle) \
- cname = PRVM_GetString(handle); \
- } \
- Con_Printf("sent entity update of size %d for a %s\n", (msg->cursize - entityprofiling_startsize), cname); \
+ Con_Printf("sent entity update of size %d for a %s\n", (msg->cursize - entityprofiling_startsize), PRVM_serveredictstring(ed, classname) ? PRVM_GetString(PRVM_serveredictstring(ed, classname)) : "(no classname)"); \
}
// this is 88 bytes (must match entity_state_t in protocol.h)
// mark ALL csqc entities as requiring a FULL resend!
// I know this is a bad workaround, but better than nothing.
int i, n;
- prvm_eval_t *val;
prvm_edict_t *ed;
- if(prog->fieldoffsets.SendEntity < 0 || prog->fieldoffsets.Version < 0)
- return;
-
n = client->csqcnumedicts;
for(i = 0; i < n; ++i)
{
if(client->csqcentityglobalhistory[i])
{
ed = prog->edicts + i;
- val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.SendEntity);
- if (val->function)
+ if (PRVM_serveredictfunction(ed, SendEntity))
client->csqcentitysendflags[i] |= 0xFFFFFF; // FULL RESEND
else // if it was ever sent to that client as a CSQC entity
{
qboolean sectionstarted = false;
const unsigned short *n;
prvm_edict_t *ed;
- prvm_eval_t *val;
client_t *client = svs.clients + sv.writeentitiestoclient_clientnumber;
int dbframe = EntityFrameCSQC_AllocFrame(client, framenum);
csqcentityframedb_t *db = &client->csqcentityframehistory[dbframe];
maxsize -= 24; // always fit in an empty svc_entities message (for packet loss detection!)
- // if this server progs is not CSQC-aware, return early
- if(prog->fieldoffsets.SendEntity < 0 || prog->fieldoffsets.Version < 0)
- return false;
-
// make sure there is enough room to store the svc_csqcentities byte,
// the terminator (0x0000) and at least one entity update
if (msg->cursize + 32 >= maxsize)
}
}
ed = prog->edicts + number;
- val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.SendEntity);
- if (val->function)
+ if (PRVM_serveredictfunction(ed, SendEntity))
client->csqcentityscope[number] = 2;
else if (client->csqcentityscope[number])
{
{
number = *n;
ed = prog->edicts + number;
- val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.SendEntity);
- if (val->function)
+ if (PRVM_serveredictfunction(ed, SendEntity))
client->csqcentityscope[number] = 2;
}
*/
// save the cursize value in case we overflow and have to rollback
int oldcursize = msg->cursize;
client->csqcentityscope[number] = 1;
- val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.SendEntity);
- if (val->function)
+ if (PRVM_serveredictfunction(ed, SendEntity))
{
if(!sectionstarted)
MSG_WriteByte(msg, svc_csqcentities);
PRVM_G_INT(OFS_PARM0) = sv.writeentitiestoclient_cliententitynumber;
PRVM_G_FLOAT(OFS_PARM1) = sendflags;
prog->globals.server->self = number;
- PRVM_ExecuteProgram(val->function, "Null SendEntity\n");
+ PRVM_ExecuteProgram(PRVM_serveredictfunction(ed, SendEntity), "Null SendEntity\n");
msg->allowoverflow = false;
if(PRVM_G_FLOAT(OFS_RETURN) && msg->cursize + 2 <= maxsize)
{
int i, bits;
sizebuf_t buf;
unsigned char data[128];
- prvm_eval_t *val;
qboolean success = false;
// prepare the buffer
{
ENTITYSIZEPROFILING_START(msg, states[i]->number);
s = states[i];
- val = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.SendEntity);
- if(val && val->function)
+ if(PRVM_serveredictfunction((&prog->edicts[s->number]), SendEntity))
continue;
// prepare the buffer
entity_frame_t *o = &d->deltaframe;
const entity_state_t *ent, *delta;
vec3_t eye;
- prvm_eval_t *val;
d->latestframenum++;
ent = states[i];
number = ent->number;
- val = PRVM_EDICTFIELDVALUE((&prog->edicts[number]), prog->fieldoffsets.SendEntity);
- if(val && val->function)
+ if (PRVM_serveredictfunction((&prog->edicts[number]), SendEntity))
continue;
for (;onum < o->numentities && o->entitydata[onum].number < number;onum++)
{
int i, n, startnumber;
sizebuf_t buf;
unsigned char data[128];
- prvm_eval_t *val;
// if there isn't enough space to accomplish anything, skip it
if (msg->cursize + 24 > maxsize)
d->currententitynumber = 1;
for (i = 0, n = startnumber;n < prog->max_edicts;n++)
{
- val = PRVM_EDICTFIELDVALUE((&prog->edicts[n]), prog->fieldoffsets.SendEntity);
- if(val && val->function)
+ if (PRVM_serveredictfunction((&prog->edicts[n]), SendEntity))
continue;
// find the old state to delta from
e = EntityFrame4_GetReferenceEntity(d, n);
//dp_model_t *model;
ENTITYSIZEPROFILING_START(msg, s->number);
- prvm_eval_t *val;
- val = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.SendEntity);
- if(val && val->function)
+ if (PRVM_serveredictfunction((&prog->edicts[s->number]), SendEntity))
return;
if (s->active != ACTIVE_NETWORK)
break;
case 4:
if (!cl.engineskeletonobjects)
- cl.engineskeletonobjects = Mem_Alloc(cls.levelmempool, sizeof(*cl.engineskeletonobjects) * MAX_EDICTS);
+ cl.engineskeletonobjects = (skeleton_t *) Mem_Alloc(cls.levelmempool, sizeof(*cl.engineskeletonobjects) * MAX_EDICTS);
skeleton = &cl.engineskeletonobjects[number];
modelindex = MSG_ReadShort();
model = CL_GetModelByIndex(modelindex);
if (!skeleton->relativetransforms || skeleton->model != model)
{
skeleton->model = model;
- skeleton->relativetransforms = Mem_Realloc(cls.levelmempool, skeleton->relativetransforms, sizeof(*skeleton->relativetransforms) * skeleton->model->num_bones);
+ skeleton->relativetransforms = (matrix4x4_t *) Mem_Realloc(cls.levelmempool, skeleton->relativetransforms, sizeof(*skeleton->relativetransforms) * skeleton->model->num_bones);
for (bonenum = 0;bonenum < model->num_bones;bonenum++)
skeleton->relativetransforms[bonenum] = identitymatrix;
}