seta sv_servermodelsonly 1
cl_curl_enabled 1
-cl_curl_maxspeed 400
+cl_curl_maxspeed 500
+cl_curl_useragent 1
+cl_curl_useragent_append "$g_xonoticversion"
+
sv_curl_defaulturl "http://www.xonotic.org/contentdownload/getmap.php?file="
set sv_curl_serverpackages_auto 1 "automatically add packs with *.serverpackage files to sv_curl_serverpackages"
set g_debug_bot_commands 0 "print scripted bot commands before executing"
set g_debug_defaultsounds 0 "always use default sounds"
set sv_use_csqc_players 1 "set to 0 to disable CSQC players for better Xonotic 0.5 compat"
-set cl_forceplayermodels 0 "make everyone look like your own model (requires server to have sv_use_csqc_players 1 and sv_defaultcharacter 0)"
-set cl_forceplayercolors 0 "make everyone look like your own color (requires server to have sv_use_csqc_players 1 and sv_defaultcharacter 0, and is ignored in teamplay)"
set cl_precacheplayermodels 0 "TODO please check if this needs to be 1 or if precaching a model the server already requested is fast enough to do it at runtime"
+seta cl_forceplayermodels 0 "make everyone look like your own model (requires server to have sv_use_csqc_players 1 and sv_defaultcharacter 0)"
+seta cl_forceplayercolors 0 "make everyone look like your own color (requires server to have sv_use_csqc_players 1 and sv_defaultcharacter 0, and is ignored in teamplay)"
+seta cl_forcemyplayermodel "" "set to the model file name you want to show yourself as (requires server to have sv_use_csqc_players 1; does not affect how enemies look with cl_forceplayermodels)"
+seta cl_forcemyplayerskin 0 "set to the skin number you want to show yourself as (requires server to have sv_use_csqc_players 1; does not affect how enemies look with cl_forceplayermodels)"
+seta cl_forcemyplayercolors 0 "set to the color value (encoding is same as _cl_color) for your own player model (requires server to have sv_use_csqc_players 1, and is ignored in teamplay; does not affect how enemies look with cl_forceplayermodels)"
// debug cvars for keyhunt attaching
set _angles "0 0 0"
use strict;
use warnings;
+# Colors:
+# red
+# ORANGE1
+# ORANGE2
+# yellow
+# yellowgreen
+# green
+# cyangreen
+# cyan
+# CYANBLUE1
+# CYANBLUE2
+# blue
+# bluemagenta
+# magenta
+# redmagenta
+
my @colors = (
- 'cccccc',
- '996600',
- '00ff80',
- '00ff00',
- 'ff0000',
- '00a8ff', # was: 0080ff, green increased
- '00ffff',
- '80ff00',
- '8000ff',
- 'ff00ff',
- 'ff0080',
- '999999',
- 'ffff00',
- '0050ff', # was: 0000ff, green increased so the color is perceptively just as bright as red (for teamplay)
- 'ff8000',
- '000000'
+ 'ffffff', # white
+ 'ff5500', # orange1
+ '00ff80', # cyangreen
+ '00ff00', # green
+ 'ff0000', # red
+ '00aaff', # cyanblue1
+ '00ffff', # cyan
+ '80ff00', # yellowgreen
+ '8000ff', # bluemagenta
+ 'ff00ff', # magenta
+ 'ff0080', # redmagenta
+ '0000ff', # blue
+ 'ffff00', # yellow
+ '0055ff', # cyanblue2
+ 'ffaa00', # orange2
+ '000000' # unused
);
my $value_min = 0x0F;
my $value_max = 0xFF;
-my $value_smin = 0x00;
-my $value_smax = 0xB3;
my $i = 0;
my $pal_colormap = "";
my $g = hex $2;
my $b = hex $3;
$pal_colormap .= sprintf "%c%c%c", map { int(0.5 + $value_min + ($_ * 1.0 / 0xFF) * ($value_max - $value_min)) } $r, $g, $b;
- $pal_scoreboard .= sprintf "%c%c%c", map { int(0.5 + $value_smin + ($_ * 1.0 / 0xFF) * ($value_smax - $value_smin)) } $r, $g, $b;
printf STDERR "\t\tcase %2d: return '%f %f %f';\n", $i, $r / 0xFF, $g / 0xFF, $b / 0xFF;
++$i;
}
-print "$pal_colormap$pal_scoreboard$pal_colormap$pal_scoreboard";
+print "$pal_colormap$pal_colormap$pal_colormap$pal_colormap";
float autocvar_cl_loddistance2 = 4096;
float autocvar_cl_forceplayermodels;
float autocvar_cl_forceplayercolors;
+string autocvar_cl_forcemyplayermodel;
+float autocvar_cl_forcemyplayerskin;
+float autocvar_cl_forcemyplayercolors;
float autocvar__cl_playerskin;
string autocvar__cl_playermodel;
float autocvar_cl_precacheplayermodels;
string forceplayermodels_model;
float forceplayermodels_modelindex;
float forceplayermodels_skin;
+
+string forceplayermodels_mymodel;
+float forceplayermodels_mymodelindex;
+
float forceplayermodels_attempted;
.string forceplayermodels_savemodel;
.float forceplayermodels_savemodelindex;
// forcemodel finding
if(!forceplayermodels_attempted)
{
+ forceplayermodels_attempted = 1;
+
// only if this failed, find it out on our own
entity e;
e = spawn();
forceplayermodels_model = e.model;
forceplayermodels_modelindex = e.modelindex;
forceplayermodels_skin = autocvar__cl_playerskin;
- forceplayermodels_attempted = 1;
+ remove(e);
+ }
+
+ if(autocvar_cl_forcemyplayermodel != "" && autocvar_cl_forcemyplayermodel != forceplayermodels_mymodel)
+ {
+ entity e;
+ e = spawn();
+ setmodel(e, autocvar_cl_forcemyplayermodel); // this is harmless, see below
+ forceplayermodels_mymodel = e.model;
+ forceplayermodels_mymodelindex = e.modelindex;
remove(e);
}
// apply it
- if(autocvar_cl_forceplayermodels && forceplayermodels_modelindex)
+ if(autocvar_cl_forcemyplayermodel != "" && forceplayermodels_mymodelindex && self.entnum == player_localnum + 1)
+ {
+ self.model = forceplayermodels_mymodel;
+ self.modelindex = forceplayermodels_mymodelindex;
+ self.skin = autocvar_cl_forcemyplayerskin;
+ }
+ else if(autocvar_cl_forceplayermodels && forceplayermodels_modelindex)
{
self.model = forceplayermodels_model;
self.modelindex = forceplayermodels_modelindex;
// forceplayercolors too
if(!teamplay)
- if(autocvar_cl_forceplayercolors)
+ {
+ if(autocvar_cl_forcemyplayercolors && self.entnum == player_localnum + 1)
+ self.colormap = 1024 + autocvar_cl_forcemyplayercolors;
+ else if(autocvar_cl_forceplayercolors)
self.colormap = player_localnum + 1;
+ }
}
// FEATURE: fallback frames
{
switch(c)
{
- case 0: return '0.800000 0.800000 0.800000';
- case 1: return '0.600000 0.400000 0.000000';
+ case 0: return '1.000000 1.000000 1.000000';
+ case 1: return '1.000000 0.333333 0.000000';
case 2: return '0.000000 1.000000 0.501961';
case 3: return '0.000000 1.000000 0.000000';
case 4: return '1.000000 0.000000 0.000000';
- case 5: return '0.000000 0.658824 1.000000';
+ case 5: return '0.000000 0.666667 1.000000';
case 6: return '0.000000 1.000000 1.000000';
case 7: return '0.501961 1.000000 0.000000';
case 8: return '0.501961 0.000000 1.000000';
case 9: return '1.000000 0.000000 1.000000';
case 10: return '1.000000 0.000000 0.501961';
- case 11: return '0.600000 0.600000 0.600000';
+ case 11: return '0.000000 0.000000 1.000000';
case 12: return '1.000000 1.000000 0.000000';
- case 13: return '0.000000 0.313725 1.000000';
- case 14: return '1.000000 0.501961 0.000000';
+ case 13: return '0.000000 0.333333 1.000000';
+ case 14: return '1.000000 0.666667 0.000000';
case 15:
if(isPants)
return
}
void XonoticColorButton_configureXonoticColorButton(entity me, float theGroup, float theColor, float theValue)
{
+ switch(theValue)
+ {
+ // rearrange 1..14 for rainbow order
+ case 1: theValue = 10; break;
+ case 2: theValue = 4; break;
+ case 3: theValue = 1; break;
+ case 4: theValue = 14; break;
+ case 5: theValue = 12; break;
+ case 6: theValue = 7; break;
+ case 7: theValue = 3; break;
+ case 8: theValue = 2; break;
+ case 9: theValue = 6; break;
+ case 10: theValue = 5; break;
+ case 11: theValue = 13; break;
+ case 12: theValue = 11; break;
+ case 13: theValue = 8; break;
+ case 14: theValue = 9; break;
+ default:
+ // no change
+ break;
+ }
me.cvarName = "_cl_color";
me.cvarValueFloat = theValue;
me.cvarPart = theColor;