fputs(fh, strcat("seta hud_bg_alpha \"", cvar_string("hud_bg_alpha"), "\"", "\n"));
fputs(fh, strcat("seta hud_bg_border \"", cvar_string("hud_bg_border"), "\"", "\n"));
fputs(fh, strcat("seta hud_bg_padding \"", cvar_string("hud_bg_padding"), "\"", "\n"));
- fputs(fh, strcat("seta hud_fg_alpha) \"", cvar_string("hud_fg_alpha"), "\"", "\n"));
+ fputs(fh, strcat("seta hud_fg_alpha \"", cvar_string("hud_fg_alpha"), "\"", "\n"));
fputs(fh, "\n");
fputs(fh, strcat("seta hud_dock \"", cvar_string("hud_dock"), "\"", "\n"));
break;
case 4:
fputs(fh, strcat("seta hud_", HUD_Panel_GetName(i), "_flip ", ftos(cvar(strcat("hud_", HUD_Panel_GetName(i), "_flip"))), "\n"));
+ fputs(fh, strcat("seta hud_", HUD_Panel_GetName(i), "_info_top ", ftos(cvar(strcat("hud_", HUD_Panel_GetName(i), "_info_top"))), "\n"));
break;
case 6:
fputs(fh, strcat("seta hud_", HUD_Panel_GetName(i), "_foreground_alpha ", ftos(cvar(strcat("hud_", HUD_Panel_GetName(i), "_foreground_alpha"))), "\n"));
}
break;
case 4:
- mySize_x = 1.2; // 12/10 * height, as panel cant support more than 10 entries...
- mySize_y = 1/12; // 1/12 * width
+ mySize_x = 1.1; // 4/5 * height, trial and error...
+ mySize_y = 1/3; // 1/3 * width, trial and error...
break;
case 5:
mySize_y = 1/4.1; // 1/4.1 * width, trial and error...
mySize_y = 0.5898; // 0.5898 * width, reason: bg has weird dimensions...
break;
case 13:
- mySize_y = 0.25; // 0.25 * width, trial and error...
+ mySize_y = 0.2; // 0.25 * width, trial and error...
break;
}
- if(!mySize_x && mySize_y)
- mySize_x = 1/mySize_y;
return mySize;
}
pos = eX * pos_x * vid_conwidth + eY * pos_y * vid_conheight;
- if (pos_x < 0)
- pos_x = vid_conwidth + pos_x;
- if (pos_y < 0)
- pos_y = vid_conheight + pos_y;
-
if(disable_menu_alphacheck == 2 && id == highlightedPanel)
{
vector mySize, menu_enable_panelpos;
if(cvar("hud_configure_grid"))
{
- pos_x = floor(pos_x/cvar("hud_configure_grid_x") + 0.5) * cvar("hud_configure_grid_x");
- pos_y = floor(pos_y/cvar("hud_configure_grid_y") + 0.5) * cvar("hud_configure_grid_y");
+ pos_x = floor((pos_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * cvar("hud_configure_grid_x") * vid_conwidth;
+ pos_y = floor((pos_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * cvar("hud_configure_grid_y") * vid_conheight;
}
- if (pos_x + 0.5 * mySize_x > 0.5 * vid_conwidth)
- pos_x = pos_x - vid_conwidth;
- if (pos_y + 0.5 * mySize_y > 0.5 * vid_conheight)
- pos_y = pos_y - vid_conheight;
-
string s;
s = strcat(ftos(pos_x/vid_conwidth), " ", ftos(pos_y/vid_conheight));
cvar_set(strcat("hud_", HUD_Panel_GetName(id), "_pos"), s);
}
-float HUD_Panel_CheckValidity_of_ResizeSuggestion(float id, vector mySize)
-{
- vector oldSize;
- oldSize = mySize;
-
- // copy pasta from SetPosSize:
- // minimum panel size cap
- mySize_x = max(0.025 * vid_conwidth, mySize_x);
- mySize_y = max(0.025 * vid_conheight, mySize_y);
-
- if(id == 12) // some panels have their own restrictions, like the chat panel (which actually only moves the engine chat print around). Looks bad if it's too small.
- {
- mySize_x = max(17 * cvar("con_chatsize"), mySize_x);
- mySize_y = max(2 * cvar("con_chatsize") + 2 * HUD_Panel_GetPadding(id), mySize_y);
- }
-
- // cap against panel's own limits
- vector minSize;
- minSize = HUD_Panel_GetMinSize(id); // mySize_x at least minSize_x * mySize_y, and vice versa
-
- mySize_x = max(minSize_x * mySize_y, mySize_x);
- mySize_y = max(minSize_y * mySize_x, mySize_y);
-
- if(mySize == oldSize)
- return 1;
- else
- return 0;
-}
-
// check if resize will result in panel being moved into another panel. If so, return snapped vector, otherwise return the given vector
-vector HUD_Panel_CheckResize(float id, vector myPos, vector mySize, vector resizeorigin)
-{
+vector HUD_Panel_CheckResize(float id, vector mySize, vector resizeorigin, float ratio) {
float i;
+ float targBorder;
vector targPos;
vector targSize;
- vector myCenter;
- vector targCenter;
- myCenter = '0 0 0'; // shut up fteqcc, there IS a reference
- targCenter = '0 0 0'; // shut up fteqcc, there IS a reference
+ vector targEndPos;
+ vector dist;
for (i = 0; i < HUD_PANEL_NUM; ++i) {
if(i == id || !HUD_Panel_CheckActive(i))
continue;
- targPos = HUD_Panel_GetPos(i) - '1 1 0' * HUD_Panel_GetBorder(id);
- targSize = HUD_Panel_GetSize(i) + '2 2 0' * HUD_Panel_GetBorder(id);
+ targBorder = HUD_Panel_GetBorder(i);
+ targPos = HUD_Panel_GetPos(i) - '1 1 0' * targBorder;
+ targSize = HUD_Panel_GetSize(i) + '2 2 0' * targBorder;
+ targEndPos = targPos + targSize;
- if(myPos_y + mySize_y < targPos_y)
- continue;
- if(myPos_y > targPos_y + targSize_y)
- continue;
-
- if(myPos_x + mySize_x < targPos_x)
- continue;
- if(myPos_x > targPos_x + targSize_x)
+ // resizeorigin is WITHIN target panel, just abort any collision testing against that particular panel to produce expected behaviour!
+ if(resizeorigin_x > targPos_x && resizeorigin_x < targPos_x + targSize_x && resizeorigin_y > targPos_y && resizeorigin_y < targPos_y + targSize_y)
continue;
- // OK, there IS a collision.
- //
-
- // Now check some special cases
- // If the resizeorigin is too close to the target panel on either axis, we do not want to perform any collision avoidance on that axis
- float Check_X, Check_Y;
- Check_X = Check_Y = 1;
- // check upper/left edges of targ panel
- if(fabs(targPos_x - resizeorigin_x) < 0.025 * vid_conwidth)
- Check_X = 0;
- if(fabs(targPos_y - resizeorigin_y) < 0.025 * vid_conheight)
- Check_Y = 0;
- // check lower/right edges of targ panel
- if(fabs(resizeorigin_x - (targPos_x + targSize_x)) < 0.025 * vid_conwidth)
- Check_X = 0;
- if(fabs(resizeorigin_y - (targPos_y + targSize_y)) < 0.025 * vid_conheight)
- Check_Y = 0;
-
- myCenter_x = myPos_x + 0.5 * mySize_x;
- myCenter_y = myPos_y + 0.5 * mySize_y;
-
- targCenter_x = targPos_x + 0.5 * targSize_x;
- targCenter_y = targPos_y + 0.5 * targSize_y;
-
- if(myCenter_x < targCenter_x && myCenter_y < targCenter_y) // top left (of target panel)
+ if (resizeCorner == 1)
{
- //if(!HUD_Panel_CheckValidity_of_ResizeSuggestion(id, eX * (targPos_x - myPos_x) + eY * (targPos_y - resizeorigin_y)))
- // continue;
+ // check if this panel is on our way
+ if (resizeorigin_x <= targPos_x)
+ continue;
+ if (resizeorigin_y <= targPos_y)
+ continue;
+ if (targEndPos_x <= resizeorigin_x - mySize_x)
+ continue;
+ if (targEndPos_y <= resizeorigin_y - mySize_y)
+ continue;
- if(myPos_x + mySize_x - targPos_x < myPos_y + mySize_y - targPos_y && Check_X) // push it to the side
- mySize_x = targPos_x - myPos_x;
- else if(Check_Y) // push it upwards
- mySize_y = targPos_y - resizeorigin_y;
+ // there is a collision:
+ // detect which side of the panel we are facing is actually limiting the resizing
+ // (which side the resize direction finds for first) and reduce the size up to there
+ //
+ // dist is the distance between resizeorigin and the "analogous" point of the panel
+ // in this case resizeorigin (bottom-right point) and the bottom-right point of the panel
+ dist_x = resizeorigin_x - targEndPos_x;
+ dist_y = resizeorigin_y - targEndPos_y;
+ if (dist_y < 0 || dist_x / dist_y > ratio)
+ mySize_x = min(mySize_x, dist_x);
+ else
+ mySize_y = min(mySize_y, dist_y);
}
- else if(myCenter_x > targCenter_x && myCenter_y < targCenter_y) // top right
+ else if (resizeCorner == 2)
{
- //if(!HUD_Panel_CheckValidity_of_ResizeSuggestion(id, eX * (resizeorigin_x - (targPos_x + targSize_x)) + eY * (targPos_y - resizeorigin_y)))
- // continue;
+ if (resizeorigin_x >= targEndPos_x)
+ continue;
+ if (resizeorigin_y <= targPos_y)
+ continue;
+ if (targPos_x >= resizeorigin_x + mySize_x)
+ continue;
+ if (targEndPos_y <= resizeorigin_y - mySize_y)
+ continue;
- if(targPos_x + targSize_x - myPos_x < myPos_y + mySize_y - targPos_y && Check_X) // push it to the side
- mySize_x = resizeorigin_x - (targPos_x + targSize_x);
- else if(Check_Y) // push it upwards
- mySize_y = targPos_y - resizeorigin_y;
+ dist_x = targPos_x - resizeorigin_x;
+ dist_y = resizeorigin_y - targEndPos_y;
+ if (dist_y < 0 || dist_x / dist_y > ratio)
+ mySize_x = min(mySize_x, dist_x);
+ else
+ mySize_y = min(mySize_y, dist_y);
}
- else if(myCenter_x < targCenter_x && myCenter_y > targCenter_y) // bottom left
+ else if (resizeCorner == 3)
{
- //if(!HUD_Panel_CheckValidity_of_ResizeSuggestion(id, eX * (targPos_x - resizeorigin_x) + eY * (resizeorigin_y - (targPos_y + targSize_y))))
- // continue;
+ if (resizeorigin_x <= targPos_x)
+ continue;
+ if (resizeorigin_y >= targEndPos_y)
+ continue;
+ if (targEndPos_x <= resizeorigin_x - mySize_x)
+ continue;
+ if (targPos_y >= resizeorigin_y + mySize_y)
+ continue;
- if(myPos_x + mySize_x - targPos_x < targPos_y + targSize_y - myPos_y && Check_X) // push it to the side
- mySize_x = targPos_x - resizeorigin_x;
- else if(Check_Y) // push it upwards
- mySize_y = resizeorigin_y - (targPos_y + targSize_y);
+ dist_x = resizeorigin_x - targEndPos_x;
+ dist_y = targPos_y - resizeorigin_y;
+ if (dist_y < 0 || dist_x / dist_y > ratio)
+ mySize_x = min(mySize_x, dist_x);
+ else
+ mySize_y = min(mySize_y, dist_y);
}
- else if(myCenter_x > targCenter_x && myCenter_y > targCenter_y) // bottom right
+ else if (resizeCorner == 4)
{
- //if(!HUD_Panel_CheckValidity_of_ResizeSuggestion(id, eX * (resizeorigin_x - (targPos_x + targSize_x)) + eY * (resizeorigin_y - (targPos_y + targSize_y))))
- // continue;
+ if (resizeorigin_x >= targEndPos_x)
+ continue;
+ if (resizeorigin_y >= targEndPos_y)
+ continue;
+ if (targPos_x >= resizeorigin_x + mySize_x)
+ continue;
+ if (targPos_y >= resizeorigin_y + mySize_y)
+ continue;
- if(targPos_x + targSize_x - myPos_x < targPos_y + targSize_y - myPos_y && Check_X) // push it to the side
- mySize_x = resizeorigin_x - (targPos_x + targSize_x);
- else if(Check_Y) // push it upwards
- mySize_y = resizeorigin_y - (targPos_y + targSize_y);
+ dist_x = targPos_x - resizeorigin_x;
+ dist_y = targPos_y - resizeorigin_y;
+ if (dist_y < 0 || dist_x / dist_y > ratio)
+ mySize_x = min(mySize_x, dist_x);
+ else
+ mySize_y = min(mySize_y, dist_y);
}
+ if(cvar("hud_configure_checkcollisions_debug"))
+ drawfill(targPos + '1 1 0' * targBorder, targSize - '2 2 0' * targBorder, '1 1 0', .3, DRAWFLAG_NORMAL);
}
return mySize;
}
-void HUD_Panel_SetPosSize(float id, vector resizeorigin)
+void HUD_Panel_SetPosSize(float id)
{
+ vector resizeorigin;
+ resizeorigin = panel_click_resizeorigin;
vector mySize, myPos;
if(resizeCorner == 1) {
// cap against panel's own limits
vector minSize;
minSize = HUD_Panel_GetMinSize(id); // mySize_x at least minSize_x * mySize_y, and vice versa
-
- mySize_x = max(minSize_x * mySize_y, mySize_x);
- mySize_y = max(minSize_y * mySize_x, mySize_y);
+ float fixedRatio;
+ if(!minSize_x && minSize_y) // forced aspect ratio
+ {
+ minSize_x = 1/minSize_y;
+ fixedRatio = minSize_x;
+ mySize_x = max(minSize_x * mySize_y, mySize_x);
+ mySize_y = max(minSize_y * mySize_x, mySize_y);
+ }
+ else if(minSize_x && !minSize_y) // hybrid aspect ratio, currently supported only in one dimension
+ {
+ if (mySize_x/mySize_y < minSize_x) // resizing in x direction allows free aspect ratio
+ {
+ fixedRatio = minSize_x;
+ minSize_y = 1/minSize_x;
+ mySize_y = max(minSize_y * mySize_x, mySize_y);
+ mySize_x = max(minSize_x * mySize_y, mySize_x);
+ }
+ else
+ fixedRatio = -minSize_x; //negative so that it will be used ONLY after checkResize
+ }
// collision testing|
// -----------------+
}
// left/top screen edges
- mySize_x = min(myPos_x + mySize_x, mySize_x);
- mySize_y = min(myPos_y + mySize_y, mySize_y);
+ if(myPos_x < 0)
+ mySize_x = mySize_x + myPos_x;
+ if(myPos_y < 0)
+ mySize_y = mySize_y + myPos_y;
// bottom/right screen edges
- mySize_x = min(vid_conwidth - myPos_x, mySize_x);
- mySize_y = min(vid_conheight - myPos_y, mySize_y);
+ if(myPos_x + mySize_x > vid_conwidth)
+ mySize_x = vid_conwidth - myPos_x;
+ if(myPos_y + mySize_y > vid_conheight)
+ mySize_y = vid_conheight - myPos_y;
- if(cvar("hud_configure_checkcollisions"))
- mySize = HUD_Panel_CheckResize(id, myPos, mySize, resizeorigin);
+ if(cvar("hud_configure_checkcollisions_debug"))
+ drawfill(myPos, mySize, '1 1 1', .2, DRAWFLAG_NORMAL);
+ // before checkresize, otherwise panel can be snapped partially inside another panel or panel aspect ratio can be broken
if(cvar("hud_configure_grid"))
{
- mySize_x = floor(mySize_x/cvar("hud_configure_grid_x") + 0.5) * cvar("hud_configure_grid_x");
- mySize_y = floor(mySize_y/cvar("hud_configure_grid_y") + 0.5) * cvar("hud_configure_grid_y");
+ mySize_x = floor((mySize_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * cvar("hud_configure_grid_x") * vid_conwidth;
+ mySize_y = floor((mySize_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * cvar("hud_configure_grid_y") * vid_conheight;
}
+ if (fixedRatio > 0)
+ {
+ // keep aspect ratio _MAXIMIZING_ the size
+ if (mySize_x / mySize_y > fixedRatio)
+ mySize_y = mySize_x / fixedRatio;
+ else
+ mySize_x = mySize_y * fixedRatio;
+ }
+
+ if(cvar("hud_configure_checkcollisions"))
+ {
+ if (fixedRatio > 0)
+ {
+ mySize = HUD_Panel_CheckResize(id, mySize, resizeorigin, fixedRatio);
+
+ // Make sure once more that we DON'T cross the screen edges
+ // left/top screen edges
+ if(myPos_x < 0)
+ mySize_x = mySize_x + myPos_x;
+ if(myPos_y < 0)
+ mySize_y = mySize_y + myPos_y;
+
+ // bottom/right screen edges
+ if(myPos_x + mySize_x > vid_conwidth)
+ mySize_x = vid_conwidth - myPos_x;
+ if(myPos_y + mySize_y > vid_conheight)
+ mySize_y = vid_conheight - myPos_y;
+
+ // restore again aspect ratio, _minimizing_ the size
+ if (mySize_x / mySize_y < fixedRatio)
+ mySize_y = mySize_x / fixedRatio;
+ else
+ mySize_x = mySize_y * fixedRatio;
+ }
+ else
+ {
+ mySize = HUD_Panel_CheckResize(id, mySize, resizeorigin, mySize_x / mySize_y);
+ if (fixedRatio < 0)
+ {
+ fixedRatio = -fixedRatio;
+ // restore again aspect ratio, _minimizing_ the size
+ if (mySize_x / mySize_y < fixedRatio)
+ mySize_y = mySize_x / fixedRatio;
+ }
+ }
+ }
+
+ // minimum panel size cap, do this once more so we NEVER EVER EVER have a panel smaller than this, JUST IN CASE above code still makes the panel eg negative (impossible to resize back without changing cvars manually then)
+ mySize_x = max(0.025 * vid_conwidth, mySize_x);
+ mySize_y = max(0.025 * vid_conheight, mySize_y);
+
// do another pos check, as size might have changed by now
if(resizeCorner == 1) {
myPos_x = resizeorigin_x - mySize_x;
myPos_y = resizeorigin_y;
}
+ if(cvar("hud_configure_checkcollisions_debug"))
+ if(cvar("hud_configure_checkcollisions"))
+ drawfill(myPos, mySize, '0 1 0', .3, DRAWFLAG_NORMAL);
+
string s;
s = strcat(ftos(mySize_x/vid_conwidth), " ", ftos(mySize_y/vid_conheight));
cvar_set(strcat("hud_", HUD_Panel_GetName(id), "_size"), s);
}
}
+ if(cvar("hud_configure_checkcollisions_debug"))
+ drawfill(panelPos, panelSize, '1 0 0', .3, DRAWFLAG_NORMAL);
+
if(highlightedAction == 1)
HUD_Panel_SetPos(i, mousepos - panel_click_distance);
else if(highlightedAction == 2)
- HUD_Panel_SetPosSize(i, panel_click_resizeorigin);
+ HUD_Panel_SetPosSize(i);
}
}
weaponorder[j] = h;
}
+string weaponorder_cmp_str;
float weaponorder_cmp(float i, float j, entity pass)
{
- float d;
- d = mod(weaponorder[i].impulse + 9, 10) - mod(weaponorder[j].impulse + 9, 10);
- if(d)
- return d;
- d = weaponorder[i].weapon - weaponorder[j].weapon;
- return d;
+ float ai, aj;
+ ai = strstrofs(weaponorder_cmp_str, sprintf(" %d ", weaponorder[i].weapon), 0);
+ aj = strstrofs(weaponorder_cmp_str, sprintf(" %d ", weaponorder[j].weapon), 0);
+ return aj - ai; // the string is in REVERSE order (higher prio at the right is what we want, but higher prio first is the string)
}
void HUD_WeaponIcons(void)
++weapon_cnt;
}
}
+
+ // TODO make this configurable
+ weaponorder_cmp_str = strcat(" ", weaponorder_byimpulse, " ");
heapsort(weapon_cnt, weaponorder_swap, weaponorder_cmp, world);
HUD_Panel_DrawBg(id, pos, mySize, 0);
float killnotify_times[10];
float killnotify_deathtype[10];
+float killnotify_actiontype[10]; // 0 = "Y [used by] X", 1 = "X [did action to] Y"
string killnotify_attackers[10];
string killnotify_victims[10];
-void HUD_KillNotify_Push(string attacker, string victim, float wpn)
+void HUD_KillNotify_Push(string attacker, string victim, float actiontype, float wpn)
{
float i;
for (i = 9; i > 0; --i) {
killnotify_times[i] = killnotify_times[i-1];
killnotify_deathtype[i] = killnotify_deathtype[i-1];
+ killnotify_actiontype[i] = killnotify_actiontype[i-1];
if(killnotify_attackers[i])
strunzone(killnotify_attackers[i]);
killnotify_attackers[i] = strzone(killnotify_attackers[i-1]);
}
killnotify_times[0] = time;
killnotify_deathtype[0] = wpn;
+ killnotify_actiontype[0] = actiontype;
if(killnotify_attackers[0])
strunzone(killnotify_attackers[0]);
killnotify_attackers[0] = strzone(attacker);
void HUD_KillNotify(string s1, string s2, string s3, float type, float msg)
{
float w;
+ float alsoprint;
+ alsoprint = (cvar("hud_notify_print") || !HUD_Panel_CheckActive(4)); // print message to console if: notify panel disabled, or cvar to do so enabled
+
if(msg == MSG_SUICIDE) {
- HUD_KillNotify_Push(s1, "", DEATH_KILL);
-
// TODO: cl_gentle
w = DEATH_WEAPONOF(type);
if(WEP_VALID(w)) {
- if (!HUD_Panel_CheckActive(4) || cvar("hud_notify_print"))
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if (alsoprint)
print("^1", s1, "^1 ", Weapon_SuicideMessage(type), "\n");
- }
- else if (type == DEATH_KILL)
- print ("^1",s1, "^1 couldn't take it anymore\n");
- else if (type == DEATH_ROT)
- print ("^1",s1, "^1 died\n");
- else if (type == DEATH_NOAMMO)
- print ("^7",s1, "^7 committed suicide. What's the point of living without ammo?\n");
- else if (type == DEATH_CAMP)
- print ("^1",s1, "^1 thought they found a nice camping ground\n");
- else if (type == DEATH_MIRRORDAMAGE)
- print ("^1",s1, "^1 didn't become friends with the Lord of Teamplay\n");
- else if (type == DEATH_CHEAT)
- print ("^1",s1, "^1 unfairly eliminated themself\n");
- else if (type == DEATH_FIRE)
- print ("^1",s1, "^1 burned to death\n");
- else if (type != DEATH_TEAMCHANGE && type != DEATH_QUIET)
- print ("^1",s1, "^1 couldn't resist the urge to self-destruct\n");
+ } else if (type == DEATH_KILL) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_KILL);
+ if (alsoprint)
+ print ("^1",s1, "^1 couldn't take it anymore\n");
+ } else if (type == DEATH_ROT) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if (alsoprint)
+ print ("^1",s1, "^1 died\n");
+ } else if (type == DEATH_NOAMMO) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_NOAMMO);
+ if (alsoprint)
+ print ("^7",s1, "^7 committed suicide. What's the point of living without ammo?\n");
+ } else if (type == DEATH_CAMP) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_CAMP);
+ if (alsoprint)
+ print ("^1",s1, "^1 thought they found a nice camping ground\n");
+ } else if (type == DEATH_MIRRORDAMAGE) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_MIRRORDAMAGE);
+ if (alsoprint)
+ print ("^1",s1, "^1 didn't become friends with the Lord of Teamplay\n");
+ } else if (type == DEATH_CHEAT) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if (alsoprint)
+ print ("^1",s1, "^1 unfairly eliminated themself\n");
+ } else if (type == DEATH_FIRE) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if (alsoprint)
+ print ("^1",s1, "^1 burned to death\n");
+ } else if (type != DEATH_TEAMCHANGE && type != DEATH_QUIET) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if (alsoprint)
+ print ("^1",s1, "^1 couldn't resist the urge to self-destruct\n");
+ }
+
if (stof(s2) > 2) // killcount > 2
print ("^1",s1,"^1 ended it all after a ",s2," kill spree\n");
} else if(msg == MSG_KILL) {
w = DEATH_WEAPONOF(type);
if(WEP_VALID(w)) {
- HUD_KillNotify_Push(s2, s1, w);
- if (!HUD_Panel_CheckActive(4) || cvar("hud_notify_print"))
+ HUD_KillNotify_Push(s2, s1, 1, w);
+ if (alsoprint)
print("^1", s1, "^1 ", Weapon_KillMessage(type), "\n");
}
else if(type == KILL_TEAM || type == KILL_TEAM_SPREE) {
+ HUD_KillNotify_Push(s1, s2, 1, DEATH_MIRRORDAMAGE);
+ if(alsoprint)
+ {
if(cvar("cl_gentle")) {
print ("^1", s1, "^1 took action against a team mate\n");
} else {
print ("^1", s1, "^1 mows down a team mate\n");
}
- if (stof(s2) > 2 && type == KILL_TEAM_SPREE) {
- if(cvar("cl_gentle"))
- print ("^1",s1,"^1 ended a ",s2," scoring spree by going against a team mate\n");
- else
- print ("^1",s1,"^1 ended a ",s2," kill spree by killing a team mate\n");
- }
- else if (stof(s2) > 2) {
- if(cvar("cl_gentle"))
- print ("^1",s1,"'s ^1",s2," scoring spree was ended by a team mate!\n");
- else
- print ("^1",s1,"'s ^1",s2," kill spree was ended by a team mate!\n");
- }
+ }
+ if (stof(s2) > 2 && type == KILL_TEAM_SPREE) {
+ if(cvar("cl_gentle"))
+ print ("^1",s1,"^1 ended a ",s2," scoring spree by going against a team mate\n");
+ else
+ print ("^1",s1,"^1 ended a ",s2," kill spree by killing a team mate\n");
+ }
+ else if (stof(s2) > 2) {
+ if(cvar("cl_gentle"))
+ print ("^1",s1,"'s ^1",s2," scoring spree was ended by a team mate!\n");
+ else
+ print ("^1",s1,"'s ^1",s2," kill spree was ended by a team mate!\n");
+ }
}
else if(type == KILL_FIRST_BLOOD)
print("^1",s1, "^1 drew first blood", "\n");
+ // TODO: icon!
else if (type == DEATH_TELEFRAG)
print ("^1",s1, "^1 was telefragged by ", s2, "\n");
else if (type == DEATH_DROWN) {
- HUD_KillNotify_Push(s2, s1, DEATH_FALL);
- print ("^1",s1, "^1 was drowned by ", s2, "\n");
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_DROWN);
+ if(alsoprint)
+ print ("^1",s1, "^1 was drowned by ", s2, "\n");
}
else if (type == DEATH_SLIME) {
- HUD_KillNotify_Push(s2, s1, DEATH_FALL);
- print ("^1",s1, "^1 was slimed by ", s2, "\n");
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_SLIME);
+ if(alsoprint)
+ print ("^1",s1, "^1 was slimed by ", s2, "\n");
}
else if (type == DEATH_LAVA) {
- HUD_KillNotify_Push(s2, s1, DEATH_FALL);
- print ("^1",s1, "^1 was cooked by ", s2, "\n");
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_LAVA);
+ if(alsoprint)
+ print ("^1",s1, "^1 was cooked by ", s2, "\n");
}
else if (type == DEATH_FALL) {
- HUD_KillNotify_Push(s2, s1, DEATH_FALL);
- print ("^1",s1, "^1 was grounded by ", s2, "\n");
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_FALL);
+ if(alsoprint)
+ print ("^1",s1, "^1 was grounded by ", s2, "\n");
}
else if (type == DEATH_SHOOTING_STAR) {
- HUD_KillNotify_Push(s2, s1, DEATH_FALL);
- print ("^1",s1, "^1 was shot into space by ", s2, "\n");
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_SHOOTING_STAR);
+ if(alsoprint)
+ print ("^1",s1, "^1 was shot into space by ", s2, "\n");
}
else if (type == DEATH_SWAMP) {
- HUD_KillNotify_Push(s2, s1, DEATH_FALL);
- print ("^1",s1, "^1 was conserved by ", s2, "\n");
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was conserved by ", s2, "\n");
}
- else if (type == DEATH_HURTTRIGGER && s3 != "")
+ else if (type == DEATH_HURTTRIGGER)
{
- HUD_KillNotify_Push(s2, s1, DEATH_FALL);
- // p ?!?! :o
- //if(p < 0)
- print("^1", s1, "^1 ", s3, " ", s2, "\n");
- //else
- // bprint("^1", s1, "^1 ", substring(s3, 0, p), s2, "^1", substring(s3, p+1, strlen(s3) - (p+1)), "\n");
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_HURTTRIGGER);
+ if(alsoprint)
+ print("^1",s1, "^1 was thrown into a world of hurt by ", s2, "\n");
+ } else if(type == DEATH_SBCRUSH) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was crushed by ^1", s2, "\n");
+ } else if(type == DEATH_SBMINIGUN) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 got shredded by ^1", s2, "\n");
+ } else if(type == DEATH_SBROCKET) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was blased to bits by ^1", s2, "\n");
+ } else if(type == DEATH_SBBLOWUP) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 got caught in the destruction of ^1", s2, "'s vehicle\n");
+ } else if(type == DEATH_WAKIGUN) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was bolted down by ^1", s2, "\n");
+ } else if(type == DEATH_WAKIROCKET) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 could find no shelter from ^1", s2, "'s rockets\n");
+ } else if(type == DEATH_WAKIBLOWUP) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 dies when ^1", s2, "'s wakizashi dies.\n");
+ } else if(type == DEATH_TURRET) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was pushed into the line of fire by ^1", s2, "\n");
+ } else if(type == DEATH_TOUCHEXPLODE) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was pushed into an accident by ^1", s2, "\n");
+ } else if(type == DEATH_CHEAT) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was unfairly eliminated by ^1", s2, "\n");
+ } else if (type == DEATH_FIRE) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was burnt to death by ^1", s2, "\n");
+ } else if (type == DEATH_CUSTOM) {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_CUSTOM);
+ if(alsoprint)
+ print ("^1",s1, "^1 ", s2, "\n");
+ } else {
+ HUD_KillNotify_Push(s2, s1, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was fragged by ", s2, "\n");
}
- else if(type == DEATH_SBCRUSH)
- print ("^1",s1, "^1 was crushed by ^1", s2, "\n");
- else if(type == DEATH_SBMINIGUN)
- print ("^1",s1, "^1 got shredded by ^1", s2, "\n");
- else if(type == DEATH_SBROCKET)
- print ("^1",s1, "^1 was blased to bits by ^1", s2, "\n");
- else if(type == DEATH_SBBLOWUP)
- print ("^1",s1, "^1 got cought in the destruction of ^1", s2, "'s vehicle\n");
-
- else if(type == DEATH_WAKIGUN)
- print ("^1",s1, "^1 was bolted down by ^1", s2, "\n");
- else if(type == DEATH_WAKIROCKET)
- print ("^1",s1, "^1 could find no shelter from ^1", s2, "'s rockets\n");
- else if(type == DEATH_WAKIBLOWUP)
- print ("^1",s1, "^1 dies when ^1", s2, "'s wakizashi dies.\n");
-
- else if(type == DEATH_TURRET)
- print ("^1",s1, "^1 was pushed into the line of fire by ^1", s2, "\n");
- else if(type == DEATH_TOUCHEXPLODE)
- print ("^1",s1, "^1 was pushed into an accident by ^1", s2, "\n");
- else if(type == DEATH_CHEAT)
- print ("^1",s1, "^1 was unfairly eliminated by ^1", s2, "\n");
- else if (type == DEATH_FIRE)
- print ("^1",s1, "^1 was burnt to death by ^1", s2, "\n");
- else if (type == DEATH_CUSTOM)
- print ("^1",s1, "^1 ", s2, "\n");
- else
- print ("^1",s1, "^1 was fragged by ", s2, "\n");
} else if(msg == MSG_SPREE) {
if(type == KILL_END_SPREE) {
if(cvar("cl_gentle"))
print (s1,"^7 unleashes ^1ARMAGEDDON!\n");
}
} else if(msg == MSG_KILL_ACTION) { // wtf is this? isnt it basically the same as MSG_SUICIDE?
- HUD_KillNotify_Push(s1, "", DEATH_KILL);
if (type == DEATH_DROWN) {
- if(cvar("cl_gentle"))
- print ("^1",s1, "^1 was in the water for too long\n");
- else
- print ("^1",s1, "^1 drowned\n");
- }
- else if (type == DEATH_SLIME)
- print ("^1",s1, "^1 was slimed\n");
- else if (type == DEATH_LAVA) {
- if(cvar("cl_gentle"))
- print ("^1",s1, "^1 found a hot place\n");
- else
- print ("^1",s1, "^1 turned into hot slag\n");
- }
- else if (type == DEATH_FALL) {
- if(cvar("cl_gentle"))
- print ("^1",s1, "^1 tested gravity (and it worked)\n");
- else
- print ("^1",s1, "^1 hit the ground with a crunch\n");
- }
- else if (type == DEATH_SHOOTING_STAR)
- print ("^1",s1, "^1 became a shooting star\n");
- else if (type == DEATH_SWAMP) {
- if(cvar("cl_gentle"))
- print ("^1",s1, "^1 discovered a swamp\n");
- else
- print ("^1",s1, "^1 is now conserved for centuries to come\n");
- }
- else if(type == DEATH_TURRET)
- print ("^1",s1, "^1 was mowed down by a turret \n");
- else if (type == DEATH_CUSTOM)
- print ("^1",s1, "^1 ", s2, "\n");
- else if(type == DEATH_TOUCHEXPLODE)
- print ("^1",s1, "^1 died in an accident\n");
- else if(type == DEATH_CHEAT)
- print ("^1",s1, "^1 was unfairly eliminated\n");
- else if(type == DEATH_FIRE) {
- if(cvar("cl_gentle"))
- print ("^1",s1, "^1 felt a little hot\n");
- else
- print ("^1",s1, "^1 burnt to death\n");
- }
- else {
- if(cvar("cl_gentle"))
- print ("^1",s1, "^1 needs a restart\n");
- else
- print ("^1",s1, "^1 died\n");
+ HUD_KillNotify_Push(s1, "", 0, DEATH_DROWN);
+ if(alsoprint)
+ {
+ if(cvar("cl_gentle"))
+ print ("^1",s1, "^1 was in the water for too long\n");
+ else
+ print ("^1",s1, "^1 drowned\n");
+ }
+ } else if (type == DEATH_SLIME) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_SLIME);
+ if(alsoprint)
+ print ("^1",s1, "^1 was slimed\n");
+ } else if (type == DEATH_LAVA) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_LAVA);
+ if(alsoprint)
+ {
+ if(cvar("cl_gentle"))
+ print ("^1",s1, "^1 found a hot place\n");
+ else
+ print ("^1",s1, "^1 turned into hot slag\n");
+ }
+ } else if (type == DEATH_FALL) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if(alsoprint)
+ {
+ if(cvar("cl_gentle"))
+ print ("^1",s1, "^1 tested gravity (and it worked)\n");
+ else
+ print ("^1",s1, "^1 hit the ground with a crunch\n");
+ }
+ } else if (type == DEATH_SHOOTING_STAR) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_SHOOTING_STAR);
+ if(alsoprint)
+ print ("^1",s1, "^1 became a shooting star\n");
+ } else if (type == DEATH_SWAMP) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if(alsoprint)
+ {
+ if(cvar("cl_gentle"))
+ print ("^1",s1, "^1 discovered a swamp\n");
+ else
+ print ("^1",s1, "^1 is now conserved for centuries to come\n");
+ }
+ } else if(type == DEATH_TURRET) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was mowed down by a turret \n");
+ } else if (type == DEATH_CUSTOM) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_CUSTOM);
+ if(alsoprint)
+ print ("^1",s1, "^1 ", s2, "\n");
+ } else if (type == DEATH_HURTTRIGGER) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_HURTTRIGGER);
+ if(alsoprint)
+ print ("^1",s1, "^1 was in the wrong place\n");
+ } else if(type == DEATH_TOUCHEXPLODE) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 died in an accident\n");
+ } else if(type == DEATH_CHEAT) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if(alsoprint)
+ print ("^1",s1, "^1 was unfairly eliminated\n");
+ } else if(type == DEATH_FIRE) {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if(alsoprint)
+ {
+ if(cvar("cl_gentle"))
+ print ("^1",s1, "^1 felt a little hot\n");
+ else
+ print ("^1",s1, "^1 burnt to death\n");
+ }
+ } else {
+ HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
+ if(alsoprint)
+ {
+ if(cvar("cl_gentle"))
+ print ("^1",s1, "^1 needs a restart\n");
+ else
+ print ("^1",s1, "^1 died\n");
+ }
}
} else if(msg == MSG_KILL_ACTION_SPREE) {
- HUD_KillNotify_Push(s1, "", DEATH_KILL);
if(cvar("cl_gentle"))
print ("^1",s1,"^1 needs a restart after a ",s2," scoring spree\n");
else
print ("^1",s1,"^1 died with a ",s2," kill spree\n");
} else if(msg == MSG_INFO) {
- if(type == INFO_GOTFLAG) {
- HUD_KillNotify_Push(s1, s2, INFO_GOTFLAG);
+ if(type == INFO_GOTFLAG) { // here, s2 is the flag name
+ HUD_KillNotify_Push(s1, s2, 0, INFO_GOTFLAG);
print(s1, "^7 got the ", s2, "\n");
} else if(type == INFO_LOSTFLAG) {
- HUD_KillNotify_Push(s1, s2, INFO_LOSTFLAG);
+ HUD_KillNotify_Push(s1, s2, 0, INFO_LOSTFLAG);
print(s1, "^7 lost the ", s2, "\n");
} else if(type == INFO_PICKUPFLAG) {
- HUD_KillNotify_Push(s1, s2, INFO_GOTFLAG);
+ HUD_KillNotify_Push(s1, s2, 0, INFO_GOTFLAG);
print(s1, "^7 picked up the ", s2, "\n");
} else if(type == INFO_RETURNFLAG) {
- HUD_KillNotify_Push(s1, s2, INFO_RETURNFLAG);
+ HUD_KillNotify_Push(s1, s2, 0, INFO_RETURNFLAG);
print(s1, "^7 returned the ", s2, "\n");
}
}
-
}
#define DAMAGE_CENTERPRINT_SPACER NEWLINES
-void HUD_Centerprint(string s1, float type, float msg)
+void HUD_Centerprint(string s1, string s2, float type, float msg)
{
if(msg == MSG_SUICIDE) {
if (type == DEATH_TEAMCHANGE) {
} else {
centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1First victim"));
}
- } else if (type == KILL_TYPEFRAG) {
+ } else if (type == KILL_TYPEFRAG) { // s2 contains "advanced kill messages" such as ping, handicap...
if(cvar("cl_gentle")) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You scored against ^7", s1, "^7 who was typing!"));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You scored against ^7", s1, "^7 who was typing!", s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You typefragged ^7", s1));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You typefragged ^7", s1, s2));
}
} else if (type == KILL_TYPEFRAGGED) {
if(cvar("cl_gentle")) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were scored against by ^7", s1, "^7 while you were typing!"));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were scored against by ^7", s1, "^7 while you were typing!", s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were typefragged by ^7", s1));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were typefragged by ^7", s1, s2));
}
} else if (type == KILL_FRAG) {
if(cvar("cl_gentle")) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You scored against ^7", s1));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You scored against ^7", s1, s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You fragged ^7", s1));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You fragged ^7", s1, s2));
}
} else if (type == KILL_FRAGGED) {
if(cvar("cl_gentle")) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You were scored against by ^7", s1));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You were scored against by ^7", s1, s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You were fragged by ^7", s1));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You were fragged by ^7", s1, s2));
}
}
} else if(msg == MSG_KILL_ACTION) {
}
float entries, height;
- entries = bound(1, floor(12 * mySize_y/mySize_x), 10);
+ entries = bound(1, floor(14 * mySize_y/mySize_x), 12);
height = mySize_y/entries;
entries -= 2; // top/bottom two lines reserved for info messaged, such as spec instructions
// TODO: maybe print in team colors?
// TODO: maybe this could be cleaned up somehow...
+ // TODO: less copypaste code below
//
+ // Y [used by] X
+ if(killnotify_actiontype[j] == 0 && !hud_configure)
+ {
+ attacker = textShortenToWidth(killnotify_attackers[j], mySize_x - 2 * height, fontsize, stringwidth_colors);
+
+ width_attacker = stringwidth(attacker, TRUE, fontsize);
+ pos_attacker = pos + eX * 0.5 * (mySize_x - width_attacker + 2 * height) + eY * 0.5 * fontsize_y + eY * i * height;
+
+ weap_pos = pos + eX * 0.5 * (mySize_x - width_attacker) - eX * height + eY * i * height;
+ if(killnotify_deathtype[j] == DEATH_GENERIC)
+ {
+ drawpic_skin(weap_pos, "notify_death", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_NOAMMO)
+ {
+ drawpic_skin(weap_pos, "notify_outofammo", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_KILL)
+ {
+ drawpic_skin(weap_pos, "notify_selfkill", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_CAMP)
+ {
+ drawpic_skin(weap_pos, "notify_camping", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_MIRRORDAMAGE)
+ {
+ drawpic_skin(weap_pos, "notify_teamkill", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_DROWN)
+ {
+ drawpic_skin(weap_pos, "notify_water", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_SLIME)
+ {
+ drawpic_skin(weap_pos, "notify_slime", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_LAVA)
+ {
+ drawpic_skin(weap_pos, "notify_lava", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_FALL)
+ {
+ drawpic_skin(weap_pos, "notify_fall", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_SHOOTING_STAR)
+ {
+ drawpic_skin(weap_pos, "notify_shootingstar", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_HURTTRIGGER || killnotify_deathtype[j] == DEATH_CUSTOM)
+ {
+ drawpic_skin(weap_pos, "notify_void", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == INFO_GOTFLAG)
+ {
+ if(killnotify_victims[j] == "^1RED^7 flag")
+ s = "red";
+ else
+ s = "blue";
+ drawpic_skin(weap_pos, strcat("flag_", s, "_carrying"), '1 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == INFO_RETURNFLAG)
+ {
+ if(killnotify_victims[j] == "^1RED^7 flag")
+ s = "red";
+ else
+ s = "blue";
+ drawpic_skin(weap_pos, strcat("flag_", s, "_taken"), '1 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == INFO_LOSTFLAG)
+ {
+ if(killnotify_victims[j] == "^1RED^7 flag")
+ s = "red";
+ else
+ s = "blue";
+ drawpic_skin(weap_pos, strcat("flag_", s, "_lost"), '1 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ }
// X [did action to] Y
- if(hud_configure || WEP_VALID(killnotify_deathtype[j]) || killnotify_deathtype[j] == DEATH_FALL)
+ else
{
if(hud_configure)
{
drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
drawcolorcodedstring(pos_victim, victim, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
}
- else if(killnotify_deathtype[j] == DEATH_FALL)
+ else if(killnotify_deathtype[j] == DEATH_MIRRORDAMAGE)
{
- drawpic_skin(weap_pos, "notify_pushoffedge", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawpic_skin(weap_pos, "notify_teamkill", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
drawcolorcodedstring(pos_victim, victim, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
}
- }
-
- // Y [used by] X
- else
- {
- attacker = textShortenToWidth(killnotify_attackers[j], mySize_x - 2 * height, fontsize, stringwidth_colors);
-
- width_attacker = stringwidth(attacker, TRUE, fontsize);
- pos_attacker = pos + eX * 0.5 * (mySize_x - width_attacker + 2 * height) + eY * 0.5 * fontsize_y + eY * i * height;
-
- weap_pos = pos + eX * 0.5 * (mySize_x - width_attacker) - eX * height + eY * i * height;
- if(killnotify_deathtype[j] == DEATH_KILL)
+ else if(killnotify_deathtype[j] == DEATH_DROWN)
{
- drawpic_skin(weap_pos, "notify_selfkill", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawpic_skin(weap_pos, "notify_water", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_victim, victim, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
}
- else if(killnotify_deathtype[j] == INFO_GOTFLAG)
+ else if(killnotify_deathtype[j] == DEATH_SLIME)
{
- if(killnotify_victims[j] == "^1RED^7 flag")
- s = "red";
- else
- s = "blue";
- drawpic_skin(weap_pos, strcat("flag_", s, "_carrying"), '1 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawpic_skin(weap_pos, "notify_slime", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_victim, victim, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
}
- else if(killnotify_deathtype[j] == INFO_RETURNFLAG)
+ else if(killnotify_deathtype[j] == DEATH_LAVA)
{
- if(killnotify_victims[j] == "^1RED^7 flag")
- s = "red";
- else
- s = "blue";
- drawpic_skin(weap_pos, strcat("flag_", s, "_taken"), '1 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawpic_skin(weap_pos, "notify_lava", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_victim, victim, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
}
- else if(killnotify_deathtype[j] == INFO_LOSTFLAG)
+ else if(killnotify_deathtype[j] == DEATH_FALL)
{
- if(killnotify_victims[j] == "^1RED^7 flag")
- s = "red";
- else
- s = "blue";
- drawpic_skin(weap_pos, strcat("flag_", s, "_lost"), '1 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawpic_skin(weap_pos, "notify_fall", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_victim, victim, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_SHOOTING_STAR)
+ {
+ drawpic_skin(weap_pos, "notify_shootingstar", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_victim, victim, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ }
+ else if(killnotify_deathtype[j] == DEATH_HURTTRIGGER || killnotify_deathtype[j] == DEATH_CUSTOM) // DEATH_CUSTOM is also void, right?
+ {
+ drawpic_skin(weap_pos, "notify_void", '2 1 0' * height, '1 1 1', HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_attacker, attacker, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos_victim, victim, fontsize, HUD_Panel_GetFgAlpha(id) * a, DRAWFLAG_NORMAL);
}
}
+
}
// Info messages
//
entity tm;
+ vector o;
+ o = pos;
+ if(cvar("hud_notify_info_top"))
+ o = pos + eY;
+ else
+ o = pos + eY * mySize_y - eY * 2 * height;
+
if(spectatee_status && !intermission)
{
//drawfont = hud_bigfont;
s = strcat("^1Press ^3", getcommandkey("primary fire", "+attack"), "^1 to spectate");
else
s = strcat("^1Press ^3", getcommandkey("primary fire", "+attack"), "^1 for another player");
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
if(spectatee_status == -1)
s = strcat("^1Use ^3", getcommandkey("next weapon", "weapnext"), "^1 or ^3", getcommandkey("previous weapon", "weapprev"), "^1 to change the speed");
else
s = strcat("^1Press ^3", getcommandkey("secondary fire", "+attack2"), "^1 to observe");
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
s = strcat("^1Press ^3", getcommandkey("server info", "+show_info"), "^1 for gamemode info");
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
if(gametype == GAME_ARENA)
s = "^1Wait for your turn to join";
}
else
s = strcat("^1Press ^3", getcommandkey("jump", "+jump"), "^1 to join");
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
//show restart countdown:
if (time < getstatf(STAT_GAMESTARTTIME)) {
//we need to ceil, otherwise the countdown would be off by .5 when using round()
countdown = ceil(getstatf(STAT_GAMESTARTTIME) - time);
s = strcat("^1Game starts in ^3", ftos(countdown), "^1 seconds");
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
}
}
if(warmup_stage && !intermission)
{
s = "^2Currently in ^1warmup^2 stage!";
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
}
- // move more important stuff more to the middle so its more visible
-
string blinkcolor;
if(mod(time, 1) >= 0.5)
blinkcolor = "^1";
else
s = strcat("^2Waiting for others to ready up...");
}
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
}
else if(warmup_stage && !intermission && !spectatee_status)
{
s = strcat("^2Press ^3", getcommandkey("ready", "ready"), "^2 to end warmup");
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
}
if(teamplay && !intermission && !spectatee_status && gametype != GAME_CA && teamnagger)
if (tm.team_size == ts_max)
s = strcat(s, " Press ^3", getcommandkey("team menu", "menu_showteamselect"), blinkcolor, " to adjust");
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
}
}
}
if(hud_configure)
- s = strcat(s, "^7Press ^3ESC ^7to show HUD options.\n^3Doubleclick a panel for panel-specific options.");
- //s = textShortenToWidth(s, mySize_y, 0.5 * height, stringwidth_colors);
- if(cvar("hud_notify_info_top"))
- drawcolorcodedstring(pos + eY * 0.25 * height, s, '1 1 0' * 0.5 * height, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
- else
- drawcolorcodedstring(pos + eY * mySize_y - eY * 1.75 * height, s, '1 1 0' * 0.5 * height, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ {
+ s = "^7Press ^3ESC ^7to show HUD options.";
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
+ s = "^3Doubleclick a panel for panel-specific options.";
+ drawcolorcodedstring(o, s, fontsize, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ o += eY * fontsize_y;
+ }
}
// Timer (#5)
vector color;
color = HUD_Get_Num_Color (prevfps, 100);
- drawstring(pos, strcat("FPS: ", ftos_decimals(prevfps, cvar("hud_engineinfo_framecounter_decimals"))), '1 1 0' * 0.5 * mySize_y, color, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ drawstring(pos, strcat("FPS: ", ftos_decimals(prevfps, cvar("hud_engineinfo_framecounter_decimals"))), '1 1 0' * mySize_y, color, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
}
/*
==================
{
float i;
// x-axis
- for(i = 0; i < vid_conwidth/max(2, cvar("hud_configure_grid_x")); ++i)
+ for(i = 0; i < 1/bound(0.005, bound(0.005, cvar("hud_configure_grid_x"), 0.2), 0.2); ++i)
{
- drawfill(eX * i * max(2, cvar("hud_configure_grid_x")), eX + eY * vid_conheight, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
+ drawfill(eX * i * vid_conwidth * bound(0.005, bound(0.005, cvar("hud_configure_grid_x"), 0.2), 0.2), eX + eY * vid_conheight, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
}
// y-axis
- for(i = 0; i < vid_conheight/max(2, cvar("hud_configure_grid_y")); ++i)
+ for(i = 0; i < 1/bound(0.005, bound(0.005, cvar("hud_configure_grid_y"), 0.2), 0.2); ++i)
{
- drawfill(eY * i * max(2, cvar("hud_configure_grid_y")), eY + eX * vid_conwidth, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
+ drawfill(eY * i * vid_conheight * bound(0.005, bound(0.005, cvar("hud_configure_grid_y"), 0.2), 0.2), eY + eX * vid_conwidth, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
}
}
if(cvar_string("hud_dock") != "")
drawpic_skin('0 0 0', cvar_string("hud_dock"), eX * vid_conwidth + eY * vid_conheight, HUD_Panel_Dock_GetColor(), cvar("hud_dock_alpha") * menu_fade_alpha, DRAWFLAG_NORMAL);
+ if(HUD_Panel_CheckActive(HUD_PANEL_RADAR) || hud_configure)
+ if(cvar_string("hud_radar") != "0" && (cvar("hud_radar") == 2 || teamplay))
+ HUD_Radar();
if(HUD_Panel_CheckActive(HUD_PANEL_WEAPONICONS) || hud_configure)
HUD_WeaponIcons();
if(HUD_Panel_CheckActive(HUD_PANEL_INVENTORY) || hud_configure)
HUD_Notify();
if(HUD_Panel_CheckActive(HUD_PANEL_TIMER) || hud_configure)
HUD_Timer();
- // TODO hud'ify
- if(HUD_Panel_CheckActive(HUD_PANEL_RADAR) || hud_configure)
- if(cvar_string("hud_radar") != "0" && (cvar("hud_radar") == 2 || teamplay))
- HUD_Radar();
if(HUD_Panel_CheckActive(HUD_PANEL_SCORE) || hud_configure)
HUD_Score();
if(HUD_Panel_CheckActive(HUD_PANEL_RACETIMER) || hud_configure)
if(HUD_Panel_CheckActive(HUD_PANEL_CHAT) || hud_configure)
HUD_Chat();
else
- cvar_set("con_csqcpositioning", "0");
+ cvar_set("con_chatrect", "0");
if(HUD_Panel_CheckActive(HUD_PANEL_ENGINEINFO) || hud_configure)
HUD_EngineInfo();