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;
// 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) \
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;