#ifdef GAMEQC string mod_translate_clean(string s) { if(ColorTranslateMode & 1) return strdecolorize(s); if(s == "" || !s) return s; s = strreplace("^x664", "^7", s); s = strreplace("^x665", "^3", s); s = strreplace("^x666", "^1", s); s = strreplace("^x667", "^2", s); s = strreplace("^x668", "^4", s); s = strreplace("^x669", "^0", s); return s; } string mod_playername(string thename, int teamid, bool team_colorize) { TC(int, teamid); bool do_colorize = (teamplay && team_colorize && Team_IsValidTeam(teamid)); #ifdef SVQC if(do_colorize && !intermission_running) #else if(do_colorize) #endif { string t = Team_ColorCode(teamid); return strcat(t, strdecolorize(thename)); } else return mod_translate_clean(thename); } #endif #ifdef CSQC AUTOCVAR(cl_stripfancystuff, bool, false, "Turn off the fancy blinking colorful names"); vector mod_get_num_color(int num) { vector color; float thenum = 0; switch(num) { case 1: color = vec3(sin(2 * M_PI * time), 1, sin(2 * M_PI * time)); thenum = 200; break; default: case 2: color = '1 0 0'; thenum = 1; break; case 3: color = '0 0 1'; thenum = 1; break; case 4: color = vec3(1, 1, sin(2 * M_PI * time)); thenum = 200; break; case 5: color = vec3(sin(2 * M_PI * time), sin(2 * M_PI * time), sin(2 * M_PI * time)); thenum = 200; break; case 6: color = '1 1 1'; thenum = 1; break; case 7: color = vec3(0.69, 0.12, sin(2 * M_PI * time)); thenum = 200; break; } float blinkingamt = (1 - thenum/200/0.25); if(blinkingamt > 0) { color.x = color.x - color.x * blinkingamt * sin(2*M_PI*time); color.y = color.y - color.y * blinkingamt * sin(2*M_PI*time); color.z = color.z - color.z * blinkingamt * sin(2*M_PI*time); } return color; } string mod_translate(string s) { if(autocvar_cl_stripfancystuff) return mod_translate_clean(s); if(ColorTranslateMode & 1) return strdecolorize(s); if(s == "" || !s) return s; string theword = ""; int fancy = 0; FOREACH_CHAR(s, true, { string realch = chr2str(it); if(realch == "^") { string nc1 = chr2str(str2chr(iter_s, iter_i)); string nc2 = chr2str(str2chr(iter_s, iter_i + 1)); string nc3 = chr2str(str2chr(iter_s, iter_i + 2)); string nc4 = chr2str(str2chr(iter_s, iter_i + 3)); int fc4 = stoi(nc4); if(nc1 == "x" && nc2 == "6" && nc3 == "6" && (fc4 >= 3 && fc4 <= 9)) // so far so good { switch(fc4) { case 3: fancy = 7; break; case 4: fancy = 6; break; case 5: fancy = 4; break; default: case 6: fancy = 2; break; case 7: fancy = 1; break; case 8: fancy = 3; break; case 9: fancy = 5; break; } int pos = iter_i + 4; // skip the color code STRING_ITERATOR_LOAD(iter, pos); continue; } else { fancy = 0; // not a valid hax, but also a color, add normally and continue! theword = strcat(theword, realch); continue; } } else if(fancy) { vector thecolor = mod_get_num_color(fancy); thecolor.x = bound(0, thecolor.x, 1); thecolor.y = bound(0, thecolor.y, 1); thecolor.z = bound(0, thecolor.z, 1); theword = strcat(theword, rgb_to_hexcolor(thecolor), strdecolorize(realch)); } else theword = strcat(theword, realch); }); return theword; } void mod_parse_print(string strMessage) { if (autocvar_developer_csqcentities) LOG_INFOF("CSQC_Parse_Print(\"%s\")", strMessage); print(mod_translate_clean(strMessage)); } string mod_ccr(string input) { // See the autocvar declarations in util.qh for default values // foreground/normal colors input = strreplace("^F1", strcat("^", autocvar_hud_colorset_foreground_1), input); input = strreplace("^F2", strcat("^", autocvar_hud_colorset_foreground_2), input); input = strreplace("^F3", strcat("^", autocvar_hud_colorset_foreground_3), input); input = strreplace("^F4", strcat("^", autocvar_hud_colorset_foreground_4), input); // "kill" colors input = strreplace("^K1", strcat("^", autocvar_hud_colorset_kill_1), input); input = strreplace("^K2", strcat("^", autocvar_hud_colorset_kill_2), input); input = strreplace("^K3", strcat("^", autocvar_hud_colorset_kill_3), input); // background colors input = strreplace("^BG", strcat("^", autocvar_hud_colorset_background), input); input = strreplace("^N", "^7", input); // "none"-- reset to white... input = mod_translate_clean(input); return input; } #endif STATIC_INIT_LATE(mod_functions_override) { #ifdef CSQC ColorTranslateRGB = mod_translate; CSQC_Parse_Print = mod_parse_print; CCR = mod_ccr; //Scoreboard_GetName = mod_scoreboard_getname; #elif defined(SVQC) playername = mod_playername; #endif } #ifdef SVQC REGISTER_MUTATOR(namecolors, true); MUTATOR_HOOKFUNCTION(namecolors, PreFormatMessage) { string themsg = mod_translate_clean(M_ARGV(1, string)); M_ARGV(1, string) = themsg; } #endif