]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - data/qcsrc/client/sbar.qc
Restore color smoothing again
[voretournament/voretournament.git] / data / qcsrc / client / sbar.qc
index f00778d7159452f5fe3ed87ff46ac550d46582ec..06fdcc215af57ad6d1d7d99c80c848316fe5af96 100644 (file)
@@ -513,7 +513,7 @@ void Cmd_Sbar_SetFields(float argc)
                                if(str == strtolower(scores_label[j]))\r
                                        goto found; // sorry, but otherwise fteqcc -O3 miscompiles this and warns about "unreachable code"\r
 :notfound\r
-                       if(str == "frags")\r
+                       if(str == "frags" && !(gametype == GAME_RPG))\r
                        {\r
                                j = SP_FRAGS;\r
                        }\r
@@ -949,16 +949,11 @@ void Sbar_PrintScoreboardItem(vector pos, entity pl, float is_self, float pl_num
 float fieldcounter;\r
 void Sbar_PrintStomachboardItem(vector pos, entity pl)\r
 {\r
-       vector tmp, rgb;\r
-       rgb = GetTeamRGB(pl.team);\r
+       // list the players in the stomach\r
+\r
        string str;\r
        float f, field;\r
 \r
-       // Layout:\r
-       tmp_x = sbwidth;\r
-       tmp_y = sbar_fontsize_y * 1.25;\r
-       tmp_z = 0;\r
-\r
        for(fieldcounter = 1; fieldcounter <= 2; ++fieldcounter)\r
        {\r
                field = -fieldcounter;\r
@@ -967,6 +962,14 @@ void Sbar_PrintStomachboardItem(vector pos, entity pl)
 \r
                str = Sbar_GetStomachField(pl, field);\r
 \r
+               if(field == ST_NAME) // do this for one field, or we get multiple highlights in the same spot\r
+               {\r
+                       if(getstati(STAT_STOMACH_EATEN))\r
+                               drawfill(pos - '0 0 0', '193 11 0', '1 0 0' * cvar("sbar_stomachboard_highlight_brightness"), cvar("sbar_stomachboard_highlight_alpha"), DRAWFLAG_NORMAL);\r
+                       else\r
+                               drawfill(pos - '0 0 0', '193 11 0', '0 1 0' * cvar("sbar_stomachboard_highlight_brightness"), cvar("sbar_stomachboard_highlight_alpha"), DRAWFLAG_NORMAL);\r
+               }\r
+\r
                if(field == ST_NAME) {\r
                        f = stof(getplayerkey(pl.sv_entnum, "colors"));\r
                        drawpic(pos, "gfx/sb_playercolor_base", '22 11 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
@@ -977,14 +980,46 @@ void Sbar_PrintStomachboardItem(vector pos, entity pl)
                        drawcolorcodedstring(pos, str, '11 11 0', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
                }\r
 \r
-               if(field == ST_HEALTH) {\r
+               if(field == ST_HEALTH)\r
+               if(g_vore_showpreyhealth) {\r
                        pos_x += 138;\r
-                       if(g_vore_showpreyhealth)\r
-                               drawpic(pos, "gfx/hud/sb_health", '11 11 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+                               if(pl.sv_entnum == player_localentnum - 1 || (spectatee_status && pl.sv_entnum == spectatee_status - 1))\r
+                                       drawcolorcodedstring(pos, "self", '11 11 0', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+                               else\r
+                               {\r
+                                       drawpic(pos, "gfx/hud/sb_health", '11 11 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
 \r
-                       pos_x += 9;\r
-                       if(g_vore_showpreyhealth)\r
-                               drawcolorcodedstring(pos, str, '11 11 0', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+                                       pos_x += 9;\r
+                                               drawcolorcodedstring(pos, str, '11 11 0', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+                               }\r
+               }\r
+       }\r
+}\r
+\r
+float fieldcounter2;\r
+void Sbar_PrintStomachboardItem2(vector pos, entity pl)\r
+{\r
+       // show the name of our eater\r
+\r
+       string str;\r
+       float f, field;\r
+\r
+       for(fieldcounter2 = 1; fieldcounter2 <= 2; ++fieldcounter2)\r
+       {\r
+               field = -fieldcounter2;\r
+               if(field == SP_SEPARATOR)\r
+                       break;\r
+\r
+               str = Sbar_GetStomachField(pl, field);\r
+\r
+               if(field == ST_NAME) {\r
+                       f = stof(getplayerkey(pl.sv_entnum, "colors"));\r
+                       drawpic(pos, "gfx/sb_playercolor_base", '22 11 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+                       drawpic(pos, "gfx/sb_playercolor_shirt", '22 11 0', colormapPaletteColor(floor(f / 16), 0), sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+                       drawpic(pos, "gfx/sb_playercolor_pants", '22 11 0', colormapPaletteColor(mod(f, 16), 1), sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+\r
+                       pos_x += 24;\r
+                       drawcolorcodedstring(pos, str, '11 11 0', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
                }\r
        }\r
 }\r
@@ -1653,6 +1688,9 @@ void Sbar_Score()
        top_y = 0;\r
        top_z = 0;\r
 \r
+       if(gametype == GAME_RPG)\r
+               return;\r
+\r
        score_pos = top + '-240 8 0';\r
        secondary_score_pos = score_pos + '210 -6 0';\r
 \r
@@ -1888,6 +1926,9 @@ void Sbar_Timer()
        scale = cvar_or("sbar_timer_scale", 1);\r
        timelimit = getstatf(STAT_TIMELIMIT);\r
 \r
+       if(gametype == GAME_RPG && !timelimit) // don't draw the timer in rpg if there's no time limit\r
+               return;\r
+\r
        Sbar_DrawRaceStatus((topright_x - 100) * '1 0 0' + '0 30 0' * scale);\r
        \r
        timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);\r
@@ -2584,6 +2625,30 @@ float vote_prev; // previous state of vote_active to check for a change
 float vote_alpha;\r
 float vote_change; // "time" when vote_active changed\r
 \r
+vector colortrans_current;\r
+vector Stomachstatus_Colortrans(vector target_color)\r
+{\r
+       local float step;\r
+       step = 0.0125;\r
+\r
+       if(colortrans_current_x > target_color_x + step)\r
+               colortrans_current_x -= step;\r
+       else if(colortrans_current_x < target_color_x - step)\r
+               colortrans_current_x += step;\r
+\r
+       if(colortrans_current_y > target_color_y + step)\r
+               colortrans_current_y -= step;\r
+       else if(colortrans_current_y < target_color_y - step)\r
+               colortrans_current_y += step;\r
+\r
+       if(colortrans_current_z > target_color_z + step)\r
+               colortrans_current_z -= step;\r
+       else if(colortrans_current_z < target_color_z - step)\r
+               colortrans_current_z += step;\r
+\r
+       return colortrans_current;\r
+}\r
+\r
 void Sbar_Draw (void)\r
 {\r
        // vectors for top right, bottom right, bottom and bottom left corners\r
@@ -2849,6 +2914,8 @@ void Sbar_Draw (void)
                Sbar_Timer();\r
 \r
                Sbar_Reset();\r
+\r
+               Stomachstatus_Colortrans('0 0 0');\r
        }\r
        else\r
        {\r
@@ -2866,34 +2933,75 @@ void Sbar_Draw (void)
                fade = 3.2 - 2 * (time - weapontime);\r
                fade = bound(0.7, fade, 1);\r
 \r
-               if not(getstati(STAT_STOMACH_EATEN)) // useless if we're inside someone\r
+               if (cvar("viewsize") <= 100 && vid_conwidth <= 1600) {\r
+                       if (teamplay)\r
+                               drawpic(bottomleft- '0 256 0', "gfx/hud/bg_stomach", '256 256 0', GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // hud color = myteam color\r
+                       else {\r
+                               // allow for custom HUD colors in non-teamgames\r
+                               color_x = cvar("sbar_color_bg_r");\r
+                               color_y = cvar("sbar_color_bg_g");\r
+                               color_z = cvar("sbar_color_bg_b");\r
+\r
+                               drawpic(bottomleft - '0 256 0', "gfx/hud/bg_stomach", '256 256 0', color, sbar_alpha_bg, DRAWFLAG_NORMAL);\r
+                       }\r
+\r
+                       if(getstati(STAT_STOMACH_EATEN))\r
+                       {\r
+                               drawpic(bottomleft - '0 256 0', "gfx/hud/bg_stomach_status", '256 256 0', Stomachstatus_Colortrans('1 0 0' * cvar("sbar_stomachboard_status_brightness")), cvar("sbar_stomachboard_status_alpha"), DRAWFLAG_NORMAL);\r
+                               drawstring(bottomleft - '-80 172 0', "predator:", '10 10 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+                       }\r
+                       else\r
+                       {\r
+                               drawpic(bottomleft - '0 256 0', "gfx/hud/bg_stomach_status", '256 256 0', Stomachstatus_Colortrans('0 1 0' * cvar("sbar_stomachboard_status_brightness")), cvar("sbar_stomachboard_status_alpha"), DRAWFLAG_NORMAL);\r
+                               drawstring(bottomleft - '-80 172 0', "self:", '10 10 0', ' 1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+                       }\r
+               }\r
+               float stomach_load;\r
+               stomach_load = getstati(STAT_STOMACH_LOAD); // shows the predator's stomach load when we are eaten, and ours otherwise\r
+\r
+               Sbar_DrawXNum(bottomleft - '-18 170 0', bound(0, stomach_load, 9), 1, 0, 22, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+               drawstring(bottomleft - '-40 170 0', "/", '22 22 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+               Sbar_DrawXNum(bottomleft - '-50 170 0', bound(0, g_balance_vore_swallow_limit, 9), 1, 0, 22, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+               if(getstati(STAT_STOMACH_DIGESTING))\r
+                       drawstring(bottomleft - '-76 142 0', "stomach digesting", '12 12 0', '1 0.5 0.5', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+               else if(stomach_load == g_balance_vore_swallow_limit)\r
+                       drawstring(bottomleft - '-76 142 0', "stomach full", '12 12 0', '0.5 1 0.5', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+               else if(!stomach_load)\r
+                       drawstring(bottomleft - '-76 142 0', "stomach empty", '12 12 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+               else\r
+                       drawstring(bottomleft - '-76 142 0', "stomach has prey", '12 12 0', '0.75 1 0.75', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+\r
+               // draw the stomach board\r
+               entity pl;\r
+               float f;\r
+\r
+               pos = bottomleft;\r
+               for(pl = players.sort_next; pl; pl = pl.sort_next)\r
                {\r
-                       if (cvar("viewsize") <= 100 && vid_conwidth <= 1600) {\r
-                               if (teamplay)\r
-                                       drawpic(bottomleft- '0 256 0', "gfx/hud/bg_stomach", '256 256 0', GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // hud color = myteam color\r
-                               else {\r
-                                       // allow for custom HUD colors in non-teamgames\r
-                                       color_x = cvar("sbar_color_bg_r");\r
-                                       color_y = cvar("sbar_color_bg_g");\r
-                                       color_z = cvar("sbar_color_bg_b");\r
-\r
-                                       drawpic(bottomleft - '0 256 0', "gfx/hud/bg_stomach", '256 256 0', color, sbar_alpha_bg, DRAWFLAG_NORMAL);\r
-                               }\r
+                       if(pl.team == COLOR_SPECTATOR)\r
+                               continue;\r
+\r
+                       if(getstati(STAT_STOMACH_EATEN))\r
+                       {\r
+                               f = pl.pleater == getstati(STAT_STOMACH_EATEN);\r
                        }\r
-                       float stomach_load;\r
-                       stomach_load = getstati(STAT_STOMACH_LOAD);\r
-\r
-                       Sbar_DrawXNum(bottomleft - '-18 170 0', bound(0, stomach_load, 9), 1, 0, 22, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);\r
-                       drawstring(bottomleft - '-40 170 0', "/", '22 22 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
-                       Sbar_DrawXNum(bottomleft - '-50 170 0', bound(0, g_balance_vore_swallow_limit, 9), 1, 0, 22, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);\r
-                       if(getstati(STAT_STOMACH_DIGESTING))\r
-                               drawstring(bottomleft - '-76 150 0', "stomach digesting", '14 14 0', '1 0.5 0.5', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
-                       else if(stomach_load == g_balance_vore_swallow_limit)\r
-                               drawstring(bottomleft - '-76 150 0', "stomach full", '14 14 0', '0.5 1 0.5', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
-                       else if(!stomach_load)\r
-                               drawstring(bottomleft - '-76 150 0', "stomach empty", '14 14 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
                        else\r
-                               drawstring(bottomleft - '-76 150 0', "stomach has prey", '14 14 0', '0.75 1 0.75', sbar_alpha_fg, DRAWFLAG_NORMAL);\r
+                       {\r
+                               if(spectatee_status)\r
+                                       f = pl.pleater == spectatee_status;\r
+                               else\r
+                                       f = pl.pleater == player_localentnum;\r
+                       }\r
+\r
+                       if(f)\r
+                       {\r
+                               Sbar_PrintStomachboardItem(pos - '-16 124 0', pl);\r
+                               pos_y += 1.25 * sbar_fontsize_y;\r
+                       }\r
+\r
+                       if(getstati(STAT_STOMACH_EATEN))\r
+                       if(pl.sv_entnum == getstati(STAT_STOMACH_EATEN) - 1)\r
+                               Sbar_PrintStomachboardItem2(bottomleft - '-76 156 0', pl);\r
                }\r
 \r
                if (cvar("viewsize") <= 100 && vid_conwidth <= 1600) {\r
@@ -2932,30 +3040,6 @@ void Sbar_Draw (void)
                        Sbar_DrawXNum(pos - '144 16 0', a, 3, 0, 16, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);\r
                }\r
 \r
-               // draw the stomach board\r
-               if not(getstati(STAT_STOMACH_EATEN)) // useless if we're inside someone\r
-               {\r
-                       entity pl;\r
-                       float f;\r
-\r
-                       pos = bottomleft;\r
-                       for(pl = players.sort_next; pl; pl = pl.sort_next)\r
-                       {\r
-                               if(pl.team == COLOR_SPECTATOR)\r
-                                       continue;\r
-\r
-                               if(spectatee_status)\r
-                                       f = pl.pleater == spectatee_status;\r
-                               else\r
-                                       f = pl.pleater == player_localentnum;\r
-                               if(f)\r
-                               {\r
-                                       Sbar_PrintStomachboardItem(pos - '-16 124 0', pl);\r
-                                       pos_y += 1.25 * sbar_fontsize_y;\r
-                               }\r
-                       }\r
-               }\r
-\r
                // draw scores and timer\r
                Sbar_Score();\r
                Sbar_Timer();\r