From: terencehill Date: Mon, 26 Feb 2024 15:59:59 +0000 (+0100) Subject: Fix wrong respawn ghost colors with cl_forceuniqueplayercolors 1 X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=d28ceaaa3d27f3f4c3e274e5db954d13576e4c30 Fix wrong respawn ghost colors with cl_forceuniqueplayercolors 1 --- diff --git a/qcsrc/client/csqcmodel_hooks.qc b/qcsrc/client/csqcmodel_hooks.qc index 78b84fdea..99368d393 100644 --- a/qcsrc/client/csqcmodel_hooks.qc +++ b/qcsrc/client/csqcmodel_hooks.qc @@ -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; diff --git a/qcsrc/common/csqcmodel_settings.qh b/qcsrc/common/csqcmodel_settings.qh index adf9367ef..7155f1807 100644 --- a/qcsrc/common/csqcmodel_settings.qh +++ b/qcsrc/common/csqcmodel_settings.qh @@ -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) \ diff --git a/qcsrc/server/player.qc b/qcsrc/server/player.qc index ad3ba94e4..3ca1bbc1b 100644 --- a/qcsrc/server/player.qc +++ b/qcsrc/server/player.qc @@ -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;