]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into terencehill/quickmenu
authorterencehill <piuntn@gmail.com>
Mon, 19 Jan 2015 17:05:57 +0000 (18:05 +0100)
committerterencehill <piuntn@gmail.com>
Mon, 19 Jan 2015 17:05:57 +0000 (18:05 +0100)
Conflicts:
_hud_descriptions.cfg
common.it.po
defaultXonotic.cfg
hud_luminos.cfg
hud_luminos_minimal.cfg
hud_luminos_minimal_xhair.cfg
hud_luminos_old.cfg
hud_nexuiz.cfg
qcsrc/client/Main.qc
qcsrc/client/autocvars.qh
qcsrc/client/hud.qc
qcsrc/client/hud.qh
qcsrc/menu/classes.c
qcsrc/menu/xonotic/mainwindow.c

19 files changed:
1  2 
_hud_common.cfg
_hud_descriptions.cfg
common.it.po
hud_luminos.cfg
hud_luminos_minimal.cfg
hud_luminos_minimal_xhair.cfg
hud_luminos_old.cfg
hud_nexuiz.cfg
keybinds.txt
qcsrc/client/Main.qc
qcsrc/client/View.qc
qcsrc/client/autocvars.qh
qcsrc/client/hud.qc
qcsrc/client/hud.qh
qcsrc/client/hud_config.qc
qcsrc/client/mapvoting.qc
qcsrc/client/scoreboard.qc
qcsrc/menu/classes.c
qcsrc/menu/xonotic/mainwindow.c

diff --combined _hud_common.cfg
index 45815299dbe778fe45bea07d8a1f6a11badd687c,5aa1bbfeea3203469aedb2a4b248d08951d12617..c1f580525cf5b01f360db83f1a19403d72231a9a
@@@ -23,6 -23,7 +23,7 @@@ seta hud_colorset_background "7" "neutr
  seta hud_panel_weapons_ammo_full_shells 60 "show 100% of the status bar at this ammo count"
  seta hud_panel_weapons_ammo_full_nails 320 "show 100% of the status bar at this ammo count"
  seta hud_panel_weapons_ammo_full_cells 180 "show 100% of the status bar at this ammo count"
+ seta hud_panel_weapons_ammo_full_plasma 180 "show 100% of the status bar at this ammo count"
  seta hud_panel_weapons_ammo_full_rockets 160 "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"
  
@@@ -37,13 -38,7 +38,13 @@@ seta hud_panel_engineinfo_framecounter_
  seta hud_panel_engineinfo_framecounter_exponentialmovingaverage_new_weight 0.1 "weight of latest data point"
  seta hud_panel_engineinfo_framecounter_exponentialmovingaverage_instantupdate_change_threshold 0.5 "threshold for fps change when to update instantly, to make big fps changes update faster"
  
 +seta hud_panel_quickmenu_file "" "load the quick menu from this file (empty or 0 to disable)"
 +seta hud_panel_quickmenu_translatecommands 0 "when the game is translated, translate strings inside commands too (useful for chat commands)"
 +seta hud_panel_quickmenu_time 5 "quickmenu expires after this number of seconds in the same page"
 +
  // hud panel aliases
 +alias quickmenu "cl_cmd hud quickmenu ${* ?}"
 +
  alias hud_panel_radar_rotate "toggle hud_panel_radar_rotation 0 1 2 3 4"
  alias +hud_panel_radar_maximized "cl_cmd hud radar 1"
  alias -hud_panel_radar_maximized "cl_cmd hud radar 0"
diff --combined _hud_descriptions.cfg
index 48e1f0352a753ca9adab27a3c7c39e29d83d5270,270bd2bd9294693bcbf787666f7b3b2d341e2141..b09ab486a387615e794f3f3714ddd3dd94738ca8
@@@ -128,6 -128,7 +128,7 @@@ seta hud_panel_notify_flip "" "order th
  seta hud_panel_notify_fontsize "" "multiplier for the font size used for player names in the panel"
  seta hud_panel_notify_fadetime "" "fade out time"
  seta hud_panel_notify_time "" "time that a new entry stays until it fades out"
+ seta hud_panel_notify_icon_aspect "" "aspect ratio of total drawing area per icon"
  
  seta hud_panel_timer "" "enable/disable this panel"
  seta hud_panel_timer_pos "" "position of this base of the panel"
@@@ -297,13 -298,12 +298,23 @@@ seta hud_panel_centerprint_fade_subsequ
  seta hud_panel_centerprint_fade_subsequent_minfontsize "" "minimum factor for the font size from the subsequent fading effects"
  seta hud_panel_centerprint_fade_minfontsize "" "minimum factor for the font size from the fading in/out effects"
  
+ seta hud_panel_buffs "" "enable/disable this panel"
+ seta hud_panel_buffs_pos "" "position of this panel"
+ seta hud_panel_buffs_size "" "size of this panel"
+ seta hud_panel_buffs_bg "" "if set to something else than \"\" = override default background"
+ seta hud_panel_buffs_bg_color "" "if set to something else than \"\" = override default panel background color"
+ seta hud_panel_buffs_bg_color_team "" "override panel color with team color in team based games"
+ seta hud_panel_buffs_bg_alpha "" "if set to something else than \"\" = override default panel background alpha"
+ seta hud_panel_buffs_bg_border "" "if set to something else than \"\" = override default size of border around the background"
+ seta hud_panel_buffs_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
++
 +seta hud_panel_quickmenu "" "enable/disable this panel"
 +seta hud_panel_quickmenu_pos "" "position of this base of the panel"
 +seta hud_panel_quickmenu_size "" "size of this panel"
 +seta hud_panel_quickmenu_bg "" "if set to something else than \"\" = override default background"
 +seta hud_panel_quickmenu_bg_color "" "if set to something else than \"\" = override default panel background color"
 +seta hud_panel_quickmenu_bg_color_team "" "override panel color with team color in team based games"
 +seta hud_panel_quickmenu_bg_alpha "" "if set to something else than \"\" = override default panel background alpha"
 +seta hud_panel_quickmenu_bg_border "" "if set to something else than \"\" = override default size of border around the background"
 +seta hud_panel_quickmenu_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
 +seta hud_panel_quickmenu_align "text alignment: 0 left, 0.5 center, 1 right"
diff --combined common.it.po
index 03e94691a12806363dfa6c6b41bfeea69b5b3afe,2afa84f8a6939d3ad0f4bd0426b8198dba46a1c2..cba47047c4b41d608c1de3fb286a33ebe3541853
@@@ -3,17 -3,18 +3,18 @@@
  # This file is distributed under the same license as the PACKAGE package.
  #
  # Translators:
- # terencehill <piuntn@gmail.com>, 2013
+ # Antonio <piuntn@gmail.com>, 2013-2014
  # Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011-2012
+ # Costa <yesbubu@hotmail.it>, 2014
  # Felice Sallustio <fel.sallustio@gmail.com>, 2011
- # terencehill <piuntn@gmail.com>, 2013
+ # Antonio <piuntn@gmail.com>, 2013
  msgid ""
  msgstr ""
  "Project-Id-Version: Xonotic\n"
  "Report-Msgid-Bugs-To: \n"
- "POT-Creation-Date: 2013-10-03 11:55+0200\n"
- "PO-Revision-Date: 2013-11-20 10:44+0000\n"
- "Last-Translator: terencehill <piuntn@gmail.com>\n"
+ "POT-Creation-Date: 2015-01-13 19:41+0100\n"
+ "PO-Revision-Date: 2014-12-31 20:10+0000\n"
+ "Last-Translator: Costa <yesbubu@hotmail.it>\n"
  "Language-Team: Italian (http://www.transifex.com/projects/p/xonotic/language/"
  "it/)\n"
  "Language: it\n"
  msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
  msgstr "ERRORE - IL MENU E' VISIBILE MA NESSUN MENU E' STATO DEFINITO!"
  
- #: qcsrc/client/Main.qc:46
- msgid ""
- "^3Your engine build is outdated\n"
- "^3This Server uses a newer QC VM. Please update!\n"
- msgstr ""
- "^3La tua versione del motore logico è vecchia\n"
- "^3Questo server usa un nuovo QC VM. Per favore aggiornalo!\n"
- #: qcsrc/client/Main.qc:56
- #, c-format
- msgid "^4CSQC Build information: ^1%s\n"
- msgstr "^4Informazioni sulla versione CSQC: ^1%s\n"
- #: qcsrc/client/Main.qc:216 qcsrc/client/Main.qc:232
- #, c-format
- msgid "trying to switch to unsupported team %d\n"
- msgstr "tentando di passare al team non supportato %d\n"
- #: qcsrc/client/Main.qc:835
- #, c-format
- msgid ""
- "Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: "
- "%s)\n"
- msgstr ""
- "Tipo di entity sconosciuta in CSQC_Ent_Update (enttype: %d, edict: %d, "
- "classname: %s)\n"
  #: qcsrc/client/Main.qc:1295
  #, c-format
  msgid "%s (not bound)"
- msgstr "%s (nessun tasto)"
+ msgstr "%s (non associato)"
  
- #: qcsrc/client/Main.qc:1300 qcsrc/client/hud.qc:221
- #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:157
- #, c-format
- msgid "%s (%s)"
- msgstr "%s (%s)"
+ #: qcsrc/client/View.qc:511
+ msgid "Nade timer"
+ msgstr "Timer granata"
  
- #: qcsrc/client/View.qc:1096
+ #: qcsrc/client/View.qc:516
  msgid "Revival progress"
- msgstr "Progresso del risveglio"
+ msgstr "Avanzamento risveglio"
  
  #: qcsrc/client/hud.qc:186
  #, c-format
@@@ -91,284 -63,261 +63,261 @@@ msgstr "Linea d'arrivo
  msgid "Intermediate %d"
  msgstr "Intermedio %d"
  
- #: qcsrc/client/hud.qc:223
- #, c-format
- msgid "%s (%s %s)"
- msgstr "%s (%s %s)"
- #: qcsrc/client/hud.qc:829
+ #: qcsrc/client/hud.qc:805
  msgid "Out of ammo"
  msgstr "Scarica"
  
- #: qcsrc/client/hud.qc:833
+ #: qcsrc/client/hud.qc:809
  msgid "Don't have"
  msgstr "Mancante"
  
- #: qcsrc/client/hud.qc:837
+ #: qcsrc/client/hud.qc:813
  msgid "Unavailable"
  msgstr "Non disponibile"
  
- #: qcsrc/client/hud.qc:1704 qcsrc/client/hud.qc:1705 qcsrc/client/hud.qc:2068
+ #: qcsrc/client/hud.qc:1751 qcsrc/client/hud.qc:1752 qcsrc/client/hud.qc:2109
  #, c-format
  msgid "Player %d"
  msgstr "Giocatore %d"
  
- #: qcsrc/client/hud.qc:2384
+ #: qcsrc/client/hud.qc:2417
  msgid "^1Intermediate 1 (+15.42)"
  msgstr "^1Intermedio 1 (+15.42)"
  
- #: qcsrc/client/hud.qc:2386 qcsrc/client/hud.qc:2428 qcsrc/client/hud.qc:2469
+ #: qcsrc/client/hud.qc:2419 qcsrc/client/hud.qc:2461 qcsrc/client/hud.qc:2502
  #, c-format
  msgid "^1PENALTY: %.1f (%s)"
  msgstr "^1PENALITÀ: %.1f (%s)"
  
- #: qcsrc/client/hud.qc:2471
+ #: qcsrc/client/hud.qc:2504
  #, c-format
  msgid "^2PENALTY: %.1f (%s)"
  msgstr "^2PENALITÀ: %.1f (%s)"
  
- #: qcsrc/client/hud.qc:2501
+ #: qcsrc/client/hud.qc:2534
  msgid "^1You must answer before entering hud configure mode\n"
- msgstr ""
- "^1Devi rispondere prima di entrare nella modalità di configurazione "
- "dell'HUD\n"
+ msgstr "^1Devi rispondere prima di entrare in modalità configurazione HUD\n"
  
- #: qcsrc/client/hud.qc:2506
+ #: qcsrc/client/hud.qc:2539
  msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
  msgstr "^2Nome ^7invece di \"^1Giocatore anonimo^7\" nelle statistiche"
  
- #: qcsrc/client/hud.qc:2586
+ #: qcsrc/client/hud.qc:2618
  msgid "A vote has been called for:"
  msgstr "Un voto è stato chiamato per:"
  
- #: qcsrc/client/hud.qc:2588
+ #: qcsrc/client/hud.qc:2620
  msgid "Allow servers to store and display your name?"
- msgstr "Permetti ai server di salvare e visualizzare il tuo nome?"
+ msgstr "Permetti ai server di salvare e mostrare il tuo nome?"
  
- #: qcsrc/client/hud.qc:2592
+ #: qcsrc/client/hud.qc:2624
  msgid "^1Configure the HUD"
  msgstr "^1Configura l'HUD"
  
- #: qcsrc/client/hud.qc:2596
+ #: qcsrc/client/hud.qc:2628
  #, c-format
  msgid "Yes (%s): %d"
  msgstr "Sì (%s): %d"
  
- #: qcsrc/client/hud.qc:2598
+ #: qcsrc/client/hud.qc:2630
  #, c-format
  msgid "No (%s): %d"
  msgstr "No (%s): %d"
  
- #: qcsrc/client/hud.qc:3169 qcsrc/client/hud.qc:3172 qcsrc/client/hud.qc:3174
+ #: qcsrc/client/hud.qc:3191 qcsrc/client/hud.qc:3194 qcsrc/client/hud.qc:3196
  msgid "Personal best"
  msgstr "Miglior personale"
  
- #: qcsrc/client/hud.qc:3187 qcsrc/client/hud.qc:3190 qcsrc/client/hud.qc:3192
+ #: qcsrc/client/hud.qc:3209 qcsrc/client/hud.qc:3212 qcsrc/client/hud.qc:3214
  msgid "Server best"
  msgstr "Migliori del server"
  
- #: qcsrc/client/hud.qc:3552
+ #: qcsrc/client/hud.qc:3576
  msgid "^3Player^7: This is the chat area."
- msgstr "^3Giocatore^7: Questa è l'area della chat."
+ msgstr "^3Giocatore^7: Questa è l'area chat."
  
- #: qcsrc/client/hud.qc:3618
+ #: qcsrc/client/hud.qc:3641
  #, c-format
  msgid "FPS: %.*f"
  msgstr "FPS: %.*f"
  
- #: qcsrc/client/hud.qc:3683
+ #: qcsrc/client/hud.qc:3705
  msgid "^1Observing"
  msgstr "^1Osservando"
  
- #: qcsrc/client/hud.qc:3686 qcsrc/client/hud.qc:3688
+ #: qcsrc/client/hud.qc:3707
  #, c-format
  msgid "^1Spectating: ^7%s"
  msgstr "^1Assistendo: ^7%s"
  
- #: qcsrc/client/hud.qc:3693
+ #: qcsrc/client/hud.qc:3711
  #, c-format
  msgid "^1Press ^3%s^1 to spectate"
  msgstr "^1Premi ^3%s^1 per assistere"
  
- #: qcsrc/client/hud.qc:3695
+ #: qcsrc/client/hud.qc:3713
  #, c-format
  msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
  msgstr "^1Premi ^3%s^1 o ^3%s^1 per prossimo o precedente giocatore"
  
- #: qcsrc/client/hud.qc:3699
+ #: qcsrc/client/hud.qc:3717
  #, c-format
  msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
  msgstr "^1Usa ^3%s^1 o ^3%s^1 per cambiare velocità"
  
- #: qcsrc/client/hud.qc:3701
+ #: qcsrc/client/hud.qc:3719
  #, c-format
  msgid "^1Press ^3%s^1 to observe"
  msgstr "^1Premi ^3%s^1 per osservare"
  
- #: qcsrc/client/hud.qc:3704
+ #: qcsrc/client/hud.qc:3722
  #, c-format
  msgid "^1Press ^3%s^1 for gamemode info"
- msgstr "^1Premi ^3%s^1 per informazioni sulla modalità di gioco"
- #: qcsrc/client/hud.qc:3708
- msgid "^1Wait for your turn to join"
- msgstr "^1Attendi il tuo turno per entrare"
+ msgstr "^1Premi ^3%s^1 per info sul tipo di gioco"
  
- #: qcsrc/client/hud.qc:3714
+ #: qcsrc/client/hud.qc:3730
  msgid "^1Match has already begun"
  msgstr "^1La partita è già iniziata"
  
- #: qcsrc/client/hud.qc:3716
+ #: qcsrc/client/hud.qc:3732
  msgid "^1You have no more lives left"
  msgstr "^1Non hai più vite a disposizione"
  
- #: qcsrc/client/hud.qc:3718 qcsrc/client/hud.qc:3721
+ #: qcsrc/client/hud.qc:3734 qcsrc/client/hud.qc:3737
  #, c-format
  msgid "^1Press ^3%s^1 to join"
  msgstr "^1Premi ^3%s^1 per entrare"
  
- #: qcsrc/client/hud.qc:3729
+ #: qcsrc/client/hud.qc:3745
  #, c-format
  msgid "^1Game starts in ^3%d^1 seconds"
  msgstr "^1La partita inizia tra ^3%d^1 secondi"
  
- #: qcsrc/client/hud.qc:3736
+ #: qcsrc/client/hud.qc:3752
  msgid "^2Currently in ^1warmup^2 stage!"
  msgstr "^2Attualmente in ^1warmup^2!"
  
- #: qcsrc/client/hud.qc:3751
+ #: qcsrc/client/hud.qc:3767
  #, c-format
  msgid "%sPress ^3%s%s to end warmup"
  msgstr "%sPremi ^3%s%s per terminare il warmup"
  
- #: qcsrc/client/hud.qc:3753
+ #: qcsrc/client/hud.qc:3769
  #, c-format
  msgid "%sPress ^3%s%s once you are ready"
  msgstr "%sPremi ^3%s%s una volta che sei pronto"
  
- #: qcsrc/client/hud.qc:3758
+ #: qcsrc/client/hud.qc:3774
  msgid "^2Waiting for others to ready up to end warmup..."
  msgstr "^2Attendendo che gli altri siano pronti per terminare il warmup..."
  
- #: qcsrc/client/hud.qc:3760
+ #: qcsrc/client/hud.qc:3776
  msgid "^2Waiting for others to ready up..."
  msgstr "^2Attendendo che gli altri siano pronti..."
  
- #: qcsrc/client/hud.qc:3766
+ #: qcsrc/client/hud.qc:3782
  #, c-format
  msgid "^2Press ^3%s^2 to end warmup"
  msgstr "^2Premi ^3%s^2 per terminare il warmup"
  
- #: qcsrc/client/hud.qc:3787
+ #: qcsrc/client/hud.qc:3803
  msgid "Teamnumbers are unbalanced!"
  msgstr "Numero di giocatori per squadra sbilanciato!"
  
- #: qcsrc/client/hud.qc:3792
+ #: qcsrc/client/hud.qc:3808
  #, c-format
  msgid " Press ^3%s%s to adjust"
  msgstr " Premi ^3%s%s per aggiustare"
  
- #: qcsrc/client/hud.qc:3800
+ #: qcsrc/client/hud.qc:3816
  msgid "^7Press ^3ESC ^7to show HUD options."
  msgstr "^7Premi ^3ESC ^7per mostrare le opzioni dell'HUD."
  
- #: qcsrc/client/hud.qc:3802
+ #: qcsrc/client/hud.qc:3818
  msgid "^3Doubleclick ^7a panel for panel-specific options."
  msgstr "^3Doppio-click ^7su un pannello per le sue specifiche opzioni."
  
- #: qcsrc/client/hud.qc:3804
+ #: qcsrc/client/hud.qc:3820
  msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
  msgstr "^3CTRL ^7per disabilitare il test di collisione, ^3SHIFT ^7e"
  
- #: qcsrc/client/hud.qc:3806
+ #: qcsrc/client/hud.qc:3822
  msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
  msgstr "^3ALT ^7+ ^3ARROW KEYS ^7per fini aggiustamenti."
  
- #: qcsrc/client/hud.qc:3854
+ #: qcsrc/client/hud.qc:3869
  msgid " qu/s"
  msgstr " qu/s"
  
- #: qcsrc/client/hud.qc:3858
+ #: qcsrc/client/hud.qc:3873
  msgid " m/s"
  msgstr " m/s"
  
- #: qcsrc/client/hud.qc:3862
+ #: qcsrc/client/hud.qc:3877
  msgid " km/h"
  msgstr " km/h"
  
- #: qcsrc/client/hud.qc:3866
+ #: qcsrc/client/hud.qc:3881
  msgid " mph"
  msgstr " mph"
  
- #: qcsrc/client/hud.qc:3870
+ #: qcsrc/client/hud.qc:3885
  msgid " knots"
  msgstr " nodi"
  
- #: qcsrc/client/hud.qc:4547
- msgid "Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"
- msgstr ""
- "Corretti automaticamente numeri di pannello sbagliati/mancanti in "
- "_hud_panelorder\n"
- #: qcsrc/client/hud_config.qc:196
+ #: qcsrc/client/hud_config.qc:197
  #, c-format
  msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
  msgstr "^2Esportato con successo in %s! (nota: E' salvato in data/data/)\n"
  
- #: qcsrc/client/hud_config.qc:200
+ #: qcsrc/client/hud_config.qc:201
  #, c-format
  msgid "^1Couldn't write to %s\n"
  msgstr "^1Impossibile scrivere in %s\n"
  
- #: qcsrc/client/mapvoting.qc:28
+ #: qcsrc/client/mapvoting.qc:37
  msgid " (1 vote)"
  msgstr " (1 voto)"
  
- #: qcsrc/client/mapvoting.qc:30
+ #: qcsrc/client/mapvoting.qc:39
  #, c-format
  msgid " (%d votes)"
  msgstr " (%d voti)"
  
- #: qcsrc/client/mapvoting.qc:118
+ #: qcsrc/client/mapvoting.qc:226
  msgid "Don't care"
  msgstr "Non importa"
  
- #: qcsrc/client/mapvoting.qc:203
+ #: qcsrc/client/mapvoting.qc:318
+ msgid "Decide the gametype"
+ msgstr "Decidere il tipo di gioco"
+ #: qcsrc/client/mapvoting.qc:318
  msgid "Vote for a map"
  msgstr "Vota per una mappa"
  
- #: qcsrc/client/mapvoting.qc:209
+ #: qcsrc/client/mapvoting.qc:331
  #, c-format
  msgid "%d seconds left"
  msgstr "%d secondi rimanenti"
  
- #: qcsrc/client/mapvoting.qc:273
+ #: qcsrc/client/mapvoting.qc:415
  msgid ""
  "mv_mapdownload: ^3You're not supposed to use this command on your own!\n"
  msgstr "mv_mapdownload: ^3Non avrai creduto di poter usare questo comando!\n"
  
- #: qcsrc/client/mapvoting.qc:283
+ #: qcsrc/client/mapvoting.qc:425
  msgid "^1Error:^7 Couldn't find pak index.\n"
  msgstr "^1Errore:^7 Impossibile trovare il pak index.\n"
  
- #: qcsrc/client/mapvoting.qc:292
+ #: qcsrc/client/mapvoting.qc:434
  msgid "Requesting preview...\n"
  msgstr "Richiedendo l'anteprima...\n"
  
- #: qcsrc/client/miscfunctions.qc:98
+ #: qcsrc/client/miscfunctions.qc:101
  msgid "Trying to remove a team which is not in the teamlist!"
  msgstr "Tentando di rimuovere una squadra che non è nella lista delle squadre!"
  
- #: qcsrc/client/movetypes.qc:163
- #, c-format
- msgid "Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"
- msgstr "Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"
- #: qcsrc/client/movetypes.qc:166
- #, c-format
- msgid "Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"
- msgstr "Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"
  #: qcsrc/client/scoreboard.qc:19
  msgid "SCO^bckills"
  msgstr "uccisioni pp"
@@@ -487,7 -436,7 +436,7 @@@ msgstr "ritorni
  
  #: qcsrc/client/scoreboard.qc:48
  msgid "SCO^revivals"
- msgstr "ravvivamenti"
+ msgstr "risvegli"
  
  #: qcsrc/client/scoreboard.qc:49
  msgid "SCO^score"
@@@ -505,33 -454,34 +454,34 @@@ msgstr "presi
  msgid "SCO^ticks"
  msgstr "tick"
  
- #: qcsrc/client/scoreboard.qc:251
+ #: qcsrc/client/scoreboard.qc:237
  msgid ""
  "You can modify the scoreboard using the ^2scoreboard_columns_set command.\n"
  msgstr ""
- "Puoi modificare lo scoreboard usando il comando ^2scoreboard_columns_set.\n"
+ "Puoi modificare la tabella dei punteggi usando il comando "
+ "^2scoreboard_columns_set.\n"
  
- #: qcsrc/client/scoreboard.qc:252
+ #: qcsrc/client/scoreboard.qc:238
  msgid "^3|---------------------------------------------------------------|\n"
  msgstr "^3|---------------------------------------------------------------|\n"
  
- #: qcsrc/client/scoreboard.qc:253
+ #: qcsrc/client/scoreboard.qc:239
  msgid "Usage:\n"
  msgstr "Uso:\n"
  
- #: qcsrc/client/scoreboard.qc:254
+ #: qcsrc/client/scoreboard.qc:240
  msgid "^2scoreboard_columns_set default\n"
  msgstr "^2scoreboard_columns_set default\n"
  
- #: qcsrc/client/scoreboard.qc:255
+ #: qcsrc/client/scoreboard.qc:241
  msgid "^2scoreboard_columns_set ^7field1 field2 ...\n"
  msgstr "^2scoreboard_columns_set ^7campo1 campo2 ...\n"
  
- #: qcsrc/client/scoreboard.qc:256
+ #: qcsrc/client/scoreboard.qc:242
  msgid "The following field names are recognized (case insensitive):\n"
  msgstr "I seguenti nomi dei campi sono riconosciuti (non case-sensitive):\n"
  
- #: qcsrc/client/scoreboard.qc:257
+ #: qcsrc/client/scoreboard.qc:243
  msgid ""
  "You can use a ^3|^7 to start the right-aligned fields.\n"
  "\n"
@@@ -539,43 -489,43 +489,43 @@@ msgstr "
  "Puoi usare un ^3|^7 per iniziare i campi allineati a destra.\n"
  "\n"
  
- #: qcsrc/client/scoreboard.qc:259
+ #: qcsrc/client/scoreboard.qc:245
  msgid "^3name^7 or ^3nick^7             Name of a player\n"
  msgstr "^3name^7 o ^3nick^7             Nome di un giocatore\n"
  
- #: qcsrc/client/scoreboard.qc:260
+ #: qcsrc/client/scoreboard.qc:246
  msgid "^3ping^7                     Ping time\n"
  msgstr "^3ping^7                     Tempo di ping\n"
  
- #: qcsrc/client/scoreboard.qc:261
+ #: qcsrc/client/scoreboard.qc:247
  msgid "^3pl^7                       Packet loss\n"
  msgstr "^3pl^7                       Perdita Pacchetti\n"
  
- #: qcsrc/client/scoreboard.qc:262
+ #: qcsrc/client/scoreboard.qc:248
  msgid "^3kills^7                    Number of kills\n"
  msgstr "^3kills^7                    Numero di uccisioni\n"
  
- #: qcsrc/client/scoreboard.qc:263
+ #: qcsrc/client/scoreboard.qc:249
  msgid "^3deaths^7                   Number of deaths\n"
  msgstr "^3deaths^7                   Numero di morti\n"
  
- #: qcsrc/client/scoreboard.qc:264
+ #: qcsrc/client/scoreboard.qc:250
  msgid "^3suicides^7                 Number of suicides\n"
  msgstr "^3suicides^7                 Numero di suicidi\n"
  
- #: qcsrc/client/scoreboard.qc:265
+ #: qcsrc/client/scoreboard.qc:251
  msgid "^3frags^7                    kills - suicides\n"
  msgstr "^3frags^7                    uccisioni - suicidi\n"
  
- #: qcsrc/client/scoreboard.qc:266
+ #: qcsrc/client/scoreboard.qc:252
  msgid "^3kd^7                       The kill-death ratio\n"
  msgstr "^3kd^7                       Rapporto uccisioni-morti\n"
  
- #: qcsrc/client/scoreboard.qc:267
+ #: qcsrc/client/scoreboard.qc:253
  msgid "^3sum^7                      frags - deaths\n"
  msgstr "^3sum^7                      uccisioni - morti\n"
  
- #: qcsrc/client/scoreboard.qc:268
+ #: qcsrc/client/scoreboard.qc:254
  msgid ""
  "^3caps^7                     How often a flag (CTF) or a key (KeyHunt) was "
  "captured\n"
@@@ -583,7 -533,7 +533,7 @@@ msgstr "
  "^3caps^7                     Per quante volte una bandiera (CTF) o una "
  "chiave (KeyHunt) è stata catturata\n"
  
- #: qcsrc/client/scoreboard.qc:269
+ #: qcsrc/client/scoreboard.qc:255
  msgid ""
  "^3pickups^7                  How often a flag (CTF) or a key (KeyHunt) or a "
  "ball (Keepaway) was picked up\n"
@@@ -591,36 -541,36 +541,36 @@@ msgstr "
  "^3pickups^7                  Per quante volte una bandiera (CTF) o una "
  "chiave (KeyHunt) o una palla (Keepaway) viene raccolta\n"
  
- #: qcsrc/client/scoreboard.qc:270
+ #: qcsrc/client/scoreboard.qc:256
  msgid "^3captime^7                  Time of fastest cap (CTF)\n"
  msgstr "^3captime^7                  Tempo della cattura più veloce (CTF)\n"
  
- #: qcsrc/client/scoreboard.qc:271
+ #: qcsrc/client/scoreboard.qc:257
  msgid "^3fckills^7                  Number of flag carrier kills\n"
  msgstr ""
  "^3fckills^7                  Numero di uccisioni dei portatori di bandiera\n"
  
- #: qcsrc/client/scoreboard.qc:272
+ #: qcsrc/client/scoreboard.qc:258
  msgid "^3returns^7                  Number of flag returns\n"
  msgstr "^3returns^7                  Numero di riporti della bandiera\n"
  
- #: qcsrc/client/scoreboard.qc:273
+ #: qcsrc/client/scoreboard.qc:259
  msgid "^3drops^7                    Number of flag drops\n"
  msgstr "^3drops^7                    Numero di bandiere cadute\n"
  
- #: qcsrc/client/scoreboard.qc:274
+ #: qcsrc/client/scoreboard.qc:260
  msgid "^3lives^7                    Number of lives (LMS)\n"
  msgstr "^3lives^7                    Numero di vite (LMS)\n"
  
- #: qcsrc/client/scoreboard.qc:275
+ #: qcsrc/client/scoreboard.qc:261
  msgid "^3rank^7                     Player rank\n"
  msgstr "^3rank^7                     Posizione del giocatore\n"
  
- #: qcsrc/client/scoreboard.qc:276
+ #: qcsrc/client/scoreboard.qc:262
  msgid "^3pushes^7                   Number of players pushed into void\n"
  msgstr "^3pushes^7                   Numero di giocatori spinti nel vuoto\n"
  
- #: qcsrc/client/scoreboard.qc:277
+ #: qcsrc/client/scoreboard.qc:263
  msgid ""
  "^3destroyed^7                Number of keys destroyed by pushing them into "
  "void\n"
@@@ -628,42 -578,42 +578,42 @@@ msgstr "
  "^3destroyed^7                Numero di chiavi distrutte spingendole nel "
  "vuoto\n"
  
- #: qcsrc/client/scoreboard.qc:278
+ #: qcsrc/client/scoreboard.qc:264
  msgid "^3kckills^7                  Number of keys carrier kills\n"
  msgstr ""
  "^3kckills^7                  Numero di uccisioni di portatori di chiavi\n"
  
- #: qcsrc/client/scoreboard.qc:279
+ #: qcsrc/client/scoreboard.qc:265
  msgid "^3losses^7                   Number of times a key was lost\n"
  msgstr ""
  "^3losses^7                   Numero di volte che una chiave si è persa\n"
  
- #: qcsrc/client/scoreboard.qc:280
+ #: qcsrc/client/scoreboard.qc:266
  msgid "^3laps^7                     Number of laps finished (race/cts)\n"
  msgstr "^3laps^7                     Numero di giri completati (corsa/cts)\n"
  
- #: qcsrc/client/scoreboard.qc:281
+ #: qcsrc/client/scoreboard.qc:267
  msgid "^3time^7                     Total time raced (race/cts)\n"
  msgstr "^3time^7                     Tempo totale (corsa/cts)\n"
  
- #: qcsrc/client/scoreboard.qc:282
+ #: qcsrc/client/scoreboard.qc:268
  msgid "^3fastest^7                  Time of fastest lap (race/cts)\n"
  msgstr "^3fastest^7                  Tempo del giro più veloce (corsa/cts)\n"
  
- #: qcsrc/client/scoreboard.qc:283
+ #: qcsrc/client/scoreboard.qc:269
  msgid "^3ticks^7                    Number of ticks (DOM)\n"
  msgstr "^3ticks^7                    Numero di tick (DOM)\n"
  
- #: qcsrc/client/scoreboard.qc:284
+ #: qcsrc/client/scoreboard.qc:270
  msgid "^3takes^7                    Number of domination points taken (DOM)\n"
  msgstr "^3takes^7                    Numero di punti di dominio presi (DOM)\n"
  
- #: qcsrc/client/scoreboard.qc:285
+ #: qcsrc/client/scoreboard.qc:271
  msgid "^3bckills^7                  Number of ball carrier kills\n"
  msgstr ""
  "^3bckills^7                  Numbero di uccisioni di portatori di palla\n"
  
- #: qcsrc/client/scoreboard.qc:286
+ #: qcsrc/client/scoreboard.qc:272
  msgid ""
  "^3bctime^7                   Total amount of time holding the ball in "
  "Keepaway\n"
@@@ -671,7 -621,7 +621,7 @@@ msgstr "
  "^3bctime^7                   Tempo totale di possesso della palla in "
  "Keepaway\n"
  
- #: qcsrc/client/scoreboard.qc:287
+ #: qcsrc/client/scoreboard.qc:273
  msgid ""
  "^3score^7                    Total score\n"
  "\n"
@@@ -679,7 -629,7 +629,7 @@@ msgstr "
  "^3score^7                    Punteggio totale\n"
  "\n"
  
- #: qcsrc/client/scoreboard.qc:289
+ #: qcsrc/client/scoreboard.qc:275
  msgid ""
  "Before a field you can put a + or - sign, then a comma separated list\n"
  "of game types, then a slash, to make the field show up only in these\n"
@@@ -693,11 -643,11 +643,11 @@@ msgstr "
  "questi\n"
  "o in tutti tranne questi tipi di gioco. Puoi anche specificare "
  "'all' (tutti)\n"
- "come campo per mostrare tutti i campi disponibili per l'attuale modo di "
+ "come campo per mostrare tutti i campi disponibili per l'attuale modalità di "
  "gioco.\n"
  "\n"
  
- #: qcsrc/client/scoreboard.qc:294
+ #: qcsrc/client/scoreboard.qc:280
  msgid ""
  "The special game type names 'teams' and 'noteams' can be used to\n"
  "include/exclude ALL teams/noteams game modes.\n"
  msgstr ""
  "I nomi speciali per il tipo di gioco 'teams' e 'noteams' possono essere "
  "usati\n"
- "per includere/escludere TUTTE le modalità con team/senza team.\n"
+ "per includere/escludere TUTTE le modalità a squadre/senza squadre.\n"
  "\n"
  
- #: qcsrc/client/scoreboard.qc:297
+ #: qcsrc/client/scoreboard.qc:283
  msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"
  msgstr ""
  "Esempio: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"
  
- #: qcsrc/client/scoreboard.qc:298
+ #: qcsrc/client/scoreboard.qc:284
  msgid ""
  "will display name, ping and pl aligned to the left, and the fields\n"
  "right of the vertical bar aligned to the right.\n"
@@@ -721,7 -671,7 +671,7 @@@ msgstr "
  "mostrerà nome, ping e pl allineati a sinistra, e i campi a destra\n"
  "della barra verticale allineati a destra.\n"
  
- #: qcsrc/client/scoreboard.qc:300
+ #: qcsrc/client/scoreboard.qc:286
  msgid ""
  "'field3' will only be shown in CTF, and 'field4' will be shown in all\n"
  "other gamemodes except DM.\n"
@@@ -729,109 -679,105 +679,105 @@@ msgstr "
  "'field3' sarà mostrato solo in CTF, e 'field4' sarà mostrato in tutte\n"
  "le altre modalità di gioco eccetto DM.\n"
  
- #: qcsrc/client/scoreboard.qc:534 qcsrc/client/scoreboard.qc:541
+ #: qcsrc/client/scoreboard.qc:526 qcsrc/client/scoreboard.qc:533
  #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:121
  #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:122
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:193
  #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:235
  #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:240
  msgid "N/A"
  msgstr "N.D."
  
- #: qcsrc/client/scoreboard.qc:984
+ #: qcsrc/client/scoreboard.qc:982
  #, c-format
  msgid "Accuracy stats (average %d%%)"
  msgstr "Statistiche precisione (media %d%%)"
  
- #: qcsrc/client/scoreboard.qc:1047
- #, c-format
- msgid "%d%%"
- msgstr "%d%%"
- #: qcsrc/client/scoreboard.qc:1105
+ #: qcsrc/client/scoreboard.qc:1111
  msgid "Map stats:"
  msgstr "Statistiche mappa:"
  
- #: qcsrc/client/scoreboard.qc:1121
+ #: qcsrc/client/scoreboard.qc:1129
+ msgid "Monsters killed:"
+ msgstr "Mostri uccisi:"
+ #: qcsrc/client/scoreboard.qc:1136
  msgid "Secrets found:"
  msgstr "Segreti trovati:"
  
- #: qcsrc/client/scoreboard.qc:1148
+ #: qcsrc/client/scoreboard.qc:1164
  msgid "Rankings"
  msgstr "Classifica"
  
- #: qcsrc/client/scoreboard.qc:1244
+ #: qcsrc/client/scoreboard.qc:1260
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:49
  msgid "Scoreboard"
- msgstr "Tabella dei punteggi"
+ msgstr "Punteggi"
  
- #: qcsrc/client/scoreboard.qc:1303
+ #: qcsrc/client/scoreboard.qc:1319
  #, c-format
  msgid "Speed award: %d ^7(%s^7)"
  msgstr "Velocità migliore: %d ^7(%s^7)"
  
- #: qcsrc/client/scoreboard.qc:1307
+ #: qcsrc/client/scoreboard.qc:1323
  #, c-format
  msgid "All-time fastest: %d ^7(%s^7)"
  msgstr "Tempo più veloce in assoluto: %d ^7(%s^7)"
  
- #: qcsrc/client/scoreboard.qc:1341
+ #: qcsrc/client/scoreboard.qc:1361
  msgid "Spectators"
  msgstr "Spettatori"
  
- #: qcsrc/client/scoreboard.qc:1348
+ #: qcsrc/client/scoreboard.qc:1368
  #, c-format
- msgid "playing on ^2%s^7"
- msgstr "giocando in ^2%s^7"
+ msgid "playing ^3%s^7 on ^2%s^7"
+ msgstr "giocando a ^3%s^7 in ^2%s^7"
  
- #: qcsrc/client/scoreboard.qc:1355 qcsrc/client/scoreboard.qc:1360
+ #: qcsrc/client/scoreboard.qc:1375 qcsrc/client/scoreboard.qc:1380
  #, c-format
  msgid " for up to ^1%1.0f minutes^7"
  msgstr " fino a ^1%1.0f minuti^7"
  
- #: qcsrc/client/scoreboard.qc:1364 qcsrc/client/scoreboard.qc:1383
+ #: qcsrc/client/scoreboard.qc:1384 qcsrc/client/scoreboard.qc:1403
  msgid " or"
  msgstr " o"
  
- #: qcsrc/client/scoreboard.qc:1367 qcsrc/client/scoreboard.qc:1374
+ #: qcsrc/client/scoreboard.qc:1387 qcsrc/client/scoreboard.qc:1394
  #, c-format
  msgid " until ^3%s %s^7"
  msgstr " fino a ^3%s %s^7"
  
- #: qcsrc/client/scoreboard.qc:1368 qcsrc/client/scoreboard.qc:1375
- #: qcsrc/client/scoreboard.qc:1387 qcsrc/client/scoreboard.qc:1394
+ #: qcsrc/client/scoreboard.qc:1388 qcsrc/client/scoreboard.qc:1395
+ #: qcsrc/client/scoreboard.qc:1407 qcsrc/client/scoreboard.qc:1414
  msgid "SCO^points"
- msgstr "punti"
+ msgstr "SCO^punti"
  
- #: qcsrc/client/scoreboard.qc:1369 qcsrc/client/scoreboard.qc:1376
- #: qcsrc/client/scoreboard.qc:1388 qcsrc/client/scoreboard.qc:1395
+ #: qcsrc/client/scoreboard.qc:1389 qcsrc/client/scoreboard.qc:1396
+ #: qcsrc/client/scoreboard.qc:1408 qcsrc/client/scoreboard.qc:1415
  msgid "SCO^is beaten"
- msgstr "è battuto"
+ msgstr "SCO^è battuto"
  
- #: qcsrc/client/scoreboard.qc:1386 qcsrc/client/scoreboard.qc:1393
+ #: qcsrc/client/scoreboard.qc:1406 qcsrc/client/scoreboard.qc:1413
  #, c-format
  msgid " until a lead of ^3%s %s^7"
  msgstr " fino a che si vince di ^3%s %s^7"
  
- #: qcsrc/client/scoreboard.qc:1414
+ #: qcsrc/client/scoreboard.qc:1435
  #, c-format
  msgid "^1Respawning in ^3%s^1..."
  msgstr "^1Rinascita in ^3%s^1..."
  
- #: qcsrc/client/scoreboard.qc:1424
+ #: qcsrc/client/scoreboard.qc:1445
  #, c-format
  msgid "You are dead, wait ^3%s^7 before respawning"
  msgstr "Sei morto, aspetta ^3%s^7 prima di rinascere"
  
- #: qcsrc/client/scoreboard.qc:1433
+ #: qcsrc/client/scoreboard.qc:1454
  #, c-format
  msgid "You are dead, press ^2%s^7 to respawn"
  msgstr "Sei morto, premi ^2%s^7 per rinascere"
  
- #: qcsrc/client/target_music.qc:94 qcsrc/client/target_music.qc:183
- #, c-format
- msgid "Cannot initialize sound %s\n"
- msgstr "Impossibile inizializzare il suono %s\n"
- #: qcsrc/client/tturrets.qc:299 qcsrc/client/waypointsprites.qc:591
+ #: qcsrc/client/tturrets.qc:299 qcsrc/client/waypointsprites.qc:558
  msgid "Spam"
  msgstr "Spam"
  
@@@ -848,217 -794,193 +794,193 @@@ msgstr "Nessun tiratore destro!
  msgid "No left gunner!"
  msgstr "Nessun tiratore sinistro!"
  
- #: qcsrc/client/waypointsprites.qc:254
+ #: qcsrc/client/waypointsprites.qc:236
  msgid "Push"
  msgstr "Spingi"
  
- #: qcsrc/client/waypointsprites.qc:255
+ #: qcsrc/client/waypointsprites.qc:237
  msgid "Destroy"
  msgstr "Distruggi"
  
- #: qcsrc/client/waypointsprites.qc:256
+ #: qcsrc/client/waypointsprites.qc:238
  msgid "Defend"
  msgstr "Difendi"
  
- #: qcsrc/client/waypointsprites.qc:257
+ #: qcsrc/client/waypointsprites.qc:239
  msgid "Blue base"
  msgstr "Base Blu"
  
- #: qcsrc/client/waypointsprites.qc:258
+ #: qcsrc/client/waypointsprites.qc:240
  msgid "DANGER"
  msgstr "PERICOLO"
  
- #: qcsrc/client/waypointsprites.qc:259
+ #: qcsrc/client/waypointsprites.qc:241
  msgid "Enemy carrier"
  msgstr "Portatore nemico"
  
- #: qcsrc/client/waypointsprites.qc:260
+ #: qcsrc/client/waypointsprites.qc:242
  msgid "Flag carrier"
  msgstr "Portatore bandiera"
  
- #: qcsrc/client/waypointsprites.qc:261
+ #: qcsrc/client/waypointsprites.qc:243
  msgid "Dropped flag"
  msgstr "Bandiera persa"
  
- #: qcsrc/client/waypointsprites.qc:262
+ #: qcsrc/client/waypointsprites.qc:244
  msgid "Help me!"
  msgstr "Aiuto!"
  
- #: qcsrc/client/waypointsprites.qc:263
+ #: qcsrc/client/waypointsprites.qc:245
  msgid "Here"
  msgstr "Qui"
  
- #: qcsrc/client/waypointsprites.qc:264
+ #: qcsrc/client/waypointsprites.qc:246
  msgid "Dropped key"
  msgstr "Chiave lasciata"
  
- #: qcsrc/client/waypointsprites.qc:265 qcsrc/client/waypointsprites.qc:267
- #: qcsrc/client/waypointsprites.qc:268 qcsrc/client/waypointsprites.qc:269
- #: qcsrc/client/waypointsprites.qc:270
+ #: qcsrc/client/waypointsprites.qc:247 qcsrc/client/waypointsprites.qc:249
+ #: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+ #: qcsrc/client/waypointsprites.qc:252
  msgid "Key carrier"
  msgstr "Portatore chiave"
  
- #: qcsrc/client/waypointsprites.qc:266
+ #: qcsrc/client/waypointsprites.qc:248
  msgid "Run here"
  msgstr "Corri qui"
  
- #: qcsrc/client/waypointsprites.qc:271
+ #: qcsrc/client/waypointsprites.qc:253
  msgid "Red base"
  msgstr "Base Rossa"
  
- #: qcsrc/client/waypointsprites.qc:272
+ #: qcsrc/client/waypointsprites.qc:254
  msgid "Waypoint"
  msgstr "Waypoint"
  
- #: qcsrc/client/waypointsprites.qc:273 qcsrc/client/waypointsprites.qc:274
- #: qcsrc/client/waypointsprites.qc:275
+ #: qcsrc/client/waypointsprites.qc:255 qcsrc/client/waypointsprites.qc:256
+ #: qcsrc/client/waypointsprites.qc:257
  msgid "Generator"
  msgstr "Generatore"
  
+ #: qcsrc/client/waypointsprites.qc:258 qcsrc/client/waypointsprites.qc:259
+ #: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+ #: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+ #: qcsrc/client/waypointsprites.qc:264 qcsrc/client/waypointsprites.qc:265
+ #: qcsrc/client/waypointsprites.qc:274 qcsrc/client/waypointsprites.qc:275
  #: qcsrc/client/waypointsprites.qc:276 qcsrc/client/waypointsprites.qc:277
- #: qcsrc/client/waypointsprites.qc:278 qcsrc/client/waypointsprites.qc:279
- #: qcsrc/client/waypointsprites.qc:280 qcsrc/client/waypointsprites.qc:281
- #: qcsrc/client/waypointsprites.qc:282 qcsrc/client/waypointsprites.qc:283
- #: qcsrc/client/waypointsprites.qc:307 qcsrc/client/waypointsprites.qc:308
- #: qcsrc/client/waypointsprites.qc:309 qcsrc/client/waypointsprites.qc:310
- #: qcsrc/client/waypointsprites.qc:311
+ #: qcsrc/client/waypointsprites.qc:278
  msgid "Control point"
  msgstr "Punto di controllo"
  
- #: qcsrc/client/waypointsprites.qc:284
+ #: qcsrc/client/waypointsprites.qc:266
  msgid "Checkpoint"
  msgstr "Checkpoint"
  
- #: qcsrc/client/waypointsprites.qc:285 qcsrc/client/waypointsprites.qc:287
+ #: qcsrc/client/waypointsprites.qc:267 qcsrc/client/waypointsprites.qc:269
  msgid "Finish"
  msgstr "Arrivo"
  
- #: qcsrc/client/waypointsprites.qc:286 qcsrc/client/waypointsprites.qc:287
+ #: qcsrc/client/waypointsprites.qc:268 qcsrc/client/waypointsprites.qc:269
  msgid "Start"
  msgstr "Partenza"
  
- #: qcsrc/client/waypointsprites.qc:288 qcsrc/client/waypointsprites.qc:289
+ #: qcsrc/client/waypointsprites.qc:270
+ msgid "Goal"
+ msgstr "Goal"
+ #: qcsrc/client/waypointsprites.qc:271 qcsrc/client/waypointsprites.qc:272
  msgid "Ball"
  msgstr "Palla"
  
- #: qcsrc/client/waypointsprites.qc:290
+ #: qcsrc/client/waypointsprites.qc:273
  msgid "Ball carrier"
  msgstr "Portatore palla"
  
- #: qcsrc/client/waypointsprites.qc:291 qcsrc/server/w_laser.qc:11
- msgid "Laser"
- msgstr "Laser"
- #: qcsrc/client/waypointsprites.qc:292 qcsrc/server/w_shotgun.qc:11
- msgid "Shotgun"
- msgstr "Shotgun"
- #: qcsrc/client/waypointsprites.qc:293 qcsrc/server/w_uzi.qc:11
- msgid "Machine Gun"
- msgstr "Machine Gun"
- #: qcsrc/client/waypointsprites.qc:294 qcsrc/server/w_grenadelauncher.qc:11
- msgid "Mortar"
- msgstr "Mortar"
- #: qcsrc/client/waypointsprites.qc:295 qcsrc/server/w_electro.qc:11
- msgid "Electro"
- msgstr "Electro"
- #: qcsrc/client/waypointsprites.qc:296 qcsrc/server/w_crylink.qc:11
- msgid "Crylink"
- msgstr "Crylink"
- #: qcsrc/client/waypointsprites.qc:297 qcsrc/server/w_nex.qc:11
- msgid "Nex"
- msgstr "Nex"
- #: qcsrc/client/waypointsprites.qc:298 qcsrc/server/w_hagar.qc:11
- msgid "Hagar"
- msgstr "Hagar"
- #: qcsrc/client/waypointsprites.qc:299 qcsrc/server/w_rocketlauncher.qc:11
- msgid "Rocket Launcher"
- msgstr "Rocket Launcher"
- #: qcsrc/client/waypointsprites.qc:300 qcsrc/server/w_porto.qc:11
- msgid "Port-O-Launch"
- msgstr "Port-O-Launch"
- #: qcsrc/client/waypointsprites.qc:301
- msgid "Minstanex"
- msgstr "Minstanex"
- #: qcsrc/client/waypointsprites.qc:302
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88
- msgid "Hook"
- msgstr "Hook"
- #: qcsrc/client/waypointsprites.qc:303 qcsrc/server/w_fireball.qc:11
- msgid "Fireball"
- msgstr "Fireball"
- #: qcsrc/client/waypointsprites.qc:304
- msgid "HLAC"
- msgstr "HLAC"
- #: qcsrc/client/waypointsprites.qc:305 qcsrc/server/w_rifle.qc:11
- msgid "Rifle"
- msgstr "Rifle"
- #: qcsrc/client/waypointsprites.qc:306 qcsrc/server/w_minelayer.qc:11
- msgid "Mine Layer"
- msgstr "Mine Layer"
- #: qcsrc/client/waypointsprites.qc:312
+ #: qcsrc/client/waypointsprites.qc:279
  msgid "Invisibility"
  msgstr "Invisibilità"
  
- #: qcsrc/client/waypointsprites.qc:313
+ #: qcsrc/client/waypointsprites.qc:280
  msgid "Extra life"
  msgstr "Vita extra"
  
- #: qcsrc/client/waypointsprites.qc:314
+ #: qcsrc/client/waypointsprites.qc:281 qcsrc/common/buffs.qh:38
  msgid "Speed"
  msgstr "Velocità"
  
- #: qcsrc/client/waypointsprites.qc:315
+ #: qcsrc/client/waypointsprites.qc:282
  msgid "Strength"
  msgstr "Forza"
  
- #: qcsrc/client/waypointsprites.qc:316
+ #: qcsrc/client/waypointsprites.qc:283
  msgid "Shield"
  msgstr "Scudo"
  
- #: qcsrc/client/waypointsprites.qc:317
+ #: qcsrc/client/waypointsprites.qc:284
  msgid "Fuel regen"
  msgstr "Rigeneratore di carburante"
  
- #: qcsrc/client/waypointsprites.qc:318
+ #: qcsrc/client/waypointsprites.qc:285
  msgid "Jet Pack"
  msgstr "Jet Pack"
  
- #: qcsrc/client/waypointsprites.qc:319
+ #: qcsrc/client/waypointsprites.qc:286
  msgid "Frozen!"
  msgstr "Congelato!"
  
- #: qcsrc/client/waypointsprites.qc:320
+ #: qcsrc/client/waypointsprites.qc:287
  msgid "Tagged"
  msgstr "Contrassegnato"
  
- #: qcsrc/client/waypointsprites.qc:321
+ #: qcsrc/client/waypointsprites.qc:288
  msgid "Vehicle"
  msgstr "Veicolo"
  
- #: qcsrc/client/waypointsprites.qc:595
+ #: qcsrc/client/waypointsprites.qc:562
  #, c-format
  msgid "%s needing help!"
  msgstr "%s sta chiedendo aiuto!"
  
- #: qcsrc/common/command/generic.qc:31
- #, c-format
- msgid "error: status is %d\n"
- msgstr "errore: lo stato è %d\n"
+ #: qcsrc/common/buffs.qh:36
+ msgid "Ammo"
+ msgstr "Munizioni"
+ #: qcsrc/common/buffs.qh:37
+ msgid "Resistance"
+ msgstr "Resistenza"
+ #: qcsrc/common/buffs.qh:39
+ msgid "Medic"
+ msgstr "Dottore"
+ #: qcsrc/common/buffs.qh:40
+ msgid "Bash"
+ msgstr "Colpo Forte"
+ #: qcsrc/common/buffs.qh:41
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:181
+ msgid "Vampire"
+ msgstr "Vampiro"
+ #: qcsrc/common/buffs.qh:42
+ msgid "Disability"
+ msgstr "Disabilità"
+ #: qcsrc/common/buffs.qh:43
+ msgid "Vengeance"
+ msgstr "Vendetta"
+ #: qcsrc/common/buffs.qh:44
+ msgid "Jump"
+ msgstr "Salto"
+ #: qcsrc/common/buffs.qh:45
+ msgid "Flight"
+ msgstr "Battaglia"
+ #: qcsrc/common/buffs.qh:46
+ msgid "Invisible"
+ msgstr "Invisibile"
  
  #: qcsrc/common/command/generic.qc:159
  msgid "error creating curl handle\n"
@@@ -1067,13 -989,16 +989,16 @@@ msgstr "errore creando il gestore curl\
  #: qcsrc/common/command/generic.qc:263
  msgid "Notification dump command only works with cl_cmd and sv_cmd.\n"
  msgstr ""
- "Il commando di dump delle notificazioni funziona solo con cl_cmd e sv_cmd.\n"
+ "Il commando di dump delle notifiche funziona solo con cl_cmd e sv_cmd.\n"
  
- #: qcsrc/common/command/generic.qc:457
+ #: qcsrc/common/command/generic.qc:316
+ msgid "Weapons dump command only works with sv_cmd.\n"
+ msgstr "Il commando di dump delle armi funziona solo con sv_cmd.\n"
+ #: qcsrc/common/command/generic.qc:510
  msgid "Notification restart command only works with cl_cmd and sv_cmd.\n"
  msgstr ""
- "Il commando di riavvio delle notificazioni funziona solo con cl_cmd e "
- "sv_cmd.\n"
+ "Il commando di riavvio delle notifiche funziona solo con cl_cmd e sv_cmd.\n"
  
  #: qcsrc/common/counting.qh:5
  #, c-format
@@@ -1275,76 -1200,164 +1200,164 @@@ msgstr "%d°
  msgid "%dth"
  msgstr "%d°"
  
- #: qcsrc/common/mapinfo.qc:712
+ #: qcsrc/common/mapinfo.qc:747
  #, no-c-format
  msgid "@!#%'n Tuba Throwing"
  msgstr "@!#%'n Tuba Throwing"
  
- #: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
- #, c-format
- msgid "%s: %s"
- msgstr "%s: %s"
- #: qcsrc/common/mapinfo.qh:36
+ #: qcsrc/common/mapinfo.qh:40
  msgid "Deathmatch"
  msgstr "Deathmatch"
  
- #: qcsrc/common/mapinfo.qh:39
+ #: qcsrc/common/mapinfo.qh:40
+ msgid "Kill all enemies"
+ msgstr "Uccidi tutti i nemici"
+ #: qcsrc/common/mapinfo.qh:43
  msgid "Last Man Standing"
  msgstr "Ultimo Uomo Rimasto (LMS)"
  
- #: qcsrc/common/mapinfo.qh:42
- msgid "Arena"
- msgstr "Arena"
+ #: qcsrc/common/mapinfo.qh:43
+ msgid "Survive and kill until the enemies have no lives left"
+ msgstr "Sopravvivi e uccidi finché i nemici non hanno più vite"
  
- #: qcsrc/common/mapinfo.qh:45
+ #: qcsrc/common/mapinfo.qh:46
  msgid "Race"
  msgstr "Corsa"
  
- #: qcsrc/common/mapinfo.qh:48
+ #: qcsrc/common/mapinfo.qh:46
+ msgid "Race against other players to the finish line"
+ msgstr "Gareggia contro gli altri giocatori fino all'arrivo"
+ #: qcsrc/common/mapinfo.qh:49
  msgid "Race CTS"
  msgstr "Corsa CTS"
  
- #: qcsrc/common/mapinfo.qh:51
+ #: qcsrc/common/mapinfo.qh:49
+ msgid "Race for fastest time"
+ msgstr "Gareggia per il tempo più veloce"
+ #: qcsrc/common/mapinfo.qh:52
+ msgid "Kill all enemy teammates"
+ msgstr "Uccidi tutti i nemici della tua squadra"
+ #: qcsrc/common/mapinfo.qh:52
  msgid "Team Deathmatch"
  msgstr "Team Deathmatch"
  
- #: qcsrc/common/mapinfo.qh:54
+ #: qcsrc/common/mapinfo.qh:55
  msgid "Capture the Flag"
  msgstr "Cattura la Bandiera (CTF)"
  
- #: qcsrc/common/mapinfo.qh:57
+ #: qcsrc/common/mapinfo.qh:55
+ msgid "Find and bring the enemy flag to your base to capture it"
+ msgstr "Trova e porta la bandiera nemica all tua base per catturarla"
+ #: qcsrc/common/mapinfo.qh:58
  msgid "Clan Arena"
  msgstr "Clan Arena"
  
- #: qcsrc/common/mapinfo.qh:60
+ #: qcsrc/common/mapinfo.qh:58
+ msgid "Kill all enemy teammates to win the round"
+ msgstr "Uccidi tutti i nemici della tua squadra per vincere il round"
+ #: qcsrc/common/mapinfo.qh:61
+ msgid "Capture all the control points to win"
+ msgstr "Cattura tutti i punti controllo per vincere"
+ #: qcsrc/common/mapinfo.qh:61
  msgid "Domination"
  msgstr "Dominazione"
  
- #: qcsrc/common/mapinfo.qh:63
+ #: qcsrc/common/mapinfo.qh:64
+ msgid "Gather all the keys to win the round"
+ msgstr "Prendi tutte le chiavi per vincere il round"
+ #: qcsrc/common/mapinfo.qh:64
  msgid "Key Hunt"
  msgstr "Caccia alla Chiave (Key Hunt)"
  
- #: qcsrc/common/mapinfo.qh:66
+ #: qcsrc/common/mapinfo.qh:67
  msgid "Assault"
  msgstr "Assalto"
  
- #: qcsrc/common/mapinfo.qh:69
+ #: qcsrc/common/mapinfo.qh:67
+ msgid ""
+ "Destroy obstacles to find and destroy the enemy power core before time runs "
+ "out"
+ msgstr ""
+ "Distruggi gli ostacoli per trovare e distruggere la centrale energetica del "
+ "nemico prima che il tempo scada"
+ #: qcsrc/common/mapinfo.qh:70
+ msgid "Capture control points to reach and destroy the enemy generator"
+ msgstr ""
+ "Cattura i punti di controllo per raggiungere e distruggere il generatore "
+ "nemico"
+ #: qcsrc/common/mapinfo.qh:70
  msgid "Onslaught"
  msgstr "Attacco (Onslaught)"
  
- #: qcsrc/common/mapinfo.qh:72
+ #: qcsrc/common/mapinfo.qh:73
  msgid "Nexball"
  msgstr "Nexball"
  
- #: qcsrc/common/mapinfo.qh:75
+ #: qcsrc/common/mapinfo.qh:73
+ msgid "XonSports"
+ msgstr "XonSports"
+ #: qcsrc/common/mapinfo.qh:76
  msgid "Freeze Tag"
  msgstr "Congelamento (Freeze Tag)"
  
- #: qcsrc/common/mapinfo.qh:78
+ #: qcsrc/common/mapinfo.qh:76
+ msgid "Kill enemies to freeze them, stand next to teammates to revive them"
+ msgstr ""
+ "Uccidi i nemici per congelarli, stai vicino ai compagni di squadra per "
+ "risvegliarli"
+ #: qcsrc/common/mapinfo.qh:79
+ msgid "Hold the ball to get points for kills"
+ msgstr "Tieni la palla per ottenere punti per le uccisioni"
+ #: qcsrc/common/mapinfo.qh:79
  msgid "Keepaway"
  msgstr "Tieni Lontano (Keepaway)"
  
+ #: qcsrc/common/mapinfo.qh:82
+ msgid "Invasion"
+ msgstr "Invasione"
+ #: qcsrc/common/mapinfo.qh:82
+ msgid "Survive against waves of monsters"
+ msgstr "Sopravvivi contro ondate di mostri"
+ #: qcsrc/common/monsters/monster/mage.qc:9
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:24
+ msgid "Mage"
+ msgstr "Mago"
+ #: qcsrc/common/monsters/monster/shambler.qc:9
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:23
+ msgid "Shambler"
+ msgstr "Strascicante"
+ #: qcsrc/common/monsters/monster/spider.qc:9
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:22
+ msgid "Spider"
+ msgstr "Ragno"
+ #: qcsrc/common/monsters/monster/wyvern.qc:9
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:25
+ msgid "Wyvern"
+ msgstr "Drago"
+ #: qcsrc/common/monsters/monster/zombie.qc:9
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:21
+ msgid "Zombie"
+ msgstr "Zombi"
  #: qcsrc/common/net_notice.qc:89
  msgid "^1Server notices:"
  msgstr "^1Note del server:"
@@@ -1355,11 -1368,39 +1368,39 @@@ msgid "^7%s (^3%d sec left)
  msgstr "^7%s (^3%d sec rimasti)"
  
  #: qcsrc/common/notifications.qh:342
+ msgid "^F4NOTE: ^BGSpectator chat is not sent to players during the match"
+ msgstr ""
+ "^F4NOTA: ^BGI dialoghi degli spettatori non sono mostrati ai giocatori "
+ "durante la partita"
+ #: qcsrc/common/notifications.qh:343 qcsrc/common/notifications.qh:590
+ #, c-format
+ msgid "^F2Throwing coin... Result: %s^F2!"
+ msgstr "^F2Lanciando la moneta... Risultato: %s^F2!"
+ #: qcsrc/common/notifications.qh:344
+ msgid "^BGYou don't have any fuel for the ^F1Jetpack"
+ msgstr "^BGNon hai carburante per il ^F1Jetpack"
+ #: qcsrc/common/notifications.qh:345
+ msgid "^F2You lack a UID, superspec options will not be saved/restored"
+ msgstr ""
+ "^F2Non hai un UID, le opzioni superspec non saranno salvate/ripristinate"
+ #: qcsrc/common/notifications.qh:346
+ msgid "^F1Round already started, you will join the game in the next round"
+ msgstr "^F1Il round è già iniziato, parteciperai al gioco il prossimo round"
+ #: qcsrc/common/notifications.qh:347
+ msgid "^F2You will spectate in the next round"
+ msgstr "^F2Sarai spettatore il prossimo round"
+ #: qcsrc/common/notifications.qh:348
  #, c-format
  msgid "^BG%s^BG captured the ^TC^TT^BG flag"
  msgstr "^BG%s^BG ha catturato la bandiera ^TC^TT^BG"
  
- #: qcsrc/common/notifications.qh:343
+ #: qcsrc/common/notifications.qh:349
  #, c-format
  msgid ""
  "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
@@@ -1368,12 -1409,12 +1409,12 @@@ msgstr "
  "^BG%s^BG ha catturato la bandiera ^TC^TT^BG in ^F1%s^BG secondi, battendo il "
  "precedente record di ^BG%s^BG di ^F2%s^BG secondi"
  
- #: qcsrc/common/notifications.qh:344
+ #: qcsrc/common/notifications.qh:350
  #, c-format
  msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
  msgstr "^BG%s^BG ha catturato la bandiera ^TC^TT^BG in ^F1%s^BG secondi"
  
- #: qcsrc/common/notifications.qh:345
+ #: qcsrc/common/notifications.qh:351
  #, c-format
  msgid ""
  "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
@@@ -1383,21 -1424,21 +1424,21 @@@ msgstr "
  "riuscendo a battere il precedente record segnato da ^BG%s^BG di ^F1%s^BG "
  "secondi"
  
- #: qcsrc/common/notifications.qh:346
+ #: qcsrc/common/notifications.qh:352
  msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
  msgstr ""
  "^BGLa bandiera ^TC^TT^BG è stata riportata alla base dal suo proprietario"
  
- #: qcsrc/common/notifications.qh:347
+ #: qcsrc/common/notifications.qh:353
  msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
  msgstr "^BGLa bandiera ^TC^TT^BG è stata distrutta ed è riportata alla base"
  
- #: qcsrc/common/notifications.qh:348
+ #: qcsrc/common/notifications.qh:354
  msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
  msgstr ""
  "^BGLa bandiera ^TC^TT^BG è stata lasciata nella base e si è riportata da sola"
  
- #: qcsrc/common/notifications.qh:349
+ #: qcsrc/common/notifications.qh:355
  msgid ""
  "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
  "base"
@@@ -1405,7 -1446,7 +1446,7 @@@ msgstr "
  "^BGLa bandiera ^TC^TT^BG è caduta dove non poteva essere raggiunta e si è "
  "riportata alla base"
  
- #: qcsrc/common/notifications.qh:350
+ #: qcsrc/common/notifications.qh:356
  #, c-format
  msgid ""
  "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
@@@ -1414,93 -1455,126 +1455,126 @@@ msgstr "
  "^BGLa bandiera ^TC^TT^BG è diventata impaziente dopo ^F1%.2f^BG secondi e si "
  "è riportata da sola"
  
- #: qcsrc/common/notifications.qh:351
+ #: qcsrc/common/notifications.qh:357
  msgid "^BGThe ^TC^TT^BG flag has returned to the base"
  msgstr "^BGLa bandiera ^TC^TT^BG si è riportata alla base"
  
- #: qcsrc/common/notifications.qh:352
+ #: qcsrc/common/notifications.qh:358
  #, c-format
  msgid "^BG%s^BG lost the ^TC^TT^BG flag"
  msgstr "^BG%s^BG ha perso la bandiera ^TC^TT^BG"
  
- #: qcsrc/common/notifications.qh:353
+ #: qcsrc/common/notifications.qh:359
  #, c-format
  msgid "^BG%s^BG got the ^TC^TT^BG flag"
  msgstr "^BG%s^BG ha preso la bandiera ^TC^TT^BG"
  
- #: qcsrc/common/notifications.qh:354
+ #: qcsrc/common/notifications.qh:360 qcsrc/common/notifications.qh:361
  #, c-format
  msgid "^BG%s^BG returned the ^TC^TT^BG flag"
  msgstr "^BG%s^BG ha riportato la bandiera ^TC^TT^BG"
  
- #: qcsrc/common/notifications.qh:355
+ #: qcsrc/common/notifications.qh:362
  #, c-format
  msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato eliminato slealmente da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:356
+ #: qcsrc/common/notifications.qh:363
  #, c-format
  msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato affogato da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:357
+ #: qcsrc/common/notifications.qh:364
  #, c-format
  msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato atterrato da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:358
+ #: qcsrc/common/notifications.qh:365
  #, c-format
  msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
  msgstr "^BG%s%s^K1 ha ha sentito un pò di caldo dal fuoco di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:358
+ #: qcsrc/common/notifications.qh:365
  #, c-format
  msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato incenerito da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:359
+ #: qcsrc/common/notifications.qh:366
  #, c-format
  msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato cucinato da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:360
+ #: qcsrc/common/notifications.qh:367
+ #, c-format
+ msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
+ msgstr "^BG%s%s^K1 è stato spinto verso un mostro da ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:368
  #, c-format
  msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
- msgstr "^BG%s%s^K1 è stato spazzato via dalla granata di ^BG%s^K1%s%s"
+ msgstr "^BG%s%s^K1 è stato spazzato via dalla Granata di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:369
+ #, c-format
+ msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
+ msgstr "^BG%s%s^K1 si è avvicinato troppo all'esplosione di napalm%s%s"
+ #: qcsrc/common/notifications.qh:369
+ #, c-format
+ msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
+ msgstr ""
+ "^BG%s%s^K1 è stato bruciato a morte dalla Granata al Napalm di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:361
+ #: qcsrc/common/notifications.qh:370
+ #, c-format
+ msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
+ msgstr ""
+ "^BG%s%s^K1 è stato spazzato via dalla Granata di ghiaccio di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:371
+ #, c-format
+ msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
+ msgstr ""
+ "^BG%s%s^K1 è stato congelato a morte dalla Granata di Ghiaccio di ^BG%s%s%s"
+ #: qcsrc/common/notifications.qh:372
+ #, c-format
+ msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
+ msgstr "^BG%s%s^K1 non è stato curato dalla Granata Curante di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:373
  #, c-format
  msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato lanciato nello spazio da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:362
+ #: qcsrc/common/notifications.qh:374
  #, c-format
  msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato sciolto da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:363
+ #: qcsrc/common/notifications.qh:375
  #, c-format
  msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato conservato da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:364
+ #: qcsrc/common/notifications.qh:376
  #, c-format
  msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
  msgstr ""
  "^BG%s%s^K1 ha provato a occupare lo spazio di destinazione della teleporta "
  "di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:364
+ #: qcsrc/common/notifications.qh:376
  #, c-format
  msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato telefragato da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:365
+ #: qcsrc/common/notifications.qh:377
  #, c-format
  msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è morto in un incidente con ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:366
+ #: qcsrc/common/notifications.qh:378
  #, c-format
  msgid ""
  "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
@@@ -1508,35 -1582,35 +1582,35 @@@ msgstr "
  "^BG%s%s^K1 è stato coinvolto nello scoppio quando il Bumblebee di ^BG%s^K1 è "
  "esploso%s%s"
  
- #: qcsrc/common/notifications.qh:367
+ #: qcsrc/common/notifications.qh:379
  #, c-format
  msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
  msgstr ""
  "^BG%s%s^K1 ha visto le belle luci dell'arma del Bumblebee di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:368
+ #: qcsrc/common/notifications.qh:380
  #, c-format
  msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato schiacciato da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:369
+ #: qcsrc/common/notifications.qh:381
  #, c-format
  msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
  msgstr "^BG%s%s^K1 ha subito la bomba a grappolo del Raptor di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:370
+ #: qcsrc/common/notifications.qh:382
  #, c-format
  msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
  msgstr "^BG%s%s^K1 non ha resistito alle bolle viola di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:371
+ #: qcsrc/common/notifications.qh:383
  #, c-format
  msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
  msgstr ""
  "^BG%s%s^K1 è stato coinvolto nello scoppio quando il Raptor di ^BG%s^K1 è "
  "esploso%s%s"
  
- #: qcsrc/common/notifications.qh:372
+ #: qcsrc/common/notifications.qh:384
  #, c-format
  msgid ""
  "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
@@@ -1544,446 -1618,550 +1618,550 @@@ msgstr "
  "^BG%s%s^K1 è stato coinvolto nello scoppio quando lo Spiderbot di ^BG%s^K1 è "
  "esploso%s%s"
  
- #: qcsrc/common/notifications.qh:373
+ #: qcsrc/common/notifications.qh:385
  #, c-format
  msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
  msgstr "^BG%s%s^K1 è stato ridotto a brandelli dallo Spiderbot di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:374
+ #: qcsrc/common/notifications.qh:386
  #, c-format
  msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
  msgstr ""
  "^BG%s%s^K1 è stato fatto scoppiare in pezzettini dallo Spiderbot di ^BG"
  "%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:375
+ #: qcsrc/common/notifications.qh:387
  #, c-format
  msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
  msgstr ""
  "^BG%s%s^K1 è stato coinvolto nello scoppio quando il Racer di ^BG%s^K1 è "
  "esploso%s%s"
  
- #: qcsrc/common/notifications.qh:376
+ #: qcsrc/common/notifications.qh:388
  #, c-format
  msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
  msgstr "^BG%s%s^K1 è stato trangugiato dal Racer di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:377
+ #: qcsrc/common/notifications.qh:389
  #, c-format
  msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
  msgstr "^BG%s%s^K1 non è riuscito a trovare riparo dal Racer di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:378
+ #: qcsrc/common/notifications.qh:390
+ #, c-format
+ msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+ msgstr "^BG%s%s^K1 è stato distrutto dal vendicativo ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:391
  #, c-format
  msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato lanciato in un mondo di dolore da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:379
+ #: qcsrc/common/notifications.qh:392
  #, c-format
  msgid "^BG%s^K1 was moved into the %s%s"
  msgstr "^BG%s^K1 è stato spostato nel %s%s"
  
- #: qcsrc/common/notifications.qh:380
+ #: qcsrc/common/notifications.qh:393
  #, c-format
  msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
  msgstr "^BG%s^K1 è diventato nemico del Signore del Gioco di Squadra%s%s"
  
- #: qcsrc/common/notifications.qh:381
+ #: qcsrc/common/notifications.qh:394
  #, c-format
  msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
  msgstr "^BG%s^K1 ha pensato di aver trovato un buon posto per campeggiare%s%s"
  
- #: qcsrc/common/notifications.qh:382
+ #: qcsrc/common/notifications.qh:395
  #, c-format
  msgid "^BG%s^K1 unfairly eliminated themself%s%s"
  msgstr "^BG%s^K1 si è eliminato slealmente%s%s"
  
- #: qcsrc/common/notifications.qh:383
- #, c-format
- msgid "^BG%s^K1 %s^K1%s%s"
- msgstr "^BG%s^K1 %s^K1%s%s"
- #: qcsrc/common/notifications.qh:384
+ #: qcsrc/common/notifications.qh:397
  #, c-format
  msgid "^BG%s^K1 couldn't catch their breath%s%s"
  msgstr "^BG%s^K1 non è riuscito a trattenere il fiato%s%s"
  
- #: qcsrc/common/notifications.qh:384
+ #: qcsrc/common/notifications.qh:397
  #, c-format
  msgid "^BG%s^K1 was in the water for too long%s%s"
  msgstr "^BG%s^K1 è stato in acqua per troppo tempo%s%s"
  
- #: qcsrc/common/notifications.qh:385
+ #: qcsrc/common/notifications.qh:398
  #, c-format
  msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
  msgstr "^BG%s^K1 ha colpito il terreno con un pò troppa forza%s%s"
  
- #: qcsrc/common/notifications.qh:385
+ #: qcsrc/common/notifications.qh:398
  #, c-format
  msgid "^BG%s^K1 hit the ground with a crunch%s%s"
  msgstr "^BG%s^K1 ha colpito il terreno facendolo scricchiolare%s%s"
  
- #: qcsrc/common/notifications.qh:386
+ #: qcsrc/common/notifications.qh:399
  #, c-format
  msgid "^BG%s^K1 became a bit too crispy%s%s"
  msgstr "^BG%s^K1 è diventato un pò troppo croccante%s%s"
  
- #: qcsrc/common/notifications.qh:386
+ #: qcsrc/common/notifications.qh:399
  #, c-format
  msgid "^BG%s^K1 felt a little hot%s%s"
  msgstr "^BG%s^K1 ha sentito un pò di caldo%s%s"
  
- #: qcsrc/common/notifications.qh:387
+ #: qcsrc/common/notifications.qh:400
  #, c-format
  msgid "^BG%s^K1 died%s%s"
  msgstr "^BG%s^K1 è morto%s%s"
  
- #: qcsrc/common/notifications.qh:388
+ #: qcsrc/common/notifications.qh:401
  #, c-format
  msgid "^BG%s^K1 found a hot place%s%s"
  msgstr "^BG%s^K1 ha trovato un posto caldo%s%s"
  
- #: qcsrc/common/notifications.qh:388
+ #: qcsrc/common/notifications.qh:401
  #, c-format
  msgid "^BG%s^K1 turned into hot slag%s%s"
  msgstr "^BG%s^K1 è diventato scoria bollente%s%s"
  
- #: qcsrc/common/notifications.qh:389
+ #: qcsrc/common/notifications.qh:402
+ #, c-format
+ msgid "^BG%s^K1 was exploded by a Mage%s%s"
+ msgstr "^BG%s^K1 è stato fatto esplodere da un Mago%s%s"
+ #: qcsrc/common/notifications.qh:403
+ #, c-format
+ msgid "^BG%s^K1's innards became outwards by a Shambler%s%s"
+ msgstr ""
+ "^K1Le interiora di ^BG%s^K1 sono state esternate da uno Strascicatore%s%s"
+ #: qcsrc/common/notifications.qh:404
+ #, c-format
+ msgid "^BG%s^K1 was smashed by a Shambler%s%s"
+ msgstr "^BG%s^K1 è state sfasciato da uno Strascicatore%s%s"
+ #: qcsrc/common/notifications.qh:405
+ #, c-format
+ msgid "^BG%s^K1 was zapped to death by a Shambler%s%s"
+ msgstr "^BG%s^K1 è stato ucciso velocemente da uno Strascicatore%s%s"
+ #: qcsrc/common/notifications.qh:406
+ #, c-format
+ msgid "^BG%s^K1 was bitten by a Spider%s%s"
+ msgstr "^BG%s^K1 è stato morso da un Ragno%s%s"
+ #: qcsrc/common/notifications.qh:407
+ #, c-format
+ msgid "^BG%s^K1 was fireballed by a Wyvern%s%s"
+ msgstr "^BG%s^K1 è stato colpito dalla palla di fuoco di un Drago%s%s"
+ #: qcsrc/common/notifications.qh:408
+ #, c-format
+ msgid "^BG%s^K1 joins the Zombies%s%s"
+ msgstr "^BG%s^K1 è entrato tra gli Zombi%s%s"
+ #: qcsrc/common/notifications.qh:409
+ #, c-format
+ msgid "^BG%s^K1 was given kung fu lessons by a Zombie%s%s"
+ msgstr "^K1A ^BG%s^K1 sono state date lezioni di kung fu da uno Zombi%s%s"
+ #: qcsrc/common/notifications.qh:410 qcsrc/common/notifications.qh:412
  #, c-format
  msgid "^BG%s^K1 mastered the art of self-nading%s%s"
  msgstr ""
  "^BG%s^K1 è diventato esperto nell'arte di lanciarsi le granate addosso%s%s"
  
- #: qcsrc/common/notifications.qh:390
+ #: qcsrc/common/notifications.qh:411
+ #, c-format
+ msgid ""
+ "^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s"
+ msgstr ""
+ "^BG%s^K1 ha deciso di dare un'occhiata ai risultati dell'esplosione del "
+ "proprio napalm%s%s"
+ #: qcsrc/common/notifications.qh:411
+ #, c-format
+ msgid "^BG%s^K1 was burned to death by their own Napalm Nade%s%s"
+ msgstr "^BG%s^K1 è stato bruciato a morte dalla propria Granata al Napalm%s%s"
+ #: qcsrc/common/notifications.qh:413
+ #, c-format
+ msgid "^BG%s^K1 felt a little chilly%s%s"
+ msgstr "^BG%s^K1 Si è sentito un pò infreddolito%s%s"
+ #: qcsrc/common/notifications.qh:413
+ #, c-format
+ msgid "^BG%s^K1 was frozen to death by their own Ice Nade%s%s"
+ msgstr ""
+ "^BG%s^K1 è stato congelato a morte dalla propria Granata di Ghiaccio%s%s"
+ #: qcsrc/common/notifications.qh:414
+ #, c-format
+ msgid "^BG%s^K1's Healing Nade didn't quite heal them%s%s"
+ msgstr "^K1La Granata Curante di ^BG%s^K1 non lo ha curato abbastanza%s%s"
+ #: qcsrc/common/notifications.qh:415
  #, c-format
  msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
- msgstr "^BG%s^K1 è morto%s%s. Qual'è il motivo di vivere senza munizioni?"
+ msgstr "^BG%s^K1 è morto%s%s. Che motivo c'è di vivere senza munizioni?"
  
- #: qcsrc/common/notifications.qh:390
+ #: qcsrc/common/notifications.qh:415
  #, c-format
  msgid "^BG%s^K1 ran out of ammo%s%s"
  msgstr "^BG%s^K1 ha finito le munizioni%s%s"
  
- #: qcsrc/common/notifications.qh:391
+ #: qcsrc/common/notifications.qh:416
  #, c-format
  msgid "^BG%s^K1 rotted away%s%s"
  msgstr "^BG%s^K1 è marcito%s%s"
  
- #: qcsrc/common/notifications.qh:392
+ #: qcsrc/common/notifications.qh:417
  #, c-format
  msgid "^BG%s^K1 became a shooting star%s%s"
  msgstr "^BG%s^K1 è diventato una stella cadente%s%s"
  
- #: qcsrc/common/notifications.qh:393
+ #: qcsrc/common/notifications.qh:418
  #, c-format
  msgid "^BG%s^K1 was slimed%s%s"
  msgstr "^BG%s^K1 è stato sciolto%s%s"
  
- #: qcsrc/common/notifications.qh:394
+ #: qcsrc/common/notifications.qh:419
  #, c-format
  msgid "^BG%s^K1 couldn't take it anymore%s%s"
  msgstr "^BG%s^K1 non ne ha potuto più%s%s"
  
- #: qcsrc/common/notifications.qh:395
+ #: qcsrc/common/notifications.qh:420
  #, c-format
  msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
  msgstr "^BG%s^K1 è ora conservato per i secoli a venire%s%s"
  
- #: qcsrc/common/notifications.qh:396
+ #: qcsrc/common/notifications.qh:421
  #, c-format
  msgid "^BG%s^K1 switched to the %s%s"
  msgstr "^BG%s^K1 ha cambiato alla %s%s"
  
- #: qcsrc/common/notifications.qh:397
+ #: qcsrc/common/notifications.qh:422
  #, c-format
  msgid "^BG%s^K1 died in an accident%s%s"
  msgstr "^BG%s^K1 è morto in un incidente%s%s"
  
- #: qcsrc/common/notifications.qh:398
+ #: qcsrc/common/notifications.qh:423
  #, c-format
  msgid "^BG%s^K1 ran into a turret%s%s"
  msgstr "^BG%s^K1 si è imbattuto in una torretta%s%s"
  
- #: qcsrc/common/notifications.qh:399
+ #: qcsrc/common/notifications.qh:424
  #, c-format
  msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
  msgstr "^BG%s^K1 è stato fatto esplodere da una torretta eWheel%s%s"
  
- #: qcsrc/common/notifications.qh:400
+ #: qcsrc/common/notifications.qh:425
  #, c-format
  msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
  msgstr "^BG%s^K1 è stato preso dal fuoco della torretta FLAC%s%s"
  
- #: qcsrc/common/notifications.qh:401
+ #: qcsrc/common/notifications.qh:426
  #, c-format
  msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
  msgstr "^BG%s^K1 è stato fatto esplodere da una torretta Hellion%s%s"
  
- #: qcsrc/common/notifications.qh:402
+ #: qcsrc/common/notifications.qh:427
  #, c-format
  msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
  msgstr "^BG%s^K1 non è riuscito a nascondersi dalla torretta Hunter%s%s"
  
- #: qcsrc/common/notifications.qh:403
+ #: qcsrc/common/notifications.qh:428
  #, c-format
  msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
  msgstr "^BG%s^K1 è stato crivellato da una torretta Machinegun%s%s"
  
- #: qcsrc/common/notifications.qh:404
+ #: qcsrc/common/notifications.qh:429
  #, c-format
  msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
  msgstr "^BG%s^K1 è stato ridotto in pezzi fumanti da una torretta MLRS%s%s"
  
- #: qcsrc/common/notifications.qh:405
+ #: qcsrc/common/notifications.qh:430
  #, c-format
  msgid "^BG%s^K1 was phased out by a turret%s%s"
  msgstr "^BG%s^K1 è stato fatto svanire da una torretta%s%s"
  
- #: qcsrc/common/notifications.qh:406
+ #: qcsrc/common/notifications.qh:431
  #, c-format
  msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
  msgstr ""
  "^BG%s^K1 ha ricevuto una dose di plasma incandescente da una torretta%s%s"
  
- #: qcsrc/common/notifications.qh:407
+ #: qcsrc/common/notifications.qh:432
  #, c-format
  msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
  msgstr "^BG%s^K1 è stato fulminato da una torretta Tesla%s%s"
  
- #: qcsrc/common/notifications.qh:408
+ #: qcsrc/common/notifications.qh:433
  #, c-format
  msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
  msgstr ""
  "^BG%s^K1 ha ricevuto un arricchimento di piombo da una torretta Walker%s%s"
  
- #: qcsrc/common/notifications.qh:409
+ #: qcsrc/common/notifications.qh:434
  #, c-format
  msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
  msgstr "^BG%s^K1 è stato impalato da una torretta Walker%s%s"
  
- #: qcsrc/common/notifications.qh:410
+ #: qcsrc/common/notifications.qh:435
  #, c-format
  msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
  msgstr "^BG%s^K1 è stato fatto esplodere da una torretta Walker%s%s"
  
- #: qcsrc/common/notifications.qh:411
+ #: qcsrc/common/notifications.qh:436
  #, c-format
  msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
  msgstr ""
  "^BG%s^K1 è stato coinvolto nello scoppio dell'esplosione di un Bumblebee%s%s"
  
- #: qcsrc/common/notifications.qh:412
+ #: qcsrc/common/notifications.qh:437
  #, c-format
  msgid "^BG%s^K1 was crushed by a vehicle%s%s"
  msgstr "^BG%s^K1 è stato schiacciato da un veicolo%s%s"
  
- #: qcsrc/common/notifications.qh:413
+ #: qcsrc/common/notifications.qh:438
  #, c-format
  msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
  msgstr "^BG%s^K1 è stato preso dalla bomba a grappolo di un Raptor%s%s"
  
- #: qcsrc/common/notifications.qh:414
+ #: qcsrc/common/notifications.qh:439
  #, c-format
  msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
  msgstr ""
  "^BG%s^K1 è stato coinvolto nello scoppio dell'esplosione di un Raptor%s%s"
  
- #: qcsrc/common/notifications.qh:415
+ #: qcsrc/common/notifications.qh:440
  #, c-format
  msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
  msgstr ""
  "^BG%s^K1 è stato coinvolto nello scoppio dell'esplosione di uno Spiderbot%s%s"
  
- #: qcsrc/common/notifications.qh:416
+ #: qcsrc/common/notifications.qh:441
  #, c-format
  msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
  msgstr ""
  "^BG%s^K1 è stato fatto scoppiare in pezzettini dal razzo di uno Spiderbot%s%s"
  
- #: qcsrc/common/notifications.qh:417
+ #: qcsrc/common/notifications.qh:442
  #, c-format
  msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
  msgstr ""
  "^BG%s^K1 è stato coinvolto nello scoppio dell'esplosione di un Racer%s%s"
  
- #: qcsrc/common/notifications.qh:418
+ #: qcsrc/common/notifications.qh:443
  #, c-format
  msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
  msgstr "^BG%s^K1 non è riuscito a trovare riparo dal razzo di un Racer%s%s"
  
- #: qcsrc/common/notifications.qh:419
+ #: qcsrc/common/notifications.qh:444
  #, c-format
  msgid "^BG%s^K1 was in the wrong place%s%s"
  msgstr "^BG%s^K1 era nel posto sbagliato%s%s"
  
- #: qcsrc/common/notifications.qh:420
+ #: qcsrc/common/notifications.qh:445
  #, c-format
  msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
  msgstr "^BG%s^K1 è stato tradito da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:421
+ #: qcsrc/common/notifications.qh:446
+ #, c-format
+ msgid "^BG%s^BG%s^BG (%s points every %s seconds)"
+ msgstr "^BG%s^BG%s^BG (%s punti ogni %s secondi)"
+ #: qcsrc/common/notifications.qh:447
  #, c-format
  msgid "^BG%s^K1 was frozen by ^BG%s"
  msgstr "^BG%s^K1 è stato congelato da ^BG%s"
  
- #: qcsrc/common/notifications.qh:422
+ #: qcsrc/common/notifications.qh:448
  #, c-format
  msgid "^BG%s^K3 was revived by ^BG%s"
  msgstr "^BG%s^K3 è stato risvegliato da ^BG%s"
  
- #: qcsrc/common/notifications.qh:423
+ #: qcsrc/common/notifications.qh:449
  #, c-format
  msgid "^BG%s^K3 was revived by falling"
  msgstr "^BG%s^K3 è stato risvegliato grazie alla caduta"
  
- #: qcsrc/common/notifications.qh:424
+ #: qcsrc/common/notifications.qh:450
+ #, c-format
+ msgid "^BG%s^K3 was revived by their Nade explosion"
+ msgstr "^BG%s^K3 è stato risvegliato dall'esplosione della propria Granata"
+ #: qcsrc/common/notifications.qh:451
  #, c-format
  msgid "^BG%s^K3 was automatically revived after %s second(s)"
  msgstr "^BG%s^K1 è stato risvegliato automaticamente dopo %s secondi"
  
- #: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
+ #: qcsrc/common/notifications.qh:452 qcsrc/common/notifications.qh:666
  msgid "^TC^TT^BG team wins the round"
  msgstr "^BGLa squadra ^TC^TT^BG vince il round"
  
- #: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
+ #: qcsrc/common/notifications.qh:453 qcsrc/common/notifications.qh:667
  #, c-format
  msgid "^BG%s^BG wins the round"
  msgstr "^BG%s^BG vince il round"
  
- #: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
+ #: qcsrc/common/notifications.qh:454 qcsrc/common/notifications.qh:587
  msgid "^BGRound tied"
  msgstr "^BGRound pari"
  
- #: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
+ #: qcsrc/common/notifications.qh:455 qcsrc/common/notifications.qh:588
  msgid "^BGRound over, there's no winner"
  msgstr "^BGIl round è finito, non c'è nessun vincitore"
  
- #: qcsrc/common/notifications.qh:429
+ #: qcsrc/common/notifications.qh:456
  #, c-format
  msgid "^BG%s^K1 froze themself"
  msgstr "^BG%s^K1 si è congelato da solo"
  
- #: qcsrc/common/notifications.qh:430
+ #: qcsrc/common/notifications.qh:457
  #, c-format
  msgid "^BGGodmode saved you %s units of damage, cheater!"
  msgstr "^BGLa modalità Dio ti ha evitato %s unità di danno, imbroglione!"
  
- #: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
+ #: qcsrc/common/notifications.qh:458
+ #, c-format
+ msgid "^BG%s^BG got the %s^BG buff!"
+ msgstr "^BG%s^BG ha il colpetto %s^BG!"
+ #: qcsrc/common/notifications.qh:459
+ #, c-format
+ msgid "^BG%s^BG lost the %s^BG buff!"
+ msgstr "^BG%s^BG ha perso il colpetto %s^BG!"
+ #: qcsrc/common/notifications.qh:460 qcsrc/common/notifications.qh:671
+ #, c-format
+ msgid "^BGYou dropped the %s^BG buff!"
+ msgstr "^BGHai abbandonato il colpetto %s^BG!"
+ #: qcsrc/common/notifications.qh:461 qcsrc/common/notifications.qh:672
+ #, c-format
+ msgid "^BGYou got the %s^BG buff!"
+ msgstr "^BGHai preso il colpetto %s^BG!"
+ #: qcsrc/common/notifications.qh:462 qcsrc/common/notifications.qh:673
  #, c-format
  msgid "^BGYou do not have the ^F1%s"
  msgstr "^BGTu non hai la/il ^F1%s"
  
- #: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
+ #: qcsrc/common/notifications.qh:463 qcsrc/common/notifications.qh:674
  #, c-format
  msgid "^BGYou dropped the ^F1%s^BG%s"
  msgstr "^BGHai lasciato la/il ^F1%s^BG%s"
  
- #: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
+ #: qcsrc/common/notifications.qh:464 qcsrc/common/notifications.qh:675
  #, c-format
  msgid "^BGYou got the ^F1%s"
  msgstr "^BGHai preso la/il ^F1%s"
  
- #: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
+ #: qcsrc/common/notifications.qh:465 qcsrc/common/notifications.qh:676
  #, c-format
  msgid "^BGYou don't have enough ammo for the ^F1%s"
  msgstr "^BGNon hai abbastanza munizioni per la/il ^F1%s"
  
- #: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
+ #: qcsrc/common/notifications.qh:466 qcsrc/common/notifications.qh:677
  #, c-format
  msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
  msgstr "^F1Il ^F1%s %s^BG non può sparare, ma il suo ^F1%s^BG può"
  
- #: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
+ #: qcsrc/common/notifications.qh:467 qcsrc/common/notifications.qh:678
  #, c-format
  msgid "^F1%s^BG is ^F4not available^BG on this map"
  msgstr "^F1%s^BG ^F4non disponibile^BG in questa mappa"
  
- #: qcsrc/common/notifications.qh:437
+ #: qcsrc/common/notifications.qh:468
  #, c-format
  msgid "^BG%s^F3 connected%s"
  msgstr "^BG%s^F3 si è connesso%s"
  
- #: qcsrc/common/notifications.qh:438
+ #: qcsrc/common/notifications.qh:469
  #, c-format
  msgid "^BG%s^F3 connected and joined the ^TC^TT team"
  msgstr "^BG%s^F3 si è connesso ed è entrato nella squadra ^TC^TT"
  
- #: qcsrc/common/notifications.qh:439
+ #: qcsrc/common/notifications.qh:470
  #, c-format
  msgid "^BG%s^F3 is now playing"
  msgstr "^BG%s^F3 sta giocando adesso"
  
- #: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
+ #: qcsrc/common/notifications.qh:471 qcsrc/common/notifications.qh:681
  #, c-format
  msgid "^BG%s^BG has dropped the ball!"
  msgstr "^BG%s^BG ha lasciato la palla!"
  
- #: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
+ #: qcsrc/common/notifications.qh:472 qcsrc/common/notifications.qh:682
  #, c-format
  msgid "^BG%s^BG has picked up the ball!"
  msgstr "^BG%s^BG ha raccolto la palla!"
  
- #: qcsrc/common/notifications.qh:442
+ #: qcsrc/common/notifications.qh:473
  #, c-format
  msgid "^BG%s^BG captured the keys for the ^TC^TT team"
  msgstr "^BG%s^BG ha catturato le chiavi per la squadra ^TC^TT"
  
- #: qcsrc/common/notifications.qh:443
+ #: qcsrc/common/notifications.qh:474
  #, c-format
  msgid "^BG%s^BG dropped the ^TC^TT Key"
  msgstr "^BG%s^BG ha lasciato la Chiave ^TC^TT"
  
- #: qcsrc/common/notifications.qh:444
+ #: qcsrc/common/notifications.qh:475
  #, c-format
  msgid "^BG%s^BG lost the ^TC^TT Key"
  msgstr "^BG%s^BG ha perso la Chiave ^TC^TT"
  
- #: qcsrc/common/notifications.qh:445
+ #: qcsrc/common/notifications.qh:476
  #, c-format
  msgid "^BG%s^BG picked up the ^TC^TT Key"
  msgstr "^BG%s^BG ha preso la Chiave ^TC^TT"
  
- #: qcsrc/common/notifications.qh:446
+ #: qcsrc/common/notifications.qh:477
  #, c-format
  msgid "^BG%s^F3 forfeited"
  msgstr "^BG%s^BG ha abbandonato"
  
- #: qcsrc/common/notifications.qh:447
+ #: qcsrc/common/notifications.qh:478
  #, c-format
  msgid "^BG%s^F3 has no more lives left"
  msgstr "^BG%s^F3 non ha più vite rimaste"
  
- #: qcsrc/common/notifications.qh:448
+ #: qcsrc/common/notifications.qh:479
+ msgid "^BGMonsters are currently disabled"
+ msgstr "^BGMonstri sono attualmente disabilitati"
+ #: qcsrc/common/notifications.qh:480
  #, c-format
  msgid "^BG%s^K1 picked up Invisibility"
  msgstr "^BG%s^K1 ha preso Invisibilità"
  
- #: qcsrc/common/notifications.qh:449
+ #: qcsrc/common/notifications.qh:481
  #, c-format
  msgid "^BG%s^K1 picked up Shield"
  msgstr "^BG%s^K1 ha preso Scudo"
  
- #: qcsrc/common/notifications.qh:450
+ #: qcsrc/common/notifications.qh:482
  #, c-format
  msgid "^BG%s^K1 picked up Speed"
  msgstr "^BG%s^K1 ha preso Velocità"
  
- #: qcsrc/common/notifications.qh:451
+ #: qcsrc/common/notifications.qh:483
  #, c-format
  msgid "^BG%s^K1 picked up Strength"
  msgstr "^BG%s^K1 ha preso Forza"
  
- #: qcsrc/common/notifications.qh:452
+ #: qcsrc/common/notifications.qh:484
  #, c-format
  msgid "^BG%s^F3 disconnected"
  msgstr "^BG%s^F3 si è disconnesso"
  
- #: qcsrc/common/notifications.qh:453
+ #: qcsrc/common/notifications.qh:485
  #, c-format
  msgid "^BG%s^F3 was kicked for idling"
  msgstr "^BG%s^F3 è stato buttato fuori perchè non faceva niente"
  
- #: qcsrc/common/notifications.qh:454
+ #: qcsrc/common/notifications.qh:486
  msgid ""
  "^F2You were kicked from the server because you are a spectator and "
  "spectators aren't allowed at the moment."
@@@ -1991,45 -2169,45 +2169,45 @@@ msgstr "
  "^F2Sei stato buttato fuori dal server perché sei spettatore e gli spettatori "
  "non sono permessi al momento."
  
- #: qcsrc/common/notifications.qh:455
+ #: qcsrc/common/notifications.qh:487
  #, c-format
  msgid "^BG%s^F3 is now spectating"
  msgstr "^BG%s^F3 sta ora osservando"
  
- #: qcsrc/common/notifications.qh:456
+ #: qcsrc/common/notifications.qh:488
  #, c-format
  msgid "^BG%s^BG has abandoned the race"
  msgstr "^BG%s^BG ha abbandonato la gara"
  
- #: qcsrc/common/notifications.qh:457
+ #: qcsrc/common/notifications.qh:489
  #, c-format
  msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
  msgstr ""
  "^BG%s^BG non è riuscito a battere il proprio record del %s%s^BG posto di %s"
  "%s %s"
  
- #: qcsrc/common/notifications.qh:458
+ #: qcsrc/common/notifications.qh:490
  #, c-format
  msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
  msgstr ""
  "^BG%s^BG non è riuscito a battere il record del %s%s^BG posto di %s%s %s"
  
- #: qcsrc/common/notifications.qh:459
+ #: qcsrc/common/notifications.qh:491
  #, c-format
  msgid "^BG%s^BG has finished the race"
  msgstr "^BG%s^BG ha completato la gara"
  
- #: qcsrc/common/notifications.qh:460
+ #: qcsrc/common/notifications.qh:492
  #, c-format
  msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
  msgstr "^BG%s^BG ha battuto il record di %s^BG del %s%s^BG posto con %s%s %s"
  
- #: qcsrc/common/notifications.qh:461
+ #: qcsrc/common/notifications.qh:493
  #, c-format
  msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
  msgstr "^BG%s^BG ha migliorato il proprio record al %s%s^BG posto con %s%s %s"
  
- #: qcsrc/common/notifications.qh:462
+ #: qcsrc/common/notifications.qh:494
  #, c-format
  msgid ""
  "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
@@@ -2038,30 -2216,38 +2216,38 @@@ msgstr "
  "^BG%s^BG ha stabilito un nuovo record con ^F2%s^BG, ma sfortunatamente non "
  "ha un UID e sarà perduto."
  
- #: qcsrc/common/notifications.qh:463
+ #: qcsrc/common/notifications.qh:495
  #, c-format
  msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
  msgstr "^BG%s^BG ha stabilito il record del %s%s^BG posto con %s%s"
  
- #: qcsrc/common/notifications.qh:464
+ #: qcsrc/common/notifications.qh:496
  msgid "^TC^TT ^BGteam scores!"
  msgstr "^BGLa squadra ^TC^TT ^BGsegna!"
  
- #: qcsrc/common/notifications.qh:465
+ #: qcsrc/common/notifications.qh:497
  #, c-format
  msgid ""
  "^F2You have to become a player within the next %s, otherwise you will be "
  "kicked, because spectating isn't allowed at this time!"
  msgstr ""
  "^F2Devi entrare in gioco entro i prossimi %s, altrimenti sarai buttato "
- "fuori , perchè in questo momento non è permesso assistere!"
+ "fuori, perchè in questo momento non è permesso assistere!"
  
- #: qcsrc/common/notifications.qh:466
+ #: qcsrc/common/notifications.qh:498
  #, c-format
  msgid "^BG%s^K1 picked up a Superweapon"
  msgstr "^BG%s^K1 ha preso una Superarma"
  
- #: qcsrc/common/notifications.qh:467
+ #: qcsrc/common/notifications.qh:499
+ msgid "^BGYou cannot change to a larger team"
+ msgstr "^BGNon puoi spostarti in una squadra più grande"
+ #: qcsrc/common/notifications.qh:500
+ msgid "^BGYou are not allowed to change teams"
+ msgstr "^BGNon ti è consentito cambiare squadra"
+ #: qcsrc/common/notifications.qh:501
  #, c-format
  msgid ""
  "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
@@@ -2070,14 -2256,14 +2256,14 @@@ msgstr "
  "^F4NOTA: ^BGIl server sta eseguendo ^F1Xonotic %s (beta)^BG, tu hai "
  "^F2Xonotic %s"
  
- #: qcsrc/common/notifications.qh:468
+ #: qcsrc/common/notifications.qh:502
  #, c-format
  msgid ""
  "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
  msgstr ""
  "^F4NOTA: ^BGIl server sta eseguendo ^F1Xonotic %s^BG, tu hai ^F2Xonotic %s"
  
- #: qcsrc/common/notifications.qh:469
+ #: qcsrc/common/notifications.qh:503
  #, c-format
  msgid ""
  "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
@@@ -2086,12 -2272,12 +2272,12 @@@ msgstr "
  "^F4NOTA: ^F1Xonotic %s^BG è uscito, e tu hai ancora ^F2Xonotic %s^BG - "
  "aggiornalo da ^F3http://www.xonotic.org/^BG!"
  
- #: qcsrc/common/notifications.qh:470
+ #: qcsrc/common/notifications.qh:504
  #, c-format
  msgid "^F3SVQC Build information: ^F4%s"
  msgstr "^F3Informazioni sulla versione SVQC: ^F4%s"
  
- #: qcsrc/common/notifications.qh:471
+ #: qcsrc/common/notifications.qh:505
  #, c-format
  msgid ""
  "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
@@@ -2099,105 -2285,146 +2285,146 @@@ msgstr "
  "^BG%s%s^K1 è morto nella gran esibizione di ^BG%s^K1 con la @!#%%'n "
  "Fisarmonica%s%s"
  
- #: qcsrc/common/notifications.qh:472
+ #: qcsrc/common/notifications.qh:506
  #, c-format
  msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
  msgstr "^BG%s^K1 si è fatto male alle orecchie con la @!#%%'n Fisarmonica%s%s"
  
- #: qcsrc/common/notifications.qh:473
+ #: qcsrc/common/notifications.qh:507
  #, c-format
- msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
- msgstr "^BG%s%s^K1 ha sentito la forte trazione del Crylink di ^BG%s^K1%s%s"
+ msgid "^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"
+ msgstr "^BG%s%s^K1 è stato fulminato dall'Arc di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:474
+ #: qcsrc/common/notifications.qh:508
  #, c-format
- msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
- msgstr "^BG%s^K1 ha sentito la forte trazione del proprio Crylink%s%s"
+ msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Blaster%s%s"
+ msgstr "^BG%s%s^K1 è stato sparato a morte dal Blaster di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:475
+ #: qcsrc/common/notifications.qh:509
  #, c-format
- msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
+ msgid "^BG%s^K1 shot themself to hell with their Blaster%s%s"
+ msgstr "^BG%s^K1 si è sparato a morte con il proprio Blaster%s%s"
+ #: qcsrc/common/notifications.qh:510
+ #, c-format
+ msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
+ msgstr "^BG%s%s^K1 ha sentito la forte trazione del Crylink di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:511
+ #, c-format
+ msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
+ msgstr "^BG%s^K1 ha sentito la forte trazione del proprio Crylink%s%s"
+ #: qcsrc/common/notifications.qh:512
+ #, c-format
+ msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
+ msgstr "^BG%s%s^K1 ha mangiato il razzo di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:513
+ #, c-format
+ msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
+ msgstr "^BG%s%s^K1 si è avvicinato troppo al razzo di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:514
+ #, c-format
+ msgid "^BG%s^K1 blew themself up with their Devastator%s%s"
+ msgstr "^BG%s^K1 si è fatto esplodere con il prorpio Devastator%s%s"
+ #: qcsrc/common/notifications.qh:515
+ #, c-format
+ msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
  msgstr ""
  "^BG%s%s^K1 è stato fatto esplodere dalla saetta dell'Electro di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:476
+ #: qcsrc/common/notifications.qh:516
  #, c-format
  msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
  msgstr ""
  "^BG%s%s^K1 ha sentito l'aria elettrificata della combo dell'Electro di ^BG"
  "%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:477
+ #: qcsrc/common/notifications.qh:517
  #, c-format
- msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
+ msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro orb%s%s"
  msgstr ""
- "^BG%s%s^K1 si è avvicinato troppo al plasma dell'Electro di ^BG%s^K1%s%s"
+ "^BG%s%s^K1 si è avvicinato troppo alla sfera dell'Electro di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:478
+ #: qcsrc/common/notifications.qh:518
  #, c-format
- msgid "^BG%s^K1 played with Electro plasma%s%s"
- msgstr "^BG%s^K1 ha giocato con il plasma dell'Electro%s%s"
+ msgid "^BG%s^K1 played with Electro bolts%s%s"
+ msgstr "^BG%s^K1 ha giocato con le saette dell'Electro%s%s"
  
- #: qcsrc/common/notifications.qh:479
+ #: qcsrc/common/notifications.qh:519
  #, c-format
- msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
- msgstr "^BG%s^K1 non si è ricordato dove aveva messo l'Electro plasma%s%s"
+ msgid "^BG%s^K1 could not remember where they put their Electro orb%s%s"
+ msgstr ""
+ "^BG%s^K1 non si è ricordato dove aveva messo la propria sfera di Electro%s%s"
  
- #: qcsrc/common/notifications.qh:480
+ #: qcsrc/common/notifications.qh:520
  #, c-format
  msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
  msgstr "^BG%s%s^K1 si è avvicinato troppo alla palla di fuoco di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:481
+ #: qcsrc/common/notifications.qh:521
  #, c-format
  msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
  msgstr "^BG%s%s^K1 è stato bruciato dalla mina di fuoco di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:482
+ #: qcsrc/common/notifications.qh:522
  #, c-format
  msgid "^BG%s^K1 should have used a smaller gun%s%s"
  msgstr "^BG%s^K1 avrebbe dovuto usare un'arma più piccola%s%s"
  
- #: qcsrc/common/notifications.qh:483
+ #: qcsrc/common/notifications.qh:523
  #, c-format
  msgid "^BG%s^K1 forgot about their firemine%s%s"
  msgstr "^BG%s^K1 si è dimenticato della propria mina di fuoco%s%s"
  
- #: qcsrc/common/notifications.qh:484
+ #: qcsrc/common/notifications.qh:524
  #, c-format
  msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
  msgstr ""
  "^BG%s%s^K1 è stato colpito ripetutamente da una raffica di razzi dell'Hagar "
  "di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:485
+ #: qcsrc/common/notifications.qh:525
  #, c-format
  msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
  msgstr ""
  "^BG%s%s^K1 è stato colpito ripetutamente dai razzi dell'Hagar di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:486
+ #: qcsrc/common/notifications.qh:526
  #, c-format
  msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
  msgstr "^BG%s^K1 ha giocato con i piccoli razzi dell'Hagar%s%s"
  
- #: qcsrc/common/notifications.qh:487
+ #: qcsrc/common/notifications.qh:527
  #, c-format
  msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
  msgstr "^BG%s%s^K1 è stato abbattuto con l'HLAC di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:488
+ #: qcsrc/common/notifications.qh:528
  #, c-format
  msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
  msgstr "^BG%s^K1 è diventato un pò sovraeccitato con il proprio HLAC%s%s"
  
- #: qcsrc/common/notifications.qh:489
+ #: qcsrc/common/notifications.qh:529
+ #, c-format
+ msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Heavy Machine Gun%s%s"
+ msgstr "^BG%s%s^K1 è stato cecchinato dalla Heavy Machine Gun di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:530
+ #, c-format
+ msgid "^BG%s%s^K1 was torn to bits by ^BG%s^K1's Heavy Machine Gun%s%s"
+ msgstr "^BG%s%s^K1 è stato dilaniato dall'Heavy Machine Gun di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:531
  #, c-format
  msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
  msgstr ""
  "^BG%s%s^K1 è stato catturato nella bomba di gravità dell'Hook di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:490
+ #: qcsrc/common/notifications.qh:532
  #, c-format
  msgid ""
  "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
@@@ -2205,181 -2432,200 +2432,200 @@@ msgstr "
  "^BG%s%s^K1 è morto nella gran esibizione di ^BG%s^K1 con la @!#%%'n Klein "
  "Bottle%s%s"
  
- #: qcsrc/common/notifications.qh:491
+ #: qcsrc/common/notifications.qh:533
  #, c-format
  msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
  msgstr "^BG%s^K1 si è fatto male alle orecchie con la @!#%%'n Klein Bottle%s%s"
  
- #: qcsrc/common/notifications.qh:492
+ #: qcsrc/common/notifications.qh:534
  #, c-format
- msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
- msgstr "^BG%s%s^K1 è stato colpito a morte dal Laser di ^BG%s^K1%s%s"
+ msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
+ msgstr "^BG%s%s^K1 è stato cecchinato dalla Machine Gun di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:493
+ #: qcsrc/common/notifications.qh:535
+ #, c-format
+ msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
+ msgstr "^BG%s%s^K1 è stato crivellato dalla Machine gun di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:536 qcsrc/common/notifications.qh:731
  #, c-format
- msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
- msgstr "^BG%s^K1 si è spedito all'inferno col suo stesso Laser%s%s"
+ msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
+ msgstr "^BGNon puoi piazzare più di ^F2%s^BG mine alla volta"
  
- #: qcsrc/common/notifications.qh:494
+ #: qcsrc/common/notifications.qh:537
  #, c-format
  msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
  msgstr "^BG%s%s^K1 si è avvicinato troppo alla mina di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:495
+ #: qcsrc/common/notifications.qh:538
  #, c-format
  msgid "^BG%s^K1 forgot about their mine%s%s"
  msgstr "^BG%s^K1 si è dimenticato della propria mina%s%s"
  
- #: qcsrc/common/notifications.qh:496
- #, c-format
- msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
- msgstr "^BG%s%s^K1 è stato vaporizzato dal Minstanex di ^BG%s^K1%s%s"
- #: qcsrc/common/notifications.qh:497
+ #: qcsrc/common/notifications.qh:539
  #, c-format
  msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
  msgstr ""
  "^BG%s%s^K1 si è avvicinato troppo alla granata del Mortar di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:498
+ #: qcsrc/common/notifications.qh:540
  #, c-format
  msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
  msgstr "^BG%s%s^K1 ha mangiato la granata del Mortar di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:499
+ #: qcsrc/common/notifications.qh:541
  #, c-format
  msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
  msgstr "^BG%s^K1 non ha visto la granata del suo Mortar%s%s"
  
- #: qcsrc/common/notifications.qh:500
+ #: qcsrc/common/notifications.qh:542
  #, c-format
  msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
  msgstr "^BG%s^K1 si è fatto esplodere con il proprio Mortar%s%s"
  
- #: qcsrc/common/notifications.qh:501
- #, c-format
- msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
- msgstr "^BG%s%s^K1 è stato vaporizzato dal Nex di ^BG%s^K1%s%s"
- #: qcsrc/common/notifications.qh:502
+ #: qcsrc/common/notifications.qh:543
  #, c-format
  msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
  msgstr "^BG%s%s^K1 è stato cecchinato con un Rifle da ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:503
+ #: qcsrc/common/notifications.qh:544
  #, c-format
  msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
  msgstr ""
  "^BG%s%s^K1 è morto nella raffica di proiettili del Rifle di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:504
+ #: qcsrc/common/notifications.qh:545
  #, c-format
  msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
  msgstr ""
  "^BG%s%s^K1 non è riuscito a nascondersi dalla raffica di proiettili del "
  "Rifle di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:505
+ #: qcsrc/common/notifications.qh:546
  #, c-format
  msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
  msgstr "^BG%s%s^K1 non è riuscito a nascondersi dal Rifle di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:506
+ #: qcsrc/common/notifications.qh:547
  #, c-format
- msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
- msgstr "^BG%s%s^K1 ha mangiato il razzo di ^BG%s^K1%s%s"
+ msgid "^BG%s%s^K1 was sawn in half by ^BG%s^K1's Rocket Propelled Chainsaw%s%s"
+ msgstr ""
+ "^BG%s%s^K1 è stato tagliato in due dal Rocket Propelled Chainsaw di ^BG"
+ "%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:507
+ #: qcsrc/common/notifications.qh:548
  #, c-format
- msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
- msgstr "^BG%s%s^K1 si è avvicinato troppo al razzo di ^BG%s^K1%s%s"
+ msgid "^BG%s%s^K1 almost dodged ^BG%s^K1's Rocket Propelled Chainsaw%s%s"
+ msgstr ""
+ "^BG%s%s^K1 ha quasi schivato il Rocket Propelled Chainsaw di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:508
+ #: qcsrc/common/notifications.qh:549
  #, c-format
- msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
- msgstr "^BG%s^K1 si è fatto esplodere con il proprio Rocketlauncher%s%s"
+ msgid "^BG%s^K1 was sawn in half by their own Rocket Propelled Chainsaw%s%s"
+ msgstr ""
+ "^BG%s^K1 è stato segato in due dal proprio Rocket Propelled Chainsaw%s%s"
  
- #: qcsrc/common/notifications.qh:509
+ #: qcsrc/common/notifications.qh:550
+ #, c-format
+ msgid "^BG%s^K1 blew themself up with their Rocket Propelled Chainsaw%s%s"
+ msgstr ""
+ "^BG%s^K1 si è fatto esplodere con il proprio Rocket Propelled Chainsaw%s%s"
+ #: qcsrc/common/notifications.qh:551
  #, c-format
  msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
  msgstr ""
  "^BG%s%s^K1 è stato colpito ripetutamente di razzi del Seeker di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:510
+ #: qcsrc/common/notifications.qh:552
  #, c-format
  msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
  msgstr "^BG%s%s^K1 è stato puntato dal Seeker di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:511
+ #: qcsrc/common/notifications.qh:553
  #, c-format
  msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
  msgstr "^BG%s^K1 ha giocato con i piccoli razzi del Seeker%s%s"
  
- #: qcsrc/common/notifications.qh:512
+ #: qcsrc/common/notifications.qh:554
+ #, c-format
+ msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shockwave%s%s"
+ msgstr "^BG%s%s^K1 è stato abbattuto dallo Shockwave di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:555
+ #, c-format
+ msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shockwave%s%s"
+ msgstr "^BG%s%s^K1 ha schiaffeggiato ^BG%s^K1 con un grande Shockwave%s%s"
+ #: qcsrc/common/notifications.qh:556
  #, c-format
  msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
- msgstr "^BG%s%s^K1 è stato abbattuto dalla Shotgun di ^BG%s^K1%s%s"
+ msgstr "^BG%s%s^K1 è stato abbattuto dallo Shotgun di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:513
+ #: qcsrc/common/notifications.qh:557
  #, c-format
  msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
  msgstr "^BG%s%s^K1 ha schiaffeggiato ^BG%s^K1 con una grossa Shotgun%s%s"
  
- #: qcsrc/common/notifications.qh:514
+ #: qcsrc/common/notifications.qh:558
  #, c-format
  msgid "^BG%s^K1 is now thinking with portals%s%s"
  msgstr "^BG%s^K1 sta pensando in termini di portali%s%s"
  
- #: qcsrc/common/notifications.qh:515
+ #: qcsrc/common/notifications.qh:559
  #, c-format
  msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
  msgstr ""
  "^BG%s%s^K1 è morto nella gran esibizione di ^BG%s^K1 con la @!#%%'n Tuba%s%s"
  
- #: qcsrc/common/notifications.qh:516
+ #: qcsrc/common/notifications.qh:560
  #, c-format
  msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
  msgstr "^BG%s^K1 si è fatto male alle orecchie con la @!#%%'n Tuba%s%s"
  
- #: qcsrc/common/notifications.qh:517
+ #: qcsrc/common/notifications.qh:561
  #, c-format
- msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
- msgstr "^BG%s%s^K1 è stato cecchinato dalla Machine Gun di ^BG%s^K1%s%s"
+ msgid "^BG%s%s^K1 has been sublimated by ^BG%s^K1's Vaporizer%s%s"
+ msgstr "^BG%s%s^K1 è stato sublimato dal Vaporizer di ^BG%s^K1%s%s"
  
- #: qcsrc/common/notifications.qh:518
+ #: qcsrc/common/notifications.qh:562
  #, c-format
- msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
- msgstr "^BG%s%s^K1 è stato crivellato dalla Machine gun di ^BG%s^K1%s%s"
+ msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Vortex%s%s"
+ msgstr "^BG%s%s^K1 è stato vaporizzato dal Vortex di ^BG%s^K1%s%s"
+ #: qcsrc/common/notifications.qh:580
+ msgid "^F4You are now alone!"
+ msgstr "^F4Ora sei da solo!"
  
- #: qcsrc/common/notifications.qh:536
+ #: qcsrc/common/notifications.qh:581
  msgid "^BGYou are attacking!"
  msgstr "^BGStai attaccando!"
  
- #: qcsrc/common/notifications.qh:537
+ #: qcsrc/common/notifications.qh:582
  msgid "^BGYou are defending!"
  msgstr "^BGStai difendendo!"
  
- #: qcsrc/common/notifications.qh:538
+ #: qcsrc/common/notifications.qh:583
  msgid "^F4Begin!"
  msgstr "^F4Via!"
  
- #: qcsrc/common/notifications.qh:539
+ #: qcsrc/common/notifications.qh:584
  msgid "^F4Game starts in ^COUNT"
  msgstr "^F4La partita inizia in ^COUNT"
  
- #: qcsrc/common/notifications.qh:540
+ #: qcsrc/common/notifications.qh:585
  msgid "^F4Round starts in ^COUNT"
  msgstr "^F4Il round inizia in ^COUNT"
  
- #: qcsrc/common/notifications.qh:541
+ #: qcsrc/common/notifications.qh:586
  msgid "^F4Round cannot start"
  msgstr "^F4Il round non può iniziare"
  
- #: qcsrc/common/notifications.qh:544
+ #: qcsrc/common/notifications.qh:589
  msgid "^F2Don't camp!"
  msgstr "^F2Non campeggiare!"
  
- #: qcsrc/common/notifications.qh:545
+ #: qcsrc/common/notifications.qh:591
  msgid ""
  "^BGYou are now free.\n"
  "^BGFeel free to ^F2try to capture^BG the flag again\n"
@@@ -2389,7 -2635,7 +2635,7 @@@ msgstr "
  "^BGPuoi ^F2riprovare a catturare^BG la bandiera\n"
  "^BGse credi di potercela fare."
  
- #: qcsrc/common/notifications.qh:546
+ #: qcsrc/common/notifications.qh:592
  msgid ""
  "^BGYou are now ^F1shielded^BG from the flag\n"
  "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
@@@ -2399,165 -2645,169 +2645,169 @@@ msgstr "
  "^BGpoichè ^F2hai tentato troppe volte^BG di catturarla.\n"
  "^BGSegna qualche punto in difesa prima di riprovare la cattura."
  
- #: qcsrc/common/notifications.qh:547
+ #: qcsrc/common/notifications.qh:593
  msgid "^BGYou captured the ^TC^TT^BG flag!"
  msgstr "^BGHai catturato la bandiera ^TC^TT^BG!"
  
- #: qcsrc/common/notifications.qh:548
+ #: qcsrc/common/notifications.qh:594
  #, c-format
  msgid "^BGToo many flag throws! Throwing disabled for %s."
  msgstr ""
  "^BGHai lanciato la bandiera troppo spesso! Il lancio è disabilitato per %s."
  
- #: qcsrc/common/notifications.qh:549
+ #: qcsrc/common/notifications.qh:595
  #, c-format
  msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
  msgstr "^BG%s^BG ha passato la bandiera ^TC^TT^BG a %s"
  
- #: qcsrc/common/notifications.qh:550
+ #: qcsrc/common/notifications.qh:596
  #, c-format
  msgid "^BGYou received the ^TC^TT^BG flag from %s"
  msgstr "^BGHai ricevuto la bandiera ^TC^TT^BG da %s"
  
- #: qcsrc/common/notifications.qh:551
+ #: qcsrc/common/notifications.qh:597
  #, c-format
  msgid "^BG%s^BG requests you to pass the flag%s"
  msgstr "^BG%s^BG ti chiede di passargli la bandiera%s"
  
- #: qcsrc/common/notifications.qh:552
+ #: qcsrc/common/notifications.qh:598
  #, c-format
  msgid "^BGRequesting %s^BG to pass you the flag"
  msgstr "^BGStai chiedendo a %s^BG di passarti la bandiera"
  
- #: qcsrc/common/notifications.qh:553
+ #: qcsrc/common/notifications.qh:599
  #, c-format
  msgid "^BGYou passed the ^TC^TT^BG flag to %s"
  msgstr "^BGHai passato la bandiera ^TC^TT^BG a %s"
  
- #: qcsrc/common/notifications.qh:554
+ #: qcsrc/common/notifications.qh:600
  msgid "^BGYou got the ^TC^TT^BG flag!"
  msgstr "^BGHai preso la bandiera ^TC^TT^BG!"
  
- #: qcsrc/common/notifications.qh:555
+ #: qcsrc/common/notifications.qh:601
  #, c-format
  msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
  msgstr "^BGIl %snemico^BG ha la tua bandiera! Recuperala!"
  
- #: qcsrc/common/notifications.qh:556
+ #: qcsrc/common/notifications.qh:602
  #, c-format
  msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
  msgstr "^BGIl %snemico (^BG%s%s)^BG ha la tua bandiera! Recuperala!"
  
- #: qcsrc/common/notifications.qh:557
+ #: qcsrc/common/notifications.qh:603
  #, c-format
  msgid "^BGYour %steam mate^BG got the flag! Protect them!"
  msgstr "^BGIl tuo %scompagno di squadra^BG ha la bandiera! Proteggilo!"
  
- #: qcsrc/common/notifications.qh:558
+ #: qcsrc/common/notifications.qh:604
  #, c-format
  msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
  msgstr ""
  "^BGIl tuo %scompagno di squadra (^BG%s%s)^BG ha la bandiera! Proteggilo!"
  
- #: qcsrc/common/notifications.qh:559
+ #: qcsrc/common/notifications.qh:605
  msgid "^BGYou returned the ^TC^TT^BG flag!"
  msgstr "^BGHai riportato la bandiera ^TC^TT^BG!"
  
- #: qcsrc/common/notifications.qh:560
+ #: qcsrc/common/notifications.qh:606
  msgid "^BGStalemate! Enemies can now see you on radar!"
  msgstr "^BGStallo! I nemici ora possono vederti nel radar!"
  
- #: qcsrc/common/notifications.qh:561
+ #: qcsrc/common/notifications.qh:607
  msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
  msgstr ""
  "^BGStallo! I portatori di bandiera ora possono essere visti dai nemici nel "
  "radar!"
  
- #: qcsrc/common/notifications.qh:562
+ #: qcsrc/common/notifications.qh:608
  #, c-format
  msgid "^K3%sYou fragged ^BG%s"
  msgstr "^K3%sHai fraggato ^BG%s"
  
- #: qcsrc/common/notifications.qh:562
+ #: qcsrc/common/notifications.qh:608
  #, c-format
  msgid "^K3%sYou scored against ^BG%s"
  msgstr "^K3%sHai segnato contro ^BG%s"
  
- #: qcsrc/common/notifications.qh:563
+ #: qcsrc/common/notifications.qh:609
  #, c-format
  msgid "^K1%sYou were fragged by ^BG%s"
  msgstr "^K1%sSei stato fraggato da ^BG%s"
  
- #: qcsrc/common/notifications.qh:563
+ #: qcsrc/common/notifications.qh:609
  #, c-format
  msgid "^K1%sYou were scored against by ^BG%s"
  msgstr "^K1%sTi ha segnato ^BG%s"
  
- #: qcsrc/common/notifications.qh:564
+ #: qcsrc/common/notifications.qh:610
  #, c-format
  msgid "^K1%sYou were fragged by ^BG%s^BG%s"
  msgstr "^K1%sSei stato fraggato da ^BG%s^BG%s"
  
- #: qcsrc/common/notifications.qh:564
+ #: qcsrc/common/notifications.qh:610
  #, c-format
  msgid "^K1%sYou were scored against by ^BG%s^BG%s"
  msgstr "^K1%sTi è stato segnato da ^BG%s^BG%s"
  
- #: qcsrc/common/notifications.qh:565
+ #: qcsrc/common/notifications.qh:611
  #, c-format
  msgid "^K3%sYou fragged ^BG%s^BG%s"
  msgstr "^K3%sHai fraggato ^BG%s^BG%s"
  
- #: qcsrc/common/notifications.qh:565
+ #: qcsrc/common/notifications.qh:611
  #, c-format
  msgid "^K3%sYou scored against ^BG%s^BG%s"
  msgstr "^K3%sHai segnato contro ^BG%s^BG%s"
  
- #: qcsrc/common/notifications.qh:566
+ #: qcsrc/common/notifications.qh:612
  #, c-format
  msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
  msgstr "^K1%sHai segnato contro ^BG%s^K1 mentre stava scrivendo"
  
- #: qcsrc/common/notifications.qh:566
+ #: qcsrc/common/notifications.qh:612
  #, c-format
  msgid "^K1%sYou typefragged ^BG%s"
  msgstr "^K1%sHai fraggato ^BG%s mentre scriveva (typefrag)"
  
- #: qcsrc/common/notifications.qh:567
+ #: qcsrc/common/notifications.qh:613
  #, c-format
  msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
  msgstr "^K1%sSei stato segnato da ^BG%s^K1 mentre stavi scrivendo!"
  
- #: qcsrc/common/notifications.qh:567
+ #: qcsrc/common/notifications.qh:613
  #, c-format
  msgid "^K1%sYou were typefragged by ^BG%s"
  msgstr "^K1%sSei stato fraggato da ^BG%s mentre scrivevi (typefrag)"
  
- #: qcsrc/common/notifications.qh:568
+ #: qcsrc/common/notifications.qh:614
  #, c-format
  msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
  msgstr "^K1%sSei stato segnato da ^BG%s^K1 mentre stavi scrivendo^BG%s"
  
- #: qcsrc/common/notifications.qh:568
+ #: qcsrc/common/notifications.qh:614
  #, c-format
  msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
  msgstr "^K1%sSei stato fraggato da ^BG%s^BG%s mentre scrivevi (typefrag)"
  
- #: qcsrc/common/notifications.qh:569
+ #: qcsrc/common/notifications.qh:615
  #, c-format
  msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
  msgstr "^K1%sHai segnato contro ^BG%s^K1 mentre stava scrivendo^BG%s"
  
- #: qcsrc/common/notifications.qh:569
+ #: qcsrc/common/notifications.qh:615
  #, c-format
  msgid "^K1%sYou typefragged ^BG%s^BG%s"
  msgstr "^K1%sHai fraggato ^BG%s^BG%s mentre scriveva (typefrag)"
  
- #: qcsrc/common/notifications.qh:570
+ #: qcsrc/common/notifications.qh:616
  msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
  msgstr "^BGPremi ^F2DROPWEAPON^BG di nuovo per lanciare la granata!"
  
- #: qcsrc/common/notifications.qh:571
+ #: qcsrc/common/notifications.qh:617
+ msgid "^F2You got a ^K1BONUS GRENADE^F2!"
+ msgstr "^F2Hai preso una ^K1GRANATA BONUS^F2!"
+ #: qcsrc/common/notifications.qh:618
  #, c-format
  msgid ""
  "^BGYou have been moved into a different team\n"
@@@ -2566,193 -2816,217 +2816,217 @@@ msgstr "
  "^BGSei stato spostato in un'altra squadra\n"
  "Ora sei in: %s"
  
- #: qcsrc/common/notifications.qh:572
+ #: qcsrc/common/notifications.qh:619
  msgid "^K1Don't go against your team mates!"
  msgstr "^K1Non andare contro i tuoi compagni di squadra!"
  
- #: qcsrc/common/notifications.qh:572
+ #: qcsrc/common/notifications.qh:619
  msgid "^K1Don't shoot your team mates!"
  msgstr "^K1Non sparare ai tuoi compagni di squadra!"
  
- #: qcsrc/common/notifications.qh:573
+ #: qcsrc/common/notifications.qh:620
  msgid "^K1Die camper!"
  msgstr "^K1Muori camper!"
  
- #: qcsrc/common/notifications.qh:573
+ #: qcsrc/common/notifications.qh:620
  msgid "^K1Reconsider your tactics, camper!"
  msgstr "^K1Riconsidera le tue tattiche, camper!"
  
- #: qcsrc/common/notifications.qh:574
+ #: qcsrc/common/notifications.qh:621
  msgid "^K1You unfairly eliminated yourself!"
  msgstr "^K1Ti sei eliminato slealmente!"
  
- #: qcsrc/common/notifications.qh:575
+ #: qcsrc/common/notifications.qh:622
  #, c-format
  msgid "^K1You were %s"
  msgstr "^K1Sei stato %s"
  
- #: qcsrc/common/notifications.qh:576
+ #: qcsrc/common/notifications.qh:623
  msgid "^K1You couldn't catch your breath!"
  msgstr "^K1Non sei riuscito a trattenere il fiato!"
  
- #: qcsrc/common/notifications.qh:577
+ #: qcsrc/common/notifications.qh:624
  msgid "^K1You hit the ground with a crunch!"
  msgstr "^K1Ti sei schiantato a terra!"
  
- #: qcsrc/common/notifications.qh:578
+ #: qcsrc/common/notifications.qh:625
  msgid "^K1You felt a little too hot!"
  msgstr "^K1Hai sentito un pò troppo caldo!"
  
- #: qcsrc/common/notifications.qh:578
+ #: qcsrc/common/notifications.qh:625
  msgid "^K1You got a little bit too crispy!"
  msgstr "^K1Sei diventato un pò troppo croccante!"
  
- #: qcsrc/common/notifications.qh:579
+ #: qcsrc/common/notifications.qh:626
  msgid "^K1You killed your own dumb self!"
  msgstr "^K1Ti sei ucciso, tonto!"
  
- #: qcsrc/common/notifications.qh:579
+ #: qcsrc/common/notifications.qh:626
  msgid "^K1You need to be more careful!"
  msgstr "^K1Devi essere più prudente!"
  
- #: qcsrc/common/notifications.qh:580
+ #: qcsrc/common/notifications.qh:627
  msgid "^K1You couldn't stand the heat!"
  msgstr "^K1Non hai resistito al calore!"
  
- #: qcsrc/common/notifications.qh:581
+ #: qcsrc/common/notifications.qh:628
+ msgid "^K1You need to watch out for monsters!"
+ msgstr "^K1Devi fare attenzione ai mostri!"
+ #: qcsrc/common/notifications.qh:628
+ msgid "^K1You were killed by a monster!"
+ msgstr "^K1Sei stato ucciso da un mostro!"
+ #: qcsrc/common/notifications.qh:629
  msgid "^K1Tastes like chicken!"
  msgstr "^K1Sa di pollo!"
  
- #: qcsrc/common/notifications.qh:581
+ #: qcsrc/common/notifications.qh:629
  msgid "^K1You forgot to put the pin back in!"
  msgstr "^K1Ti sei dimenticato di reinserire la sicura!"
  
- #: qcsrc/common/notifications.qh:582
+ #: qcsrc/common/notifications.qh:630
+ msgid "^K1Hanging around a napalm explosion is bad!"
+ msgstr "^K1Stare ad aspettare una esplosione di napalm è male!"
+ #: qcsrc/common/notifications.qh:631
+ msgid "^K1You felt a little chilly!"
+ msgstr "^K1Ti sei sentito un pò infreddolito!"
+ #: qcsrc/common/notifications.qh:631
+ msgid "^K1You got a little bit too cold!"
+ msgstr "^K1Sei diventato un pò troppo freddo!"
+ #: qcsrc/common/notifications.qh:632
+ msgid "^K1Your Healing Nade is a bit defective"
+ msgstr "^K1La tua Granata Curante è un pò difettosa"
+ #: qcsrc/common/notifications.qh:633
  msgid "^K1You are respawning for running out of ammo..."
  msgstr "^K1Stai rinascendo per mancanza di munizioni..."
  
- #: qcsrc/common/notifications.qh:582
+ #: qcsrc/common/notifications.qh:633
  msgid "^K1You were killed for running out of ammo..."
  msgstr "^K1Sei stato ucciso per mancanza di munizioni..."
  
- #: qcsrc/common/notifications.qh:583
+ #: qcsrc/common/notifications.qh:634
  msgid "^K1You grew too old without taking your medicine"
  msgstr "^K1Sei diventato troppo vecchio senza prendere le tue medicine"
  
- #: qcsrc/common/notifications.qh:583
+ #: qcsrc/common/notifications.qh:634
  msgid "^K1You need to preserve your health"
  msgstr "^K1Devi preservare la tua vita"
  
- #: qcsrc/common/notifications.qh:584
+ #: qcsrc/common/notifications.qh:635
  msgid "^K1You became a shooting star!"
  msgstr "^K1Sei diventato una stella cadente!"
  
- #: qcsrc/common/notifications.qh:585
+ #: qcsrc/common/notifications.qh:636
  msgid "^K1You melted away in slime!"
  msgstr "^K1Ti sei sciolto nel fango!"
  
- #: qcsrc/common/notifications.qh:586
+ #: qcsrc/common/notifications.qh:637
  msgid "^K1You committed suicide!"
  msgstr "^K1Ti sei suicidato!"
  
- #: qcsrc/common/notifications.qh:586
+ #: qcsrc/common/notifications.qh:637
  msgid "^K1You ended it all!"
  msgstr "^K1Hai messo fine a tutto!"
  
- #: qcsrc/common/notifications.qh:587
+ #: qcsrc/common/notifications.qh:638
  msgid "^K1You got stuck in a swamp!"
  msgstr "^K1Sei rimasto bloccato in una palude!"
  
- #: qcsrc/common/notifications.qh:588
+ #: qcsrc/common/notifications.qh:639
  #, c-format
  msgid "^BGYou are now on: %s"
  msgstr "^BGOra sei nella: %s"
  
- #: qcsrc/common/notifications.qh:589
+ #: qcsrc/common/notifications.qh:640
  msgid "^K1You died in an accident!"
  msgstr "^K1Sei morto in un incidente!"
  
- #: qcsrc/common/notifications.qh:590
+ #: qcsrc/common/notifications.qh:641
  msgid "^K1You had an unfortunate run in with a turret!"
  msgstr "^K1Hai avuto un incontro sfortunato con una torretta!"
  
- #: qcsrc/common/notifications.qh:590
+ #: qcsrc/common/notifications.qh:641
  msgid "^K1You were fragged by a turret!"
  msgstr "^K1Sei stato fraggato da una torretta!"
  
- #: qcsrc/common/notifications.qh:591
+ #: qcsrc/common/notifications.qh:642
  msgid "^K1You had an unfortunate run in with an eWheel turret!"
  msgstr "^K1Hai avuto un incontro sfortunato con una torretta eWheel!"
  
- #: qcsrc/common/notifications.qh:591
+ #: qcsrc/common/notifications.qh:642
  msgid "^K1You were fragged by an eWheel turret!"
  msgstr "^K1Sei stato fraggato da una torretta eWheel!"
  
- #: qcsrc/common/notifications.qh:592
+ #: qcsrc/common/notifications.qh:643
  msgid "^K1You had an unfortunate run in with a Walker turret!"
  msgstr "^K1Hai avuto un incontro sfortunato con una torretta eWheel!"
  
- #: qcsrc/common/notifications.qh:592
+ #: qcsrc/common/notifications.qh:643
  msgid "^K1You were fragged by a Walker turret!"
  msgstr "^K1Sei stato fraggato da una torretta Walker!"
  
- #: qcsrc/common/notifications.qh:593
+ #: qcsrc/common/notifications.qh:644
  msgid "^K1You got caught in the blast of a Bumblebee explosion!"
  msgstr "^K1Sei stato coinvolto nello scoppio dell'esplosione di un Bumblebee!"
  
- #: qcsrc/common/notifications.qh:594
+ #: qcsrc/common/notifications.qh:645
  msgid "^K1You were crushed by a vehicle!"
  msgstr "^K1Sei stato schiacciato da un veicolo!"
  
- #: qcsrc/common/notifications.qh:595
+ #: qcsrc/common/notifications.qh:646
  msgid "^K1You were caught in a Raptor cluster bomb!"
  msgstr "^K1Sei stato preso dalla bomba a grappolo di un Raptor!"
  
- #: qcsrc/common/notifications.qh:596
+ #: qcsrc/common/notifications.qh:647
  msgid "^K1You got caught in the blast of a Raptor explosion!"
  msgstr "^K1Sei stato coinvolto nello scoppio dell'esplosione di un Raptor!"
  
- #: qcsrc/common/notifications.qh:597
+ #: qcsrc/common/notifications.qh:648
  msgid "^K1You got caught in the blast of a Spiderbot explosion!"
  msgstr "^K1Sei stato coinvolto nello scoppio dell'esplosione di uno Spiderbot!"
  
- #: qcsrc/common/notifications.qh:598
+ #: qcsrc/common/notifications.qh:649
  msgid "^K1You were blasted to bits by a Spiderbot rocket!"
  msgstr "^K1Sei stato fatto esplodere in pezzi dal razzo di uno Spiderbot!"
  
- #: qcsrc/common/notifications.qh:599
+ #: qcsrc/common/notifications.qh:650
  msgid "^K1You got caught in the blast of a Racer explosion!"
  msgstr "^K1Sei stato coinvolto nello scoppio dell'esplosione di un Racer!"
  
- #: qcsrc/common/notifications.qh:600
+ #: qcsrc/common/notifications.qh:651
  msgid "^K1You couldn't find shelter from a Racer rocket!"
  msgstr "^K1Non sei riuscito a trovare riparo dal razzo di un Racer!"
  
- #: qcsrc/common/notifications.qh:601
+ #: qcsrc/common/notifications.qh:652
  msgid "^K1Watch your step!"
  msgstr "^K1Attento a dove metti i piedi!"
  
- #: qcsrc/common/notifications.qh:602
+ #: qcsrc/common/notifications.qh:653
  #, c-format
  msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
  msgstr "^K1Idiota! Hai fraggato ^BG%s^K1, un compagno di squadra!"
  
- #: qcsrc/common/notifications.qh:602
+ #: qcsrc/common/notifications.qh:653
  #, c-format
  msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
  msgstr "^K1Idiota! Sei andato contro ^BG%s^K1, un compagno di squadra!"
  
- #: qcsrc/common/notifications.qh:603
+ #: qcsrc/common/notifications.qh:654
  #, c-format
  msgid "^K1You were fragged by ^BG%s^K1, a team mate"
  msgstr "^K1Sei stato fraggato da ^BG%s^K1, un compagno di squadra"
  
- #: qcsrc/common/notifications.qh:603
+ #: qcsrc/common/notifications.qh:654
  #, c-format
  msgid "^K1You were scored against by ^BG%s^K1, a team mate"
  msgstr "^K1Sei stato segnato da ^BG%s^K1, un compagno di squadra"
  
- #: qcsrc/common/notifications.qh:604
+ #: qcsrc/common/notifications.qh:655
  msgid ""
  "^K1Stop idling!\n"
  "^BGDisconnecting in ^COUNT..."
@@@ -2760,48 -3034,67 +3034,67 @@@ msgstr "
  "^K1Smettila di non far nulla!\n"
  "^BGDisconnessione in ^COUNT..."
  
- #: qcsrc/common/notifications.qh:605
+ #: qcsrc/common/notifications.qh:656
+ #, c-format
+ msgid "^BGYou need %s^BG!"
+ msgstr "^BGHai bisogno di %s^BG!"
+ #: qcsrc/common/notifications.qh:657
+ #, c-format
+ msgid "^BGYou also need %s^BG!"
+ msgstr "^BGHai bisogno anche di %s^BG!"
+ #: qcsrc/common/notifications.qh:658
+ msgid "^BGDoor unlocked!"
+ msgstr "^BGPorta aperta!"
+ #: qcsrc/common/notifications.qh:659
  msgid "^F2You picked up some extra lives"
  msgstr "^F2Hai preso alcune vite extra"
  
- #: qcsrc/common/notifications.qh:606
+ #: qcsrc/common/notifications.qh:660
  #, c-format
  msgid "^K3You froze ^BG%s"
  msgstr "^K3Hai congelato ^BG%s"
  
- #: qcsrc/common/notifications.qh:607
+ #: qcsrc/common/notifications.qh:661
  #, c-format
  msgid "^K1You were frozen by ^BG%s"
  msgstr "^K1Sei stato congelato da ^BG%s"
  
- #: qcsrc/common/notifications.qh:608
+ #: qcsrc/common/notifications.qh:662
  #, c-format
  msgid "^K3You revived ^BG%s"
  msgstr "^K3Hai risvegliato ^BG%s"
  
- #: qcsrc/common/notifications.qh:609
+ #: qcsrc/common/notifications.qh:663
  msgid "^K3You revived yourself"
  msgstr "^K3Ti sei risvegliato da solo"
  
- #: qcsrc/common/notifications.qh:610
+ #: qcsrc/common/notifications.qh:664
  #, c-format
  msgid "^K3You were revived by ^BG%s"
  msgstr "^K3Sei stato risvegliato da ^BG%s"
  
- #: qcsrc/common/notifications.qh:611
+ #: qcsrc/common/notifications.qh:665
  #, c-format
  msgid "^K3You were automatically revived after %s second(s)"
  msgstr "^K3Sei stato risvegliato automaticamente dopo %s secondi"
  
- #: qcsrc/common/notifications.qh:614
+ #: qcsrc/common/notifications.qh:668
  msgid "^K1You froze yourself"
  msgstr "^K1Ti sei congelato da solo"
  
- #: qcsrc/common/notifications.qh:615
+ #: qcsrc/common/notifications.qh:669
  msgid "^K1Round already started, you spawn as frozen"
  msgstr "^K1Round già iniziato, nasci come congelato"
  
- #: qcsrc/common/notifications.qh:622
+ #: qcsrc/common/notifications.qh:670
+ #, c-format
+ msgid "^K1A %s has arrived!"
+ msgstr "^K1E' arrivato un %s!"
+ #: qcsrc/common/notifications.qh:679
  msgid ""
  "^K1No spawnpoints available!\n"
  "Hope your team can fix it..."
@@@ -2809,7 -3102,7 +3102,7 @@@ msgstr "
  "^K1Nessun punto di nascita disponibile!\n"
  "Spero che la tua squadra possa rimediare a questo..."
  
- #: qcsrc/common/notifications.qh:623
+ #: qcsrc/common/notifications.qh:680
  msgid ""
  "^K1You may not join the game at this time.\n"
  "The player limit reached maximum capacity."
@@@ -2817,11 -3110,15 +3110,15 @@@ msgstr "
  "^K1Non puoi entrare in gioco in questo momento.\n"
  "Il limite dei giocatori ha raggiunto la massima capacità."
  
- #: qcsrc/common/notifications.qh:626
+ #: qcsrc/common/notifications.qh:683
+ msgid "^BGYou picked up the ball"
+ msgstr "^BGHai preso la palla"
+ #: qcsrc/common/notifications.qh:684
  msgid "^BGKilling people while you don't have the ball gives no points!"
  msgstr "^BGAmmazzare le persone quando non hai la palla non dà punti!"
  
- #: qcsrc/common/notifications.qh:627
+ #: qcsrc/common/notifications.qh:685
  msgid ""
  "^BGAll keys are in your team's hands!\n"
  "Help the key carriers to meet!"
@@@ -2829,15 -3126,15 +3126,15 @@@ msgstr "
  "^BGTutte le chiavi sono in mano alla tua squadra!\n"
  "Aiuta i portatori di chiavi a incontrarsi!"
  
- #: qcsrc/common/notifications.qh:628
+ #: qcsrc/common/notifications.qh:686
  msgid ""
  "^BGAll keys are in ^TC^TT team^BG's hands!\n"
  "Interfere ^F4NOW^BG!"
  msgstr ""
- "^BGTutte le chiavi sono in mano alla squadra ^TC^TT!\n"
+ "^BGTutte le chiavi sono in mano alla squadra ^TC^TT^BG!\n"
  "Interferisci ^F4ORA^BG!"
  
- #: qcsrc/common/notifications.qh:629
+ #: qcsrc/common/notifications.qh:687
  msgid ""
  "^BGAll keys are in your team's hands!\n"
  "Meet the other key carriers ^F4NOW^BG!"
@@@ -2845,19 -3142,19 +3142,19 @@@ msgstr "
  "^BGTutte le chiavi sono in mano alla tua squadra!\n"
  "Incxontra gli altri portatori di chiavi ^F4ORA^BG!"
  
- #: qcsrc/common/notifications.qh:630
+ #: qcsrc/common/notifications.qh:688
  msgid "^F4Round will start in ^COUNT"
  msgstr "^F4Il round incomincerà in ^COUNT"
  
- #: qcsrc/common/notifications.qh:631
+ #: qcsrc/common/notifications.qh:689
  msgid "^BGScanning frequency range..."
  msgstr "^BGAnalizzando l'intervallo di frequenza..."
  
- #: qcsrc/common/notifications.qh:632
+ #: qcsrc/common/notifications.qh:690
  msgid "^BGYou are starting with the ^TC^TT Key"
  msgstr "^BGStai iniziando con la Chiave ^TC^TT"
  
- #: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
+ #: qcsrc/common/notifications.qh:691 qcsrc/common/notifications.qh:693
  #, c-format
  msgid ""
  "^BGWaiting for players to join...\n"
@@@ -2866,38 -3163,33 +3163,33 @@@ msgstr "
  "^BGIn attesa che i giocatori entrino...\n"
  "Servono giocatori per: %s"
  
- #: qcsrc/common/notifications.qh:635
+ #: qcsrc/common/notifications.qh:692
+ msgid "^BGYou have no lives left, you must wait until the next match"
+ msgstr "^BGNon ti sono rimaste vite, devi aspettare fino alla prossima partita"
+ #: qcsrc/common/notifications.qh:694
  #, c-format
  msgid "^BGWaiting for %s player(s) to join..."
  msgstr "^BGIn attesa che %s giocatore/i entrino..."
  
- #: qcsrc/common/notifications.qh:636
+ #: qcsrc/common/notifications.qh:695
  msgid "^F4^COUNT^BG left to find some ammo!"
  msgstr "^F4^COUNT^BG rimanenti per trovare delle munizioni!"
  
- #: qcsrc/common/notifications.qh:637
+ #: qcsrc/common/notifications.qh:696
  msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
  msgstr "^BGRaccogli delle munizioni o morirai in ^F4^COUNT^BG!"
  
- #: qcsrc/common/notifications.qh:637
+ #: qcsrc/common/notifications.qh:696
  msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
  msgstr "^BGRaccogli delle munizioni! ^F4^COUNT^BG rimanenti!"
  
- #: qcsrc/common/notifications.qh:638
+ #: qcsrc/common/notifications.qh:697
  #, c-format
  msgid "^F2Extra lives remaining: ^K1%s"
  msgstr "^F2Vite extra rimanenti: ^K1%s"
  
- #: qcsrc/common/notifications.qh:639
- msgid "^BGSecondary fire inflicts no damage!"
- msgstr "^BGIl fuoco secondario non infligge alcun danno!"
- #: qcsrc/common/notifications.qh:640
- #, c-format
- msgid "^BG%s"
- msgstr "^BG%s"
- #: qcsrc/common/notifications.qh:641
+ #: qcsrc/common/notifications.qh:699
  #, c-format
  msgid ""
  "^F2^COUNT^BG until weapon change...\n"
@@@ -2906,16 -3198,24 +3198,24 @@@ msgstr "
  "^F2^COUNT^BG al cambio d'arma...\n"
  "Prossima arma: ^F1%s"
  
- #: qcsrc/common/notifications.qh:642
+ #: qcsrc/common/notifications.qh:700
  #, c-format
  msgid "^F2Active weapon: ^F1%s"
  msgstr "^F2Arma attiva: ^F1%s"
  
- #: qcsrc/common/notifications.qh:643
+ #: qcsrc/common/notifications.qh:701
  msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
  msgstr "^BGPremere ^F2DROPWEAPON^BG di nuovo per lanciare la granata!"
  
- #: qcsrc/common/notifications.qh:644
+ #: qcsrc/common/notifications.qh:702
+ msgid ""
+ "^K1Your generator is NOT shielded!\n"
+ "^BGRe-capture controlpoints to shield it!"
+ msgstr ""
+ "^K1Il tuo generatore NON è protetto!\n"
+ "^BGRicattura punti di controllo per proteggerlo!"
+ #: qcsrc/common/notifications.qh:703
  msgid ""
  "^F2Now playing ^F4OVERTIME^F2!\n"
  "Keep fragging until we have a winner!"
@@@ -2923,7 -3223,7 +3223,7 @@@ msgstr "
  "^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
  "Continua a fraggare finché non c'è un vincitore!"
  
- #: qcsrc/common/notifications.qh:644
+ #: qcsrc/common/notifications.qh:703
  msgid ""
  "^F2Now playing ^F4OVERTIME^F2!\n"
  "Keep scoring until we have a winner!"
@@@ -2931,7 -3231,21 +3231,21 @@@ msgstr "
  "^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
  "Continua a segnare finché non c'è un vincitore!"
  
- #: qcsrc/common/notifications.qh:645
+ #: qcsrc/common/notifications.qh:704
+ msgid ""
+ "^F2Now playing ^F4OVERTIME^F2!\n"
+ "\n"
+ "Generators are now decaying.\n"
+ "The more control points your team holds,\n"
+ "the faster the enemy generator decays"
+ msgstr ""
+ "^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
+ "\n"
+ "I generatori stanno ora decadendo.\n"
+ "Più punti di controllo la tua squadra possiede,\n"
+ "più in fretta il generatore nemico decade"
+ #: qcsrc/common/notifications.qh:705
  #, c-format
  msgid ""
  "^F2Now playing ^F4OVERTIME^F2!\n"
@@@ -2940,210 -3254,245 +3254,245 @@@ msgstr "
  "^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
  "^BGAggiunti ^F4%s^BG alla partita!"
  
- #: qcsrc/common/notifications.qh:646
+ #: qcsrc/common/notifications.qh:706
+ msgid "^K1In^BG-portal created"
+ msgstr "^BGPortale di ^K1ingresso ^BGcreato"
+ #: qcsrc/common/notifications.qh:707
+ msgid "^F3Out^BG-portal created"
+ msgstr "^BGPortale di ^F3Uscita ^BGcreato"
+ #: qcsrc/common/notifications.qh:708
+ msgid ""
+ "^K1Portal deployment failed.\n"
+ "\n"
+ "^F2Catch it to try again!"
+ msgstr ""
+ "^K1Piazzamento dei portali non riuscito.\n"
+ "\n"
+ "^F2Prendilo per provare di nuovo!"
+ #: qcsrc/common/notifications.qh:709
  msgid "^F2Invisibility has worn off"
  msgstr "^F2L'invisibilità è scaduta"
  
- #: qcsrc/common/notifications.qh:647
+ #: qcsrc/common/notifications.qh:710
  msgid "^F2Shield has worn off"
  msgstr "^F2L'invisibilità è scaduta"
  
- #: qcsrc/common/notifications.qh:648
+ #: qcsrc/common/notifications.qh:711
  msgid "^F2Speed has worn off"
  msgstr "^F2La Velocità è scaduta"
  
- #: qcsrc/common/notifications.qh:649
+ #: qcsrc/common/notifications.qh:712
  msgid "^F2Strength has worn off"
  msgstr "^F2La Forza è scaduta"
  
- #: qcsrc/common/notifications.qh:650
+ #: qcsrc/common/notifications.qh:713
  msgid "^F2You are invisible"
  msgstr "^F2Sei invisibile"
  
- #: qcsrc/common/notifications.qh:651
+ #: qcsrc/common/notifications.qh:714
  msgid "^F2Shield surrounds you"
  msgstr "^F2Lo scudo ti circonda"
  
- #: qcsrc/common/notifications.qh:652
+ #: qcsrc/common/notifications.qh:715
  msgid "^F2You are on speed"
  msgstr "^F2Sei veloce"
  
- #: qcsrc/common/notifications.qh:653
+ #: qcsrc/common/notifications.qh:716
  msgid "^F2Strength infuses your weapons with devastating power"
  msgstr "^F2La Forza infonde alle tue armi un potere devastante"
  
- #: qcsrc/common/notifications.qh:654
+ #: qcsrc/common/notifications.qh:717
  msgid "^F2The race is over, finish your lap!"
  msgstr "^F2La gara è finita, completa il tuo giro!"
  
- #: qcsrc/common/notifications.qh:655
+ #: qcsrc/common/notifications.qh:718
+ msgid "^BGSecondary fire inflicts no damage!"
+ msgstr "^BGIl fuoco secondario non infligge alcun danno!"
+ #: qcsrc/common/notifications.qh:719
+ msgid "^BGSequence completed!"
+ msgstr "^BGSequenza completata!"
+ #: qcsrc/common/notifications.qh:720
+ msgid "^BGThere are more to go..."
+ msgstr "^BGTi aspettano altre sequenze..."
+ #: qcsrc/common/notifications.qh:721
+ #, c-format
+ msgid "^BGOnly %s^BG more to go..."
+ msgstr "^BGAltre %s^BG sequenze ti aspettano..."
+ #: qcsrc/common/notifications.qh:722
  msgid "^F2Superweapons have broken down"
  msgstr "^F2Le Superarmi si sono spaccate"
  
- #: qcsrc/common/notifications.qh:656
+ #: qcsrc/common/notifications.qh:723
  msgid "^F2Superweapons have been lost"
  msgstr "^F2Le Superarmi sono state perse"
  
- #: qcsrc/common/notifications.qh:657
+ #: qcsrc/common/notifications.qh:724
  msgid "^F2You now have a superweapon"
  msgstr "^F2Ora hai una superarma"
  
- #: qcsrc/common/notifications.qh:658
+ #: qcsrc/common/notifications.qh:725
  msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
  msgstr "^K1Cambiando alla ^TC^TT^K1 in ^COUNT"
  
- #: qcsrc/common/notifications.qh:659
+ #: qcsrc/common/notifications.qh:726
  msgid "^K1Changing team in ^COUNT"
  msgstr "^K1Cambiando squadra in ^COUNT"
  
- #: qcsrc/common/notifications.qh:660
+ #: qcsrc/common/notifications.qh:727
  msgid "^K1Spectating in ^COUNT"
  msgstr "^K1Spettatore in ^COUNT"
  
- #: qcsrc/common/notifications.qh:661
+ #: qcsrc/common/notifications.qh:728
  msgid "^K1Suicide in ^COUNT"
  msgstr "^K1Suicidio in ^COUNT"
  
- #: qcsrc/common/notifications.qh:662
+ #: qcsrc/common/notifications.qh:729
  msgid "^F4Timeout begins in ^COUNT"
  msgstr "^F4Il timeout comincia in ^COUNT"
  
- #: qcsrc/common/notifications.qh:663
+ #: qcsrc/common/notifications.qh:730
  msgid "^F4Timeout ends in ^COUNT"
  msgstr "^F4Il timeout finisce in ^COUNT"
  
- #: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
+ #: qcsrc/common/notifications.qh:1037 qcsrc/common/notifications.qh:1038
  #, c-format
  msgid " (near %s)"
  msgstr " (vicino %s)"
  
- #: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
+ #: qcsrc/common/notifications.qh:1045 qcsrc/common/notifications.qh:1046
  msgid "primary"
  msgstr "primario"
  
- #: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
+ #: qcsrc/common/notifications.qh:1045 qcsrc/common/notifications.qh:1046
  msgid "secondary"
  msgstr "secondario"
  
- #: qcsrc/common/notifications.qh:956
+ #: qcsrc/common/notifications.qh:1056
  #, c-format
  msgid " ^F1(Press %s)"
  msgstr " ^F1(Premi %s)"
  
- #: qcsrc/common/notifications.qh:965
+ #: qcsrc/common/notifications.qh:1066
  #, c-format
  msgid " with %s"
  msgstr " con %s"
  
- #: qcsrc/common/notifications.qh:974
+ #: qcsrc/common/notifications.qh:1075
  #, c-format
  msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
  msgstr "%s^K1 ha realizzato un TRIPLO FRAG! %s^BG"
  
- #: qcsrc/common/notifications.qh:974
+ #: qcsrc/common/notifications.qh:1075
  #, c-format
  msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
  msgstr "%s^K1 ha realizzato un TRIPLO PUNTO! %s^BG"
  
- #: qcsrc/common/notifications.qh:974
+ #: qcsrc/common/notifications.qh:1075
  msgid "TRIPLE FRAG! "
  msgstr "TRIPLO FRAG! "
  
- #: qcsrc/common/notifications.qh:975
+ #: qcsrc/common/notifications.qh:1076
  #, c-format
  msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
  msgstr "%s^K1 ha realizzato QUINDICI PUNTI DI FILA! %s^BG"
  
- #: qcsrc/common/notifications.qh:975
+ #: qcsrc/common/notifications.qh:1076
  #, c-format
  msgid "%s^K1 unlocked RAGE! %s^BG"
  msgstr "%s^K1 scatena la FURIA! %s^BG"
  
- #: qcsrc/common/notifications.qh:975
+ #: qcsrc/common/notifications.qh:1076
  msgid "RAGE! "
  msgstr "FURIA! "
  
- #: qcsrc/common/notifications.qh:976
+ #: qcsrc/common/notifications.qh:1077
  #, c-format
  msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
  msgstr "%s^K1 ha realizzato ^1DIECI PUNTI DI FILA! %s^BG"
  
- #: qcsrc/common/notifications.qh:976
+ #: qcsrc/common/notifications.qh:1077
  #, c-format
  msgid "%s^K1 started a MASSACRE! %s^BG"
  msgstr "%s^K1 ha iniziato un MASSACRO! %s^BG"
  
- #: qcsrc/common/notifications.qh:976
+ #: qcsrc/common/notifications.qh:1077
  msgid "MASSACRE! "
  msgstr "MASSACRO! "
  
- #: qcsrc/common/notifications.qh:977
+ #: qcsrc/common/notifications.qh:1078
  #, c-format
  msgid "%s^K1 executed MAYHEM! %s^BG"
  msgstr "%s^K1 ha causato un CAOS! %s^BG"
  
- #: qcsrc/common/notifications.qh:977
+ #: qcsrc/common/notifications.qh:1078
  #, c-format
  msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
  msgstr "%s^K1 ha realizzato QUINDICI PUNTI DI FILA! %s^BG"
  
- #: qcsrc/common/notifications.qh:977
+ #: qcsrc/common/notifications.qh:1078
  msgid "MAYHEM! "
  msgstr "CAOS! "
  
- #: qcsrc/common/notifications.qh:978
+ #: qcsrc/common/notifications.qh:1079
  #, c-format
  msgid "%s^K1 is a BERSERKER! %s^BG"
  msgstr "%s^K1 è un BERSERKER! %s^BG"
  
- #: qcsrc/common/notifications.qh:978
+ #: qcsrc/common/notifications.qh:1079
  #, c-format
  msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
  msgstr "%s^K1 ha realizzato VENTI PUNTI DI FILA! %s^BG"
  
- #: qcsrc/common/notifications.qh:978
+ #: qcsrc/common/notifications.qh:1079
  msgid "BERSERKER! "
  msgstr "BERSERKER! "
  
- #: qcsrc/common/notifications.qh:979
+ #: qcsrc/common/notifications.qh:1080
  #, c-format
  msgid "%s^K1 inflicts CARNAGE! %s^BG"
  msgstr "%s^K1 inflige una CARNEFICINA! %s^BG"
  
- #: qcsrc/common/notifications.qh:979
+ #: qcsrc/common/notifications.qh:1080
  #, c-format
  msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
  msgstr "%s^K1 ha realizzato VENTICINQUE PUNTI DI FILA! %s^BG"
  
- #: qcsrc/common/notifications.qh:979
+ #: qcsrc/common/notifications.qh:1080
  msgid "CARNAGE! "
  msgstr "CARNEFICINA! "
  
- #: qcsrc/common/notifications.qh:980
+ #: qcsrc/common/notifications.qh:1081
  #, c-format
  msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
  msgstr "%s^K1 ha realizzato TRENTA PUNTI DI FILA! %s^BG"
  
- #: qcsrc/common/notifications.qh:980
+ #: qcsrc/common/notifications.qh:1081
  #, c-format
  msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
  msgstr "%s^K1 scatena l'ARMAGEDDON! %s^BG"
  
- #: qcsrc/common/notifications.qh:980
+ #: qcsrc/common/notifications.qh:1081
  msgid "ARMAGEDDON! "
  msgstr "ARMAGEDDON! "
  
- #: qcsrc/common/notifications.qh:986
+ #: qcsrc/common/notifications.qh:1087
  #, c-format
  msgid "%s(^F1Bot^BG)"
  msgstr "%s(^F1Bot^BG)"
  
- #: qcsrc/common/notifications.qh:988
+ #: qcsrc/common/notifications.qh:1089
  #, c-format
  msgid "%s(Ping ^F1%d^BG)"
  msgstr "%s(Ping ^F1%d^BG)"
  
- #: qcsrc/common/notifications.qh:994
+ #: qcsrc/common/notifications.qh:1095
  #, c-format
  msgid ""
  "\n"
@@@ -3152,7 -3501,7 +3501,7 @@@ msgstr "
  "\n"
  "(Vita ^1%d^BG / Armatura ^2%d^BG)%s"
  
- #: qcsrc/common/notifications.qh:996
+ #: qcsrc/common/notifications.qh:1097
  #, c-format
  msgid ""
  "\n"
@@@ -3161,68 -3510,68 +3510,68 @@@ msgstr "
  "\n"
  "(^F4Morto^BG)%s"
  
- #: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
+ #: qcsrc/common/notifications.qh:1134 qcsrc/common/notifications.qh:1147
  #, c-format
  msgid "%d score spree! "
  msgstr "serie di %d punti! "
  
- #: qcsrc/common/notifications.qh:1045
+ #: qcsrc/common/notifications.qh:1146
  #, c-format
  msgid "%d frag spree! "
  msgstr "serie di %d frag! "
  
- #: qcsrc/common/notifications.qh:1058
+ #: qcsrc/common/notifications.qh:1159
  msgid "First blood! "
  msgstr "Prima uccisione!"
  
- #: qcsrc/common/notifications.qh:1058
+ #: qcsrc/common/notifications.qh:1159
  msgid "First score! "
  msgstr "Primo punto! "
  
- #: qcsrc/common/notifications.qh:1062
+ #: qcsrc/common/notifications.qh:1163
  msgid "First casualty! "
  msgstr "Primo incidente! "
  
- #: qcsrc/common/notifications.qh:1062
+ #: qcsrc/common/notifications.qh:1163
  msgid "First victim! "
  msgstr "Prima vittima! "
  
- #: qcsrc/common/notifications.qh:1103
+ #: qcsrc/common/notifications.qh:1204
  #, c-format
  msgid "%s^K1 has %d frags in a row! %s^BG"
  msgstr "%s^K1 ha %d frag di fila! %s^BG"
  
- #: qcsrc/common/notifications.qh:1104
+ #: qcsrc/common/notifications.qh:1205
  #, c-format
  msgid "%s^K1 made %d scores in a row! %s^BG"
  msgstr "%s^K1 ha fatto %d punti di fila! %s^BG"
  
- #: qcsrc/common/notifications.qh:1122
+ #: qcsrc/common/notifications.qh:1223
  #, c-format
  msgid "%s^K1 drew first blood! %s^BG"
  msgstr "%s^K1 ha fatto la prima uccisione! %s^BG"
  
- #: qcsrc/common/notifications.qh:1123
+ #: qcsrc/common/notifications.qh:1224
  #, c-format
  msgid "%s^K1 got the first score! %s^BG"
  msgstr "%s^K1 ha ottenuto il primo punto! %s^BG"
  
- #: qcsrc/common/notifications.qh:1139
+ #: qcsrc/common/notifications.qh:1240
  #, c-format
  msgid ", ending their %d frag spree"
  msgstr ", finendo la sua serie di %d frag"
  
- #: qcsrc/common/notifications.qh:1140
+ #: qcsrc/common/notifications.qh:1241
  #, c-format
  msgid ", ending their %d score spree"
  msgstr ", finendo la sua serie di %d punti"
  
- #: qcsrc/common/notifications.qh:1154
+ #: qcsrc/common/notifications.qh:1255
  #, c-format
  msgid ", losing their %d frag spree"
  msgstr ", perdendo la sua serie di %d frag"
  
- #: qcsrc/common/notifications.qh:1155
+ #: qcsrc/common/notifications.qh:1256
  #, c-format
  msgid ", losing their %d score spree"
  msgstr ", perdendo la sua serie di %d punti"
@@@ -3251,6 -3600,105 +3600,105 @@@ msgstr "Squadra
  msgid "Neutral"
  msgstr "Neutrale"
  
+ #: qcsrc/common/util.qc:422
+ #, c-format
+ msgid "%d days, %02d:%02d:%02d"
+ msgstr "%d giorni, %02d:%02d:%02d"
+ #: qcsrc/common/util.qc:424
+ #, c-format
+ msgid "%02d:%02d:%02d"
+ msgstr "%02d:%02d:%02d"
+ #: qcsrc/common/weapons/w_arc.qc:15
+ msgid "Arc"
+ msgstr "Arc"
+ #: qcsrc/common/weapons/w_blaster.qc:15
+ msgid "Blaster"
+ msgstr "Blaster"
+ #: qcsrc/common/weapons/w_crylink.qc:15
+ msgid "Crylink"
+ msgstr "Crylink"
+ #: qcsrc/common/weapons/w_devastator.qc:15
+ msgid "Devastator"
+ msgstr "Devastator"
+ #: qcsrc/common/weapons/w_electro.qc:15
+ msgid "Electro"
+ msgstr "Electro"
+ #: qcsrc/common/weapons/w_fireball.qc:15
+ msgid "Fireball"
+ msgstr "Fireball"
+ #: qcsrc/common/weapons/w_hagar.qc:15
+ msgid "Hagar"
+ msgstr "Hagar"
+ #: qcsrc/common/weapons/w_hlac.qc:15
+ msgid "Heavy Laser Assault Cannon"
+ msgstr "Heavy Laser Assault Cannon"
+ #: qcsrc/common/weapons/w_hmg.qc:15
+ msgid "Heavy Machine Gun"
+ msgstr "Heavy Machine Gun"
+ #: qcsrc/common/weapons/w_hook.qc:15
+ msgid "Grappling Hook"
+ msgstr "Grappling Hook"
+ #: qcsrc/common/weapons/w_machinegun.qc:15
+ msgid "Machine Gun"
+ msgstr "Machine Gun"
+ #: qcsrc/common/weapons/w_minelayer.qc:15
+ msgid "Mine Layer"
+ msgstr "Mine Layer"
+ #: qcsrc/common/weapons/w_mortar.qc:15
+ msgid "Mortar"
+ msgstr "Mortar"
+ #: qcsrc/common/weapons/w_porto.qc:15
+ msgid "Port-O-Launch"
+ msgstr "Port-O-Launch"
+ #: qcsrc/common/weapons/w_rifle.qc:15
+ msgid "Rifle"
+ msgstr "Rifle"
+ #: qcsrc/common/weapons/w_rpc.qc:15
+ msgid "Rocket Propelled Chainsaw"
+ msgstr "Rocket Propelled Chainsaw"
+ #: qcsrc/common/weapons/w_seeker.qc:15
+ msgid "T.A.G. Seeker"
+ msgstr "T.A.G. Seeker"
+ #: qcsrc/common/weapons/w_shockwave.qc:15
+ msgid "Shockwave"
+ msgstr "Shockwave"
+ #: qcsrc/common/weapons/w_shotgun.qc:15
+ msgid "Shotgun"
+ msgstr "Shotgun"
+ #: qcsrc/common/weapons/w_tuba.qc:16
+ #, no-c-format
+ msgid "@!#%'n Tuba"
+ msgstr "@!#%'n Tuba"
+ #: qcsrc/common/weapons/w_vaporizer.qc:15
+ msgid "Vaporizer"
+ msgstr "Vaporizer"
+ #: qcsrc/common/weapons/w_vortex.qc:15
+ msgid "Vortex"
+ msgstr "Vortex"
  #: qcsrc/menu/command/menu_cmd.qc:35
  msgid "Usage: menu_cmd command..., where possible commands are:\n"
  msgstr "Uso: menu_cmd comando..., dove i possibili comandi sono:\n"
@@@ -3261,71 -3709,57 +3709,57 @@@ msgstr "  sync - ricarica tutte le cva
  
  #: qcsrc/menu/command/menu_cmd.qc:37
  msgid "  directmenu ITEM - select a menu item as main item\n"
- msgstr "  directmenu OGGETTO - seleziona un oggetto come il principale\n"
+ msgstr ""
+ "  directmenu OGGETTO - seleziona un oggetto del menu come il principale\n"
  
- #: qcsrc/menu/command/menu_cmd.qc:62
+ #: qcsrc/menu/command/menu_cmd.qc:68
  msgid "Available options:\n"
  msgstr "Opzioni disponibili:\n"
  
- #: qcsrc/menu/command/menu_cmd.qc:113
+ #: qcsrc/menu/command/menu_cmd.qc:119
  msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
  msgstr ""
  "Comando non valido. Per una lista dei comandi supportati, prova menu_cmd "
  "help.\n"
  
- #: qcsrc/menu/item/label.c:82
- #, c-format
- msgid "NOTE: label text %s too wide for label, condensed by factor %f\n"
- msgstr ""
- "NOTA: testo dell'etichetta %s troppo grande per l'etichetta, compresso di un "
- "fattore %f\n"
- #: qcsrc/menu/item/listbox.c:302
+ #: qcsrc/menu/item/listbox.c:382
  #, c-format
  msgid "Item %d"
  msgstr "Oggetto %d"
  
- #: qcsrc/menu/item/slider.c:64
- #, c-format
- msgid "%d (%s)"
- msgstr "%d (%s)"
  #: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
- msgid "custom"
- msgstr "personalizzato"
- #: qcsrc/menu/menu.qc:59
- #, c-format
- msgid "^4MQC Build information: ^1%s\n"
- msgstr "^4Informazioni sulla versione MQC: ^1%s\n"
- #: qcsrc/menu/xonotic/campaign.c:286
- #: qcsrc/menu/xonotic/dialog_singleplayer.c:123
- msgid "???"
- msgstr "???"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:40
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:80
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:126
+ msgid "Custom"
+ msgstr "Personalizzato"
  
  #: qcsrc/menu/xonotic/campaign.c:287
  #, c-format
  msgid "Level %d: %s"
  msgstr "Livello %d: %s"
  
- #: qcsrc/menu/xonotic/cvarlist.c:85
- msgid "will be saved to config.cfg"
- msgstr "sarà salvato su config.cfg"
+ #: qcsrc/menu/xonotic/cvarlist.c:73
+ msgid "forced to be saved to config.cfg"
+ msgstr "forzata ad essere salvata in config.cfg"
  
- #: qcsrc/menu/xonotic/cvarlist.c:87
+ #: qcsrc/menu/xonotic/cvarlist.c:79 qcsrc/menu/xonotic/cvarlist.c:89
  msgid "will not be saved"
  msgstr "non sarà salvato"
  
- #: qcsrc/menu/xonotic/cvarlist.c:89
+ #: qcsrc/menu/xonotic/cvarlist.c:84
+ msgid "will be saved to config.cfg"
+ msgstr "sarà salvato su config.cfg"
+ #: qcsrc/menu/xonotic/cvarlist.c:93
  msgid "private"
  msgstr "privata"
  
- #: qcsrc/menu/xonotic/cvarlist.c:91
+ #: qcsrc/menu/xonotic/cvarlist.c:95
  msgid "engine setting"
  msgstr "impostazioni motore"
  
- #: qcsrc/menu/xonotic/cvarlist.c:93
+ #: qcsrc/menu/xonotic/cvarlist.c:97
  msgid "read only"
  msgstr "sola lettura"
  
@@@ -3334,15 -3768,10 +3768,10 @@@ msgid "Credits
  msgstr "Crediti"
  
  #: qcsrc/menu/xonotic/dialog_credits.c:21
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:271
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:91
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:99
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:47
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:113
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:74
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:44
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:278
  #: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
- #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
+ #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:81
  #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
  msgid "OK"
  msgstr "OK"
  msgid "Welcome"
  msgstr "Benvenuto"
  
- #: qcsrc/menu/xonotic/dialog_firstrun.c:40
+ #: qcsrc/menu/xonotic/dialog_firstrun.c:46
  msgid ""
  "Welcome to Xonotic, please select your language preference and enter your "
  "player name to get started.  You can change these options later through the "
@@@ -3361,36 -3790,34 +3790,34 @@@ msgstr "
  "nome come giocatore per iniziare.  Puoi cambiare queste opzioni più tardi "
  "tramite il menu."
  
- #: qcsrc/menu/xonotic/dialog_firstrun.c:46
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:37
+ #: qcsrc/menu/xonotic/dialog_firstrun.c:52
  #: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39
  msgid "Name:"
  msgstr "Nome:"
  
- #: qcsrc/menu/xonotic/dialog_firstrun.c:68
- #: qcsrc/menu/xonotic/dialog_settings_user.c:65
+ #: qcsrc/menu/xonotic/dialog_firstrun.c:74
  msgid "Text language:"
  msgstr "Lingua di testo:"
  
- #: qcsrc/menu/xonotic/dialog_firstrun.c:77
+ #: qcsrc/menu/xonotic/dialog_firstrun.c:83
  msgid "Allow player statistics to use your nickname at stats.xonotic.org?"
  msgstr ""
- "Consenti alle statistiche dei giocatori di usare il tuo nome (nick) in stats."
+ "Consenti alle statistiche dei giocatori di usare il tuo nome in stats."
  "xonotic.org?"
  
- #: qcsrc/menu/xonotic/dialog_firstrun.c:81
+ #: qcsrc/menu/xonotic/dialog_firstrun.c:87
  msgid "ALWU2N^Yes"
  msgstr "Sì"
  
- #: qcsrc/menu/xonotic/dialog_firstrun.c:82
+ #: qcsrc/menu/xonotic/dialog_firstrun.c:88
  msgid "ALWU2N^No"
  msgstr "No"
  
- #: qcsrc/menu/xonotic/dialog_firstrun.c:83
+ #: qcsrc/menu/xonotic/dialog_firstrun.c:89
  msgid "ALWU2N^Undecided"
  msgstr "Indeciso"
  
- #: qcsrc/menu/xonotic/dialog_firstrun.c:87
+ #: qcsrc/menu/xonotic/dialog_firstrun.c:93
  msgid "Save settings"
  msgstr "Salva impostazioni"
  
@@@ -3428,9 -3855,13 +3855,13 @@@ msgstr "Sinistra
  msgid "Right"
  msgstr "Destra"
  
+ #: qcsrc/menu/xonotic/dialog_hudpanel_buffs.c:4
+ msgid "Buffs Panel"
+ msgstr "Pannello Colpetti"
  #: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:4
- msgid "Centerprint"
- msgstr "Centerprint"
+ msgid "Centerprint Panel"
+ msgstr "Pannello Centerprint"
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
  msgid "Message duration:"
@@@ -3449,7 -3880,7 +3880,7 @@@ msgid "Text alignment:
  msgstr "Allineamento testo:"
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:62
  msgid "Center"
  msgstr "Centro"
  
@@@ -3475,7 -3906,7 +3906,7 @@@ msgstr "Durata chat:
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
  msgid "Chat beep sound"
- msgstr "Suono della chat"
+ msgstr "Suono per messaggio chat"
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4
  msgid "Engine Info Panel"
@@@ -3593,12 -4024,12 +4024,12 @@@ msgid "Status bar
  msgstr "Barra di stato"
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:60
  msgid "Left align"
  msgstr "Allinea a sinistra"
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:64
  msgid "Right align"
  msgstr "Allinea a destra"
  
@@@ -3615,7 -4046,6 +4046,6 @@@ msgid "Flip speed/acceleration position
  msgstr "Inverti posizioni velocità/accelerazione"
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
  msgid "Speed:"
  msgstr "Velocità:"
  
@@@ -3707,8 -4137,9 +4137,9 @@@ msgstr "Radar:
  #: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:33
  #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:44
  #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:83
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:69
- #: qcsrc/menu/xonotic/util.qc:708
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:74
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:124
+ #: qcsrc/menu/xonotic/util.qc:743
  msgid "Alpha:"
  msgstr "Opacità:"
  
@@@ -3737,7 -4168,6 +4168,6 @@@ msgid "North
  msgstr "Nord"
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
  msgid "Scale:"
  msgstr "Scala:"
  
@@@ -3803,7 -4233,7 +4233,7 @@@ msgstr "Pannello di voto
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
  msgid "Alpha after voting:"
- msgstr "Opacità dopo aver votato:"
+ msgstr "Opacità dopo votazione:"
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4
  msgid "Weapons Panel"
@@@ -3814,6 -4244,8 +4244,8 @@@ msgid "Fade out after:
  msgstr "Dissolvi dopo:"
  
  #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:152
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:145
  msgid "Never"
  msgstr "Mai"
  
@@@ -3890,37 -4322,37 +4322,37 @@@ msgstr "Setup del Panel HUD
  msgid "Panel background defaults:"
  msgstr "Predefiniti dello sfondo del pannello:"
  
- #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
+ #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:718
  msgid "Background:"
  msgstr "Sfondo:"
  
  #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:26
  #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:38
  #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:53
- #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:92 qcsrc/menu/xonotic/util.qc:686
- #: qcsrc/menu/xonotic/util.qc:702 qcsrc/menu/xonotic/util.qc:719
+ #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:92 qcsrc/menu/xonotic/util.qc:721
+ #: qcsrc/menu/xonotic/util.qc:737 qcsrc/menu/xonotic/util.qc:754
  msgid "Disable"
  msgstr "Disabilita"
  
  #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
- #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
+ #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:726
  msgid "Color:"
  msgstr "Colore:"
  
- #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
+ #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:734
  msgid "Border size:"
  msgstr "Dimensioni bordo:"
  
  #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
  #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
  msgid "Team color:"
- msgstr "Colore team:"
+ msgstr "Colore squadra:"
  
- #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
+ #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:760
  msgid "Test team color in configure mode"
- msgstr "Prova colore team in modalità configurazione"
+ msgstr "Prova colore squadra in modalità configurazione"
  
- #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
+ #: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:763
  msgid "Padding:"
  msgstr "Riempimento:"
  
@@@ -3968,6 -4400,53 +4400,53 @@@ msgstr "Y:
  msgid "Exit setup"
  msgstr "Esci dal setup"
  
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:4
+ msgid "Monster Tools"
+ msgstr "Attrezzi Mostro"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:19
+ msgid "Monster:"
+ msgstr "Mostro:"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:28
+ #: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+ msgid "Spawn"
+ msgstr "Crea"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:29
+ #: qcsrc/menu/xonotic/serverlist.c:437
+ msgid "Remove"
+ msgstr "Rimuovi"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:31
+ msgid "Move target:"
+ msgstr "Muovi obiettivo:"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:32
+ msgid "Follow"
+ msgstr "Segui"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:33
+ msgid "Wander"
+ msgstr "Vaga"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:34
+ msgid "Spawnpoint"
+ msgstr "Punto di nascita"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:35
+ msgid "No moving"
+ msgstr "Blocca"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:37
+ msgid "Colors:"
+ msgstr "Colori:"
+ #: qcsrc/menu/xonotic/dialog_monstertools.c:39
+ #: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
+ msgid "Set skin:"
+ msgstr "Imposta skin:"
  #: qcsrc/menu/xonotic/dialog_multiplayer.c:4
  msgid "Multiplayer"
  msgstr "Multiplayer"
@@@ -3977,271 -4456,265 +4456,265 @@@ msgid "Servers
  msgstr "Server"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer.c:19
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:6
  msgid "Create"
  msgstr "Crea"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer.c:20
- msgid "Demos"
- msgstr "Demo"
+ #: qcsrc/menu/xonotic/dialog_multiplayer.c:23
+ msgid "Media"
+ msgstr "Media"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer.c:21
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:5
- msgid "Player Setup"
- msgstr "Setup giocatore"
+ #: qcsrc/menu/xonotic/dialog_multiplayer.c:24
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:5
+ msgid "Profile"
+ msgstr "Profilo"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:34
- msgid "Game type:"
- msgstr "Tipo di gioco:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:45
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:104
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:186
+ #: qcsrc/menu/xonotic/util.qc:720 qcsrc/menu/xonotic/util.qc:736
+ #: qcsrc/menu/xonotic/util.qc:745 qcsrc/menu/xonotic/util.qc:753
+ #: qcsrc/menu/xonotic/util.qc:765
+ msgid "Default"
+ msgstr "Predefinito"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47
+ msgid "Unlimited"
+ msgstr "Illimitato"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:69
+ msgid "Gametype"
+ msgstr "Tipo di gioco"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:48
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
  msgid "Time limit:"
  msgstr "Limite di tempo:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:52
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:60
- msgid "Use map specified default"
- msgstr "Usa le impostazioni di default della mappa"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
+ msgid "TIMLIM^Default"
+ msgstr "Predefinito"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:55
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
- msgid "Point limit:"
- msgstr "Limite di punteggio:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+ msgid "TIMLIM^1 minute"
+ msgstr "TIMLIM^1 minuto"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:63
- msgid "Player slots:"
- msgstr "Posti per giocatori:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+ msgid "TIMLIM^2 minutes"
+ msgstr "2 minuti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:66
- msgid "Number of bots:"
- msgstr "Numero di bot:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+ msgid "TIMLIM^3 minutes"
+ msgstr "3 minuti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:69
- msgid "Bot skill:"
- msgstr "Abilità bot:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+ msgid "TIMLIM^4 minutes"
+ msgstr "4 minuti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
- msgid "Botlike"
- msgstr "\"Come un bot\""
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+ msgid "TIMLIM^5 minutes"
+ msgstr "5 minuti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:73
- msgid "Beginner"
- msgstr "Principiante"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+ msgid "TIMLIM^6 minutes"
+ msgstr "6 minuti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
- msgid "You will win"
- msgstr "Vincerai"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
+ msgid "TIMLIM^7 minutes"
+ msgstr "7 minuti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
- msgid "You can win"
- msgstr "Puoi vincere"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
+ msgid "TIMLIM^8 minutes"
+ msgstr "8 minuti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
- msgid "You might win"
- msgstr "Potresti vincere"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85
+ msgid "TIMLIM^9 minutes"
+ msgstr "9 minuti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:86
+ msgid "TIMLIM^10 minutes"
+ msgstr "10 minuti"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:87
+ msgid "TIMLIM^15 minutes"
+ msgstr "15 minuti"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:88
+ msgid "TIMLIM^20 minutes"
+ msgstr "20 minuti"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89
+ msgid "TIMLIM^25 minutes"
+ msgstr "25 minuti"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:90
+ msgid "TIMLIM^30 minutes"
+ msgstr "30 minuti"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:91
+ msgid "TIMLIM^40 minutes"
+ msgstr "40 minuti"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:92
+ msgid "TIMLIM^50 minutes"
+ msgstr "50 minuti"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:93
+ msgid "TIMLIM^60 minutes"
+ msgstr "60 minuti"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:94
+ msgid "TIMLIM^Infinite"
+ msgstr "Infinito"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:97
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:99
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:190
+ msgid "Frag limit:"
+ msgstr "Limite di frag:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:102
+ msgid "Teams:"
+ msgstr "Squadre:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105
+ msgid "2 teams"
+ msgstr "2 squadre"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:106
+ msgid "3 teams"
+ msgstr "3 squadre"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:107
+ msgid "4 teams"
+ msgstr "4 squadre"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:110
+ msgid "Player slots:"
+ msgstr "Posti per giocatori:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:113
+ msgid "Number of bots:"
+ msgstr "Numero di bot:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:116
+ msgid "Bot skill:"
+ msgstr "Abilità bot:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119
+ msgid "Botlike"
+ msgstr "\"Come un bot\""
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120
+ msgid "Beginner"
+ msgstr "Principiante"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:121
+ msgid "You will win"
+ msgstr "Vincerai"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:122
+ msgid "You can win"
+ msgstr "Puoi vincere"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:123
+ msgid "You might win"
+ msgstr "Potresti vincere"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:124
  msgid "Advanced"
  msgstr "Avanzato"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:125
  msgid "Expert"
  msgstr "Esperto"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:126
  msgid "Pro"
  msgstr "Pro"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:127
  msgid "Assassin"
  msgstr "Assassino"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:128
  msgid "Unhuman"
  msgstr "Inumano"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:129
  msgid "Godlike"
  msgstr "\"Come un Dio\""
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:87
- msgid "Mutators..."
- msgstr "Mutatori..."
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:96
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:146
- msgid "Advanced settings..."
- msgstr "Impostazioni avanzate..."
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:140
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
+ msgid "Mutators"
+ msgstr "Mutatori"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:103
- msgid "Map list:"
- msgstr "Lista delle mappe:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:147
+ msgid "Maplist"
+ msgstr "Lista mappe"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:109
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:153
  msgid "Select all"
  msgstr "Seleziona tutto"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:112
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
  msgid "Select none"
  msgstr "Deseleziona tutto"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:118
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
  msgid "Start Multiplayer!"
  msgstr "Inizia Multiplayer!"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:153
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:180
  msgid "Capture limit:"
  msgstr "Limite catture:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:181
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:182
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:186
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:187
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:188
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:189
+ msgid "Point limit:"
+ msgstr "Limite di punteggio:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:183
  msgid "Lives:"
  msgstr "Vite:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:184
  msgid "Laps:"
  msgstr "Giri:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:185
  msgid "Goals:"
  msgstr "Goal:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
- msgid "Frag limit:"
- msgstr "Limite di frag:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6
- msgid "Advanced server settings"
- msgstr "Impostazioni avanzate server"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25
- msgid "Game settings:"
- msgstr "Impostazioni gioco:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28
- msgid "Allow spectating"
- msgstr "Permetti spettatori"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31
- msgid "Spawn shield:"
- msgstr "Protezione nascita:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36
- msgid "Game speed:"
- msgstr "Velocità gioco:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40
- msgid "Teamplay settings:"
- msgstr "Impostazioni Teamplay:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43
- msgid "Friendly fire scale:"
- msgstr "Scala di fuoco amico:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47
- msgid "Virtual friendly fire (effect only)"
- msgstr "Penalità virtuale (solo effetto)"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50
- msgid "Friendly fire penalty:"
- msgstr "Penalità fuoco amico:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54
- msgid "Virtual penalty (effect only)"
- msgstr "Penalità virtuale (solo effetto)"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57
- msgid "Teams:"
- msgstr "Team:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66
- msgid "Map voting:"
- msgstr "Voto della mappa:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68
- msgid "No voting"
- msgstr "Nessun voto"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69
- msgid "2 choices"
- msgstr "2 scelte"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70
- msgid "3 choices"
- msgstr "3 scelte"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71
- msgid "4 choices"
- msgstr "4 scelte"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72
- msgid "5 choices"
- msgstr "5 scelte"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73
- msgid "6 choices"
- msgstr "6 scelte"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74
- msgid "7 choices"
- msgstr "7 scelte"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75
- msgid "8 choices"
- msgstr "8 scelte"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76
- msgid "9 choices"
- msgstr "9 scelte"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79
- msgid "Simple majority wins vcall"
- msgstr "La semplice maggioranza vince il vcall"
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5
  msgid "Map Information"
  msgstr "Informazioni mappa"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
- msgid "Full item placement"
- msgstr "Posizionamento oggetti completo"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
- msgid "MinstaGib only"
- msgstr "Solo MinstaGib"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:77
  msgid "Title:"
  msgstr "Titolo:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:87
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:83
  msgid "Author:"
  msgstr "Autore:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:93
- msgid "Features:"
- msgstr "Caratteristiche:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:98
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:89
  msgid "Game types:"
  msgstr "Tipi di gioco:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:112
  #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:328
  msgid "Close"
  msgstr "Chiudi"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:124
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:115
  msgid "MAP^Play"
  msgstr "Gioca"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
- msgid "Mutators"
- msgstr "Mutatori"
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33
  msgid "All Weapons Arena"
  msgstr "Arena con tutte le armi"
@@@ -4256,180 -4729,177 +4729,177 @@@ msgid "%s Arena
  msgstr "Arena con %s"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:162
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:166
  msgid "Dodging"
  msgstr "Schivamento"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
- msgid "MinstaGib"
- msgstr "MinstaGib"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:261
+ msgid "InstaGib"
+ msgstr "InstaGib"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215
  msgid "New Toys"
  msgstr "Nuovi giocattoli"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:258
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:265
  msgid "NIX"
  msgstr "NIX"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:76
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:212
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:219
  msgid "Rocket Flying"
  msgstr "Volando coi razzi"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:204
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211
  msgid "Invincible Projectiles"
  msgstr "Proiettili invincibili"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:266
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:273
  msgid "No start weapons"
  msgstr "Senza armi all'inizio"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196
  msgid "Low gravity"
  msgstr "Bassa gravità"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:168
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:172
  msgid "Cloaked"
  msgstr "Invisibile"
  
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88
+ msgid "Hook"
+ msgstr "Hook"
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:171
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:178
  msgid "Midair"
  msgstr "A mezz'aria"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:174
- msgid "Vampire"
- msgstr "Vampiro"
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:216
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:223
  msgid "Piñata"
  msgstr "Piñata"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:220
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:227
  msgid "Weapons stay"
  msgstr "Armi rimangono"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:179
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:186
  msgid "Blood loss"
  msgstr "Perdita di sangue"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:100
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:201
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
  msgid "Jet pack"
  msgstr "Jet pack"
  
  #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:102
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:175
+ msgid "Buffs"
+ msgstr "Colpetti"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:104
+ msgid "Overkill"
+ msgstr "Overkill"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:106
  msgid "No powerups"
  msgstr "Niente powerup"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:104
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:108
  msgid "Powerups"
  msgstr "Powerup"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:106
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:165
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:110
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:169
  msgid "Touch explode"
  msgstr "Tocco esplode"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:108
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:112
  msgid "MUT^None"
  msgstr "Nessuno"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:159
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:163
  msgid "Gameplay mutators:"
  msgstr "Mutatori di gioco:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:195
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202
  msgid "Weapon & item mutators:"
  msgstr "Mutatori di armi ed oggetti:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:198
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205
  msgid "Grappling hook"
  msgstr "Grappling hook"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:225
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:232
  msgid "Regular (no arena)"
  msgstr "Regolare (no arena)"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:227
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:234
  msgid "Weapon arenas:"
  msgstr "Arene di armi:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:244
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:251
  msgid "Most weapons"
  msgstr "Maggior parte delle armi"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:248
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:255
  msgid "All weapons"
  msgstr "Tutte le armi"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:251
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:258
  msgid "Special arenas:"
  msgstr "Arene speciali:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:262
- msgid "with laser"
- msgstr "con laser"
- #: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4
- msgid "Demo"
- msgstr "Demo"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
+ msgid "with blaster"
+ msgstr "con blaster"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:26
- msgid "Automatically record demos while playing"
- msgstr "Registra automaticamente i demo durante le partite"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
+ msgid "Join"
+ msgstr "Entra"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:29
  #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c:48
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.c:42
  msgid "Filter:"
  msgstr "Filtro:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:40
- msgid "Timedemo"
- msgstr "Timedemo"
- #: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43
- msgid "DEMO^Play"
- msgstr "Riproduci"
- #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
- msgid "Join"
- msgstr "Entra"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:35
+ msgid "SRVS^Categories"
+ msgstr "Categorie"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:33
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:38
  msgid "SRVS^Empty"
  msgstr "Vuoti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:37
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:42
  msgid "SRVS^Full"
  msgstr "Pieni"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:41
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:46
  msgid "Pause"
  msgstr "In pausa"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:53
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:58
  #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:255
  msgid "Address:"
  msgstr "Indirizzo:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:64
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:69
  msgid "Info..."
  msgstr "Info..."
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:69
+ #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:74
  #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:335
  msgid "Join!"
  msgstr "Entra!"
  msgid "Server Information"
  msgstr "Informazioni del server"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:174
- #, c-format
- msgid "%d/%d"
- msgstr "%d/%d"
- #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:186
- #: qcsrc/menu/xonotic/util.qc:685 qcsrc/menu/xonotic/util.qc:701
- #: qcsrc/menu/xonotic/util.qc:710 qcsrc/menu/xonotic/util.qc:718
- #: qcsrc/menu/xonotic/util.qc:730
- msgid "Default"
- msgstr "Predefinito"
  #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:193
  #, c-format
  msgid "%d modified"
@@@ -4548,405 -5006,206 +5006,206 @@@ msgstr "ID:
  msgid "Key:"
  msgstr "Chiave:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
- #: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
- msgid "Model:"
- msgstr "Modello:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media.c:4
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c:4
+ msgid "Demo"
+ msgstr "Demo"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:73
- msgid "Glowing color:"
- msgstr "Colore bagliore:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media.c:27
+ msgid "Demos"
+ msgstr "Demo"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:82
- msgid "Detail color:"
- msgstr "Colore dettagli:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media.c:28
+ msgid "Screenshots"
+ msgstr "Screenshots"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:93
- msgid "No crosshair"
- msgstr "Niente mirino"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c:55
+ msgid "Auto record demos"
+ msgstr "Auto registra demo"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:95
- msgid "Per weapon crosshair"
- msgstr "Mirino per singola arma"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c:56
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.c:51
+ msgid "Refresh"
+ msgstr "Aggiorna"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:98
- msgid "Custom crosshair"
- msgstr "Mirino personalizzato"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c:64
+ msgid "Timedemo"
+ msgstr "Timedemo"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:117
- msgid "Crosshair size:"
- msgstr "Dimensioni mirino:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c:68
+ msgid "DEMO^Play"
+ msgstr "Riproduci"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:122
- msgid "Crosshair alpha:"
- msgstr "Opacità mirino:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.c:4
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.c:4
+ msgid "Disconnect"
+ msgstr "Disconnetti"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:128
- msgid "Crosshair color:"
- msgstr "Colore mirino:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.c:19
+ msgid "Playing a demo will disconnect you from the current match."
+ msgstr ""
+ "L'esecuzione di un demo comporta la disconnessione dalla partita corrente"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130
- msgid "Per weapon"
- msgstr "Per singola arma"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.c:21
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.c:21
+ msgid "Do you really wish to disconnect now?"
+ msgstr "Vuoi veramente disconnetterti ora?"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:132
- msgid "By health"
- msgstr "In base alla vita"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.c:24
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.c:24
+ msgid "DMCNFRM^Yes"
+ msgstr "Sì"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:136
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:47
- msgid "Custom"
- msgstr "Personalizzato"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.c:27
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.c:27
+ msgid "DMCNFRM^No"
+ msgstr "No"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:144
- msgid "Other crosshair settings"
- msgstr "Altre impostazioni mirino"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.c:19
+ msgid "Timing a demo will disconnect you from the current match."
+ msgstr "Cronometrare un demo comporta la disconnessione dalla partita corrente"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:152
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:6
- msgid "Model settings"
- msgstr "Impostazioni modello"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.c:50
+ msgid "Auto screenshot scoreboard"
+ msgstr "Auto screenshot dei punteggi"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:158
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:6
- msgid "View settings"
- msgstr "Impostazioni visuale"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.c:70
+ msgid "Open in the viewer"
+ msgstr "Apri nel visualizzatore"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:164
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6
- msgid "Weapon settings"
- msgstr "Impostazioni arma"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.c:153
+ msgid "Reset"
+ msgstr "Reset"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:174
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:6
- msgid "HUD settings"
- msgstr "Impostazioni HUD"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.c:158
+ msgid "Previous"
+ msgstr "Precedente"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:180
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:164
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:200
- #: qcsrc/menu/xonotic/dialog_settings_input.c:90
- #: qcsrc/menu/xonotic/dialog_settings_user.c:88
- #: qcsrc/menu/xonotic/dialog_settings_video.c:143
- msgid "Apply immediately"
- msgstr "Applica immediatamente"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.c:161
+ msgid "Next"
+ msgstr "Successivo"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:6
- msgid "Crosshair settings"
- msgstr "Impostazioni mirino"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.c:166
+ msgid "Slide show"
+ msgstr "Presentazione"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:28
- msgid "Enable center crosshair dot"
- msgstr "Abilita punto al centro del mirino"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:40
+ msgid "Name"
+ msgstr "Nome"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:31
- msgid "Dot size:"
- msgstr "Dimensioni punto:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:67
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:6
+ msgid "Model"
+ msgstr "Modello"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:36
- msgid "Dot alpha:"
- msgstr "Opacità punto:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:84
+ msgid "Glowing color"
+ msgstr "Colore glow"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:41
- msgid "Dot color:"
- msgstr "Colore punto:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:93
+ msgid "Detail color"
+ msgstr "Colore dettaglio"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:43
- msgid "Use normal crosshair color"
- msgstr "Usa colore normale del mirino"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:107
+ msgid "Statistics"
+ msgstr "Statistiche"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:54
- msgid "Crosshair animations:"
- msgstr "Animazioni mirino:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:111
+ msgid "Allow player statistics to track your client"
+ msgstr "Consenti alle statistiche dei giocatori di tracciare il tuo client"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:57
- msgid "Smooth effects of crosshairs"
- msgstr "Ammorbidisci gli effetti dei mirini"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:114
+ msgid "Allow player statistics to use your nickname"
+ msgstr "Consenti alle statistiche dei giocatori di usare il tuo nome"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:61
- msgid "Use rings to indicate weapon status"
- msgstr "Usa anelli per indicare lo stato dell'arma"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:129
+ msgid "Country"
+ msgstr "Nazione"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:67
- msgid "Hit testing:"
- msgstr "Test colpo a segno:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:143
+ msgid "Gender:"
+ msgstr "Genere:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:69
- msgid "HTTST^Disabled"
- msgstr "Disabilitato"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:145
+ msgid "GENDER^Undisclosed"
+ msgstr "Nascosto"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:70
- msgid "HTTST^TrueAim"
- msgstr "VeraMira"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:146
+ msgid "GENDER^Female"
+ msgstr "Femmina"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:71
- msgid "HTTST^Enemies"
- msgstr "Nemici"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:147
+ msgid "GENDER^Male"
+ msgstr "Maschio"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:76
- msgid "Blur crosshair if the shot is obstructed"
- msgstr "Sfoca il mirino se la linea di tiro è ostruita"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:150
+ msgid "Gender"
+ msgstr "Genere:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:81
- msgid "Animate when hitting an enemy"
- msgstr "Anima colpendo un nemico"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:156
+ msgid "Female"
+ msgstr "Femmina"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:85
- msgid "Animate when picking up an item"
- msgstr "Anima raccogliendo un oggetto"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:157
+ msgid "Male"
+ msgstr "Maschio"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:40
- msgid "Damage:"
- msgstr "Danno:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:158
+ msgid "Undisclosed"
+ msgstr "Nascosto"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:43
- msgid "Overlay:"
- msgstr "Copertura:"
+ #: qcsrc/menu/xonotic/dialog_multiplayer_profile.c:162
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:164
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:213
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:143
+ msgid "Apply immediately"
+ msgstr "Applica immediatamente"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:47
- msgid "Factor:"
- msgstr "Fattore:"
+ #: qcsrc/menu/xonotic/dialog_quit.c:4
+ msgid "Quit"
+ msgstr "Esci"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:53
- msgid "Fade rate:"
- msgstr "Durata dissolvenza:"
+ #: qcsrc/menu/xonotic/dialog_quit.c:18
+ msgid "Are you sure you want to quit?"
+ msgstr "Sei sicuro di voler uscire?"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:60
- msgid "Waypoints"
- msgstr "Waypoint"
+ #: qcsrc/menu/xonotic/dialog_quit.c:21
+ #: qcsrc/menu/xonotic/dialog_settings_misc_reset.c:23
+ msgid "Yes"
+ msgstr "Sì"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:75
- msgid "Edge offset:"
- msgstr "Distanza dai bordi:"
+ #: qcsrc/menu/xonotic/dialog_quit.c:22
+ #: qcsrc/menu/xonotic/dialog_settings_misc_reset.c:24
+ msgid "No"
+ msgstr "No"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:83
- msgid "Show names above players"
- msgstr "Mostra nomi sopra i giocatori"
+ #: qcsrc/menu/xonotic/dialog_sandboxtools.c:4
+ msgid "Sandbox Tools"
+ msgstr "Attrezzi Sandbox"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:86
- msgid "Only when near crosshair"
- msgstr "Solo quando vicino al mirino"
+ #: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
+ msgid "Model:"
+ msgstr "Modello:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:89
- msgid "Display health and armor"
- msgstr "Mostra vita e armatura"
+ #: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
+ msgid "Remove *"
+ msgstr "Rimuovi *"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:93
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:4
- msgid "Enter HUD editor"
- msgstr "Apri HUD editor"
+ #: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+ msgid "Copy *"
+ msgstr "Copia *"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:28
- msgid "In order for the HUD editor to show, you must first be in game."
- msgstr "Per visualizzare l'editor dell'HUD, devi prima essere in gioco."
+ #: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
+ msgid "Paste"
+ msgstr "Incolla"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:30
- msgid "Do you wish to start a local game to set up the HUD?"
- msgstr "Desideri avviare una partita locale per configurare l'HUD?"
+ #: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
+ msgid "Bone:"
+ msgstr "Osso:"
  
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:33
- msgid "HDCNFRM^Yes"
- msgstr "Sì"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:36
- msgid "HDCNFRM^No"
- msgstr "No"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:28
- msgid "Body fading:"
- msgstr "Dissolvenza corpi:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:31
- msgid "Gibs:"
- msgstr "Gib:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:33
- msgid "GIBS^None"
- msgstr "Nessuno"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:34
- msgid "GIBS^Few"
- msgstr "Pochi"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:35
- msgid "GIBS^Many"
- msgstr "Molti"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:36
- msgid "GIBS^Lots"
- msgstr "Parecchi"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:41
- msgid "Force player models to mine"
- msgstr "Forza modelli giocatori come il mio"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:43
- msgid "Force player colors to mine"
- msgstr "Forza colori giocatori come i miei"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:28
- msgid "Field of view:"
- msgstr "Campo di vista:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:31
- msgid "Zoom:"
- msgstr "Zoom:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:33
- msgid "RETICLE^Fullscreen"
- msgstr "Schermo intero"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:34
- msgid "RETICLE^With reticle"
- msgstr "Con reticolo"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:38
- msgid "ZOOM^Factor:"
- msgstr "Fattore:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:42
- msgid "ZOOM^Speed:"
- msgstr "Velocità:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:52
- msgid "ZOOM^Instant"
- msgstr "Istantaneo"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:56
- msgid "ZOOM^Sensitivity:"
- msgstr "Sensibilità:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:59
- msgid "Velocity zoom:"
- msgstr "Zoom della velocità:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:61
- msgid "VZOOM^Disabled"
- msgstr "Disabilitato"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:62
- msgid "VZOOM^Forward only"
- msgstr "Solo in avanti"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:63
- msgid "VZOOM^All directions"
- msgstr "In tutte le direzioni"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:67
- msgid "VZOOM^Speed"
- msgstr "Velocità"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:72
- msgid "Allow passing through walls while spectating"
- msgstr "Consenti di passare attraverso i muri mentre si osserva"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:75
- msgid "1st person perspective"
- msgstr "Prospettiva in prima persona"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:79
- msgid "Smooth the view when landing from a jump"
- msgstr "Ammorbidisci la visuale dopo un salto"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:83
- msgid "Smooth the view while crouching"
- msgstr "Ammorbidisci la visuale abbassandosi"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:87
- msgid "View waving while idle"
- msgstr "Vista ondeggiante quando inattivo"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:91
- msgid "View bobbing while walking around"
- msgstr "Movimento visuale su/giù camminando"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:96
- msgid "3rd person perspective"
- msgstr "Prospettiva in terza persona"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:100
- msgid "Back distance"
- msgstr "Distanza indietro"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:106
- msgid "Up distance"
- msgstr "Distanza in su"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29
- msgid "Weapon priority list:"
- msgstr "Lista priorità armi:"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:33
- msgid "Up"
- msgstr "Su"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:36
- msgid "Down"
- msgstr "Giù"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41
- msgid "Use priority list for weapon cycling"
- msgstr "Usa la lista di priorità per ciclare le armi"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43
- msgid "Auto switch weapons on pickup"
- msgstr "Cambia automaticamente armi dopo raccolta"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:46
- msgid "Draw 1st person weapon model"
- msgstr "Mostra modello arma in 1ª persona"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:58
- msgid "Gun model swaying"
- msgstr "Oscillazione arma"
- #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:63
- msgid "Gun model bobbing"
- msgstr "Movimento su/giù arma"
- #: qcsrc/menu/xonotic/dialog_quit.c:4
- msgid "Quit"
- msgstr "Esci"
- #: qcsrc/menu/xonotic/dialog_quit.c:18
- msgid "Are you sure you want to quit?"
- msgstr "Sei sicuro di voler uscire?"
- #: qcsrc/menu/xonotic/dialog_quit.c:21
- msgid "Yes"
- msgstr "Sì"
- #: qcsrc/menu/xonotic/dialog_quit.c:22
- msgid "No"
- msgstr "No"
- #: qcsrc/menu/xonotic/dialog_sandboxtools.c:4
- msgid "Sandbox Tools"
- msgstr "Attrezzi Sandbox"
- #: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
- msgid "Spawn"
- msgstr "Crea"
- #: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
- msgid "Remove *"
- msgstr "Rimuovi *"
- #: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
- msgid "Copy *"
- msgstr "Copia *"
- #: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
- msgid "Paste"
- msgstr "Incolla"
- #: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
- msgid "Bone:"
- msgstr "Osso:"
- #: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
- msgid "Set * as child"
- msgstr "Imposta * come figlio"
+ #: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+ msgid "Set * as child"
+ msgstr "Imposta * come figlio"
  
  #: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
  msgid "Attach to *"
@@@ -4960,10 -5219,6 +5219,6 @@@ msgstr "Stacca da *
  msgid "Visual object properties for *:"
  msgstr "Proprietà visuali dell'oggetto per *:"
  
- #: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
- msgid "Set skin:"
- msgstr "Imposta skin:"
  #: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
  msgid "Set alpha:"
  msgstr "Imposta opacità:"
@@@ -5053,34 -5308,39 +5308,39 @@@ msgid "Settings
  msgstr "Impostazioni"
  
  #: qcsrc/menu/xonotic/dialog_settings.c:18
- #: qcsrc/menu/xonotic/dialog_settings_input.c:4
- msgid "Input"
- msgstr "Comandi"
- #: qcsrc/menu/xonotic/dialog_settings.c:19
  #: qcsrc/menu/xonotic/dialog_settings_video.c:4
  msgid "Video"
  msgstr "Video"
  
- #: qcsrc/menu/xonotic/dialog_settings.c:20
+ #: qcsrc/menu/xonotic/dialog_settings.c:19
  #: qcsrc/menu/xonotic/dialog_settings_effects.c:4
  msgid "Effects"
  msgstr "Effetti"
  
- #: qcsrc/menu/xonotic/dialog_settings.c:21
+ #: qcsrc/menu/xonotic/dialog_settings.c:20
  #: qcsrc/menu/xonotic/dialog_settings_audio.c:4
  msgid "Audio"
  msgstr "Audio"
  
  #: qcsrc/menu/xonotic/dialog_settings.c:22
+ #: qcsrc/menu/xonotic/dialog_settings_game.c:4
+ msgid "Game"
+ msgstr "Gioco"
+ #: qcsrc/menu/xonotic/dialog_settings.c:23
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:4
+ msgid "Input"
+ msgstr "Comandi"
+ #: qcsrc/menu/xonotic/dialog_settings.c:24
  #: qcsrc/menu/xonotic/dialog_settings_user.c:4
  msgid "User"
  msgstr "Utente"
  
- #: qcsrc/menu/xonotic/dialog_settings.c:23
+ #: qcsrc/menu/xonotic/dialog_settings.c:25
  #: qcsrc/menu/xonotic/dialog_settings_misc.c:4
  msgid "Misc"
- msgstr "Altro"
+ msgstr "Vari"
  
  #: qcsrc/menu/xonotic/dialog_settings_audio.c:27
  msgid "Master:"
@@@ -5131,7 -5391,6 +5391,6 @@@ msgid "Mute sounds when not active
  msgstr "Muto quando non attivo"
  
  #: qcsrc/menu/xonotic/dialog_settings_audio.c:102
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:156
  msgid "Frequency:"
  msgstr "Frequenza:"
  
@@@ -5203,49 -5462,62 +5462,62 @@@ msgstr "6.1
  msgid "7.1"
  msgstr "7.1"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:126
- msgid "Swap Stereo"
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:127
+ msgid "Swap stereo output channels"
  msgstr "Scambia canali stereo"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:130
  msgid "Headphone friendly mode"
  msgstr "Modalità cuffie"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:132
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:134
  msgid "Hit indication sound"
  msgstr "Suono per colpo a segno"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:134
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:137
  msgid "Chat message sound"
  msgstr "Suono per messaggio di chat"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:139
  msgid "Menu sounds"
  msgstr "Suoni del menu"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:139
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:142
  msgid "Time announcer:"
  msgstr "Annunciatore tempo:"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:141
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:144
  msgid "WRN^Disabled"
  msgstr "Disabilitato"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:145
  msgid "1 minute"
  msgstr "1 minuto"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:143
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:146
  msgid "5 minutes"
  msgstr "5 minuti"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:144
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:147
  msgid "WRN^Both"
  msgstr "Entrambi"
  
- #: qcsrc/menu/xonotic/dialog_settings_audio.c:151
- msgid "Automatic taunts"
- msgstr "Insulti automatici"
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:150
+ msgid "Automatic taunts:"
+ msgstr "Insulti automatici:"
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:153
+ msgid "Sometimes"
+ msgstr "A volte"
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:154
+ msgid "Often"
+ msgstr "Spesso"
+ #: qcsrc/menu/xonotic/dialog_settings_audio.c:155
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:147
+ msgid "Always"
+ msgstr "Sempre"
  
  #: qcsrc/menu/xonotic/dialog_settings_audio.c:161
  msgid "Debug info about sounds"
@@@ -5257,7 -5529,7 +5529,7 @@@ msgstr "Preset qualità:
  
  #: qcsrc/menu/xonotic/dialog_settings_effects.c:41
  msgid "PRE^OMG!"
- msgstr "Oh mio dio!"
+ msgstr "Mio dio!"
  
  #: qcsrc/menu/xonotic/dialog_settings_effects.c:42
  msgid "PRE^Low"
@@@ -5283,260 -5555,811 +5555,811 @@@ msgstr "Ultra
  msgid "PRE^Ultimate"
  msgstr "Massima"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:52
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:51
  msgid "Geometry detail:"
- msgstr "Dettagli geometrici:"
+ msgstr "Dettaglio geometria:"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:54
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:53
  msgid "DET^Lowest"
- msgstr "Molto bassi"
+ msgstr "Molto basso"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:55
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:54
  msgid "DET^Low"
- msgstr "Bassi"
+ msgstr "Basso"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:56
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:55
  msgid "DET^Normal"
- msgstr "Normali"
+ msgstr "Normale"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:57
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:56
  msgid "DET^Good"
- msgstr "Buoni"
+ msgstr "Buono"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:58
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:57
  msgid "DET^Best"
- msgstr "Ottimi"
+ msgstr "Molto buoni"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:59
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:58
  msgid "DET^Insane"
- msgstr "Bestiali"
+ msgstr "Pazzesco"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:62
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:61
  msgid "Player detail:"
- msgstr "Dettagli giocatore:"
+ msgstr "Dettaglio giocatore:"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:63
+ msgid "PDET^Low"
+ msgstr "Basso"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:64
+ msgid "PDET^Medium"
+ msgstr "Medio"
  
  #: qcsrc/menu/xonotic/dialog_settings_effects.c:65
+ msgid "PDET^Normal"
+ msgstr "Normale"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:66
+ msgid "PDET^Good"
+ msgstr "Buono"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:67
+ msgid "PDET^Best"
+ msgstr "Molto buono"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:70
  msgid "Texture resolution:"
  msgstr "Risoluzione texture:"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:69
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:74
  msgid "RES^Leet"
  msgstr "Leet"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:70
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:75
  msgid "RES^Lowest"
  msgstr "Molto bassa"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:71
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:76
  msgid "RES^Very low"
  msgstr "Molto bassa"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:72
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:77
  msgid "RES^Low"
  msgstr "Bassa"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:73
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:78
  msgid "RES^Normal"
  msgstr "Normale"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:74
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:79
  msgid "RES^Good"
  msgstr "Buona"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:75
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:80
  msgid "RES^Best"
  msgstr "Ottima"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:87
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:91
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:95
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:92
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:96
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:100
  msgid "Avoid lossy texture compression"
  msgstr "Evita compressione texture con perdita"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:105
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:110
  msgid "Show surfaces"
  msgstr "Mostra superfici"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:108
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:113
  msgid "Use lightmaps"
  msgstr "Usa mappe di luce"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:109
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:114
  msgid "Deluxe mapping"
  msgstr "Mappaggio Deluxe"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:111
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:116
  msgid "Gloss"
  msgstr "Lucentezza"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:114
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:119
  msgid "Offset mapping"
  msgstr "Mappaggio in offset"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:116
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:121
  msgid "Relief mapping"
  msgstr "Mappaggio in rilievo"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:119
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:124
  msgid "Reflections:"
  msgstr "Riflessioni:"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:122
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:127
  msgid "Blurred"
  msgstr "Sfocate"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:123
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:128
  msgid "REFL^Good"
  msgstr "Buone"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:124
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:129
  msgid "Sharp"
  msgstr "Nitide"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:129
- msgid "Particles quality:"
- msgstr "Qualità particelle:"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:133
+ msgid "Decals"
+ msgstr "Decal"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:134
+ msgid "Decals on models"
+ msgstr "Decal sui modelli"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:132
- msgid "Particles distance:"
- msgstr "Distanza particelle:"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:138
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:207
+ msgid "Distance:"
+ msgstr "Distanza:"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:144
+ msgid "Time:"
+ msgstr "Tempo:"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:135
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:150
  msgid "Damage effects:"
  msgstr "Effetti danno:"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:137
- msgid "DMGPRTCLS^Disabled"
- msgstr "Disabilitati"
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:138
- msgid "DMGPRTCLS^Skeletal"
- msgstr "Scheletri"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:152
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:55
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:94
+ msgid "Disabled"
+ msgstr "Disabilitato"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:139
- msgid "DMGPRTCLS^All"
- msgstr "Tutti"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:153
+ msgid "Skeletal"
+ msgstr "Schelettrico"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:142
- msgid "Particle effects for spawnpoints"
- msgstr "Effetti di particelle per punti di nascita"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:154
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:96
+ msgid "All"
+ msgstr "Tutto"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:146
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:158
  msgid "No dynamic lighting"
  msgstr "Nessuna illuminazione dinamica"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:148
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:160
  msgid "Fake corona lighting"
  msgstr "Finta illuminazione corona"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:151
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:163
  msgid "Realtime dynamic lighting"
  msgstr "Illuminazione dinamica in tempo reale"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:153
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:165
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:169
  msgid "Shadows"
  msgstr "Ombre"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:156
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:168
  msgid "Realtime world lighting"
  msgstr "Illuminazione globale in tempo reale"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:161
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:173
  msgid "Use normal maps"
  msgstr "Usa mappe normali"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:163
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:175
  msgid "Soft shadows"
  msgstr "Ombre morbide"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:167
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:179
  msgid "Fade corona according to visibility"
  msgstr "Dissolvi corona in base alla visibilità"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:171
- msgid "Bloom"
- msgstr "Bloom"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:183
+ msgid "Bloom"
+ msgstr "Bloom"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:184
+ msgid "Extra postprocessing effects"
+ msgstr "Effetti extra di postcalcolo"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:189
+ msgid "Motion blur:"
+ msgstr "Sfocatura movimento:"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:195
+ msgid "Particles"
+ msgstr "Particelle"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:196
+ msgid "Spawnpoint effects"
+ msgstr "Effetti punto di nascita"
+ #: qcsrc/menu/xonotic/dialog_settings_effects.c:201
+ msgid "Quality:"
+ msgstr "Qualità:"
+ #: qcsrc/menu/xonotic/dialog_settings_game.c:28
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:6
+ msgid "View"
+ msgstr "Vista"
+ #: qcsrc/menu/xonotic/dialog_settings_game.c:29
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:6
+ msgid "Crosshair"
+ msgstr "Mirino"
+ #: qcsrc/menu/xonotic/dialog_settings_game.c:30
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:6
+ msgid "HUD"
+ msgstr "HUD"
+ #: qcsrc/menu/xonotic/dialog_settings_game.c:31
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:6
+ msgid "Messages"
+ msgstr "Messaggi"
+ #: qcsrc/menu/xonotic/dialog_settings_game.c:32
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:6
+ msgid "Weapons"
+ msgstr "Armi"
+ #: qcsrc/menu/xonotic/dialog_settings_game.c:33
+ msgid "Models"
+ msgstr "Modelli"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:35
+ msgid "No crosshair"
+ msgstr "Niente mirino"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:37
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:74
+ msgid "Per weapon"
+ msgstr "Per singola arma"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:60
+ msgid "Crosshair size:"
+ msgstr "Dimensioni mirino:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:66
+ msgid "Crosshair alpha:"
+ msgstr "Opacità mirino:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:72
+ msgid "Crosshair color:"
+ msgstr "Colore mirino:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:76
+ msgid "By health"
+ msgstr "In base alla vita"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:88
+ msgid "Use rings to indicate weapon status"
+ msgstr "Usa anelli per indicare lo stato dell'arma"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:98
+ msgid "Ring alpha:"
+ msgstr "Alfa anello:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:104
+ msgid "Enable center crosshair dot"
+ msgstr "Abilita punto al centro del mirino"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:108
+ msgid "Dot size:"
+ msgstr "Dimensioni punto:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:114
+ msgid "Dot alpha:"
+ msgstr "Opacità punto:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:120
+ msgid "Dot color:"
+ msgstr "Colore punto:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:122
+ msgid "Use normal crosshair color"
+ msgstr "Usa colore normale del mirino"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:133
+ msgid "Smooth effects of crosshairs"
+ msgstr "Ammorbidisci gli effetti dei mirini"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:136
+ msgid "Blur crosshair if the shot is obstructed"
+ msgstr "Sfoca il mirino se la linea di tiro è ostruita"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:139
+ msgid "Enlarge crosshair if targeting an enemy"
+ msgstr "Ingradisci mirino mirando a un nemico"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:142
+ msgid "Animate crosshair when hitting an enemy"
+ msgstr "Anima mirino colpendo un nemico"
+ #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.c:145
+ msgid "Animate crosshair when picking up an item"
+ msgstr "Anima mirino raccogliendo un oggetto"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:54
+ msgid "Fading speed:"
+ msgstr "Velocità dissolv.:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:57
+ msgid "Side padding:"
+ msgstr "Imbottitura laterale:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:63
+ msgid "Show decimals in respawn countdown"
+ msgstr "Mostra decimali nel conto alla rovescia per la rinascita"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:65
+ msgid "Show accuracy underneath scoreboard"
+ msgstr "Mostra accuratezza sotto i punteggi"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:69
+ msgid "Waypoints"
+ msgstr "Waypoint"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:71
+ msgid "Display waypoint markers for objectives on the map"
+ msgstr "Mostra punti di segnalazione per gli obiettivi della mappa"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:80
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:130
+ msgid "Fontsize:"
+ msgstr "Grand. carattere:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:86
+ msgid "Edge offset:"
+ msgstr "Distanza dai bordi:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:95
+ msgid "Fade when near the crosshair"
+ msgstr "Dissolvi quando vicino al mirino"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:100
+ msgid "Damage"
+ msgstr "Danno"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:102
+ msgid "Overlay:"
+ msgstr "Sovraposiz.:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:105
+ msgid "Factor:"
+ msgstr "Fattore:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:110
+ msgid "Fade rate:"
+ msgstr "Durata dissolvenza:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:118
+ msgid "Player Names"
+ msgstr "Nomi Giocatori"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:120
+ msgid "Show names above players"
+ msgstr "Mostra nomi sopra i giocatori"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:136
+ msgid "Max distance:"
+ msgstr "Massima distanza:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:142
+ msgid "Decolorize:"
+ msgstr "Scolorisci:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:146
+ msgid "Teamplay"
+ msgstr "A squadre"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:154
+ msgid "Only when near crosshair"
+ msgstr "Solo quando vicino al mirino"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:158
+ msgid "Display health and armor"
+ msgstr "Mostra vita e armatura"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:163
+ msgid "Damage overlay:"
+ msgstr "Sovraposiz. danno:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hud.c:168
+ #: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.c:4
+ msgid "Enter HUD editor"
+ msgstr "Apri HUD editor"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.c:28
+ msgid "In order for the HUD editor to show, you must first be in game."
+ msgstr "Per visualizzare l'editor dell'HUD, devi prima essere in gioco."
+ #: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.c:30
+ msgid "Do you wish to start a local game to set up the HUD?"
+ msgstr "Desideri avviare una partita locale per configurare l'HUD?"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.c:33
+ msgid "HDCNFRM^Yes"
+ msgstr "Sì"
+ #: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.c:36
+ msgid "HDCNFRM^No"
+ msgstr "No"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:33
+ msgid "Frag Information"
+ msgstr "Informazioni su frag"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:35
+ msgid "Display information about killing sprees"
+ msgstr "Mostra informazione su serie di uccisioni"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:38
+ msgid "Only display sprees if they are achievements"
+ msgstr "Mostra serie solo se sono conseguimenti"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:43
+ msgid "Show spree information in centerprints"
+ msgstr "Mostra informazione su serie nei centerprint"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:47
+ msgid "Show spree information in death messages"
+ msgstr "Mostra informazione su serie nei messaggi di morte"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:52
+ msgid "Sprees in info messages:"
+ msgstr "Serie nei messaggi info:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:56
+ msgid "Target"
+ msgstr "Obiettivo"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:57
+ msgid "Attacker"
+ msgstr "Attaccante"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:58
+ msgid "Both"
+ msgstr "Entrambi"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:64
+ msgid "Print on a seperate line"
+ msgstr "Stampa in una riga separata"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:67
+ msgid "Add extra frag information to centerprint when available"
+ msgstr "Aggiungi informazioni extra ai centerprint quando disponibili"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:71
+ msgid "Add frag location to death messages when available"
+ msgstr "Aggiungi luogo di frag ai messaggi di morte quando disponibili"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:74
+ msgid "Gamemode Settings"
+ msgstr "Settaggi Tipo di Gioco"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:76
+ msgid "Display capture times in Capture The Flag"
+ msgstr "Mostra tempi di cattura in CTF"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:80
+ msgid "Display name of flag stealer in Capture The Flag"
+ msgstr "Mostra il nome di chi ruba la bandiera in CTF"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:85
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:85
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:118
+ msgid "Other"
+ msgstr "Altro"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:87
+ msgid "Display console messages in the top left corner"
+ msgstr "Mostra messaggi della console nell'angolo sup. sin."
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:89
+ msgid "Display all info messages in the chatbox"
+ msgstr "Mostra tutti i messaggi info nell'area chat"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:91
+ msgid "Display player statuses in the chatbox"
+ msgstr "Mostra stato dei giocatori nell'area chat"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:95
+ msgid "Powerup notifications"
+ msgstr "Notifiche powerup"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:98
+ msgid "Weapon centerprint notifications"
+ msgstr "Notifiche centerprint per le armi"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:101
+ msgid "Weapon info message notifications"
+ msgstr "Notifiche messaggi info per le armi"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:105
+ msgid "Announcers"
+ msgstr "Annunciatori"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:109
+ msgid "Respawn countdown sounds"
+ msgstr "Suoni conto alla rovescia per la rinascita"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:113
+ msgid "Killstreak sounds"
+ msgstr "Suoni per serie di uccisioni"
+ #: qcsrc/menu/xonotic/dialog_settings_game_messages.c:116
+ msgid "Achievement sounds"
+ msgstr "Suoni per conseguimenti"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:37
+ msgid "Items"
+ msgstr "Oggetti"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:39
+ msgid "Use simple 2D images instead of item models"
+ msgstr "Usa semplici immagini 2d al posto dei modelli degli oggetti"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:41
+ msgid "Unavailable alpha:"
+ msgstr "Alfa Non disponibile:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:44
+ msgid "Unavailable color:"
+ msgstr "Colore Non disponibile:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:46
+ msgid "GHOITEMS^Black"
+ msgstr "Nero"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:47
+ msgid "GHOITEMS^Dark"
+ msgstr "Scuro"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:48
+ msgid "GHOITEMS^Tinted"
+ msgstr "Dipinto"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:49
+ msgid "GHOITEMS^Normal"
+ msgstr "Normale"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:50
+ msgid "GHOITEMS^Blue"
+ msgstr "Blu"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:56
+ #: qcsrc/menu/xonotic/serverlist.c:928
+ msgid "Players"
+ msgstr "Giocatori"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:58
+ msgid "Force player models to mine"
+ msgstr "Forza modelli dei giocatori come il mio"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:60
+ msgid "Force player colors to mine"
+ msgstr "Forza colori dei giocatori come i miei"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:62
+ msgid "Body fading:"
+ msgstr "Dissolvenza corpi:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:65
+ msgid "Gibs:"
+ msgstr "Gib:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:67
+ msgid "GIBS^None"
+ msgstr "Nessuno"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:68
+ msgid "GIBS^Few"
+ msgstr "Pochi"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:69
+ msgid "GIBS^Many"
+ msgstr "Molti"
+ #: qcsrc/menu/xonotic/dialog_settings_game_model.c:70
+ msgid "GIBS^Lots"
+ msgstr "Parecchi"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:32
+ msgid "1st person perspective"
+ msgstr "Prospettiva in 1ª persona"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:36
+ msgid "Slide to third person upon death"
+ msgstr "Vista in 3ª persona quando muori"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:40
+ msgid "Smooth the view when landing from a jump"
+ msgstr "Ammorbidisci la visuale dopo un salto"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:44
+ msgid "Smooth the view while crouching"
+ msgstr "Ammorbidisci la visuale abbassandosi"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:48
+ msgid "View waving while idle"
+ msgstr "Vista ondeggiante quando inattivo"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:52
+ msgid "View bobbing while walking around"
+ msgstr "Movimento visuale su/giù camminando"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:57
+ msgid "3rd person perspective"
+ msgstr "Prospettiva in 3ª persona"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:61
+ msgid "Back distance"
+ msgstr "Distanza indietro"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:67
+ msgid "Up distance"
+ msgstr "Distanza in su"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:73
+ msgid "Allow passing through walls while spectating"
+ msgstr "Consenti di passare attraverso i muri mentre si osserva"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:76
+ msgid "Field of view:"
+ msgstr "Campo visuale:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:81
+ msgid "ZOOM^Zoom factor:"
+ msgstr "Fattore zoom:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:85
+ msgid "ZOOM^Zoom speed:"
+ msgstr "Velocità zoom:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:95
+ msgid "ZOOM^Instant"
+ msgstr "Istantaneo"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:99
+ msgid "ZOOM^Zoom sensitivity:"
+ msgstr "Sensibilità zoom:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:103
+ msgid "Velocity zoom"
+ msgstr "Zoom velocità"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:104
+ msgid "Forward movement only"
+ msgstr "Solo movimento in avanti"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:108
+ msgid "VZOOM^Factor"
+ msgstr "Fattore"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:115
+ msgid "Display reticle 2D overlay while zooming"
+ msgstr "Mostra reticolo durante lo zoom"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:118
+ msgid "Release zoom when you die or respawn"
+ msgstr "Rilascia zoom quando muori o rinasci"
+ #: qcsrc/menu/xonotic/dialog_settings_game_view.c:122
+ msgid "Release zoom when you switch weapons"
+ msgstr "Rilascia zoom quando cambi arma"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:34
+ msgid "Weapon Priority List"
+ msgstr "Lista Priorità Armi"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:39
+ msgid "Up"
+ msgstr "Su"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:42
+ msgid "Down"
+ msgstr "Giù"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:47
+ msgid "Use priority list for weapon cycling"
+ msgstr "Usa la lista di priorità per ciclare le armi"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:172
- msgid "Extra postprocessing effects"
- msgstr "Effetti extra di postcalcolo"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:49
+ msgid "Cycle through only usable weapon selections"
+ msgstr "Cicla solo selezioni di armi utilizzabili"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:177
- msgid "Motion blur:"
- msgstr "Sfocatura movimento:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:52
+ msgid "Auto switch weapons on pickup"
+ msgstr "Cambia automaticamente arma alla raccolta"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:183
- msgid "Decals"
- msgstr "Decal"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:54
+ msgid "Release attack buttons when you switch weapons"
+ msgstr "Rilascia tasti di attacco cambiando arma"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:184
- msgid "Decals on models"
- msgstr "Decal sui modelli"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:57
+ msgid "Draw 1st person weapon model"
+ msgstr "Mostra modello arma in 1ª persona"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:188
- msgid "Distance:"
- msgstr "Distanza:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:69
+ msgid "Gun model swaying"
+ msgstr "Oscillazione arma"
  
- #: qcsrc/menu/xonotic/dialog_settings_effects.c:194
- msgid "Time:"
- msgstr "Tempo:"
+ #: qcsrc/menu/xonotic/dialog_settings_game_weapons.c:74
+ msgid "Gun model bobbing"
+ msgstr "Movimento su/giù arma"
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:26
- msgid "Key bindings:"
- msgstr "Associazione tasti (bind):"
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:33
+ msgid "Key Bindings"
+ msgstr "Associazioni tasti"
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:30
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:37
  msgid "Change key..."
  msgstr "Cambia tasto..."
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:34
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:41
  msgid "Edit..."
  msgstr "Modifica..."
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:40
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:47
  msgid "Clear"
  msgstr "Pulisci"
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:46
- msgid "Pressing \"enter console\" key also closes it"
- msgstr "Premendo \"apri console\" la chiude anche"
- #: qcsrc/menu/xonotic/dialog_settings_input.c:48
- msgid "Automatically repeat jumping if holding jump"
- msgstr "Automaticamente ripeti il salto tenendo premuto salto"
  #: qcsrc/menu/xonotic/dialog_settings_input.c:52
- #: qcsrc/menu/xonotic/dialog_settings_input.c:54
- #: qcsrc/menu/xonotic/dialog_settings_input.c:57
- msgid "Use joystick input"
- msgstr "Usa joystick"
+ msgid "Reset all"
+ msgstr "Reimposta tutte"
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:62
- msgid "Mouse:"
- msgstr "Mouse:"
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:57
+ msgid "Mouse"
+ msgstr "Mouse"
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:65
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:59
  msgid "Sensitivity:"
  msgstr "Sensibilità:"
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:69
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:62
  msgid "Smooth aiming"
  msgstr "Ammorbidisci mira"
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:72
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:64
  msgid "Invert aiming"
  msgstr "Inverti mira"
  
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:66
+ msgid "Use system mouse positioning"
+ msgstr "Usa posizionamento del mouse del sistema"
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:71
+ msgid "Enable built in mouse acceleration"
+ msgstr "Abilita l'accelerazione mouse incorporata"
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:74
  #: qcsrc/menu/xonotic/dialog_settings_input.c:76
- #: qcsrc/menu/xonotic/dialog_settings_input.c:78
- #: qcsrc/menu/xonotic/dialog_settings_input.c:81
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:79
  msgid "Disable system mouse acceleration"
  msgstr "Disattiva l'accelerazione mouse del sistema"
  
- #: qcsrc/menu/xonotic/dialog_settings_input.c:86
- msgid "Enable built in mouse acceleration"
- msgstr "Abilita l'accelerazione mouse incorporata"
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:87
+ msgid "Pressing \"enter console\" key also closes it"
+ msgstr "Premendo \"apri console\" la chiude anche"
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:89
+ msgid "Automatically repeat jumping if holding jump"
+ msgstr "Salta di nuovo automaticamente tenendo premuto salto"
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:92
+ msgid "Jetpack on jump:"
+ msgstr "Jetpack quando salti:"
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:95
+ msgid "Air only"
+ msgstr "Solo aria"
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:102
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:107
+ #: qcsrc/menu/xonotic/dialog_settings_input.c:112
+ msgid "Use joystick input"
+ msgstr "Usa joystick"
  
  #: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5
  msgid "User defined key bind"
@@@ -5559,261 -6382,303 +6382,303 @@@ msgid "Cancel
  msgstr "Annulla"
  
  #: qcsrc/menu/xonotic/dialog_settings_misc.c:26
- msgid "Network:"
- msgstr "Rete:"
+ msgid "Network"
+ msgstr "Rete"
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:28
+ msgid "Client UDP port:"
+ msgstr "Porta UDP del client:"
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:32
+ msgid "Bandwidth:"
+ msgstr "Largh. di banda:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:31
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:34
  msgid "56k"
  msgstr "56k"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:32
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:35
  msgid "ISDN"
  msgstr "ISDN"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:33
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:36
  msgid "Slow ADSL"
  msgstr "ADSL lenta"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:34
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:37
  msgid "Fast ADSL"
  msgstr "ADSL veloce"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:35
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:38
  msgid "Broadband"
  msgstr "Banda larga"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:39
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:41
  msgid "Input packets/s:"
  msgstr "Pacchetti/s in entrata:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:45
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:44
+ msgid "Server queries/s:"
+ msgstr "Ricerche server/s:"
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:48
+ msgid "Downloads:"
+ msgstr "N° di download:"
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:52
+ msgid "Speed (kB/s):"
+ msgstr "Velocità (kB/s):"
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:57
  msgid "Local latency:"
  msgstr "Latenza locale:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:50
- msgid "Client UDP port:"
- msgstr "Porta UDP del client:"
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:56
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:61
  msgid "Show netgraph"
  msgstr "Mostra grafico di rete"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:60
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:63
  msgid "Client-side movement prediction"
  msgstr "Predizione del movimento lato client"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:63
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:65
  msgid "Movement error compensation"
  msgstr "Compensazione errori movimento"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:67
- msgid "Downloads:"
- msgstr "N° di download:"
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:69
+ msgid "Use encryption (AES) when available"
+ msgstr "Usa crittografia (AES) quando disponibile"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:70
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:82
- msgid "Maximum:"
- msgstr "Massimo:"
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:72
+ msgid "Framerate"
+ msgstr "FPS"
  
  #: qcsrc/menu/xonotic/dialog_settings_misc.c:74
- msgid "Speed (kB/s):"
- msgstr "Velocità (kB/s):"
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:79
- msgid "Framerate:"
- msgstr "Framerate:"
+ msgid "Maximum:"
+ msgstr "Massimo:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:76
  msgid "MAXFPS^5 fps"
  msgstr "5 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:85
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:77
  msgid "MAXFPS^10 fps"
  msgstr "10 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:86
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:78
  msgid "MAXFPS^20 fps"
  msgstr "20 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:87
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:79
  msgid "MAXFPS^30 fps"
  msgstr "30 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:88
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:80
  msgid "MAXFPS^40 fps"
  msgstr "40 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:89
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:81
  msgid "MAXFPS^50 fps"
  msgstr "50 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:90
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:82
  msgid "MAXFPS^60 fps"
  msgstr "60 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:91
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:83
  msgid "MAXFPS^70 fps"
  msgstr "70 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:92
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:84
  msgid "MAXFPS^100 fps"
  msgstr "100 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:93
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:85
  msgid "MAXFPS^125 fps"
  msgstr "125 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:94
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:86
  msgid "MAXFPS^200 fps"
  msgstr "200 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:95
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:87
  msgid "MAXFPS^Unlimited"
  msgstr "Illimitato"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:99
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:90
  msgid "Target:"
  msgstr "Obiettivo:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:101
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:92
  msgid "TRGT^Disabled"
  msgstr "Disabilitato"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:102
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:93
  msgid "TRGT^30 fps"
  msgstr "30 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:103
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:94
  msgid "TRGT^40 fps"
  msgstr "40 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:104
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:95
  msgid "TRGT^50 fps"
  msgstr "50 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:105
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:96
  msgid "TRGT^60 fps"
  msgstr "60 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:106
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:97
  msgid "TRGT^100 fps"
  msgstr "100 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:107
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:98
  msgid "TRGT^125 fps"
  msgstr "125 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:108
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:99
  msgid "TRGT^200 fps"
  msgstr "200 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:112
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:102
  msgid "Idle limit:"
- msgstr "Limite inattività:"
+ msgstr "Limite se inattivo:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:114
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:104
  msgid "IDLFPS^10 fps"
  msgstr "10 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:115
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:105
  msgid "IDLFPS^20 fps"
  msgstr "20 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:116
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:106
  msgid "IDLFPS^30 fps"
  msgstr "30 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:117
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:107
  msgid "IDLFPS^60 fps"
  msgstr "60 fps"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:118
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:108
  msgid "IDLFPS^Unlimited"
  msgstr "Illimitato"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:123
- msgid "Show frames per second"
- msgstr "Mostra fotogrammi al secondo"
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:126
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:112
  msgid "Save processing time for other apps"
  msgstr "Risparmia tempo di calcolo per altri programmi"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:130
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:115
+ msgid "Show frames per second"
+ msgstr "Mostra fotogrammi al secondo"
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:120
  msgid "Menu tooltips:"
  msgstr "Tooltip del menu:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:132
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:122
  msgid "TLTIP^Disabled"
  msgstr "Disabilitati"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:133
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:123
  msgid "TLTIP^Standard"
  msgstr "Standard"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:134
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:124
  msgid "TLTIP^Advanced"
  msgstr "Avanzati"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:138
- msgid "Show current time"
- msgstr "Mostra orario corrente"
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:140
- msgid "Show current date"
- msgstr "Mostra data corrente"
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:127
+ msgid "Show current date and time"
+ msgstr "Mostra data e orario correnti"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc.c:142
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:130
  msgid "Enable developer mode"
  msgstr "Abilita modo sviluppatore"
  
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:134
+ msgid "Advanced settings..."
+ msgstr "Impostazioni avanzate..."
+ #: qcsrc/menu/xonotic/dialog_settings_misc.c:139
+ #: qcsrc/menu/xonotic/dialog_settings_misc_reset.c:4
+ msgid "Factory reset"
+ msgstr "Reimposta valori base"
  #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5
  msgid "Advanced settings"
  msgstr "Impostazioni avanzate"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:32
+ #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:35
  msgid "Cvar filter:"
  msgstr "Filtro delle cvar:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:45
+ #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:48
  msgid "Setting:"
  msgstr "Impostazioni:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:49
+ #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:52
  msgid "Type:"
  msgstr "Tipo:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:53
+ #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:56
  msgid "Value:"
  msgstr "Valore:"
  
- #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:72
+ #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:76
  msgid "Description:"
  msgstr "Descrizione:"
  
- #: qcsrc/menu/xonotic/dialog_settings_user.c:27
- msgid "Menu skins:"
- msgstr "Temi del menu:"
+ #: qcsrc/menu/xonotic/dialog_settings_misc_reset.c:18
+ msgid "Are you sure you want to reset all settings?"
+ msgstr "Sei sicuro di voler reimpostare tutti i settaggi"
  
- #: qcsrc/menu/xonotic/dialog_settings_user.c:31
+ #: qcsrc/menu/xonotic/dialog_settings_misc_reset.c:20
+ msgid "This will create a backup config in your data directory"
+ msgstr "Ciò creerà una config. di backup nella cartella /data"
+ #: qcsrc/menu/xonotic/dialog_settings_user.c:28
+ msgid "Menu Skins"
+ msgstr "Temi Menu"
+ #: qcsrc/menu/xonotic/dialog_settings_user.c:33
  msgid "Set skin"
  msgstr "Imposta skin"
  
- #: qcsrc/menu/xonotic/dialog_settings_user.c:74
+ #: qcsrc/menu/xonotic/dialog_settings_user.c:67
+ msgid "Text Language"
+ msgstr "Lingua del testo"
+ #: qcsrc/menu/xonotic/dialog_settings_user.c:72
  msgid "Set language"
  msgstr "Imposta lingua"
  
- #: qcsrc/menu/xonotic/dialog_settings_user.c:79
+ #: qcsrc/menu/xonotic/dialog_settings_user.c:77
  msgid "Disable gore effects and harsh language"
  msgstr "Disabilita effetti sangue e linguaggio rude"
  
- #: qcsrc/menu/xonotic/dialog_settings_user.c:82
- msgid "Allow player statistics to track your client"
- msgstr "Consenti alle statistiche dei giocatori di tracciare il tuo client"
+ #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.c:4
+ msgid "Warning"
+ msgstr "Attenzione"
  
- #: qcsrc/menu/xonotic/dialog_settings_user.c:84
- msgid "Allow player statistics to use your nickname"
- msgstr "Consenti alle statistiche dei giocatori di usare il tuo nome (nick)"
+ #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.c:17
+ msgid "While connected language changes will be applied only to the menu,"
+ msgstr ""
+ "Quando si è connessi, i cambiamenti di lingua saranno applicati solo al menu,"
+ #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.c:19
+ msgid "full language changes will take effect starting from the next game"
+ msgstr ""
+ "le modifiche complete saranno applicate all'inizio della prossimo partita"
+ #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.c:23
+ msgid "Disconnect now"
+ msgstr "Disconnetti ora"
+ #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.c:24
+ msgid "Switch language"
+ msgstr "Cambia lingua"
  
  #: qcsrc/menu/xonotic/dialog_settings_video.c:26
  msgid "Resolution:"
@@@ -5821,7 -6686,7 +6686,7 @@@ msgstr "Risoluzione:
  
  #: qcsrc/menu/xonotic/dialog_settings_video.c:29
  msgid "Font/UI size:"
- msgstr "Dimensioni caratteri:"
+ msgstr "Grand. carattere:"
  
  #: qcsrc/menu/xonotic/dialog_settings_video.c:31
  msgid "SZ^Unreadable"
@@@ -5880,131 -6745,131 +6745,131 @@@ msgid "Vertical Synchronization
  msgstr "Sincronizzazione verticale"
  
  #: qcsrc/menu/xonotic/dialog_settings_video.c:53
+ msgid "Flip view horizontally"
+ msgstr "Capovolgi la vista orizzontalmente"
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:55
  msgid "Anisotropy:"
  msgstr "Anisotropia:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:55
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:57
  msgid "ANISO^Disabled"
  msgstr "Disabilitata"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:56
- #: qcsrc/menu/xonotic/dialog_settings_video.c:66
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:58
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:68
  msgid "2x"
  msgstr "2x"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:57
- #: qcsrc/menu/xonotic/dialog_settings_video.c:67
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:59
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:69
  msgid "4x"
  msgstr "4x"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:58
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:60
  msgid "8x"
  msgstr "8x"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:59
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:61
  msgid "16x"
  msgstr "16x"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:62
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:64
  msgid "Antialiasing:"
  msgstr "Antialiasing:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:65
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:67
  msgid "AA^Disabled"
  msgstr "Disabilitato"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:71
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:73
  msgid "High-quality frame buffer"
  msgstr "Frame buffer di alta qualità"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:76
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:78
  msgid "Depth first:"
  msgstr "Profondità prima:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:78
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:80
  msgid "DF^Disabled"
  msgstr "Disabilitato"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:79
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:81
  msgid "DF^World"
  msgstr "Globale"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:80
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:82
  msgid "DF^All"
  msgstr "Tutto"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:83
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:85
  msgid "Vertex Buffer Objects (VBOs)"
  msgstr "Vertex Buffer Objects (VBOs)"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:86
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:88
  msgid "VBO^Off"
  msgstr "Non attivo"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:87
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:89
  msgid "Vertices, some Tris (compatible)"
  msgstr "Vertici, alcuni Triangoli (compatibile)"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:90
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:92
  msgid "Vertices"
  msgstr "Vertici"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:91
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:93
  msgid "Vertices and Triangles"
  msgstr "Vertici e Triangoli"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:94
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:96
  msgid "Brightness:"
  msgstr "Luminosità:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:97
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:99
  msgid "Contrast:"
  msgstr "Contrasto:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:100
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:102
  msgid "Gamma:"
  msgstr "Gamma:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:105
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:107
  msgid "Contrast boost:"
  msgstr "Aumenta contrasto:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:110
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:112
  msgid "Saturation:"
  msgstr "Saturazione:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:116
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:118
  msgid "LIT^Ambient:"
  msgstr "Ambiente:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:119
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:121
  msgid "Intensity:"
  msgstr "Intensità:"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:123
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:125
  msgid "Wait for GPU to finish each frame"
  msgstr "Attendi che la GPU finisca di elaborare ogni frame"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:125
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:127
  msgid "Use OpenGL 2.0 shaders (GLSL)"
  msgstr "Usa gli shader OpenGL 2.0 (GLSL)"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:128
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:130
  msgid "Use GLSL to handle color control"
  msgstr "Usa GLSL per gestire il controllo del colore"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:133
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:135
  msgid "Psycho coloring (easter egg)"
  msgstr "Colorazione psico (easter egg)"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:136
+ #: qcsrc/menu/xonotic/dialog_settings_video.c:138
  msgid "Trippy vertices (easter egg)"
  msgstr "Vertici da viaggio (easter egg)"
  
- #: qcsrc/menu/xonotic/dialog_settings_video.c:139
- msgid "Flip view horizontally"
- msgstr "Capovolgi la vista orizzontalmente"
  #: qcsrc/menu/xonotic/dialog_singleplayer.c:4
  msgid "Singleplayer"
  msgstr "Giocatore singolo"
  msgid "Instant action! (random map with bots)"
  msgstr "Inizia ora! (mappa casuale con bot)"
  
+ #: qcsrc/menu/xonotic/dialog_singleplayer.c:123
+ msgid "???"
+ msgstr "???"
  #: qcsrc/menu/xonotic/dialog_singleplayer.c:137
  msgid "Campaign Difficulty:"
  msgstr "Difficoltà campagna:"
@@@ -6039,11 -6908,11 +6908,11 @@@ msgstr "Vincitore
  
  #: qcsrc/menu/xonotic/dialog_teamselect.c:5
  msgid "Team Selection"
- msgstr "Selezione team"
+ msgstr "Selezione squadra"
  
  #: qcsrc/menu/xonotic/dialog_teamselect.c:42
  msgid "join 'best' team (auto-select)"
- msgstr "entra nel 'miglior' team (auto-selezione)"
+ msgstr "entra nella 'migliore' squadra (auto-selezione)"
  
  #: qcsrc/menu/xonotic/dialog_teamselect.c:46
  msgid "red"
@@@ -6065,22 -6934,30 +6934,30 @@@ msgstr "rosa
  msgid "spectate"
  msgstr "spettatore"
  
- #: qcsrc/menu/xonotic/mainwindow.c:39 qcsrc/menu/xonotic/mainwindow.c:42
+ #: qcsrc/menu/xonotic/gametypelist.c:88
+ msgid "teamplay"
+ msgstr "a squadre"
+ #: qcsrc/menu/xonotic/gametypelist.c:90
+ msgid "free for all"
+ msgstr "libero per tutti"
+ #: qcsrc/menu/xonotic/mainwindow.c:40 qcsrc/menu/xonotic/mainwindow.c:43
  msgid "Do not press this button again!"
  msgstr "Non premere questo tasto di nuovo!"
  
- #: qcsrc/menu/xonotic/maplist.c:280
+ #: qcsrc/menu/xonotic/maplist.c:279
  msgid ""
  "Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
  msgstr ""
  "Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
  
- #: qcsrc/menu/xonotic/maplist.c:288
+ #: qcsrc/menu/xonotic/maplist.c:287
  #, c-format
  msgid "%s's Xonotic Server"
  msgstr "Server Xonotic di %s"
  
- #: qcsrc/menu/xonotic/maplist.c:293
+ #: qcsrc/menu/xonotic/maplist.c:292
  msgid ""
  "Huh? Can't play this (invalid game type). Refiltering so this won't happen "
  "again.\n"
@@@ -6092,38 -6969,66 +6969,66 @@@ msgstr "
  msgid "spectator"
  msgstr "spettatore"
  
- #: qcsrc/menu/xonotic/playermodel.c:177
+ #: qcsrc/menu/xonotic/playermodel.c:187
  msgid "<no model found>"
  msgstr "<nessun modello trovato>"
  
- #: qcsrc/menu/xonotic/serverlist.c:190
- msgid "Remove"
- msgstr "Rimuovi"
+ #: qcsrc/menu/xonotic/serverlist.c:148
+ msgid "SLCAT^Favorites"
+ msgstr "Favoriti"
+ #: qcsrc/menu/xonotic/serverlist.c:149
+ msgid "SLCAT^Recommended"
+ msgstr "Raccommandati"
+ #: qcsrc/menu/xonotic/serverlist.c:150
+ msgid "SLCAT^Normal Servers"
+ msgstr "Server Normali"
+ #: qcsrc/menu/xonotic/serverlist.c:151
+ msgid "SLCAT^Servers"
+ msgstr "Server"
+ #: qcsrc/menu/xonotic/serverlist.c:152
+ msgid "SLCAT^Competitive Mode"
+ msgstr "Modo Competitivo"
+ #: qcsrc/menu/xonotic/serverlist.c:153
+ msgid "SLCAT^Modified Servers"
+ msgstr "Server Modificati"
+ #: qcsrc/menu/xonotic/serverlist.c:154
+ msgid "SLCAT^Overkill Mode"
+ msgstr "Modo Overkill"
  
- #: qcsrc/menu/xonotic/serverlist.c:192
- msgid "Bookmark"
- msgstr "Aggiungi tra i preferiti"
+ #: qcsrc/menu/xonotic/serverlist.c:155
+ msgid "SLCAT^InstaGib Mode"
+ msgstr "Modo InstaGib"
  
- #: qcsrc/menu/xonotic/serverlist.c:553
+ #: qcsrc/menu/xonotic/serverlist.c:156
+ msgid "SLCAT^Defrag Mode"
+ msgstr "Modo Defrag"
+ #: qcsrc/menu/xonotic/serverlist.c:437
+ msgid "Favorite"
+ msgstr "Favorito"
+ #: qcsrc/menu/xonotic/serverlist.c:924
  msgid "Ping"
  msgstr "Ping"
  
- #: qcsrc/menu/xonotic/serverlist.c:554
+ #: qcsrc/menu/xonotic/serverlist.c:925
  msgid "Host name"
  msgstr "Nome dell'host"
  
- #: qcsrc/menu/xonotic/serverlist.c:555
+ #: qcsrc/menu/xonotic/serverlist.c:926
  msgid "Map"
  msgstr "Mappa"
  
- #: qcsrc/menu/xonotic/serverlist.c:556
+ #: qcsrc/menu/xonotic/serverlist.c:927
  msgid "Type"
  msgstr "Tipo"
  
- #: qcsrc/menu/xonotic/serverlist.c:557
- msgid "Players"
- msgstr "Giocatori"
  #: qcsrc/menu/xonotic/skinlist.c:105
  msgid "<TITLE>"
  msgstr "<TITOLO>"
@@@ -6140,51 -7045,157 +7045,157 @@@ msgstr "MAX
  msgid "VOL^OFF"
  msgstr "OFF"
  
- #: qcsrc/menu/xonotic/slider_decibels.c:81
- #, c-format
- msgid "%d %%"
- msgstr "%d %%"
- #: qcsrc/menu/xonotic/slider_decibels.c:83
- #, c-format
- msgid "%.1f"
- msgstr "%.1f"
- #: qcsrc/menu/xonotic/slider_decibels.c:85
- #, c-format
- msgid "%.2f %%"
- msgstr "%.2f %%"
  #: qcsrc/menu/xonotic/slider_decibels.c:87
  #, c-format
  msgid "%s dB"
  msgstr "%s dB"
  
- #: qcsrc/menu/xonotic/slider_resolution.c:103
+ #: qcsrc/menu/xonotic/slider_particles.c:21
+ msgid "PART^OMG"
+ msgstr "OMG"
+ #: qcsrc/menu/xonotic/slider_particles.c:22
+ msgid "PART^Low"
+ msgstr "Bassa"
+ #: qcsrc/menu/xonotic/slider_particles.c:23
+ msgid "PART^Medium"
+ msgstr "Media"
+ #: qcsrc/menu/xonotic/slider_particles.c:24
+ #: qcsrc/menu/xonotic/slider_sbfadetime.c:22
+ msgid "PART^Normal"
+ msgstr "Normale"
+ #: qcsrc/menu/xonotic/slider_particles.c:25
+ msgid "PART^High"
+ msgstr "Alta"
+ #: qcsrc/menu/xonotic/slider_particles.c:26
+ msgid "PART^Ultra"
+ msgstr "Ultra"
+ #: qcsrc/menu/xonotic/slider_particles.c:27
+ msgid "PART^Ultimate"
+ msgstr "Esagerata"
+ #: qcsrc/menu/xonotic/slider_resolution.c:116
  #, c-format
  msgid "%dx%d (%d:%d)"
  msgstr "%dx%d (%d:%d)"
  
- #: qcsrc/menu/xonotic/slider_resolution.c:106
+ #: qcsrc/menu/xonotic/slider_resolution.c:119
  #, c-format
  msgid "%dx%d"
  msgstr "%dx%d"
  
- #: qcsrc/menu/xonotic/util.qc:298
+ #: qcsrc/menu/xonotic/slider_sbfadetime.c:21
+ msgid "PART^Slow"
+ msgstr "Lento"
+ #: qcsrc/menu/xonotic/slider_sbfadetime.c:23
+ msgid "PART^Fast"
+ msgstr "Veloce"
+ #: qcsrc/menu/xonotic/slider_sbfadetime.c:24
+ msgid "PART^Instant"
+ msgstr "Istantaneo"
+ #: qcsrc/menu/xonotic/statslist.c:54
+ msgid "January"
+ msgstr "Gennaio"
+ #: qcsrc/menu/xonotic/statslist.c:55
+ msgid "February"
+ msgstr "Febbraio"
+ #: qcsrc/menu/xonotic/statslist.c:56
+ msgid "March"
+ msgstr "Marzo"
+ #: qcsrc/menu/xonotic/statslist.c:57
+ msgid "April"
+ msgstr "Aprile"
+ #: qcsrc/menu/xonotic/statslist.c:58
+ msgid "May"
+ msgstr "Maggio"
+ #: qcsrc/menu/xonotic/statslist.c:59
+ msgid "June"
+ msgstr "Giugno"
+ #: qcsrc/menu/xonotic/statslist.c:60
+ msgid "July"
+ msgstr "Luglio"
+ #: qcsrc/menu/xonotic/statslist.c:61
+ msgid "August"
+ msgstr "Agosto"
+ #: qcsrc/menu/xonotic/statslist.c:62
+ msgid "September"
+ msgstr "Settembre"
+ #: qcsrc/menu/xonotic/statslist.c:63
+ msgid "October"
+ msgstr "Ottobre"
+ #: qcsrc/menu/xonotic/statslist.c:64
+ msgid "November"
+ msgstr "Novembre"
+ #: qcsrc/menu/xonotic/statslist.c:65
+ msgid "December"
+ msgstr "Dicembre"
+ #: qcsrc/menu/xonotic/statslist.c:121
+ msgid "Joined:"
+ msgstr "Partecipa da:"
+ #: qcsrc/menu/xonotic/statslist.c:128
+ msgid "Last_Seen:"
+ msgstr "Ultima_Volta:"
+ #: qcsrc/menu/xonotic/statslist.c:135
+ msgid "Time_Played:"
+ msgstr "Tempo_Giocato:"
+ #: qcsrc/menu/xonotic/statslist.c:142
+ msgid "Favorite_Map:"
+ msgstr "Mappa_Preferita:"
+ #: qcsrc/menu/xonotic/statslist.c:226 qcsrc/menu/xonotic/statslist.c:270
  #, c-format
- msgid "error receiving update notification: status is %d\n"
- msgstr ""
- "errore durante la notifica d'aggiornamento: lo stato è impostato su %d\n"
+ msgid "%s_Matches:"
+ msgstr "%s_Partite:"
  
- #: qcsrc/menu/xonotic/util.qc:303
- msgid "error: received HTML instead of an update notification\n"
- msgstr "errore: ricevuto HTML invece di una notifica d'aggiornamento\n"
+ #: qcsrc/menu/xonotic/statslist.c:233
+ #, c-format
+ msgid "%s_ELO:"
+ msgstr "%s_ELO:"
+ #: qcsrc/menu/xonotic/statslist.c:240
+ #, c-format
+ msgid "%s_Rank:"
+ msgstr "%s_Piazzamento:"
+ #: qcsrc/menu/xonotic/statslist.c:247
+ #, c-format
+ msgid "%s_Percentile:"
+ msgstr "%s_Percentile:"
+ #: qcsrc/menu/xonotic/statslist.c:256
+ #, c-format
+ msgid "%s_Favorite_Map:"
+ msgstr "%s_Mappa_Preferita:"
  
- #: qcsrc/menu/xonotic/util.qc:308
- msgid "error: received carriage returns from update notification server\n"
- msgstr "error: received carriage returns from update notification server\n"
+ #: qcsrc/menu/xonotic/statslist.c:271
+ #, c-format
+ msgid "%d (unranked)"
+ msgstr "%d (non piazzato)"
  
- #: qcsrc/menu/xonotic/util.qc:329
+ #: qcsrc/menu/xonotic/util.qc:398
  #, c-format
  msgid ""
  "Update can be downloaded at:\n"
@@@ -6193,21 -7204,21 +7204,21 @@@ msgstr "
  "L'aggiornamento può essere scaricato da:\n"
  "%s\n"
  
- #: qcsrc/menu/xonotic/util.qc:447
+ #: qcsrc/menu/xonotic/util.qc:498
  msgid "Autogenerating mapinfo for newly added maps..."
  msgstr "Autogenerando le mapinfo per le nuove mappe..."
  
- #: qcsrc/menu/xonotic/util.qc:476
+ #: qcsrc/menu/xonotic/util.qc:527
  #, c-format
  msgid "^1%s TEST BUILD"
  msgstr "^1%s TEST BUILD"
  
- #: qcsrc/menu/xonotic/util.qc:491
+ #: qcsrc/menu/xonotic/util.qc:542
  #, c-format
  msgid "Update to %s now!"
  msgstr "Aggiorna a %s ora!"
  
- #: qcsrc/menu/xonotic/util.qc:576
+ #: qcsrc/menu/xonotic/util.qc:627
  msgid ""
  "^1ERROR: Texture compression is required but not supported.\n"
  "^1Expect visual problems.\n"
@@@ -6215,13 -7226,13 +7226,13 @@@ msgstr "
  "^1ERRORE: La compressione texture è richiesta ma non supportata.\n"
  "^1Previsti problemi visuali.\n"
  
- #: qcsrc/menu/xonotic/util.qc:696
+ #: qcsrc/menu/xonotic/util.qc:731
  msgid "Use default"
  msgstr "Usa predefinito"
  
- #: qcsrc/menu/xonotic/util.qc:716
+ #: qcsrc/menu/xonotic/util.qc:751
  msgid "Team Color:"
- msgstr "Colore Team:"
+ msgstr "Colore squadra:"
  
  #: qcsrc/menu/xonotic/util.qh:43
  msgid "Enable panel"
@@@ -6230,43 -7241,4 +7241,20 @@@ msgstr "Abilita pannello
  #: qcsrc/menu/xonotic/weaponslist.c:102
  #, c-format
  msgid "%s (mutator weapon)"
- msgstr "%s (mutatore arma)"
- #: qcsrc/server/w_hlac.qc:11
- msgid "Heavy Laser Assault Cannon"
- msgstr "Heavy Laser Assault Cannon"
- #: qcsrc/server/w_hook.qc:11
- msgid "Grappling Hook"
- msgstr "Grappling Hook"
- #: qcsrc/server/w_minstanex.qc:11
- msgid "MinstaNex"
- msgstr "MinstaNex"
- #: qcsrc/server/w_seeker.qc:11
- msgid "T.A.G. Seeker"
- msgstr "T.A.G. Seeker"
- #: qcsrc/server/w_tuba.qc:12
- #, no-c-format
- msgid "@!#%'n Tuba"
- msgstr "@!#%'n Tuba"
+ msgstr "%s (arma mutatore)"
 +
 +
 +#: command title is translated
 +msgid "QMCMD^nice one"
 +msgstr "bella"
 +
 +#: missing translation for this command
 +msgid "QMCMD^:-) / nice one"
 +msgstr ""
 +
 +#: fully translated command (title and command are the same)
 +msgid "QMCMD^good game"
 +msgstr "bella partita"
 +
 +msgid "QMCMD^Chat"
- msgstr "Parla"
++msgstr "Parla"
diff --combined hud_luminos.cfg
index 81d3ce929b0a6616d0ff68936e7f519bbba664c9,f3bc914e6a48be696bd9e3b8879eb90d9ab0254f..837d534e6cb04adb0be371c37dfcc1e0ef67524e
@@@ -24,7 -24,7 +24,7 @@@ seta hud_progressbar_speed_color "1 0.7
  seta hud_progressbar_acceleration_color "0.5 0.75 1"
  seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
  
 -seta _hud_panelorder "15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 16 "
 +seta _hud_panelorder "15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 16 17 "
  
  seta hud_configure_grid "1"
  seta hud_configure_grid_xsize "0.010000"
@@@ -126,6 -126,7 +126,7 @@@ seta hud_panel_notify_flip "0
  seta hud_panel_notify_fontsize "0.8"
  seta hud_panel_notify_time "10"
  seta hud_panel_notify_fadetime "3"
+ seta hud_panel_notify_icon_aspect "2"
  
  seta hud_panel_timer 1
  seta hud_panel_timer_pos "0.800000 0.040000"
@@@ -295,15 -296,14 +296,25 @@@ seta hud_panel_centerprint_fade_subsequ
  seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
  seta hud_panel_centerprint_fade_minfontsize "0"
  
+ seta hud_panel_buffs 1
+ seta hud_panel_buffs_pos "0.450000 0.855000"
+ seta hud_panel_buffs_size "0.050000 0.070000"
+ seta hud_panel_buffs_bg "0"
+ seta hud_panel_buffs_bg_color ""
+ seta hud_panel_buffs_bg_color_team ""
+ seta hud_panel_buffs_bg_alpha ""
+ seta hud_panel_buffs_bg_border ""
+ seta hud_panel_buffs_bg_padding ""
 +seta hud_panel_quickmenu 1
 +seta hud_panel_quickmenu_pos "0.010000 0.410000"
 +seta hud_panel_quickmenu_size "0.210000 0.250000"
 +seta hud_panel_quickmenu_bg ""
 +seta hud_panel_quickmenu_bg_color ""
 +seta hud_panel_quickmenu_bg_color_team ""
 +seta hud_panel_quickmenu_bg_alpha ""
 +seta hud_panel_quickmenu_bg_border ""
 +seta hud_panel_quickmenu_bg_padding ""
 +seta hud_panel_quickmenu_align "0"
 +
  menu_sync
diff --combined hud_luminos_minimal.cfg
index ddad55747ca219dacb7518f9d252149c79308dfb,050689b38caf95d525f07e83f378649fc49dafff..d57e50ddcf61bd291f5a6ab1985f7e44077c1c9f
@@@ -24,7 -24,7 +24,7 @@@ seta hud_progressbar_speed_color "1 0.7
  seta hud_progressbar_acceleration_color "0.5 0.75 1"
  seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
  
 -seta _hud_panelorder "10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 16 "
 +seta _hud_panelorder "10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 16 17 "
  
  seta hud_configure_grid "1"
  seta hud_configure_grid_xsize "0.010000"
@@@ -126,6 -126,7 +126,7 @@@ seta hud_panel_notify_flip "1
  seta hud_panel_notify_fontsize "0.8"
  seta hud_panel_notify_time "10"
  seta hud_panel_notify_fadetime "3"
+ seta hud_panel_notify_icon_aspect "2"
  
  seta hud_panel_timer 1
  seta hud_panel_timer_pos "0.435000 0"
@@@ -295,15 -296,14 +296,25 @@@ seta hud_panel_centerprint_fade_subsequ
  seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
  seta hud_panel_centerprint_fade_minfontsize "0"
  
+ seta hud_panel_buffs 1
+ seta hud_panel_buffs_pos "0.450000 0.855000"
+ seta hud_panel_buffs_size "0.050000 0.070000"
+ seta hud_panel_buffs_bg "0"
+ seta hud_panel_buffs_bg_color ""
+ seta hud_panel_buffs_bg_color_team ""
+ seta hud_panel_buffs_bg_alpha ""
+ seta hud_panel_buffs_bg_border ""
+ seta hud_panel_buffs_bg_padding ""
 +seta hud_panel_quickmenu 1
 +seta hud_panel_quickmenu_pos "0.010000 0.410000"
 +seta hud_panel_quickmenu_size "0.210000 0.250000"
 +seta hud_panel_quickmenu_bg ""
 +seta hud_panel_quickmenu_bg_color ""
 +seta hud_panel_quickmenu_bg_color_team ""
 +seta hud_panel_quickmenu_bg_alpha ""
 +seta hud_panel_quickmenu_bg_border ""
 +seta hud_panel_quickmenu_bg_padding ""
 +seta hud_panel_quickmenu_align "0"
 +
  menu_sync
index 758f18c71bf78a1349671df9005c7346f405222d,8fb6cbe93da88fd67f099c634126551449435fdf..d0d506c352b0dedb6aa01f9d10fad1b91d558665
@@@ -24,7 -24,7 +24,7 @@@ seta hud_progressbar_speed_color "1 0.7
  seta hud_progressbar_acceleration_color "0.5 0.75 1"
  seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
  
 -seta _hud_panelorder "15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 16 "
 +seta _hud_panelorder "15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 16 17 "
  
  seta hud_configure_grid "1"
  seta hud_configure_grid_xsize "0.010000"
@@@ -126,6 -126,7 +126,7 @@@ seta hud_panel_notify_flip "1
  seta hud_panel_notify_fontsize "0.8"
  seta hud_panel_notify_time "10"
  seta hud_panel_notify_fadetime "3"
+ seta hud_panel_notify_icon_aspect "2"
  
  seta hud_panel_timer 1
  seta hud_panel_timer_pos "0.435000 0"
@@@ -295,15 -296,14 +296,25 @@@ seta hud_panel_centerprint_fade_subsequ
  seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
  seta hud_panel_centerprint_fade_minfontsize "0"
  
+ seta hud_panel_buffs 1
+ seta hud_panel_buffs_pos "0.450000 0.855000"
+ seta hud_panel_buffs_size "0.050000 0.070000"
+ seta hud_panel_buffs_bg "0"
+ seta hud_panel_buffs_bg_color ""
+ seta hud_panel_buffs_bg_color_team ""
+ seta hud_panel_buffs_bg_alpha ""
+ seta hud_panel_buffs_bg_border ""
+ seta hud_panel_buffs_bg_padding ""
 +seta hud_panel_quickmenu 1
 +seta hud_panel_quickmenu_pos "0.010000 0.410000"
 +seta hud_panel_quickmenu_size "0.210000 0.250000"
 +seta hud_panel_quickmenu_bg ""
 +seta hud_panel_quickmenu_bg_color ""
 +seta hud_panel_quickmenu_bg_color_team ""
 +seta hud_panel_quickmenu_bg_alpha ""
 +seta hud_panel_quickmenu_bg_border ""
 +seta hud_panel_quickmenu_bg_padding ""
 +seta hud_panel_quickmenu_align "0"
 +
  menu_sync
diff --combined hud_luminos_old.cfg
index cf0115a96cc77e10d2bce7cadfc86c7099f103a0,9d71e2e2872cc4f4d6e0624a2d2b5e74064fa5cf..ed1a11e2f40ceea6a336194fd80276622f000475
@@@ -24,7 -24,7 +24,7 @@@ seta hud_progressbar_speed_color "1 0.7
  seta hud_progressbar_acceleration_color "0.5 0.75 1"
  seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
  
 -seta _hud_panelorder "15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 16 "
 +seta _hud_panelorder "15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 16 17 "
  
  seta hud_configure_grid "1"
  seta hud_configure_grid_xsize "0.010000"
@@@ -126,6 -126,7 +126,7 @@@ seta hud_panel_notify_flip "0
  seta hud_panel_notify_fontsize "0.8"
  seta hud_panel_notify_time "10"
  seta hud_panel_notify_fadetime "3"
+ seta hud_panel_notify_icon_aspect "2"
  
  seta hud_panel_timer 1
  seta hud_panel_timer_pos "0.870000 0"
@@@ -295,15 -296,14 +296,25 @@@ seta hud_panel_centerprint_fade_subsequ
  seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
  seta hud_panel_centerprint_fade_minfontsize "0"
  
+ seta hud_panel_buffs 1
+ seta hud_panel_buffs_pos "0.450000 0.855000"
+ seta hud_panel_buffs_size "0.050000 0.070000"
+ seta hud_panel_buffs_bg "0"
+ seta hud_panel_buffs_bg_color ""
+ seta hud_panel_buffs_bg_color_team ""
+ seta hud_panel_buffs_bg_alpha ""
+ seta hud_panel_buffs_bg_border ""
+ seta hud_panel_buffs_bg_padding ""
 +seta hud_panel_quickmenu 1
 +seta hud_panel_quickmenu_pos "0.700000 0.460000"
 +seta hud_panel_quickmenu_size "0.210000 0.250000"
 +seta hud_panel_quickmenu_bg ""
 +seta hud_panel_quickmenu_bg_color ""
 +seta hud_panel_quickmenu_bg_color_team ""
 +seta hud_panel_quickmenu_bg_alpha ""
 +seta hud_panel_quickmenu_bg_border ""
 +seta hud_panel_quickmenu_bg_padding ""
 +seta hud_panel_quickmenu_align "1"
 +
  menu_sync
diff --combined hud_nexuiz.cfg
index ac1fd12fb9180d06e4f07ee13ecc9e8de08d218f,9e4678293d627419612564b5d12d91a4365d56fc..9d9c94ea7724fa0f95967264dbe8ba01dc93ddae
@@@ -24,7 -24,7 +24,7 @@@ seta hud_progressbar_speed_color "1 0.7
  seta hud_progressbar_acceleration_color "0.5 0.75 1"
  seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
  
 -seta _hud_panelorder "15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 16 "
 +seta _hud_panelorder "15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 16 17 "
  
  seta hud_configure_grid "1"
  seta hud_configure_grid_xsize "0.01"
@@@ -126,6 -126,7 +126,7 @@@ seta hud_panel_notify_flip "0
  seta hud_panel_notify_fontsize "1"
  seta hud_panel_notify_time "10"
  seta hud_panel_notify_fadetime "3"
+ seta hud_panel_notify_icon_aspect "2"
  
  seta hud_panel_timer 1
  seta hud_panel_timer_pos "0.850000 0"
@@@ -295,15 -296,14 +296,25 @@@ seta hud_panel_centerprint_fade_subsequ
  seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
  seta hud_panel_centerprint_fade_minfontsize "0"
  
+ seta hud_panel_buffs 1
+ seta hud_panel_buffs_pos "0.450000 0.855000"
+ seta hud_panel_buffs_size "0.050000 0.070000"
+ seta hud_panel_buffs_bg "0"
+ seta hud_panel_buffs_bg_color ""
+ seta hud_panel_buffs_bg_color_team ""
+ seta hud_panel_buffs_bg_alpha ""
+ seta hud_panel_buffs_bg_border ""
+ seta hud_panel_buffs_bg_padding ""
 +seta hud_panel_quickmenu 1
 +seta hud_panel_quickmenu_pos "0.010000 0.380000"
 +seta hud_panel_quickmenu_size "0.210000 0.250000"
 +seta hud_panel_quickmenu_bg ""
 +seta hud_panel_quickmenu_bg_color ""
 +seta hud_panel_quickmenu_bg_color_team ""
 +seta hud_panel_quickmenu_bg_alpha ""
 +seta hud_panel_quickmenu_bg_border ""
 +seta hud_panel_quickmenu_bg_padding ""
 +seta hud_panel_quickmenu_align "0"
 +
  menu_sync
diff --combined keybinds.txt
index 6bec67ce51c48d496c7c6b03bdf7fe7b8b33aca1,189d02eb4ddf0135ab0ed9ededd38db602495949..cda287ebe2d3ef23f3d68bd89ee283000a34346d
@@@ -5,7 -5,8 +5,8 @@@
  "+moveright"                            "strafe right"
  "+jump"                                 "jump / swim"
  "+crouch"                               "crouch / sink"
- "+hook"                                 "off-hand hook / jet pack"
+ "+hook"                                 "off-hand hook"
+ "+jetpack"                              "jet pack"
  ""                                      ""
  ""                                      "Attacking"
  "+fire"                                 "primary fire"
  "weaplast"                              "previously used"
  "weapbest"                              "best"
  "reload"                                "reload"
- "weapon_group_1"                        "Laser"
+ "weapon_group_1"                        "Blaster"
  "weapon_group_2"                        "Shotgun"
- "weapon_group_3"                        "Machine Gun"
+ "weapon_group_3"                        "Machine Gun / Arc"
  "weapon_group_4"                        "Mortar / Mine Layer"
  "weapon_group_5"                        "Electro"
  "weapon_group_6"                        "Crylink / HLAC"
- "weapon_group_7"                        "Nex / Rifle"
+ "weapon_group_7"                        "Vortex / Rifle"
  "weapon_group_8"                        "Hagar / Seeker"
- "weapon_group_9"                        "Rocket Launcher / Fireball"
+ "weapon_group_9"                        "Devastator / Fireball"
  "weapon_group_0"                        "Port-O-Launch / Hook"
  ""                                      ""
  ""                                      "View"
@@@ -44,7 -45,6 +45,7 @@@
  "ready"                                 "ready"
  ""                                      ""
  ""                                      "Client"
 +"quickmenu"                             "quick menu"
  "+show_info"                            "server info"
  "toggleconsole"                         "enter console"
  "disconnect"                            "disconnect"
@@@ -59,6 -59,7 +60,7 @@@
  "dropweapon"                            "drop weapon"
  "+use"                                  "drop key / drop flag"
  "+button8"                              "drag object"
+ "toggle chase_active"                   "3rd person view"
  ""                                      ""
  ""                                      "User defined"
  "+userbind 1"                           "$userbind1"
diff --combined qcsrc/client/Main.qc
index d1b49b739280ee8699a689c23d9cff3112c83286,d6b00ec9f55182fdee763ce20adb3a7a0639d275..764c0336ccaff30bfe2e5e77ea2bb703e8fae1c0
@@@ -28,41 -28,19 +28,19 @@@ void menu_sub_null(
  {
  }
  
- #ifdef USE_FTE
- float __engine_check;
- #endif
  string forcefog;
  void WaypointSprite_Load();
  void ConsoleCommand_macro_init();
  void CSQC_Init(void)
  {
 -      prvm_language = cvar_string("prvm_language");
 +      prvm_language = strzone(cvar_string("prvm_language"));
- #ifdef USE_FTE
- #pragma target ID
-       __engine_check = checkextension("DP_SV_WRITEPICTURE");
-       if(!__engine_check)
-       {
-               print(_("^3Your engine build is outdated\n^3This Server uses a newer QC VM. Please update!\n"));
-               localcmd("\ndisconnect\n");
-               return;
-       }
- #pragma target FTE
- #endif
-       check_unacceptable_compiler_bugs();
  
  #ifdef WATERMARK
-       printf(_("^4CSQC Build information: ^1%s\n"), WATERMARK);
+       dprintf("^4CSQC Build information: ^1%s\n", WATERMARK);
  #endif
  
        float i;
  
- #ifdef COMPAT_XON050_ENGINE
-       // old engine lacks implementation of player_localnum
-       player_localnum = player_localentnum - 1;
- #endif
        binddb = db_create();
        tempdb = db_create();
        ClientProgsDB = db_load("client.db");
        registercvar("hud_usecsqc", "1");
        registercvar("scoreboard_columns", "default");
  
+       registercvar("cl_nade_type", "3");
+       registercvar("cl_pokenade_type", "zombie");
        gametype = 0;
  
        // hud_fields uses strunzone on the titles!
        for(i = 0; i < MAX_HUD_FIELDS; ++i)
                hud_title[i] = strzone("(null)");
  
+       Cmd_HUD_SetFields(0);
        postinit = false;
  
        calledhooks = 0;
        CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
        CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
        CALL_ACCUMULATED_FUNCTION(RegisterHUD_Panels);
+       CALL_ACCUMULATED_FUNCTION(RegisterBuffs);
  
        WaypointSprite_Load();
  
        Hook_Precache();
        GibSplash_Precache();
        Casings_Precache();
-       DamageInfo_Precache();
        Vehicles_Precache();
        turrets_precache();
        Tuba_Precache();
  
        if(autocvar_cl_reticle)
        {
-               if(autocvar_cl_reticle_item_normal) { precache_pic("gfx/reticle_normal"); }
-               if(autocvar_cl_reticle_item_nex) { precache_pic("gfx/reticle_nex"); }
+               precache_pic("gfx/reticle_normal");
+               // weapon reticles are precached in weapon files
        }
  
        get_mi_min_max_texcoords(1); // try the CLEVER way first
  // CSQC_Shutdown : Called every time the CSQC code is shutdown (changing maps, quitting, etc)
  void Shutdown(void)
  {
- #ifdef USE_FTE
- #pragma TARGET id
-       if(!__engine_check)
-               return 0;
- #pragma TARGET fte
- #endif
        WarpZone_Shutdown();
  
        remove(teams);
@@@ -214,7 -190,7 +190,7 @@@ float SetTeam(entity o, float Team
                        default:
                                if(GetTeam(Team, false) == world)
                                {
-                                       printf(_("trying to switch to unsupported team %d\n"), Team);
+                                       dprintf("trying to switch to unsupported team %d\n", Team);
                                        Team = NUM_SPECTATOR;
                                }
                                break;
                        default:
                                if(GetTeam(Team, false) == world)
                                {
-                                       printf(_("trying to switch to unsupported team %d\n"), Team);
+                                       dprintf("trying to switch to unsupported team %d\n", Team);
                                        Team = NUM_SPECTATOR;
                                }
                                break;
@@@ -312,8 -288,6 +288,6 @@@ void Porto_Init()
  void TrueAim_Init();
  void PostInit(void)
  {
-       localcmd(strcat("\nscoreboard_columns_set ", autocvar_scoreboard_columns, ";\n"));
        entity playerchecker;
        playerchecker = spawn();
        playerchecker.think = Playerchecker_Think;
@@@ -342,9 -316,6 +316,9 @@@ float CSQC_InputEvent(float bInputType
        if (HUD_Panel_InputEvent(bInputType, nPrimary, nSecondary))
                return true;
  
 +      if (HUD_QuickMenu_InputEvent(bInputType, nPrimary, nSecondary))
 +              return true;
 +
        if (MapVote_InputEvent(bInputType, nPrimary, nSecondary))
                return true;
  
@@@ -547,7 -518,7 +521,7 @@@ void Ent_ClientData(
        }
        spectatee_status = newspectatee_status;
  
-       // non-COMPAT_XON050_ENGINE: we could get rid of spectatee_status, and derive it from player_localentnum and player_localnum
+       // we could get rid of spectatee_status, and derive it from player_localentnum and player_localnum
  }
  
  void Ent_Nagger()
        warmup_stage = (nags & 16);
  }
  
+ void Ent_EliminatedPlayers()
+ {
+       float sf, i, j, b, f;
+       sf = ReadByte();
+       if(sf & 1)
+       {
+               for(j = 0; j < maxclients; ++j)
+                       if(playerslots[j])
+                               playerslots[j].eliminated = 1;
+               for(i = 1; i <= maxclients; i += 8)
+               {
+                       f = ReadByte();
+                       for(j = i-1, b = 1; b < 256; b *= 2, ++j)
+                               if (!(f & b))
+                                       if(playerslots[j])
+                                               playerslots[j].eliminated = 0;
+               }
+       }
+ }
  void Ent_RandomSeed()
  {
        float s;
@@@ -803,6 -795,7 +798,7 @@@ void CSQC_Ent_Update(float bIsNewEntity
                case ENT_CLIENT_RAINSNOW: Ent_RainOrSnow(); break;
                case ENT_CLIENT_LASER: Ent_Laser(); break;
                case ENT_CLIENT_NAGGER: Ent_Nagger(); break;
+               case ENT_CLIENT_ELIMINATEDPLAYERS: Ent_EliminatedPlayers(); break;
                case ENT_CLIENT_WAYPOINT: Ent_WaypointSprite(); break;
                case ENT_CLIENT_RADARLINK: Ent_RadarLink(); break;
                case ENT_CLIENT_PROJECTILE: Ent_Projectile(); break;
                case ENT_CLIENT_WARPZONE_TELEPORTED: WarpZone_Teleported_Read(bIsNewEntity); break;
                case ENT_CLIENT_TRIGGER_MUSIC: Ent_ReadTriggerMusic(); break;
                case ENT_CLIENT_HOOK: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_HOOK); break;
-               case ENT_CLIENT_LGBEAM: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_LGBEAM); break;
-               case ENT_CLIENT_GAUNTLET: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_GAUNTLET); break;
+               case ENT_CLIENT_ARC_BEAM: Ent_ReadArcBeam(bIsNewEntity); break;
                case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break;
                case ENT_CLIENT_AUXILIARYXHAIR: Net_AuXair2(bIsNewEntity); break;
                case ENT_CLIENT_TURRET: ent_turret(); break;
                case ENT_CLIENT_SPAWNPOINT: Ent_ReadSpawnPoint(bIsNewEntity); break;
                case ENT_CLIENT_SPAWNEVENT: Ent_ReadSpawnEvent(bIsNewEntity); break;
                case ENT_CLIENT_NOTIFICATION: Read_Notification(bIsNewEntity); break;
+               case ENT_CLIENT_HEALING_ORB: ent_healer(); break;
  
                default:
                        //error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype));
-                       error(sprintf(_("Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %s)\n"), self.enttype, num_for_edict(self), self.classname));
+                       error(sprintf("Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %s)\n", self.enttype, num_for_edict(self), self.classname));
                        break;
        }
  
@@@ -937,13 -930,18 +933,18 @@@ void Ent_ScoresInfo(
        float i;
        self.classname = "ent_client_scores_info";
        gametype = ReadInt24_t();
+       HUD_ModIcons_SetFunc();
        for(i = 0; i < MAX_SCORE; ++i)
        {
+               if(scores_label[i])
+                       strunzone(scores_label[i]);
                scores_label[i] = strzone(ReadString());
                scores_flags[i] = ReadByte();
        }
        for(i = 0; i < MAX_TEAMSCORE; ++i)
        {
+               if(teamscores_label[i])
+                       strunzone(teamscores_label[i]);
                teamscores_label[i] = strzone(ReadString());
                teamscores_flags[i] = ReadByte();
        }
@@@ -961,14 -959,10 +962,10 @@@ void Ent_Init(
        hook_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
        hook_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
        hook_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
-       electro_shotorigin[0] = decompressShotOrigin(ReadInt24_t());
-       electro_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
-       electro_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
-       electro_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
-       gauntlet_shotorigin[0] = decompressShotOrigin(ReadInt24_t());
-       gauntlet_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
-       gauntlet_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
-       gauntlet_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
+       arc_shotorigin[0] = decompressShotOrigin(ReadInt24_t());
+       arc_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
+       arc_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
+       arc_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
  
        if(forcefog)
                strunzone(forcefog);
  
        armorblockpercent = ReadByte() / 255.0;
  
-       g_balance_grenadelauncher_bouncefactor = ReadCoord();
-       g_balance_grenadelauncher_bouncestop = ReadCoord();
+       g_balance_mortar_bouncefactor = ReadCoord();
+       g_balance_mortar_bouncestop = ReadCoord();
        g_balance_electro_secondary_bouncefactor = ReadCoord();
        g_balance_electro_secondary_bouncestop = ReadCoord();
  
-       nex_scope = !ReadByte();
+       vortex_scope = !ReadByte();
        rifle_scope = !ReadByte();
  
        serverflags = ReadByte();
@@@ -1178,7 -1172,7 +1175,7 @@@ void Net_WeaponComplain(
  
        if(complain_weapon_name)
                strunzone(complain_weapon_name);
-       complain_weapon_name = strzone(ReadString());
+       complain_weapon_name = strzone(WEP_NAME(complain_weapon));
  
        complain_weapon_type = ReadByte();
  
@@@ -1222,16 -1216,16 +1219,16 @@@ float CSQC_Parse_TempEntity(
                        Net_ReadRace();
                        bHandled = true;
                        break;
-               case TE_CSQC_NEXGUNBEAMPARTICLE:
-                       Net_ReadNexgunBeamParticle();
+               case TE_CSQC_VORTEXBEAMPARTICLE:
+                       Net_ReadVortexBeamParticle();
                        bHandled = true;
                        break;
                case TE_CSQC_TEAMNAGGER:
                        Net_TeamNagger();
                        bHandled = true;
                        break;
-               case TE_CSQC_LIGHTNINGARC:
-                       Net_ReadLightningarc();
+               case TE_CSQC_ARC:
+                       Net_ReadArc();
                        bHandled = true;
                        break;
                case TE_CSQC_PINGPLREPORT:
                        cl_notice_read();
                        bHandled = true;
                        break;
+               case TE_CSQC_SHOCKWAVEPARTICLE:
+                       Net_ReadShockwaveParticle();
+                       bHandled = true;
+                       break;
                default:
                        // No special logic for this temporary entity; return 0 so the engine can handle it
                        bHandled = false;
@@@ -1299,7 -1297,7 +1300,7 @@@ string getcommandkey(string text, strin
                        return text;
        }
        else if (autocvar_hud_showbinds > 1)
-               return sprintf(_("%s (%s)"), text, keys);
+               return sprintf("%s (%s)", text, keys);
        else
                return keys;
  }
diff --combined qcsrc/client/View.qc
index 82454e5a88e7cc7dd4e423485fa763d9023ef1b4,8a725774e144fae6b64122a34330100013073d17..fbf776f7d612ba9a646d3c4fffc9afadadfebadc
@@@ -104,7 -104,7 +104,7 @@@ vector GetCurrentFov(float fov
  
        zoomdir = button_zoom;
        if(hud == HUD_NORMAL)
-       if((activeweapon == WEP_NEX && nex_scope) || (activeweapon == WEP_RIFLE && rifle_scope)) // do NOT use switchweapon here
+       if((activeweapon == WEP_VORTEX && vortex_scope) || (activeweapon == WEP_RIFLE && rifle_scope)) // do NOT use switchweapon here
                zoomdir += button_attack2;
        if(spectatee_status > 0 || isdemo())
        {
        else
                setsensitivityscale(1);
  
-       makevectors(view_angles);
-       if(autocvar_cl_velocityzoom && autocvar_cl_velocityzoom_type) // _type = 0 disables velocity zoom too
+       if(autocvar_cl_velocityzoom_enabled && autocvar_cl_velocityzoom_type) // _type = 0 disables velocity zoom too
        {
                if(intermission) { curspeed = 0; }
                else
                {
+                       makevectors(view_angles);
                        v = pmove_vel;
                        if(csqcplayer)
                                v = csqcplayer.velocity;
  
                velocityzoom = bound(0, drawframetime / max(0.000000001, autocvar_cl_velocityzoom_time), 1); // speed at which the zoom adapts to player velocity
                avgspeed = avgspeed * (1 - velocityzoom) + (curspeed / autocvar_cl_velocityzoom_speed) * velocityzoom;
-               velocityzoom = exp(float2range11(avgspeed * -autocvar_cl_velocityzoom / 1) * 1);
+               velocityzoom = exp(float2range11(avgspeed * -autocvar_cl_velocityzoom_factor / 1) * 1);
  
                //print(ftos(avgspeed), " avgspeed, ", ftos(curspeed), " curspeed, ", ftos(velocityzoom), " return\n"); // for debugging
        }
@@@ -269,7 -269,7 +269,7 @@@ float EnemyHitCheck(
  
  float TrueAimCheck()
  {
-       float nudge = 1; // added to traceline target and subtracted from result
+       float nudge = 1; // added to traceline target and subtracted from result TOOD(divVerent): do we still need this? Doesn't the engine do this now for us?
        vector vecs, trueaimpoint, w_shotorg;
        vector mi, ma, dv;
        float shottype;
        ta = trueaim;
        mv = MOVE_NOMONSTERS;
  
-       switch(activeweapon)
+       switch(activeweapon) // WEAPONTODO
        {
                case WEP_TUBA: // no aim
                case WEP_PORTO: // shoots from eye
                case WEP_HOOK: // no trueaim
-               case WEP_GRENADE_LAUNCHER: // toss curve
+               case WEP_MORTAR: // toss curve
                        return SHOTTYPE_HITWORLD;
-               case WEP_NEX:
-               case WEP_MINSTANEX:
+               case WEP_VORTEX:
+               case WEP_VAPORIZER:
                        mv = MOVE_NORMAL;
                        break;
                case WEP_RIFLE:
                                return EnemyHitCheck();
                        }
                        break;
-               case WEP_ROCKET_LAUNCHER: // projectile has a size!
+               case WEP_DEVASTATOR: // projectile has a size!
                        mi = '-3 -3 -3';
                        ma = '3 3 3';
                        break;
@@@ -365,6 -365,7 +365,7 @@@ float camera_mode
  const float CAMERA_FREE = 1;
  const float CAMERA_CHASE = 2;
  float reticle_type;
+ string reticle_image;
  string NextFrameCommand;
  void CSQC_SPIDER_HUD();
  void CSQC_RAPTOR_HUD();
@@@ -374,10 -375,8 +375,8 @@@ entity nightvision_noise, nightvision_n
  
  #define MAX_TIME_DIFF 5
  float pickup_crosshair_time, pickup_crosshair_size;
- float hit_time, typehit_time;
- float nextsound_hit_time, nextsound_typehit_time;
- float hitindication_crosshair_time, hitindication_crosshair_size;
- float use_nex_chargepool;
+ float hitindication_crosshair_size;
+ float use_vortex_chargepool;
  
  float myhealth, myhealth_prev;
  float myhealth_flash;
@@@ -391,13 -390,578 +390,578 @@@ float contentavgalpha, liquidalpha_prev
  vector liquidcolor_prev;
  
  float eventchase_current_distance;
+ float eventchase_running;
+ float WantEventchase()
+ {
+       if(autocvar_cl_orthoview)
+               return FALSE;
+       if(intermission)
+               return TRUE;
+       if(spectatee_status >= 0)
+       {
+               if(autocvar_cl_eventchase_nexball && gametype == MAPINFO_TYPE_NEXBALL && !(WepSet_GetFromStat() & WepSet_FromWeapon(WEP_PORTO)))
+                       return TRUE;
+               if(autocvar_cl_eventchase_death && (getstati(STAT_HEALTH) <= 0))
+               {
+                       if(autocvar_cl_eventchase_death == 2)
+                       {
+                               // don't stop eventchase once it's started (even if velocity changes afterwards)
+                               if(self.velocity == '0 0 0' || eventchase_running)
+                                       return TRUE;
+                       }
+                       else return TRUE;
+               }
+       }
+       return FALSE;
+ }
  
  vector damage_blurpostprocess, content_blurpostprocess;
  
  float checkfail[16];
  
- float rainbow_last_flicker;
- vector rainbow_prev_color;
+ float unaccounted_damage = 0;
+ void UpdateDamage()
+ {
+       // accumulate damage with each stat update
+       static float damage_total_prev = 0;
+       float damage_total = getstati(STAT_DAMAGE_DEALT_TOTAL);
+       float unaccounted_damage_new = COMPARE_INCREASING(damage_total, damage_total_prev);
+       damage_total_prev = damage_total;
+       static float damage_dealt_time_prev = 0;
+       float damage_dealt_time = getstatf(STAT_HIT_TIME);
+       if (damage_dealt_time != damage_dealt_time_prev)
+       {
+               unaccounted_damage += unaccounted_damage_new;
+               dprint("dmg total: ", ftos(unaccounted_damage), " (+", ftos(unaccounted_damage_new), ")", "\n");
+       }
+       damage_dealt_time_prev = damage_dealt_time;
+       // prevent hitsound when switching spectatee
+       static float spectatee_status_prev = 0;
+       if (spectatee_status != spectatee_status_prev)
+               unaccounted_damage = 0;
+       spectatee_status_prev = spectatee_status;
+ }
+ void UpdateHitsound()
+ {
+       // varying sound pitch
+       static float hitsound_time_prev = 0;
+       // HACK: the only way to get the arc to sound consistent with pitch shift is to ignore cl_hitsound_antispam_time
+       float arc_hack = activeweapon == WEP_ARC && autocvar_cl_hitsound >= 2;
+       if (arc_hack || COMPARE_INCREASING(time, hitsound_time_prev) > autocvar_cl_hitsound_antispam_time)
+       {
+               if (autocvar_cl_hitsound && unaccounted_damage)
+               {
+                       // customizable gradient function that crosses (0,a), (c,1) and asymptotically approaches b
+                       float a = autocvar_cl_hitsound_max_pitch;
+                       float b = autocvar_cl_hitsound_min_pitch;
+                       float c = autocvar_cl_hitsound_nom_damage;
+                       float x = unaccounted_damage;
+                       float pitch_shift = (b*x*(a-1) + a*c*(1-b)) / (x*(a-1) + c*(1-b));
+                       // if sound variation is disabled, set pitch_shift to 1
+                       if (autocvar_cl_hitsound == 1)
+                               pitch_shift = 1;
+                       // if pitch shift is reversed, mirror in (max-min)/2 + min
+                       if (autocvar_cl_hitsound == 3)
+                       {
+                               float mirror_value = (a-b)/2 + b;
+                               pitch_shift = mirror_value + (mirror_value - pitch_shift);
+                       }
+                       dprint("dmg total (dmg): ", ftos(unaccounted_damage), " , pitch shift: ", ftos(pitch_shift), "\n");
+                       // todo: avoid very long and very short sounds from wave stretching using different sound files? seems unnecessary
+                       // todo: normalize sound pressure levels? seems unnecessary
+                       sound7(world, CH_INFO, "misc/hit.wav", VOL_BASE, ATTN_NONE, pitch_shift * 100, 0);
+               }
+               unaccounted_damage = 0;
+               hitsound_time_prev = time;
+       }
+       static float typehit_time_prev = 0;
+       float typehit_time = getstatf(STAT_TYPEHIT_TIME);
+       if (COMPARE_INCREASING(typehit_time, typehit_time_prev) > autocvar_cl_hitsound_antispam_time)
+       {
+               sound(world, CH_INFO, "misc/typehit.wav", VOL_BASE, ATTN_NONE);
+               typehit_time_prev = typehit_time;
+       }
+ }
+ void UpdateCrosshair()
+ {
+       static float rainbow_last_flicker;
+     static vector rainbow_prev_color;
+       entity e = self;
+       float f, i, j;
+       vector v;
+       if(getstati(STAT_FROZEN))
+               drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, ((getstatf(STAT_REVIVE_PROGRESS)) ? ('0.25 0.90 1' + ('1 0 0' * getstatf(STAT_REVIVE_PROGRESS)) + ('0 1 1' * getstatf(STAT_REVIVE_PROGRESS) * -1)) : '0.25 0.90 1'), autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
+       else if (getstatf(STAT_HEALING_ORB)>time)
+               drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, Nade_Color(NADE_TYPE_HEAL), autocvar_hud_colorflash_alpha*getstatf(STAT_HEALING_ORB_ALPHA), DRAWFLAG_ADDITIVE);
+       if(!intermission)
+       if(getstatf(STAT_NADE_TIMER) && autocvar_cl_nade_timer) // give nade top priority, as it's a matter of life and death
+       {
+               DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", getstatf(STAT_NADE_TIMER), '0.25 0.90 1' + ('1 0 0' * getstatf(STAT_NADE_TIMER)) - ('0 1 1' * getstatf(STAT_NADE_TIMER)), autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
+               drawstring_aspect(eY * 0.64 * vid_conheight, ((autocvar_cl_nade_timer == 2) ? _("Nade timer") : ""), eX * vid_conwidth + eY * 0.025 * vid_conheight, '1 1 1', 1, DRAWFLAG_NORMAL);
+       }
+       else if(getstatf(STAT_REVIVE_PROGRESS))
+       {
+               DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", getstatf(STAT_REVIVE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
+               drawstring_aspect(eY * 0.64 * vid_conheight, _("Revival progress"), eX * vid_conwidth + eY * 0.025 * vid_conheight, '1 1 1', 1, DRAWFLAG_NORMAL);
+       }
+       if(autocvar_r_letterbox == 0)
+               if(autocvar_viewsize < 120)
+                       CSQC_common_hud();
+       // crosshair goes VERY LAST
+       if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1 && hud == HUD_NORMAL)
+       {
+               if (!autocvar_crosshair_enabled) // main toggle for crosshair rendering
+                       return;
+               string wcross_style;
+               float wcross_alpha, wcross_resolution;
+               wcross_style = autocvar_crosshair;
+               if (wcross_style == "0")
+                       return;
+               wcross_resolution = autocvar_crosshair_size;
+               if (wcross_resolution == 0)
+                       return;
+               wcross_alpha = autocvar_crosshair_alpha;
+               if (wcross_alpha == 0)
+                       return;
+               // TrueAim check
+               float shottype;
+               // wcross_origin = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight;
+               wcross_origin = project_3d_to_2d(view_origin + MAX_SHOT_DISTANCE * view_forward);
+               wcross_origin_z = 0;
+               if(autocvar_crosshair_hittest)
+               {
+                       vector wcross_oldorigin;
+                       wcross_oldorigin = wcross_origin;
+                       shottype = TrueAimCheck();
+                       if(shottype == SHOTTYPE_HITWORLD)
+                       {
+                               v = wcross_origin - wcross_oldorigin;
+                               v_x /= vid_conwidth;
+                               v_y /= vid_conheight;
+                               if(vlen(v) > 0.01)
+                                       shottype = SHOTTYPE_HITOBSTRUCTION;
+                       }
+                       if(!autocvar_crosshair_hittest_showimpact)
+                               wcross_origin = wcross_oldorigin;
+               }
+               else
+                       shottype = SHOTTYPE_HITWORLD;
+               vector wcross_color = '0 0 0', wcross_size = '0 0 0';
+               string wcross_name = "";
+               float wcross_scale, wcross_blur;
+               if(autocvar_crosshair_per_weapon || (autocvar_crosshair_color_special == 1))
+               {
+                       e = get_weaponinfo(switchingweapon);
+                       if(e)
+                       {
+                               if(autocvar_crosshair_per_weapon)
+                               {
+                                       // WEAPONTODO: access these through some general settings (with non-balance config settings)
+                                       //wcross_resolution *= cvar(strcat("crosshair_", wcross_wep, "_size"));
+                                       //if (wcross_resolution == 0)
+                                               //return;
+                                       //wcross_style = cvar_string(strcat("crosshair_", wcross_wep));
+                                       wcross_resolution *= e.w_crosshair_size;
+                                       wcross_name = e.w_crosshair;
+                               }
+                       }
+               }
+               if(wcross_name == "")
+                       wcross_name = strcat("gfx/crosshair", wcross_style);
+               // MAIN CROSSHAIR COLOR DECISION
+               switch(autocvar_crosshair_color_special)
+               {
+                       case 1: // crosshair_color_per_weapon
+                       {
+                               if(e)
+                               {
+                                       wcross_color = e.wpcolor;
+                                       break;
+                               }
+                               else { goto normalcolor; }
+                       }
+                       case 2: // crosshair_color_by_health
+                       {
+                               float x = getstati(STAT_HEALTH);
+                               //x = red
+                               //y = green
+                               //z = blue
+                               wcross_color_z = 0;
+                               if(x > 200)
+                               {
+                                       wcross_color_x = 0;
+                                       wcross_color_y = 1;
+                               }
+                               else if(x > 150)
+                               {
+                                       wcross_color_x = 0.4 - (x-150)*0.02 * 0.4;
+                                       wcross_color_y = 0.9 + (x-150)*0.02 * 0.1;
+                               }
+                               else if(x > 100)
+                               {
+                                       wcross_color_x = 1 - (x-100)*0.02 * 0.6;
+                                       wcross_color_y = 1 - (x-100)*0.02 * 0.1;
+                                       wcross_color_z = 1 - (x-100)*0.02;
+                               }
+                               else if(x > 50)
+                               {
+                                       wcross_color_x = 1;
+                                       wcross_color_y = 1;
+                                       wcross_color_z = 0.2 + (x-50)*0.02 * 0.8;
+                               }
+                               else if(x > 20)
+                               {
+                                       wcross_color_x = 1;
+                                       wcross_color_y = (x-20)*90/27/100;
+                                       wcross_color_z = (x-20)*90/27/100 * 0.2;
+                               }
+                               else
+                               {
+                                       wcross_color_x = 1;
+                                       wcross_color_y = 0;
+                               }
+                               break;
+                       }
+                       case 3: // crosshair_color_rainbow
+                       {
+                               if(time >= rainbow_last_flicker)
+                               {
+                                       rainbow_prev_color = randomvec() * autocvar_crosshair_color_special_rainbow_brightness;
+                                       rainbow_last_flicker = time + autocvar_crosshair_color_special_rainbow_delay;
+                               }
+                               wcross_color = rainbow_prev_color;
+                               break;
+                       }
+                       :normalcolor
+                       default: { wcross_color = stov(autocvar_crosshair_color); break; }
+               }
+               if(autocvar_crosshair_effect_scalefade)
+               {
+                       wcross_scale = wcross_resolution;
+                       wcross_resolution = 1;
+               }
+               else
+               {
+                       wcross_scale = 1;
+               }
+               if(autocvar_crosshair_pickup)
+               {
+                       float stat_pickup_time = getstatf(STAT_LAST_PICKUP);
+                       if(pickup_crosshair_time < stat_pickup_time)
+                       {
+                               if(time - stat_pickup_time < MAX_TIME_DIFF) // don't trigger the animation if it's too old
+                                       pickup_crosshair_size = 1;
+                               pickup_crosshair_time = stat_pickup_time;
+                       }
+                       if(pickup_crosshair_size > 0)
+                               pickup_crosshair_size -= autocvar_crosshair_pickup_speed * frametime;
+                       else
+                               pickup_crosshair_size = 0;
+                       wcross_scale += sin(pickup_crosshair_size) * autocvar_crosshair_pickup;
+               }
+               // todo: make crosshair hit indication dependent on damage dealt
+               if(autocvar_crosshair_hitindication)
+               {
+                       vector hitindication_color = ((autocvar_crosshair_color_special == 1) ? stov(autocvar_crosshair_hitindication_per_weapon_color) : stov(autocvar_crosshair_hitindication_color));
+                       if(unaccounted_damage)
+                       {
+                               hitindication_crosshair_size = 1;
+                       }
+                       if(hitindication_crosshair_size > 0)
+                               hitindication_crosshair_size -= autocvar_crosshair_hitindication_speed * frametime;
+                       else
+                               hitindication_crosshair_size = 0;
+                       wcross_scale += sin(hitindication_crosshair_size) * autocvar_crosshair_hitindication;
+                       wcross_color_x += sin(hitindication_crosshair_size) * hitindication_color_x;
+                       wcross_color_y += sin(hitindication_crosshair_size) * hitindication_color_y;
+                       wcross_color_z += sin(hitindication_crosshair_size) * hitindication_color_z;
+               }
+               if(shottype == SHOTTYPE_HITENEMY)
+                       wcross_scale *= autocvar_crosshair_hittest; // is not queried if hittest is 0
+               if(shottype == SHOTTYPE_HITTEAM)
+                       wcross_scale /= autocvar_crosshair_hittest; // is not queried if hittest is 0
+               f = fabs(autocvar_crosshair_effect_time);
+               if(wcross_scale != wcross_scale_goal_prev || wcross_alpha != wcross_alpha_goal_prev || wcross_color != wcross_color_goal_prev)
+               {
+                       wcross_changedonetime = time + f;
+               }
+               if(wcross_name != wcross_name_goal_prev || wcross_resolution != wcross_resolution_goal_prev)
+               {
+                       wcross_name_changestarttime = time;
+                       wcross_name_changedonetime = time + f;
+                       if(wcross_name_goal_prev_prev)
+                               strunzone(wcross_name_goal_prev_prev);
+                       wcross_name_goal_prev_prev = wcross_name_goal_prev;
+                       wcross_name_goal_prev = strzone(wcross_name);
+                       wcross_name_alpha_goal_prev_prev = wcross_name_alpha_goal_prev;
+                       wcross_resolution_goal_prev_prev = wcross_resolution_goal_prev;
+                       wcross_resolution_goal_prev = wcross_resolution;
+               }
+               wcross_scale_goal_prev = wcross_scale;
+               wcross_alpha_goal_prev = wcross_alpha;
+               wcross_color_goal_prev = wcross_color;
+               if(shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && autocvar_crosshair_hittest_blur && !autocvar_chase_active))
+               {
+                       wcross_blur = 1;
+                       wcross_alpha *= 0.75;
+               }
+               else
+                       wcross_blur = 0;
+               // *_prev is at time-frametime
+               // * is at wcross_changedonetime+f
+               // what do we have at time?
+               if(time < wcross_changedonetime)
+               {
+                       f = frametime / (wcross_changedonetime - time + frametime);
+                       wcross_scale = f * wcross_scale + (1 - f) * wcross_scale_prev;
+                       wcross_alpha = f * wcross_alpha + (1 - f) * wcross_alpha_prev;
+                       wcross_color = f * wcross_color + (1 - f) * wcross_color_prev;
+               }
+               wcross_scale_prev = wcross_scale;
+               wcross_alpha_prev = wcross_alpha;
+               wcross_color_prev = wcross_color;
+               wcross_scale *= 1 - autocvar__menu_alpha;
+               wcross_alpha *= 1 - autocvar__menu_alpha;
+               wcross_size = draw_getimagesize(wcross_name) * wcross_scale;
+               if(wcross_scale >= 0.001 && wcross_alpha >= 0.001)
+               {
+                       // crosshair rings for weapon stats
+                       if (autocvar_crosshair_ring || autocvar_crosshair_ring_reload)
+                       {
+                               // declarations and stats
+                               float ring_value = 0, ring_scale = 0, ring_alpha = 0, ring_inner_value = 0, ring_inner_alpha = 0;
+                               string ring_image = string_null, ring_inner_image = string_null;
+                               vector ring_rgb = '0 0 0', ring_inner_rgb = '0 0 0';
+                               ring_scale = autocvar_crosshair_ring_size;
+                               float weapon_clipload, weapon_clipsize;
+                               weapon_clipload = getstati(STAT_WEAPON_CLIPLOAD);
+                               weapon_clipsize = getstati(STAT_WEAPON_CLIPSIZE);
+                               float ok_ammo_charge, ok_ammo_chargepool;
+                               ok_ammo_charge = getstatf(STAT_OK_AMMO_CHARGE);
+                               ok_ammo_chargepool = getstatf(STAT_OK_AMMO_CHARGEPOOl);
+                               float vortex_charge, vortex_chargepool;
+                               vortex_charge = getstatf(STAT_VORTEX_CHARGE);
+                               vortex_chargepool = getstatf(STAT_VORTEX_CHARGEPOOL);
+                               float arc_heat = getstatf(STAT_ARC_HEAT);
+                               if(vortex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
+                                       vortex_charge_movingavg = vortex_charge;
+                               // handle the values
+                               if (autocvar_crosshair_ring && activeweapon == WEP_VORTEX && vortex_charge && autocvar_crosshair_ring_vortex) // ring around crosshair representing velocity-dependent damage for the vortex
+                               {
+                                       if (vortex_chargepool || use_vortex_chargepool) {
+                                               use_vortex_chargepool = 1;
+                                               ring_inner_value = vortex_chargepool;
+                                       } else {
+                                               vortex_charge_movingavg = (1 - autocvar_crosshair_ring_vortex_currentcharge_movingavg_rate) * vortex_charge_movingavg + autocvar_crosshair_ring_vortex_currentcharge_movingavg_rate * vortex_charge;
+                                               ring_inner_value = bound(0, autocvar_crosshair_ring_vortex_currentcharge_scale * (vortex_charge - vortex_charge_movingavg), 1);
+                                       }
+                                       ring_inner_alpha = autocvar_crosshair_ring_vortex_inner_alpha;
+                                       ring_inner_rgb = eX * autocvar_crosshair_ring_vortex_inner_color_red + eY * autocvar_crosshair_ring_vortex_inner_color_green + eZ * autocvar_crosshair_ring_vortex_inner_color_blue;
+                                       ring_inner_image = "gfx/crosshair_ring_inner.tga";
+                                       // draw the outer ring to show the current charge of the weapon
+                                       ring_value = vortex_charge;
+                                       ring_alpha = autocvar_crosshair_ring_vortex_alpha;
+                                       ring_rgb = wcross_color;
+                                       ring_image = "gfx/crosshair_ring_nexgun.tga";
+                               }
+                               else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer)
+                               {
+                                       ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to.
+                                       ring_alpha = autocvar_crosshair_ring_minelayer_alpha;
+                                       ring_rgb = wcross_color;
+                                       ring_image = "gfx/crosshair_ring.tga";
+                               }
+                               else if (activeweapon == WEP_HAGAR && getstati(STAT_HAGAR_LOAD) && autocvar_crosshair_ring_hagar)
+                               {
+                                       ring_value = bound(0, getstati(STAT_HAGAR_LOAD) / hagar_maxrockets, 1);
+                                       ring_alpha = autocvar_crosshair_ring_hagar_alpha;
+                                       ring_rgb = wcross_color;
+                                       ring_image = "gfx/crosshair_ring.tga";
+                               }
+                               else if (ok_ammo_charge)
+                               {
+                                       ring_value = ok_ammo_chargepool;
+                                       ring_alpha = autocvar_crosshair_ring_reload_alpha;
+                                       ring_rgb = wcross_color;
+                                       ring_image = "gfx/crosshair_ring.tga";
+                               }
+                               else if(autocvar_crosshair_ring_reload && weapon_clipsize) // forces there to be only an ammo ring
+                               {
+                                       ring_value = bound(0, weapon_clipload / weapon_clipsize, 1);
+                                       ring_scale = autocvar_crosshair_ring_reload_size;
+                                       ring_alpha = autocvar_crosshair_ring_reload_alpha;
+                                       ring_rgb = wcross_color;
+                                       // Note: This is to stop Taoki from complaining that the image doesn't match all potential balances.
+                                       // if a new image for another weapon is added, add the code (and its respective file/value) here
+                                       if ((activeweapon == WEP_RIFLE) && (weapon_clipsize == 80))
+                                               ring_image = "gfx/crosshair_ring_rifle.tga";
+                                       else
+                                               ring_image = "gfx/crosshair_ring.tga";
+                               }
+                               else if ( autocvar_crosshair_ring && autocvar_crosshair_ring_arc && arc_heat && activeweapon == WEP_ARC )
+                               {
+                                       ring_value = arc_heat;
+                                       ring_alpha = (1-arc_heat)*autocvar_crosshair_ring_arc_cold_alpha +
+                                               arc_heat*autocvar_crosshair_ring_arc_hot_alpha;
+                                       ring_rgb = (1-arc_heat)*wcross_color + arc_heat*autocvar_crosshair_ring_arc_hot_color;
+                                       ring_image = "gfx/crosshair_ring.tga";
+                               }
+                               // if in weapon switch animation, fade ring out/in
+                               if(autocvar_crosshair_effect_time > 0)
+                               {
+                                       f = (time - wcross_name_changestarttime) / autocvar_crosshair_effect_time;
+                                       if (!(f < 1))
+                                       {
+                                               wcross_ring_prev = ((ring_image) ? TRUE : FALSE);
+                                       }
+                                       if(wcross_ring_prev)
+                                       {
+                                               if(f < 1)
+                                                       ring_alpha *= fabs(1 - bound(0, f, 1));
+                                       }
+                                       else
+                                       {
+                                               if(f < 1)
+                                                       ring_alpha *= bound(0, f, 1);
+                                       }
+                               }
+                               if (autocvar_crosshair_ring_inner && ring_inner_value) // lets draw a ring inside a ring so you can ring while you ring
+                                       DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_inner_image, ring_inner_value, ring_inner_rgb, wcross_alpha * ring_inner_alpha, DRAWFLAG_ADDITIVE);
+                               if (ring_value)
+                                       DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_image, ring_value, ring_rgb, wcross_alpha * ring_alpha, DRAWFLAG_ADDITIVE);
+                       }
+ #define CROSSHAIR_DO_BLUR(M,sz,wcross_name,wcross_alpha) \
+                       do \
+                       { \
+                               if(wcross_blur > 0) \
+                               { \
+                                       for(i = -2; i <= 2; ++i) \
+                                       for(j = -2; j <= 2; ++j) \
+                                       M(i,j,sz,wcross_name,wcross_alpha*0.04); \
+                               } \
+                               else \
+                               { \
+                                       M(0,0,sz,wcross_name,wcross_alpha); \
+                               } \
+                       } \
+                       while(0)
+ #define CROSSHAIR_DRAW_SINGLE(i,j,sz,wcross_name,wcross_alpha) \
+                       drawpic(wcross_origin - ('0.5 0 0' * (sz * wcross_size_x + i * wcross_blur) + '0 0.5 0' * (sz * wcross_size_y + j * wcross_blur)), wcross_name, sz * wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
+ #define CROSSHAIR_DRAW(sz,wcross_name,wcross_alpha) \
+                       CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,sz,wcross_name,wcross_alpha)
+                       if(time < wcross_name_changedonetime && wcross_name != wcross_name_goal_prev_prev && wcross_name_goal_prev_prev)
+                       {
+                               f = (wcross_name_changedonetime - time) / (wcross_name_changedonetime - wcross_name_changestarttime);
+                               wcross_size = draw_getimagesize(wcross_name_goal_prev_prev) * wcross_scale;
+                               CROSSHAIR_DRAW(wcross_resolution_goal_prev_prev, wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev);
+                               f = 1 - f;
+                       }
+                       else
+                       {
+                               f = 1;
+                       }
+                       wcross_name_alpha_goal_prev = f;
+                       wcross_size = draw_getimagesize(wcross_name) * wcross_scale;
+                       CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f);
+                       if(autocvar_crosshair_dot)
+                       {
+                               vector wcross_color_old;
+                               wcross_color_old = wcross_color;
+                               if((autocvar_crosshair_dot_color_custom) && (autocvar_crosshair_dot_color != "0"))
+                                       wcross_color = stov(autocvar_crosshair_dot_color);
+                               CROSSHAIR_DRAW(wcross_resolution * autocvar_crosshair_dot_size, "gfx/crosshairdot.tga", f * autocvar_crosshair_dot_alpha);
+                               // FIXME why don't we use wcross_alpha here?cl_notice_run();
+                               wcross_color = wcross_color_old;
+                       }
+               }
+       }
+       else
+       {
+               wcross_scale_prev = 0;
+               wcross_alpha_prev = 0;
+               wcross_scale_goal_prev = 0;
+               wcross_alpha_goal_prev = 0;
+               wcross_changedonetime = 0;
+               if(wcross_name_goal_prev)
+                       strunzone(wcross_name_goal_prev);
+               wcross_name_goal_prev = string_null;
+               if(wcross_name_goal_prev_prev)
+                       strunzone(wcross_name_goal_prev_prev);
+               wcross_name_goal_prev_prev = string_null;
+               wcross_name_changestarttime = 0;
+               wcross_name_changedonetime = 0;
+               wcross_name_alpha_goal_prev = 0;
+               wcross_name_alpha_goal_prev_prev = 0;
+               wcross_resolution_goal_prev = 0;
+               wcross_resolution_goal_prev_prev = 0;
+       }
+ }
  
  #define BUTTON_3 4
  #define BUTTON_4 8
@@@ -407,8 -971,7 +971,7 @@@ void CSQC_UpdateView(float w, float h
  {
        entity e;
        float fov;
-       float f, i, j;
-       vector v;
+       float f, i;
        vector vf_size, vf_min;
        float a;
  
  
        CSQCPlayer_SetCamera();
  
- #ifdef COMPAT_XON050_ENGINE
-       if(spectatee_status)
-               myteam = GetPlayerColor(spectatee_status - 1);
-       else
- #endif
-               myteam = GetPlayerColor(player_localentnum - 1);
+       myteam = GetPlayerColor(player_localentnum - 1);
  
        if(myteam != prev_myteam)
        {
        // event chase camera
        if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
        {
-               if(((spectatee_status >= 0 && (autocvar_cl_eventchase_death && is_dead)) || intermission) && !autocvar_cl_orthoview)
+               if(WantEventchase())
                {
+                       eventchase_running = TRUE;
                        // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.)
                        vector current_view_origin = (csqcplayer ? csqcplayer.origin : pmove_org);
  
                }
                else if(autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
                {
+                       eventchase_running = FALSE;
                        cvar_set("chase_active", "0");
                        eventchase_current_distance = 0; // start from 0 next time
                }
        }
  
        // do lockview after event chase camera so that it still applies whenever necessary.
 -      if(autocvar_cl_lockview || (!autocvar_hud_cursormode && (autocvar__hud_configure && spectatee_status <= 0 || intermission > 1)))
 +      if(autocvar_cl_lockview || (!autocvar_hud_cursormode && (autocvar__hud_configure && spectatee_status <= 0 || intermission > 1 || HUD_QuickMenu_IsOpened())))
        {
                setproperty(VF_ORIGIN, freeze_org);
                setproperty(VF_ANGLES, freeze_ang);
  
        // ALWAYS Clear Current Scene First
        clearscene();
- #ifdef WORKAROUND_XON010
-       if(checkextension("DP_CSQC_ROTATEMOVES"))
-       {
- #endif
        setproperty(VF_ORIGIN, view_origin);
        setproperty(VF_ANGLES, view_angles);
- #ifdef WORKAROUND_XON010
-       }
- #endif
  
        // FIXME engine bug? VF_SIZE and VF_MIN are not restored to sensible values by this
        setproperty(VF_SIZE, vf_size);
        {
                // apply night vision effect
                vector tc_00, tc_01, tc_10, tc_11;
-               vector rgb;
-               rgb_x = 0; // fteqcc sucks
-               rgb_y = 0; // fteqcc sucks
-               rgb_z = 0; // fteqcc sucks
+               vector rgb = '0 0 0';
  
                if(!nightvision_noise)
                {
                R_EndPolygon();
        }
  
-       // Draw the aiming reticle for weapons that use it
-       // reticle_type is changed to the item we are zooming / aiming with, to decide which reticle to use
-       // It must be a persisted float for fading out to work properly (you let go of the zoom button for
-       // the view to go back to normal, so reticle_type would become 0 as we fade out)
-       if(spectatee_status || is_dead || hud != HUD_NORMAL)
-               reticle_type = 0; // prevent reticle from showing during the respawn zoom effect or for spectators
-       else if((activeweapon == WEP_NEX || activeweapon == WEP_RIFLE || activeweapon == WEP_MINSTANEX) && (button_zoom || zoomscript_caught))
-               reticle_type = 2; // nex zoom
-       else if(button_zoom || zoomscript_caught)
-               reticle_type = 1; // normal zoom
-       else if((activeweapon == WEP_NEX) && button_attack2)
-               reticle_type = 2; // nex zoom
-       if(reticle_type && autocvar_cl_reticle)
+       if(autocvar_cl_reticle)
        {
-               if(autocvar_cl_reticle_stretch)
+               // Draw the aiming reticle for weapons that use it
+               // reticle_type is changed to the item we are zooming / aiming with, to decide which reticle to use
+               // It must be a persisted float for fading out to work properly (you let go of the zoom button for
+               // the view to go back to normal, so reticle_type would become 0 as we fade out)
+               if(spectatee_status || is_dead || hud != HUD_NORMAL)
                {
-                       reticle_size_x = vid_conwidth;
-                       reticle_size_y = vid_conheight;
-                       reticle_pos_x = 0;
-                       reticle_pos_y = 0;
+                       // no zoom reticle while dead
+                       reticle_type = 0;
                }
-               else
+               else if(WEP_ACTION(activeweapon, WR_ZOOMRETICLE) && autocvar_cl_reticle_weapon)
                {
-                       reticle_size_x = max(vid_conwidth, vid_conheight);
-                       reticle_size_y = max(vid_conwidth, vid_conheight);
-                       reticle_pos_x = (vid_conwidth - reticle_size_x) / 2;
-                       reticle_pos_y = (vid_conheight - reticle_size_y) / 2;
+                       if(reticle_image != "") { reticle_type = 2; }
+                       else { reticle_type = 0; }
                }
-               f = current_zoomfraction;
-               if(zoomscript_caught)
-                       f = 1;
-               if(autocvar_cl_reticle_item_normal)
+               else if(button_zoom || zoomscript_caught)
                {
-                       if(reticle_type == 1 && f)
-                               drawpic(reticle_pos, "gfx/reticle_normal", reticle_size, '1 1 1', f * autocvar_cl_reticle_item_normal, DRAWFLAG_NORMAL);
+                       // normal zoom
+                       reticle_type = 1;
                }
-               if(autocvar_cl_reticle_item_nex)
+               if(reticle_type)
                {
-                       if(reticle_type == 2 && f)
-                               drawpic(reticle_pos, "gfx/reticle_nex", reticle_size, '1 1 1', f * autocvar_cl_reticle_item_nex, DRAWFLAG_NORMAL);
+                       if(autocvar_cl_reticle_stretch)
+                       {
+                               reticle_size_x = vid_conwidth;
+                               reticle_size_y = vid_conheight;
+                               reticle_pos_x = 0;
+                               reticle_pos_y = 0;
+                       }
+                       else
+                       {
+                               reticle_size_x = max(vid_conwidth, vid_conheight);
+                               reticle_size_y = max(vid_conwidth, vid_conheight);
+                               reticle_pos_x = (vid_conwidth - reticle_size_x) / 2;
+                               reticle_pos_y = (vid_conheight - reticle_size_y) / 2;
+                       }
+                       if(zoomscript_caught)
+                               f = 1;
+                       else 
+                               f = current_zoomfraction;
+                       if(f)
+                       {
+                               switch(reticle_type)
+                               {
+                                       case 1: drawpic(reticle_pos, "gfx/reticle_normal", reticle_size, '1 1 1', f * autocvar_cl_reticle_normal_alpha, DRAWFLAG_NORMAL); break;
+                                       case 2: drawpic(reticle_pos, reticle_image, reticle_size, '1 1 1', f * autocvar_cl_reticle_weapon_alpha, DRAWFLAG_NORMAL); break;
+                               }
+                       }
                }
        }
+       else
+       {
+               if(reticle_type != 0) { reticle_type = 0; }
+       }
  
  
        // improved polyblend
  
        scoreboard_active = HUD_WouldDrawScoreboard();
  
-       hit_time = getstatf(STAT_HIT_TIME);
-       if(hit_time > nextsound_hit_time && autocvar_cl_hitsound)
-       {
-               if(time - hit_time < MAX_TIME_DIFF) // don't play the sound if it's too old.
-                       sound(world, CH_INFO, "misc/hit.wav", VOL_BASE, ATTEN_NONE);
-               nextsound_hit_time = time + autocvar_cl_hitsound_antispam_time;
-       }
-       typehit_time = getstatf(STAT_TYPEHIT_TIME);
-       if(typehit_time > nextsound_typehit_time)
-       {
-               if(time - typehit_time < MAX_TIME_DIFF) // don't play the sound if it's too old.
-                       sound(world, CH_INFO, "misc/typehit.wav", VOL_BASE, ATTEN_NONE);
-               nextsound_typehit_time = time + autocvar_cl_hitsound_antispam_time;
-       }
-       //else
-       {
-               if(gametype == MAPINFO_TYPE_FREEZETAG)
-               {
-                       if(getstati(STAT_FROZEN))
-                               drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
-                       if(getstatf(STAT_REVIVE_PROGRESS))
-                       {
-                               DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", getstatf(STAT_REVIVE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
-                               drawstring_aspect(eY * 0.64 * vid_conheight, _("Revival progress"), eX * vid_conwidth + eY * 0.025 * vid_conheight, '1 1 1', 1, DRAWFLAG_NORMAL);
-                       }
-               }
-               if(autocvar_r_letterbox == 0)
-                       if(autocvar_viewsize < 120)
-                               CSQC_common_hud();
-               // crosshair goes VERY LAST
-               if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1 && hud == HUD_NORMAL)
-               {
-                       if (!autocvar_crosshair_enabled) // main toggle for crosshair rendering
-                               return;
-                       string wcross_style;
-                       float wcross_alpha, wcross_resolution;
-                       wcross_style = autocvar_crosshair;
-                       if (wcross_style == "0")
-                               return;
-                       wcross_resolution = autocvar_crosshair_size;
-                       if (wcross_resolution == 0)
-                               return;
-                       wcross_alpha = autocvar_crosshair_alpha;
-                       if (wcross_alpha == 0)
-                               return;
-                       // TrueAim check
-                       float shottype;
-                       // wcross_origin = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight;
-                       wcross_origin = project_3d_to_2d(view_origin + MAX_SHOT_DISTANCE * view_forward);
-                       wcross_origin_z = 0;
-                       if(autocvar_crosshair_hittest)
-                       {
-                               vector wcross_oldorigin;
-                               wcross_oldorigin = wcross_origin;
-                               shottype = TrueAimCheck();
-                               if(shottype == SHOTTYPE_HITWORLD)
-                               {
-                                       v = wcross_origin - wcross_oldorigin;
-                                       v_x /= vid_conwidth;
-                                       v_y /= vid_conheight;
-                                       if(vlen(v) > 0.01)
-                                               shottype = SHOTTYPE_HITOBSTRUCTION;
-                               }
-                               if(!autocvar_crosshair_hittest_showimpact)
-                                       wcross_origin = wcross_oldorigin;
-                       }
-                       else
-                               shottype = SHOTTYPE_HITWORLD;
-                       vector wcross_color = '0 0 0', wcross_size = '0 0 0';
-                       string wcross_wep = "", wcross_name;
-                       float wcross_scale, wcross_blur;
-                       if (autocvar_crosshair_per_weapon || (autocvar_crosshair_color_special == 1))
-                       {
-                               e = get_weaponinfo(switchingweapon);
-                               if (e && e.netname != "")
-                               {
-                                       wcross_wep = e.netname;
-                                       if(autocvar_crosshair_per_weapon)
-                                       {
-                                               wcross_resolution *= cvar(strcat("crosshair_", wcross_wep, "_size"));
-                                               if (wcross_resolution == 0)
-                                                       return;
-                                               wcross_alpha *= cvar(strcat("crosshair_", wcross_wep, "_alpha"));
-                                               if (wcross_alpha == 0)
-                                                       return;
-                                               wcross_style = cvar_string(strcat("crosshair_", wcross_wep));
-                                               if(wcross_style == "" || wcross_style == "0")
-                                                       wcross_style = wcross_wep;
-                                       }
-                               }
-                       }
-                       //printf("crosshair style: %s\n", wcross_style);
-                       wcross_name = strcat("gfx/crosshair", wcross_style);
-                       // MAIN CROSSHAIR COLOR DECISION
-                       switch(autocvar_crosshair_color_special)
-                       {
-                               case 1: // crosshair_color_per_weapon
-                               {
-                                       if(wcross_wep != "")
-                                       {
-                                               wcross_color = stov(cvar_string(sprintf("crosshair_%s_color", wcross_wep)));
-                                               break;
-                                       }
-                                       else { goto normalcolor; }
-                               }
-                               case 2: // crosshair_color_by_health
-                               {
-                                       float x = getstati(STAT_HEALTH);
-                                       //x = red
-                                       //y = green
-                                       //z = blue
-                                       wcross_color_z = 0;
-                                       if(x > 200)
-                                       {
-                                               wcross_color_x = 0;
-                                               wcross_color_y = 1;
-                                       }
-                                       else if(x > 150)
-                                       {
-                                               wcross_color_x = 0.4 - (x-150)*0.02 * 0.4;
-                                               wcross_color_y = 0.9 + (x-150)*0.02 * 0.1;
-                                       }
-                                       else if(x > 100)
-                                       {
-                                               wcross_color_x = 1 - (x-100)*0.02 * 0.6;
-                                               wcross_color_y = 1 - (x-100)*0.02 * 0.1;
-                                               wcross_color_z = 1 - (x-100)*0.02;
-                                       }
-                                       else if(x > 50)
-                                       {
-                                               wcross_color_x = 1;
-                                               wcross_color_y = 1;
-                                               wcross_color_z = 0.2 + (x-50)*0.02 * 0.8;
-                                       }
-                                       else if(x > 20)
-                                       {
-                                               wcross_color_x = 1;
-                                               wcross_color_y = (x-20)*90/27/100;
-                                               wcross_color_z = (x-20)*90/27/100 * 0.2;
-                                       }
-                                       else
-                                       {
-                                               wcross_color_x = 1;
-                                               wcross_color_y = 0;
-                                       }
-                                       break;
-                               }
-                               case 3: // crosshair_color_rainbow
-                               {
-                                       if(time >= rainbow_last_flicker)
-                                       {
-                                               rainbow_prev_color = randomvec() * autocvar_crosshair_color_special_rainbow_brightness;
-                                               rainbow_last_flicker = time + autocvar_crosshair_color_special_rainbow_delay;
-                                       }
-                                       wcross_color = rainbow_prev_color;
-                                       break;
-                               }
-                               :normalcolor
-                               default: { wcross_color = stov(autocvar_crosshair_color); break; }
-                       }
-                       if(autocvar_crosshair_effect_scalefade)
-                       {
-                               wcross_scale = wcross_resolution;
-                               wcross_resolution = 1;
-                       }
-                       else
-                       {
-                               wcross_scale = 1;
-                       }
-                       if(autocvar_crosshair_pickup)
-                       {
-                               float stat_pickup_time = getstatf(STAT_LAST_PICKUP);
-                               if(pickup_crosshair_time < stat_pickup_time)
-                               {
-                                       if(time - stat_pickup_time < MAX_TIME_DIFF) // don't trigger the animation if it's too old
-                                               pickup_crosshair_size = 1;
-                                       pickup_crosshair_time = stat_pickup_time;
-                               }
-                               if(pickup_crosshair_size > 0)
-                                       pickup_crosshair_size -= autocvar_crosshair_pickup_speed * frametime;
-                               else
-                                       pickup_crosshair_size = 0;
-                               wcross_scale += sin(pickup_crosshair_size) * autocvar_crosshair_pickup;
-                       }
-                       if(autocvar_crosshair_hitindication)
-                       {
-                               vector hitindication_color = ((autocvar_crosshair_color_special == 1) ? stov(autocvar_crosshair_hitindication_per_weapon_color) : stov(autocvar_crosshair_hitindication_color));
-                               if(hitindication_crosshair_time < hit_time)
-                               {
-                                       if(time - hit_time < MAX_TIME_DIFF) // don't trigger the animation if it's too old
-                                               hitindication_crosshair_size = 1;
-                                       hitindication_crosshair_time = hit_time;
-                               }
-                               if(hitindication_crosshair_size > 0)
-                                       hitindication_crosshair_size -= autocvar_crosshair_hitindication_speed * frametime;
-                               else
-                                       hitindication_crosshair_size = 0;
-                               wcross_scale += sin(hitindication_crosshair_size) * autocvar_crosshair_hitindication;
-                               wcross_color_x += sin(hitindication_crosshair_size) * hitindication_color_x;
-                               wcross_color_y += sin(hitindication_crosshair_size) * hitindication_color_y;
-                               wcross_color_z += sin(hitindication_crosshair_size) * hitindication_color_z;
-                       }
-                       if(shottype == SHOTTYPE_HITENEMY)
-                               wcross_scale *= autocvar_crosshair_hittest; // is not queried if hittest is 0
-                       if(shottype == SHOTTYPE_HITTEAM)
-                               wcross_scale /= autocvar_crosshair_hittest; // is not queried if hittest is 0
-                       f = fabs(autocvar_crosshair_effect_time);
-                       if(wcross_scale != wcross_scale_goal_prev || wcross_alpha != wcross_alpha_goal_prev || wcross_color != wcross_color_goal_prev)
-                       {
-                               wcross_changedonetime = time + f;
-                       }
-                       if(wcross_name != wcross_name_goal_prev || wcross_resolution != wcross_resolution_goal_prev)
-                       {
-                               wcross_name_changestarttime = time;
-                               wcross_name_changedonetime = time + f;
-                               if(wcross_name_goal_prev_prev)
-                                       strunzone(wcross_name_goal_prev_prev);
-                               wcross_name_goal_prev_prev = wcross_name_goal_prev;
-                               wcross_name_goal_prev = strzone(wcross_name);
-                               wcross_name_alpha_goal_prev_prev = wcross_name_alpha_goal_prev;
-                               wcross_resolution_goal_prev_prev = wcross_resolution_goal_prev;
-                               wcross_resolution_goal_prev = wcross_resolution;
-                       }
-                       wcross_scale_goal_prev = wcross_scale;
-                       wcross_alpha_goal_prev = wcross_alpha;
-                       wcross_color_goal_prev = wcross_color;
-                       if(shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && autocvar_crosshair_hittest_blur && !autocvar_chase_active))
-                       {
-                               wcross_blur = 1;
-                               wcross_alpha *= 0.75;
-                       }
-                       else
-                               wcross_blur = 0;
-                       // *_prev is at time-frametime
-                       // * is at wcross_changedonetime+f
-                       // what do we have at time?
-                       if(time < wcross_changedonetime)
-                       {
-                               f = frametime / (wcross_changedonetime - time + frametime);
-                               wcross_scale = f * wcross_scale + (1 - f) * wcross_scale_prev;
-                               wcross_alpha = f * wcross_alpha + (1 - f) * wcross_alpha_prev;
-                               wcross_color = f * wcross_color + (1 - f) * wcross_color_prev;
-                       }
-                       wcross_scale_prev = wcross_scale;
-                       wcross_alpha_prev = wcross_alpha;
-                       wcross_color_prev = wcross_color;
-                       wcross_scale *= 1 - autocvar__menu_alpha;
-                       wcross_alpha *= 1 - autocvar__menu_alpha;
-                       wcross_size = draw_getimagesize(wcross_name) * wcross_scale;
-                       if(wcross_scale >= 0.001 && wcross_alpha >= 0.001)
-                       {
-                               // crosshair rings for weapon stats
-                               if (autocvar_crosshair_ring || autocvar_crosshair_ring_reload)
-                               {
-                                       // declarations and stats
-                                       float ring_value = 0, ring_scale = 0, ring_alpha = 0, ring_inner_value = 0, ring_inner_alpha = 0;
-                                       string ring_image = string_null, ring_inner_image = string_null;
-                                       vector ring_rgb = '0 0 0', ring_inner_rgb = '0 0 0';
-                                       ring_scale = autocvar_crosshair_ring_size;
-                                       float weapon_clipload, weapon_clipsize;
-                                       weapon_clipload = getstati(STAT_WEAPON_CLIPLOAD);
-                                       weapon_clipsize = getstati(STAT_WEAPON_CLIPSIZE);
-                                       float nex_charge, nex_chargepool;
-                                       nex_charge = getstatf(STAT_NEX_CHARGE);
-                                       nex_chargepool = getstatf(STAT_NEX_CHARGEPOOL);
-                                       if(nex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
-                                               nex_charge_movingavg = nex_charge;
-                                       // handle the values
-                                       if (autocvar_crosshair_ring && activeweapon == WEP_NEX && nex_charge && autocvar_crosshair_ring_nex) // ring around crosshair representing velocity-dependent damage for the nex
-                                       {
-                                               if (nex_chargepool || use_nex_chargepool) {
-                                                       use_nex_chargepool = 1;
-                                                       ring_inner_value = nex_chargepool;
-                                               } else {
-                                                       nex_charge_movingavg = (1 - autocvar_crosshair_ring_nex_currentcharge_movingavg_rate) * nex_charge_movingavg + autocvar_crosshair_ring_nex_currentcharge_movingavg_rate * nex_charge;
-                                                       ring_inner_value = bound(0, autocvar_crosshair_ring_nex_currentcharge_scale * (nex_charge - nex_charge_movingavg), 1);
-                                               }
-                                               ring_inner_alpha = autocvar_crosshair_ring_nex_inner_alpha;
-                                               ring_inner_rgb = eX * autocvar_crosshair_ring_nex_inner_color_red + eY * autocvar_crosshair_ring_nex_inner_color_green + eZ * autocvar_crosshair_ring_nex_inner_color_blue;
-                                               ring_inner_image = "gfx/crosshair_ring_inner.tga";
-                                               // draw the outer ring to show the current charge of the weapon
-                                               ring_value = nex_charge;
-                                               ring_alpha = autocvar_crosshair_ring_nex_alpha;
-                                               ring_rgb = wcross_color;
-                                               ring_image = "gfx/crosshair_ring_nexgun.tga";
-                                       }
-                                       else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer)
-                                       {
-                                               ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to.
-                                               ring_alpha = autocvar_crosshair_ring_minelayer_alpha;
-                                               ring_rgb = wcross_color;
-                                               ring_image = "gfx/crosshair_ring.tga";
-                                       }
-                                       else if (activeweapon == WEP_HAGAR && getstati(STAT_HAGAR_LOAD) && autocvar_crosshair_ring_hagar)
-                                       {
-                                               ring_value = bound(0, getstati(STAT_HAGAR_LOAD) / hagar_maxrockets, 1);
-                                               ring_alpha = autocvar_crosshair_ring_hagar_alpha;
-                                               ring_rgb = wcross_color;
-                                               ring_image = "gfx/crosshair_ring.tga";
-                                       }
-                                       if(autocvar_crosshair_ring_reload && weapon_clipsize) // forces there to be only an ammo ring
-                                       {
-                                               ring_value = bound(0, weapon_clipload / weapon_clipsize, 1);
-                                               ring_scale = autocvar_crosshair_ring_reload_size;
-                                               ring_alpha = autocvar_crosshair_ring_reload_alpha;
-                                               ring_rgb = wcross_color;
-                                               // Note: This is to stop Taoki from complaining that the image doesn't match all potential balances.
-                                               // if a new image for another weapon is added, add the code (and its respective file/value) here
-                                               if ((activeweapon == WEP_RIFLE) && (weapon_clipsize == 80))
-                                                       ring_image = "gfx/crosshair_ring_rifle.tga";
-                                               else
-                                                       ring_image = "gfx/crosshair_ring.tga";
-                                       }
-                                       // if in weapon switch animation, fade ring out/in
-                                       if(autocvar_crosshair_effect_time > 0)
-                                       {
-                                               f = (time - wcross_name_changestarttime) / autocvar_crosshair_effect_time;
-                                               if (!(f < 1))
-                                               {
-                                                       wcross_ring_prev = ((ring_image) ? TRUE : FALSE);
-                                               }
-                                               if(wcross_ring_prev)
-                                               {
-                                                       if(f < 1)
-                                                               ring_alpha *= fabs(1 - bound(0, f, 1));
-                                               }
-                                               else
-                                               {
-                                                       if(f < 1)
-                                                               ring_alpha *= bound(0, f, 1);
-                                               }
-                                       }
-                                       if (autocvar_crosshair_ring_inner && ring_inner_value) // lets draw a ring inside a ring so you can ring while you ring
-                                               DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_inner_image, ring_inner_value, ring_inner_rgb, wcross_alpha * ring_inner_alpha, DRAWFLAG_ADDITIVE);
-                                       if (ring_value)
-                                               DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_image, ring_value, ring_rgb, wcross_alpha * ring_alpha, DRAWFLAG_ADDITIVE);
-                               }
- #define CROSSHAIR_DO_BLUR(M,sz,wcross_name,wcross_alpha) \
-                               do \
-                               { \
-                                       if(wcross_blur > 0) \
-                                       { \
-                                               for(i = -2; i <= 2; ++i) \
-                                               for(j = -2; j <= 2; ++j) \
-                                               M(i,j,sz,wcross_name,wcross_alpha*0.04); \
-                                       } \
-                                       else \
-                                       { \
-                                               M(0,0,sz,wcross_name,wcross_alpha); \
-                                       } \
-                               } \
-                               while(0)
- #define CROSSHAIR_DRAW_SINGLE(i,j,sz,wcross_name,wcross_alpha) \
-                               drawpic(wcross_origin - ('0.5 0 0' * (sz * wcross_size_x + i * wcross_blur) + '0 0.5 0' * (sz * wcross_size_y + j * wcross_blur)), wcross_name, sz * wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
- #define CROSSHAIR_DRAW(sz,wcross_name,wcross_alpha) \
-                               CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,sz,wcross_name,wcross_alpha)
-                               if(time < wcross_name_changedonetime && wcross_name != wcross_name_goal_prev_prev && wcross_name_goal_prev_prev)
-                               {
-                                       f = (wcross_name_changedonetime - time) / (wcross_name_changedonetime - wcross_name_changestarttime);
-                                       wcross_size = draw_getimagesize(wcross_name_goal_prev_prev) * wcross_scale;
-                                       CROSSHAIR_DRAW(wcross_resolution_goal_prev_prev, wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev);
-                                       f = 1 - f;
-                               }
-                               else
-                               {
-                                       f = 1;
-                               }
-                               wcross_name_alpha_goal_prev = f;
-                               wcross_size = draw_getimagesize(wcross_name) * wcross_scale;
-                               CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f);
-                               if(autocvar_crosshair_dot)
-                               {
-                                       vector wcross_color_old;
-                                       wcross_color_old = wcross_color;
-                                       if((autocvar_crosshair_dot_color_custom) && (autocvar_crosshair_dot_color != "0"))
-                                               wcross_color = stov(autocvar_crosshair_dot_color);
-                                       CROSSHAIR_DRAW(wcross_resolution * autocvar_crosshair_dot_size, "gfx/crosshairdot.tga", f * autocvar_crosshair_dot_alpha);
-                                       // FIXME why don't we use wcross_alpha here?cl_notice_run();
-                                       wcross_color = wcross_color_old;
-                               }
-                       }
-               }
-               else
-               {
-                       wcross_scale_prev = 0;
-                       wcross_alpha_prev = 0;
-                       wcross_scale_goal_prev = 0;
-                       wcross_alpha_goal_prev = 0;
-                       wcross_changedonetime = 0;
-                       if(wcross_name_goal_prev)
-                               strunzone(wcross_name_goal_prev);
-                       wcross_name_goal_prev = string_null;
-                       if(wcross_name_goal_prev_prev)
-                               strunzone(wcross_name_goal_prev_prev);
-                       wcross_name_goal_prev_prev = string_null;
-                       wcross_name_changestarttime = 0;
-                       wcross_name_changedonetime = 0;
-                       wcross_name_alpha_goal_prev = 0;
-                       wcross_name_alpha_goal_prev_prev = 0;
-                       wcross_resolution_goal_prev = 0;
-                       wcross_resolution_goal_prev_prev = 0;
-               }
-       }
+       UpdateDamage();
+       UpdateCrosshair();
+       UpdateHitsound();
  
        if(NextFrameCommand)
        {
  
        if(autocvar__hud_configure)
                HUD_Panel_Mouse();
 +      else if(HUD_QuickMenu_IsOpened())
 +              HUD_QuickMenu_Mouse();
  
 -    if(hud && !intermission)
 +      if(hud && !intermission)
      {
          if(hud == HUD_SPIDERBOT)
              CSQC_SPIDER_HUD();
@@@ -1662,32 -1768,16 +1770,16 @@@ void CSQC_common_hud(void
        if(!(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS))
                Accuracy_LoadLevels();
  
-     HUD_Main(); // always run these functions for alpha checks
-     HUD_DrawScoreboard();
+       HUD_Main(); // always run these functions for alpha checks
+       HUD_DrawScoreboard();
  
-     if (scoreboard_active) // scoreboard/accuracy
-         HUD_Reset();
-     else if (intermission == 2) // map voting screen
-     {
-         HUD_FinaleOverlay();
-         HUD_Reset();
-     }
-       /*
-       switch(hud)
+       if (scoreboard_active) // scoreboard/accuracy
+               HUD_Reset();
+       else if (intermission == 2) // map voting screen
        {
-               case HUD_SPIDERBOT:
-                       CSQC_SPIDER_HUD();
-                       break;
-               case HUD_WAKIZASHI:
-                       CSQC_WAKIZASHI_HUD();
-                       break;
-         case HUD_BUMBLEBEE:
-             CSQC_BUMBLE_HUD();
-             break;
+               MapVote_Draw();
+               HUD_Reset();
        }
-       */
  }
  
  
index 4656c7867219ccaec7e47b493e12818d7f18b549,f06c5bfb3bd0f66e6dbc25ad67f201587b50a7c0..f983d6e56000e2586e6c2a03f2b6536bac6d7162
@@@ -57,13 -57,14 +57,14 @@@ float autocvar_cl_nogibs
  float autocvar_cl_orthoview;
  float autocvar_cl_orthoview_nofog;
  float autocvar_cl_particlegibs;
- float autocvar_cl_particles_oldnexbeam;
+ float autocvar_cl_particles_oldvortexbeam;
  float autocvar_cl_particles_quality;
  float autocvar_cl_projectiles_sloppy;
  float autocvar_cl_readpicture_force;
  var float autocvar_cl_reticle = 1;
- float autocvar_cl_reticle_item_nex;
- float autocvar_cl_reticle_item_normal;
+ var float autocvar_cl_reticle_normal_alpha = 1;
+ var float autocvar_cl_reticle_weapon = 1;
+ var float autocvar_cl_reticle_weapon_alpha = 1;
  float autocvar_cl_reticle_stretch;
  float autocvar_cl_spawn_event_particles;
  var float autocvar_cl_spawn_event_sound = 1;
@@@ -76,7 -77,8 +77,8 @@@ float autocvar_cl_stripcolorcodes
  var float autocvar_cl_vehicle_spiderbot_cross_alpha = 0.6;
  var float autocvar_cl_vehicle_spiderbot_cross_size = 1;
  var float autocvar_cl_vehicles_hud_tactical = 1;
- float autocvar_cl_velocityzoom;
+ float autocvar_cl_velocityzoom_enabled;
+ float autocvar_cl_velocityzoom_factor;
  var float autocvar_cl_velocityzoom_type = 3;
  float autocvar_cl_velocityzoom_speed;
  float autocvar_cl_velocityzoom_time;
@@@ -115,6 -117,7 +117,7 @@@ string autocvar_crosshair_hitindication
  float autocvar_crosshair_hitindication_speed;
  float autocvar_crosshair_hittest;
  float autocvar_crosshair_hittest_blur;
+ var float autocvar_crosshair_hittest_scale = 1.25;
  float autocvar_crosshair_hittest_showimpact;
  float autocvar_crosshair_per_weapon;
  float autocvar_crosshair_pickup;
@@@ -125,14 -128,18 +128,18 @@@ float autocvar_crosshair_ring_minelayer
  float autocvar_crosshair_ring_minelayer_alpha;
  float autocvar_crosshair_ring_hagar;
  float autocvar_crosshair_ring_hagar_alpha;
- float autocvar_crosshair_ring_nex;
- float autocvar_crosshair_ring_nex_alpha;
- float autocvar_crosshair_ring_nex_currentcharge_movingavg_rate;
- float autocvar_crosshair_ring_nex_currentcharge_scale;
- float autocvar_crosshair_ring_nex_inner_alpha;
- float autocvar_crosshair_ring_nex_inner_color_blue;
- float autocvar_crosshair_ring_nex_inner_color_green;
- float autocvar_crosshair_ring_nex_inner_color_red;
+ var float autocvar_crosshair_ring_vortex = 1;
+ var float autocvar_crosshair_ring_vortex_alpha = 0.15;
+ var float autocvar_crosshair_ring_vortex_currentcharge_movingavg_rate = 0.05;
+ var float autocvar_crosshair_ring_vortex_currentcharge_scale = 30;
+ var float autocvar_crosshair_ring_vortex_inner_alpha = 0.15;
+ var float autocvar_crosshair_ring_vortex_inner_color_blue = 0;
+ var float autocvar_crosshair_ring_vortex_inner_color_green = 0;
+ var float autocvar_crosshair_ring_vortex_inner_color_red = 0.8;
+ var float autocvar_crosshair_ring_arc = 1;
+ var vector autocvar_crosshair_ring_arc_hot_color = '1 0 0';
+ var float autocvar_crosshair_ring_arc_cold_alpha = 0.2;
+ var float autocvar_crosshair_ring_arc_hot_alpha = 0.5;
  float autocvar_crosshair_ring_size;
  float autocvar_crosshair_ring_reload;
  float autocvar_crosshair_ring_reload_alpha;
@@@ -268,6 -275,7 +275,7 @@@ float autocvar_hud_panel_notify_fadetim
  float autocvar_hud_panel_notify_flip;
  float autocvar_hud_panel_notify_fontsize;
  float autocvar_hud_panel_notify_time;
+ float autocvar_hud_panel_notify_icon_aspect;
  float autocvar_hud_panel_physics;
  float autocvar_hud_panel_physics_acceleration_progressbar_mode;
  float autocvar_hud_panel_physics_acceleration_progressbar_scale;
@@@ -290,6 -298,8 +298,8 @@@ float autocvar_hud_panel_powerups_baral
  float autocvar_hud_panel_powerups_flip;
  float autocvar_hud_panel_powerups_iconalign;
  float autocvar_hud_panel_powerups_progressbar;
+ float autocvar_hud_panel_buffs;
+ //float autocvar_hud_panel_buffs_iconalign;
  string autocvar_hud_panel_powerups_progressbar_shield;
  string autocvar_hud_panel_powerups_progressbar_strength;
  string autocvar_hud_panel_powerups_progressbar_superweapons;
@@@ -297,9 -307,6 +307,9 @@@ float autocvar_hud_panel_powerups_text
  float autocvar_hud_panel_pressedkeys;
  float autocvar_hud_panel_pressedkeys_aspect;
  float autocvar_hud_panel_pressedkeys_attack;
 +float autocvar_hud_panel_quickmenu_translatecommands;
 +string autocvar_hud_panel_quickmenu_file;
 +float autocvar_hud_panel_quickmenu_time;
  float autocvar_hud_panel_racetimer;
  float autocvar_hud_panel_radar;
  float autocvar_hud_panel_radar_foreground_alpha;
@@@ -324,6 -331,7 +334,7 @@@ float autocvar_hud_panel_weapons_ammo
  float autocvar_hud_panel_weapons_ammo_alpha;
  string autocvar_hud_panel_weapons_ammo_color;
  float autocvar_hud_panel_weapons_ammo_full_cells;
+ float autocvar_hud_panel_weapons_ammo_full_plasma;
  float autocvar_hud_panel_weapons_ammo_full_fuel;
  float autocvar_hud_panel_weapons_ammo_full_nails;
  float autocvar_hud_panel_weapons_ammo_full_rockets;
@@@ -344,9 -352,17 +355,19 @@@ float autocvar_hud_panel_weapons_timeou
  float autocvar_hud_panel_weapons_timeout_fadefgmin;
  var float autocvar_hud_panel_weapons_timeout_speed_in = 0.25;
  var float autocvar_hud_panel_weapons_timeout_speed_out = 0.75;
 +//float autocvar_hud_panel_quickmenu;
 +float autocvar_hud_panel_quickmenu_align;
+ vector autocvar_hud_progressbar_acceleration_color;
+ vector autocvar_hud_progressbar_acceleration_neg_color;
  float autocvar_hud_progressbar_alpha;
+ vector autocvar_hud_progressbar_armor_color;
+ vector autocvar_hud_progressbar_fuel_color;
+ vector autocvar_hud_progressbar_health_color;
+ vector autocvar_hud_progressbar_nexball_color;
+ vector autocvar_hud_progressbar_shield_color;
+ vector autocvar_hud_progressbar_speed_color;
+ vector autocvar_hud_progressbar_strength_color;
+ vector autocvar_hud_progressbar_superweapons_color;
  float autocvar_hud_showbinds;
  float autocvar_hud_showbinds_limit;
  float autocvar__hud_showbinds_reload;
@@@ -403,8 -419,12 +424,12 @@@ float autocvar_vid_conwidth
  float autocvar_vid_pixelheight;
  float autocvar_viewsize;
  float autocvar_cl_hitsound;
+ var float autocvar_cl_hitsound_min_pitch = 0.75; // minimal difference in minsta
+ var float autocvar_cl_hitsound_max_pitch = 1.5;
+ var float autocvar_cl_hitsound_nom_damage = 25;
  float autocvar_cl_hitsound_antispam_time;
  var float autocvar_cl_eventchase_death = 1;
+ var float autocvar_cl_eventchase_nexball = 1;
  var float autocvar_cl_eventchase_distance = 140;
  var float autocvar_cl_eventchase_speed = 1.3;
  var vector autocvar_cl_eventchase_maxs = '12 12 8';
@@@ -434,3 -454,12 +459,12 @@@ string autocvar__cl_playermodel
  float autocvar_cl_deathglow;
  float autocvar_developer_csqcentities;
  float autocvar_g_jetpack_attenuation;
+ var string autocvar_crosshair_hmg = ""; 
+ var vector autocvar_crosshair_hmg_color = '0.2 1.0 0.2';
+ var float autocvar_crosshair_hmg_alpha = 1;
+ var float autocvar_crosshair_hmg_size = 1;
+ var string autocvar_crosshair_rpc = ""; 
+ var vector autocvar_crosshair_rpc_color = '0.2 1.0 0.2';
+ var float autocvar_crosshair_rpc_alpha = 1;
+ var float autocvar_crosshair_rpc_size = 1;
+ float autocvar_cl_nade_timer;
diff --combined qcsrc/client/hud.qc
index deb6b01eeafa2cc1aa47da32325a4a4ab5568194,8a9aab304c4b7fecf0f09ecc3857660aa97a33b1..e5aea378043672730605a05abba17a2c36eb536e
@@@ -218,9 -218,9 +218,9 @@@ string MakeRaceString(float cp, float m
        if(histime < 0)
                return strcat(col, cpname);
        else if(hisname == "")
-               return strcat(col, sprintf(_("%s (%s)"), cpname, timestr));
+               return strcat(col, sprintf("%s (%s)", cpname, timestr));
        else
-               return strcat(col, sprintf(_("%s (%s %s)"), cpname, timestr, strcat(hisname, col, lapstr)));
+               return strcat(col, sprintf("%s (%s %s)", cpname, timestr, strcat(hisname, col, lapstr)));
  }
  
  // Check if the given name already exist in race rankings? In that case, where? (otherwise return 0)
@@@ -264,8 -264,8 +264,8 @@@ HUD panel
  
  // draw the background/borders
  #define HUD_Panel_DrawBg(theAlpha)\
- if(panel_bg != "0" && panel_bg != "")\
-       draw_BorderPicture(panel_pos - '1 1 0' * panel_bg_border, panel_bg, panel_size + '1 1 0' * 2 * panel_bg_border, panel_bg_color, panel_bg_alpha * theAlpha, '1 1 0' * (panel_bg_border/BORDER_MULTIPLIER))
+ if(panel.current_panel_bg != "0" && panel.current_panel_bg != "")\
+       draw_BorderPicture(panel_pos - '1 1 0' * panel_bg_border, panel.current_panel_bg, panel_size + '1 1 0' * 2 * panel_bg_border, panel_bg_color, panel_bg_alpha * theAlpha, '1 1 0' * (panel_bg_border/BORDER_MULTIPLIER))
  
  //basically the same code of draw_ButtonPicture and draw_VertButtonPicture for the menu
  void HUD_Panel_DrawProgressBar(vector theOrigin, vector theSize, string pic, float length_ratio, float vertical, float baralign, vector theColor, float theAlpha, float drawflag)
@@@ -408,42 -408,6 +408,6 @@@ float weaponorder_cmp(float i, float j
        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)
  }
  
- float GetAmmoStat(float i)
- {
-       switch(i)
-       {
-               case 0: return STAT_SHELLS;
-               case 1: return STAT_NAILS;
-               case 2: return STAT_ROCKETS;
-               case 3: return STAT_CELLS;
-               case 4: return STAT_FUEL;
-               default: return -1;
-       }
- }
- float GetAmmoTypeForWep(float i)
- {
-       switch(i)
-       {
-               case WEP_SHOTGUN: return 0;
-               case WEP_UZI: return 1;
-               case WEP_GRENADE_LAUNCHER: return 2;
-               case WEP_MINE_LAYER: return 2;
-               case WEP_ELECTRO: return 3;
-               case WEP_CRYLINK: return 3;
-               case WEP_HLAC: return 3;
-               case WEP_MINSTANEX: return 3;
-               case WEP_NEX: return 3;
-               case WEP_RIFLE: return 1;
-               case WEP_HAGAR: return 2;
-               case WEP_ROCKET_LAUNCHER: return 2;
-               case WEP_SEEKER: return 2;
-               case WEP_FIREBALL: return 4;
-               case WEP_HOOK: return 3;
-               default: return -1;
-       }
- }
  void HUD_Weapons(void)
  {
        // declarations
        float timein_effect_length = autocvar_hud_panel_weapons_timeout_speed_in; //? 0.375 : 0);
        float timeout_effect_length = autocvar_hud_panel_weapons_timeout_speed_out; //? 0.75 : 0);
  
-       float ammo_type, ammo_full;
+       float ammo_full;
        float barsize_x = 0, barsize_y = 0, baroffset_x = 0, baroffset_y = 0;
        vector ammo_color = '1 0 1';
        float ammo_alpha = 1;
  
        // update generic hud functions
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
  
                weapon_size_y = old_panel_size_y / rows;
  
                // change table values to include only the owned weapons
-               // weapon_size won't be changed
+               float columns_save = columns;
                if(weapon_count <= rows)
                {
                        rows = weapon_count;
                else
                        columns = ceil(weapon_count / rows);
  
+               // enlarge weapon_size to match desired aspect ratio in order to capitalize on panel space
+               if(columns < columns_save)
+                       weapon_size_x = min(old_panel_size_x / columns, aspect * weapon_size_y);
                // reduce size of the panel
                panel_size_x = columns * weapon_size_x;
                panel_size_y = rows * weapon_size_y;
                if(weapons_stat & WepSet_FromWeapon(self.weapon))
                {
                        // draw the weapon image
-                       drawpic_aspect_skin(weapon_pos, strcat("weapon", self.netname), weapon_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+                       drawpic_aspect_skin(weapon_pos, self.model2, weapon_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
  
                        // draw weapon label string
                        switch(autocvar_hud_panel_weapons_label)
                                        break;
  
                                case 3: // weapon name
-                                       drawstring(weapon_pos, self.netname, '1 1 0' * 0.5 * weapon_size_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+                                       drawstring(weapon_pos, strtolower(self.message), '1 1 0' * 0.5 * weapon_size_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
                                        break;
  
                                default: // nothing
                        }
  
                        // draw ammo status bar
-                       if(autocvar_hud_panel_weapons_ammo && self.weapon != WEP_TUBA && self.weapon != WEP_LASER && self.weapon != WEP_PORTO)
+                       if(autocvar_hud_panel_weapons_ammo && (self.ammo_field != ammo_none))
                        {
-                               a = 0;
-                               ammo_type = GetAmmoTypeForWep(self.weapon);
-                               if(ammo_type != -1)
-                                       a = getstati(GetAmmoStat(ammo_type)); // how much ammo do we have?
+                               a = getstati(GetAmmoStat(self.ammo_field)); // how much ammo do we have?
  
                                if(a > 0)
                                {
-                                       switch(ammo_type) {
-                                               case 0: ammo_full = autocvar_hud_panel_weapons_ammo_full_shells; break;
-                                               case 1: ammo_full = autocvar_hud_panel_weapons_ammo_full_nails; break;
-                                               case 2: ammo_full = autocvar_hud_panel_weapons_ammo_full_rockets; break;
-                                               case 3: ammo_full = autocvar_hud_panel_weapons_ammo_full_cells; break;
-                                               case 4: ammo_full = autocvar_hud_panel_weapons_ammo_full_fuel; break;
+                                       switch(self.ammo_field)
+                                       {
+                                               case ammo_shells:  ammo_full = autocvar_hud_panel_weapons_ammo_full_shells;  break;
+                                               case ammo_nails:   ammo_full = autocvar_hud_panel_weapons_ammo_full_nails;   break;
+                                               case ammo_rockets: ammo_full = autocvar_hud_panel_weapons_ammo_full_rockets; break;
+                                               case ammo_cells:   ammo_full = autocvar_hud_panel_weapons_ammo_full_cells;   break;
+                                               case ammo_plasma:  ammo_full = autocvar_hud_panel_weapons_ammo_full_plasma;  break;
+                                               case ammo_fuel:    ammo_full = autocvar_hud_panel_weapons_ammo_full_fuel;    break;
                                                default: ammo_full = 60;
                                        }
  
                                                weapon_pos_x + baroffset_x,
                                                weapon_pos_y + baroffset_y,
                                                barsize_x * bound(0, a/ammo_full, 1),
-                                               barsize_y);
-                                       drawpic_aspect_skin(weapon_pos, "weapon_ammo", weapon_size, ammo_color, ammo_alpha, DRAWFLAG_NORMAL);
+                                               barsize_y
+                                       );
+                                       drawpic_aspect_skin(
+                                               weapon_pos,
+                                               "weapon_ammo",
+                                               weapon_size,
+                                               ammo_color,
+                                               ammo_alpha,
+                                               DRAWFLAG_NORMAL
+                                       );
                                        drawresetcliparea();
                                }
                        }
                }
                else // draw a "ghost weapon icon" if you don't have the weapon
                {
-                       drawpic_aspect_skin(weapon_pos, strcat("weapon", self.netname), weapon_size, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL);
+                       drawpic_aspect_skin(weapon_pos, self.model2, weapon_size, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL);
                }
  
                // draw the complain message
  }
  
  // Ammo (#1)
- //
- // TODO: macro
- float GetAmmoItemCode(float i)
+ void DrawNadeScoreBar(vector myPos, vector mySize, vector color)
  {
-       switch(i)
-       {
-               case 0: return IT_SHELLS;
-               case 1: return IT_NAILS;
-               case 2: return IT_ROCKETS;
-               case 3: return IT_CELLS;
-               case 4: return IT_FUEL;
-               default: return -1;
-       }
+       
+       HUD_Panel_DrawProgressBar(
+               myPos + eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, 
+               mySize - eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, 
+               autocvar_hud_panel_ammo_progressbar_name, 
+               getstatf(STAT_NADE_BONUS_SCORE), 0, 0, color, 
+               autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
  }
  
string GetAmmoPicture(float i)
void DrawAmmoNades(vector myPos, vector mySize, float draw_expanding, float expand_time)
  {
-       switch(i)
+       float theAlpha = 1, a, b;
+       vector nade_color, picpos, numpos;
+       
+       nade_color = Nade_Color(getstati(STAT_NADE_BONUS_TYPE));
+       
+       a = getstatf(STAT_NADE_BONUS);
+       b = getstatf(STAT_NADE_BONUS_SCORE);
+       
+       if(autocvar_hud_panel_ammo_iconalign)
+       {
+               numpos = myPos;
+               picpos = myPos + eX * 2 * mySize_y;
+       }
+       else
        {
-               case 0: return "ammo_shells";
-               case 1: return "ammo_bullets";
-               case 2: return "ammo_rockets";
-               case 3: return "ammo_cells";
-               case 4: return "ammo_fuel";
-               default: return "";
+               numpos = myPos + eX * mySize_y;
+               picpos = myPos;
+       }
+       DrawNadeScoreBar(myPos, mySize, nade_color);
+       if(b > 0 || a > 0)
+       {
+               if(autocvar_hud_panel_ammo_text)
+                       drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
+               
+               if(draw_expanding)
+                       drawpic_aspect_skin_expanding(picpos, "nade_nbg", '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL, expand_time);
+                       
+               drawpic_aspect_skin(picpos, "nade_bg" , '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
+               drawpic_aspect_skin(picpos, "nade_nbg" , '1 1 0' * mySize_y, nade_color, panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
        }
  }
  
- void DrawAmmoItem(vector myPos, vector mySize, float itemcode, float currently_selected, float infinite_ammo)
+ void DrawAmmoItem(vector myPos, vector mySize, .float ammotype, float currently_selected, float infinite_ammo)
  {
-       float a;
-       if(autocvar__hud_configure)
+       float a = 0;
+       if(ammotype != ammo_none)
        {
-               currently_selected = (itemcode == 2); //rockets always selected
-               a = 31 + mod(itemcode*93, 128);
+               if(autocvar__hud_configure)
+               {
+                       currently_selected = (ammotype == ammo_rockets); //rockets always selected
+                       a = 60;
+               }
+               else
+               {
+                       // how much ammo do we have of this ammotype?
+                       a = getstati(GetAmmoStat(ammotype));
+               }
        }
        else
-               a = getstati(GetAmmoStat(itemcode)); // how much ammo do we have of type itemcode?
+       {
+               #if 0
+               infinite_ammo = TRUE;
+               #else
+               return; // just don't draw infinite ammo at all.
+               #endif
+       }
  
        vector color;
        if(infinite_ammo)
                picpos = myPos;
        }
  
-       if (currently_selected)
+       if(currently_selected)
                drawpic_aspect_skin(myPos, "ammo_current_bg", mySize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
  
-     if(a > 0 && autocvar_hud_panel_ammo_progressbar)
-         HUD_Panel_DrawProgressBar(myPos + eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, mySize - eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, autocvar_hud_panel_ammo_progressbar_name, a/autocvar_hud_panel_ammo_maxammo, 0, 0, color, autocvar_hud_progressbar_alpha * panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
+       if(a > 0 && autocvar_hud_panel_ammo_progressbar)
+               HUD_Panel_DrawProgressBar(myPos + eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, mySize - eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, autocvar_hud_panel_ammo_progressbar_name, a/autocvar_hud_panel_ammo_maxammo, 0, 0, color, autocvar_hud_progressbar_alpha * panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
  
-     if(autocvar_hud_panel_ammo_text)
-     {
-         if(a > 0 || infinite_ammo)
-             drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, color, panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
-         else // "ghost" ammo count
-             drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
-     }
+       if(autocvar_hud_panel_ammo_text)
+       {
+               if(a > 0 || infinite_ammo)
+                       drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, color, panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
+               else // "ghost" ammo count
+                       drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
+       }
        if(a > 0 || infinite_ammo)
-               drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
+               drawpic_aspect_skin(picpos, GetAmmoPicture(ammotype), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
        else // "ghost" ammo icon
-               drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
+               drawpic_aspect_skin(picpos, GetAmmoPicture(ammotype), '1 1 0' * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
  }
  
+ float nade_prevstatus;
+ float nade_prevframe;
+ float nade_statuschange_time;
  void HUD_Ammo(void)
  {
-     if(hud != HUD_NORMAL) return;
+       if(hud != HUD_NORMAL) return;
        if(!autocvar__hud_configure)
        {
                if(!autocvar_hud_panel_ammo) return;
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
  
        }
  
        float rows = 0, columns, row, column;
+       float nade_cnt = getstatf(STAT_NADE_BONUS), nade_score = getstatf(STAT_NADE_BONUS_SCORE);
+       float draw_nades = (nade_cnt > 0 || nade_score > 0), nade_statuschange_elapsedtime;
+       float total_ammo_count;
        vector ammo_size;
        if (autocvar_hud_panel_ammo_onlycurrent)
-               ammo_size = mySize;
+               total_ammo_count = 1;
        else
+               total_ammo_count = AMMO_COUNT;
+       if(draw_nades)
        {
-               rows = mySize_y/mySize_x;
-               rows = bound(1, floor((sqrt(4 * (3/1) * rows * AMMO_COUNT + rows * rows) + rows + 0.5) / 2), AMMO_COUNT);
-               //                               ^^^ ammo item aspect goes here
+               ++total_ammo_count;
+               if (nade_cnt != nade_prevframe)
+               {
+                       nade_statuschange_time = time;
+                       nade_prevstatus = nade_prevframe;
+                       nade_prevframe = nade_cnt;
+               }
+       }
+       else
+               nade_prevstatus = nade_prevframe = nade_statuschange_time = 0;
  
-               columns = ceil(AMMO_COUNT/rows);
+       rows = mySize_y/mySize_x;
+       rows = bound(1, floor((sqrt(4 * (3/1) * rows * (total_ammo_count) + rows * rows) + rows + 0.5) / 2), (total_ammo_count));
+       //                               ^^^ ammo item aspect goes here
  
-               ammo_size = eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows);
-       }
+       columns = ceil((total_ammo_count)/rows);
+       ammo_size = eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows);
+       
  
        local vector offset = '0 0 0'; // fteqcc sucks
        float newSize;
                ammo_size_y = newSize;
        }
  
-       float i, stat_items, currently_selected, infinite_ammo;
-       infinite_ammo = FALSE;
-       if (autocvar_hud_panel_ammo_onlycurrent)
+       float i;
+       float infinite_ammo = (getstati(STAT_ITEMS, 0, 24) & IT_UNLIMITED_WEAPON_AMMO);
+       row = column = 0;
+       if(autocvar_hud_panel_ammo_onlycurrent)
        {
                if(autocvar__hud_configure)
                {
-                       DrawAmmoItem(pos, ammo_size, 2, true, FALSE); //show rockets
+                       DrawAmmoItem(pos, ammo_size, ammo_rockets, TRUE, FALSE);
                }
                else
                {
-                       stat_items = getstati(STAT_ITEMS, 0, 24);
-                       if (stat_items & IT_UNLIMITED_WEAPON_AMMO)
-                               infinite_ammo = TRUE;
-                       for (i = 0; i < AMMO_COUNT; ++i) {
-                               currently_selected = stat_items & GetAmmoItemCode(i);
-                               if (currently_selected)
-                               {
-                                       DrawAmmoItem(pos, ammo_size, i, true, infinite_ammo);
-                                       break;
-                               }
-                       }
+                       DrawAmmoItem(
+                               pos,
+                               ammo_size,
+                               (get_weaponinfo(switchweapon)).ammo_field,
+                               TRUE,
+                               infinite_ammo
+                       );
+               }
+               ++row;
+               if(row >= rows)
+               {
+                       row = 0;
+                       column = column + 1;
                }
        }
        else
        {
-               stat_items = getstati(STAT_ITEMS, 0, 24);
-               if (stat_items & IT_UNLIMITED_WEAPON_AMMO)
-                       infinite_ammo = TRUE;
+               .float ammotype;
                row = column = 0;
-               for (i = 0; i < AMMO_COUNT; ++i) {
-                       currently_selected = stat_items & GetAmmoItemCode(i);
-                       DrawAmmoItem(pos + eX * column * (ammo_size_x + offset_x) + eY * row * (ammo_size_y + offset_y), ammo_size, i, currently_selected, infinite_ammo);
+               for(i = 0; i < AMMO_COUNT; ++i)
+               {
+                       ammotype = GetAmmoFieldFromNum(i);
+                       DrawAmmoItem(
+                               pos + eX * column * (ammo_size_x + offset_x) + eY * row * (ammo_size_y + offset_y),
+                               ammo_size,
+                               ammotype,
+                               ((get_weaponinfo(switchweapon)).ammo_field == ammotype),
+                               infinite_ammo
+                       );
                        ++row;
                        if(row >= rows)
                        {
                }
        }
  
+       if (draw_nades)
+       {
+               nade_statuschange_elapsedtime = time - nade_statuschange_time;
+               float f = bound(0, nade_statuschange_elapsedtime*2, 1);
+               DrawAmmoNades(pos + eX * column * (ammo_size_x + offset_x) + eY * row * (ammo_size_y + offset_y), ammo_size, nade_prevstatus < nade_cnt && nade_cnt != 0 && f < 1, f);
+       }
        draw_endBoldFont();
  }
  
@@@ -1155,7 -1204,6 +1204,6 @@@ void HUD_Powerups(void
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
  
                const float maxshield = 30;
                float shield = ceil(shield_time);
                if(autocvar_hud_panel_powerups_progressbar)
-               {
-                       HUD_Panel_GetProgressBarColor(shield);
-                       HUD_Panel_DrawProgressBar(pos + shield_offset, mySize, autocvar_hud_panel_powerups_progressbar_shield, shield/maxshield, is_vertical, shield_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
-               }
+                       HUD_Panel_DrawProgressBar(pos + shield_offset, mySize, autocvar_hud_panel_powerups_progressbar_shield, shield/maxshield, is_vertical, shield_baralign, autocvar_hud_progressbar_shield_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                if(autocvar_hud_panel_powerups_text)
                {
                        if(shield > 1)
                const float maxstrength = 30;
                float strength = ceil(strength_time);
                if(autocvar_hud_panel_powerups_progressbar)
-               {
-                       HUD_Panel_GetProgressBarColor(strength);
-                       HUD_Panel_DrawProgressBar(pos + strength_offset, mySize, autocvar_hud_panel_powerups_progressbar_strength, strength/maxstrength, is_vertical, strength_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
-               }
+                       HUD_Panel_DrawProgressBar(pos + strength_offset, mySize, autocvar_hud_panel_powerups_progressbar_strength, strength/maxstrength, is_vertical, strength_baralign, autocvar_hud_progressbar_strength_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                if(autocvar_hud_panel_powerups_text)
                {
                        if(strength > 1)
                const float maxsuperweapons = 30;
                float superweapons = ceil(superweapons_time);
                if(autocvar_hud_panel_powerups_progressbar)
-               {
-                       HUD_Panel_GetProgressBarColor(superweapons);
-                       HUD_Panel_DrawProgressBar(pos + superweapons_offset, mySize, autocvar_hud_panel_powerups_progressbar_superweapons, superweapons/maxsuperweapons, is_vertical, superweapons_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
-               }
+                       HUD_Panel_DrawProgressBar(pos + superweapons_offset, mySize, autocvar_hud_panel_powerups_progressbar_superweapons, superweapons/maxsuperweapons, is_vertical, superweapons_baralign, autocvar_hud_progressbar_superweapons_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                if(autocvar_hud_panel_powerups_text)
                {
                        if(superweapons > 1)
@@@ -1396,7 -1435,6 +1435,6 @@@ void HUD_HealthArmor(void
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
        mySize = panel_size;
                {
                        biggercount = "health";
                        if(autocvar_hud_panel_healtharmor_progressbar)
-                       {
-                               HUD_Panel_GetProgressBarColor(health);
-                               HUD_Panel_DrawProgressBar(pos, mySize, autocvar_hud_panel_healtharmor_progressbar_health, x/maxtotal, 0, (baralign == 1 || baralign == 2), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
-                       }
+                               HUD_Panel_DrawProgressBar(pos, mySize, autocvar_hud_panel_healtharmor_progressbar_health, x/maxtotal, 0, (baralign == 1 || baralign == 2), autocvar_hud_progressbar_health_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                        if(armor)
              if(autocvar_hud_panel_healtharmor_text)
                                drawpic_aspect_skin(pos + eX * mySize_x - eX * 0.5 * mySize_y, "armor", '0.5 0.5 0' * mySize_y, '1 1 1', panel_fg_alpha * armor / health, DRAWFLAG_NORMAL);
                {
                        biggercount = "armor";
                        if(autocvar_hud_panel_healtharmor_progressbar)
-                       {
-                               HUD_Panel_GetProgressBarColor(armor);
-                               HUD_Panel_DrawProgressBar(pos, mySize, autocvar_hud_panel_healtharmor_progressbar_armor, x/maxtotal, 0, (baralign == 1 || baralign == 2), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
-                       }
+                               HUD_Panel_DrawProgressBar(pos, mySize, autocvar_hud_panel_healtharmor_progressbar_armor, x/maxtotal, 0, (baralign == 1 || baralign == 2), autocvar_hud_progressbar_armor_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                        if(health)
              if(autocvar_hud_panel_healtharmor_text)
                                drawpic_aspect_skin(pos + eX * mySize_x - eX * 0.5 * mySize_y, "health", '0.5 0.5 0' * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
                        DrawNumIcon(pos, mySize, x, biggercount, 0, iconalign, HUD_Get_Num_Color(x, maxtotal), 1);
  
                if(fuel)
-               {
-                       HUD_Panel_GetProgressBarColor(fuel);
-                       HUD_Panel_DrawProgressBar(pos, eX * mySize_x + eY * 0.2 * mySize_y, "progressbar", fuel/100, 0, (baralign == 1 || baralign == 3), progressbar_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
-               }
+                       HUD_Panel_DrawProgressBar(pos, eX * mySize_x + eY * 0.2 * mySize_y, "progressbar", fuel/100, 0, (baralign == 1 || baralign == 3), autocvar_hud_progressbar_fuel_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
        }
        else
        {
                {
                        if(autocvar_hud_panel_healtharmor_progressbar)
                        {
-                               HUD_Panel_GetProgressBarColor(health);
                                float p_health, pain_health_alpha;
                                p_health = health;
                                pain_health_alpha = 1;
                                                if (time - health_damagetime < 1)
                                                {
                                                        float health_damagealpha = 1 - (time - health_damagetime)*(time - health_damagetime);
-                                                       HUD_Panel_DrawProgressBar(pos + health_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_health, health_beforedamage/maxhealth, is_vertical, health_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * health_damagealpha, DRAWFLAG_NORMAL);
+                                                       HUD_Panel_DrawProgressBar(pos + health_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_health, health_beforedamage/maxhealth, is_vertical, health_baralign, autocvar_hud_progressbar_health_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * health_damagealpha, DRAWFLAG_NORMAL);
                                                }
                                        }
                                        prev_health = health;
                                                pain_health_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ);
                                        }
                                }
-                               HUD_Panel_DrawProgressBar(pos + health_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_health, p_health/maxhealth, is_vertical, health_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * pain_health_alpha, DRAWFLAG_NORMAL);
+                               HUD_Panel_DrawProgressBar(pos + health_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_health, p_health/maxhealth, is_vertical, health_baralign, autocvar_hud_progressbar_health_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * pain_health_alpha, DRAWFLAG_NORMAL);
                        }
                        if(autocvar_hud_panel_healtharmor_text)
                                DrawNumIcon(pos + health_offset, mySize, health, "health", is_vertical, health_iconalign, HUD_Get_Num_Color(health, maxhealth), 1);
                {
                        if(autocvar_hud_panel_healtharmor_progressbar)
                        {
-                               HUD_Panel_GetProgressBarColor(armor);
                                float p_armor;
                                p_armor = armor;
                                if (autocvar_hud_panel_healtharmor_progressbar_gfx)
                                                if (time - armor_damagetime < 1)
                                                {
                                                        float armor_damagealpha = 1 - (time - armor_damagetime)*(time - armor_damagetime);
-                                                       HUD_Panel_DrawProgressBar(pos + armor_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_armor, armor_beforedamage/maxarmor, is_vertical, armor_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * armor_damagealpha, DRAWFLAG_NORMAL);
+                                                       HUD_Panel_DrawProgressBar(pos + armor_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_armor, armor_beforedamage/maxarmor, is_vertical, armor_baralign, autocvar_hud_progressbar_armor_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * armor_damagealpha, DRAWFLAG_NORMAL);
                                                }
                                        }
                                        prev_armor = armor;
                                }
-                               HUD_Panel_DrawProgressBar(pos + armor_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_armor, p_armor/maxarmor, is_vertical, armor_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+                               HUD_Panel_DrawProgressBar(pos + armor_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_armor, p_armor/maxarmor, is_vertical, armor_baralign, autocvar_hud_progressbar_armor_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                        }
                        if(autocvar_hud_panel_healtharmor_text)
                                DrawNumIcon(pos + armor_offset, mySize, armor, "armor", is_vertical, armor_iconalign, HUD_Get_Num_Color(armor, maxarmor), 1);
                                mySize_x *= 2; //restore full panel size
                        else if (panel_ar < 1/4)
                                mySize_y *= 2; //restore full panel size
-                       HUD_Panel_GetProgressBarColor(fuel);
-                       HUD_Panel_DrawProgressBar(pos, mySize, "progressbar", fuel/100, is_vertical, fuel_baralign, progressbar_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
+                       HUD_Panel_DrawProgressBar(pos, mySize, "progressbar", fuel/100, is_vertical, fuel_baralign, autocvar_hud_progressbar_fuel_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
                }
        }
  }
  
  void HUD_Notify_Push(string icon, string attacker, string victim)
  {
-       if(icon != "")
-       {
-               --kn_index;
-               if (kn_index == -1) { kn_index = KN_MAX_ENTRIES-1; }
-               notify_times[kn_index] = time;
+       if (icon == "")
+               return;
+       ++notify_count;
+       --notify_index;
  
-               // icon
-               if(notify_icon[kn_index]) { strunzone(notify_icon[kn_index]); }
-               notify_icon[kn_index] = strzone(icon);
+       if (notify_index == -1)
+               notify_index = NOTIFY_MAX_ENTRIES-1;
  
-               // attacker
-               if(notify_attackers[kn_index]) { strunzone(notify_attackers[kn_index]); }
-               notify_attackers[kn_index] = strzone(attacker);
+       // Free old strings
+       if (notify_attackers[notify_index])
+               strunzone(notify_attackers[notify_index]);
  
-               // victim
-               if(notify_victims[kn_index]) { strunzone(notify_victims[kn_index]); }
-               notify_victims[kn_index] = strzone(victim);
+       if (notify_victims[notify_index])
+               strunzone(notify_victims[notify_index]);
+       if (notify_icons[notify_index])
+               strunzone(notify_icons[notify_index]);
+       // Allocate new strings
+       if (victim != "")
+       {
+               notify_attackers[notify_index] = strzone(attacker);
+               notify_victims[notify_index] = strzone(victim);
        }
+       else
+       {
+               // In case of a notification without a victim, the attacker
+               // is displayed on the victim's side. Instead of special
+               // treatment later on, we can simply switch them here.
+               notify_attackers[notify_index] = string_null;
+               notify_victims[notify_index] = strzone(attacker);
+       }
+       notify_icons[notify_index] = strzone(icon);
+       notify_times[notify_index] = time;
  }
  
  void HUD_Notify(void)
  {
-       if(!autocvar__hud_configure)
-       {
-               if(!autocvar_hud_panel_notify) return;
-       }
+       if (!autocvar__hud_configure)
+               if (!autocvar_hud_panel_notify)
+                       return;
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
-       vector pos, mySize;
-       pos = panel_pos;
-       mySize = panel_size;
        HUD_Panel_DrawBg(1);
-       if(panel_bg_padding)
+       if (!autocvar__hud_configure)
+               if (notify_count == 0)
+                       return;
+       vector pos, size;
+       pos  = panel_pos;
+       size = panel_size;
+       if (panel_bg_padding)
        {
-               pos += '1 1 0' * panel_bg_padding;
-               mySize -= '2 2 0' * panel_bg_padding;
+               pos  += '1 1 0' * panel_bg_padding;
+               size -= '2 2 0' * panel_bg_padding;
        }
  
-       float entries, height;
-       entries = bound(1, floor(KN_MAX_ENTRIES * mySize_y/mySize_x), KN_MAX_ENTRIES);
-       height = mySize_y/entries;
+       float fade_start = max(0, autocvar_hud_panel_notify_time);
+       float fade_time = max(0, autocvar_hud_panel_notify_fadetime);
+       float icon_aspect = max(1, autocvar_hud_panel_notify_icon_aspect);
  
-       vector fontsize;
-       float fontheight = height * autocvar_hud_panel_notify_fontsize;
-       fontsize = '0.5 0.5 0' * fontheight;
+       float entry_count = bound(1, floor(NOTIFY_MAX_ENTRIES * size_y / size_x), NOTIFY_MAX_ENTRIES);
+       float entry_height = size_y / entry_count;
  
-       float a;
-       float when;
-       when = autocvar_hud_panel_notify_time;
-       float fadetime;
-       fadetime = autocvar_hud_panel_notify_fadetime;
+       float panel_width_half = size_x * 0.5;
+       float icon_width_half = entry_height * icon_aspect / 2;
+       float name_maxwidth = panel_width_half - icon_width_half - size_x * NOTIFY_ICON_MARGIN;
  
-       vector pos_attacker, pos_victim, pos_icon;
-       float width_attacker;
+       vector font_size = '0.5 0.5 0' * entry_height * autocvar_hud_panel_notify_fontsize;
+       vector icon_size = (eX * icon_aspect + eY) * entry_height;
+       vector icon_left = eX * (panel_width_half - icon_width_half);
+       vector attacker_right = eX * name_maxwidth;
+       vector victim_left = eX * (size_x - name_maxwidth);
+       vector attacker_pos, victim_pos, icon_pos;
        string attacker, victim, icon;
+       float i, j, count, step, limit, alpha;
  
-       float i, j, step, limit;
-       if(autocvar_hud_panel_notify_flip) //order items from the top down
+       if (autocvar_hud_panel_notify_flip)
        {
+               // Order items from the top down
                i = 0;
                step = +1;
-               limit = entries;
+               limit = entry_count;
        }
-       else //order items from the bottom up
+       else
        {
-               i = entries - 1;
+               // Order items from the bottom up
+               i = entry_count - 1;
                step = -1;
                limit = -1;
        }
  
-       for(j = kn_index;  i != limit;  i += step, ++j)
+       for (j = notify_index, count = 0; i != limit; i += step, ++j, ++count)
        {
                if(autocvar__hud_configure)
                {
-                       if (step == +1)
-                               a = i;
-                       else // inverse order
-                               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);
-                       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;
+                       attacker = sprintf(_("Player %d"), count + 1);
+                       victim = sprintf(_("Player %d"), count + 2);
+                       icon = get_weaponinfo(min(WEP_FIRST + count * 2, WEP_LAST)).model2;
+                       alpha = bound(0, 1.2 - count / entry_count, 1);
                }
                else
                {
-                       if (j == KN_MAX_ENTRIES)
+                       if (j == NOTIFY_MAX_ENTRIES)
                                j = 0;
  
-                       if(notify_times[j] + when > time)
-                               a = 1;
-                       else if(fadetime)
+                       if (notify_times[j] + fade_start > time)
+                               alpha = 1;
+                       else if (fade_time != 0)
                        {
-                               a = bound(0, (notify_times[j] + when + fadetime - time) / fadetime, 1);
-                               if(!a)
-                               {
+                               alpha = bound(0, (notify_times[j] + fade_start + fade_time - time) / fade_time, 1);
+                               if (alpha == 0)
                                        break;
-                               }
                        }
                        else
-                       {
                                break;
-                       }
  
                        attacker = notify_attackers[j];
                        victim = notify_victims[j];
-                       icon = notify_icon[j];
+                       icon = notify_icons[j];
                }
  
-               //type = notify_deathtype[j];
-               //w = DEATH_WEAPONOF(type);
-               if(icon != "")
+               if (icon != "" && victim != "")
                {
-                       if((attacker != "") && (victim == ""))
-                       {
-                               // 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;
+                       vector name_top = eY * (i * entry_height + 0.5 * (entry_height - font_size_y));
  
-                               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((attacker != "") && (victim != ""))
+                       icon_pos = pos + icon_left + eY * i * entry_height;
+                       drawpic_aspect_skin(icon_pos, icon, icon_size, '1 1 1', panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
+                       victim = textShortenToWidth(victim, name_maxwidth, font_size, stringwidth_colors);
+                       victim_pos = pos + victim_left + name_top;
+                       drawcolorcodedstring(victim_pos, victim, font_size, panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
+                       if (attacker != "")
                        {
-                               // 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)));
-                               pos_icon = pos + eX * 0.5 * 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);
-                               drawcolorcodedstring(pos_victim, victim, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL);
+                               attacker = textShortenToWidth(attacker, name_maxwidth, font_size, stringwidth_colors);
+                               attacker_pos = pos + attacker_right - eX * stringwidth(attacker, TRUE, font_size) + name_top;
+                               drawcolorcodedstring(attacker_pos, attacker, font_size, panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
                        }
                }
        }
+       notify_count = count;
  }
  
  // Timer (#5)
@@@ -1786,7 -1817,6 +1817,6 @@@ void HUD_Timer(void
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
  
@@@ -1850,11 -1880,15 +1880,15 @@@ void HUD_Radar(void
                {
                        if (autocvar_hud_panel_radar == 0) return;
                        if (autocvar_hud_panel_radar != 2 && !teamplay) return;
+                       if(radar_panel_modified)
+                       {
+                               panel.update_time = time; // forces reload of panel attributes
+                               radar_panel_modified = false;
+                       }
                }
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        float f = 0;
  
                panel_pos_x = (vid_conwidth - panel_size_x) / 2;
                panel_pos_y = (vid_conheight - panel_size_y) / 2;
  
+               string panel_bg;
                panel_bg = strcat(hud_skin_path, "/border_default"); // always use the default border when maximized
-               if(precache_pic(panel_bg) == "") { panel_bg = "gfx/hud/default/border_default"; } // fallback
+               if(precache_pic(panel_bg) == "")
+                       panel_bg = "gfx/hud/default/border_default"; // fallback
+               if(!radar_panel_modified && panel_bg != panel.current_panel_bg)
+                       radar_panel_modified = true;
+               if(panel.current_panel_bg)
+                       strunzone(panel.current_panel_bg);
+               panel.current_panel_bg = strzone(panel_bg);
  
                switch(hud_panel_radar_maximized_zoommode)
                {
  // Score (#7)
  //
  void HUD_UpdatePlayerTeams();
- void HUD_Score_Rankings(vector pos, vector mySize, entity me, float team_count)
+ void HUD_Score_Rankings(vector pos, vector mySize, entity me)
  {
        float score;
        entity tm = world, pl;
@@@ -2146,7 -2187,6 +2187,6 @@@ void HUD_Score(void
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
        mySize = panel_size;
        vector distribution_color;
        entity tm, pl, me;
  
- #ifdef COMPAT_XON050_ENGINE
-       me = (spectatee_status > 0) ? playerslots[spectatee_status - 1] : playerslots[player_localentnum - 1];
- #else
        me = playerslots[player_localentnum - 1];
- #endif
  
        if((scores_flags[ps_primary] & SFL_TIME) && !teamplay) { // race/cts record display on HUD
                string timer, distrtimer;
        } else if (!teamplay) { // non-teamgames
                if ((spectatee_status == -1 && !autocvar__hud_configure) || autocvar_hud_panel_score_rankings)
                {
-                       HUD_Score_Rankings(pos, mySize, me, 0);
+                       HUD_Score_Rankings(pos, mySize, me);
                        return;
                }
                // me vector := [team/connected frags id]
                drawstring_aspect(pos + eX * 0.75 * mySize_x, distribution_str, eX * 0.25 * mySize_x + eY * (1/3) * mySize_y, distribution_color, panel_fg_alpha, DRAWFLAG_NORMAL);
                draw_endBoldFont();
        } else { // teamgames
-               float scores_count = 0, row, column, rows = 0, columns = 0;
+               float row, column, rows = 0, columns = 0;
                local noref vector offset = '0 0 0';
                vector score_pos, score_size; //for scores other than myteam
-               if (spectatee_status == -1 || autocvar_hud_panel_score_rankings)
+               if(autocvar_hud_panel_score_rankings)
+               {
+                       HUD_Score_Rankings(pos, mySize, me);
+                       return;
+               }
+               if(spectatee_status == -1)
                {
-                       for(tm = teams.sort_next; tm, tm.team != NUM_SPECTATOR; tm = tm.sort_next)
-                               ++scores_count;
-                       if (autocvar_hud_panel_score_rankings)
-                       {
-                               HUD_Score_Rankings(pos, mySize, me, scores_count);
-                               return;
-                       }
                        rows = mySize_y/mySize_x;
-                       rows = bound(1, floor((sqrt(4 * (3/1) * rows * scores_count + rows * rows) + rows + 0.5) / 2), scores_count);
+                       rows = bound(1, floor((sqrt(4 * (3/1) * rows * team_count + rows * rows) + rows + 0.5) / 2), team_count);
                        //                               ^^^ ammo item aspect goes here
  
-                       columns = ceil(scores_count/rows);
+                       columns = ceil(team_count/rows);
  
                        score_size = eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows);
  
@@@ -2341,7 -2375,6 +2375,6 @@@ void HUD_RaceTimer (void
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
  
@@@ -2542,7 -2575,6 +2575,6 @@@ void HUD_Vote(void
                return;
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        if(uid2name_dialog)
        {
@@@ -2693,11 -2725,6 +2725,6 @@@ void DrawCAItem(vector myPos, vector my
  void HUD_Mod_CA(vector myPos, vector mySize)
  {
        mod_active = 1; // required in each mod function that always shows something
-       entity tm;
-       float teams_count = 0;
-       for(tm = teams.sort_next; tm; tm = tm.sort_next)
-               if(tm.team != NUM_SPECTATOR)
-                       ++teams_count;
  
        float layout;
        if(gametype == MAPINFO_TYPE_CA)
        float rows, columns, aspect_ratio;
        rows = mySize_y/mySize_x;
        aspect_ratio = (layout) ? 2 : 1;
-       rows = bound(1, floor((sqrt((4 * aspect_ratio * teams_count + rows) * rows) + rows + 0.5) / 2), teams_count);
-       columns = ceil(teams_count/rows);
+       rows = bound(1, floor((sqrt((4 * aspect_ratio * team_count + rows) * rows) + rows + 0.5) / 2), team_count);
+       columns = ceil(team_count/rows);
  
        int i;
        float row = 0, column = 0;
        vector pos, itemSize;
        itemSize = eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows);
-       for(i=0; i<teams_count; ++i)
+       for(i=0; i<team_count; ++i)
        {
                pos = myPos + eX * column * itemSize_x + eY * row * itemSize_y;
  
@@@ -3087,18 -3114,13 +3114,13 @@@ void HUD_Mod_NexBall(vector pos, vecto
        //Manage the progress bar if any
        if (nb_pb_starttime > 0)
        {
-               dt = mod(time - nb_pb_starttime, nb_pb_period);
+               dt = (time - nb_pb_starttime) % nb_pb_period;
                // one period of positive triangle
                p = 2 * dt / nb_pb_period;
                if (p > 1)
                        p = 2 - p;
  
-               //Draw the filling
-               HUD_Panel_GetProgressBarColor(nexball);
-               if(mySize_x > mySize_y)
-                       HUD_Panel_DrawProgressBar(pos, mySize, "progressbar", p, 0, 0, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
-               else
-                       HUD_Panel_DrawProgressBar(pos, mySize, "progressbar", p, 1, 0, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+               HUD_Panel_DrawProgressBar(pos, mySize, "progressbar", p, (mySize_x <= mySize_y), 0, autocvar_hud_progressbar_nexball_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
        }
  
        if (stat_items & IT_KEY1)
@@@ -3324,24 -3346,19 +3346,19 @@@ void DrawDomItem(vector myPos, vector m
  void HUD_Mod_Dom(vector myPos, vector mySize)
  {
        mod_active = 1; // required in each mod function that always shows something
-       entity tm;
-       float teams_count = 0;
-       for(tm = teams.sort_next; tm; tm = tm.sort_next)
-               if(tm.team != NUM_SPECTATOR)
-                       ++teams_count;
  
        float layout = autocvar_hud_panel_modicons_dom_layout;
        float rows, columns, aspect_ratio;
        rows = mySize_y/mySize_x;
        aspect_ratio = (layout) ? 3 : 1;
-       rows = bound(1, floor((sqrt((4 * aspect_ratio * teams_count + rows) * rows) + rows + 0.5) / 2), teams_count);
-       columns = ceil(teams_count/rows);
+       rows = bound(1, floor((sqrt((4 * aspect_ratio * team_count + rows) * rows) + rows + 0.5) / 2), team_count);
+       columns = ceil(team_count/rows);
  
        int i;
        float row = 0, column = 0;
        vector pos, itemSize;
        itemSize = eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows);
-       for(i=0; i<teams_count; ++i)
+       for(i=0; i<team_count; ++i)
        {
                pos = myPos + eX * column * itemSize_x + eY * row * itemSize_y;
  
        }
  }
  
+ void HUD_ModIcons_SetFunc()
+ {
+       switch(gametype)
+       {
+               case MAPINFO_TYPE_KEYHUNT:              HUD_ModIcons_GameType = HUD_Mod_KH; break;
+               case MAPINFO_TYPE_CTF:                  HUD_ModIcons_GameType = HUD_Mod_CTF; break;
+               case MAPINFO_TYPE_NEXBALL:              HUD_ModIcons_GameType = HUD_Mod_NexBall; break;
+               case MAPINFO_TYPE_CTS:
+               case MAPINFO_TYPE_RACE:         HUD_ModIcons_GameType = HUD_Mod_Race; break;
+               case MAPINFO_TYPE_CA:
+               case MAPINFO_TYPE_FREEZETAG:    HUD_ModIcons_GameType = HUD_Mod_CA; break;
+               case MAPINFO_TYPE_DOMINATION:   HUD_ModIcons_GameType = HUD_Mod_Dom; break;
+               case MAPINFO_TYPE_KEEPAWAY:     HUD_ModIcons_GameType = HUD_Mod_Keepaway; break;
+       }
+ }
  float mod_prev; // previous state of mod_active to check for a change
  float mod_alpha;
  float mod_change; // "time" when mod_active changed
@@@ -3365,18 -3398,13 +3398,13 @@@ void HUD_ModIcons(void
        if(!autocvar__hud_configure)
        {
                if(!autocvar_hud_panel_modicons) return;
-               if (gametype != MAPINFO_TYPE_CTF && gametype != MAPINFO_TYPE_KEYHUNT && gametype != MAPINFO_TYPE_NEXBALL && gametype != MAPINFO_TYPE_CTS && gametype != MAPINFO_TYPE_RACE && gametype != MAPINFO_TYPE_CA && gametype != MAPINFO_TYPE_FREEZETAG && gametype != MAPINFO_TYPE_KEEPAWAY && gametype != MAPINFO_TYPE_DOMINATION) return;
+               if(!HUD_ModIcons_GameType) return;
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
  
-       vector pos, mySize;
-       pos = panel_pos;
-       mySize = panel_size;
        if(mod_active != mod_prev) {
                mod_change = time;
                mod_prev = mod_active;
  
        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;
        }
  
-       // these MUST be ran in order to update mod_active
-       if(gametype == MAPINFO_TYPE_KEYHUNT)
-               HUD_Mod_KH(pos, mySize);
-       else if(gametype == MAPINFO_TYPE_CTF || autocvar__hud_configure)
-               HUD_Mod_CTF(pos, mySize); // forcealpha only needed for ctf icons, as only they are shown in config mode
-       else if(gametype == MAPINFO_TYPE_NEXBALL)
-               HUD_Mod_NexBall(pos, mySize);
-       else if(gametype == MAPINFO_TYPE_CTS || gametype == MAPINFO_TYPE_RACE)
-               HUD_Mod_Race(pos, mySize);
-       else if(gametype == MAPINFO_TYPE_CA || gametype == MAPINFO_TYPE_FREEZETAG)
-               HUD_Mod_CA(pos, mySize);
-       else if(gametype == MAPINFO_TYPE_DOMINATION)
-               HUD_Mod_Dom(pos, mySize);
-       else if(gametype == MAPINFO_TYPE_KEEPAWAY)
-               HUD_Mod_Keepaway(pos, mySize);
+       if(autocvar__hud_configure)
+               HUD_Mod_CTF(panel_pos, panel_size);
+       else
+               HUD_ModIcons_GameType(panel_pos, panel_size);
  
        draw_endBoldFont();
  }
@@@ -3426,7 -3443,6 +3443,6 @@@ void HUD_PressedKeys(void
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
        mySize = panel_size;
@@@ -3494,24 -3510,32 +3510,32 @@@ void HUD_Chat(void
                        return;
                }
                if(autocvar__con_chat_maximized)
+               {
                        if(!hud_draw_maximized) return;
+               }
+               else if(chat_panel_modified)
+               {
+                       panel.update_time = time; // forces reload of panel attributes
+                       chat_panel_modified = false;
+               }
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        if(autocvar__con_chat_maximized && !autocvar__hud_configure) // draw at full screen height if maximized
        {
                panel_pos_y = panel_bg_border;
                panel_size_y = vid_conheight - panel_bg_border * 2;
-               if(panel_bg == "0") // force a border when maximized
+               if(panel.current_panel_bg == "0") // force a border when maximized
                {
-                       if(precache_pic(panel_bg) == "") {
-                               panel_bg = strcat(hud_skin_path, "/border_default");
-                               if(precache_pic(panel_bg) == "") {
-                                       panel_bg = "gfx/hud/default/border_default";
-                               }
-                       }
+                       string panel_bg;
+                       panel_bg = strcat(hud_skin_path, "/border_default");
+                       if(precache_pic(panel_bg) == "")
+                               panel_bg = "gfx/hud/default/border_default";
+                       if(panel.current_panel_bg)
+                               strunzone(panel.current_panel_bg);
+                       panel.current_panel_bg = strzone(panel_bg);
+                       chat_panel_modified = true;
                }
                panel_bg_alpha = max(0.75, panel_bg_alpha); // force an theAlpha of at least 0.75
        }
@@@ -3572,7 -3596,6 +3596,6 @@@ void HUD_EngineInfo(void
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
        mySize = panel_size;
@@@ -3633,7 -3656,6 +3656,6 @@@ void HUD_InfoMessages(void
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
        mySize = panel_size;
                        if(spectatee_status == -1)
                                s = _("^1Observing");
                        else
- #ifdef COMPAT_XON050_ENGINE
-                               s = sprintf(_("^1Spectating: ^7%s"), GetPlayerName(spectatee_status - 1));
- #else
                                s = sprintf(_("^1Spectating: ^7%s"), GetPlayerName(player_localentnum - 1));
- #endif
                        drawInfoMessage(s)
  
                        if(spectatee_status == -1)
                }
  
                string blinkcolor;
-               if(mod(time, 1) >= 0.5)
+               if(time % 1 >= 0.5)
                        blinkcolor = "^1";
                else
                        blinkcolor = "^3";
@@@ -3820,7 -3838,6 +3838,6 @@@ void HUD_Physics(void
        }
  
        HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
  
        //draw speed
        if(speed)
        if(autocvar_hud_panel_physics_progressbar == 1 || autocvar_hud_panel_physics_progressbar == 2)
-       {
-               HUD_Panel_GetProgressBarColor(speed);
-               HUD_Panel_DrawProgressBar(panel_pos + speed_offset, panel_size, "progressbar", speed/max_speed, 0, speed_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
-       }
+               HUD_Panel_DrawProgressBar(panel_pos + speed_offset, panel_size, "progressbar", speed/max_speed, 0, speed_baralign, autocvar_hud_progressbar_speed_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
        vector tmp_offset = '0 0 0', tmp_size = '0 0 0';
        if (autocvar_hud_panel_physics_text == 1 || autocvar_hud_panel_physics_text == 2)
        {
                                        peak_offset_x = (1 - min(top_speed, max_speed)/max_speed) * panel_size_x;
                  else // if (speed_baralign == 2)
                      peak_offset_x = min(top_speed, max_speed)/max_speed * panel_size_x * 0.5;
-                               //if speed is not 0 the speed progressbar already fetched the color
-                               if (speed == 0)
-                                       HUD_Panel_GetProgressBarColor(speed);
                                peak_size_x = floor(panel_size_x * 0.01 + 1.5);
                  peak_size_y = panel_size_y;
                  if (speed_baralign == 2) // draw two peaks, on both sides
                  {
-                     drawfill(panel_pos + speed_offset + eX * (0.5 * panel_size_x + peak_offset_x - peak_size_x), peak_size, progressbar_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
-                     drawfill(panel_pos + speed_offset + eX * (0.5 * panel_size_x - peak_offset_x + peak_size_x), peak_size, progressbar_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+                     drawfill(panel_pos + speed_offset + eX * (0.5 * panel_size_x + peak_offset_x - peak_size_x), peak_size, autocvar_hud_progressbar_speed_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+                     drawfill(panel_pos + speed_offset + eX * (0.5 * panel_size_x - peak_offset_x + peak_size_x), peak_size, autocvar_hud_progressbar_speed_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                  }
                  else
-                     drawfill(panel_pos + speed_offset + eX * (peak_offset_x - peak_size_x), peak_size, progressbar_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+                     drawfill(panel_pos + speed_offset + eX * (peak_offset_x - peak_size_x), peak_size, autocvar_hud_progressbar_speed_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                        }
  
                        //top speed
        if(acceleration)
        if(autocvar_hud_panel_physics_progressbar == 1 || autocvar_hud_panel_physics_progressbar == 3)
        {
-               if (acceleration < 0)
-                       HUD_Panel_GetProgressBarColor(acceleration_neg);
+               vector progressbar_color;
+               if(acceleration < 0)
+                       progressbar_color = autocvar_hud_progressbar_acceleration_neg_color;
                else
-                       HUD_Panel_GetProgressBarColor(acceleration);
+                       progressbar_color = autocvar_hud_progressbar_acceleration_color;
  
                f = acceleration/autocvar_hud_panel_physics_acceleration_max;
                if (autocvar_hud_panel_physics_acceleration_progressbar_nonlinear)
@@@ -4205,9 -4217,9 +4217,9 @@@ void HUD_CenterPrint (void
                {
                        float r;
                        r = random();
-                       if (r > 0.9)
+                       if (r > 0.75)
                                centerprint_generic(floor(r*1000), strcat(sprintf("^3Countdown message at time %s", seconds_tostring(time)), ", seconds left: ^COUNT"), 1, 10);
-                       else if (r > 0.8)
+                       else if (r > 0.5)
                                centerprint_generic(0, sprintf("^1Multiline message at time %s that\n^1lasts longer than normal", seconds_tostring(time)), 20, 0);
                        else
                                centerprint_hud(sprintf("Message at time %s", seconds_tostring(time)));
                }
        }
  
+       // this panel fades only when the menu does
+       float hud_fade_alpha_save = 0;
+       if(scoreboard_fade_alpha)
+       {
+               hud_fade_alpha_save = hud_fade_alpha;
+               hud_fade_alpha = 1 - autocvar__menu_alpha;
+       }
        HUD_Panel_UpdateCvars();
  
-       // this panel doesn't fade when showing the scoreboard
-       if(autocvar__menu_alpha)
-               HUD_Panel_ApplyFadeAlpha();
        if(scoreboard_fade_alpha)
        {
+               hud_fade_alpha = hud_fade_alpha_save;
                // move the panel below the scoreboard
                if (scoreboard_bottom >= 0.96 * vid_conheight)
                        return;
                else // Expiring soon, so fade it out.
                        a = (centerprint_expire_time[j] - time) / max(0.0001, autocvar_hud_panel_centerprint_fade_out);
  
-               if (a <= 0.5/255.0)  // Guaranteed invisible - don't show.
+               // while counting down show it anyway in order to hold the current message position
+               if (a <= 0.5/255.0 && centerprint_countdown_num[j] == 0)  // Guaranteed invisible - don't show.
                        continue;
                if (a > 1)
                        a = 1;
        }
  }
  
- // QuickMenu (#17)
+ // Buffs (#18)
+ //
+ void HUD_Buffs(void)
+ {
+       float buffs = getstati(STAT_BUFFS, 0, 24);
+       if(!autocvar__hud_configure)
+       {
+               if(!autocvar_hud_panel_buffs) return;
+               if(spectatee_status == -1) return;
+               if(getstati(STAT_HEALTH) <= 0) return;
+               if(!buffs) return;
+       }
+       else
+       {
+               buffs = Buff_Type_first.items; // force first buff
+       }
+       
+       float b = 0; // counter to tell other functions that we have buffs
+       entity e;
+       string s = "";
+       for(e = Buff_Type_first; e; e = e.enemy) if(buffs & e.items)
+       {
+               ++b;
+               string o = strcat(rgb_to_hexcolor(Buff_Color(e.items)), Buff_PrettyName(e.items));
+               if(s == "")
+                       s = o;
+               else
+                       s = strcat(s, " ", o);
+       }
+       HUD_Panel_UpdateCvars();
+       draw_beginBoldFont();
+       vector pos, mySize;
+       pos = panel_pos;
+       mySize = panel_size;
+       HUD_Panel_DrawBg(bound(0, b, 1));
+       if(panel_bg_padding)
+       {
+               pos += '1 1 0' * panel_bg_padding;
+               mySize -= '2 2 0' * panel_bg_padding;
+       }
+       //float panel_ar = mySize_x/mySize_y;
+       //float is_vertical = (panel_ar < 1);
+       //float buff_iconalign = autocvar_hud_panel_buffs_iconalign;
+       vector buff_offset = '0 0 0';
+       
+       for(e = Buff_Type_first; e; e = e.enemy) if(buffs & e.items)
+       {
+               //DrawNumIcon(pos + buff_offset, mySize, shield, "shield", is_vertical, buff_iconalign, '1 1 1', 1);
+               drawcolorcodedstring_aspect(pos + buff_offset, s, mySize, panel_fg_alpha * 0.5, DRAWFLAG_NORMAL);
+       }
+       draw_endBoldFont();
+ }
++// QuickMenu (#19)
 +//
 +// QUICKMENU_MAXLINES must be <= 10
 +#define QUICKMENU_MAXLINES 10
 +#define QUICKMENU_MAXENTRIES 256
 +string QuickMenu_Command[QUICKMENU_MAXLINES];
 +string QuickMenu_Description[QUICKMENU_MAXLINES];
 +float QuickMenu_CurrentPage;
 +float QuickMenu_IsLastPage;
 +// each quickmenu entry (submenu or command) is composed of 2 entries in the buffer
 +#define QUICKMENU_BUFFER_MAXENTRIES 2*QUICKMENU_MAXENTRIES
 +var float QuickMenu_Buffer = -1;
 +float QuickMenu_Buffer_Size;
 +float QuickMenu_Buffer_Index;
 +string QuickMenu_CurrentSubMenu;
 +float QuickMenu_CurrentPage_FirstEntry;
 +var float QuickMenu_Entries;
 +float QuickMenu_TimeOut;
 +// if s1 is not empty s will be displayed as command otherwise as submenu
 +void HUD_QuickMenu_load_entry(float i, string s, string s1)
 +{
 +      //printf("^xc80 entry %d: %s, %s\n", i, s, s1);
 +      if (QuickMenu_Description[i])
 +              strunzone(QuickMenu_Description[i]);
 +      QuickMenu_Description[i] = strzone(s);
 +      if (QuickMenu_Command[i])
 +              strunzone(QuickMenu_Command[i]);
 +      QuickMenu_Command[i] = strzone(s1);
 +}
 +void HUD_QuickMenu_clear_entry(float i)
 +{
 +      if (QuickMenu_Description[i])
 +              strunzone(QuickMenu_Description[i]);
 +      QuickMenu_Description[i] = string_null;
 +      if (QuickMenu_Command[i])
 +              strunzone(QuickMenu_Command[i]);
 +      QuickMenu_Command[i] = string_null;
 +}
 +
 +float HUD_QuickMenu_Page(string target_submenu, float new_page);
 +void HUD_QuickMenu_Default(string submenu);
 +float HUD_QuickMenu_Open(string mode, string submenu)
 +{
 +      float fh = -1;
 +      string s;
 +
 +      if(mode == "")
 +      {
 +              if(autocvar_hud_panel_quickmenu_file == "" || autocvar_hud_panel_quickmenu_file == "0")
 +                      mode = "default";
 +              else
 +                      mode = "file";
 +      }
 +
 +      if(mode == "default")
 +      {
 +              QuickMenu_Buffer = buf_create();
 +              if(QuickMenu_Buffer < 0)
 +                      return false;
 +
 +              HUD_QuickMenu_Default(submenu);
 +      }
 +      else if(mode == "file")
 +      {
 +              if(autocvar_hud_panel_quickmenu_file != "")
 +              if(autocvar_hud_panel_quickmenu_file != "0")
 +                      fh = fopen(autocvar_hud_panel_quickmenu_file, FILE_READ);
 +              if(fh < 0)
 +              {
 +                      printf("Couldn't open file \"%s\"\n", autocvar_hud_panel_quickmenu_file);
 +                      return false;
 +              }
 +
 +              QuickMenu_Buffer = buf_create();
 +              if(QuickMenu_Buffer < 0)
 +              {
 +                      fclose(fh);
 +                      return false;
 +              }
 +
 +              QuickMenu_Buffer_Size = 0;
 +              while((s = fgets(fh)) && QuickMenu_Buffer_Size < QUICKMENU_BUFFER_MAXENTRIES)
 +              {
 +                      // first skip invalid entries, so we don't check them anymore
 +                      float argc;
 +                      argc = tokenize_console(s);
 +                      if(argc == 0 || argc > 2)
 +                              continue;
 +                      if(argv(0) == "")
 +                              continue;
 +                      if(argc == 2 && argv(1) == "")
 +                              continue;
 +
 +                      if(argc == 1)
 +                              bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu
 +                      else
 +                      {
 +                              bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", argv(0))); // command Title
 +                              ++QuickMenu_Buffer_Size;
 +                              bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("C", argv(1))); // command
 +                      }
 +                      ++QuickMenu_Buffer_Size;
 +              }
 +              fclose(fh);
 +      }
 +      else
 +      {
 +              printf("Unrecognized mode %s\n", mode);
 +              return false;
 +      }
 +
 +      if (QuickMenu_Buffer_Size <= 0)
 +      {
 +              buf_del(QuickMenu_Buffer);
 +              QuickMenu_Buffer = -1;
 +              return false;
 +      }
 +
 +      if(mode == "file")
 +              HUD_QuickMenu_Page(submenu, 0);
 +      else
 +              HUD_QuickMenu_Page("", 0);
 +
 +      hud_panel_quickmenu = 1;
 +      if(autocvar_hud_cursormode)
 +              setcursormode(1);
 +      hudShiftState = 0;
 +
 +      QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
 +      return true;
 +}
 +
 +void HUD_QuickMenu_Buffer_Close()
 +{
 +      if (QuickMenu_Buffer >= 0)
 +      {
 +              buf_del(QuickMenu_Buffer);
 +              QuickMenu_Buffer = -1;
 +              QuickMenu_Buffer_Size = 0;
 +      }
 +}
 +
 +void HUD_QuickMenu_Close()
 +{
 +      if (QuickMenu_CurrentSubMenu)
 +              strunzone(QuickMenu_CurrentSubMenu);
 +      QuickMenu_CurrentSubMenu = string_null;
 +      float i;
 +      for (i = 0; i < QUICKMENU_MAXLINES; ++i)
 +              HUD_QuickMenu_clear_entry(i);
 +      QuickMenu_Entries = 0;
 +      hud_panel_quickmenu = 0;
 +      mouseClicked = 0;
 +      prevMouseClicked = 0;
 +      HUD_QuickMenu_Buffer_Close();
 +
 +      if(autocvar_hud_cursormode)
 +      if(!mv_active)
 +              setcursormode(0);
 +}
 +
 +// It assumes submenu open tag is already detected
 +void HUD_QuickMenu_skip_submenu(string submenu)
 +{
 +      string s, z_submenu;
 +      z_submenu = strzone(submenu);
 +      for(++QuickMenu_Buffer_Index ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index)
 +      {
 +              s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
 +              if(substring(s, 0, 1) != "S")
 +                      continue;
 +              if(substring(s, 1, -1) == z_submenu) // submenu end
 +                      break;
 +              HUD_QuickMenu_skip_submenu(substring(s, 1, -1));
 +      }
 +      strunzone(z_submenu);
 +}
 +
 +float HUD_QuickMenu_IsOpened()
 +{
 +      return (QuickMenu_Entries > 0);
 +}
 +
 +// new_page 0 means page 0, new_page != 0 means next page
 +float QuickMenu_Buffer_Index_Prev;
 +float HUD_QuickMenu_Page(string target_submenu, float new_page)
 +{
 +      string s, z_submenu;
 +
 +      if (new_page == 0)
 +              QuickMenu_CurrentPage = 0;
 +      else
 +              ++QuickMenu_CurrentPage;
 +      QuickMenu_CurrentPage_FirstEntry = QuickMenu_CurrentPage * (QUICKMENU_MAXLINES - 2);
 +
 +      z_submenu = strzone(target_submenu);
 +      if (QuickMenu_CurrentSubMenu)
 +              strunzone(QuickMenu_CurrentSubMenu);
 +      QuickMenu_CurrentSubMenu = strzone(z_submenu);
 +
 +      QuickMenu_IsLastPage = TRUE;
 +      QuickMenu_Entries = 0;
 +
 +      QuickMenu_Buffer_Index = 0;
 +      if (z_submenu != "")
 +      {
 +              // skip everything until the submenu open tag is found
 +              for( ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index)
 +              {
 +                      s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
 +                      if(substring(s, 0, 1) == "S" && substring(s, 1, -1) == z_submenu)
 +                      {
 +                              // printf("^3 beginning of %s\n", z_submenu);
 +                              ++QuickMenu_Buffer_Index;
 +                              break;
 +                      }
 +                      // printf("^1 skipping %s\n", s);
 +              }
 +              if(QuickMenu_Buffer_Index == QuickMenu_Buffer_Size)
 +                      printf("Couldn't find submenu \"%s\"\n", z_submenu);
 +      }
 +      float entry_num = 0;
 +      for( ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index)
 +      {
 +              s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
 +
 +              if(z_submenu != "" && substring(s, 1, -1) == z_submenu)
 +              {
 +                      // printf("^3 end of %s\n", z_submenu);
 +                      break;
 +              }
 +
 +              if(entry_num >= QuickMenu_CurrentPage_FirstEntry)
 +              {
 +                      ++QuickMenu_Entries;
 +                      if(QuickMenu_Entries == QUICKMENU_MAXLINES - 2)
 +                              QuickMenu_Buffer_Index_Prev = QuickMenu_Buffer_Index;
 +                      else if(QuickMenu_Entries == QUICKMENU_MAXLINES)
 +                      {
 +                              HUD_QuickMenu_clear_entry(QUICKMENU_MAXLINES - 1);
 +                              QuickMenu_Buffer_Index = QuickMenu_Buffer_Index_Prev;
 +                              QuickMenu_IsLastPage = FALSE;
 +                              break;
 +                      }
 +              }
 +
 +              // NOTE: entries are loaded starting from 1, not from 0
 +              if(substring(s, 0, 1) == "S") // submenu
 +              {
 +                      if(entry_num >= QuickMenu_CurrentPage_FirstEntry)
 +                              HUD_QuickMenu_load_entry(QuickMenu_Entries, substring(s, 1, -1), "");
 +                      HUD_QuickMenu_skip_submenu(substring(s, 1, -1));
 +              }
 +              else if(entry_num >= QuickMenu_CurrentPage_FirstEntry && substring(s, 0, 1) == "T")
 +              {
 +                      ++QuickMenu_Buffer_Index;
 +                      string cmd = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
 +                      if(substring(cmd, 0, 1) == "C")
 +                              cmd = substring(cmd, 1, -1);
 +                      HUD_QuickMenu_load_entry(QuickMenu_Entries, substring(s, 1, -1), cmd);
 +              }
 +
 +              ++entry_num;
 +      }
 +      strunzone(z_submenu);
 +      if (QuickMenu_Entries == 0)
 +      {
 +              HUD_QuickMenu_Close();
 +              return 0;
 +      }
 +      QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
 +      return 1;
 +}
 +
 +float HUD_QuickMenu_ActionForNumber(float num)
 +{
 +      if (!QuickMenu_IsLastPage)
 +      {
 +              if (num < 0 || num >= QUICKMENU_MAXLINES)
 +                      return 0;
 +              if (num == QUICKMENU_MAXLINES - 1)
 +                      return 0;
 +              if (num == 0)
 +              {
 +                      HUD_QuickMenu_Page(QuickMenu_CurrentSubMenu, +1);
 +                      return 0;
 +              }
 +      } else if (num <= 0 || num > QuickMenu_Entries)
 +              return 0;
 +
 +      if (QuickMenu_Command[num] != "")
 +      {
 +              localcmd(strcat("\n", QuickMenu_Command[num], "\n"));
 +              return 1;
 +      }
 +      if (QuickMenu_Description[num] != "")
 +              HUD_QuickMenu_Page(QuickMenu_Description[num], 0);
 +      return 0;
 +}
 +
 +float HUD_QuickMenu_InputEvent(float bInputType, float nPrimary, float nSecondary)
 +{
 +      // we only care for keyboard events
 +      if(bInputType == 2)
 +              return false;
 +
 +      if(!HUD_QuickMenu_IsOpened() || autocvar__hud_configure || mv_active)
 +              return false;
 +
 +      if(bInputType == 3)
 +      {
 +              mousepos_x = nPrimary;
 +              mousepos_y = nSecondary;
 +              return true;
 +      }
 +
 +      // allow console bind to work
 +      string con_keys;
 +      float keys;
 +      con_keys = findkeysforcommand("toggleconsole", 0);
 +      keys = tokenize(con_keys); // findkeysforcommand returns data for this
 +
 +      float hit_con_bind = 0, i;
 +      for (i = 0; i < keys; ++i)
 +      {
 +              if(nPrimary == stof(argv(i)))
 +                      hit_con_bind = 1;
 +      }
 +
 +      if(bInputType == 0) {
 +              if(nPrimary == K_ALT) hudShiftState |= S_ALT;
 +              if(nPrimary == K_CTRL) hudShiftState |= S_CTRL;
 +              if(nPrimary == K_SHIFT) hudShiftState |= S_SHIFT;
 +      }
 +      else if(bInputType == 1) {
 +              if(nPrimary == K_ALT) hudShiftState -= (hudShiftState & S_ALT);
 +              if(nPrimary == K_CTRL) hudShiftState -= (hudShiftState & S_CTRL);
 +              if(nPrimary == K_SHIFT) hudShiftState -= (hudShiftState & S_SHIFT);
 +      }
 +
 +      if(nPrimary == K_ESCAPE)
 +      {
 +              if (bInputType == 1)
 +                      return true;
 +              HUD_QuickMenu_Close();
 +      }
 +      else if(nPrimary >= '0' && nPrimary <= '9')
 +      {
 +              if (bInputType == 1)
 +                      return true;
 +              HUD_QuickMenu_ActionForNumber(stof(chr2str(nPrimary)));
 +      }
 +      if(nPrimary == K_MOUSE1)
 +      {
 +              if(bInputType == 0) // key pressed
 +                      mouseClicked |= S_MOUSE1;
 +              else if(bInputType == 1) // key released
 +                      mouseClicked -= (mouseClicked & S_MOUSE1);
 +      }
 +      else if(nPrimary == K_MOUSE2)
 +      {
 +              if(bInputType == 0) // key pressed
 +                      mouseClicked |= S_MOUSE2;
 +              else if(bInputType == 1) // key released
 +                      mouseClicked -= (mouseClicked & S_MOUSE2);
 +      }
 +      else if(hit_con_bind)
 +              return false;
 +
 +      return true;
 +}
 +void HUD_QuickMenu_Mouse()
 +{
 +      if(mv_active) return;
 +
 +      if(!mouseClicked)
 +      if(prevMouseClicked & S_MOUSE2)
 +      {
 +              HUD_QuickMenu_Close();
 +              return;
 +      }
 +
 +      if(!autocvar_hud_cursormode)
 +      {
 +              mousepos = mousepos + getmousepos() * autocvar_menu_mouse_speed;
 +
 +              mousepos_x = bound(0, mousepos_x, vid_conwidth);
 +              mousepos_y = bound(0, mousepos_y, vid_conheight);
 +      }
 +
 +      HUD_Panel_UpdateCvars()
 +
 +      if(panel_bg_padding)
 +      {
 +              panel_pos += '1 1 0' * panel_bg_padding;
 +              panel_size -= '2 2 0' * panel_bg_padding;
 +      }
 +
 +      float first_entry_pos, entries_height;
 +      vector fontsize;
 +      fontsize = '1 1 0' * (panel_size_y / QUICKMENU_MAXLINES);
 +      first_entry_pos = panel_pos_y + ((QUICKMENU_MAXLINES - QuickMenu_Entries) * fontsize_y) / 2;
 +      entries_height = panel_size_y - ((QUICKMENU_MAXLINES - QuickMenu_Entries) * fontsize_y);
 +
 +      if (mousepos_x >= panel_pos_x && mousepos_y >= first_entry_pos && mousepos_x <= panel_pos_x + panel_size_x && mousepos_y <= first_entry_pos + entries_height)
 +      {
 +              float entry_num;
 +              entry_num = floor((mousepos_y - first_entry_pos) / fontsize_y);
 +              if (QuickMenu_IsLastPage || entry_num != QUICKMENU_MAXLINES - 2)
 +              {
 +                      panel_pos_y = first_entry_pos + entry_num * fontsize_y;
 +                      vector color;
 +                      if(mouseClicked & S_MOUSE1)
 +                              color = '0.5 1 0.5';
 +                      else if(hudShiftState & S_CTRL)
 +                              color = '1 1 0.3';
 +                      else
 +                              color = '1 1 1';
 +                      drawfill(panel_pos, eX * panel_size_x + eY * fontsize_y, color, .2, DRAWFLAG_NORMAL);
 +
 +                      if(!mouseClicked && (prevMouseClicked & S_MOUSE1))
 +                      {
 +                              float f;
 +                              if (entry_num < QUICKMENU_MAXLINES - 1)
 +                                      f = HUD_QuickMenu_ActionForNumber(entry_num + 1);
 +                              else
 +                                      f = HUD_QuickMenu_ActionForNumber(0);
 +                              if(f && !(hudShiftState & S_CTRL))
 +                                      HUD_QuickMenu_Close();
 +                      }
 +              }
 +      }
 +
 +      const vector cursorsize = '32 32 0';
 +      drawpic(mousepos, strcat("gfx/menu/", autocvar_menu_skin, "/cursor.tga"), cursorsize, '1 1 1', 0.8, DRAWFLAG_NORMAL);
 +
 +      prevMouseClicked = mouseClicked;
 +}
 +void HUD_QuickMenu_DrawEntry(vector pos, string s, vector fontsize)
 +{
 +      string entry;
 +      float offset;
 +      entry = textShortenToWidth(s, panel_size_x, fontsize, stringwidth_colors);
 +      if (autocvar_hud_panel_quickmenu_align > 0)
 +      {
 +              offset = (panel_size_x - stringwidth_colors(entry, fontsize)) * min(autocvar_hud_panel_quickmenu_align, 1);
 +              drawcolorcodedstring(pos + eX * offset, entry, fontsize, panel_fg_alpha, DRAWFLAG_ADDITIVE);
 +      }
 +      else
 +              drawcolorcodedstring(pos, entry, fontsize, panel_fg_alpha, DRAWFLAG_ADDITIVE);
 +}
 +void HUD_QuickMenu(void)
 +{
 +      if(!autocvar__hud_configure)
 +      {
 +              if (hud_configure_prev && hud_configure_prev != -1)
 +                      HUD_QuickMenu_Close();
 +
 +              if(!hud_draw_maximized) return;
 +              if(mv_active) return;
 +              //if(!autocvar_hud_panel_quickmenu) return;
 +              if(!hud_panel_quickmenu) return;
 +
 +              if(time > QuickMenu_TimeOut)
 +              {
 +                      HUD_QuickMenu_Close();
 +                      return;
 +              }
 +      }
 +      else
 +      {
 +              if(!HUD_QuickMenu_IsOpened())
 +              {
 +                      QuickMenu_Entries = 1;
 +                      HUD_QuickMenu_load_entry(QuickMenu_Entries, sprintf(_("Submenu%d"), QuickMenu_Entries), "");
 +                      ++QuickMenu_Entries;
 +                      HUD_QuickMenu_load_entry(QuickMenu_Entries, sprintf(_("Submenu%d"), QuickMenu_Entries), "");
 +                      ++QuickMenu_Entries;
 +                      // although real command doesn't matter here, it must not be empty
 +                      // otherwise the entry is displayed like a submenu
 +                      for (; QuickMenu_Entries < QUICKMENU_MAXLINES - 1; ++QuickMenu_Entries)
 +                              HUD_QuickMenu_load_entry(QuickMenu_Entries, sprintf(_("Command%d"), QuickMenu_Entries), "-");
 +                      ++QuickMenu_Entries;
 +                      HUD_QuickMenu_clear_entry(QuickMenu_Entries);
 +                      QuickMenu_IsLastPage = FALSE;
 +              }
 +      }
 +
 +      HUD_Panel_UpdateCvars();
-       HUD_Panel_ApplyFadeAlpha();
 +
 +      HUD_Panel_DrawBg(1);
 +
 +      if(panel_bg_padding)
 +      {
 +              panel_pos += '1 1 0' * panel_bg_padding;
 +              panel_size -= '2 2 0' * panel_bg_padding;
 +      }
 +
 +      float i;
 +      vector fontsize;
 +      string color;
 +      fontsize = '1 1 0' * (panel_size_y / QUICKMENU_MAXLINES);
 +
 +      if (!QuickMenu_IsLastPage)
 +      {
 +              color = "^5";
 +              HUD_QuickMenu_DrawEntry(panel_pos + eY * (panel_size_y - fontsize_y), sprintf("%d: %s%s", 0, color, _("Continue...")), fontsize);
 +      }
 +      else
 +              panel_pos_y += ((QUICKMENU_MAXLINES - QuickMenu_Entries) * fontsize_y) / 2;
 +
 +      for (i = 1; i <= QuickMenu_Entries; ++i) {
 +              if (QuickMenu_Description[i] == "")
 +                      break;
 +              if (QuickMenu_Command[i] == "")
 +                      color = "^4";
 +              else
 +                      color = "^3";
 +              HUD_QuickMenu_DrawEntry(panel_pos, sprintf("%d: %s%s", i, color, QuickMenu_Description[i]), fontsize);
 +              panel_pos_y += fontsize_y;
 +      }
 +}
 +
 +
 +#define QUICKMENU_SMENU(submenu,eng_submenu) { \
 +      if(target_submenu == eng_submenu && target_submenu_found) \
 +              return; /* target_submenu entries are now loaded, exit */ \
 +      if(QuickMenu_Buffer_Size < QUICKMENU_BUFFER_MAXENTRIES) \
 +              bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", submenu)); \
 +      ++QuickMenu_Buffer_Size; \
 +      if(target_submenu == eng_submenu && !target_submenu_found) { \
 +              QuickMenu_Buffer_Size = 0; /* enable load of next entries */ \
 +              target_submenu_found = TRUE; \
 +      } \
 +}
 +
 +#define QUICKMENU_ENTRY(title,command) { \
 +      if(QuickMenu_Buffer_Size + 1 < QUICKMENU_BUFFER_MAXENTRIES) \
 +      { \
 +              bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", title)); \
 +              ++QuickMenu_Buffer_Size; \
 +              bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("C", command)); \
 +      } \
 +      ++QuickMenu_Buffer_Size; \
 +}
 +
 +// useful to Translate a string inside the Command
 +#define QUICKMENU_ENTRY_TC(title,command,text,translated_text) {\
 +      if(prvm_language == "en") \
 +              QUICKMENU_ENTRY(title, sprintf(command, text)) \
 +      else if(!autocvar_hud_panel_quickmenu_translatecommands || translated_text == text) \
 +              QUICKMENU_ENTRY(strcat("(en)", title), sprintf(command, text)) \
 +      else \
 +              QUICKMENU_ENTRY(strcat("(", prvm_language, ")", title), sprintf(command, translated_text)) \
 +}
 +
 +void HUD_Quickmenu_PlayerListEntries(string cmd, float with_me)
 +{
 +      entity pl;
 +      for(pl = players.sort_next; pl; pl = pl.sort_next)
 +      {
 +              if(pl.sv_entnum != player_localnum || with_me)
 +                      QUICKMENU_ENTRY(GetPlayerName(pl.sv_entnum), sprintf(cmd, GetPlayerName(pl.sv_entnum)))
 +      }
 +}
 +
 +
 +// Specifying target_submenu, this function only loads entries inside target_submenu
 +// NOTE: alternatively we could have loaded the whole default quickmenu and
 +// then called HUD_QuickMenu_Page(target_submenu, 0);
 +// but this sytem is more reliable since we can always refer to target_submenu
 +// with the English title even if a translation is active
 +void HUD_QuickMenu_Default(string target_submenu)
 +{
 +      float target_submenu_found = FALSE;
 +      if(target_submenu != "")
 +              QuickMenu_Buffer_Size = QUICKMENU_BUFFER_MAXENTRIES; // forbids load of next entries until target_submenu
 +
 +QUICKMENU_SMENU(CTX(_("QMCMD^Chat")), "Chat")
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^nice one")), "say %s", ":-) / nice one", CTX(_("QMCMD^:-) / nice one")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^good game")), "say %s", "good game", CTX(_("QMCMD^good game")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^hi / good luck")), "say %s", "hi / good luck and have fun", CTX(_("QMCMD^hi / good luck and have fun")))
 +QUICKMENU_SMENU(CTX(_("QMCMD^Chat")), "Chat")
 +
 +if(teamplay)
 +{
 +QUICKMENU_SMENU(CTX(_("QMCMD^Team chat")), "Team chat")
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^quad soon")), "say_team %s", "quad soon", CTX(_("QMCMD^quad soon")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^free item, icon")), "say_team %s; g_waypointsprite_team_here_p", "free item %x^7 (l:%y^7)", CTX(_("QMCMD^free item %x^7 (l:%y^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^took item, icon")), "say_team %s; g_waypointsprite_team_here", "took item (l:%l^7)", CTX(_("QMCMD^took item (l:%l^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^negative")), "say_team %s", "negative", CTX(_("QMCMD^negative")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^positive")), "say_team %s", "positive", CTX(_("QMCMD^positive")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^need help, icon")), "say_team %s; g_waypointsprite_team_helpme; cmd voice needhelp", "need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)", CTX(_("QMCMD^need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^enemy seen, icon")), "say_team %s; g_waypointsprite_team_danger_p; cmd voice incoming", "enemy seen (l:%y^7)", CTX(_("QMCMD^enemy seen (l:%y^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^flag seen, icon")), "say_team %s; g_waypointsprite_team_here_p; cmd voice seenflag", "flag seen (l:%y^7)", CTX(_("QMCMD^flag seen (l:%y^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^defending, icon")), "say_team %s; g_waypointsprite_team_here", "defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)", CTX(_("QMCMD^defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^roaming, icon")), "say_team %s; g_waypointsprite_team_here", "roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)", CTX(_("QMCMD^roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^attacking, icon")), "say_team %s; g_waypointsprite_team_here", "attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)", CTX(_("QMCMD^attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^killed flag, icon")), "say_team %s; g_waypointsprite_team_here_p", "killed flagcarrier (l:%y^7)", CTX(_("QMCMD^killed flagcarrier (l:%y^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^dropped flag, icon")), "say_team %s; g_waypointsprite_team_here_d", "dropped flag (l:%d^7)", CTX(_("QMCMD^dropped flag (l:%d^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop gun, icon")), "say_team %s; g_waypointsprite_team_here; wait; dropweapon", "dropped gun %w^7 (l:%l^7)", CTX(_("QMCMD^dropped gun %w^7 (l:%l^7)")))
 +      QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop flag/key, icon")), "say_team %s; g_waypointsprite_team_here; wait; +use", "dropped flag/key %w^7 (l:%l^7)", CTX(_("QMCMD^dropped flag/key %w^7 (l:%l^7)")))
 +QUICKMENU_SMENU(CTX(_("QMCMD^Team chat")), "Team chat")
 +}
 +QUICKMENU_SMENU(CTX(_("QMCMD^Send private message to")), "Send private message to")
 +      HUD_Quickmenu_PlayerListEntries("commandmode tell %s", FALSE);
 +QUICKMENU_SMENU(CTX(_("QMCMD^Send private message to")), "Send private message to")
 +
 +
 +QUICKMENU_SMENU(CTX(_("QMCMD^Settings")), "Settings")
 +      QUICKMENU_SMENU(CTX(_("QMCMD^View/HUD settings")), "View/HUD settings")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^1st/3rd person view")), "toggle chase_active")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Player models like mine on/off")), "toggle cl_forceplayermodels")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Names above players on/off")), "toggle hud_shownames")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Crosshair per weapon on/off")), "toggle crosshair_per_weapon")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^FPS on/off")), "toggle hud_panel_engineinfo")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Net graph on/off")), "toggle shownetgraph")
 +      QUICKMENU_SMENU(CTX(_("QMCMD^View/HUD settings")), "View/HUD settings")
 +
 +      QUICKMENU_SMENU(CTX(_("QMCMD^Sound settings")), "Sound settings")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Hit sound on/off")), "toggle cl_hitsound")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Chat sound on/off")), "toggle cl_chatsound")
 +      QUICKMENU_SMENU(CTX(_("QMCMD^Sound settings")), "Sound settings")
 +
 +      if(spectatee_status > 0)
 +      {
 +      QUICKMENU_SMENU(CTX(_("QMCMD^Spectator camera")), "Spectator camera")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^1st person")), "chase_active 0; -use")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^3rd person around player")), "chase_active 1; +use")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^3rd person behind")), "chase_active 1; -use")
 +      QUICKMENU_SMENU(CTX(_("QMCMD^Spectator camera")), "Spectator camera")
 +      }
 +
 +      if(spectatee_status == -1)
 +      {
 +      QUICKMENU_SMENU(CTX(_("QMCMD^Observer camera")), "Observer camera")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Increase speed")), "weapnext")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Decrease speed")), "weapprev")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Wall collision off")), "+use")
 +              QUICKMENU_ENTRY(CTX(_("QMCMD^Wall collision on")), "-use")
 +      QUICKMENU_SMENU(CTX(_("QMCMD^Observer camera")), "Observer camera")
 +      }
 +
 +      QUICKMENU_ENTRY(CTX(_("QMCMD^toggle fullscreen")), "toggle vid_fullscreen; vid_restart")
 +      if(prvm_language != "en")
 +      QUICKMENU_ENTRY(CTX(_("QMCMD^Translate chat messages on/off")), "toggle hud_panel_quickmenu_translatecommands")
 +QUICKMENU_SMENU(CTX(_("QMCMD^Settings")), "Settings")
 +
 +QUICKMENU_SMENU(CTX(_("QMCMD^Call a vote")), "Call a vote")
 +      QUICKMENU_ENTRY(CTX(_("QMCMD^Restart the map")), "vcall restart")
 +      QUICKMENU_ENTRY(CTX(_("QMCMD^End match")), "vcall endmatch")
 +      if(getstatf(STAT_TIMELIMIT) > 0)
 +      {
 +      QUICKMENU_ENTRY(CTX(_("QMCMD^Reduce match time")), "vcall reducematchtime")
 +      QUICKMENU_ENTRY(CTX(_("QMCMD^Extend match time")), "vcall extendmatchtime")
 +      }
 +      if(teamplay)
 +      QUICKMENU_ENTRY(CTX(_("QMCMD^Shuffle teams")), "vcall shuffleteams")
 +QUICKMENU_SMENU(CTX(_("QMCMD^Call a vote")), "Call a vote")
 +
 +      if(target_submenu != "" && !target_submenu_found)
 +      {
 +              printf("Couldn't find submenu \"%s\"\n", target_submenu);
 +              if(prvm_language != "en")
 +                      printf("^3Warning: submenu must be in English\n", target_submenu);
 +              QuickMenu_Buffer_Size = 0;
 +      }
 +}
 +#undef QUICKMENU_SMENU
 +#undef QUICKMENU_ENTRY
 +#undef QUICKMENU_ENTRY_TC
 +
 +
  /*
  ==================
  Main HUD system
@@@ -5094,21 -4498,13 +5171,13 @@@ void HUD_Main (void
        if(scoreboard_fade_alpha)
                hud_fade_alpha = (1 - scoreboard_fade_alpha);
  
-       if(autocvar__hud_configure)
-               if(isdemo())
-                       HUD_Configure_Exit_Force();
+       HUD_Configure_Frame();
  
        if(intermission == 2) // no hud during mapvote
-       {
-               if (autocvar__hud_configure)
-                       HUD_Configure_Exit_Force();
                hud_fade_alpha = 0;
-       }
-       else if(autocvar__menu_alpha == 0 && scoreboard_fade_alpha == 0)
-               hud_fade_alpha = 1;
  
        // panels that we want to be active together with the scoreboard
-       // they must call HUD_Panel_ApplyFadeAlpha(); only when showing the menu
+       // they must fade only when the menu does
        if(scoreboard_fade_alpha == 1)
        {
                (panel = HUD_PANEL(CENTERPRINT)).panel_draw();
                hud_skin_prev = strzone(autocvar_hud_skin);
        }
  
-       // HUD configure visible grid
-       if(autocvar__hud_configure && autocvar_hud_configure_grid && autocvar_hud_configure_grid_alpha)
-       {
-               hud_configure_gridSize_x = bound(0.005, cvar("hud_configure_grid_xsize"), 0.2);
-               hud_configure_gridSize_y = bound(0.005, cvar("hud_configure_grid_ysize"), 0.2);
-               hud_configure_realGridSize_x = hud_configure_gridSize_x * vid_conwidth;
-               hud_configure_realGridSize_y = hud_configure_gridSize_y * vid_conheight;
-               vector s;
-               // x-axis
-               s = eX + eY * vid_conheight;
-               for(i = 1; i < 1/hud_configure_gridSize_x; ++i)
-                       drawfill(eX * i * hud_configure_realGridSize_x, s, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL);
-               // y-axis
-               s = eY + eX * vid_conwidth;
-               for(i = 1; i < 1/hud_configure_gridSize_y; ++i)
-                       drawfill(eY * i * hud_configure_realGridSize_y, s, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL);
-       }
- #ifdef COMPAT_XON050_ENGINE
-     current_player = (spectatee_status > 0) ? spectatee_status : player_localentnum;
- #else
      current_player = player_localentnum;
- #endif
  
        // draw the dock
        if(autocvar_hud_dock != "" && autocvar_hud_dock != "0")
                        }
                        else if(hud_dock_color == "pants") {
                                f = stof(getplayerkeyvalue(current_player - 1, "colors"));
-                               color = colormapPaletteColor(mod(f, 16), 1);
+                               color = colormapPaletteColor(f % 16, 1);
                        }
                        else
                                color = stov(hud_dock_color);
                        }
                }
                if (warning)
-                       print(_("Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"));
+                       dprint("Automatically fixed wrong/missing panel numbers in _hud_panelorder\n");
  
                cvar_set("_hud_panelorder", s);
                if(hud_panelorder_prev)
                (panel = HUD_PANEL(RADAR)).panel_draw();
        if(autocvar__con_chat_maximized)
                (panel = HUD_PANEL(CHAT)).panel_draw();
 +      if(hud_panel_quickmenu)
 +              (panel = HUD_PANEL(QUICKMENU)).panel_draw();
  
-       if(autocvar__hud_configure)
-       {
-               if(tab_panel)
-               {
-                       panel = tab_panel;
-                       HUD_Panel_UpdatePosSize()
-                       drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .2, DRAWFLAG_NORMAL);
-               }
-               if(highlightedPanel)
-               {
-                       panel = highlightedPanel;
-                       HUD_Panel_UpdatePosSize()
-                       HUD_Panel_HlBorder(panel_bg_border + 1.5 * hlBorderSize, '0 0.5 1', 0.25 * (1 - autocvar__menu_alpha));
-               }
-               if(!hud_configure_prev || hud_configure_prev == -1)
-               {
-                       if(autocvar_hud_cursormode) { setcursormode(1); }
-                       hudShiftState = 0;
-                       for(i = HUD_PANEL_NUM - 1; i >= 0; --i)
-                               hud_panel[panel_order[i]].update_time = time;
-               }
-       }
-       else if(hud_configure_prev && hud_configure_prev != -1 && autocvar_hud_cursormode)
-               setcursormode(0);
+       HUD_Configure_PostDraw();
  
        hud_configure_prev = autocvar__hud_configure;
-       if (!autocvar__hud_configure) // hud config mode disabled, enable normal theAlpha stuff again
-               if (menu_enabled)
-                       menu_enabled = 0;
  }
diff --combined qcsrc/client/hud.qh
index c86eb91b833895cb752121b660ec43d2236f6e1a,d56caf1331e88fa48e9624f20b2cf7982c581f70..f733e296801919a4f9550973ef11fc898c27b583
@@@ -9,7 -9,8 +9,9 @@@ string hud_panelorder_prev
  
  float hud_draw_maximized;
  float hud_panel_radar_maximized;
 +float hud_panel_quickmenu;
+ float chat_panel_modified;
+ float radar_panel_modified;
  
  vector mousepos;
  vector panel_click_distance; // mouse cursor distance from the top left corner of the panel (saved only upon a click)
@@@ -48,7 -49,6 +50,6 @@@ const float S_CTRL = 2
  const float S_ALT = 4;
  
  float menu_enabled; // 1 showing the entire HUD, 2 showing only the clicked panel
- float menu_enabled_time;
  
  float hud_fade_alpha;
  
@@@ -57,8 -57,6 +58,6 @@@ string hud_skin_prev
  
  vector myteamcolors;
  
- var vector progressbar_color;
  entity highlightedPanel_backup;
  var vector panel_pos_backup;
  var vector panel_size_backup;
@@@ -81,7 -79,6 +80,6 @@@ entity panel
  var float panel_enabled;
  var vector panel_pos;
  var vector panel_size;
- var string panel_bg;
  var string panel_bg_str; // "_str" vars contain the raw value of the cvar, non-"_str" contains what hud.qc code should use
  var vector panel_bg_color;
  var string panel_bg_color_str;
@@@ -99,8 -96,6 +97,8 @@@ var string panel_bg_padding_str
  
  float current_player;
  
 +float mv_active;
 +
  
  #define HUD_PANELS \
        HUD_PANEL(WEAPONS      , HUD_Weapons      , weapons) \
        HUD_PANEL(INFOMESSAGES , HUD_InfoMessages , infomessages) \
        HUD_PANEL(PHYSICS      , HUD_Physics      , physics) \
        HUD_PANEL(CENTERPRINT  , HUD_CenterPrint  , centerprint) \
 -      HUD_PANEL(BUFFS        , HUD_Buffs        , buffs) 
++      HUD_PANEL(BUFFS        , HUD_Buffs        , buffs) \
 +      HUD_PANEL(QUICKMENU    , HUD_QuickMenu    , quickmenu) 
  
  #define HUD_PANEL(NAME,draw_func,name) \
        float HUD_PANEL_##NAME; \
-       void ##draw_func(void); \
+       void draw_func(void); \
        void RegisterHUD_Panel_##NAME() \
        { \
                HUD_PANEL_LAST = HUD_PANEL_##NAME = HUD_PANEL_NUM; \
                hud_panelent.classname = "hud_panel"; \
                hud_panelent.panel_name = #name; \
                hud_panelent.panel_id = HUD_PANEL_##NAME; \
-               hud_panelent.panel_draw = ##draw_func; \
+               hud_panelent.panel_draw = draw_func; \
                ++HUD_PANEL_NUM; \
        } \
        ACCUMULATE_FUNCTION(RegisterHUD_Panels, RegisterHUD_Panel_##NAME);
@@@ -150,24 -145,10 +149,10 @@@ HUD_PANEL
  // ----------------------
  // Little help for the poor people who have to make sense of this: Start from the bottom ;)
  
- #define HUD_Panel_GetProgressBarColor(item) \
-               progressbar_color = stov(cvar_string("hud_progressbar_" #item "_color"))
- #define HUD_Panel_GetProgressBarColorForString(item) \
- switch(item) {\
-       case "health": HUD_Panel_GetProgressBarColor(health); break;\
-       case "armor": HUD_Panel_GetProgressBarColor(armor); break;\
-       case "strength": HUD_Panel_GetProgressBarColor(strength); break;\
-       case "shield": HUD_Panel_GetProgressBarColor(shield); break;\
-       case "fuel": HUD_Panel_GetProgressBarColor(fuel); break;\
-       case "nexball": HUD_Panel_GetProgressBarColor(nexball); break;\
-       case "speed": HUD_Panel_GetProgressBarColor(speed); break;\
-       case "acceleration": HUD_Panel_GetProgressBarColor(acceleration); break;\
-       case "acceleration_neg": HUD_Panel_GetProgressBarColor(acceleration_neg); break;\
- } ENDS_WITH_CURLY_BRACE
- // Get value for panel_bg: if "" fetch default, else use panel_bg_str
+ // Get value for panel.current_panel_bg: if "" fetch default, else use panel_bg_str
  // comment on last line of macro: // we probably want to see a background in config mode at all times...
  #define HUD_Panel_GetBg()\
+ string panel_bg;\
  if(!autocvar__hud_configure && panel_bg_str == "0") {\
        panel_bg = "0";\
  } else {\
                        }\
                }\
        }\
- }
+ }\
+ if(panel.current_panel_bg)\
+       strunzone(panel.current_panel_bg);\
+ panel.current_panel_bg = strzone(panel_bg);
  
  // Get value for panel_bg_color: if "" fetch default, else use panel_bg_color. Convert pants, shirt or teamcolor into a vector.
  #define HUD_Panel_GetColor()\
@@@ -205,7 -189,7 +193,7 @@@ if((teamplay) && panel_bg_color_team) {
                if(panel_bg_color_str == "shirt") {\
                        panel_bg_color = colormapPaletteColor(floor(stof(getplayerkeyvalue(current_player - 1, "colors")) / 16), 0);\
                } else if(panel_bg_color_str == "pants") {\
-                       panel_bg_color = colormapPaletteColor(mod(stof(getplayerkeyvalue(current_player - 1, "colors")), 16), 1);\
+                       panel_bg_color = colormapPaletteColor(stof(getplayerkeyvalue(current_player - 1, "colors")) % 16, 1);\
                } else {\
                        panel_bg_color = stov(panel_bg_color_str);\
                }\
@@@ -220,14 -204,6 +208,6 @@@ if(panel_bg_color_team_str == "") {
        panel_bg_color_team = stof(panel_bg_color_team_str);\
  }
  
- // the check doesn't allow to fade this panel when showing the panel-specific menu dialog
- #define HUD_Panel_ApplyFadeAlpha()\
- if(!(menu_enabled == 2 && panel == highlightedPanel))\
- {\
-       panel_bg_alpha *= hud_fade_alpha;\
-       panel_fg_alpha *= hud_fade_alpha;\
- } ENDS_WITH_CURLY_BRACE
  // Get value for panel_bg_alpha: if "" fetch default, else use panel_bg_alpha. Also do various menu dialog fadeout/in checks, and minalpha checks
  // comment on line 3 of macro: // do not set a minalpha cap when showing the config dialog for this panel
  #define HUD_Panel_GetBgAlpha()\
@@@ -259,13 -235,6 +239,6 @@@ if(panel_bg_border_str == "") {
        panel_bg_border = stof(panel_bg_border_str);\
  } ENDS_WITH_CURLY_BRACE
  
- // Scale the pos and size vectors to absolute coordinates
- #define HUD_Panel_GetScaledVectors()\
- panel_pos_x *= vid_conwidth;\
- panel_pos_y *= vid_conheight;\
- panel_size_x *= vid_conwidth;\
- panel_size_y *= vid_conheight;
  // Get padding. See comments above, it's similar.
  // last line is a port of the old function, basically always make sure the panel contents are at least 5 pixels tall/wide, to disallow extreme padding values
  #define HUD_Panel_GetPadding()\
@@@ -276,36 -245,12 +249,12 @@@ if(panel_bg_padding_str == "") {
  }\
  panel_bg_padding = min(min(panel_size_x, panel_size_y)/2 - 5, panel_bg_padding);
  
- // Point to the macros above (stupid max macro length)
- #define HUD_Panel_GetStringVars()\
- HUD_Panel_GetBg()\
- if (panel_bg != "0") {\
-       HUD_Panel_GetColorTeam()\
-       HUD_Panel_GetColor()\
-       HUD_Panel_GetBgAlpha()\
-       HUD_Panel_GetBorder()\
- }\
- HUD_Panel_GetFgAlpha()\
- HUD_Panel_GetScaledVectors()\
- HUD_Panel_GetPadding()
- // return smoothly faded pos of given panel when a dialog is active
- var vector menu_enable_panelpos;
- #define HUD_Panel_GetMenuPos() \
- if(panel_size_x > panel_size_y)\
-       menu_enable_panelpos = eX * 0.5 * vid_conwidth - eX * 0.5 * panel_size_x + eY * 0.82 * vid_conheight;\
- else\
-       menu_enable_panelpos = eY * 0.5 * vid_conheight - eY * 0.5 * panel_size_y + eX * 0.7 * vid_conwidth;\
- panel_pos = (1 - autocvar__menu_alpha) * panel_pos + (autocvar__menu_alpha) * menu_enable_panelpos;
- // return smoothly faded size of given panel when a dialog is active
- //var vector menu_enable_maxsize;
- var float menu_enable_maxsize_x;
- var float menu_enable_maxsize_y;
- var vector menu_enable_size;
- #define HUD_Panel_GetMenuSize()\
- menu_enable_maxsize_x = 0.3 * vid_conwidth;\
- menu_enable_maxsize_y = 0.18 * vid_conheight;\
+ // return smoothly faded pos and size of given panel when a dialog is active
+ #define HUD_Panel_UpdatePosSize_ForMenu()\
+ vector menu_enable_pos;\
+ vector menu_enable_size = '0 0 0';\
+ float menu_enable_maxsize_x = 0.3 * vid_conwidth;\
+ float menu_enable_maxsize_y = 0.18 * vid_conheight;\
  if(panel_size_x > panel_size_y)\
  {\
        if(panel_size_y > menu_enable_maxsize_y)\
                menu_enable_size_x = panel_size_x * (menu_enable_maxsize_y/panel_size_y);\
                panel_size = (1 - autocvar__menu_alpha) * panel_size + (autocvar__menu_alpha) * menu_enable_size;\
        }\
+       menu_enable_pos = eX * 0.5 * vid_conwidth - eX * 0.5 * panel_size_x + eY * (vid_conheight - menu_enable_maxsize_y);\
  }\
  else\
  {\
                menu_enable_size_y = panel_size_y * (menu_enable_maxsize_x/panel_size_x);\
                panel_size = (1 - autocvar__menu_alpha) * panel_size + (autocvar__menu_alpha) * menu_enable_size;\
        }\
- }
+       menu_enable_pos = eY * 0.5 * vid_conheight - eY * 0.5 * panel_size_y + eX * (vid_conwidth - menu_enable_maxsize_x);\
+ }\
+ panel_pos = (1 - autocvar__menu_alpha) * panel_pos + (autocvar__menu_alpha) * menu_enable_pos;
+ // Scale the pos and size vectors to absolute coordinates
+ #define HUD_Panel_ScalePosSize()\
+ panel_pos_x *= vid_conwidth; panel_pos_y *= vid_conheight;\
+ panel_size_x *= vid_conwidth; panel_size_y *= vid_conheight;
  
  // NOTE: in hud_configure mode cvars must be reloaded every frame
  #define HUD_Panel_UpdateCvars() \
@@@ -331,70 -284,71 +288,71 @@@ if(panel.update_time <= time) { 
        if(autocvar__hud_configure) panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \
        panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \
        panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \
+       HUD_Panel_ScalePosSize() \
        panel_bg_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg")); \
        panel_bg_color_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color")); \
        panel_bg_color_team_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color_team")); \
        panel_bg_alpha_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_alpha")); \
        panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \
        panel_bg_padding_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_padding")); \
-       HUD_Panel_GetStringVars()\
+       HUD_Panel_GetBg()\
+       if (panel.current_panel_bg != "0") {\
+               HUD_Panel_GetColorTeam()\
+               HUD_Panel_GetColor()\
+               HUD_Panel_GetBgAlpha()\
+               HUD_Panel_GetBorder()\
+       }\
+       HUD_Panel_GetFgAlpha()\
+       HUD_Panel_GetPadding()\
+       panel.current_panel_bg_alpha = panel_bg_alpha; \
+       panel.current_panel_fg_alpha = panel_fg_alpha; \
        if(menu_enabled == 2 && panel == highlightedPanel) {\
-               HUD_Panel_GetMenuSize()\
-               HUD_Panel_GetMenuPos()\
-       } \
+               HUD_Panel_UpdatePosSize_ForMenu()\
+       } else {\
+               panel_bg_alpha *= hud_fade_alpha;\
+               panel_fg_alpha *= hud_fade_alpha;\
+       }\
        panel.current_panel_pos = panel_pos; \
        panel.current_panel_size = panel_size; \
-       if(panel.current_panel_bg) \
-               strunzone(panel.current_panel_bg); \
-       if(panel_bg == "")\
-       {\
-               /*printf("^xf08 %s panel: panel_bg is empty\n", panel.panel_name);*/\
-               panel_bg = "0";\
-       }\
-       panel.current_panel_bg = strzone(panel_bg); \
-       panel.current_panel_bg_alpha = panel_bg_alpha; \
        panel.current_panel_bg_border = panel_bg_border; \
        panel.current_panel_bg_color = panel_bg_color; \
        panel.current_panel_bg_color_team = panel_bg_color_team; \
        panel.current_panel_bg_padding = panel_bg_padding; \
-       panel.current_panel_fg_alpha = panel_fg_alpha; \
        panel.update_time = (autocvar__hud_configure) ? time : time + autocvar_hud_panel_update_interval; \
  } else { \
        panel_pos = panel.current_panel_pos; \
        panel_size = panel.current_panel_size; \
-       panel_bg = panel.current_panel_bg; \
-       if(panel.current_panel_bg == "")\
-       {\
-               /*printf("^xf08 %s panel: panel.current_panel_bg is empty\n", panel.panel_name);*/\
-               panel_bg = "0";\
-       }\
-       panel_bg_alpha = panel.current_panel_bg_alpha; \
+       panel_bg_alpha = panel.current_panel_bg_alpha * hud_fade_alpha; \
        panel_bg_border = panel.current_panel_bg_border; \
        panel_bg_color = panel.current_panel_bg_color; \
        panel_bg_color_team = panel.current_panel_bg_color_team; \
        panel_bg_padding = panel.current_panel_bg_padding; \
-       panel_fg_alpha = panel.current_panel_fg_alpha; \
+       panel_fg_alpha = panel.current_panel_fg_alpha * hud_fade_alpha; \
  } ENDS_WITH_CURLY_BRACE
  
  #define HUD_Panel_UpdatePosSize() {\
  panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \
  panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \
  panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \
- HUD_Panel_GetScaledVectors()\
+ HUD_Panel_ScalePosSize()\
  if(menu_enabled == 2 && panel == highlightedPanel) {\
-       HUD_Panel_GetMenuSize()\
-       HUD_Panel_GetMenuPos()\
+       HUD_Panel_UpdatePosSize_ForMenu()\
  }\
  panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \
  HUD_Panel_GetBorder() \
  } ENDS_WITH_CURLY_BRACE
  
+ #define NOTIFY_MAX_ENTRIES 10
+ #define NOTIFY_ICON_MARGIN 0.02
  
- #define KN_MAX_ENTRIES 10
+ float notify_index;
+ float notify_count;
+ float notify_times[NOTIFY_MAX_ENTRIES];
+ string notify_attackers[NOTIFY_MAX_ENTRIES];
+ string notify_victims[NOTIFY_MAX_ENTRIES];
+ string notify_icons[NOTIFY_MAX_ENTRIES];
  
- float kn_index;
- float notify_times[KN_MAX_ENTRIES];
- string notify_icon[KN_MAX_ENTRIES];
- string notify_attackers[KN_MAX_ENTRIES];
- string notify_victims[KN_MAX_ENTRIES];
  void HUD_Notify_Push(string icon, string attacker, string victim);
+ var void HUD_ModIcons_GameType(vector pos, vector size);
+ void HUD_ModIcons_SetFunc();
index 92e33653c0c193513272b306413f1b4aaf627d71,047e012ad65d8670b5502679f1bff01f72cce9c7..344f013a6d2181c77f65d2317c28ee507ab0281c
@@@ -119,6 -119,7 +119,7 @@@ void HUD_Panel_ExportCfg(string cfgname
                                        HUD_Write_PanelCvar_q("_fontsize");
                                        HUD_Write_PanelCvar_q("_time");
                                        HUD_Write_PanelCvar_q("_fadetime");
+                                       HUD_Write_PanelCvar_q("_icon_aspect");
                                        break;
                                case HUD_PANEL_TIMER:
                                        HUD_Write_PanelCvar_q("_increment");
                                        HUD_Write_PanelCvar_q("_fade_subsequent_minfontsize");
                                        HUD_Write_PanelCvar_q("_fade_minfontsize");
                                        break;
 +                              case HUD_PANEL_QUICKMENU:
 +                                      HUD_Write_PanelCvar_q("_align");
 +                                      break;
                        }
                        HUD_Write("\n");
                }
@@@ -654,10 -652,6 +655,6 @@@ float HUD_Panel_InputEvent(float bInput
        if(!autocvar__hud_configure)
                return false;
  
-       // block any input while a menu dialog is fading
-       if(autocvar__menu_alpha)
-               return true;
        if(bInputType == 3)
        {
                mousepos_x = nPrimary;
                return true;
        }
  
+       // block any input while a menu dialog is fading
+       // don't block mousepos read as it leads to cursor jumps in the interaction with the menu
+       if(autocvar__menu_alpha)
+       {
+               hudShiftState = 0;
+               mouseClicked = 0;
+               return true;
+       }
        // allow console bind to work
        string con_keys;
        float keys;
                if (bInputType == 1)
                        return true;
                menu_enabled = 1;
-               menu_enabled_time = time;
                localcmd("menu_showhudexit\n");
        }
        else if(nPrimary == K_BACKSPACE && hudShiftState & S_CTRL)
                        }
                        if (!tab_backward)
                        {
-                               level = mod(level + level_height, vid_conheight);
+                               level = (level + level_height) % vid_conheight;
                                start_pos_x = 0;
                                candidate_pos_x = vid_conwidth;
                        }
                        else
                        {
-                               level = mod(level - level_height, vid_conheight);
+                               level = (level - level_height) % vid_conheight;
                                start_pos_x = vid_conwidth;
                                candidate_pos_x = 0;
                        }
@@@ -1071,22 -1073,11 +1076,11 @@@ void HUD_Panel_Highlight(float allow_mo
  void HUD_Panel_EnableMenu()
  {
        menu_enabled = 2;
-       menu_enabled_time = time;
        localcmd("menu_showhudoptions ", highlightedPanel.panel_name, "\n");
  }
  float mouse_over_panel;
  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 (autocvar__menu_alpha == 0 && time - menu_enabled_time > 0.5)
-               menu_enabled = 0;
-       /*
-       print("menu_enabled: ", ftos(menu_enabled), "\n");
-       print("Highlighted: ", ftos(highlightedPanel), "\n");
-       print("Menu theAlpha: ", ftos(autocvar__menu_alpha), "\n");
-       */
        if(autocvar__menu_alpha == 1)
                return;
  
  
        prevMouseClicked = mouseClicked;
  }
+ void HUD_Configure_DrawGrid()
+ {
+       float i;
+       if(autocvar_hud_configure_grid && autocvar_hud_configure_grid_alpha)
+       {
+               hud_configure_gridSize_x = bound(0.005, cvar("hud_configure_grid_xsize"), 0.2);
+               hud_configure_gridSize_y = bound(0.005, cvar("hud_configure_grid_ysize"), 0.2);
+               hud_configure_realGridSize_x = hud_configure_gridSize_x * vid_conwidth;
+               hud_configure_realGridSize_y = hud_configure_gridSize_y * vid_conheight;
+               vector s;
+               // x-axis
+               s = eX + eY * vid_conheight;
+               for(i = 1; i < 1/hud_configure_gridSize_x; ++i)
+                       drawfill(eX * i * hud_configure_realGridSize_x, s, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL);
+               // y-axis
+               s = eY + eX * vid_conwidth;
+               for(i = 1; i < 1/hud_configure_gridSize_y; ++i)
+                       drawfill(eY * i * hud_configure_realGridSize_y, s, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL);
+       }
+ }
+ float _menu_alpha_prev;
+ void HUD_Configure_Frame()
+ {
+       float i;
+       if(autocvar__hud_configure)
+       {
+               if(isdemo() || intermission == 2)
+               {
+                       HUD_Configure_Exit_Force();
+                       return;
+               }
+               if(!hud_configure_prev || hud_configure_prev == -1)
+               {
+                       if(autocvar_hud_cursormode)
+                               setcursormode(1);
+                       hudShiftState = 0;
+                       for(i = HUD_PANEL_NUM - 1; i >= 0; --i)
+                               hud_panel[panel_order[i]].update_time = time;
+               }
+               // NOTE this check is necessary because _menu_alpha isn't updated the frame the menu gets enabled
+               if(autocvar__menu_alpha != _menu_alpha_prev)
+               {
+                       if(autocvar__menu_alpha == 0)
+                               menu_enabled = 0;
+                       _menu_alpha_prev = autocvar__menu_alpha;
+               }
+               HUD_Configure_DrawGrid();
+       }
+       else if(hud_configure_prev)
+       {
+               if(menu_enabled)
+                       menu_enabled = 0;
+               if(autocvar_hud_cursormode)
+                       setcursormode(0);
+       }
+ }
  
  const float hlBorderSize = 4;
  const string hlBorder = "gfx/hud/default/border_highlighted";
@@@ -1212,3 -1263,22 +1266,22 @@@ void HUD_Panel_HlBorder(float myBorder
        drawpic_tiled(panel_pos - '1 1 0' * myBorder + eY * hlBorderSize, hlBorder2, '1 8 0' * hlBorderSize, eY * (panel_size_y + 2 * myBorder - 2 * hlBorderSize) + eX * hlBorderSize, color, theAlpha, DRAWFLAG_NORMAL);
        drawpic_tiled(panel_pos - '1 1 0' * myBorder + eY * hlBorderSize + eX * (panel_size_x + 2 * myBorder - hlBorderSize), hlBorder2, '1 8 0' * hlBorderSize, eY * (panel_size_y + 2 * myBorder - 2 * hlBorderSize) + eX * hlBorderSize, color, theAlpha, DRAWFLAG_NORMAL);
  }
+ void HUD_Configure_PostDraw()
+ {
+       if(autocvar__hud_configure)
+       {
+               if(tab_panel)
+               {
+                       panel = tab_panel;
+                       HUD_Panel_UpdatePosSize()
+                       drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .2, DRAWFLAG_NORMAL);
+               }
+               if(highlightedPanel)
+               {
+                       panel = highlightedPanel;
+                       HUD_Panel_UpdatePosSize()
+                       HUD_Panel_HlBorder(panel_bg_border + 1.5 * hlBorderSize, '0 0.5 1', 0.25 * (1 - autocvar__menu_alpha));
+               }
+       }
+ }
index 75a280fe6e87cf4b882dd724602ca65d784337e4,3f30a6a722f7d3e805e6423facaca0b7ad81ab00..01862f5ebce06e8a8503fcda1d1a49e298257852
@@@ -1,21 -1,31 +1,30 @@@
  float mv_num_maps;
  
 -float mv_active;
  string mv_maps[MAPVOTE_COUNT];
  string mv_pics[MAPVOTE_COUNT];
  string mv_pk3[MAPVOTE_COUNT];
  float mv_preview[MAPVOTE_COUNT];
  float mv_votes[MAPVOTE_COUNT];
+ float mv_avail[MAPVOTE_COUNT];
+ float mv_avail_start[MAPVOTE_COUNT];
  entity mv_pk3list;
  float mv_abstain;
  float mv_ownvote;
  float mv_detail;
  float mv_timeout;
- float mv_maps_mask;
  float mv_top2_time;
  float mv_top2_alpha;
  
  vector mv_mousepos;
  float mv_selection;
+ float mv_columns;
+ float mv_mouse_selection;
+ float mv_selection_keyboard;
+ float gametypevote;
+ string mapvote_chosenmap;
+ vector gtv_text_size;
+ vector gtv_text_size_small;
  
  string MapVote_FormatMapItem(float id, string map, float count, float maxwidth, vector fontsize)
  {
@@@ -25,7 -35,7 +34,7 @@@
        {
                if(count == 1)
                        post = _(" (1 vote)");
-               else if(count >= 0)
+               else if(count >= 0 && mv_avail[id] == GTV_AVAILABLE)
                        post = sprintf(_(" (%d votes)"), count);
                else
                        post = "";
        return strcat(pre, map, post);
  }
  
- vector MapVote_RGB(float id, float count)
+ string GameTypeVote_DescriptionByID(float id)
+ {
+       return MapInfo_Type_Description(MapInfo_Type_FromString(mv_maps[id]));
+ }
+ vector MapVote_RGB(float id)
  {
-       if(count < 0)
+       if(mv_avail[id] != GTV_AVAILABLE)
                return '1 1 1';
        if(id == mv_ownvote)
                return '0 1 0';
                return '1 1 1';
  }
  
+ void GameTypeVote_DrawGameTypeItem(vector pos, float maxh, float tsize, string gtype, string pic, float count, float id)
+ {
+       float alpha;
+       float desc_padding = gtv_text_size_x * 3;
+       float rect_margin = hud_fontsize_y / 2;
+       vector rect_pos = pos - '0.5 0.5 0' * rect_margin;
+       vector rect_size = '1 1 0';
+       rect_size_x = tsize + rect_margin;
+       rect_size_y = maxh + rect_margin;
+       vector rgb = MapVote_RGB(id);
+       vector offset = pos;
+       float nlines = 0;
+       
+       if(mv_avail_start[id] != GTV_AVAILABLE)
+               alpha = 0.2;
+       else if ( mv_avail[id] != GTV_AVAILABLE && mv_top2_alpha)
+               alpha = mv_top2_alpha;
+       else
+               alpha = 1;
+       
+       if(id == mv_selection && mv_avail[id] == GTV_AVAILABLE)
+       {
+               drawfill(rect_pos, rect_size, '1 1 1', 0.1, DRAWFLAG_NORMAL);
+       }
+       if(id == mv_ownvote)
+       {
+               drawfill(rect_pos, rect_size, rgb, 0.1*alpha, DRAWFLAG_NORMAL);
+               drawborderlines(autocvar_scoreboard_border_thickness, rect_pos, rect_size, rgb, alpha, DRAWFLAG_NORMAL);
+       }
+       
+       entity title;
+       title = spawn();
+       title.message = MapVote_FormatMapItem(id, MapInfo_Type_ToText(MapInfo_Type_FromString(gtype)), 
+                                                                                 count, tsize, gtv_text_size);
+       title.origin = pos-offset;
+       
+       pos_y += gtv_text_size_small_y;
+       pos_y += gtv_text_size_y/2;
+       
+       maxh -= gtv_text_size_y;
+       
+       entity picent = spawn();
+       picent.origin = pos-offset;
+       picent.maxs = '1 1 0 ' * min(maxh, desc_padding) * 0.8;
+       
+       pos_x += desc_padding;
+       tsize -= desc_padding;
+       
+       string thelabel = GameTypeVote_DescriptionByID(id), ts;
+       entity last = title;
+       entity next = world;
+       if( thelabel != "") 
+       {
+               float i,n = tokenizebyseparator(thelabel, "\n");
+               for(i = 0; i < n && maxh > (nlines+1)*gtv_text_size_small_y; ++i)
+               {
+                       getWrappedLine_remaining = argv(i);
+                       while(getWrappedLine_remaining && maxh > (nlines+1)*gtv_text_size_small_y)
+                       {
+                               ts = getWrappedLine(tsize, gtv_text_size_small, stringwidth_colors);
+                               if (ts != "")
+                               {
+                                       next = spawn();
+                                       next.message = ts;
+                                       next.origin = pos-offset;
+                                       last.chain = next;
+                                       last = next;
+                                       pos_y += gtv_text_size_small_y;
+                                       nlines++;
+                               }
+                       }
+               }
+       }
+       
+       maxh -= max(nlines*gtv_text_size_small_y,picent.maxs_y);
+       if ( maxh > 0 )
+               offset_y += maxh/2;
+       drawstring(title.origin+offset, title.message, gtv_text_size, rgb, alpha, DRAWFLAG_NORMAL); 
+       
+       if(pic != "")
+               drawpic(picent.origin+offset, pic, picent.maxs, '1 1 1', alpha, DRAWFLAG_NORMAL);
+       
+       for ( last = title.chain; last ; )
+       {
+               drawstring(last.origin+offset, last.message, gtv_text_size_small, '1 1 1', alpha, DRAWFLAG_NORMAL);
+               next = last;
+               last = last.chain;
+               remove(next);
+       }
+       
+       remove(picent);
+       remove(title);
+ }
  void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, string pic, float count, float id)
  {
        vector img_size = '0 0 0';
  
        isize -= hud_fontsize_y; // respect the text when calculating the image size
  
-       rgb = MapVote_RGB(id, count);
+       rgb = MapVote_RGB(id);
  
        img_size_y = isize;
        img_size_x = isize / 0.75; // 4:3 x can be stretched easily, height is defined in isize
        text_size = stringwidth(label, false, hud_fontsize);
  
        float theAlpha;
-       if (count < 0 && mv_top2_alpha)
+       if (mv_avail[id] != GTV_AVAILABLE && mv_top2_alpha)
                theAlpha = mv_top2_alpha;
        else
                theAlpha = 1;
        else
                drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, '0 0 0', theAlpha, DRAWFLAG_NORMAL);
  
-       if(id == mv_selection && count >= 0)
+       if(id == mv_selection && mv_avail[id] == GTV_AVAILABLE)
                drawfill(pos, img_size, '1 1 1', 0.1, DRAWFLAG_NORMAL);
  }
  
@@@ -110,7 -219,7 +218,7 @@@ void MapVote_DrawAbstain(vector pos, fl
        float text_size;
        string label;
  
-       rgb = MapVote_RGB(id, count);
+       rgb = MapVote_RGB(id);
  
        pos_y = pos_y + hud_fontsize_y;
  
  vector MapVote_GridVec(vector gridspec, float i, float m)
  {
        float r;
-       r = mod(i, m);
+       r = i % m;
        return
                '1 0 0' * (gridspec_x * r)
                +
  
  float MapVote_Selection(vector topleft, vector cellsize, float rows, float columns)
  {
-       float cell;
        float c, r;
  
-       cell = -1;
+       mv_mouse_selection = -1;
  
        for (r = 0; r < rows; ++r)
                for (c = 0; c < columns; ++c)
                                mv_mousepos_y >= topleft_y + cellsize_y *  r &&
                                mv_mousepos_y <= topleft_y + cellsize_y * (r + 1))
                        {
-                               cell = r * columns + c;
+                               mv_mouse_selection = r * columns + c;
                                break;
                        }
                }
  
-       if (cell >= mv_num_maps)
-               cell = -1;
+       if (mv_mouse_selection >= mv_num_maps)
+               mv_mouse_selection = -1;
  
-       if (mv_abstain && cell < 0)
-               return mv_num_maps;
+       if (mv_abstain && mv_mouse_selection < 0)
+               mv_mouse_selection = mv_num_maps;
  
-       return cell;
+       if ( mv_selection_keyboard )
+               return mv_selection;
+       
+       return mv_mouse_selection;
  }
  
  void MapVote_Draw()
        vector pos;
        float isize;
        float center;
-       float columns, rows;
+       float rows;
        float tsize;
        vector dist = '0 0 0';
  
  
        if (!autocvar_hud_cursormode)
        {
-               mv_mousepos = mv_mousepos + getmousepos();
+               vector mpos = mv_mousepos + getmousepos();
+               mpos_x = bound(0, mpos_x, vid_conwidth);
+               mpos_y = bound(0, mpos_y, vid_conheight);
+               
+               if ( mpos_x != mv_mousepos_x || mpos_y != mv_mousepos_y )
+                       mv_selection_keyboard = 0;
+               mv_mousepos = mpos;
  
-               mv_mousepos_x = bound(0, mv_mousepos_x, vid_conwidth);
-               mv_mousepos_y = bound(0, mv_mousepos_y, vid_conheight);
        }
  
        center = (vid_conwidth - 1)/2;
        pos_z = 0;
  
        draw_beginBoldFont();
-       map = _("Vote for a map");
+       map = ((gametypevote) ? _("Decide the gametype") : _("Vote for a map"));
        pos_x = center - stringwidth(map, false, '12 0 0');
        drawstring(pos, map, '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
        pos_y += 26;
  
+       if( mapvote_chosenmap != "" )
+       {
+               pos_x = center - stringwidth(mapvote_chosenmap, false, hud_fontsize*1.5/2);
+               drawstring(pos, mapvote_chosenmap, hud_fontsize*1.5, '1 1 1', 1, DRAWFLAG_NORMAL);
+               pos_y += hud_fontsize_y*2;
+       }
        i = ceil(max(0, mv_timeout - time));
        map = sprintf(_("%d seconds left"), i);
        pos_x = center - stringwidth(map, false, '8 0 0');
        if(mv_abstain)
                mv_num_maps -= 1;
  
-       if(mv_num_maps > 3)
-       {
-               columns = 3;
-       } else {
-               columns = mv_num_maps;
-       }
-       rows = ceil(mv_num_maps / columns);
+       rows = ceil(mv_num_maps / mv_columns);
  
-       dist_x = (xmax - xmin) / columns;
+       dist_x = (xmax - xmin) / mv_columns;
        dist_y = (ymax - pos_y) / rows;
-       tsize = dist_x - 10;
-       isize = min(dist_y - 10, 0.75 * tsize);
  
-       mv_selection = MapVote_Selection(pos, dist, rows, columns);
+       if ( gametypevote )
+       {
+               tsize = dist_x - hud_fontsize_y;
+               isize = dist_y;
+               float maxheight = (ymax - pos_y) / 3;
+               if ( isize > maxheight )
+               {
+                       pos_x += (isize - maxheight)/2;
+                       isize = maxheight;
+               }
+               else
+                       dist_y += hud_fontsize_y;
+               pos_x = ( vid_conwidth - dist_x * mv_columns ) / 2;
+       }
+       else
+       {
+               tsize = dist_x - 10;
+               isize = min(dist_y - 10, 0.75 * tsize);
+       }
+       mv_selection = MapVote_Selection(pos, dist, rows, mv_columns);
  
-       pos_x += (xmax - xmin) / (2 * columns);
+       if ( !gametypevote )
+               pos_x += dist_x / 2;
        pos_y += (dist_y - isize) / 2;
        ymax -= isize;
  
        if (mv_top2_time)
                mv_top2_alpha = max(0.2, 1 - (time - mv_top2_time)*(time - mv_top2_time));
  
+       void (vector, float, float, string, string, float, float) DrawItem;
+       if(gametypevote)
+               DrawItem = GameTypeVote_DrawGameTypeItem;
+       else
+               DrawItem = MapVote_DrawMapItem;
        for(i = 0; i < mv_num_maps; ++i)
        {
                tmp = mv_votes[i]; // FTEQCC bug: too many array accesses in the function call screw it up
                map = mv_maps[i];
                if(mv_preview[i])
-                       MapVote_DrawMapItem(pos + MapVote_GridVec(dist, i, columns), isize, tsize, map, mv_pics[i], tmp, i);
+                       DrawItem(pos + MapVote_GridVec(dist, i, mv_columns), isize, tsize, map, mv_pics[i], tmp, i);
                else
-                       MapVote_DrawMapItem(pos + MapVote_GridVec(dist, i, columns), isize, tsize, map, "", tmp, i);
+                       DrawItem(pos + MapVote_GridVec(dist, i, mv_columns), isize, tsize, map, "", tmp, i);
        }
  
        if(mv_abstain)
@@@ -328,12 -471,35 +470,35 @@@ void MapVote_CheckPic(string pic, strin
        MapVote_CheckPK3(pic, pk3, id);
  }
  
+ void MapVote_ReadMask()
+ {
+       float i;
+       if ( mv_num_maps < 24 )
+       {
+               float mask, power;
+               if(mv_num_maps < 8)
+                       mask = ReadByte();
+               else if(mv_num_maps < 16)
+                       mask = ReadShort();
+               else
+                       mask = ReadLong();
+               
+               for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2)
+                       mv_avail[i] = (mask & power) ? GTV_AVAILABLE : GTV_FORBIDDEN;
+       }
+       else
+       {
+               for(i = 0; i < mv_num_maps; ++i )
+                       mv_avail[i] = ReadByte();
+       }
+ }
  #define NUM_SSDIRS 4
  string ssdirs[NUM_SSDIRS];
  float n_ssdirs;
  void MapVote_Init()
  {
-       float i, j, power;
+       float i, j;
        string map, pk3, s;
  
        precache_sound ("misc/invshot.wav");
        if(autocvar_hud_cursormode) { setcursormode(1); }
        else { mv_mousepos = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight; }
        mv_selection = -1;
+       mv_selection_keyboard = 0;
  
        for(n_ssdirs = 0; ; ++n_ssdirs)
        {
        mv_ownvote = -1;
        mv_timeout = ReadCoord();
  
-       if(mv_num_maps <= 8)
-               mv_maps_mask = ReadByte();
-       else
-               mv_maps_mask = ReadShort();
+       gametypevote = ReadByte();
+       
+       float mv_real_num_maps = mv_num_maps - mv_abstain;
+       if(gametypevote)
+       {
+               mapvote_chosenmap = strzone(ReadString());
+               if ( gametypevote == 2 )
+                       gametypevote = 0;
+               gtv_text_size = hud_fontsize*1.4;
+               gtv_text_size_small = hud_fontsize*1.1;
+               
+               if (mv_real_num_maps > 8 )
+                       mv_columns = 3;
+               else
+                       mv_columns = min(2, mv_real_num_maps);
+     }
+     else
+       {
+               if (mv_real_num_maps > 16)
+                       mv_columns = 5;
+               else if (mv_real_num_maps > 9)
+                       mv_columns = 4;
+               else if(mv_real_num_maps > 3)
+                       mv_columns = 3;
+               else
+                       mv_columns = mv_real_num_maps;
+       }
+       MapVote_ReadMask();
+       for(i = 0; i < mv_num_maps; ++i )
+               mv_avail_start[i] = mv_avail[i];
  
        // Assume mv_pk3list is world, there should only be 1 mapvote per round
        mv_pk3list = world; // I'm still paranoid!
  
-       for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2)
+       for(i = 0; i < mv_num_maps; ++i)
        {
                mv_votes[i] = 0;
  
-               if(mv_maps_mask & power)
-               {
-                       map = strzone(ReadString());
-                       pk3 = strzone(ReadString());
-                       j = bound(0, ReadByte(), n_ssdirs - 1);
-                       mv_maps[i] = map;
-                       mv_pk3[i] = pk3;
-                       map = strzone(strcat(ssdirs[j], "/", map));
-                       mv_pics[i] = map;
+               map = strzone(ReadString());
+               pk3 = strzone(ReadString());
+               j = bound(0, ReadByte(), n_ssdirs - 1);
  
-                       mv_preview[i] = false;
+               mv_maps[i] = map;
+               mv_pk3[i] = pk3;
+               mv_avail[i] = ReadByte();
  
-                       MapVote_CheckPic(map, pk3, i);
+               if(gametypevote)
+               {
+                       //map = strzone(strcat("gfx/menu/default/gametype_", map));
+                       //map = strzone(sprintf("gfx/menu/%s/gametype_%s", autocvar_menu_skin, map));
+                       string mv_picpath = sprintf("gfx/menu/%s/gametype_%s", autocvar_menu_skin, map);
+                       if(precache_pic(mv_picpath) == "")
+                               mv_picpath = strcat("gfx/menu/default/gametype_", map);
+                       map = strzone(mv_picpath);
+                       mv_pics[i] = map;
+                       mv_preview[i] = PreviewExists(map);
                }
                else
                {
-                       mv_maps[i] = strzone("if-you-see-this-the-code-is-broken");
-                       mv_pk3[i] = strzone("if-you-see-this-the-code-is-broken");
-                       mv_pics[i] = strzone("if-you-see-this-the-code-is-broken");
+                       map = strzone(strcat(ssdirs[j], "/", map));
+                       mv_pics[i] = map;
                        mv_preview[i] = false;
+                       MapVote_CheckPic(map, pk3, i);
                }
        }
  
        n_ssdirs = 0;
  }
  
+ void MapVote_SendChoice(float index)
+ {
+       localcmd(strcat("\nimpulse ", ftos(index+1), "\n"));
+ }
+ float MapVote_MoveLeft(float pos)
+ {
+       float imp;
+       if ( pos < 0 ) 
+               imp = mv_num_maps - 1;
+       else
+               imp = pos < 1 ? mv_num_maps - 1 : pos - 1;
+       if ( mv_avail[imp] != GTV_AVAILABLE && imp != mv_ownvote )
+               imp = MapVote_MoveLeft(imp);
+       return imp;
+ }
+ float MapVote_MoveRight(float pos)
+ {
+       float imp;
+       if ( pos < 0 ) 
+               imp = 0;
+       else
+               imp = pos >= mv_num_maps - 1 ? 0 : pos + 1;
+       if ( mv_avail[imp] != GTV_AVAILABLE && imp != mv_ownvote )
+               imp = MapVote_MoveRight(imp);
+       return imp;
+ }
+ float MapVote_MoveUp(float pos)
+ {
+       float imp;
+       if ( pos < 0 ) 
+               imp = mv_num_maps - 1;
+       else
+       {
+               imp = pos - mv_columns;
+               if ( imp < 0 )
+               {
+                       imp = floor(mv_num_maps/mv_columns)*mv_columns + pos % mv_columns;
+                       if ( imp >= mv_num_maps )
+                               imp -= mv_columns;
+               }
+       }
+       if ( mv_avail[imp] != GTV_AVAILABLE && imp != mv_ownvote )
+               imp = MapVote_MoveUp(imp);
+       return imp;
+ }
+ float MapVote_MoveDown(float pos)
+ {
+       float imp;
+       if ( pos < 0 ) 
+               imp = 0;
+       else
+       {
+               imp = pos + mv_columns;
+               if ( imp >= mv_num_maps )
+                       imp = imp % mv_columns;
+       }
+       if ( mv_avail[imp] != GTV_AVAILABLE && imp != mv_ownvote )
+               imp = MapVote_MoveDown(imp);
+       return imp;
+ }
  float MapVote_InputEvent(float bInputType, float nPrimary, float nSecondary)
  {
        float imp;
        {
                mv_mousepos_x = nPrimary;
                mv_mousepos_y = nSecondary;
+               mv_selection_keyboard = 0;
                return true;
        }
  
                case K_KP_8: localcmd("\nimpulse 8\n"); return true;
                case K_KP_9: localcmd("\nimpulse 9\n"); return true;
                case K_KP_0: localcmd("\nimpulse 10\n"); return true;
+               case K_RIGHTARROW:
+                       mv_selection_keyboard = 1;
+                       mv_selection = MapVote_MoveRight(mv_selection);
+                       return true;
+               case K_LEFTARROW:
+                       mv_selection_keyboard = 1;
+                       mv_selection = MapVote_MoveLeft(mv_selection);
+                       return true;
+               case K_DOWNARROW:
+                       mv_selection_keyboard = 1;
+                       mv_selection = MapVote_MoveDown(mv_selection);
+                       return true;
+               case K_UPARROW:
+                       mv_selection_keyboard = 1;
+                       mv_selection = MapVote_MoveUp(mv_selection);
+                       return true;
+               case K_KP_ENTER:
+               case K_ENTER:
+               case K_SPACE:
+                       if ( mv_selection_keyboard )
+                               MapVote_SendChoice(mv_selection);
+                       return true;
        }
  
        if (nPrimary == K_MOUSE1)
+       {
+               mv_selection_keyboard = 0;
+               mv_selection = mv_mouse_selection;
                if (mv_selection >= 0)
                {
                        imp = min(mv_selection + 1, mv_num_maps);
                        localcmd(strcat("\nimpulse ", ftos(imp), "\n"));
                        return true;
                }
+       }
  
        return false;
  }
  
  void MapVote_UpdateMask()
  {
-       float i, power;
-       float oldmask;
-       oldmask = mv_maps_mask;
-       if(mv_num_maps <= 8)
-               mv_maps_mask = ReadByte();
-       else
-               mv_maps_mask = ReadShort();
-       if((oldmask & mv_maps_mask) != oldmask)
-               if((oldmask & mv_maps_mask) == mv_maps_mask)
-                        sound(world, CH_INFO, "misc_invshot.wav", VOL_BASE, ATTEN_NONE);
-       // remove votes that no longer apply
-       for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2)
-               if (!(mv_maps_mask & power))
-                       mv_votes[i] = -1;
+       MapVote_ReadMask();
        mv_top2_time = time;
  }
  
  void MapVote_UpdateVotes()
  {
-       float i, power;
-       for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2)
+       float i;
+       for(i = 0; i < mv_num_maps; ++i)
        {
-               if(mv_maps_mask & power)
+               if(mv_avail[i] == GTV_AVAILABLE)
                {
                        if(mv_detail)
                                mv_votes[i] = ReadByte();
index d931efcff9b2976cf587c3d331d9e8c139260758,f5b3206ba3bbbb6bc259df0d920675a01a96d7a3..30c9e8e256efa5a2a1c281836979f01485e3b861
@@@ -54,20 -54,6 +54,6 @@@ string TranslateScoresLabel(string l
        }
  }
  
- void MapVote_Draw();
- void HUD_FinaleOverlay()
- {
-       /*vector pos;
-       pos_x = (vid_conwidth - 1)/2;
-       pos_y = 16;
-       pos_z = 0;*/
-       //drawpic(pos, "gfx/finale", '0 0 0', '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
-       //drawstring(pos, "END", hud_fontsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-       MapVote_Draw();
- }
  void Cmd_HUD_SetFields(float argc);
  void HUD_InitScores()
  {
@@@ -301,19 -287,15 +287,15 @@@ void Cmd_HUD_Help(
                "other gamemodes except DM.\n"));
  }
  
- string HUD_DefaultColumnLayout()
- {
-       return strcat( // fteqcc sucks
-               "ping pl name | ",
-               "-teams,race,lms/kills +freezetag/kills -teams,lms/deaths +freezetag/deaths -teams,lms,race,ka/suicides +freezetag/suicides -race,dm,tdm,ka,freezetag/frags ", // tdm already has this in "score"
-               "+tdm/kills +tdm/deaths +tdm/suicides ",
-               "+ctf/caps +ctf/pickups +ctf/fckills +ctf/returns ",
-               "+lms/lives +lms/rank ",
-               "+kh/caps +kh/pushes +kh/destroyed ",
-               "?+race/laps ?+race/time ?+race/fastest ",
-               "+as/objectives +nexball/faults +nexball/goals +ka/pickups +ka/bckills +ka/bctime +freezetag/revivals ",
-               "-lms,race,nexball/score");
- }
+ #define HUD_DefaultColumnLayout() \
+ "ping pl name | " \
+ "-teams,race,lms/kills +ft,tdm/kills -teams,lms/deaths +ft,tdm/deaths -teams,lms,race,ka/suicides +ft,tdm/suicides -race,dm,tdm,ka,ft/frags " /* tdm already has this in "score" */ \
+ "+ctf/caps +ctf/pickups +ctf/fckills +ctf/returns " \
+ "+lms/lives +lms/rank " \
+ "+kh/caps +kh/pushes +kh/destroyed " \
+ "?+race/laps ?+race/time ?+race/fastest " \
+ "+as/objectives +nb/faults +nb/goals +ka/pickups +ka/bckills +ka/bctime +ft/revivals " \
+ "-lms,race,nb/score"
  
  void Cmd_HUD_SetFields(float argc)
  {
        float have_name = 0, have_primary = 0, have_secondary = 0, have_separator = 0;
        float missing;
  
+       if(!gametype)
+       {
+               // set up a temporary scoreboard layout
+               // no layout can be properly set up until score_info data haven't been received
+               argc = tokenizebyseparator("0 1 ping pl name | score", " ");
+               ps_primary = 0;
+               scores_label[ps_primary] = strzone("score");
+               scores_flags[ps_primary] = SFL_ALLOW_HIDE;
+       }
        // TODO: re enable with gametype dependant cvars?
        if(argc < 3) // no arguments provided
                argc = tokenizebyseparator(strcat("0 1 ", autocvar_scoreboard_columns), " ");
                        hud_field[hud_num_fields] = SP_PL;
                } else if(str == "kd" || str == "kdr" || str == "kdratio" || str == "k/d") {
                        hud_field[hud_num_fields] = SP_KDRATIO;
-               } else if(str == "sum" || str == "diff" || str == "f-d") {
+               } else if(str == "sum" || str == "diff" || str == "k-d") {
                        hud_field[hud_num_fields] = SP_SUM;
                } else if(str == "name" || str == "nick") {
                        hud_field[hud_num_fields] = SP_NAME;
@@@ -527,7 -519,7 +519,7 @@@ string HUD_GetField(entity pl, float fi
        {
                case SP_PING:
                        if (!pl.gotscores)
-                               return "\xEE\x82\x8D\xEE\x82\x8D\xEE\x82\x8D"; // >>> sign
+                               return "\xE2\x96\xB6\xE2\x96\xB6\xE2\x96\xB6"; // >>> sign using U+25B6
                        //str = getplayerkeyvalue(pl.sv_entnum, "ping");
                        f = pl.ping;
                        if(f == 0)
                                        hud_field_icon1 = "gfx/scoreboard/playercolor_shirt";
                                        hud_field_icon1_rgb = colormapPaletteColor(floor(f / 16), 0);
                                        hud_field_icon2 = "gfx/scoreboard/playercolor_pants";
-                                       hud_field_icon2_rgb = colormapPaletteColor(mod(f, 16), 1);
+                                       hud_field_icon2_rgb = colormapPaletteColor(f % 16, 1);
                                }
                        }
                        return GetPlayerName(pl.sv_entnum);
@@@ -684,7 -676,7 +676,7 @@@ string HUD_FixScoreboardColumnWidth(flo
        return str;
  }
  
- void HUD_PrintScoreboardItem(vector pos, entity pl, float is_self, float pl_number)
+ void HUD_PrintScoreboardItem(vector pos, vector item_size, entity pl, float is_self, float pl_number)
  {
        vector tmp, rgb;
        rgb = Team_ColorRGB(pl.team);
                rgb_y = autocvar_scoreboard_color_bg_g + 0.5;
                rgb_z = autocvar_scoreboard_color_bg_b + 0.5; }
  
-       // Layout:
-       tmp_x = sbwidth;
-       tmp_y = hud_fontsize_y * 1.25;
-       tmp_z = 0;
+       vector h_pos = pos - '1 1 0';
+       vector h_size = item_size + '2 0 0';
        // alternated rows highlighting
        if(is_self)
-               drawfill(pos - '1 1 0', tmp + '2 0 0', rgb, scoreboard_highlight_alpha_self, DRAWFLAG_NORMAL);
-       else if((scoreboard_highlight) && (!mod(pl_number,2)))
-               drawfill(pos - '1 1 0', tmp + '2 0 0', rgb, scoreboard_highlight_alpha, DRAWFLAG_NORMAL);
+               drawfill(h_pos, h_size, rgb, scoreboard_highlight_alpha_self, DRAWFLAG_NORMAL);
+       else if((scoreboard_highlight) && (!(pl_number % 2)))
+               drawfill(h_pos, h_size, rgb, scoreboard_highlight_alpha, DRAWFLAG_NORMAL);
  
+       tmp_x = item_size_x;
        tmp_y = 0;
+       tmp_z = 0;
  
        for(i = 0; i < hud_num_fields; ++i)
        {
                        pos_x -= hud_size[i] + hud_fontsize_x;
                }
        }
+       if(pl.eliminated)
+               drawfill(h_pos, h_size, '0 0 0', 0.5, DRAWFLAG_NORMAL);
  }
  
  /*
@@@ -880,7 -874,7 +874,7 @@@ vector HUD_Scoreboard_MakeTable(vector 
                column_dim_x = hud_size[i] + hud_fontsize_x;
                if (scoreboard_highlight)
                {
-                       if (mod(i,2))
+                       if (i % 2)
                                drawfill(pos - '0 1 0' - hud_fontsize_x / 2 * '1 0 0', column_dim, '0 0 0', scoreboard_alpha_bg * 0.2, DRAWFLAG_NORMAL);
                }
                drawstring(pos, hud_title[i], hud_fontsize, rgb * 1.5, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
  
                        if (scoreboard_highlight)
                        {
-                               if (!mod(i,2))
+                               if (!(i % 2))
                                {
                                        if (i == hud_num_fields-1)
                                                column_dim_x = hud_size[i] + hud_fontsize_x / 2 + 1;
        pos_y += 1.25 * hud_fontsize_y; // skip the header
        pos_y += autocvar_scoreboard_border_thickness;
  
+       // item size
+       tmp_x = sbwidth;
+       tmp_y = hud_fontsize_y * 1.25;
        // fill the table and draw the rows
        i = 0;
        if (teamplay)
                {
                        if(pl.team != tm.team)
                                continue;
-                       HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localnum), i);
+                       HUD_PrintScoreboardItem(pos, tmp, pl, (pl.sv_entnum == player_localnum), i);
                        pos_y += 1.25 * hud_fontsize_y;
                        ++i;
                }
                {
                        if(pl.team == NUM_SPECTATOR)
                                continue;
-                       HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localnum), i);
+                       HUD_PrintScoreboardItem(pos, tmp, pl, (pl.sv_entnum == player_localnum), i);
                        pos_y += 1.25 * hud_fontsize_y;
                        ++i;
                }
  float HUD_WouldDrawScoreboard() {
        if (autocvar__hud_configure)
                return 0;
 +      else if (HUD_QuickMenu_IsOpened())
 +              return 0;
        else if (scoreboard_showscores)
                return 1;
        else if (intermission == 1)
@@@ -971,7 -967,7 +969,7 @@@ float average_accuracy
  vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size)
  {
        float i;
-       float weapon_cnt = WEP_COUNT - 3; // either minstanex/nex are hidden, no port-o-launch, no tuba
+       float weapon_cnt = WEP_COUNT - 3; // either vaporizer/vortex are hidden, no port-o-launch, no tuba
        float rows;
        if(autocvar_scoreboard_accuracy_doublerows)
                rows = 2;
        float fontsize = height * 1/3;
        float weapon_height = height * 2/3;
        float weapon_width = sbwidth / weapon_cnt;
-       float g_minstagib = 0;
+       float g_instagib = 0;
  
        drawstring(pos, sprintf(_("Accuracy stats (average %d%%)"), average_accuracy), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
        pos_y += 1.25 * hud_fontsize_y + autocvar_scoreboard_border_thickness;
        // column highlighting
        for(i = 0; i < weapon_cnt/rows; ++i)
        {
-               if(!mod(i, 2))
+               if(!(i % 2))
                        drawfill(pos + '1 0 0' * weapon_width * rows * i, '0 1 0' * height * rows + '1 0 0' * weapon_width * rows, '0 0 0', scoreboard_alpha_bg * 0.2, DRAWFLAG_NORMAL);
        }
  
        if(rows == 2)
                pos_x += weapon_width / 2;
  
-       if(switchweapon == WEP_MINSTANEX)
-               g_minstagib = 1; // TODO: real detection for minstagib?
+       if(switchweapon == WEP_VAPORIZER)
+               g_instagib = 1; // TODO: real detection for instagib?
  
        float weapon_stats;
        if(autocvar_scoreboard_accuracy_nocolors)
                self = get_weaponinfo(i);
                if (!self.weapon)
                        continue;
-               if ((i == WEP_NEX && g_minstagib) || i == WEP_PORTO || (i == WEP_MINSTANEX && !g_minstagib) || i == WEP_TUBA) // skip port-o-launch, nex || minstanex and tuba
+               if ((i == WEP_VORTEX && g_instagib) || i == WEP_PORTO || (i == WEP_VAPORIZER && !g_instagib) || i == WEP_TUBA) // skip port-o-launch, vortex || vaporizer and tuba
                        continue;
                weapon_stats = weapon_accuracy[i-WEP_FIRST];
  
                        weapon_alpha = 0.2 * scoreboard_alpha_fg;
  
                // weapon icon
-               drawpic_aspect_skin(pos, strcat("weapon", self.netname), '1 0 0' * weapon_width + '0 1 0' * weapon_height, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL);
+               drawpic_aspect_skin(pos, self.model2, '1 0 0' * weapon_width + '0 1 0' * weapon_height, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL);
                // the accuracy
                if(weapon_stats >= 0) {
                        weapons_with_stats += 1;
                        average_accuracy += weapon_stats; // store sum of all accuracies in average_accuracy
  
                        string s;
-                       s = sprintf(_("%d%%"), weapon_stats*100);
+                       s = sprintf("%d%%", weapon_stats*100);
  
                        float padding;
                        padding = (weapon_width - stringwidth(s, FALSE, '1 0 0' * fontsize)) / 2; // center the accuracy value
@@@ -1092,7 -1088,7 +1090,7 @@@ vector HUD_DrawMapStats(vector pos, vec
        float stat_monsters_killed, stat_monsters_total;
        float rows = 0;
        string val;
-       
        // get monster stats
        stat_monsters_killed = getstatf(STAT_MONSTERS_KILLED);
        stat_monsters_total = getstatf(STAT_MONSTERS_TOTAL);
@@@ -1189,7 -1185,7 +1187,7 @@@ vector HUD_DrawScoreboardRankings(vecto
                p = count_ordinal(i+1);
                if(grecordholder[i] == GetPlayerName(player_localnum))
                        drawfill(pos, '1 0 0' * sbwidth + '0 1.25 0' * hud_fontsize_y, hl_rgb, scoreboard_highlight_alpha_self, DRAWFLAG_NORMAL);
-               else if(!mod(i, 2) && scoreboard_highlight)
+               else if(!(i % 2) && scoreboard_highlight)
                        drawfill(pos, '1 0 0' * sbwidth + '0 1.25 0' * hud_fontsize_y, hl_rgb, scoreboard_highlight_alpha, DRAWFLAG_NORMAL);
                drawstring(pos, p, '1 1 0' * hud_fontsize_y, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
                drawstring(pos + '3 0 0' * hud_fontsize_y, TIME_ENCODED_TOSTRING(t), '1 1 0' * hud_fontsize_y, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
@@@ -1329,7 -1325,7 +1327,7 @@@ void HUD_DrawScoreboard(
                }
                pos = HUD_DrawScoreboardRankings(pos, playerslots[player_localnum], rgb, bg_size);
        }
-       else if(autocvar_scoreboard_accuracy && spectatee_status != -1 && !warmup_stage) {
+       else if(autocvar_scoreboard_accuracy && spectatee_status == 0 && !warmup_stage && gametype != MAPINFO_TYPE_NEXBALL) {
                if(teamplay)
                        pos = HUD_DrawScoreboardAccuracyStats(pos, Team_ColorRGB(myteam), bg_size);
                else
        float specs;
        specs = 0;
        tmp = pos;
+       vector item_size;
+       item_size_x = sbwidth;
+       item_size_y = hud_fontsize_y * 1.25;
+       item_size_z = 0;
        for(pl = players.sort_next; pl; pl = pl.sort_next)
        {
                if(pl.team != NUM_SPECTATOR)
                        continue;
                pos_y += 1.25 * hud_fontsize_y;
-               HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localnum), specs);
+               HUD_PrintScoreboardItem(pos, item_size, pl, (pl.sv_entnum == player_localnum), specs);
                ++specs;
        }
  
  
        // Print info string
        float tl, fl, ll;
-       str = sprintf(_("playing on ^2%s^7"), shortmapname);
+       str = sprintf(_("playing ^3%s^7 on ^2%s^7"), MapInfo_Type_ToText(gametype), shortmapname);
        tl = getstatf(STAT_TIMELIMIT);
        fl = getstatf(STAT_FRAGLIMIT);
        ll = getstatf(STAT_LEADLIMIT);
  
        // print information about respawn status
        float respawn_time = getstatf(STAT_RESPAWN_TIME);
+       if(!intermission)
        if(respawn_time)
        {
                if(respawn_time < 0)
diff --combined qcsrc/menu/classes.c
index 055827c94af5b9b6237c5ecd663cc7a5b6740a33,9f01ee3fbf08dc8c8a633916923eea028f0d14d1..61e855861defec9d8fc06366224f8b78514067bb
@@@ -26,6 -26,7 +26,7 @@@
  #include "xonotic/bigbutton.c"
  #include "xonotic/commandbutton.c"
  #include "xonotic/bigcommandbutton.c"
+ #include "xonotic/textlabel.c"
  #include "xonotic/dialog_firstrun.c"
  #include "xonotic/dialog_teamselect.c"
  #include "xonotic/dialog_sandboxtools.c"
  #include "xonotic/dialog_settings_video.c"
  #include "xonotic/dialog_settings_effects.c"
  #include "xonotic/dialog_settings_audio.c"
+ #include "xonotic/dialog_settings_game.c"
  #include "xonotic/dialog_settings_user.c"
+ #include "xonotic/dialog_settings_user_languagewarning.c"
  #include "xonotic/dialog_settings_misc.c"
  #include "xonotic/dialog_multiplayer.c"
- #include "xonotic/dialog_multiplayer_playersetup.c"
+ #include "xonotic/dialog_multiplayer_profile.c"
  #include "xonotic/tabcontroller.c"
- #include "xonotic/textlabel.c"
  #include "xonotic/slider.c"
  #include "xonotic/slider_resolution.c"
  #include "xonotic/checkbox.c"
@@@ -59,7 -61,6 +61,6 @@@
  #include "xonotic/dialog_quit.c"
  #include "xonotic/dialog_multiplayer_create.c"
  #include "xonotic/dialog_multiplayer_create_mutators.c"
- #include "xonotic/dialog_multiplayer_create_advanced.c"
  #include "xonotic/dialog_multiplayer_create_mapinfo.c"
  #include "xonotic/gametypelist.c"
  #include "xonotic/maplist.c"
  #include "xonotic/dialog_singleplayer_winner.c"
  #include "xonotic/dialog_credits.c"
  #include "xonotic/credits.c"
- #include "xonotic/dialog_multiplayer_playersetup_crosshair.c"
- #include "xonotic/dialog_multiplayer_playersetup_hud.c"
- #include "xonotic/dialog_multiplayer_playersetup_hudconfirm.c"
- #include "xonotic/dialog_multiplayer_playersetup_model.c"
- #include "xonotic/dialog_multiplayer_playersetup_view.c"
- #include "xonotic/dialog_multiplayer_playersetup_weapons.c"
+ #include "xonotic/dialog_settings_game_crosshair.c"
+ #include "xonotic/dialog_settings_game_hud.c"
+ #include "xonotic/dialog_settings_game_hudconfirm.c"
+ #include "xonotic/dialog_settings_game_model.c"
+ #include "xonotic/dialog_settings_game_messages.c"
+ #include "xonotic/dialog_settings_game_view.c"
+ #include "xonotic/dialog_settings_game_weapons.c"
  #include "xonotic/weaponslist.c"
- #include "xonotic/dialog_multiplayer_demo.c"
+ #include "xonotic/dialog_multiplayer_media.c"
+ #include "xonotic/dialog_multiplayer_media_demo.c"
+ #include "xonotic/dialog_multiplayer_media_demo_startconfirm.c"
+ #include "xonotic/dialog_multiplayer_media_demo_timeconfirm.c"
  #include "xonotic/demolist.c"
+ #include "xonotic/screenshotimage.c"
+ #include "xonotic/dialog_multiplayer_media_screenshot.c"
+ #include "xonotic/dialog_multiplayer_media_screenshot_viewer.c"
+ #include "xonotic/screenshotlist.c"
+ #include "xonotic/statslist.c"
+ #include "xonotic/dialog_multiplayer_media_musicplayer.c"
+ #include "xonotic/soundlist.c"
+ #include "xonotic/playlist.c"
  #include "xonotic/colorpicker.c"
  #include "xonotic/colorpicker_string.c"
  #include "xonotic/cvarlist.c"
  #include "xonotic/dialog_hudpanel_weapons.c"
  #include "xonotic/dialog_hudpanel_physics.c"
  #include "xonotic/dialog_hudpanel_centerprint.c"
+ #include "xonotic/dialog_hudpanel_buffs.c"
 +#include "xonotic/dialog_hudpanel_quickmenu.c"
  #include "xonotic/slider_picmip.c"
+ #include "xonotic/slider_particles.c"
+ #include "xonotic/slider_sbfadetime.c"
+ #include "xonotic/dialog_settings_misc_reset.c"
index b9653f05b2ca716ff54643e1c504eb0d767ae75a,6fa40bfac69cf687997ec45952d7b10eb7825d12..53c321428d5d02b12b40c3196f8bd31e680f8ae0
@@@ -5,20 -5,21 +5,21 @@@ CLASS(MainWindow) EXTENDS(ModalControll
        ATTRIB(MainWindow, firstRunDialog, entity, NULL)
        ATTRIB(MainWindow, advancedDialog, entity, NULL)
        ATTRIB(MainWindow, mutatorsDialog, entity, NULL)
-       ATTRIB(MainWindow, weaponsDialog, entity, NULL)
        ATTRIB(MainWindow, mapInfoDialog, entity, NULL)
        ATTRIB(MainWindow, userbindEditDialog, entity, NULL)
        ATTRIB(MainWindow, winnerDialog, entity, NULL)
        ATTRIB(MainWindow, serverInfoDialog, entity, NULL)
        ATTRIB(MainWindow, cvarsDialog, entity, NULL)
+       ATTRIB(MainWindow, screenshotViewerDialog, entity, NULL)
        ATTRIB(MainWindow, viewDialog, entity, NULL)
-       ATTRIB(MainWindow, modelDialog, entity, NULL)
-       ATTRIB(MainWindow, crosshairDialog, entity, NULL)
-       ATTRIB(MainWindow, hudDialog, entity, NULL)
        ATTRIB(MainWindow, hudconfirmDialog, entity, NULL)
+       ATTRIB(MainWindow, languageWarningDialog, entity, NULL)
        ATTRIB(MainWindow, mainNexposee, entity, NULL)
        ATTRIB(MainWindow, fadedAlpha, float, SKINALPHA_BEHIND)
        ATTRIB(MainWindow, dialogToShow, entity, NULL)
+       ATTRIB(MainWindow, demostartconfirmDialog, entity, NULL)
+       ATTRIB(MainWindow, demotimeconfirmDialog, entity, NULL)
+       ATTRIB(MainWindow, resetDialog, entity, NULL)
  ENDCLASS(MainWindow)
  #endif
  
@@@ -116,19 -117,23 +117,26 @@@ void MainWindow_configureMainWindow(ent
        i = spawnXonoticHUDInfoMessagesDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+       
        i = spawnXonoticHUDPhysicsDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+       
+       me.screenshotViewerDialog = i = spawnXonoticScreenshotViewerDialog();
+       i.configureDialog(i);
+       me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
        i = spawnXonoticHUDCenterprintDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
-       i = spawnXonoticHUDQuickMenuDialog();
+       i = spawnXonoticHUDBuffsDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
++      i = spawnXonoticHUDQuickMenuDialog();
++      i.configureDialog(i);
++      me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
        // dialogs used by settings
        me.userbindEditDialog = i = spawnXonoticUserbindEditDialog();
        me.cvarsDialog = i = spawnXonoticCvarsDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       // dialog used by singleplayer
-       me.winnerDialog = i = spawnXonoticWinnerDialog();
+       
+       me.resetDialog = i = spawnXonoticResetDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
-       // dialog used by multiplayer/join
-       me.serverInfoDialog = i = spawnXonoticServerInfoDialog();
+       me.languageWarningDialog = i = spawnXonoticLanguageWarningDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
-       // dialogs used by multiplayer/create
-       me.mapInfoDialog = i = spawnXonoticMapInfoDialog();
+       me.hudconfirmDialog = i = spawnXonoticHUDConfirmDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
-       me.advancedDialog = i = spawnXonoticAdvancedDialog();
-       i.configureDialog(i);
-       me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
-       me.mutatorsDialog = i = spawnXonoticMutatorsDialog();
+       // dialog used by singleplayer
+       me.winnerDialog = i = spawnXonoticWinnerDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
  
-       // dialogs used by multiplayer/player setup
-       me.crosshairDialog = i = spawnXonoticCrosshairDialog();
+       // dialog used by multiplayer/join
+       me.serverInfoDialog = i = spawnXonoticServerInfoDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       me.hudDialog = i = spawnXonoticHUDDialog();
+       
+       me.demostartconfirmDialog = i = spawnXonoticDemoStartConfirmDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
-       me.hudconfirmDialog = i = spawnXonoticHUDConfirmDialog();
+       me.demotimeconfirmDialog = i = spawnXonoticDemoTimeConfirmDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
-       me.modelDialog = i = spawnXonoticModelDialog();
-       i.configureDialog(i);
-       me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
-       me.viewDialog = i = spawnXonoticViewDialog();
+       // dialogs used by multiplayer/create
+       me.mapInfoDialog = i = spawnXonoticMapInfoDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
-       me.weaponsDialog = i = spawnXonoticWeaponsDialog();
+       me.mutatorsDialog = i = spawnXonoticMutatorsDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
  
        // mutator dialogs
        i = spawnXonoticSandboxToolsDialog();
        i.configureDialog(i);
  
        me.initializeDialog(me, n);
  
-       if(cvar_string("_cl_name") == "Player")
+       if(cvar_string("_cl_name") == cvar_defstring("_cl_name"))
                me.dialogToShow = me.firstRunDialog;
  }
  #endif