]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - protocol.c
fixed parmcount check on VM_SV_AddStat from 2 parameters to 3
[xonotic/darkplaces.git] / protocol.c
index f5d322c580d14e9a97b25c1e3dac7954f18c04b0..cfa837bf51d4f6266b72217372c953e1933dad45 100644 (file)
@@ -282,7 +282,7 @@ void EntityFrameCSQC_WriteFrame (sizebuf_t *msg, int numstates, const entity_sta
        prvm_eval_t                             *val, *val2;
        int                                             csqcents = 0;
 
-       if(!eval_SendEntity || !eval_Version)
+       if(prog->fieldoffsets.SendEntity < 0 || prog->fieldoffsets.Version < 0)
                return;
        --csqc_clent;
        if(!sv2csqcents_version[csqc_clent])
@@ -323,10 +323,10 @@ void EntityFrameCSQC_WriteFrame (sizebuf_t *msg, int numstates, const entity_sta
 
 //             if(!s->active)
 //                     continue;
-               val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[s->number]), eval_SendEntity);
+               val = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.SendEntity);
                if(val->function)
                {
-                       val2 = PRVM_GETEDICTFIELDVALUE((&prog->edicts[s->number]), eval_Version);
+                       val2 = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.Version);
                        if(sv2csqcents_version[csqc_clent][s->number] == (unsigned char)val2->_float)
                                continue;
                        if(!csqcents)
@@ -391,7 +391,7 @@ void EntityFrameQuake_WriteFrame(sizebuf_t *msg, int numstates, const entity_sta
 
        for (i = 0, s = states;i < numstates;i++, s++)
        {
-               val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[s->number]), eval_SendEntity);
+               val = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.SendEntity);
                if(val && val->function)
                        continue;
 
@@ -1048,7 +1048,7 @@ void EntityFrame_WriteFrame(sizebuf_t *msg, entityframe_database_t *d, int numst
                ent = states + i;
                number = ent->number;
 
-               val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[number]), eval_SendEntity);
+               val = PRVM_EDICTFIELDVALUE((&prog->edicts[number]), prog->fieldoffsets.SendEntity);
                if(val && val->function)
                                continue;
                for (;onum < o->numentities && o->entitydata[onum].number < number;onum++)
@@ -1537,7 +1537,7 @@ void EntityFrame4_WriteFrame(sizebuf_t *msg, entityframe4_database_t *d, int num
        d->currententitynumber = 1;
        for (i = 0, n = startnumber;n < prog->max_edicts;n++)
        {
-               val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[n]), eval_SendEntity);
+               val = PRVM_EDICTFIELDVALUE((&prog->edicts[n]), prog->fieldoffsets.SendEntity);
                if(val && val->function)
                        continue;
                // find the old state to delta from
@@ -1646,8 +1646,6 @@ void EntityFrame5_ExpandEdicts(entityframe5_database_t *d, int newmax)
 int EntityState5_Priority(entityframe5_database_t *d, int stateindex)
 {
        int limit, priority;
-       double distance;
-       int changedbits;
        entity_state_t *s;
        // if it is the player, update urgently
        if (stateindex == d->viewentnum)
@@ -1663,7 +1661,9 @@ int EntityState5_Priority(entityframe5_database_t *d, int stateindex)
                priority++;
                return bound(1, priority, E5_PROTOCOL_PRIORITYLEVELS - 1);
        }
-       changedbits = d->deltabits[stateindex];
+       // certain changes are more noticable than others
+       if (d->deltabits[stateindex] & (E5_FULLUPDATE | E5_ATTACHMENT | E5_MODEL | E5_FLAGS | E5_COLORMAP))
+               priority++;
        // find the root entity this one is attached to, and judge relevance by it
        for (limit = 0;limit < 256;limit++)
        {
@@ -1680,19 +1680,10 @@ int EntityState5_Priority(entityframe5_database_t *d, int stateindex)
        if (limit >= 256)
                Con_DPrintf("Protocol: Runaway loop recursing tagentity links on entity %i\n", stateindex);
        // now that we have the parent entity we can make some decisions based on
-       // distance and other factors
-       // note: this origin check does not work properly on doors/lifts whose
-       // origin is normally far away
-       distance = VectorDistance(d->states[d->viewentnum].origin, s->origin);
-       // if it is not very far from the player, update more often
-       if (distance < 1024.0f)
-               priority++;
-       // certain changes are more noticable than others
-       if (changedbits & E5_FULLUPDATE)
-               priority++;
-       else if (changedbits & (E5_ATTACHMENT | E5_MODEL | E5_FLAGS | E5_COLORMAP))
+       // distance from the player
+       if (VectorDistance(d->states[d->viewentnum].origin, s->origin) < 1024.0f)
                priority++;
-       return (int) bound(1, priority, E5_PROTOCOL_PRIORITYLEVELS - 1);
+       return bound(1, priority, E5_PROTOCOL_PRIORITYLEVELS - 1);
 }
 
 void EntityState5_WriteUpdate(int number, const entity_state_t *s, int changedbits, sizebuf_t *msg)
@@ -1700,7 +1691,7 @@ void EntityState5_WriteUpdate(int number, const entity_state_t *s, int changedbi
        unsigned int bits = 0;
 
        prvm_eval_t *val;
-       val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[s->number]), eval_SendEntity);
+       val = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.SendEntity);
        if(val && val->function)
                return;
 
@@ -2240,6 +2231,7 @@ void EntityFrame5_WriteFrame(sizebuf_t *msg, entityframe5_database_t *d, int num
                }
                SETPVSBIT(d->visiblebits, num);
                d->deltabits[num] |= EntityState5_DeltaBits(d->states + num, n);
+               d->priorities[num] = max(d->priorities[num], 1);
                d->states[num] = *n;
                d->states[num].number = num;
                // advance to next entity so the next iteration doesn't immediately remove it