]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix wrong respawn ghost colors with cl_forceuniqueplayercolors 1
authorterencehill <piuntn@gmail.com>
Mon, 26 Feb 2024 15:59:59 +0000 (16:59 +0100)
committerterencehill <piuntn@gmail.com>
Mon, 26 Feb 2024 15:59:59 +0000 (16:59 +0100)
qcsrc/client/csqcmodel_hooks.qc
qcsrc/common/csqcmodel_settings.qh
qcsrc/server/player.qc

index 78b84fdea6f3da3801773ede0622c4bbd6207cb5..99368d39370e37aa31eea427c12d944616d1c3b3 100644 (file)
@@ -309,11 +309,15 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
                        this.colormap = 1024 + autocvar_cl_forcemyplayercolors;
                else if (autocvar_cl_forceuniqueplayercolors && !islocalplayer && !gametype.m_1v1)
                {
-                       // Assign each enemy unique colors
+                       // Assign each enemy an unique color combination
                        // pick colors from 0 to 14 since 15 is the rainbow color
                        // pl01 0 1, pl02 1 2, ..., pl14 13 14, pl15 14 0
                        // pl16 0 2, pl17 1 3, ..., pl29 13  0, pl30 14 1
-                       int num = this.entnum - 1;
+                       int num;
+                       if (this.isplayermodel & ISPLAYER_CLIENT)
+                               num = this.entnum - 1;
+                       else
+                               num = this.sv_entnum - 1;
                        int c1 = num % 15;
                        int q = floor(num / 15);
                        int c2 = (c1 + 1 + q) % 15;
index adf9367ef7ee7baeae587d9a041269df482bb131..7155f1807e7f213ff4739c64569634a2de355abc 100644 (file)
@@ -44,6 +44,9 @@
 //   bits above 14 are defined in lib/csqcmodel/common.qh
 #define CSQCMODEL_EXTRAPROPERTIES \
        CSQCMODEL_PROPERTY(BIT(0), int, ReadShort, WriteShort, colormap) \
+       CSQCMODEL_IF(!isplayer) \
+               CSQCMODEL_PROPERTY(BIT(0), int, ReadByte, WriteByte, sv_entnum) \
+       CSQCMODEL_ENDIF \
        CSQCMODEL_PROPERTY(BIT(1), int, ReadInt24_t, WriteInt24_t, effects) \
        CSQCMODEL_PROPERTY(BIT(2), int, ReadByte, WriteByte, modelflags) \
        CSQCMODEL_PROPERTY(BIT(2), int, ReadByte, WriteByte, skin) \
index ad3ba94e4a21d18c9aa7c293a1c68cfa9a04edeb..3ca1bbc1b1116c73c224f211d88f51074b720467 100644 (file)
@@ -127,6 +127,7 @@ void CopyBody(entity this, float keepvelocity)
 
        if(clone.colormap <= maxclients && clone.colormap > 0)
                clone.colormap = 1024 + this.clientcolors;
+       clone.sv_entnum = etof(this); // sent to CSQC for color mapping purposes
 
        CSQCMODEL_AUTOINIT(clone);
        clone.CopyBody_nextthink = this.nextthink;