]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - protocol.c
made deformvertexes autosprite2 work properly
[xonotic/darkplaces.git] / protocol.c
index 848ad7c7f2357bdab1682b6e501e413c6fdef396..2bebb4866ae23ac543a595f8edfc95b4915f57b5 100644 (file)
@@ -52,7 +52,7 @@ protocolversioninfo[] =
        {15, "QUAKEDP"},
        {250, "NEHAHRAMOVIE"},
        {15, "QUAKE"},
-       {28, "QUAKEWORLD"},
+       {28, "QW"},
        {0, NULL}
 };
 
@@ -93,8 +93,8 @@ void Protocol_Names(char *buffer, size_t buffersize)
        for (i = 1;protocolversioninfo[i].name;i++)
        {
                if (i > 1)
-                       strlcat(buffer, " ", sizeof(buffer));
-               strlcat(buffer, protocolversioninfo[i].name, sizeof(buffer));
+                       strlcat(buffer, " ", buffersize);
+               strlcat(buffer, protocolversioninfo[i].name, buffersize);
        }
 }
 
@@ -393,7 +393,11 @@ void Protocol_WriteStatsReliable(void)
        if (!host_client->netconnection)
                return;
        // detect changes in stats and write reliable messages
-       for (i = 0;i < MAX_CL_STATS;i++)
+       // this only deals with 32 stats because the older protocols which use
+       // this function can only cope with 32 stats,
+       // they also do not support svc_updatestatubyte which was introduced in
+       // DP6 protocol (except for QW)
+       for (i = 0;i < 32;i++)
        {
                // quickly skip zero bytes
                if (!host_client->statsdeltabits[i >> 3])
@@ -406,14 +410,25 @@ void Protocol_WriteStatsReliable(void)
                {
                        host_client->statsdeltabits[i >> 3] -= (1 << (i & 7));
                        // send the stat as a byte if possible
-                       if (host_client->stats[i] >= 0 && host_client->stats[i] < 256)
+                       if (sv.protocol == PROTOCOL_QUAKEWORLD)
                        {
-                               MSG_WriteByte(&host_client->netconnection->message, svc_updatestatubyte);
-                               MSG_WriteByte(&host_client->netconnection->message, i);
-                               MSG_WriteByte(&host_client->netconnection->message, host_client->stats[i]);
+                               if (host_client->stats[i] >= 0 && host_client->stats[i] < 256)
+                               {
+                                       MSG_WriteByte(&host_client->netconnection->message, qw_svc_updatestat);
+                                       MSG_WriteByte(&host_client->netconnection->message, i);
+                                       MSG_WriteByte(&host_client->netconnection->message, host_client->stats[i]);
+                               }
+                               else
+                               {
+                                       MSG_WriteByte(&host_client->netconnection->message, qw_svc_updatestatlong);
+                                       MSG_WriteByte(&host_client->netconnection->message, i);
+                                       MSG_WriteLong(&host_client->netconnection->message, host_client->stats[i]);
+                               }
                        }
                        else
                        {
+                               // this could make use of svc_updatestatubyte in DP6 and later
+                               // protocols but those protocols do not use this function
                                MSG_WriteByte(&host_client->netconnection->message, svc_updatestat);
                                MSG_WriteByte(&host_client->netconnection->message, i);
                                MSG_WriteLong(&host_client->netconnection->message, host_client->stats[i]);
@@ -503,6 +518,8 @@ void EntityFrameQuake_WriteFrame(sizebuf_t *msg, int numstates, const entity_sta
                        bits |= U_GLOWSIZE;
                if (baseline.glowcolor != s->glowcolor)
                        bits |= U_GLOWCOLOR;
+               if (!VectorCompare(baseline.colormod, s->colormod))
+                       bits |= U_COLORMOD;
 
                // if extensions are disabled, clear the relevant update flags
                if (sv.protocol == PROTOCOL_QUAKE || sv.protocol == PROTOCOL_NEHAHRAMOVIE)