X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud.qc;fp=qcsrc%2Fclient%2Fhud.qc;h=77292f85f1307640fc70d3cb1524cd77166cebae;hp=607130ea20c09611360515fff7bf09fd89a86fb7;hb=3b4538464212cdef7e377e6e203e820178a76fe6;hpb=0202aaed3286672d956d58deecdeb315d2871bf5 diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 607130ea20..77292f85f1 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -244,6 +244,30 @@ float race_CheckName(string net_name) { return 0; } +float GetPlayerColorForce(float i) +{ + if(!teamplay) + return 0; + else + return stof(getplayerkeyvalue(i, "colors")) & 15; +} + +float GetPlayerColor(float i) +{ + if not(playerslots[i].gotscores) // unconnected + return FL_SPECTATOR; + else if(stof(getplayerkeyvalue(i, "frags")) == FRAGS_SPECTATOR) + return FL_SPECTATOR; + else + return GetPlayerColorForce(i); +} + +string GetPlayerName(float i) +{ + return ColorTranslateRGB(getplayerkeyvalue(i, "name")); +} + + /* ================== HUD panels @@ -1606,31 +1630,10 @@ string Weapon_KillMessage(float deathtype) return w_deathtypestring; } -#define KN_MAX_ENTRIES 10 -float kn_index; -float killnotify_times[KN_MAX_ENTRIES]; -float killnotify_deathtype[KN_MAX_ENTRIES]; -float killnotify_actiontype[KN_MAX_ENTRIES]; // 0 = "Y [used by] X", 1 = "X [did action to] Y" -string killnotify_attackers[KN_MAX_ENTRIES]; -string killnotify_victims[KN_MAX_ENTRIES]; -void HUD_KillNotify_Push(string attacker, string victim, float actiontype, float wpn) -{ - --kn_index; - if (kn_index == -1) - kn_index = KN_MAX_ENTRIES-1; - killnotify_times[kn_index] = time; - killnotify_deathtype[kn_index] = wpn; - killnotify_actiontype[kn_index] = actiontype; - if(killnotify_attackers[kn_index]) - strunzone(killnotify_attackers[kn_index]); - killnotify_attackers[kn_index] = strzone(attacker); - if(killnotify_victims[kn_index]) - strunzone(killnotify_victims[kn_index]); - killnotify_victims[kn_index] = strzone(victim); -} void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s1 = attacker, s2 = victim { + /* float w; float alsoprint, gentle; alsoprint = (autocvar_hud_panel_notify_print || !panel_enabled); // print message to console if: notify panel disabled, or cvar to do so enabled @@ -2050,7 +2053,7 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s if(alsoprint) print(sprintf(_("%s^7 has dropped the ball!\n"), s1)); } - } + }*/ } void HUD_KillCenterprint(string s1, string s2, float type, float msg) @@ -2082,8 +2085,6 @@ void HUD_KillCenterprint(string s1, string s2, float type, float msg) centerprint_hud(_("^1Don't go against team mates!")); else centerprint_hud(_("^1Don't shoot your team mates!")); - } else if (type == DEATH_QUIET) { - // do nothing } else { // generic message if(gentle) centerprint_hud(_("^1You need to be more careful!")); @@ -2140,7 +2141,7 @@ void HUD_KillCenterprint(string s1, string s2, float type, float msg) } } -void HUD_Notify (void) +void HUD_Notify(void) { if(!autocvar__hud_configure) { @@ -2176,12 +2177,9 @@ void HUD_Notify (void) float fadetime; fadetime = autocvar_hud_panel_notify_fadetime; - string s; - - vector pos_attacker, pos_victim; - vector weap_pos; + vector pos_attacker, pos_victim, pos_icon; float width_attacker; - string attacker, victim; + string attacker, victim, icon; float i, j, w, type, step, limit; if(autocvar_hud_panel_notify_flip) //order items from the top down @@ -2207,234 +2205,62 @@ void HUD_Notify (void) a = entries - 1 - i; attacker = textShortenToWidth(sprintf(_("Player %d"), a+1), 0.48 * mySize_x - height, fontsize, stringwidth_colors); victim = textShortenToWidth(sprintf(_("Player %d"), a+2), 0.48 * mySize_x - height, fontsize, stringwidth_colors); - s = strcat("weapon", get_weaponinfo(WEP_FIRST + mod(floor(a*2.4), WEP_LAST)).netname); + icon = strcat("weapon", get_weaponinfo(WEP_FIRST + mod(floor(a*2.4), WEP_LAST)).netname); a = bound(0, (when - a) / 4, 1); goto hud_config_notifyprint; } - - if (j == KN_MAX_ENTRIES) - j = 0; - - if(killnotify_times[j] + when > time) - a = 1; - else if(fadetime) - { - a = bound(0, (killnotify_times[j] + when + fadetime - time) / fadetime, 1); - if(!a) - { - break; - } - } else { - break; - } - - s = ""; - - type = killnotify_deathtype[j]; - w = DEATH_WEAPONOF(type); + if (j == KN_MAX_ENTRIES) + j = 0; - // TODO: maybe print in team colors? - // - // Y [used by] X - if(killnotify_actiontype[j] == 0) - { - if(type == DEATH_GENERIC) - { - s = "notify_death"; - } - else if(type == DEATH_NOAMMO) - { - s = "notify_outofammo"; - } - else if(type == DEATH_KILL) - { - s = "notify_selfkill"; - } - else if(type == DEATH_CAMP) - { - s = "notify_camping"; - } - else if(type == KILL_TEAM_RED) - { - s = "notify_teamkill_red"; - } - else if(type == KILL_TEAM_BLUE) - { - s = "notify_teamkill_blue"; - } - else if(type == DEATH_DROWN) - { - s = "notify_water"; - } - else if(type == DEATH_SLIME) - { - s = "notify_slime"; - } - else if(type == DEATH_LAVA) - { - s = "notify_lava"; - } - else if(type == DEATH_FALL) - { - s = "notify_fall"; - } - else if(type == DEATH_SHOOTING_STAR) - { - s = "notify_shootingstar"; - } - else if(type == DEATH_HURTTRIGGER || type == DEATH_CUSTOM) - { - s = "notify_death"; - } - else if(type == INFO_GOTFLAG) - { - if(killnotify_victims[j] == "^1RED^7 flag") - { - s = "notify_red_taken"; - } - else - { - s = "notify_blue_taken"; - } - } - else if(type == INFO_RETURNFLAG) - { - if(killnotify_victims[j] == "^1RED^7 flag") - { - s = "notify_red_returned"; - } - else - { - s = "notify_blue_returned"; - } - } - else if(type == INFO_LOSTFLAG) - { - if(killnotify_victims[j] == "^1RED^7 flag") - { - s = "notify_red_lost"; - } - else - { - s = "notify_blue_lost"; - } - } - else if(type == INFO_CAPTUREFLAG) + if(killnotify_times[j] + when > time) + a = 1; + else if(fadetime) { - if(killnotify_victims[j] == "^1RED^7 flag") - { - s = "notify_red_captured"; - } - else + a = bound(0, (killnotify_times[j] + when + fadetime - time) / fadetime, 1); + if(!a) { - s = "notify_blue_captured"; + break; } } - else if(type == KA_DROPBALL) - { - s = "notify_balldropped"; - } - else if(type == KA_PICKUPBALL) + else { - s = "notify_ballpickedup"; + break; } - attacker = textShortenToWidth(killnotify_attackers[j], 0.48 * mySize_x - height, fontsize, stringwidth_colors); - pos_attacker = pos + eX * (0.52 * mySize_x + height) + eY * ((0.5 * fontsize_y + i * height) + (0.5 * (height - fontheight))); - weap_pos = pos + eX * 0.5 * mySize_x - eX * height + eY * i * height; - - if(s != "") - { - drawpic_aspect_skin(weap_pos, s, '2 1 0' * height, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL); - drawcolorcodedstring(pos_attacker, attacker, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); - } + attacker = killnotify_attackers[j]; + victim = killnotify_victims[j]; + icon = killnotify_icon[j]; } - // X [did action to] Y - else + + //type = killnotify_deathtype[j]; + //w = DEATH_WEAPONOF(type); + + if(icon != "") { - if(type & HITTYPE_SECONDARY && w == WEP_LASER) - { - s = "notify_melee_laser"; - } - else if(type & HITTYPE_SECONDARY && w == WEP_SHOTGUN) - { - s = "notify_melee_shotgun"; - } - else if(type & HITTYPE_HEADSHOT && (w == WEP_RIFLE || w == WEP_MINSTANEX)) // all headshot weapons go here - { - s = "notify_headshot"; - } - else if(WEP_VALID(w)) - { - self = get_weaponinfo(w); - s = strcat("weapon", self.netname); - } - else if(type == KILL_TEAM_RED) - { - s = "notify_teamkill_red"; - } - else if(type == KILL_TEAM_BLUE) - { - s = "notify_teamkill_red"; - } - else if(type == DEATH_TELEFRAG) - { - s = "notify_telefrag"; - } - else if(type == DEATH_DROWN) - { - s = "notify_water"; - } - else if(type == DEATH_SLIME) - { - s = "notify_slime"; - } - else if(type == DEATH_LAVA) - { - s = "notify_lava"; - } - else if(type == DEATH_FALL) - { - s = "notify_fall"; - } - else if(type == DEATH_SHOOTING_STAR) - { - s = "notify_shootingstar"; - } - else if(type == DEATH_HURTTRIGGER || type == DEATH_CUSTOM) // DEATH_CUSTOM is also void, right? - { - s = "notify_void"; - } - else if(type == RACE_SERVER_RECORD) - { - s = "race_newrecordserver"; - } - else if(type == RACE_NEW_RANK) - { - s = "race_newrankyellow"; - } - else if(type == RACE_NEW_TIME) + if((attacker != "") && (victim == "")) { - s = "race_newtime"; + // Y [used by] X + attacker = textShortenToWidth(attacker, 0.73 * mySize_x - height, fontsize, stringwidth_colors); + pos_attacker = pos + eX * (0.27 * mySize_x + height) + eY * ((0.5 * fontsize_y + i * height) + (0.5 * (height - fontheight))); + pos_icon = pos + eX * 0.25 * mySize_x - eX * height + eY * i * height; + + drawpic_aspect_skin(pos_icon, icon, '2 1 0' * height, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL); + drawcolorcodedstring(pos_attacker, attacker, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); } - else if(type == RACE_FAIL) + else if((attacker != "") && (victim != "")) { - s = "race_newfail"; - } - - attacker = textShortenToWidth(killnotify_attackers[j], 0.48 * mySize_x - height, fontsize, stringwidth_colors); - victim = textShortenToWidth(killnotify_victims[j], 0.48 * mySize_x - height, fontsize, stringwidth_colors); + // X [did action to] Y + attacker = textShortenToWidth(attacker, 0.48 * mySize_x - height, fontsize, stringwidth_colors); + victim = textShortenToWidth(victim, 0.48 * mySize_x - height, fontsize, stringwidth_colors); :hud_config_notifyprint - width_attacker = stringwidth(attacker, TRUE, fontsize); - pos_attacker = pos + eX * (0.48 * mySize_x - height - width_attacker) + eY * ((0.5 * fontsize_y + i * height) + (0.5 * (height - fontheight))); - pos_victim = pos + eX * (0.52 * mySize_x + height) + eY * ((0.5 * fontsize_y + i * height) + (0.5 * (height - fontheight))); - weap_pos = pos + eX * 0.5 * mySize_x - eX * height + eY * i * height; + width_attacker = stringwidth(attacker, TRUE, fontsize); + pos_attacker = pos + eX * (0.48 * mySize_x - height - width_attacker) + eY * ((0.5 * fontsize_y + i * height) + (0.5 * (height - fontheight))); + pos_victim = pos + eX * (0.52 * mySize_x + height) + eY * ((0.5 * fontsize_y + i * height) + (0.5 * (height - fontheight))); + pos_icon = pos + eX * 0.5 * mySize_x - eX * height + eY * i * height; - if(s != "") - { - drawpic_aspect_skin(weap_pos, s, '2 1 0' * height, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL); + drawpic_aspect_skin(pos_icon, icon, '2 1 0' * height, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL); drawcolorcodedstring(pos_attacker, attacker, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); drawcolorcodedstring(pos_victim, victim, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); } @@ -2655,8 +2481,8 @@ void HUD_Radar(void) for(tm = world; (tm = find(tm, classname, "entcs_receiver")); ) { color2 = GetPlayerColor(tm.sv_entnum); - //if(color == COLOR_SPECTATOR || color == color2) - draw_teamradar_player(tm.origin, tm.angles, GetTeamRGB(color2)); + //if(color == FL_SPECTATOR || color == color2) + draw_teamradar_player(tm.origin, tm.angles, Team_ColorRGB(color2)); } draw_teamradar_player(view_origin, view_angles, '1 1 1'); @@ -2695,7 +2521,7 @@ void HUD_Score_Rankings(vector pos, vector mySize, entity me, float team_count) for(i=0; i= rows) { @@ -2969,11 +2795,11 @@ void HUD_Score(void) else if(tm.team == myteam) { if (max_fragcount == score) HUD_Panel_DrawHighlight(pos, eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring_aspect(pos, ftos(score), eX * 0.75 * mySize_x + eY * mySize_y, GetTeamRGB(tm.team) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos, ftos(score), eX * 0.75 * mySize_x + eY * mySize_y, Team_ColorRGB(tm.team) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL); } else { if (max_fragcount == score) HUD_Panel_DrawHighlight(pos + eX * 0.75 * mySize_x + eY * (1/3) * rows * mySize_y, score_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring_aspect(pos + eX * 0.75 * mySize_x + eY * (1/3) * rows * mySize_y, ftos(score), score_size, GetTeamRGB(tm.team) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos + eX * 0.75 * mySize_x + eY * (1/3) * rows * mySize_y, ftos(score), score_size, Team_ColorRGB(tm.team) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL); ++rows; } } @@ -3387,7 +3213,7 @@ void HUD_Mod_CTF(vector pos, vector mySize) case 2: red_icon = "flag_red_lost"; break; case 3: red_icon = "flag_red_carrying"; red_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ); break; default: - if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM2)) + if((stat_items & IT_CTF_SHIELDED) && (myteam == FL_TEAM_2)) red_icon = "flag_red_shielded"; else red_icon = string_null; @@ -3400,7 +3226,7 @@ void HUD_Mod_CTF(vector pos, vector mySize) default: if(redflag == 3) red_icon_prevstatus = "flag_red_carrying"; // make it more visible - else if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM2)) + else if((stat_items & IT_CTF_SHIELDED) && (myteam == FL_TEAM_2)) red_icon_prevstatus = "flag_red_shielded"; else red_icon_prevstatus = string_null; @@ -3415,7 +3241,7 @@ void HUD_Mod_CTF(vector pos, vector mySize) case 2: blue_icon = "flag_blue_lost"; break; case 3: blue_icon = "flag_blue_carrying"; blue_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ); break; default: - if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM1)) + if((stat_items & IT_CTF_SHIELDED) && (myteam == FL_TEAM_1)) blue_icon = "flag_blue_shielded"; else blue_icon = string_null; @@ -3428,7 +3254,7 @@ void HUD_Mod_CTF(vector pos, vector mySize) default: if(blueflag == 3) blue_icon_prevstatus = "flag_blue_carrying"; // make it more visible - else if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM1)) + else if((stat_items & IT_CTF_SHIELDED) && (myteam == FL_TEAM_1)) blue_icon_prevstatus = "flag_blue_shielded"; else blue_icon_prevstatus = string_null; @@ -3436,7 +3262,7 @@ void HUD_Mod_CTF(vector pos, vector mySize) } if(mySize_x > mySize_y) { - if (myteam == COLOR_TEAM1) { // always draw own flag on left + if (myteam == FL_TEAM_1) { // always draw own flag on left redflag_pos = pos; blueflag_pos = pos + eX * 0.5 * mySize_x; } else { @@ -3445,7 +3271,7 @@ void HUD_Mod_CTF(vector pos, vector mySize) } flag_size = eX * 0.5 * mySize_x + eY * mySize_y; } else { - if (myteam == COLOR_TEAM1) { // always draw own flag on left + if (myteam == FL_TEAM_1) { // always draw own flag on left redflag_pos = pos; blueflag_pos = pos + eY * 0.5 * mySize_y; } else { @@ -3559,16 +3385,16 @@ void HUD_Mod_KH(vector pos, vector mySize) { switch(keyteam) { - case COLOR_TEAM1: + case FL_TEAM_1: drawpic_aspect_skin(pa, "kh_redarrow", kh_asize, '1 1 1', aa, DRAWFLAG_NORMAL); // show 30% theAlpha key break; - case COLOR_TEAM2: + case FL_TEAM_2: drawpic_aspect_skin(pa, "kh_bluearrow", kh_asize, '1 1 1', aa, DRAWFLAG_NORMAL); // show 30% theAlpha key break; - case COLOR_TEAM3: + case FL_TEAM_3: drawpic_aspect_skin(pa, "kh_yellowarrow", kh_asize, '1 1 1', aa, DRAWFLAG_NORMAL); // show 30% theAlpha key break; - case COLOR_TEAM4: + case FL_TEAM_4: drawpic_aspect_skin(pa, "kh_pinkarrow", kh_asize, '1 1 1', aa, DRAWFLAG_NORMAL); // show 30% theAlpha key break; default: @@ -3915,7 +3741,7 @@ void HUD_Mod_Dom(vector myPos, vector mySize) entity tm; float teams_count = 0; for(tm = teams.sort_next; tm; tm = tm.sort_next) - if(tm.team != COLOR_SPECTATOR) + if(tm.team != FL_SPECTATOR) ++teams_count; float layout = autocvar_hud_panel_modicons_dom_layout; @@ -4374,7 +4200,7 @@ void HUD_InfoMessages(void) { for(; tm.sort_next; tm = tm.sort_next) { - if(!tm.team_size || tm.team == COLOR_SPECTATOR) + if(!tm.team_size || tm.team == FL_SPECTATOR) continue; if(!ts_min) ts_min = tm.team_size; else ts_min = min(ts_min, tm.team_size); @@ -4386,7 +4212,7 @@ void HUD_InfoMessages(void) s = strcat(blinkcolor, _("Teamnumbers are unbalanced!")); tm = GetTeam(myteam, false); if (tm) - if (tm.team != COLOR_SPECTATOR) + if (tm.team != FL_SPECTATOR) if (tm.team_size == ts_max) s = strcat(s, sprintf(_(" Press ^3%s%s to adjust"), getcommandkey("team menu", "menu_showteamselect"), blinkcolor)); drawInfoMessage(s)