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
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
\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
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
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
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
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
Sbar_Timer();\r
\r
Sbar_Reset();\r
+\r
+ Stomachstatus_Colortrans('0 0 0');\r
}\r
else\r
{\r
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
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