set sv_ready_restart_after_countdown 0 "if set to 1 the players and map items are reset after the countdown ended, otherwise they're reset already at the beginning of the countdown"
set sv_ready_restart_repeatable 0 "allows the players to restart the game as often as needed"
+ set sv_hitsound_antispam_time 0.05 "don't play the hitsound more often than this for the electro lightning gun or the laser gauntlet"
+
//nifreks lockonrestart feature, used in team-based game modes, if set to 1 and all players readied up no other player can then join the game anymore, useful to block spectators from joining
set teamplay_lockonrestart 0 "it set to 1 in a team-based game, the teams are locked once all players readied up and the game restarted (no new players can join after restart unless using the server-command unlockteams)"
set g_respawn_ghosts_maxtime 6 "maximum amount of time a respawn ghost can last, minimum time is half this value. 0 disables and ghosts fade when the body would"
// fragmessage: This allows extra information to be displayed with the frag centerprints.
- set sv_fragmessage_information_ping 0 "Enable ping display information, 0 = Never display; 1 = Always display (If the player is a bot, it will say bot instead of the ping.)"
+ set sv_fragmessage_information_ping 1 "Enable ping display information, 0 = Never display; 1 = Always display (If the player is a bot, it will say bot instead of the ping.)"
set sv_fragmessage_information_handicap 1 "Enable handicap display information, 0 = Never display; 1 = Only when the player has handicap on; 2 = Always display (Displays Off if off)"
- set sv_fragmessage_information_stats 0 "Enable statistics (health/armor) display information, 0 = Never display; 1 = Always display (Only available for the person who was killed)"
+ set sv_fragmessage_information_stats 1 "Enable statistics (health/armor) display information, 0 = Never display; 1 = Always display (Only available for the person who was killed)"
set sv_fragmessage_information_typefrag 1 "Enable typefrag display information, 0 = Never display; 1 = Always display"
// use default physics
// server game balance settings
// powerup balance settings
// weapon balance settings follow
- exec balance.cfg
+ exec balanceXonotic.cfg
set g_bloodloss 0 "amount of health below which blood loss occurs"
- set g_footsteps 0 "serverside footstep sounds"
+ set g_footsteps 1 "serverside footstep sounds"
set g_deathglow 1.25 "when enabled, players stop glowing after they die (the value specifies glow fading speed)"
seta hud_panel_weapons_ammo_full_cells 80 "show 100% of the status bar at this ammo count"
seta hud_panel_weapons_ammo_full_rockets 80 "show 100% of the status bar at this ammo count"
seta hud_panel_weapons_ammo_full_fuel 100 "show 100% of the status bar at this ammo count"
+seta hud_panel_weapons_timeout "10" "panel disappears if you don't switch weapon for this amount of seconds"
+seta hud_panel_weapons_timeout_effect "1" "disappearance effect: 0) no effect; 1) panel moves out of screen; 2) panel fades out"
seta hud_panel_notify_time 10 "time that a new entry stays until it fades out"
seta hud_panel_notify_fadetime 3 "fade out time"
sv_allowdownloads_inarchive 1 // for csprogs.dat
- set g_jump_grunt 0 "Do you make a grunting noise every time you jump? Is it the same grunting noise every time?"
+ set g_jump_grunt 1 "Do you make a grunting noise every time you jump? Is it the same grunting noise every time?"
alias allready "sv_cmd allready"
set g_movement_highspeed 1 "movement speed modification factor (only changes movement when above maxspeed)"
set g_maxspeed 0 "player speed limit, faster players are killed (0 for unlimited speed)"
+
+ scr_conalpha 1
+ scr_conalpha2factor 0.3
+ scr_conalpha3factor 1
+ scr_conalphafactor 0.8
+ scr_conbrightness 0.35
+ scr_conforcewhiledisconnected 1
+ scr_conscroll2_x 0.11
+ scr_conscroll2_y 0.2
+ scr_conscroll3_x 0
+ scr_conscroll3_y 0
+ scr_conscroll_x -0.1
+ scr_conscroll_y -0.3
HUD_Panel_UpdatePosSizeForId(highlightedPanel)
+ vector prev_pos, prev_size;
+ prev_pos = panel_pos;
+ prev_size = panel_size;
+
if (hudShiftState & S_ALT) // resize
{
highlightedAction = 1;
HUD_Panel_SetPos(pos);
}
+
+ HUD_Panel_UpdatePosSizeForId(highlightedPanel)
+
+ if (prev_pos != panel_pos || prev_size != panel_size)
+ {
+ // backup!
+ panel_pos_backup = prev_pos;
+ panel_size_backup = prev_size;
+ highlightedPanel_backup = highlightedPanel;
+ }
}
float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
menu_enabled_time = time;
localcmd("menu_showhudexit\n");
}
+ else if(hudShiftState & S_CTRL)
+ {
+ if (mouseClicked)
+ return true;
+
+ if(nPrimary == K_SPACE) // enable/disable highlighted panel or dock
+ {
+ if (bInputType == 1)
+ return true;
+
+ if (highlightedPanel_prev != -1)
+ cvar_set(strcat("hud_panel_", panel_name), ftos(!(panel_enabled)));
+ else
+ cvar_set(strcat("hud_dock"), (autocvar_hud_dock == "") ? "dock" : "");
+ }
+ if(nPrimary == 'c') // copy highlighted panel size
+ {
+ if (bInputType == 1)
+ return true;
+
+ if (highlightedPanel_prev != -1)
+ {
+ panel_size_copied = panel_size;
+ highlightedPanel_copied = highlightedPanel_prev;
+ }
+ }
+ else if(nPrimary == 'v') // past copied size on the highlighted panel
+ {
+ if (bInputType == 1)
+ return true;
+
+ if (highlightedPanel_copied != -1 && highlightedPanel_prev != -1)
+ {
+ // backup first!
+ panel_pos_backup = panel_pos;
+ panel_size_backup = panel_size;
+ highlightedPanel_backup = highlightedPanel_prev;
+
+ string s;
+ s = strcat(ftos(panel_size_copied_x/vid_conwidth), " ", ftos(panel_size_copied_y/vid_conheight));
+ cvar_set(strcat("hud_panel_", panel_name, "_size"), s);
+ }
+ }
+ else if(nPrimary == 'z') // undo last action
+ {
+ if (bInputType == 1)
+ return true;
+ //restore previous values
+ if (highlightedPanel_backup != -1)
+ {
+ HUD_Panel_GetName(highlightedPanel_backup)
+ string s;
+ s = strcat(ftos(panel_pos_backup_x/vid_conwidth), " ", ftos(panel_pos_backup_y/vid_conheight));
+ cvar_set(strcat("hud_panel_", panel_name, "_pos"), s);
+ s = strcat(ftos(panel_size_backup_x/vid_conwidth), " ", ftos(panel_size_backup_y/vid_conheight));
+ cvar_set(strcat("hud_panel_", panel_name, "_size"), s);
+ highlightedPanel_backup = -1;
+ }
+ }
+ }
else if(nPrimary == K_UPARROW || nPrimary == K_DOWNARROW || nPrimary == K_LEFTARROW || nPrimary == K_RIGHTARROW)
{
if (bInputType == 1)
}
float highlightcheck;
+float would_backup;
void HUD_Panel_Mouse()
{
// TODO: needs better check... is there any float that contains the current state of the menu? _menu_alpha isn't apparently updated the frame the menu gets enabled
if(mouseClicked)
{
+ vector prev_pos, prev_size;
if(prevMouseClicked == 0)
+ {
HUD_Panel_Highlight(); // sets highlightedPanel, highlightedAction, panel_click_distance, panel_click_resizeorigin
+ // and calls HUD_Panel_UpdatePosSizeForId() for the highlighted panel
+ would_backup = TRUE;
+ }
+ else if (would_backup)
+ {
+ // this is not the actual backup! Saving pos and size values
+ // only to check later if they are different from new values
+ prev_pos = panel_pos;
+ prev_size = panel_size;
+ }
hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && autocvar_hud_configure_checkcollisions);
HUD_Panel_SetPosSize(mySize);
}
+ HUD_Panel_UpdatePosSizeForId(highlightedPanel)
+ if (prevMouseClicked)
+ if (would_backup)
+ if (prev_pos != panel_pos || prev_size != panel_size)
+ {
+ // backup!
+ panel_pos_backup = prev_pos;
+ panel_size_backup = prev_size;
+ highlightedPanel_backup = highlightedPanel;
+ would_backup = FALSE;
+ }
+
// doubleclick check
if(time - prevMouseClickedTime < 0.4 && prevMouseClicked == 0 && prevMouseClickedPos == mousepos && highlightedPanel >= 0)
{
if(!autocvar_hud_panel_weapons && !autocvar__hud_configure)
return;
+ float timeout = cvar("hud_panel_weapons_timeout");
+ float timeout_effect_lenght;
+ if (cvar("hud_panel_weapons_timeout_effect") == 0)
+ timeout_effect_lenght = 0;
+ else
+ timeout_effect_lenght = 0.75;
+
+ if (timeout && time >= weapontime + timeout + timeout_effect_lenght && !autocvar__hud_configure)
+ return;
+
active_panel = HUD_PANEL_WEAPONS;
HUD_Panel_UpdateCvars(weapons);
- vector pos, mySize;
- float i, weapid, fade, weapon_stats, weapon_number, weapon_cnt;
- pos = panel_pos;
- mySize = panel_size;
+ if (timeout && time >= weapontime + timeout && !autocvar__hud_configure)
+ {
+ float f = (time - (weapontime + timeout)) / timeout_effect_lenght;
+ if (cvar("hud_panel_weapons_timeout_effect") == 2)
+ {
+ panel_bg_alpha *= (1 - f);
+ panel_fg_alpha *= (1 - f);
+ }
+ else
+ {
+ f *= f; // for a cooler movement
+ vector center;
+ center_x = panel_pos_x + panel_size_x/2;
+ center_y = panel_pos_y + panel_size_y/2;
+ float screen_ar = vid_conwidth/vid_conheight;
+ if (center_x/center_y < screen_ar) //bottom left
+ {
+ if ((vid_conwidth - center_x)/center_y < screen_ar) //bottom
+ panel_pos_y += f * (vid_conheight - panel_pos_y);
+ else //left
+ panel_pos_x -= f * (panel_pos_x + panel_size_x);
+ }
+ else //top right
+ {
+ if ((vid_conwidth - center_x)/center_y < screen_ar) //right
+ panel_pos_x += f * (vid_conwidth - panel_pos_x);
+ else //top
+ panel_pos_y -= f * (panel_pos_y + panel_size_y);
+ }
+ }
+ }
+ float i, weapid, fade, weapon_stats, weapon_number, weapon_cnt;
weapon_cnt = 0;
for(i = WEP_FIRST; i <= WEP_LAST; ++i)
{
HUD_Panel_DrawBg(1);
if(panel_bg_padding)
{
- pos += '1 1 0' * panel_bg_padding;
- mySize -= '2 2 0' * panel_bg_padding;
+ panel_pos += '1 1 0' * panel_bg_padding;
+ panel_size -= '2 2 0' * panel_bg_padding;
}
// hits
HUD_Weapons_Clear();
float rows, columns;
- rows = mySize_y/mySize_x;
+ rows = panel_size_y/panel_size_x;
rows = bound(1, floor((sqrt(4 * autocvar_hud_panel_weapons_aspect * rows * WEP_COUNT + rows * rows) + rows + 0.5) / 2), WEP_COUNT);
columns = ceil(WEP_COUNT/rows);
for(i = 0; i < weapon_cnt; ++i)
{
- wpnpos = pos + eX * column * mySize_x*(1/columns) + eY * row * mySize_y*(1/rows);
- wpnsize = eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows);
+ wpnpos = panel_pos + eX * column * panel_size_x*(1/columns) + eY * row * panel_size_y*(1/rows);
+ wpnsize = eX * panel_size_x*(1/columns) + eY * panel_size_y*(1/rows);
self = weaponorder[i];
weapid = self.impulse;
drawpic_aspect_skin(wpnpos, strcat("weapon", self.netname), wpnsize, '1 1 1', fade * panel_fg_alpha, DRAWFLAG_NORMAL);
if(autocvar_hud_panel_weapons_label == 1) // weapon number
- drawstring(wpnpos, ftos(weapid), '1 1 0' * 0.5 * mySize_y*(1/rows), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawstring(wpnpos, ftos(weapid), '1 1 0' * 0.5 * panel_size_y*(1/rows), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
else if(autocvar_hud_panel_weapons_label == 2) // bind
- drawstring(wpnpos, getcommandkey(ftos(weapid), strcat("impulse ", ftos(weapid))), '1 1 0' * 0.5 * mySize_y*(1/rows), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawstring(wpnpos, getcommandkey(ftos(weapid), strcat("impulse ", ftos(weapid))), '1 1 0' * 0.5 * panel_size_y*(1/rows), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
// draw ammo status bar
if(autocvar_hud_panel_weapons_ammo && weapid != WEP_TUBA && weapid != WEP_LASER && weapid != WEP_PORTO)
drawpic_aspect_skin(newPos, "ammo_current_bg", newSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
drawfont = hud_bigfont;
- drawstring_aspect(numpos, ftos(a), eX * (2/3) * newSize_x + eY * newSize_y, color, panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
+ if(a > 0)
+ drawstring_aspect(numpos, ftos(a), eX * (2/3) * newSize_x + eY * newSize_y, color, panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
+ else // "ghost" ammo count
+ drawstring_aspect(numpos, ftos(a), eX * (2/3) * newSize_x + eY * newSize_y, '0 0 0', panel_fg_alpha * alpha * 0.5, DRAWFLAG_NORMAL);
drawfont = hud_font;
- drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * newSize_y, '1 1 1', panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
+ if(a > 0)
+ drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * newSize_y, '1 1 1', panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
+ else // "ghost" ammo icon
+ drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * newSize_y, '0 0 0', panel_fg_alpha * alpha * 0.5, DRAWFLAG_NORMAL);
}
void HUD_Ammo(void)
pos = panel_pos;
mySize = panel_size;
- float strength_time, shield_time;
-
- strength_time = bound(0, getstatf(STAT_STRENGTH_FINISHED) - time, 99);
- shield_time = bound(0, getstatf(STAT_INVINCIBLE_FINISHED) - time, 99);
+ float strength_time, shield_time;
+ if(autocvar__hud_configure)
+ {
+ strength_time = 15;
+ shield_time = 27;
+ }
+ else
+ {
+ strength_time = bound(0, getstatf(STAT_STRENGTH_FINISHED) - time, 99);
+ shield_time = bound(0, getstatf(STAT_INVINCIBLE_FINISHED) - time, 99);
+ }
HUD_Panel_DrawBg(bound(0, max(strength_time, shield_time), 1));
if(panel_bg_padding)
mySize -= '2 2 0' * panel_bg_padding;
}
- if(autocvar__hud_configure)
- {
- strength_time = 15;
- shield_time = 27;
- }
-
vector barpos, barsize;
vector picpos;
vector numpos;
if(WEP_VALID(w)) {
HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
if (alsoprint)
- print("^1", s1, "^1 ", Weapon_SuicideMessage(type), "\n");
+ print("^1", sprintf(Weapon_SuicideMessage(type), strcat(s1, "^1")), "\n");
} else if (type == DEATH_KILL) {
HUD_KillNotify_Push(s1, "", 0, DEATH_KILL);
if (alsoprint)
} else if(msg == MSG_KILL) {
w = DEATH_WEAPONOF(type);
if(WEP_VALID(w)) {
- HUD_KillNotify_Push(s2, s1, 1, w);
+ HUD_KillNotify_Push(s1, s2, 1, type);
if (alsoprint)
- print("^1", s1, "^1 ", Weapon_KillMessage(type), "\n");
+ print("^1", sprintf(Weapon_KillMessage(type), strcat(s2, "^1"), strcat(s1, "^1")), "\n"); // default order: victim, killer
}
else if(type == KILL_TEAM_RED || type == KILL_TEAM_BLUE || type == KILL_TEAM_SPREE) {
HUD_KillNotify_Push(s1, s2, 1, type);
a = 0;
}
+ float w;
+ w = DEATH_WEAPONOF(killnotify_deathtype[j]);
+
// TODO: maybe print in team colors?
//
// Y [used by] X
{
s = "weaponelectro";
}
- else if(WEP_VALID(killnotify_deathtype[j]))
+ else if(killnotify_deathtype[j] & HITTYPE_SECONDARY && w == WEP_LASER)
+ {
+ s = "notify_melee_laser";
+ }
+ else if(killnotify_deathtype[j] & HITTYPE_SECONDARY && w == WEP_SHOTGUN)
+ {
+ s = "notify_melee_shotgun";
+ }
+ else if(WEP_VALID(w))
{
- self = get_weaponinfo(killnotify_deathtype[j]);
+ self = get_weaponinfo(w);
s = strcat("weapon", self.netname);
}
else if(killnotify_deathtype[j] == KILL_TEAM_RED)
mySize_y
);
- draw_teamradar_background(hud_panel_radar_background_alpha, hud_panel_radar_foreground_alpha);
+ draw_teamradar_background(hud_panel_radar_foreground_alpha);
for(tm = world; (tm = find(tm, classname, "radarlink")); )
draw_teamradar_link(tm.origin, tm.velocity, tm.team);
pos = (vid_conheight - numsize_y) * cvar("cl_showspeed_position");
drawfont = hud_bigfont;
- drawstringcenter(eX + pos * eY, speed, numsize, '1 1 1', hud_fg_alpha, DRAWFLAG_NORMAL);
+ drawstringcenter(eX + pos * eY, speed, numsize, '1 1 1', autocvar_hud_panel_fg_alpha, DRAWFLAG_NORMAL);
if (cvar("cl_showspeed_z") == 1) {
zspeed = strcat(ftos(fabs(floor( pmove_vel_z * conversion_factor + 0.5 ))), unit);
- drawstringcenter(eX + pos * eY + numsize_y * eY, zspeed, numsize * 0.5, '1 1 1', hud_fg_alpha, DRAWFLAG_NORMAL);
+ drawstringcenter(eX + pos * eY + numsize_y * eY, zspeed, numsize * 0.5, '1 1 1', autocvar_hud_panel_fg_alpha, DRAWFLAG_NORMAL);
}
drawfont = hud_font;
}
if (acceleration > 0)
- HUD_Panel_DrawProgressBar(pos, 0, acceleration * scale * '40 0 0' + sz * eY, rgb, alpha * hud_fg_alpha, DRAWFLAG_NORMAL);
+ HUD_Panel_DrawProgressBar(pos, 0, acceleration * scale * '40 0 0' + sz * eY, rgb, alpha * autocvar_hud_panel_fg_alpha, DRAWFLAG_NORMAL);
else if (acceleration < 0)
- HUD_Panel_DrawProgressBar(pos + acceleration * scale * '40 0 0', 0, -acceleration * scale * '40 0 0' + sz * eY, rgb, alpha * hud_fg_alpha, DRAWFLAG_NORMAL);
+ HUD_Panel_DrawProgressBar(pos + acceleration * scale * '40 0 0', 0, -acceleration * scale * '40 0 0' + sz * eY, rgb, alpha * autocvar_hud_panel_fg_alpha, DRAWFLAG_NORMAL);
}
void HUD_Reset (void)
menu_fade_alpha = 1;
else
menu_fade_alpha = (1 - autocvar__menu_alpha);
- hud_fg_alpha = cvar("hud_fg_alpha");
hud_border_thickness = bound(0, cvar("hud_border_thickness"), 5);
hud_accuracy_border_thickness = bound(0, cvar_or("hud_accuracy_border_thickness", 1), 5);