r5352 - in trunk/data: . qcsrc/client qcsrc/common qcsrc/menu/item
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Dec 29 14:02:24 EST 2008
Author: div0
Date: 2008-12-29 14:02:22 -0500 (Mon, 29 Dec 2008)
New Revision: 5352
Modified:
trunk/data/defaultNexuiz.cfg
trunk/data/qcsrc/client/Main.qc
trunk/data/qcsrc/client/View.qc
trunk/data/qcsrc/client/ctf.qc
trunk/data/qcsrc/client/miscfunctions.qc
trunk/data/qcsrc/client/sbar.qc
trunk/data/qcsrc/client/teamplay.qc
trunk/data/qcsrc/common/util.qc
trunk/data/qcsrc/common/util.qh
trunk/data/qcsrc/menu/item/inputbox.c
Log:
Translate color codes for old clients
Modified: trunk/data/defaultNexuiz.cfg
===================================================================
--- trunk/data/defaultNexuiz.cfg 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/defaultNexuiz.cfg 2008-12-29 19:02:22 UTC (rev 5352)
@@ -1282,3 +1282,5 @@
set g_ballistics_force_uzi_bulletconstant 115 // 5.8qu
set g_ballistics_force_shotgun_speed 15000 // speed of shotgun bullets if g_ballistics_force is 1
set g_ballistics_force_shotgun_bulletconstant 50 // 3.9qu
+
+set cl_stripcolorcodes 0 // experimental feature (notes: strips ALL color codes from messages!)
Modified: trunk/data/qcsrc/client/Main.qc
===================================================================
--- trunk/data/qcsrc/client/Main.qc 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/qcsrc/client/Main.qc 2008-12-29 19:02:22 UTC (rev 5352)
@@ -200,7 +200,7 @@
for(i = 0; i < maxclients; ++i)
{
e = playerslots[i];
- if(getplayerkey(i, "name") == "")
+ if(GetPlayerName(i) == "")
{
if(e.sort_prev)
{
@@ -588,12 +588,12 @@
// CSQC_Parse_Print : Provides the print string in the first parameter that the server provided. To execute standard behavior, simply execute print with the string.
void CSQC_Parse_Print(string strMessage)
{
- print(strMessage);
+ print(ColorTranslateRGB(strMessage));
}
// CSQC_Parse_CenterPrint : Provides the centerprint string in the first parameter that the server provided. To execute standard behavior, simply execute cprint with the string.
void CSQC_Parse_CenterPrint(string strMessage)
{
- cprint(strMessage);
+ cprint(ColorTranslateRGB(strMessage));
}
void CSQC_CheckRevision();
@@ -690,7 +690,7 @@
race_previousbesttime = ReadShort();
if(race_previousbestname)
strunzone(race_previousbestname);
- race_previousbestname = strzone(ReadString());
+ race_previousbestname = strzone(ColorTranslateRGB(ReadString()));
race_checkpointtime = time;
@@ -714,7 +714,7 @@
race_nextbesttime = ReadShort();
if(race_nextbestname)
strunzone(race_nextbestname);
- race_nextbestname = strzone(ReadString());
+ race_nextbestname = strzone(ColorTranslateRGB(ReadString()));
break;
case RACE_NET_CHECKPOINT_HIT_RACE:
Modified: trunk/data/qcsrc/client/View.qc
===================================================================
--- trunk/data/qcsrc/client/View.qc 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/qcsrc/client/View.qc 2008-12-29 19:02:22 UTC (rev 5352)
@@ -264,6 +264,7 @@
sbar_alpha_fg = cvar("sbar_alpha_fg" );
sbar_hudselector = cvar("sbar_hudselector");
+ ColorTranslateMode = cvar("cl_stripcolorcodes");
activeweapon = getstati(STAT_SWITCHWEAPON);
f = cvar("teamplay");
if(f != teamplay)
Modified: trunk/data/qcsrc/client/ctf.qc
===================================================================
--- trunk/data/qcsrc/client/ctf.qc 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/qcsrc/client/ctf.qc 2008-12-29 19:02:22 UTC (rev 5352)
@@ -48,7 +48,7 @@
++n;
if(n == 10)
n = 0;
- drawcolorcodedstring(ps, strcat(ftos(n), ") ", getplayerkey(i, "name"), " : ", ftos(getstatf(STAT_CTF_STATE))), '8 8 0', 1, 0); ps += po;
+ drawcolorcodedstring(ps, strcat(ftos(n), ") ", GetPlayerName(i), " : ", ftos(getstatf(STAT_CTF_STATE))), '8 8 0', 1, 0); ps += po;
}
}
drawstring(ps, "ESC) Exit Menu", '8 8 0', '1 1 0', 1, 0); ps += po;
Modified: trunk/data/qcsrc/client/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/client/miscfunctions.qc 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/qcsrc/client/miscfunctions.qc 2008-12-29 19:02:22 UTC (rev 5352)
@@ -260,3 +260,125 @@
w_y = -1 * v_x * sin(a) + v_y * cos(a);
return w;
}
+
+float ColorTranslateMode;
+
+string ColorTranslateRGB(string s)
+{
+ if not(ColorTranslateMode & 2)
+ if(csqc_flags & CSQC_FLAG_READPICTURE)
+ {
+ if(ColorTranslateMode & 1)
+ return strdecolorize(s);
+ else
+ return s;
+ }
+
+ // running on an OLD engine!
+ // must translate ^xRGB codes to regular color codes
+ float i, n;
+ string s2, ch, ch2;
+ vector theTempColor, hsv;
+ float component;
+
+ s2 = "";
+
+ n = strlen(s);
+ for(i = 0; i < n; ++i)
+ {
+ ch = substring(s, i, 1);
+ if(ch == "^")
+ {
+ ch2 = substring(s, i+1, 1);
+ if(ch2 == "^")
+ {
+ s2 = strcat(s2, ch, ch2);
+ }
+ else if(ch2 == "0" || stof(ch2)) // digit?
+ {
+ if not(ColorTranslateMode & 1)
+ s2 = strcat(s2, ch, ch2);
+ }
+ else if(ch2 == "x") // ^x found
+ {
+ theTempColor = '0 0 0';
+
+ component = HEXDIGIT_TO_DEC(substring(s, i+2, 1));
+ if (component >= 0) // ^xr found
+ {
+ theTempColor_x = component/15;
+
+ component = HEXDIGIT_TO_DEC(substring(s, i+3, 1));
+ if (component >= 0) // ^xrg found
+ {
+ theTempColor_y = component/15;
+
+ component = HEXDIGIT_TO_DEC(substring(s, i+4, 1));
+ if (component >= 0) // ^xrgb found
+ {
+ theTempColor_z = component/15;
+
+ if not(ColorTranslateMode & 1)
+ {
+ hsv = rgb_to_hsv(theTempColor);
+
+ if(hsv_y < 0.2)
+ {
+ if(hsv_z < 0.5)
+ s2 = strcat(s2, "^0");
+ else
+ s2 = strcat(s2, "^7");
+ }
+ else
+ {
+ if(hsv_x < 0.6)
+ s2 = strcat(s2, "^1");
+ else if(hsv_x < 1.33333333333333333333)
+ s2 = strcat(s2, "^3");
+ else if(hsv_x < 2.5)
+ s2 = strcat(s2, "^2");
+ else if(hsv_x < 3.33333333333333333333)
+ s2 = strcat(s2, "^5");
+ else if(hsv_x < 4.5)
+ s2 = strcat(s2, "^4");
+ else if(hsv_x < 5.5)
+ s2 = strcat(s2, "^6");
+ else
+ s2 = strcat(s2, "^1");
+ }
+ }
+
+ i += 3;
+ }
+ else
+ {
+ // blue missing
+ s2 = strcat(s2, substring(s, i, 4));
+ i += 2;
+ }
+ }
+ else
+ {
+ // green missing
+ s2 = strcat(s, substring(s2, i, 3));
+ i += 1;
+ }
+ }
+ else
+ {
+ // red missing
+ s2 = strcat(s, substring(s2, i, 2));
+ }
+ }
+ else
+ {
+ s2 = strcat(s2, ch, ch2);
+ }
+ ++i;
+ continue;
+ }
+ s2 = strcat(s2, ch);
+ }
+
+ return s2;
+}
Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/qcsrc/client/sbar.qc 2008-12-29 19:02:22 UTC (rev 5352)
@@ -615,7 +615,7 @@
sbar_field_icon2 = "gfx/sb_playercolor_pants";
sbar_field_icon2_rgb = colormapPaletteColor(mod(f, 16), 1);
}
- return getplayerkey(pl.sv_entnum, "name");
+ return GetPlayerName(pl.sv_entnum);
case SP_FRAGS:
f = pl.(scores[SP_KILLS]);
@@ -978,7 +978,6 @@
{
if(pl.team != COLOR_SPECTATOR)
continue;
- //drawcolorcodedstring(pos, getplayerkey(pl.sb_player, "name"), '8 8 0', 1, 0);
Sbar_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1));
pos += '0 1.25 0' * sbar_fontsize_y;
++specs;
@@ -1335,7 +1334,7 @@
pos_x += 8;
} else
pos_x += 56;
- drawcolorcodedstring(pos, getplayerkey(pl.sv_entnum, "name"), '8 8 0', 1, 0);
+ drawcolorcodedstring(pos, GetPlayerName(pl.sv_entnum), '8 8 0', 1, 0);
}
void Sbar_MiniscoreTeamItem(vector pos, float color, float frags, float is_self)
@@ -1476,7 +1475,7 @@
if(spectatee_status == -1)
s = "^1Observing";
else
- s = strcat("^1Spectating ^7", getplayerkey(spectatee_status - 1, "name"));
+ s = strcat("^1Spectating ^7", GetPlayerName(spectatee_status - 1));
o = Sbar_DrawNoteLine(o, s);
if(spectatee_status == -1)
Modified: trunk/data/qcsrc/client/teamplay.qc
===================================================================
--- trunk/data/qcsrc/client/teamplay.qc 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/qcsrc/client/teamplay.qc 2008-12-29 19:02:22 UTC (rev 5352)
@@ -32,6 +32,11 @@
return GetPlayerColorForce(i);
}
+string GetPlayerName(float i)
+{
+ return ColorTranslateRGB(getplayerkey(i, "name"));
+}
+
vector GetTeamRGB(float color)
{
switch(color)
Modified: trunk/data/qcsrc/common/util.qc
===================================================================
--- trunk/data/qcsrc/common/util.qc 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/qcsrc/common/util.qc 2008-12-29 19:02:22 UTC (rev 5352)
@@ -1158,102 +1158,139 @@
return 0;
}
-vector rgb_to_hsl(vector rgb)
+float rgb_mi_ma_to_hue(vector rgb, float mi, float ma)
{
- float mi, ma;
- vector hsl;
-
- mi = min3(rgb_x, rgb_y, rgb_z);
- ma = max3(rgb_x, rgb_y, rgb_z);
-
if(mi == ma)
- hsl_x = 0;
+ return 0;
else if(ma == rgb_x)
- hsl_x = (rgb_y - rgb_z) / (ma - mi);
+ {
+ if(rgb_y >= rgb_z)
+ return (rgb_y - rgb_z) / (ma - mi);
+ else
+ return (rgb_y - rgb_z) / (ma - mi) + 6;
+ }
else if(ma == rgb_y)
- hsl_x = (rgb_z - rgb_x) / (ma - mi) + 2;
+ return (rgb_z - rgb_x) / (ma - mi) + 2;
else // if(ma == rgb_z)
- hsl_x = (rgb_x - rgb_y) / (ma - mi) + 4;
- if(hsl_x < 0)
- hsl_x += 6;
-
- hsl_z = 0.5 * (mi + ma);
-
- if(mi == ma)
- hsl_y = 0;
- else if(hsl_z <= 0.5)
- hsl_y = (ma - mi) / (2*hsl_z);
- else // if(hsl_z > 0.5)
- hsl_y = (ma - mi) / (2 - 2*hsl_z);
-
- return hsl;
+ return (rgb_x - rgb_y) / (ma - mi) + 4;
}
-vector hsl_to_rgb(vector hsl)
+vector hue_mi_ma_to_rgb(float hue, float mi, float ma)
{
- float mi, ma, maminusmi, h;
vector rgb;
- if(hsl_z <= 0.5)
- maminusmi = hsl_y * 2 * hsl_z;
- else
- maminusmi = hsl_y * (2 - 2 * hsl_z);
-
- // hsl_z = 0.5 * mi + 0.5 * ma
- // maminusmi = - mi + ma
- mi = hsl_z - 0.5 * maminusmi;
- ma = hsl_z + 0.5 * maminusmi;
+ hue -= 6 * floor(hue / 6);
- h = hsl_x - 6 * floor(hsl_x / 6);
-
//else if(ma == rgb_x)
- // h = 60 * (rgb_y - rgb_z) / (ma - mi);
- if(h <= 1)
+ // hue = 60 * (rgb_y - rgb_z) / (ma - mi);
+ if(hue <= 1)
{
rgb_x = ma;
- rgb_y = h * (ma - mi) + mi;
+ rgb_y = hue * (ma - mi) + mi;
rgb_z = mi;
}
//else if(ma == rgb_y)
- // h = 60 * (rgb_z - rgb_x) / (ma - mi) + 120;
- else if(h <= 2)
+ // hue = 60 * (rgb_z - rgb_x) / (ma - mi) + 120;
+ else if(hue <= 2)
{
- rgb_x = (2 - h) * (ma - mi) + mi;
+ rgb_x = (2 - hue) * (ma - mi) + mi;
rgb_y = ma;
rgb_z = mi;
}
- else if(h <= 3)
+ else if(hue <= 3)
{
rgb_x = mi;
rgb_y = ma;
- rgb_z = (h - 2) * (ma - mi) + mi;
+ rgb_z = (hue - 2) * (ma - mi) + mi;
}
//else // if(ma == rgb_z)
- // h = 60 * (rgb_x - rgb_y) / (ma - mi) + 240;
- else if(h <= 4)
+ // hue = 60 * (rgb_x - rgb_y) / (ma - mi) + 240;
+ else if(hue <= 4)
{
rgb_x = mi;
- rgb_y = (4 - h) * (ma - mi) + mi;
+ rgb_y = (4 - hue) * (ma - mi) + mi;
rgb_z = ma;
}
- else if(h <= 5)
+ else if(hue <= 5)
{
- rgb_x = (h - 4) * (ma - mi) + mi;
+ rgb_x = (hue - 4) * (ma - mi) + mi;
rgb_y = mi;
rgb_z = ma;
}
//else if(ma == rgb_x)
- // h = 60 * (rgb_y - rgb_z) / (ma - mi);
- else // if(h <= 6)
+ // hue = 60 * (rgb_y - rgb_z) / (ma - mi);
+ else // if(hue <= 6)
{
rgb_x = ma;
rgb_y = mi;
- rgb_z = (6 - h) * (ma - mi) + mi;
+ rgb_z = (6 - hue) * (ma - mi) + mi;
}
return rgb;
}
+vector rgb_to_hsv(vector rgb)
+{
+ float mi, ma;
+ vector hsv;
+
+ mi = min3(rgb_x, rgb_y, rgb_z);
+ ma = max3(rgb_x, rgb_y, rgb_z);
+
+ hsv_x = rgb_mi_ma_to_hue(rgb, mi, ma);
+ hsv_z = ma;
+
+ if(ma == 0)
+ hsv_y = 0;
+ else
+ hsv_y = 1 - mi/ma;
+
+ return hsv;
+}
+
+vector hsv_to_rgb(vector hsv)
+{
+ return hue_mi_ma_to_rgb(hsv_x, hsv_z * (1 - hsv_y), hsv_z);
+}
+
+vector rgb_to_hsl(vector rgb)
+{
+ float mi, ma;
+ vector hsl;
+
+ mi = min3(rgb_x, rgb_y, rgb_z);
+ ma = max3(rgb_x, rgb_y, rgb_z);
+
+ hsl_x = rgb_mi_ma_to_hue(rgb, mi, ma);
+
+ hsl_z = 0.5 * (mi + ma);
+ if(mi == ma)
+ hsl_y = 0;
+ else if(hsl_z <= 0.5)
+ hsl_y = (ma - mi) / (2*hsl_z);
+ else // if(hsl_z > 0.5)
+ hsl_y = (ma - mi) / (2 - 2*hsl_z);
+
+ return hsl;
+}
+
+vector hsl_to_rgb(vector hsl)
+{
+ float mi, ma, maminusmi;
+
+ if(hsl_z <= 0.5)
+ maminusmi = hsl_y * 2 * hsl_z;
+ else
+ maminusmi = hsl_y * (2 - 2 * hsl_z);
+
+ // hsl_z = 0.5 * mi + 0.5 * ma
+ // maminusmi = - mi + ma
+ mi = hsl_z - 0.5 * maminusmi;
+ ma = hsl_z + 0.5 * maminusmi;
+
+ return hue_mi_ma_to_rgb(hsl_x, mi, ma);
+}
+
string rgb_to_hexcolor(vector rgb)
{
return
Modified: trunk/data/qcsrc/common/util.qh
===================================================================
--- trunk/data/qcsrc/common/util.qh 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/qcsrc/common/util.qh 2008-12-29 19:02:22 UTC (rev 5352)
@@ -129,4 +129,6 @@
vector rgb_to_hsl(vector rgb);
vector hsl_to_rgb(vector hsl);
+vector rgb_to_hsv(vector rgb);
+vector hsv_to_rgb(vector hsv);
string rgb_to_hexcolor(vector rgb);
Modified: trunk/data/qcsrc/menu/item/inputbox.c
===================================================================
--- trunk/data/qcsrc/menu/item/inputbox.c 2008-12-29 18:05:28 UTC (rev 5351)
+++ trunk/data/qcsrc/menu/item/inputbox.c 2008-12-29 19:02:22 UTC (rev 5352)
@@ -161,7 +161,7 @@
if(me.editColorCodes)
{
string ch, ch2;
- float i;
+ float i, n;
vector theColor;
float theAlpha; //float theVariableAlpha;
vector p;
@@ -172,7 +172,8 @@
theColor = '1 1 1';
theAlpha = 1; //theVariableAlpha = 1; // changes when ^ax found
- for(i = 0; i < strlen(me.text); ++i)
+ n = strlen(me.text);
+ for(i = 0; i < n; ++i)
{
ch = substring(me.text, i, 1);
if(ch == "^")
More information about the nexuiz-commits
mailing list