From: Rudolf Polzer Date: Thu, 24 May 2012 10:57:36 +0000 (+0200) Subject: Merge branch 'master' into divVerent/force_colors_teamplay X-Git-Tag: xonotic-v0.7.0~314 X-Git-Url: http://git.xonotic.org/?a=commitdiff_plain;h=ac0133698b6b0cf951e42821864610b922fc344c;hp=e55b0af41ff296efc886dfaccf3f663f751f6502;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into divVerent/force_colors_teamplay --- diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index 1e938c26a..dd482a8f2 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -396,6 +396,7 @@ float autocvar_cl_forceplayercolors; string autocvar_cl_forcemyplayermodel; float autocvar_cl_forcemyplayerskin; float autocvar_cl_forcemyplayercolors; +float autocvar__cl_color; float autocvar__cl_playerskin; string autocvar__cl_playermodel; float autocvar_cl_precacheplayermodels; diff --git a/qcsrc/client/csqcmodel_hooks.qc b/qcsrc/client/csqcmodel_hooks.qc index 152ecbe82..08e19dcaf 100644 --- a/qcsrc/client/csqcmodel_hooks.qc +++ b/qcsrc/client/csqcmodel_hooks.qc @@ -196,7 +196,61 @@ void CSQCPlayer_ForceModel_Apply(float islocalplayer) } // forceplayercolors too - if(!teamplay) + if(teamplay) + { + // own team's color is never forced + float forcecolor_friend = 0; + float forcecolor_enemy = 0; + float teams_count = 0; + float my_colors = 1024 + autocvar__cl_color; + entity tm; + + for(tm = teams.sort_next; tm; tm = tm.sort_next) + if(tm.team != COLOR_SPECTATOR) + ++teams_count; + + if(autocvar_cl_forcemyplayercolors) + forcecolor_friend = 1024 + autocvar_cl_forcemyplayercolors; + if(autocvar_cl_forceplayercolors && teams_count == 2) + forcecolor_enemy = 1024 + my_colors; + + if(forcecolor_enemy && !forcecolor_friend) + { + // only enemy color is forced? + // verify it is not equal to the friend color + if(forcecolor_enemy == 1024 + 17 * myteam) + forcecolor_enemy = 0; + } + + if(forcecolor_friend && !forcecolor_enemy) + { + // only friend color is forced? + // verify it is not equal to the enemy color + for(tm = teams.sort_next; tm; tm = tm.sort_next) + // note: we even compare against our own team. + // if we rejected because we matched our OWN team color, + // this is not bad; we then simply keep our color as is + // anyway. + if(forcecolor_friend == 1024 + 17 * tm.team) + forcecolor_friend = 0; + } + + float cm; + cm = self.forceplayermodels_savecolormap; + cm = (cm >= 1024) ? cm : (stof(getplayerkeyvalue(self.colormap - 1, "colors")) + 1024); + + if(cm == 1024 + 17 * myteam) + { + if(forcecolor_friend) + self.colormap = forcecolor_friend; + } + else + { + if(forcecolor_enemy) + self.colormap = forcecolor_enemy; + } + } + else { if(autocvar_cl_forcemyplayercolors && islocalplayer) self.colormap = 1024 + autocvar_cl_forcemyplayercolors;